Skip to content

Phase 5: spec and build plan for Option B as built, release drift check, supported repos - #25

Merged
irvingpop merged 1 commit into
mainfrom
phase5-option-b
Nov 1, 2026
Merged

irvingpop merged 1 commit into
mainfrom
phase5-option-b

Conversation

@irvingpop

Copy link
Copy Markdown
Member

Summary

Phase 5 records Option B as built and adds one guard to the release tool. No release is needed: nothing changes in the workflow or in review/src. The production pin stays 88e055f.

  • Spec and build plan: two org rulesets. The review ruleset 26132750 has only the workflows rule. The baseline ruleset 25787833 org-baseline (on ~ALL) has deletion, force push, signed commits and the pull request rule (1 approval, dismiss stale, Code Owners, squash only), with an org-admin-only pull_request bypass. Org-wide enforcement now means: add the supported repos to the review ruleset, then narrow its bypass to org admins and rename it claude-review. Decision log P5-1 to P5-7 (P5-8 reserved, see below).
  • Pin age 7 -> 2 days (P5-5). Dependency graph enforcement, secret scanning and push protection are phase 6 items in the build plan.
  • Release tool drift check (P5-7): make release-plan and make release list every org ruleset (all pages) and read each one. They fail closed when a ruleset outside RULESETS requires claude-review.yml (by repository id or path), when an id in RULESETS is missing, or when any ruleset requires a status check named like the review. RULESETS does not change: the baseline has no workflows rule.
  • docs/supported-repos.md: the 4 pilot repos (target) and START_HERE (candidate until it joins), plus the excluded active repos. A unit test parses it.
  • Bidi escapes in Python tests: raw U+202A-202E and U+2066-2069 in test_prefilter.py, test_publish.py and test_render.py are now \u escapes (identical ASTs), and a test keeps them out. A PR that touches these files is no longer hard-blocked by its own review. prefilter.py keeps its raw characters until the next release PR.

Baseline read-back (plan v2 3.6)

Canonical projection of GET /orgs/OperationCode/rulesets/25787833 on 2026-11-01: every expected value matches (name, enforcement, target, ~DEFAULT_BRANCH, ~ALL with no excludes, exactly the 4 rule types, all 8 pull_request parameters including require_extra_approval_for_unattributed_changes: true, bypass exactly OrganizationAdmin/pull_request).

Test plan

  • cd review && uv run pytest tests/unit: 2873 passed, 2 deselected
  • uv run pytest tests/unit -m release: 2 passed
  • release.py plan --sha 88e055f... --no-console against the live org (read-only): preconditions ok, drift check ok, both rulesets "pin no change"
  • After merge, owner: make release-rule-test RULE=fdrl_01AfACzupW3U4Bx361ZUbsyR SHA=88e055f0ebff003a3e07fe0d015fee6856692f2c (required after a tool change)
  • After merge, owner: make release-plan SHA=88e055f0ebff003a3e07fe0d015fee6856692f2c: drift check ok, both rulesets "no change"

Owner action: P5-8

The decision log reserves P5-8 for your written acceptance of the residuals in "Which run counts" (an earlier pass on the same SHA, the cross-PR effect of one head SHA, a pin rollback, run deletion) and of the pilot bypass. To give it, comment "accepted" on this PR. The entry with your name and the date goes in a follow-up commit. Phase 5 exit waits for it.

🤖 Generated with Claude Code

@irvingpop
irvingpop requested a review from a team as a code owner November 1, 2026 17:12
@github-actions

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

🔴 Hold deployment: Claude of Duty identified 2 items requiring attention

Mission: Review the code. Protect the branch. Deploy the future.

Caution

Incomplete file coverage blocks this PR. No waiver can clear it.
Next step for the author: fix the cause named in the row, then push. The review runs again on the new commit.

