Skip to content

feat(daemon): multi-repo orchestration skeleton (roadmap-v0.6 F.3)#86

Merged
RNT56 merged 3 commits into
mainfrom
claude/v06-f3-multirepo
Jun 29, 2026
Merged

feat(daemon): multi-repo orchestration skeleton (roadmap-v0.6 F.3)#86
RNT56 merged 3 commits into
mainfrom
claude/v06-f3-multirepo

Conversation

@RNT56

@RNT56 RNT56 commented Jun 29, 2026

Copy link
Copy Markdown
Owner

Summary

Roadmap-v0.6 F.3 — bind multiple repos at startup and route a chat launch to the right one. New module crustcore_daemon::multirepo:

  • RepoBinding (id / path / verify / base_branch / keywords) — trusted setup data from config/CLI.
  • classify_repo(intent, repos) → Option<RepoId> — exactly one keyword hint → that repo; no hint + one bound repo → sole-repo default; ambiguous or unhinted-with-multiple → None (the dispatcher asks "which repo?" — a helpful failure, not a silent pick).

CI core vs live seam

  • CI core (4 tests): explicit-hint routing (incl. id-as-keyword); sole-repo default; ambiguous / unhinted / no-repos → None; case-insensitive + path-free (the intent matches keywords, never supplies a path).
  • Live seam (#[ignore], TODO(P10-multi-repo-live)): the --repo id=/path CLI startup + a simultaneous-task run — multi_repo_live_smoke, runbook §F.5.

Trust boundary

Repo paths come from config/CLI, never the model or user message text (invariant 7) — the intent is only matched against operator keywords. The global concurrency cap is unchanged (invariant 11).

Tests run

cargo xtask verifygreen (runbook-check: 29 ignored seams + 20 tags). Nano unchanged at 53.5% (daemon-only). Independent off main.

🤖 Generated with Claude Code

Adds crustcore_daemon::multirepo: RepoId, RepoBinding
(id/path/verify/base/keywords, from config/CLI), and a pure
classify_repo(intent, repos) -> Option<RepoId> that routes a chat launch —
exactly one keyword hint -> that repo; no hint + single bound repo ->
sole-repo default; ambiguous or unhinted-with-multiple -> None (dispatcher
asks "which repo?").

The intent matches only operator-supplied keywords and never supplies a
path (invariant 7); the global concurrency cap is unchanged (invariant 11).
The live --repo CLI startup + simultaneous-task run is the #[ignore]d
multi_repo_live_smoke (TODO(P10-multi-repo-live)), in runbook F.5.

4 new tests; daemon-only; zero nano impact. `cargo xtask verify` green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
RNT56 and others added 2 commits June 29, 2026 12:28
Adds parse_repo_binding (id=/path) + parse_repo_bindings (rejecting malformed
args and duplicate ids), so the multi-repo startup actually parses the
operator's --repo CLI args into RepoBindings that classify_repo routes over.
The id/path come only from the CLI (invariant 7); ambiguity/duplicates fail
helpfully.

Now the only #[ignore]d inch is the actual simultaneous-task daemon run
across the bound repos. 3 new tests; daemon-only; zero nano impact.
`cargo xtask verify` green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@RNT56 RNT56 merged commit d09f304 into main Jun 29, 2026
1 of 3 checks passed
@RNT56 RNT56 deleted the claude/v06-f3-multirepo branch June 29, 2026 21:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant