Repository navigation
Pin Reusable-Workflow Stubs by Placeholder and Tick the PlexCleaner Gates Item - #3836
Conversation
…ates Item Every hub pin in docs/reusable-workflows.md's stubs is now the `@<hub-main-commit-sha> # <release-tag>` placeholder, since no Dependabot scan reads a pin quoted in a document. Each catalog snippet keeps a literal minimum known-good pin. "Pinning", the snippets README, and STANDUP.md section 3 have the adopter resolve each pin to the latest release before committing, and "byte for byte" no longer covers the pin lines. The tests comparing doc stubs to snippets substitute the placeholder, and a new test holds both pin shapes. The Stage 2 PlexCleaner tracker item is ticked against PlexCleaner main. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sk Count Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
|
A recorded local strict-review pass covers head |
There was a problem hiding this comment.
🟡 Changes recommended
An active nit remains in the helper docstring, whose unclear grammar leaves the helper contract insufficiently explained.
1 open issue
What changed in this PR
This pull request updates reusable-workflow adoption guidance to use resolvable placeholder pins in documentation while preserving literal minimum-known-good pins in catalog snippets. It also records PlexCleaner Stage 2 adoption progress and strengthens pin-shape test coverage.
Changes:
- Replaces literal hub pins in documentation stubs with
<hub-main-commit-sha> # <release-tag>placeholders. - Adds guidance for resolving current release and commit pins before adoption.
- Preserves literal pins in catalog snippets and updates related regression tests.
- Updates onboarding documentation and marks PlexCleaner Stage 2 complete.
| File | Description |
|---|---|
tests/test_release_guards.py |
Adds placeholder normalization and pin-shape validation for documentation and snippets. |
STANDUP.md |
Directs adopters to resolve hub pins before committing workflow stubs. |
docs/reusable-workflows.md |
Documents placeholder-based pins, lookup guidance, and PlexCleaner Stage 2 completion. |
catalog/snippets/workflows/README.md |
Explains minimum-known-good literal pins and adopter resolution. |
Review effort: Lite
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #3836 +/- ##
===========================================
+ Coverage 81.60% 82.97% +1.36%
===========================================
Files 26 29 +3
Lines 9070 9747 +677
===========================================
+ Hits 7402 8088 +686
+ Misses 1668 1659 -9
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…t Stub to Its Snippet Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
A recorded local strict-review pass covers head |
|
Backlog burndown orchestrator, for the record. The worker reports that it wrote the |
…f Filing Issues (#3846) ## Summary Until now, filing an issue was always an acceptable way to dispose of a finding. backlog-burndown's file claim and its prose bound ("the next issue, filed") made filing the required route for a doc describing a group's own change. This PR closes those routes. A fix that can land in the pull request already open now lands there. Filing is kept for work that really needs its own lane. - **pr-review-conduct, outcome 4** (drive-pr carries it as an include): - An `introduced` finding is never filed. - An edge case on new code is fixed where its deployment can produce the input. Otherwise it is declined under Trust Boundaries. - A `pre-existing` correctness defect in a file the diff touches is fixed in this PR, within the same two-round budget. This uses the same file grain as the class sweep, and Merge Gate item 3 excepts these defects from the canonical tracker. - Only a `pre-existing` correctness defect **in code that runs**, elsewhere, is filed. - An edge case on new code follows Trust Boundaries' whole fix-or-decline test. - The open-ended "Any other deferral is filed" catch-all is gone. The only filings left are a design finding's untouched-file sites (one issue, per "Triaging findings") and a fix belonging to another repository. - **GOVERNANCE.md, Verification Discipline** (agent-conduct carries it as an include): the doc, manifest entry, or rule sentence describing changed behavior is a sibling the change put in disagreement. It is fixed in the change, not filed. - **backlog-burndown**: - Claims predict the docs that describe each fix. - A grown claim into an unclaimed file is granted at once. A grown claim into a held file is sequenced: the requester's PR waits for the holder's merge, and parks behind a holder that is stopped. A mutual wait is adjudicated as a conflict. A file on an unclaimed branch stops for the maintainer. - The prose bound admits units the change put in disagreement. - Growth into carried canonical content or a design change under a worker below `frontier` re-tiers the group, so that work never falls to a lower tier. - Hub workers read develop's copy of any skill develop has changed. This closes the stale-installed-skill gap behind the self-written reports on #3835, #3836, and #3838. - **local-strict-review**: the reviewer brief stops asking for wording, style, or consolidation remarks on text the diff did not write. Those were dropped anyway, so this only cuts output and disposal tokens. Maintainer decisions, 2026-11-02: - Lever 1: agreed. - Lever 2: file only code that runs. - In-file pre-existing defects: fix them in the PR. - Lever 3: rejected. ## Open `introduced` findings (loop stopped by the maintainer) There were twelve recorded local passes at the `frontier` tier, raising 10, 9, 8, 6, 3, 3, 5, 4, 4, 2, 6, and 3 findings. Nearly every finding was against text an earlier round had written. Of pass 11's six findings, 1 to 5 were fixed in d70a96e. Finding 6, which asked to revive the automatic re-tier, is declined: that hand-off drew new findings in every round, so it was replaced on purpose with the existing stop for the maintainer. By the maintainer's call, the last pass's findings get no further edit round. On 2026-11-02 the maintainer accepted both as known gaps (outcome 3): 1. `introduced`, backlog-burndown "Choosing the Worker's Model Tier": the tier-stop paragraph's "claim comment is extended first" does not repeat re-verify's limit to a file no branch holds. Read alone, it could extend a claim over a file another group holds. 2. `introduced`, pr-review-conduct outcome 4, last bullet: where the other repository's fix goes to the maintainer, no upstream issue exists for the local blocker record to name. ## Pre-existing findings, not filed - `pre-existing`, local-strict-review "The Carried-Content Sweep" with pr-review-conduct outcome 4: a sweep pass's findings are on units the sweep branch has not edited yet, so they route to the per-unit tracker rather than to a fix. - `pre-existing`, pr-review-conduct outcome 1 and "Triaging findings": the untouched-file sites of a design finding are routed two ways. One route files them as one issue, and the other drops them as a consolidation on untouched text. ## Replay of the 25 issues the run filed | Category | Issues | Under these rules | | --- | --- | --- | | Adjacent doc outside the claim | #3804, #3805, #3808, #3810, #3817, #3820, #3837 | Fixed in the originating PR through the predicted or granted claim. #3810 is a consolidation and #3817 is dead code, so each is fixed if in a touched file and otherwise dropped or listed | | Old defect next to the diff | #3813, #3821, #3824, #3825, #3833, #3834, #3841, #3844 | Fixed where it sits in a touched file or unit. Still filed only if it is code that runs elsewhere, which is about #3821, #3824, and #3841. #3833 keeps its canonical tracker | | Edge case past the done-definition | #3806, #3827, #3830, #3840, #3842 | `introduced`, so fixed in the PR or declined. #3830 is a contradiction the fix wrote and is never filed | | Decision | #3812, #3814, #3815, #3826 | Unchanged, still `decision` issues | Expected result for the same run: about 7 issues filed instead of 25. Closes on promotion: #3845 ## Verification - `scripts/build_dist.py --check`: generated distributions are current. - `prose_lint.py --diff origin/develop`: clean. - `spec/validate.py`: OK. - `repo_gate.py --check eol`: 0 issues. - Docker markdownlint and cspell: 0 issues. - local-strict-review: twelve passes recorded at the `frontier` tier. The receipt covers the pushed head. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…rge on a Running Hosted Review, and Gate Skill Description Length (#3843) Promotes the changes merged into `develop` since promotion #3797 to `main`, the end of an away-mode backlog burndown. - [#3803](#3803) exempts the Roslyn embedded-language marker (`// lang=json`, `language=`) from the prose gate's comment rules as a tool directive. - [#3807](#3807) has `local_review.py record` take `--report`, the file the reviewer wrote, bind the pass to its sha256, and derive the finding count from it. `status` gains `reportPath`. - [#3809](#3809) holds `pr_review.py merge` while a hosted review is still running on the head, and routes a declined Qodo finding to a dismiss request. - [#3811](#3811) dates an anchored `intentRef` by the section its anchor names, and lets a `driftNote` acknowledge a verified intent advisory. - [#3816](#3816) moves the null GraphQL node check into the shared `gh_graphql` transport as `NullNodeError`. - [#3818](#3818) explains the workspace-edit default in `GOVERNANCE.md` and names the aggregator's expression form. - [#3822](#3822) moves the abandon discard to the `backlog-burndown` orchestrator, aligns the abandoned-branch delete, and holds a grown agent-safety set. - [#3823](#3823) scopes the Husky prose gate to staged paths and adds `--skip-generated` so a named file inside a generated tree is skipped. - [#3828](#3828) reads Copilot's `Open findings:` label, drops the duplicate `null_node`, and matches `scripts/README.md` to the Merge Gate. - [#3829](#3829) bumps the two stale hub caller snippet pins and documents the fallback's mixed-pair refusal. - [#3831](#3831) keeps an inherited `GIT_DIR` from rerooting the prose gate's subdirectory git reads. - [#3832](#3832) gives `backlog-burndown` a disposition for a worker's standalone clone and keeps the agent-safety hold past a park. - [#3835](#3835) makes `carry.py check-sections` refuse what `apply-sections` would, and name an open fence. - [#3836](#3836) pins the reusable-workflow stubs by placeholder and ticks the PlexCleaner gates item. - [#3838](#3838) has the `runtime-secrets` audit dimension detect a bare `secrets/` directory from the tracked files that name it. - [#3839](#3839) gates skill descriptions at the 1024-character limit and trims every one over it. - [#3846](#3846) fixes an adjacent doc, an in-file pre-existing defect, and an edge case on new code in the open pull request instead of filing an issue for each, and keeps filing for code that runs elsewhere. - [#3847](#3847) refuses skill frontmatter that parses to a list or a scalar, so the description length gate cannot be bypassed. Fixes #3770 Fixes #3699 Fixes #3705 Fixes #3789 Fixes #1819 Fixes #727 Fixes #3710 Fixes #3706 Fixes #3623 Fixes #3687 Fixes #3617 Fixes #3757 Fixes #3790 Fixes #3786 Fixes #3785 Fixes #3772 Fixes #1657 Fixes #3443 Fixes #3824 Fixes #3817 Fixes #3805 Fixes #1666 Fixes #3700 Fixes #3821 Fixes #3771 Fixes #3794 Fixes #3825 Fixes #3690 Fixes #1472 Fixes #3813 Fixes #3719 Fixes #1592 Fixes #3845 🤖 Generated with [Claude Code](https://claude.com/claude-code)

Summary
uses:pin indocs/reusable-workflows.md's stubs now reads@<hub-main-commit-sha> # <release-tag>, the shape the maintainer chose on Adopter docs and catalog snippets hardcode a pin, so every one of them is stale #1472. No Dependabot scan reads a pin quoted in a document, so a literal there only went stale.catalog/snippets/workflows/snippet is unchanged and keeps its literal minimum known-good pin, which moves when a task's interface changes.spec/workflow_reuse.pyand the pin gate read them as canonical text.ghcommands that name the latest release and itsmaincommit. The snippets README andSTANDUP.mdsection 3 point there. "Byte for byte" no longer covers the pin lines.documented()helper, and the merge-bot stub is now compared too. A new test holds both pin shapes, placeholders in the doc and literals in the snippets, judging every hub reference including one with no tag comment.main. Resync With the Hub and Adopt the Hub Validate Task PlexCleaner#1064 merged intodevelopat84fd00eand was promoted in Promote the 3.23 Verify, Repair, and Delete Safety Fixes to Main PlexCleaner#1098 at1876563. Both validator callers passpython-directories: RegressionTests. The Stage 3, 4, and 5 PlexCleaner items it also bears on are filed as Re-Check the PlexCleaner Stage 3, 4, and 5 Items in the Reusable-Workflows Tracker Against Its main #3834 rather than widened into this change.Verification
spec/validate.py,test_audit_helpers.py, andspec/workflow_reuse.py --selftestall exit 0.Closes on promotion: #1472, #3813
🤖 Generated with Claude Code