Connect Multiple Repositories to Project
If the user has, say, twenty repos – one for the backend and another for the UI – they should be able to connect both of them to a project. Implement support for project with multiple repos
NB. I totally forgot there are non-monorepo projects and non-full satck developers :)
Subtasks
- [business_analysis] Connect Multiple Repositories to Project PRD: a project holds N repos (any forge), one primary; branch per repo; gate/stack/merge lane on the primary only; one runner sees all repos, one PR per changed repo; slots converge next session; migrate existing projects as primary. 7 operator decisions, 10 assumptions.
- [architecture] Connect Multiple Repositories to Project project_repos table (primary projected to projects cols); primary keeps slot path, others under repos/<pid>/_repos/<rid>, converge at session start w/ lossless worktree-move swap; per-repo creds; task_prs + all-PR settle. 9 children C1–C9. D8–D11 recorded.
- [plan] Connect Multiple Repositories to Project Split on the Architect's C1–C9 boundaries into 9 coder children across 4 phases (C1 → C2/C3/C7 → C4/C8/C9 → C5/C6). C9 depends on C8 so each wave has one migration. Tightened the done-checks with the §6 risk tests. No Required checks lines (mem-11178).
- Project repositories data model and API Built project_repos (primary projected onto projects, single writer + gate census), repos on project create/update/task_project_update with per-row 422s, expand-only backfill, ADR-0164. Full gate green; PR #5497 merged, dev deploy OK; dev: 65/65 projects backfilled. Follow-up #5498 (snapshot hardening) merged. Deferred: 409 on concurrent repos replace.
- Repositories table in project console Repositories table (add/edit/remove/make primary, per-row errors, 10/page), wizard + review, Projects "+N", docs. PR #5504 merged, dev deploy OK; all 10 ACs verified on dev. Full gate green bar 1 load-flaky unrelated spec (passes alone).
- Linux node multi-repo slot converge Linux nodes converge every project repo per slot at session start (_repos layout, lossless worktree-move primary swap, AS6 keep, per-repo failure isolation, drawer rows). Full gate green; PR #5502 merged, dev deploy OK; AC3.4(a)(b)(c)/AC3.5 verified on dev. Deferred: console-tab additionalDirectories, clone pre-warm, CP repo_id check (C4).
- GitHub triggers target any repo GitHub trigger Repository is now a select of the project's connected repos (default primary, Any allowed); API refuses an unconnected repo with a field error. Full gate green; #5499 + #5501 merged, dev deploys OK; dev save/reopen verified. Deferred: two-repo dev check until C2 (6381) ships.
- Runner delivery and credentials across repos Per-repo git tokens (404 outside project; broker reads repo from checkout location), jaah-forge exit 4 naming repo, prompt REPOSITORIES block, [repos] SessionStart. Full gate green; #5510+#5547+#5551 merged, deployed to dev. AC3.1+R3 verified on dev; AC3.2/3.3/2.1 unverified: dev GitHub connection revoked. Follow-up: reconnect, answer task 5047.
- Compliance scans cover every repo Compliance scans now cover every repo: one target and ledger row per repo, repos[] spec, per-repo jaah-audit, a section per repo with a ?repo= filter, expand-only migration. #5512 + follow-up #5522 merged, full gate green, dev deploys OK. AC8.1 verified on dev: both repos shown, each with its own sha. AC2.3 covered by tests; on dev the single-repo page has its old layout, but its own scan was still queued, so no results shown. Deferred: scope preview and facts read only the primary repo.
- Project memory and code map per repo Project memory and the code map now index every connected repository: per-repo heads and pointers (expand-only sibling table), repo-labelled and filterable search. PR #5529 merged, dev deploy succeeded; AC9.1 verified on dev with a screenshot. Full gate is green except Playwright smoke: 5 load flakes pass in isolation, and AC-8.3 also fails on develop (Task 6411). Deferred: per-repo claims, primary-swap re-keying, hook-tier injection of non-primary units.
- Task records and shows every PR task_prs plus a settle that refuses unmerged/unknown PRs (pr_urls), task.pr_observed from jaah-forge, every PR shown on detail/list (+N)/Finish. Full gate green, both reviews pass, #5559 merged. Dev deploy superseded by a newer run; AC4.1 dev oracle not run (C4's AC3.2 task never ran on dev).
- Windows and MicroVM multi-repo sessions Windows slots and MicroVM sessions carry every repo (per-repo mirrors, /jaah/repos share, resume add/keep/swap, broker repo_id by checkout, CP project_block.repos + guest prompt paths). Full gate green; PR #5558 merged. Deploy superseded by the next develop push; dev oracle deferred (D11).
- [finish] Connect Multiple Repositories to Project All 9 coders done; 14 PRs merged; Repositories UI live on dev. Cross-repo delivery (AC3.2/3.3/4.1/2.1) never run on dev → follow-up #6513; UI polish → #6514. Windows/MicroVM dev check deferred (D11).
- Run the cross-repo delivery oracle on dev (AC3.2 Ran the oracles on dev. AC3.2, AC3.3 and AC4.1 verified (tasks 5047, 5059, 5063). Fixed 2 defects: #5564 (repo with auto-merge off) and #5567 (foreign checkout not refused). Both merged and deployed; full gate green. AC2.1 partial: timesaver2-app#25 opened as before, but it is stuck in that project's merge lane, which never launches (pre-existing).
- Project Repositories section: UI polish from finish Repositories polish: checkbox now "Uses repositories", row gap under the table, Add row clears the Jarvis orb; "+N" already shows for multi-repo projects. Full gate green; PR #5560 merged; dev deploy succeeded; visual check at 780px and 360px passed. Deferred: table overflow at 481–560px.
Artifacts
Comments
- @Robert Zakiev Running this as epic
Activity
- Created
- Updated
- Runner started
- Ready
- Ready
- Ready
- Runner started
- Awaiting response
- Awaiting response
- Awaiting response
- Awaiting response
- Awaiting response
- Runner resumed
- Awaiting response
- Awaiting response
- Awaiting response
- Awaiting response
- Runner resumed
- Runner ended (done)
- Runner started
- Awaiting response
- Awaiting response
- Awaiting response
- Awaiting response
- Runner resumed
- Awaiting response
- Awaiting response
- Runner resumed
- Runner ended (done)
- Runner started
- Draft
- Draft
- Draft
- Draft
- Draft
- Draft
- Draft
- Draft
- Draft
- Draft
- Ready
- Ready
- Ready
- Ready
- Ready
- Ready
- Ready
- Ready
- Ready
- Ready
- Runner ended (done)
- Runner started
- Runner ended (done)
- Runner started
- Runner started
- Runner started
- Runner ended (done)
- Runner ended (done)
- Runner ended (done)
- Runner started
- Runner started
- Updated
- Runner ended (done)
- Runner started
- Runner ended (done)
- Runner ended (done)
- Runner started
- Runner started
- Awaiting response
- Awaiting response
- Awaiting response
- Awaiting response
- Runner resumed
- Runner resumed
- Runner ended (done)
- Runner ended (done)
- Runner started
- Ready
- Runner ended (done)
- Runner started
- Runner ended (done)
- Ready
- Runner started
- Awaiting response
- Awaiting response
- Runner resumed
- Runner ended (done)
- Runner ended (done)