Severity Effect Where Finding Found by
🚫 Hard block Blocks, no waiver review/tests/unit/test_render.py Incomplete file coverage: file content not scanned: unterminated-private-key, in review/tests/unit/test_render.py File checks (code, no model)
⚠️ Not run Blocks, waivable Model passes Too large for automatic review. File checks ran, model checks did not. Workflow (code, no model)
File checks Review Security Supply chain Dependency review Coverage
🚫 1 hard block, 6 signals ⚠️ skipped, too large ⚠️ skipped, too large ⚠️ skipped, too large ✅ ok 🚫 incomplete

Run 41332305307, attempt 1 for head 3f946dd into main. The required workflow in the merge box is the result that counts.

Claude of Duty never approves a PR. A human reviewer gives the final approval.

📋 Full review record: reasons, checks, signals, finding details, model summaries, token usage

Reviewed snapshot

Head SHA Merge base SHA Base branch Run
3f946ddc94ac8c7caa0ffd740783efcf10b91b5f 88e055f0ebff003a3e07fe0d015fee6856692f2c main 41332305307, attempt 1

Reasons the gate failed

Reason Waivable? Detail
Change too large for the model review ✅ yes too large for automatic review
Hard block from the file checks 🚫 no incomplete-coverage in review/tests/unit/test_render.py
Hard block from the file checks 🚫 no incomplete-coverage (coverage record is not complete)

No waiver line is shown. At least one reason cannot be waived, so a waiver would not change the result.

Checks (code, no model)

Check Result Detail
Hard block 🚫 blocks Incomplete file coverage: file content not scanned: unterminated-private-key, in review/tests/unit/test_render.py
Coverage 🚫 NOT complete files in comparison 13, files collected 13, trees complete
Unavailable file ⚠️ unavailable review/tests/unit/test_render.py: unterminated-private-key
Dependency changes ✅ none
Dependency review job ✅ success

Signals (context only, never block)

  • ℹ️ Very long line: lines longer than 500 characters, in docs/build-plan.md, lines 35 194 253
  • ℹ️ Very long line: lines longer than 500 characters, in docs/claude-review-design.md, lines 11 41 61 86 574 575 578 843 1045 1051
  • ℹ️ Hidden zero-width character: zero-width characters U+200B, in review/tests/unit/test_prefilter.py, lines 1401
  • ℹ️ Text aimed at an AI reviewer: pattern ignore-instructions, in review/tests/unit/test_prefilter.py, lines 1401
  • ℹ️ Hidden zero-width character: zero-width characters U+200B, in review/tests/unit/test_publish.py, lines 884 903
  • ℹ️ Hidden zero-width character: zero-width characters U+200B, in review/tests/unit/test_render.py, lines 309

Dependency changes

None.

Finding details

Model output from untrusted input. Check it before you act on it. Verified means only that the quoted text is at that place. It does not mean the claim is true.

Blocking is decided by code from category and severity, never by the model. A finding in a blocking category blocks only at high or critical severity.

No findings from the passes that ran. The Review, Security, Supply chain pass did not run, so this is not a clean result.

Model summaries

Model output from untrusted input. Check it before you act on it. Verified means only that the quoted text is at that place. It does not mean the claim is true.

Pass Status Model Summary
Review ❌ skipped-size No summary. Reason: bundle status skipped-size
Security ❌ skipped-size No summary. Reason: bundle status skipped-size
Supply chain ❌ skipped-size No summary. Reason: bundle status skipped-size

Token usage

Pass Input Output Cache write Cache read Attempts
Review not recorded not recorded not recorded not recorded not recorded
Security not recorded not recorded not recorded not recorded not recorded
Supply chain not recorded not recorded not recorded not recorded not recorded
Recorded total not recorded not recorded not recorded not recorded not recorded

…ck, supported repos

Parts: design spec updates (P5 decision log, baseline ruleset, CODEOWNERS), build plan phases 5 and 6, release tool drift check on every org ruleset (spec P5-7), supported repo inventory with unit test, and test fixes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@irvingpop
irvingpop merged commit 1aeacd0 into main Nov 1, 2026
4 of 5 checks passed
@irvingpop
irvingpop deleted the phase5-option-b branch November 1, 2026 18:51
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