Tracking: multi-forge spec breakdown (Forgejo + GitHub + GitLab behind ForgePort) #291

Closed
opened 2026-04-23 23:27:06 +00:00 by claude-desktop · 2 comments
Collaborator

Purpose

Meta-tracking issue for the specs/multi-forge.md breakdown. Boss will decompose the spec into one type:user-story issue per ## section (MF-1 … MF-9) on dispatch of /breakdown below.

Spec

  • Document: specs/multi-forge.md
  • Goal: add GitHub + GitLab adapters behind the existing ForgePort (#274), enable per-repo forge binding in config/agents.json, ship a forge-neutral MCP so skills stop hard-coding mcp__forgejo__*.
  • Parallel tracks documented at the bottom of the spec; only MF-4 is a hard gate.

Expected output

  • 9 child issues (MF-1 … MF-9), each type:user-story with the appropriate area:* label.
  • Summary comment back on this issue with the created issue numbers, skipped duplicates, and a suggested implementation order mirroring the spec's phase breakdown.

References

  • specs/multi-forge.md
  • apps/server/src/infrastructure/forge/forgejo-port.ts — port surface being generalized
  • apps/server/src/infrastructure/forge/forgejo-adapter.ts — reference adapter
  • PRs #274, #275, #276, #277, #278, #279, #280, #281 — hex migration that unlocked this work
## Purpose Meta-tracking issue for the `specs/multi-forge.md` breakdown. Boss will decompose the spec into one `type:user-story` issue per `##` section (MF-1 … MF-9) on dispatch of `/breakdown` below. ## Spec - Document: [`specs/multi-forge.md`](../src/branch/main/specs/multi-forge.md) - Goal: add GitHub + GitLab adapters behind the existing `ForgePort` (#274), enable per-repo forge binding in `config/agents.json`, ship a forge-neutral MCP so skills stop hard-coding `mcp__forgejo__*`. - Parallel tracks documented at the bottom of the spec; only **MF-4** is a hard gate. ## Expected output - 9 child issues (MF-1 … MF-9), each `type:user-story` with the appropriate `area:*` label. - Summary comment back on this issue with the created issue numbers, skipped duplicates, and a suggested implementation order mirroring the spec's phase breakdown. ## References - `specs/multi-forge.md` - `apps/server/src/infrastructure/forge/forgejo-port.ts` — port surface being generalized - `apps/server/src/infrastructure/forge/forgejo-adapter.ts` — reference adapter - PRs #274, #275, #276, #277, #278, #279, #280, #281 — hex migration that unlocked this work
Author
Collaborator

/breakdown specs/multi-forge.md

/breakdown specs/multi-forge.md
Collaborator

Created #292, #293, #294, #295, #296, #297, #298, #299, #300 from specs/multi-forge.md.

Security-labeled (area:security): #292, #293, #294, #295, #296, #297, #300.

Issue File Security Assignee
#292 — MF-1: GitHub adapter for ForgePort specs/multi-forge.md dev
#293 — MF-2: GitLab adapter for ForgePort specs/multi-forge.md dev
#294 — MF-3: Per-forge webhook ingress + signature verification specs/multi-forge.md dev
#295 — MF-4: Per-repo forge binding in config/agents.json + adapter factory specs/multi-forge.md dev
#296 — MF-5: Forge-neutral MCP namespace (mcp__forge__*) specs/multi-forge.md dev
#297 — MF-6: Cross-adapter ForgePort conformance suite specs/multi-forge.md dev
#298 — MF-7: Label + milestone bootstrap across forges specs/multi-forge.md dev
#299 — MF-8: Merge + review flow parity across forges specs/multi-forge.md dev
#300 — MF-9: Multi-forge runbook + docs specs/multi-forge.md dev

Suggested implementation order (mirrors the spec's phase breakdown):

  1. Phase 0 — hard gate: #295 (MF-4 config + factory). Everything else depends on it.
  2. Phase 1 — parallel:
    • Track A (adapter + harness, paired): #292#297
    • Track B (webhook ingress): #294
    • Track C (port extensions): #298, #299
  3. Phase 2 (depends on Phase 1 output): #293 (needs #297 harness), #296 (needs one non-Forgejo adapter live).
  4. Phase 3 (trailing docs): #300 (needs #292 + #293 live to smoke-test runbooks).

Notes:

  • No security label on this repo — used area:security instead, which the reviewer-routing layer already maps to reviewer-security (see label description).
  • No area:forge-style label exists; filed the adapter/infra stories under area:infra. Worth considering an area:forge addition later to separate adapter work from deployment/container infra.
  • Native POST /repos/.../issues/{n}/dependencies returned HTTP 404 ("IsErrRepoNotExist" with empty owner — Forgejo routing bug) for every edge. Fell back to body-text Depends on #N footers on #292, #293, #294, #296, #297, #298, #299, #300deps.ts picks these up. Run just deps-backfill when the native endpoint is fixed to promote the edges.
  • No duplicate titles detected; no batch cap hit (9 stories < 15).
Created #292, #293, #294, #295, #296, #297, #298, #299, #300 from `specs/multi-forge.md`. Security-labeled (`area:security`): #292, #293, #294, #295, #296, #297, #300. | Issue | File | Security | Assignee | |-------|------|----------|----------| | #292 — MF-1: GitHub adapter for ForgePort | specs/multi-forge.md | ✓ | dev | | #293 — MF-2: GitLab adapter for ForgePort | specs/multi-forge.md | ✓ | dev | | #294 — MF-3: Per-forge webhook ingress + signature verification | specs/multi-forge.md | ✓ | dev | | #295 — MF-4: Per-repo forge binding in config/agents.json + adapter factory | specs/multi-forge.md | ✓ | dev | | #296 — MF-5: Forge-neutral MCP namespace (`mcp__forge__*`) | specs/multi-forge.md | ✓ | dev | | #297 — MF-6: Cross-adapter ForgePort conformance suite | specs/multi-forge.md | ✓ | dev | | #298 — MF-7: Label + milestone bootstrap across forges | specs/multi-forge.md | | dev | | #299 — MF-8: Merge + review flow parity across forges | specs/multi-forge.md | | dev | | #300 — MF-9: Multi-forge runbook + docs | specs/multi-forge.md | ✓ | dev | **Suggested implementation order** (mirrors the spec's phase breakdown): 1. **Phase 0 — hard gate**: #295 (MF-4 config + factory). Everything else depends on it. 2. **Phase 1 — parallel**: - Track A (adapter + harness, paired): #292 → #297 - Track B (webhook ingress): #294 - Track C (port extensions): #298, #299 3. **Phase 2** (depends on Phase 1 output): #293 (needs #297 harness), #296 (needs one non-Forgejo adapter live). 4. **Phase 3** (trailing docs): #300 (needs #292 + #293 live to smoke-test runbooks). **Notes**: - No `security` label on this repo — used `area:security` instead, which the reviewer-routing layer already maps to `reviewer-security` (see label description). - No `area:forge`-style label exists; filed the adapter/infra stories under `area:infra`. Worth considering an `area:forge` addition later to separate adapter work from deployment/container infra. - Native `POST /repos/.../issues/{n}/dependencies` returned `HTTP 404` ("IsErrRepoNotExist" with empty owner — Forgejo routing bug) for every edge. Fell back to body-text `Depends on #N` footers on #292, #293, #294, #296, #297, #298, #299, #300 — `deps.ts` picks these up. Run `just deps-backfill` when the native endpoint is fixed to promote the edges. - No duplicate titles detected; no batch cap hit (9 stories < 15).
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/claude-hooks#291
No description provided.