feat: registry consolidation — context / start / join (3.3.0) - #34
Merged
Conversation
…rror→BlockerError, stale fetched_at, CI checks_summary
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Canopy 4.0 phase 3: one registry read (
context) and a lazy-growth write path (start+join) so the feature ↔ repo ↔ branch ↔ path ↔ PR ↔ state map is a single source of truth the agent consults. Additive only — nothing removed from the MCP surface (that's phase 5).Design spec:
~/.claude/plans/2026-07-04-phase3-registry-design.md.context— the registry read (two intent-selected tiers)detectedposition. Authoritative for "where am I / what's my code state." A test asserts it makes no network call.--remote/remote=True): live PR review state + CIchecks_summary+ origin divergence, fetched at call time; falls back toprs.jsoncache flaggedstale+fetched_atwhen GitHub is unreachable.context(now a superset) and supersedesworkspace_context.start <alias>— begin new work (lazy)Resolves the issue provider best-effort, creates the feature with zero repos (partial-scope is first-class), marks it active. Idempotent (existing feature resumes).
canopy join <repo>— lazy repo joinCreates/adopts the active feature's branch in a repo, registers it, and promotes the feature to
slots.canonicalso the shipped enforcement gate recognizes commits there (preserving warm slots). This is the explicit write that keeps the registry truthful.Observe-as-advisory
contextand the SessionStart brief surface repos sitting on a feature branch that were neverjoin-ed (unregistered_join_candidate) — closing the raw-git checkout -bgap without ever auto-writing or blocking.Correctness
joinGitError→BlockerError,stale.fetched_at, and the CIchecks_summarythe design promised.coordinator.createnow treatsrepos=Noneas all-repos andrepos=[]as none (wasrepos or [...]), with a guard against a vacuous "all failed" raise on zero-repo create.Tests
973 passed. New:
test_registry,test_start,test_join,test_advisories,test_prs_cache,test_active+ brief/coordinator extensions.Version
3.3.0 (CHANGELOG updated).
workspace_contextMCP tool deprecated (removed in phase 5).