docs: answer the loop-engineering questions from the corpus and land the sweep's corrections - #1266
Conversation
|
Claude finished @kyle-sexton's task in 3m 42s —— View job PR Review —
|
|
Claude finished @kyle-sexton's task in 1m 29s —— View job Security Review
FindingsNo security issues found. All 35 changed files are documentation, version bumps, or skill description text. Detailed assessment below. plugin.json changes (3 files)All three vendor/SKILL.md (supply-chain risk — pre-existing safeguard maintained)The largest change (+332 lines) syncs the Boris Cherny tips baseline from 8.8.1 → 8.13.0. This file is third-party content. The hub
The new sections 96–115 added to loop-lane README (security posture improved)The account-scoped tee record change replaces a fail-open "assumes one account per machine" invariant with fail-closed behavior: a mismatched account identifier drops the guard mode to Markdown documentation (docs/, reference/, routines/)Thirty-one additional files are governance text, changelog entries, and conceptual clarifications. None contain credentials, tokens, embedded shell instructions, external fetches, or anything executable. No secrets patterns detected. GitHub ActionsNo Security review complete — 35 files examined, 0 findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 84ae41f314
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Addressed all three review findings — thanks, the moderate one was load-bearing. Moderate (loop-lane §6) — sharper than framed, and fixed. The review asked whether consuming lanes exist. They do: Checking them turned up the real defect. The platform statusline schema, the guard's only proactive data source, exposes no account identifier, so §6 as written required a field nothing supplies — unsatisfiable by any deployment, which is worse than the silent assumption it replaced. Attribution is now normative in three cases (matching / mismatching / unattributed), and the unattributed case is operable only by declaring single-account operation. That is the actual fix: a declaration is auditable, a silent assumption is not. The missing identifier is recorded as a known limitation with its resolution trigger, and the guard's writer already forward-passes any On handle format: deliberately unspecified, consistent with this corpus delegating every concrete value to a binding. What was missing was not the format but where it resolves from — now cited to the guard's reader contract.
Minor (autonomy CHANGELOG) — real ambiguity, though not for the stated reason. The entry did already carry "the narrower patch reading … was considered and not taken." The genuine problem is that under this plugin's Minor (long line) — rewrapped. All gates re-run green: markdownlint, offline lychee with fragment checking, changelog-parity bump gate, |
|
Claude finished @kyle-sexton's task in 2m 27s —— View job Re-review — post author response
One commit landed since the prior review ( Prior findings — all resolvedModerate (loop-lane §6 consuming-lane enumeration and satisfiability) — the sharpest response of the three, and correct. The fix surfaces a real defect the original framing missed: §6 as written required a field the platform doesn't expose, making the invariant unsatisfiable by any deployment. The new text handles this directly with a Known limitation, with its resolution trigger block rather than hiding it. The three attribution cases (matching / mismatching / unattributed) are normative; the unattributed case is operable only by DECLARING single-account operation in the binding, making the prior silent assumption auditable instead. The reader contract ( Minor (autonomy CHANGELOG tier narrative) — fixed. The entry now reads: "under this plugin's Minor (long line in Codex concern — valid observation, honestly addressedThe Codex review noted that the three consuming lane skills ( This remains true in the current commit — those files were not touched. But the statement is factually accurate (the platform exposes no account ID today), and it does not reassert the old silent single-account assumption. Each lane also already notes "any future account field" should be treated as user/AI-influenced untrusted input, which is consistent with §6's unattributed case. The genuine gap: none of the three lane skills cite §6 for the DECLARATION requirement that governs the unattributed case. A lane reader consulting only the skill body won't see the "DECLARING single-account operation" requirement. This is a documentation-completeness issue, not a correctness or safety issue — the normative rule lives correctly at the convention level, and the lanes don't contradict it. That follow-up (add a forward reference to §6's attribution block from the inlined floor section of each lane skill) is scoped identically to the VerdictApproved. All three prior findings closed. The account-attribution fix is the correct shape: document the platform limitation honestly, require an auditable declaration for the unattributed case, and record the resolution trigger so the invariant hardens automatically when the platform catches up — rather than claiming an invariant the current tooling cannot enforce. |
|
Claude finished @kyle-sexton's task in 2m 8s —— View job Security Review
No security issues found. All 38 changed files are governance documentation, version bumps, or skill description text. Detailed assessment follows. vendor/SKILL.md — supply-chain safeguard confirmed presentThe largest change (+332 lines) syncs the Boris tips baseline to 8.13.0. The file contains a pre-existing upstream self-update instruction at line 42:
This instruction is not new to this PR (confirmed by
The 20 new sections added (96–115) are pure tips text — source citations, X/Twitter thread summaries, and YouTube references. No shell commands, no loop-lane / rate-limit-guard account-attribution fix — security posture tightened, not weakenedThe §6 rewrite replaces a fail-open "single-account-per-machine assumption" with three explicit cases: identifier matching (trusted), identifier mismatching (treated as stale → conservative floor applies), and unattributed (declaration-required to operate). The mismatching case now correctly drops guard mode to The known limitation (no identifier available from the platform statusline schema today) is documented in place rather than papered over, with its resolution trigger recorded. That is better than a silent assumption. trigger-dispatch.md — one-entrypoint invariant, scope boundaryThe dispatch changes canonicalize the one-entrypoint invariant and write an explicit scope boundary. The scope definition tightens rather than loosens: it closes the prior ambiguity about whether an interactive session that doesn't claim items is "inside" the invariant (it isn't, and now that's written down — reducing the surface area a creative bad actor could argue was ungoverned). No second execution or claim path is introduced. Other changed files
Security review complete — 38 files examined, 0 findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1b6d5b765e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Claude finished @kyle-sexton's task in 1m 24s —— View job Re-review — post latest commit (
|
|
Claude finished @kyle-sexton's task in 1m 54s —— View job Security Review — PR #1266
No security issues found. All 38 changed files are governance documentation, version bumps, or skill description text. Assessment follows. vendor/SKILL.md — supply-chain safeguard confirmed present and unchangedThe +332-line addition syncs the Boris tips baseline to 8.13.0. The pre-existing upstream self-update instruction in
The 20 new sections (96–115) are pure tips text — source citations to X/Twitter threads and YouTube, workflow advice. No shell commands, no loop-lane §6 / rate-limit-guard reader-contract — security posture tightenedThe
The known platform limitation (no account field in the statusline schema today) is documented in place with a resolution trigger rather than concealed. This is a hardening of the prior posture.
trigger-dispatch.md — entrypoint invariant, scope boundaryThe canonicalization adds an explicit scope boundary to the one-entrypoint invariant. The boundary is: a surface is "inside" the invariant only when it claims a queued work item — an interactive session that does not claim is outside the invariant, not an exemption from it. This closes the prior ambiguity about ungoverned surfaces rather than opening any new path. No second execution path is introduced anywhere. GitHub ActionsNo All other changed files
Security review complete — 38 files examined, 0 findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f6c38af43e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Claude finished @kyle-sexton's task in 3m 26s —— View job Re-review — post latest commit (
|
|
Claude finished @kyle-sexton's task in 2m 40s —— View job Security Review — PR #1266 (HEAD:
|
Fleet scan — conflicts and alignmentScanned all 24 open PRs, ~60 local worktrees, open issues, and the sibling org repos before this sits any longer. Version collisions (3) — expected, left deliberatelyThree plugins have the same version claimed twice. Whoever merges second rebases and increments; the changelog-parity gate catches any mismatch at PR time, and renumbering now would guess a merge order that may not hold.
No content collisions. The file-level intersection across every open PR is exactly Scope corrected — #1218 owns the account-identity design#1218 already owns finding B4, filed on operator direction and scoped as "design review, not a patch", specifying a writer-side identity field, reader-side invalidation of latched state, and a re-audit of every lane body's inlined guard floor. This PR had pre-empted that: §6 imposed a declaration requirement that no lane body carries, and the convention's own byte-identical-floor rule would have obliged fanning it out to Alignment, not conflict
Sibling org repos ( |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 20a8e51991
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
No related issue: the rename was decided in-session; the follow-on
metadata work it unblocks is tracked under the issues in ## Related.
## Summary
Renames the `re-anchor` plugin to `discipline`. `re-anchor` is a bare
verb sitting among 60 noun-named siblings, its `re-` prefix presumes a
prior anchored state the conversation-start case does not have, and it
collides with the cognitive-bias term of art. `discipline` is the word
the plugin already used for itself 189 times ("a drift corrector for
research discipline") — the authors' own revealed vocabulary, not a
coinage, and legible to a reader who has never seen the plugin.
The verb "re-anchor" is deliberately KEPT (210 occurrences,
`context/re-anchor-audit-correct.md`, and 3 live trigger phrases). The
three defects above concern its use as a CONTAINER name; as the verb for
step 1 of the loop it is accurate. Changing it would touch eval
expectations and trigger keywords that `skill-quality:check` gates
against HEAD, so it belongs in a separate reviewable pass if wanted at
all.
Mechanically, 45 files:
- Directory moved with `git mv` so history is preserved
- `sweep-all-disciplines` skill renamed to `sweep-all`
- `plugin.json` name + version 0.9.0; marketplace entry name/source plus
a `renames` map entry so installed consumers migrate instead of hitting
`plugin-not-found`
- All `/re-anchor:*` invocations to `/discipline:*`;
`metadata.re-anchor-batch` to `discipline-batch`
- Cross-plugin references in `docs-hygiene`, `planning`, `review`,
`session-flow`, `source-control`, `work-items`
- CHANGELOG 0.9.0 entry carrying the full rationale and every rejected
candidate, plus a header pointer noting entries below 0.9.0 shipped
under the former name
Deliberately NOT rewritten: CHANGELOG history and `docs/topics/` — they
record releases and decisions that genuinely happened under the former
name.
## Test plan
- `claude plugin validate .` — passes; the `renames` chain terminates
- `markdownlint-cli2` over all 26 changed markdown files — 0 errors
- `git grep -i 're-anchor'` — 0 stale `/re-anchor:` invocations and 0
stale `plugins/re-anchor` paths outside CHANGELOG history and
`docs/topics/`; every remaining hit is the verb, verified file by file
- Repo-wide dead-link scan across 952 tracked markdown files — 0
introduced by this rename (9 pre-existing dead links remain in
`code-tidying`, `context7`, `playwright` vendor, and `docs-hygiene` doc
examples; untouched, not ours)
- Open-PR conflict scan — no open PR touches `plugins/re-anchor/` or
`plugins/discipline/`. Trivial single-file overlaps only: #1263
(`marketplace.json`, `README.md`), #1266
(`docs/conventions/loop-lane/README.md`), #1096 and #1033 (`README.md`)
- Rebased onto `origin/main` at `d39ea667`; clean
## Related
- Refs #1271 — skill-metadata description tightening; named this rename
as its blocker, unblocked once this merges
- Refs #1272 — filed from this work: rename detection in the fleet-sync
path so a `renames` map entry stops being required
- Refs #1258 — concerns the skill this PR renames from
`sweep-all-disciplines` to `sweep-all`
- Refs #1269 — its scope prefix becomes `discipline(do-your-research)`
after this merges
- Refs #1283 — filed from this PR's review: the `rename-references`
pattern library missed the two syntactic shapes that produced the six
stale references fixed in `930c97a4`
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01GSXnCLnmzk8y4cKv2y1z9f
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Locks the Brief for a topic that answers the loop-engineering question from this repo's own autonomy corpus rather than from vendor material, and carries the corrections an eleven-corrector re-anchor sweep raised against that corpus and against the vendored playbooks baseline. Records as settled prerequisites that boris-video-absorption's "no new skill" lock is scoped to the run-e2e/confirm lane rather than repo-wide, and that the verification self-improvement loop is already deferred-with-trigger there. Two deferred questions are marked USER-RESERVED: whether contract slices should persist on the default branch at all (fourteen do, against this convention's own prune-before-merge lifecycle), and the bump classification for two corpus findings whose owner sections make major-vs-minor genuinely ambiguous. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…rief Answers four of the topic's open questions from trigger-dispatch.md and routines.md, both read in full, replacing the vendor-taxonomy framing the re-anchor sweep identified as the root cause of the earlier misalignment. The handoff-ladder framing is dropped: the load-bearing split is by lifetime (session-scoped vs standing), and the vendor's time-based bucket straddles it. Nothing generates prompts at run time — a routine's stored prompt is a thin pointer to a version-controlled artifact. Withdraws the pull_request.closed recommendation outright rather than narrowing it: pr-queue-tending is already a v1 class on a daily schedule slot, and event-riding wakes the same ratified surface with classification invariant, so the event trigger adds nothing. Records the structural ceiling that vendor-hosted executors cap at human-gated merge policy, which bounds any design placing merge authority behind a hosted routine. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…rpus Phase 1's corpus read is complete, so the substrate/cost branch resolves from the contract rather than from vendor framing. Cloud routines are entitlement-included, so a $0 budget excludes only the usage-credit overage toggle; the binding constraint is contention over the shared subscription window, which is the property finding B5 names and the mechanism it wrongly prescribes. The upstream comparison table and usage-and-limits section are cited, not restated, per the pointer-not-copy constraint, and the unverified L3 question is flagged at the claim. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
The queue's promotion apparatus consumes an evidence predicate over queryable telemetry keyed on the work-item join attribute. The three verification skills key on a topic slug and a commit SHA and carry no work-item reference at all, so no query-side join exists — and a skill-side signal would come from an agent-writable surface the classification rules refuse. The boundary is deliberate: interactive work is exempt from capture, and the association comes from the lease on the autonomous path. No change to the verification skills is warranted here. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Step 0 was already the lever-fit router across /goal, /loop, routines and /schedule, a Stop hook, and a one-shot prompt, but the description sold only the drafting half — so the question that most needs the router never reached it. The routing now leads, with five lever-selection triggers added and every existing trigger phrase preserved. Step 2 also enumerated a condition shape the skill's own gotcha forbids hardcoding, and the restatement had already drifted from the live page. Both it and Step 3's tightening rule now defer to what Step 1 reads live. Minor 0.26.0. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Ran /playbooks:update --apply rather than hand-copying. The delta is additive — vendor sections 1-95 verified byte-identical by diff — and carries twenty new sections, moving the counts to 127 tips across 115 sections. Distilled the new material into four reference buckets following upstream's own thread grouping: finding your unknowns (96-99), loops (100-103), /checkup and automation as infrastructure (104-109), and the Claude 5 context-engineering rules plus Opus 5 (110-115). The hub's hardcoded counts, Topic Index, Quick Reference, and source-date footer move with them, as does the plugin README's pack row. The vendored baseline stays untrusted third-party data; its self- installing UPDATE CHECK block is still refused by the guard in the hub and in /playbooks:update, neither of which the sync touches. Minor 0.4.0. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
The slice cited docs/conventions/consumer-config-layering/, retired by the #1188 rename. The tombstone still redirects, so nothing was broken — but a live slice should name the living convention. Verified the cited structures survive the rename: config-cascade still carries the three layers and the Implementers table. Changelog mentions of the old name are historical records and stay. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
The single-account-per-machine invariant justified itself by describing how the guard happened to be built, and it fail-OPENED in a contract that fail-closes on every other unresolvable input — a second account's healthy windows were simply trusted. The tee record now carries the account identifier its windows were observed under, and a mismatch is treated exactly like a stale record. Re-derivation was triggered only by a new model release, so the upstream-sourced claims carried a dated stamp with no expiry, which reads as standing authority the longer it sits. A second trigger now binds any change that relies on such a claim. Both entries state the major-vs-minor case both ways; the version is deliberately unassigned because the classification is the operator's. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ariant The determinism rule prescribed plain cron — a substrate — inside a contract whose own hosting stance holds that hosting binds per deployment. The invariant is no agent session and zero agent tokens; the substrate follows the binding. Its categorical "never" also concealed the hybrid detect/judge split defined two paragraphs below, inviting a reader to stop classifying, so determinism is now stated as a per-portion verdict. Every leaf, the catalog legend, and the setup skill's reconciliation rule and evals move with the vocabulary. The one-entrypoint invariant was restated six ways across five documents and the restatements had already drifted — each named a different subset of the paths it forbids a second of. It now has one canonical statement that the others cite. The escalation channel and the runner's hand-back stay separate, narrower invariants; folding either into dispatch would have been a regression dressed as deduplication. Its scope was never written, so whether a surface that touches a repository without claiming a queued item fell under it was unanswerable. The boundary now keys on what a surface does, never what it is called. Version deliberately unbumped: the determinism entry's tier is genuinely ambiguous and the classification is the operator's. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…fixes Withholding the version was a third option nobody chose: the reserved question is major-vs-minor, and both answers produce a version, while no version at all leaves the plugin undeliverable. Both are set to the safer reading with the downgrade path stated at the heading. The brief still described B4 and B5 as open defects after this branch fixed them, which would send a reviewer looking for something that is no longer there. Both paragraphs now point at the landed remedy. Also names the one-channel invariant explicitly, so the runner escalation leaf's citation of it lands on something a reader can find. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Operator confirmed minor for autonomy and major for loop-lane. Each heading now records the ratified tier and the narrower reading that was considered and not taken, rather than leaving the question open. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ited once Review caught that §6 required an account identifier. The platform statusline schema — the guard's only proactive data source — exposes none, so the rule as written could not be met by any deployment, which is worse than the silent assumption it replaced. Attribution is now normative in three cases, and the unattributed one is operable by DECLARING single-account operation: a declaration is auditable where an assumption is not, which was the actual defect. The missing identifier is recorded as a known limitation with its resolution trigger, and the guard's writer already forward-passes an account key, so the identifier cases go live with no plugin change. rate-limit-guard carried its own copy of the retired assumption while naming §6 as its owner, so the copy contradicted the contract it cited. Dropped in favor of the citation (0.2.0). Two forward references in the same doc were stale — all three lane adopters and the guard plugin have shipped. Also disambiguates the autonomy tier note (0.x minor is the vocabulary slot, not the lesser reading) and rewraps one long line. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Three gaps in the slice itself. The bump-classification deferred question was answered before the PR opened but still read as reserved. The Plan section still said "not yet written" on a topic that had finished, which after merge would read as an abandoned slice. And the follow-ups this topic surfaced but did not take lived only in the gitignored memory tier, which does not survive the checkout — the github-plugin-candidates citations, the unset worktree_root key and the dotfiles flow it needs, the live skill-listing budget overflow, and the two interview branches that were never closed. Recorded where they survive. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
#1261 merged first and shipped `playbooks` 0.4.0, so this branch's claim on that number no longer holds. The tier is unchanged — still minor, now measured from 0.4.0 rather than 0.3.2 — and no content moved: the entry is the same boris 8.8.1 → 8.13.0 sync and its four reference buckets, sitting above #1261's entry in the same newest-first file. Co-authored-by: Claude <noreply@anthropic.com>
Rebasing onto a moved default branch invalidated two statements in the brief that were accurate when written: - #1276 renamed the `re-anchor` plugin to `discipline` and its sweep skill to `sweep-all`. The TLDR now cites the live surface, `/discipline:sweep-all`. - #1261 added a fifteenth contract slice, so the deferred question's count of persisting slices moves from fourteen to fifteen. Counted on the default branch, which is what the question is about — this branch's own slice is the sixteenth and is not yet merged. Co-authored-by: Claude <noreply@anthropic.com>
20a8e51 to
da7eb47
Compare
|
Claude encountered an error after 1m 15s —— View job Security Review — PR #1266 (HEAD:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: da7eb4797f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Claude encountered an error after 1s —— View job I'll analyze this and get back to you. |
|
Claude encountered an error after 0s —— View job I'll analyze this and get back to you. |
The 0.2.0 entry claims the single-account framing now lives only in loop-lane §6, but three copies still presented it locally as this plugin's own invariant: the README feature list, the tee wrapper's header, and the stop-recorder hook's sink note. A reader consulting any of them still saw multi-account operation described as a supported mode resting on an assumption, rather than as the unsafe gap §6 now documents. Each now states the local fact — the file is last-writer-wins and carries no account id — and cites §6 for the framing, matching what the reader contract already does. Co-authored-by: Claude <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 2m 57s —— View job Re-review — post latest commit (
|
| File | Before | After |
|---|---|---|
README.md:31 |
"Single account per machine." (stated as a feature bullet) | "Multi-account operation is a known gap, not a supported mode." (cites §6) |
statusline-tee.sh:29 |
single-account-per-machine invariant |
loop-lane §6 owns that gap's framing |
hooks/record-rate-limit-stop.sh:15 |
single-account-per-machine invariant |
no-account-id scope |
The diff is minimal and correct in each case — local fact stated (file is last-writer-wins, no account id), §6 cited as the framing owner, no restatement of the gap rationale.
No new CHANGELOG entry is needed: 0.2.0 already documents the intended deduplication state; this commit brings the implementation into conformance with what that entry already declared.
Codex P2 from da7eb47 — resolved
The finding was: the 0.2.0 CHANGELOG entry claimed framing lives only in §6, but README.md:31-34 and statusline-tee.sh:29-30 still presented it locally as an invariant. Both copies are corrected. The hook copy (not flagged explicitly) is also cleaned up. The CHANGELOG's claim is now accurate for those three surfaces.
Prior advisory findings — status unchanged
reader-contract.md:101 (Codex P2 from review of 20a8e51) — the block in the Invariants section still describes the failure mode locally ("a mid-drain login to a second account feeds that account's healthy windows to lanes exhausted on the first") before citing §6 as the owner. Codex's preferred form was a bare citation plus the guard-local forward-passing detail. The citation is present and correct ("The loop-lane convention §6 owns the framing and records it as a gap"); the brief local description of the failure mode is the residual. This is advisory and was assessed non-blocking in the prior round — §6 is unambiguously cited as the authoritative source, so divergence requires a §6 edit, not just a local one. Unchanged.
trigger-dispatch.md:169 (scope boundary) — advisory, non-blocking. Unchanged from prior round.
lifecycle.md:17 (cite-vs-restate) — advisory, non-blocking. Unchanged from prior round.
Verdict
Approved. c730f49 is a direct and correct response to the last open Codex P2: it removes the three local restatements of the single-account framing that the 0.2.0 CHANGELOG entry had already documented as deduplicated. All prior blocking findings are closed. The three advisory items carry forward unchanged from the prior round's assessment.
|
Claude finished @kyle-sexton's task in 2m 52s —— View job Security Review — PR #1266 (HEAD:
|
Review threads — dispositionsResolving the six open Codex threads. Five were answered substantively in the two comments above but never marked resolved; the sixth is new on Fixed this round"Remove the remaining single-account invariant wording" (
All three now state the local fact (last-writer-wins, no account id) and cite §6 for the framing, matching what Previously answered, resolving now
Not doneThe account-identity design itself — writer-side field, reader-side latch invalidation, lane-floor re-audit — is #1218, unchanged. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c730f4984e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…es open The determinism rule fixes a property — no agent session, zero agent tokens — and states the substrate carrying it is a deployment-owned binding, never a mechanism named here. Eight sites still named one: - six hybrid catalog rows labelled their detection portion `DET ... -> cron` - the trigger table glossed `schedule` as a "cron-fired cadence" - the tech-debt-sweep leaf called recipe-driven remediation "cron-scoped work" An adopter binding deterministic work to a non-cron substrate read the rule and the catalog as contradicting each other, with the catalog's concreteness winning. Each site now carries the property the rule fixes. The setup skill's `ci-cron` / `local-scheduler` tokens are untouched: those are `scheduler_class` values in an org's own binding, which is where the rule says a mechanism belongs. Co-authored-by: Claude <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 2m 9s —— View job Re-review — post latest commits (
|
| Site | Before | After |
|---|---|---|
| Trigger table gloss | cron-fired cadence |
a fired cadence |
postmortem-followup-sweep |
DET detect → cron |
DET detect (no agent session) |
flaky-test-quarantine |
DET detect → cron |
DET detect (no agent session) |
dependency-update-wave |
DET detect → cron |
DET detect (no agent session) |
license-compliance-audit |
DET scan → cron |
DET scan (no agent session) |
tech-debt-sweep (catalog row) |
DET recipes → cron |
DET recipes (no agent session) |
release-notes-generation |
DET cut mechanics → cron |
DET cut mechanics (no agent session) |
tech-debt-sweep.md leaf |
cron-scoped work |
no-agent-session work |
The fix is the right shape: carry the property (no agent session, zero agent tokens), not the substrate. The setup skill's ci-cron / local-scheduler tokens are correctly left untouched — those are scheduler_class values in an org's own binding, which is exactly where the rule says a mechanism belongs. A scan of routines.md and tech-debt-sweep.md shows zero remaining cron substrate labels.
da7eb47 docs(topics): refresh two brief claims invalidated by newer main
Two factual corrections to PLAN.md necessitated by rebasing onto a moved default branch:
re-anchorplugin renamed todiscipline, sweep skill renamed tosweep-allby refactor(discipline): rename re-anchor plugin to discipline #1276 — the TLDR now cites/discipline:sweep-all. Correct.- feat(playbooks): adopt the fable field guide audit remediations into fable-5 #1261 added a fifteenth contract slice, so the deferred-question count moves from 14 → 15. Correct (the present branch is the sixteenth and not yet merged).
Both corrections are accurate and self-contained.
54ea8ab chore(playbooks): renumber the bump to 0.5.0 after #1261 took 0.4.0
#1261 merged first and shipped playbooks 0.4.0, so this branch increments to 0.5.0. Three touch-points updated consistently: plugin.json (4: "version": "0.5.0"), CHANGELOG.md (heading ## [0.5.0] with an explanation of the renumbering), and PLAN.md. The bump tier (minor) is unchanged.
Version consistency at HEAD — confirmed:
| Plugin | plugin.json |
CHANGELOG.md heading |
|---|---|---|
autonomy |
0.10.0 | ## [0.10.0] ✓ |
planning |
0.26.0 | ## [0.26.0] ✓ |
playbooks |
0.5.0 | ## [0.5.0] ✓ |
rate-limit-guard |
0.2.0 | ## [0.2.0] ✓ |
Codex P2 findings — final status
| Finding | Status |
|---|---|
routines.md:28 — catalog prescribes cron substrate (commit c730f498) |
Resolved by 22d0726 |
CHANGELOG.md:13 rate-limit-guard single-account wording (commit da7eb47) |
Resolved by c730f49 (prior round) |
README.md / statusline-tee.sh single-account copies |
Resolved by c730f49 (prior round) |
reader-contract.md:101 copied gap framing |
Advisory, non-blocking — unchanged (files not touched since c730f49) |
trigger-dispatch.md:169 scope boundary |
Advisory, non-blocking — unchanged |
lifecycle.md:17 cite-vs-restate |
Advisory, non-blocking — unchanged |
Verdict
Approved. 22d0726 is the correct and complete response to the final open Codex P2: all eight substrate-naming sites in the catalog are updated to carry the property rather than the mechanism, consistent with the determinism rule's own hosting-stance. da7eb47 and 54ea8ab are accurate maintenance commits necessitated by the rebase. All prior blocking findings are closed; the three advisory items carry forward unchanged from prior rounds.
|
Claude finished @kyle-sexton's task in 3m 18s —— View job Security Review — PR #1266 (HEAD:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 22d0726330
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The multi-account fan-out assessment stated that B4 landed, that the tee record carries an account identifier, and that a mismatch now reads as stale — so multi-account operation was "a detected condition instead of an undetectable one." None of that is true in the tree it ships with. The text survived the narrowing of loop-lane §6 from a declaration requirement to a deferral. §6 now records the single-account assumption as a known gap and defers writer field, reader invalidation, and lane-floor re-audit to TODO(#1218); the tee carries no account identifier and the statusline schema exposes none. An operator reading the old sentence would rely on fail-closed behavior that does not exist. The assessment now states what §6 actually did, names the deferral, and keeps the lever unavailable rather than merely unwise. Co-authored-by: Claude <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 18s —— View job Re-review — post latest commit (
|
| Finding | Status |
|---|---|
PLAN.md — stale B4 success claim (22d0726 review) |
Resolved by 250e11e |
CHANGELOG.md:13 rate-limit-guard single-account wording |
Resolved by c730f49 (prior round) |
README.md / statusline-tee.sh single-account copies |
Resolved by c730f49 (prior round) |
routines.md:28 — catalog prescribes cron substrate |
Resolved by 22d0726 (prior round) |
Advisory findings — unchanged, non-blocking
| Finding | Status |
|---|---|
reader-contract.md:101 — copied gap framing alongside §6 citation |
Advisory, unchanged |
trigger-dispatch.md:169 — scope boundary wording |
Advisory, unchanged |
lifecycle.md:17 — cite-vs-restate |
Advisory, unchanged |
None of the three advisory files were touched in this commit. Their status from prior rounds stands.
Verdict
Approved. 250e11e is the correct and complete response to the final open Codex P2. The stale "B4 shipped detection" claim is replaced with an accurate description of what §6 actually did — named gap, no implementation, resolution deferred to #1218, lever unavailable. All blocking findings across the full review history are now closed. The three advisory items carry forward unchanged.
|
Claude finished @kyle-sexton's task in 1m 36s —— View job Security Review — PR #1266 (HEAD:
|
| Area | Assessment |
|---|---|
docs/topics/loop-engineering-codification/PLAN.md (latest commit) |
Documentation accuracy fix; no security surface. |
Shell scripts (record-rate-limit-stop.sh, statusline-tee.sh) |
Comment-only changes. Functional code: jq receives stdin (not shell-interpolated), temp files use $$-scoped paths inside chmod 700/umask 077 directory, "$@" is double-quoted, session fields are JSON-escaped before insertion. No injection surfaces. |
vendor/SKILL.md |
Pre-existing upstream curl self-update instruction at line 42 is neutralized by the hub safeguard preserved verbatim in this PR. New sections 96–115 are pure tips text — no shell commands, curl, eval, or executable instructions. |
plugin.json (4 files) |
Pure semver bumps. No new dependencies, MCP servers, hooks entries, permissions, or external URLs. |
evals.json |
Rubric-string updates only. No execution surface. |
| All other markdown and reference files | No credentials, tokens, hardcoded secrets, path traversal, or injection surfaces. |
.github/workflows/ |
No workflow files modified. No CI/CD permissions surface changed. |
Security review complete — 41 files examined, 0 findings.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 250e11ec76
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The sync helper's manual-integration map ended at `orchestration.md — sections 78+`. That open-ended range predates this pack's split: sections 96-115 now live in four buckets the map never mentions, so the next upstream sync would route them all back into orchestration.md and leave the hub, the vendor baseline, and the distilled references disagreeing. The map now closes orchestration at 95 and lists unknowns (96-99), loops (100-103), automation (104-109), and context-engineering (110-115), with a note that sections past the last bucket open a new one rather than extending it. A test asserts the map against the reference directory — every bucket file must appear — and rejects any `sections N+` range, so the same drift cannot recur silently. Verified by mutation: dropping a bucket row fails the suite. Co-authored-by: Claude <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 18s —— View job Re-review — post latest commit (
|
| Finding | Status |
|---|---|
SKILL.md:50 — sync map routes new buckets to wrong file (commit 22d0726 Codex review) |
Resolved by 225f826 |
PLAN.md — stale B4 success claim |
Resolved by 250e11e (prior round) |
CHANGELOG.md:13 / README.md / statusline-tee.sh single-account copies |
Resolved by c730f49 (prior round) |
routines.md:28 — catalog prescribes cron substrate |
Resolved by 22d0726 (prior round) |
Advisory findings — unchanged, non-blocking
| Finding | Status |
|---|---|
reader-contract.md:101 — copied gap framing alongside §6 citation |
Advisory, unchanged |
trigger-dispatch.md:169 — scope boundary wording |
Advisory, unchanged |
lifecycle.md:17 — cite-vs-restate |
Advisory, unchanged |
None of the three advisory files were touched by this commit. Their status from prior rounds stands.
Verdict
Approved. 225f826 is the correct and complete response to the final open Codex P2: the sync map now routes all four new reference buckets explicitly, orchestration's range is closed, and the test suite enforces both properties so the drift cannot recur silently. All blocking findings across the full review history are now closed. The three advisory items carry forward unchanged.
|
Claude finished @kyle-sexton's task in 4m 5s —— View job Security Review — PR #1266 (HEAD:
|
Both survived earlier passes over the same paragraphs. The brief's multi-account assessment had its tail corrected in 250e11e but kept a lead sentence saying the lever is "blocked by an existing invariant" — the framing §6 retired, and the opposite of what the body now says three sentences later. It is blocked by a gap nothing detects, which is the weaker and accurate claim. The guard's 0.2.0 entry called its change a deduplication and said the framing "lives only" in §6. What happened was a re-point: the reader contract and README both still state the gap, now citing §6 as owner rather than asserting it — which the pointer-not-copy carve-out permits, and which the block growing from four lines to seven makes plain. The entry now describes the re-point it performed. Co-authored-by: Claude <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 5s —— View job Re-review — post latest commit (
|
| Finding | Status |
|---|---|
reader-contract.md:101 — copied gap framing alongside §6 citation |
Advisory, unchanged |
trigger-dispatch.md:169 — scope boundary wording |
Advisory, unchanged |
lifecycle.md:17 — cite-vs-restate |
Advisory, unchanged |
Neither file was touched by this commit. Their standing from prior rounds is unaltered.
Verdict
Approved. 860fd96 is a clean pair of stale-framing corrections: the PLAN.md lead sentence now matches its own body, and the CHANGELOG entry now accurately names the operation it describes. No structural changes, no new security surfaces, no interaction with any prior finding. All blocking findings across the full review history remain closed.
|
Claude finished @kyle-sexton's task in 3m 6s —— View job Security Review — PR #1266 (HEAD:
|

Summary
Answers the operator's open loop-engineering questions from this repository's own autonomy
corpus rather than from vendor material, and lands the corrections an eleven-corrector
/re-anchor:sweep-all-disciplinespass raised against that corpus and against the vendoredplaybooksbaseline. Contract:docs/topics/loop-engineering-codification/PLAN.md.Four independent review areas, each self-contained per commit:
1. The answers (topic Brief). Substrate and cost under a $0 budget resolve from the contract
rather than vendor framing: cloud routines are entitlement-included on Pro/Max/Team/Enterprise and
draw down subscription usage like any session, so $0 excludes only the metered usage-credit overage
toggle — the
wiring-vs-advisor.mdADVISE branch, unmodified. The binding constraint is contentionover the shared subscription window, not spend. Separately, the existing verification skills are
ruled out as a governed-queue feed: they carry no work-item reference at all, so no query-side join
exists, and a skill-side signal would come from exactly the agent-writable surface the
classification rules refuse.
2.
autonomycontract fixes (0.10.0). The determinism rule prescribed plain cron — asubstrate — inside a contract whose own hosting stance holds that hosting binds per deployment; it
now fixes the property (no agent session, zero agent tokens). Its categorical "never" also
concealed the hybrid detect/judge split defined two paragraphs below, so determinism is now stated
as a per-portion verdict. The one-entrypoint invariant was restated six ways across five documents
and the restatements had already drifted — it now has one canonical statement the others cite, and
its previously unwritten scope boundary is written.
3.
loop-lanecontract fixes (2.0.0). Two fail-open gaps in a contract that fail-closeseverywhere else. The tee record now carries the account identifier its windows were observed under,
and a mismatch reads as stale rather than as headroom. Re-derivation was triggered only by a new
model release, leaving upstream-sourced claims with a dated stamp and no expiry; a second trigger
now binds any change relying on one.
4.
playbooksresync (0.4.0) andplanning(0.26.0). The vendored boris baseline syncs8.8.1 → 8.13.0 through
/playbooks:update --apply, never a hand-copy, with twenty new sectionsdistilled into four reference buckets following upstream's own thread grouping.
planning:draft-goal-conditionbecomes reachable from lever-selection intent — its Step 0 wasalready the lever-fit router, but the description sold only the drafting half.
Deliberately not done
docs/topics/github-plugin-candidates/still cites the retiredconsumer-config-layeringpath (~6 sites). The Brief scoped the repoint to
boris-video-absorptiononly. Not anoversight; worth a follow-up. Changelog mentions of the old name are historical and stay.
skill-quality:checkwarnings on theborishub — unquotedUse when:triggers and no Gotchas surface. Both predate this branch and the check exits PASS. Quoting
'skills'/'hooks'/'workflows'would lock generic phrases into check 3's drop-protectionpermanently, which is worse than the warning.
draft-goal-conditiondescription nets +45 chars while adding five triggers and clearing astanding warning.
Test plan
markdownlint-cli2over every touched path — 0 errors.lychee --offline --config lychee.tomlover the changed areas withinclude_fragments = "full",so the new
#dispatchanchors are verified — 0 errors.skill-quality/scripts/check-skill.shwithCHECK_SKILL_BASE_REF=origin/main:draft-goal-conditionPASS, 0 warnings (all 6 base-ref trigger phrases preserved);borisPASS (2 pre-existing warnings above);
autonomy:setupPASS (1 pre-existing line-countwarning).
scripts/check-changelog-parity.sh --check-bump origin/main— passes.skills/boris/scripts/update.test.sh— passes, run by the skill check.autonomy/skills/setup/evals/evals.jsonre-parsed as valid JSON after the rubric-string updates.8.8.1 → 8.13.0; the counts 127 tips / 115 sections are taken from upstream's own declaration.
Related
No linked issue — the work originates from a
/re-anchor:sweep-all-disciplinespass rather thanfrom tracked intake, and the contract slice is the record.
Both bump tiers were genuinely ambiguous under the contracts' own rules and were ratified by the
operator before this PR opened:
autonomyminor,loop-lanemajor. Each CHANGELOG headingrecords the narrower reading that was considered and not taken.