Skip to content

feat(overengineering): add the delta lane — recurring audits that report only what moved (0.2.0) - #3146

Merged
kyle-sexton merged 9 commits into
mainfrom
claude/work-items-integration-ggdong
Aug 23, 2026
Merged

kyle-sexton merged 9 commits into
mainfrom
claude/work-items-integration-ggdong

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Closes #2898

Summary

Adds overengineering:delta, the recurring lane the findings artifact's stable spine was explicitly designed for. context/findings-artifact.md already said so in as many words — "A future delta lane inherits this as its contract" — and this PR is that consumer.

The lane re-runs overengineering:audit and reports only what moved since the last run: new clutter, verdict moves, closures, status changes, filtered through a configurable noise budget. It is read-only always, never invokes or enters realign, and queues verdict changes for a human instead of acting on them. The plugin adopts no cadence and ships no schedule file — a plugin that scheduled itself on install would be an unratified standing commitment in someone else's repo, which is the exact class of thing this plugin exists to find and retire.

Plugin 0.1.10.2.0.

Fix

The load-bearing mechanic is an ordering, and it is not the obvious one. The findings artifact is rewritten in place, per layer, as the audit walks. So the lane cannot be "run the audit, then diff" — by the time the audit returns there is nothing left to diff against. It captures the prior spine to a memory-tier spine-baseline.md sibling before invoking the audit. Reversing those two steps does not error; it reports "no baseline" every cycle forever, and that failure is invisible from the report. The skill states the ordering as a contract for exactly that reason.

  • skills/delta/SKILL.md — the lane. Composes audit via the Skill tool, passing layer scope and unattended through verbatim; free-text hints are deliberately not forwarded (they would make the walk incomparable with the baseline) and are reported as declined.
  • Reads what the merge already computes, rather than re-deriving it. ## Closed since last run carries a reason class a spine diff cannot produce; merge rule 5 already flags a verdict that moved under a carried-forward judgment. A second derivation is a second answer that can disagree with the first.
  • Evidence-only change is declared out of scope by construction, not covered behind a threshold. Evidence and liveness are prose, recomputed every run and excluded from the spine — a spine comparison cannot see them, and no setting makes it able to. Claiming otherwise would promise a capability the mechanism does not have.
  • The noise budget has per-class rules a reader can apply mechanically (boundary-crossing verdict moves, "expected" closures defined as prior status REALIGNED exactly, an unproven_head off the audit's own carry-cost ranking), a volume cap with a stated rank order, and a one-line quiet cycle. Two classes — a rule-5 judgment flag and a status change — are not configurable at all, because a key that could hide them would hide the operator's own concern from them.
  • reference/consumer-config.mddelta_noise_budget, 7 keys, refinement class with the classification argued rather than asserted. No userConfig; the plugin's recorded trade stands.
  • context/findings-artifact.md — additive only: a new spine-capture obligation section and a delta column on the obligations table. schema: stays 1; no merge rule altered.
  • reference/topic-docs.md — the placement binding said "Nothing else is written", which the baseline falsifies. That file is what audit step 1 tells every run to consult, so a reader trusting it could delete a baseline as stray and silently destroy the lane's only comparison point. Corrected, with the hazard named.
  • skills/delta/context/recurring-wiring.md — four consumer-agnostic wiring shapes with the trade each makes; none is a default.

Verification

Every gate below was run by the orchestrator against the worktree, not taken from a worker's claim. All exit 0:

Gate Result
validate-plugins.sh manifests + catalog validated
validate-plugin-contracts.mjs 48 setup skills, 2799 plugin files
generate-catalog.mjs --check in sync
generate-cheatsheet.mjs --check in sync
check-changelog-parity.sh --check-bump origin/main version bump has its entry
check-skill-precompute-compose.sh --strict 0 violations
check-skill-portability.sh no unexcused coupling tokens
check-skill-leaf-names.sh / check-skill-count-claims.sh no collision; 0 mismatched
markdownlint-cli2 / typos / editorconfig-checker 0 issues

An independent fresh-context verifier checked all acceptance criteria against the diff with the authoring rationale withheld, resolved every relative link on disk, verified every §N reference against real headings in scrutiny-method.md, and confirmed no fabricated invocations. It returned PASS — and found two real defects, both fixed here before this PR opened:

  • queue_route was an orphan key. It was documented in consumer-config.md but read nowhere, so an operator setting queue_route: inline to stop the lane filing tracker items would have been silently overridden and got them anyway. For a lane whose entire justification is not becoming nagging automation, that was the worst bug available. The skill now reads the key before probing for a tracker, with a three-row route table.
  • The volume cap had no intra-class tiebreak, so identical input could truncate to different heads across runs. It now cites the artifact's stable total order.

Test plan

  • /overengineering:delta on a branch with no prior artifact → reports "No baseline; this run establishes one", runs the audit, reports nothing as a delta, does not restate the surface.
  • Re-run on an unchanged tree → quiet cycle: one line plus the counts table, no rows, no tracker write.
  • Re-run after a real surface change → only the changed findings appear, above the budget.
  • Layer-scoped run (e.g. ci-lanes unattended) → unwalked layers appear once as a coverage line with counts, never as findings or closures.
  • Set queue_route: inline in .claude/overengineering.md → no tracker probe, route declined naming the setting, queue still present in the report.

Related

Review round

An automated cross-vendor reviewer filed three findings on be498981, all verified against the files and all real. Fixed in 7dc00c8a:

  1. P1 — the status-change delta class could never fire. realign writes a status between cycles, so the pre-audit capture already contained it and the audit carried the same value forward: both sides of the comparison agreed, and the one case the class existed for was the one it could not see. The baseline is now the previous cycle's post-audit spine, captured at end of cycle. The original "a spine must be persisted separately" reasoning was still sound — the artifact is rewritten in place per layer — but the capture belonged at the end of the cycle, not the start. Pre-audit capture survives only as a named bootstrap, which reports that a status change is unobservable on that first cycle.
  2. P2 — detached HEAD collapsed every ref to one identity. git rev-parse --abbrev-ref HEAD returns literal HEAD when detached, so the branch guard compared HEAD to HEAD and passed — on exactly the scheduled runners this lane targets. Now git symbolic-ref --quiet --short HEAD, which fails closed; the lane takes no baseline, no comparison, and no capture when identity is unresolved. Root cause also affects audit and realignoverengineering/audit: a detached checkout writes branch: HEAD, collapsing every ref to one identity #3149.
  3. P2 — the default queue route asked for filing the tracker forbids. work-items:track's gate is explicit that "model-initiated filing is not" authorization, so the default queue_route: auto durable route was unreachable in the unattended mode it existed for. queue_route now defaults to inline; the durable route is opt-in, and the operator setting it is the recorded authorization. The report-side queue is unchanged and still unconditional.

The earlier CHANGELOG imprecision noted in review is resolved — fix 3 made that clause actually wrong rather than merely incomplete, so the ## [0.2.0] entry was amended in place.

One follow-up left for an operator, not taken here

No row was added to .github/recurring-schedule.json. Building the lane and adopting a cadence for this repo are different decisions; registering it would create a live recurring commitment nobody ratified. The wiring doc argues shape 4 (a recurring tracker item) as the one to prefer if this repo adopts it.


Generated by Claude Code


Generated by Claude Code

claude and others added 6 commits August 23, 2026 02:54
Adds `overengineering:delta`, the recurring lane the findings artifact's
stable spine was designed for: capture the prior spine, re-run
`overengineering:audit`, compare the two, and report only what moved.

The load-bearing mechanic is the ordering. The findings artifact is
rewritten in place per layer as the audit walks, so there is no previous
artifact left to diff against once the audit has run. The lane captures
the prior spine to a memory-tier `spine-baseline.md` BEFORE invoking the
audit, and the skill states why a maintainer who reverses those two steps
silently turns every cycle into a first run.

Read-only always: it never invokes or enters `overengineering:realign`
and never writes a Status. Verdict changes queue for the human, in the
report always and through a presence-gated tracker route with a named
inline fallback.

Recurring wiring is documented consumer-agnostically in the lane doc —
four shapes with their trades — and adopted nowhere. No schedule file
ships with the plugin.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RQGLRXTnzrQFQ1a1ZanojJ
…(0.2.0) (#2898)

- `reference/consumer-config.md`: new `delta_noise_budget` key group, seven
  keys with types and defaults, in the ordinary refinement cascade class with
  the classification justified — no key can remove a finding, change a verdict,
  suppress a judgment, or weaken the protected cap, so none carries the hazard
  that puts `protected_categories` and `suppressions` in policy-floor. Two
  delta classes are deliberately not keys at all.
- `context/findings-artifact.md`: additive spine-capture obligation naming the
  capture-before-audit ordering and the `spine-baseline.md` sibling. `schema`
  stays 1; no merge rule changed. The forward reference to "a future delta
  lane" now names the shipped one.
- `plugin.json` 0.1.1 -> 0.2.0 (new skill = minor), CHANGELOG entry, README
  skill row plus a cadence section pointing at the lane doc.
- `skills/delta/evals/evals.json` matching the sibling skills' shape.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RQGLRXTnzrQFQ1a1ZanojJ
… docs (#2898)

- The `spine-baseline.md` frontmatter and body rules now live once, in
  `context/findings-artifact.md`; the skill points at them instead of
  restating them (pointer-not-copy).
- Precompute block trimmed to one line. A git command plus more than one
  injection line is refused outright in a worktree-isolated agent (#1619),
  which is exactly the dispatched context a scheduled run arrives in; the
  gate flagged the two-line form. UTC stamps are read at write time.
- `docs/CATALOG.md` and `docs/SKILL-CHEAT-SHEET.md` regenerated with the
  repo's own generators (`validate-plugins.sh` runs both in --check mode).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RQGLRXTnzrQFQ1a1ZanojJ
…nding

topic-docs.md listed only findings.md and asserted "Nothing else is
written", which the delta lane's spine baseline falsifies. Add the
baseline row (writer, type, location), point at findings-artifact.md's
spine-capture obligation for its shape rather than restating it, and
reconcile the stable-filename and ephemerality paragraphs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RQGLRXTnzrQFQ1a1ZanojJ
…icate the class spec

The delta lane documented a `queue_route` key it never read: `consumer-config.md`
defines `inline` as declining the tracker route unconditionally, but the skill's
route table had one row (tracker reachable -> maintain a queue item), so an
operator who set `inline` to stop the lane opening tracker items got them anyway.
The route table now branches on the key; the queue still always appears in the
report and the route decision and presence answer are still recorded.

Also: the volume cap now cites the artifact's stable total order as its
intra-class tiebreak, so two runs over identical input truncate to the same head;
the "not configurable" justification lives only in `consumer-config.md`, with the
skill keeping the always-listed rule and pointing there for why; the skill stops
restating numeric defaults it attributes to that file; the obligations table gains
a `delta` column; and two over-broad sentences about placement are made accurate.

Additive only in `findings-artifact.md`: `schema:` and every merge rule unchanged.
@claude

claude Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 1m 37s —— View job


Security review (/review:security-review)

  • Gather context (PR diff, changed files, custom instructions)
  • Invoke /review:security-review skill and follow its instructions
  • Post final review results to this comment

Scope reviewed: full diff against origin/main for PR #3146 (11 files, +837/-47) — docs/CATALOG.md, docs/SKILL-CHEAT-SHEET.md, plugins/overengineering/.claude-plugin/plugin.json, plugins/overengineering/CHANGELOG.md, plugins/overengineering/README.md, plugins/overengineering/context/findings-artifact.md, plugins/overengineering/reference/consumer-config.md, plugins/overengineering/reference/topic-docs.md, plugins/overengineering/skills/delta/SKILL.md (new), plugins/overengineering/skills/delta/context/recurring-wiring.md (new), plugins/overengineering/skills/delta/evals/evals.json (new).

No security issues found.

This PR is entirely prompt/documentation content for a new read-only Claude Code skill (overengineering:delta) plus supporting docs, changelog, catalog/cheat-sheet entries, and eval prompts. There is no new executable code, no GitHub Actions workflow changes, no permission or plugin.json capability widening beyond a version/description/keyword bump, and no scripts.

Notable points I checked specifically, per the review's focus areas:

  • Shell surface: the only executable content added is a single precompute line in skills/delta/SKILL.mdgit rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown (no checkout)". It's a static command with no variable interpolation of untrusted input, so there's no command-injection surface. The skill's own comment notes this was deliberately kept to one line to stay clear of the worktree-isolation refusal threshold for multi-line precompute blocks with a git command — a sound, security-aware design choice, not a gap.
  • Argument/data flow into the composed audit skill: the lane forwards only a fixed layer-scope vocabulary and an unattended flag verbatim to overengineering:audit via the Skill tool; free-text hints are explicitly not forwarded and are reported as declined (SKILL.md#L630-L632). This avoids propagating arbitrary/attacker-influenced text into a composed skill invocation.
  • Read-only/trust boundary: the skill's contract is explicit and consistent across all touched docs that this lane never mutates the audited surface and never invokes or enters overengineering:realign (the plugin's only mutating skill), including under an explicit in-session request to do so (covered by eval fix: correct plugin-system inaccuracies and harden references #2). Writes are scoped to a memory-tier, branch-keyed, gitignored spine-baseline.md sibling and one presence-gated tracker notification containing only ids/verdict pairs — no remediation instructions are ever written to an external tracker.
  • Config layering: the new delta_noise_budget key is correctly placed in the "refinement" cascade class (not policy-floor) in reference/consumer-config.md, with the documented reasoning that no key in it can remove a finding, change a verdict, suppress a judgment, or weaken the protected-category cap — consistent with the existing plugin's threat model.

No injection, auth/access-control, secret-handling, or GitHub Actions concerns were found in this diff. Nothing to report to the inline-comment tool.

@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Last security-reviewed head: 7dc00c8af60d5154e3ca3f9c50d97a12a50ed0d2. On the next push, the relevance gate compares only the commits since this SHA; delete this comment to force a full re-review.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: be498981c3

ℹ️ 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".

Comment thread plugins/overengineering/skills/delta/SKILL.md Outdated
Comment thread plugins/overengineering/skills/delta/SKILL.md Outdated
Comment thread plugins/overengineering/skills/delta/SKILL.md Outdated
…st-audit spine

The status-change delta class could never fire. The lane captured its
baseline from the findings artifact as it stood at the start of a cycle,
but a Status changes when a human runs realign BETWEEN cycles and realign
writes it into that same artifact — so the new status was already in the
baseline, the audit carried it forward, and both sides of the comparison
agreed for every pre-existing finding.

The baseline is now the previous cycle's post-audit spine, captured at the
end of a cycle. A pre-audit capture survives only as an explicitly named
bootstrap, which cannot observe a status change and says so.

Also: refuse to treat detached HEAD as a branch identity (a scheduled
runner's ordinary shape, where rev-parse --abbrev-ref answers the literal
HEAD and the branch-match guard would accept another ref's spine), and
make the durable queue route opt-in, since work-items:track refuses to
file on inferred intent.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RQGLRXTnzrQFQ1a1ZanojJ
@claude

claude Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 1m 6s —— View job


Security review (/review:security-review)

  • Gather context (PR diff, changed files, custom instructions)
  • Invoke /review:security-review skill and follow its instructions
  • Post final review results to this comment

Scope reviewed: commits since the last reviewed head (be498981c3bcc4643e175430dad248874cbc4750) up to the current HEAD d99bacd9658f70ee5c6bc6ccb6eea9dfd4be1d24 — one new commit, d99bacd ("make the delta baseline the previous cycle's post-audit spine"), touching CHANGELOG.md, README.md, context/findings-artifact.md, reference/consumer-config.md, reference/topic-docs.md, skills/delta/SKILL.md, skills/delta/evals/evals.json.

No security issues found.

This commit is the fix-up addressing the three Codex review comments on this PR (status-change baseline timing, queue_route authorization gating, detached-HEAD branch identity). It is entirely prompt/documentation content — no new executable surface.

Specifically checked:

  • Shell surface unchanged in kind: the sole precompute line in skills/delta/SKILL.md#L14 changed from git rev-parse --abbrev-ref HEAD to git symbolic-ref --quiet --short HEAD. Still a static command with no variable interpolation of untrusted input — no injection surface. The change is itself a security-relevant hardening: it makes detached-HEAD runs fail closed instead of resolving to the literal string HEAD, which the diff's own rationale correctly identifies would otherwise let a branch-match guard treat two different refs as the same identity and accept a cross-ref spine as a valid baseline (this addresses the reviewer comment about detached checkouts).
  • Tracker-filing authorization gate: queue_route now defaults to inline (previously auto) and the durable tracker route requires an explicit operator opt-in, consistent with work-items:track's refusal to file on inferred/model-initiated intent — this addresses the reviewer comment about the authorization gate.
  • No new write paths, permission changes, or config-cascade placement changes: queue_route stays in the delta_noise_budget refinement class; no key was moved to a class that could suppress a finding, verdict, or the protected-category cap.
  • Confirmed no other precompute/inline shell (!` ) blocks exist anywhere in skills/delta/SKILL.md beyond the one already reviewed.

No injection, auth/access-control, secret-handling, or GitHub Actions concerns in this incremental diff. Nothing to report to the inline-comment tool.

README's skill row and the CHANGELOG's lead delta bullet still described
the lane as capturing the prior spine and then re-auditing. Also tighten
the run's end-of-cycle capture step: a no-baseline cycle still establishes
one, while a cycle that stopped short or never resolved a branch identity
writes nothing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RQGLRXTnzrQFQ1a1ZanojJ
@claude

claude Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 46s —— View job


Security review (/review:security-review)

  • Gather context (PR diff, changed files, custom instructions)
  • Invoke /review:security-review skill and follow its instructions
  • Post final review results to this comment

Scope reviewed: commits since the last reviewed head (d99bacd9658f70ee5c6bc6ccb6eea9dfd4be1d24) up to the current HEAD 78c8cc25f5be9d846d3ad871b3057f642c78840d — one new commit, 78c8cc2 ("correct the remaining old-ordering restatements"), touching plugins/overengineering/CHANGELOG.md, plugins/overengineering/README.md, plugins/overengineering/skills/delta/SKILL.md.

No security issues found.

This commit has no security-relevant surface (skip-gate condition 2). It's a prose-only correction: the CHANGELOG and README summaries, and the SKILL.md "The run" step 7 language, are updated so the described capture-order matches the fix already reviewed in d99bacd (baseline = previous cycle's post-audit spine, not a pre-audit capture). No shell/precompute content, no permission or config-cascade changes, no new write paths — it only clarifies which cycles do/don't write the stored baseline (a no-baseline cycle now correctly earns a capture too; a cycle that never resolved branch identity or never reached step 5 still writes nothing).

No injection, auth/access-control, secret-handling, or GitHub Actions concerns in this incremental diff. Nothing to report to the inline-comment tool.

@claude

claude Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 57s —— View job


Security review (/review:security-review)

  • Gather context (PR diff, changed files, custom instructions)
  • Invoke /review:security-review skill and follow its instructions
  • Post final review results to this comment

Scope reviewed: commits since the last reviewed head (78c8cc25f5be9d846d3ad871b3057f642c78840d) up to the current HEAD 7dc00c8af60d5154e3ca3f9c50d97a12a50ed0d2 — one new commit, 7dc00c8 ("Merge remote-tracking branch 'origin/main' into claude/work-items-integration-ggdong").

Skip gate: no security-relevant surface (condition 3 — head already covered by a review that still applies).

This commit is a merge of origin/main into the PR branch. git diff 78c8cc2..7dc00c8 -- plugins/overengineering docs/CATALOG.md docs/SKILL-CHEAT-SHEET.md is empty — none of the 11 files that make up this PR's actual change set were touched. The merge's only file-level effect (git diff 78c8cc2..7dc00c8 --stat) is pulling in unrelated, already-reviewed-elsewhere plugins/source-control/** changes from origin/main (worktree reap script, changelog, plugin.json bump).

Confirmed the PR's effective diff is unchanged and still matches what was already security-reviewed: git diff origin/main...HEAD --stat shows the same 11 files at 1020/-47, identical to the prior review pass on 78c8cc2.

No new security-relevant surface to review. Nothing to report to the inline-comment tool.

@claude

claude Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 2m 1s —— View job


Code review (/review:code-review)

  • Gather context (PR diff, changed files, custom instructions)
  • Run skip-gate checks
  • Review changed files against criteria
  • Post findings (inline + summary)

Scope reviewed: full diff origin/main...HEAD at 7dc00c8 (11 files, +1020/-47) — docs/CATALOG.md, docs/SKILL-CHEAT-SHEET.md, plugins/overengineering/.claude-plugin/plugin.json, plugins/overengineering/CHANGELOG.md, plugins/overengineering/README.md, plugins/overengineering/context/findings-artifact.md, plugins/overengineering/reference/consumer-config.md, plugins/overengineering/reference/topic-docs.md, plugins/overengineering/skills/delta/SKILL.md (new), plugins/overengineering/skills/delta/context/recurring-wiring.md (new), plugins/overengineering/skills/delta/evals/evals.json (new).

This lane scopes security findings to /review:security-review (already run three times on this PR, no issues found), so this pass focused on correctness and maintainability.

No blocking findings.

Things specifically checked and confirmed sound:

  • The three Codex P1/P2 findings from the initial review are all fixed in later commits (d99bacd), and I verified the fixes are actually present at HEAD, not just claimed:
    • Baseline is now captured after the audit, from the previous cycle's post-audit spine (skills/delta/SKILL.md:93-132, mirrored in context/findings-artifact.md:214-228), so the status-change class can fire.
    • queue_route now defaults to inline and requires explicit auto opt-in before any tracker probe (SKILL.md:387-402, reference/consumer-config.md:196), matching work-items:track's inferred-intent refusal.
    • Precompute uses git symbolic-ref --quiet --short HEAD instead of rev-parse --abbrev-ref HEAD, so a detached HEAD fails closed instead of resolving to the literal string HEAD (SKILL.md:14-27, 234-261).
  • Cross-file consistency holds. findings-artifact.md's "spine-capture obligation" section and SKILL.md's "load-bearing mechanic" section state the same ordering and the same status-change reasoning without one restating the other's prose. The obligations table (findings-artifact.md:464-476) and the delta frontmatter both describe delta as a reader-only, never a writer.
  • The unproven_head / carry-cost-ranking dependency is real, not fabricated: skills/audit/context/surface-walk.md:295 confirms the audit itself ranks UNPROVEN residue by carry cost, which delta (SKILL.md:347) reads rather than re-deriving.
  • topic-docs.md's "Nothing else is written" correction is accurate and necessary — the new spine-baseline.md sibling is now documented as a placed artifact, with an explicit warning against treating it as stray (topic-docs.md:52-56), closing the exact hazard the PR description names.
  • The noise-budget config placement is argued, not asserted: consumer-config.md's refinement-vs-policy-floor test (no key can remove a finding, change a verdict, suppress a judgment, or weaken the protected cap) is applied consistently to delta_noise_budget, and the two non-configurable classes (rule-5 flags, status changes) are correctly kept out of the key table entirely rather than modeled as locked defaults.
  • Doc/version bookkeeping is in sync: plugin.json version (0.2.0) and description, docs/CATALOG.md, docs/SKILL-CHEAT-SHEET.md, and the CHANGELOG [0.2.0] entry all reflect the new skill consistently.

One non-blocking note already flagged by the author in the PR description and not re-litigated here: the CHANGELOG's 0.2.0 Contracts bullet wording around the queue-route gate (presence-gated vs. also config-gated) — worth a glance since 0.2.0 is still unreleased, but it's prose-only and the author already called it out.

Branch: claude/work-items-integration-ggdong

@github-actions

Copy link
Copy Markdown
Contributor

Claude has reviewed this PR 1 time. The lane skips further automatic reviews after 5; deleting this comment resets the count.

@kyle-sexton
kyle-sexton merged commit 8d1c4d5 into main Aug 23, 2026
52 checks passed
@kyle-sexton
kyle-sexton deleted the claude/work-items-integration-ggdong branch August 23, 2026 04:31
kyle-sexton pushed a commit that referenced this pull request Aug 23, 2026
Resolves an overengineering version collision: main shipped the delta lane as
0.2.0 (#3146) while this branch had also claimed 0.2.0. Main's entry stays at
0.2.0 and this branch's documentation-only entries move to 0.2.1, taking main's
plugin description (which now names the third lane).

The delta lane also shipped as its OWN skill composing audit, rather than as an
argument selecting a mode inside it, which is independent corroboration of the
decision ADR 0017 records. The ADR now cites it, and its context section is
corrected: #2897 said "a third skill" when the plugin had two, but delta has
taken that slot, so the product-code lane is the fourth skill and third lane.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RiAekqvuMHJs3CjusBbNWH
kyle-sexton pushed a commit that referenced this pull request Aug 23, 2026
Second overengineering version collision in a row: main took 0.2.1 for the
findings-artifact date-rationale fix (#3167) after taking 0.2.0 for the delta
lane (#3146). Main's entries stay where they are and this branch's
documentation-only entry moves to 0.2.2.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RiAekqvuMHJs3CjusBbNWH
kyle-sexton added a commit that referenced this pull request Aug 23, 2026
…y (0.3.0) (#3222)

## Summary

`overengineering:audit` and `overengineering:realign` precomputed the
current branch with
`git rev-parse --abbrev-ref HEAD`, which answers the literal string
`HEAD` when HEAD is detached —
the ordinary shape for a scheduled CI runner. `HEAD` looks like a branch
name, is the same string
for every ref, and compares equal to itself, so three consequences
followed and all of them were
silent:

- `audit` wrote `branch: HEAD` into the findings artifact, giving it an
identity that is not a
  branch.
- `realign`'s branch-match refusal compared `HEAD` to `HEAD`, passed by
construction, and could
accept another ref's artifact as this ref's own — in the only skill in
this plugin that mutates
anything, where per-item human consent is spent down a rollback ladder
as far as deletion.
- The `<branch-slug>` memory-tier home key resolved every detached ref
to one directory, so
unrelated runs shared a single artifact and merged each other's
carried-forward operator
  judgments.

The `delta` lane already resolved identity correctly with `git
symbolic-ref` and could not fix any
of these from where it sits, which is why this was filed separately from
#3146.

## Fix

Both precomputes now use `git symbolic-ref --quiet --short HEAD`, which
fails rather than inventing
a name, and emit the same sentinel string `delta` already used. All
three skills now agree on one
resolution contract: prefer a logical ref where the environment supplies
one naming a branch — with
no CI vendor's variables named or assumed — and otherwise treat the
identity as unresolved.

On an unresolved identity:

- **`audit` persists no findings artifact at all.** Not the file with
`branch:` omitted, not a
placeholder value, not a file at a substitute home. The walk still runs
and the inline summary is
still emitted, so the operator still gets the findings; only the
persisted write is declined, and
  the read-only disclosure line says that instead of naming a path.
- **`realign` refuses**, in both unresolved states: when its own
checkout has no identity (it stops
before reading the artifact at all) and when the artifact it finds
carries `branch:` absent,
empty, or `HEAD`. Neither path reaches the comparison. The refusal is a
positive precondition
rather than a consequence of the file being missing, which also renders
any stale pre-fix
  artifact already on disk unreachable without a cleanup step.

**Identity resolution is a stated body step, not only a precompute.** A
worktree-isolated or
dispatched executor may decline to inject the precomputed context block
entirely — and that is the
same `unattended` context in which a detached checkout is most likely —
so both skills state the
resolution command in the step that uses it and treat the precompute as
a convenience that may be
absent. Confined to the precompute line, the fix would have verified
green on an attached local
checkout and done nothing in the environment the defect actually lives
in.

Two contract documents now state the case rather than leaving it to be
inferred.
`context/findings-artifact.md` documents `branch:` as resolved with `git
symbolic-ref` and never the
literal `HEAD`, adds a "No branch identity, no artifact" section, and
carries a per-skill
obligations row. `reference/topic-docs.md` records that an unresolved
identity keys no home and does
not run the rung order, rejecting each substitute on its own terms:
`HEAD` is one directory for
every ref, a commit sha is a fresh home every commit that never resumes,
and a fixed literal such as
`detached` is `HEAD` under another name.

Three adjacent surfaces were made inconsistent by the change and are
corrected in the same PR.
`skills/audit/context/report-template.md`, which owns the read-only
disclosure line, still declared
the artifact written "always" and hardcoded the path-naming form.
`skills/delta/SKILL.md` closed its
own detached section with "the audit still runs, exactly as it otherwise
would" — true when written,
false once the audit began declining its write — and its step 4 would
have looked for a post-run
artifact that no longer exists; `delta`'s behavior is unchanged, only
its account of the audit's.
And `skills/delta/context/recurring-wiring.md`, the wiring document read
by exactly the affected
population, now names the detached case and the logical-ref remedy.

**The `branch:` decision was made by an independent panel, not by the
implementing agent**, and is
recorded in full on the issue with its reasoning, its rejected
alternatives, and its caveats:
[#3149
(comment)](#3149 (comment)).
Two fresh-context agents on different models, spawned separately with
the implementing agent's
rationale withheld, independently reached the same answer as that
agent's own prior read.

## Verification

**The behavior the fix turns on, observed directly.** The marketplace's
own primary clone happens to
sit detached, so both forms were run against a real detached checkout
and against an attached one:

| Checkout | `git rev-parse --abbrev-ref HEAD` | `git symbolic-ref
--quiet --short HEAD` |
|---|---|---|
| Detached (`## HEAD (no branch)`) | `HEAD` | *(no output, exit 1)* |
| Attached (`fix/3149-…`) | `fix/3149-…` | `fix/3149-…` |

The two forms agree exactly where a branch exists and diverge exactly
where one does not, which is
the whole of the guard. `git branch --show-current` was checked on the
same detached checkout and
returns an empty string at exit 0 — the basis for the cross-plugin
finding below.

**Repo gates.** This plugin ships no scripts and no `*.test.sh`, so its
coverage mechanism is the
eval sets plus the shared static gates. All were re-run after the review
fixes:

- `check-skill.sh` — `audit`, `realign`, and `delta` each PASS with 0
errors. The warnings each
reports (description length, the 200-line soft target) are pre-existing
on `main`.
- `check-evals-quality.sh` — PASS, 0 warnings across both eval sets.
- `check-jsonschema` against
`plugins/skill-quality/reference/evals.schema.json` — valid.
- `check-skill-portability.sh` — no unexcused coupling tokens.
- `markdownlint-cli2` — 0 issues across all eight changed markdown
files.

**Eval coverage for the detached path, which existed for neither skill
before.** Four cases added:
`audit` declining to persist on a detached runner; `audit` preferring an
environment-supplied
logical ref and naming its origin; `realign` stopping before it reads
the artifact when its own
checkout is detached; and `realign` refusing an artifact carrying
`branch: HEAD`. Each prompt
narrates the checkout state it depends on, following the convention the
existing shallow-clone case
already uses, so none asserts a condition it never establishes.

**Independent review.** A fresh-context reviewer with the author's
rationale withheld checked the
change against the issue's five acceptance criteria and returned NOT
READY on the first commit. Its
blocker (the stale `report-template.md`) and every should-fix (the
cross-plugin count, the
`mutation-testing` overclaim, the `babysit-prs` characterization, three
under-specified eval
prompts, the missing wiring guidance) are addressed in the second
commit. The version moved to
0.3.0 rather than a patch on its recommendation: a run that previously
wrote a file now writes none.

## Related

Closes #3149

- #3146 — the `delta` lane PR where this was found; carries the
delta-side defense this change
  converges `audit` and `realign` onto.

**Do other plugins share the pattern?** No other plugin exhibits the
`HEAD` identity-collapse. The
repo-wide precompute boilerplate uses `git branch --show-current`, which
returns an empty string on
a detached checkout rather than `HEAD`. The literal `git rev-parse
--abbrev-ref HEAD` form survives
at seven occurrences across six files outside this plugin: `claude-ops`'
two skill-usage telemetry
hooks, `source-control`'s `babysit-prs` parking-branch capture and
`worktree` current-branch
display, and three test-scaffolding sites in `guardrails`'
`stale-path-verify.test.sh` and
`source-control`'s `worktree-create.test.sh`. None compares the value
against a stored identity to
decide whether a mutation may proceed. `babysit-prs` is the closest call
and is still a different
defect class — its captured value parameterizes a same-session `git
checkout`, so a detached capture
fails to restore the starting commit rather than authorizing another
ref's work. All are left as-is
deliberately. This corrects the triage note, which recorded two of these
sites rather than six.

**One neighbor has the same shape under a different string, and is out
of scope.**
`mutation-testing:audit` documents `branch:` as `git branch
--show-current` verbatim
(`skills/audit/context/persist-findings.md:202`) and ships no script
guarding the empty result, so a
detached run there writes an empty identity that compares equal to
itself. Three sibling
findings-writers (`ai-slop`, `docs-hygiene:audit-noise`,
`claude-config:audit-instructions`) already
guard that case and exit rather than persist. Recorded rather than fixed
— this issue is scoped to
one plugin — and worth its own item.

**Adjacent pre-existing condition, deliberately not fixed here.**
`scripts/check-skill-precompute-compose.sh` reports both
`audit/SKILL.md` and `realign/SKILL.md` as
carrying a git command plus more than one injection line (#1619). Both
files already had two
precompute lines on `main`, so this change neither introduces nor
worsens it, and the gate is
warn-only in CI pending that remediation wave. Making resolution a body
step is what keeps this fix
correct in the meantime, since a refused precompute block no longer
means an unguarded identity.

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com>
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.

overengineering: scheduled/delta lane — recurring audit runs that surface only what changed

2 participants