Connect Multiple Repositories to Project

Task 6368 · Done · Epic · created · updated

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 Done
    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 Done
    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 Done
    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 Done
    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 Done
    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 Done
    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 Done
    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 Done
    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 Done
    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 Done
    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 Done
    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 Done
    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 Done
    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 Done
    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 Done
    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)