feat(#651): add unmanaged registry mechanism; record add-to-project as single-hop#658
Conversation
… as single-hop Per the rollout-audit decision (#651): add-to-project stays on its single-hop `@add-to-project/stable` model (5 consumers; low-risk project-automation plumbing) — NOT worth a full ring-gate cutover. But `canary-rollout drift` flagged it (and the frozen-`@v2` infra reusables claude-code + pr-auto-review) as "unregistered", which is noise: they are intentionally out of the ring model. Adds an `unmanaged` block to canary-rings.json (mirrors the #1082/#1010 concept) that records intentionally-out-of-model reusables with a reason, and teaches `drift` to exclude them: - new `_unmanaged_reusables_for_host()` helper (parallels `_registered_...`); - `cmd_drift` computes `unregistered = present − registered − unmanaged` and reports the unmanaged set separately ("unmanaged (intentional, out of ring gate)"). Registered as unmanaged: add-to-project (#651, single-hop), claude-code + pr-auto-review (frozen-major @v2 infra). Effect (validated live, read-only): drift 6 → **3 unregistered** — now flags only the reusables that genuinely still need onboarding (feature-ideation #614, idea-enhancer #515, ci-failure-analyst #1159), with add-to-project/claude-code/pr-auto-review shown as intentional-unmanaged instead. canary_rollout.bats 95/95 (added an unmanaged-exclusion drift test); shellcheck no new error/warning findings. Closes #651. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (3)
📝 WalkthroughWalkthroughThe canary registry now declares unmanaged reusable workflows. Drift auditing reads these entries, reports them separately, and excludes them from unregistered findings. A Bats test verifies unmanaged and genuinely unregistered workflows are classified separately. ChangesUnmanaged drift handling
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant canary-rings.json
participant cmd_drift
participant HostWorkflows
canary-rings.json->>cmd_drift: unmanaged reusable declarations
cmd_drift->>HostWorkflows: read reusable paths
HostWorkflows-->>cmd_drift: present workflow paths
cmd_drift-->>cmd_drift: classify unmanaged and unregistered paths
Possibly related issues
Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
There was a problem hiding this comment.
Code Review
This pull request introduces a mechanism to exclude intentionally-unmanaged reusable workflows from the canary-rollout drift detection. It adds an "unmanaged" block to canary-rings.json for low-risk or frozen workflows, updates canary-rollout.sh to query and filter out these unmanaged reusables, and adds a corresponding BATS test. The review feedback suggests improving the robustness of the jq query when the unmanaged field is missing, and optimizing the nested set_difference calls into a single pass.
There was a problem hiding this comment.
Pull request overview
This PR updates the canary rollout registry and drift auditing so that intentionally out-of-ring-gate reusables can be recorded and excluded from “unregistered” drift noise, aligning the audit output with the documented single-hop/frozen-@v2 decisions.
Changes:
- Adds a new top-level
unmanagedregistry block tostandards/canary-rings.jsonwith host/reusable/reason metadata. - Extends
scripts/canary-rollout.sh driftto subtract unmanaged reusables from the “unregistered” set and report the unmanaged list per host. - Adds a Bats test ensuring drift does not flag unmanaged entries as unregistered.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| tests/canary_rollout.bats | Adds coverage for drift behavior when a reusable is intentionally marked unmanaged. |
| standards/canary-rings.json | Records intentionally out-of-model reusables in a new unmanaged section with reasons. |
| scripts/canary-rollout.sh | Adds _unmanaged_reusables_for_host() and updates cmd_drift to exclude unmanaged from unregistered drift. |
| echo " present *-reusable.yml (${#pres_arr[@]}):$pres_str" | ||
| # unregistered = present on the host but not in the registry. | ||
| unregistered="$(set_difference "$present" "$registered")" | ||
| [ "${#um_arr[@]}" -gt 0 ] && echo " unmanaged (intentional, out of ring gate) (${#um_arr[@]}):$um_str" | ||
| # unregistered = present on the host, minus registered agents AND intentionally-unmanaged (#651). | ||
| unregistered="$(set_difference "$(set_difference "$present" "$registered")" "$unmanaged_r")" |
Dev-Lead — fix-reviews (applied)Changes committed and pushed. |



Closes #651.
Decision
Per the rollout audit, add-to-project stays single-hop (
@add-to-project/stable, 5 consumers, low-risk plumbing) — not worth a full ring-gate cutover. The problem was only thatcanary-rollout driftflagged it (and the frozen-@v2infra reusablesclaude-code/pr-auto-review) as "unregistered" — noise, since they're intentionally out of the ring model.Change
Adds an
unmanagedblock tocanary-rings.json(the #1082/#1010 concept) recording intentionally-out-of-model reusables with a reason, and teachesdriftto exclude them:_unmanaged_reusables_for_host()helper (parallels_registered_…);cmd_drift:unregistered = present − registered − unmanaged, and reports the unmanaged set separately.Recorded as unmanaged:
add-to-project(#651, single-hop),claude-code+pr-auto-review(frozen-@v2infra).Effect (validated live, read-only)
drift6 → 3 unregistered — now flags only what genuinely needs onboarding (feature-ideation#614,idea-enhancer#515,ci-failure-analyst#1159); the three intentional ones show asunmanaged (intentional, out of ring gate).canary_rollout.bats95/95 (added an unmanaged-exclusion drift test); shellcheck no new error/warning findings.🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Bug Fixes
Tests