Skip to content

fix(review,work-items): close the two blockers the #2933 close-out review found - #3083

Merged
kyle-sexton merged 4 commits into
mainfrom
claude/pocock-shipping-breakdown-ukohlx
Aug 21, 2026
Merged

fix(review,work-items): close the two blockers the #2933 close-out review found#3083
kyle-sexton merged 4 commits into
mainfrom
claude/pocock-shipping-breakdown-ukohlx

Conversation

@kyle-sexton

Copy link
Copy Markdown
Contributor

No linked issue

Summary

The full close-out review of container #2933 — the real 20/20 cumulative pass, which the
earlier 19/20 run was gated out of by close-out.md's own Step 4 — returned FAIL with two
wrong findings against stated acceptance criteria. Both are closed here, together with four
non-blocking gaps that the standing no-follow-up-issues rule says to work rather than file.

work-items 0.39.9 → 0.39.10; review 0.26.2 → 0.26.3.

Fix

Blocker 1 — close-out.md's own basis rule dropped code-shipping sub-items from the basis.

Rung 1's empty-result branch read: "a successful query returning zero merged PRs means that
sub-item closed without shipping code … Only a failed query (non-zero exit) falls to rung 2."

But an empty rung 1 means only that no PR named the item with a closing keyword, and two very
different situations produce that: the item genuinely shipped nothing, or it shipped under a
Refs #N reference. The second is sanctioned, not an oversight — work-items' own
work/SKILL.md states that "an intentional Refs #N opt-out does not exclude its issue" — and it
is the normal shape whenever one PR advances several items while closing only the spin-offs it
fully resolves. Everything in that case was classified no-code and silently excluded while the
report still claimed to cover the shipped whole.

An empty rung 1 now falls to rung 2 as well; no-code is reached only when both rungs come back
empty; and the verdict names which rung resolved each item, with rung 2 still flagged heuristic.

The mode found this by reviewing the container that shipped it#3027's dogfood criterion
("the container can run it against itself") working exactly as intended. On #2933's own close-out,
PR #3056 carried Closes for three spin-offs only and PRs #3067 and #3071 carried no closing
keyword at all, so rung 1 came back successful-and-empty for three sub-items (#2946, #2950, #2952)
that between them shipped 83 file-touches of adapter and generator code — which would have
been dropped from the basis of the review deciding whether that container could close.

Blocker 2 — the container's durable record was one sub-item behind. #2946 closed with a fourth
disposition, but docs/upstream/aihero-shipping-course.md still asserted "Issue #2946 remains
open"
. Under archival-by-closure the container body and its SSOT are the archive, so closing
on a record that contradicts the tracker is precisely what that model cannot survive. Corrected —
and deliberately as a correction-in-place rather than a silent overwrite, since that section is
the durable record of the adapter track's scope decisions.

Recorded rather than filed (these would normally be follow-up issues):

  • The Linear schema check is committed at adapters/linear/schema-check/. It is what justified
    descoping Linear adapter with full verb parity #2946's live conformance, and it existed only as a session artifact — so the claim
    could not be re-run or regression-guarded by anyone. Ships validate.mjs, the negative.mjs
    control that makes a green run mean something, fidelity.sh proving the checked operations are
    the adapter's own text rather than a paraphrase, and fetch-schema.sh that pulls the SDL on
    demand rather than vendoring 1.2 MB of upstream text. Verified by running it: 18/18 operations
    valid, 10/10 injected faults caught, 11/11 strings verbatim.
    fidelity.sh earned its place
    immediately — it caught that the harness still expected the pre-0.39.9 team.labels query.
  • tracker-seam.md names the item-content-trust boundary where it teaches body reads. No live
    surface was unguarded, but the document a new surface consults when adding a body read never
    mentioned that what comes back is untrusted, so the link ran one way only.
  • CONTRACT.md records the Investigation: multi-provider topology — source-of-record + coordination split #2945 role-split topology decision. Jira write support — guarded, opt-in #2951 was closed not_planned
    on the strength of it while it lived only in a sub-issue comment — which this plugin's own
    disposable-tickets doctrine says is the wrong place for a decision. The new section states
    plainly that nothing implements sources today and marks building it demand-gated.
  • The README's synonym claim is scoped to the skills it is true of. ship, onboard-adapter
    and setup carry neither token; stuffing ticket/issue into an adapter generator's triggers to
    satisfy a fleet-wide sentence would buy a tidier claim at the cost of worse routing.

Verification

  • Both blockers verified against the artifacts before fixing, quoted verbatim: close-out.md's
    rung-1 paragraph, and the SSOT's "remains open" line. The linkage claim that makes blocker 1 bite
    was confirmed directly — #3056's squash body carries only Closes #3046/#3047/#3048, and
    #3067/#3071 carry no closing keyword.
  • The committed harness was run, not just committed — the review had just caught me committing
    a bound without a test, so shipping an unexercised check would have repeated the mistake.
  • .gitignore verified by staging: only the five source files are tracked; the 1.2 MB SDL and
    node_modules are not.
  • Full adapter, lib and conformance sweep clean; shellcheck -x, shfmt -d, typos,
    markdownlint-cli2, changelog parity and --check-bump origin/main all clean.
  • One markdown hazard hit twice and fixed structurally: a reflow landing a bare #NNNN at line
    start turns it into an H1. Issue refs in the affected paragraphs are backticked, with a note
    saying why.

Related

🤖 Generated with Claude Code

https://claude.ai/code/session_01CnzwTKoTa6xNY7iyEzMYpm


Generated by Claude Code

…t found, and four recorded gaps

The full close-out review of container #2933 (the real 20/20 pass, not the
19/20 dry run) returned FAIL with two `wrong` findings against stated
acceptance criteria. Both are closed here, along with four non-blocking gaps
the standing instruction says to work rather than file.

BLOCKER — close-out.md's own basis rule dropped code-shipping sub-items.
Rung 1's empty-result branch read "a successful query returning zero merged
PRs means that sub-item closed without shipping code ... Only a failed query
falls to rung 2." But an empty rung 1 means only that no PR named the item
with a CLOSING KEYWORD, and two very different situations produce that: the
item shipped nothing, or it shipped under `Refs #N` — which work-items'
own work/SKILL.md explicitly sanctions, and which is the normal shape when
one PR advances several items while closing only the spin-offs it resolves.
Everything in the second case was classified no-code and silently dropped
while the report still claimed to cover the shipped whole. An empty rung 1
now falls to rung 2 as well; no-code requires both rungs empty; the verdict
names which rung resolved each item.

The mode found this by reviewing the container that shipped it — #3027's
dogfood criterion working exactly as intended. On #2933's own close-out,
#3056 carried Closes for three spin-offs only and #3067/#3071 carried no
closing keyword at all, so three sub-items that between them shipped 83
file-touches of adapter and generator code would have been dropped from the
basis of the review deciding whether that container could close.

BLOCKER — the container's record was a sub-item behind. #2946 closed today
with a fourth disposition, but aihero-shipping-course.md still asserted
"Issue #2946 remains open", which under archival-by-closure means closing on
a record that contradicts the tracker. Corrected, and deliberately as a
correction-in-place rather than a silent overwrite, since that section is
the durable record of the adapter track's scope decisions.

Recorded rather than filed, per the standing no-follow-up-issues rule:

The Linear schema check is now committed at adapters/linear/schema-check/.
It justified descoping #2946's live conformance and existed only as a
session artifact, so the claim could not be re-run by anyone. Ships
validate.mjs, the negative control that makes a green run mean something,
fidelity.sh proving the checked operations are the adapter's own text, and
a fetch-schema.sh that pulls the SDL rather than vendoring 1.2 MB. Verified
by running it: 18/18 operations valid, 10/10 injected faults caught, 11/11
strings verbatim. fidelity.sh earned its place immediately by catching that
the harness still expected the pre-0.39.9 team.labels query.

tracker-seam.md now names the item-content-trust boundary where it teaches
body reads — no live surface was unguarded, but the document a NEW surface
consults did not mention that what comes back is untrusted.

CONTRACT.md records the #2945 role-split topology decision. #2951 was closed
not_planned on the strength of it while it lived only in a sub-issue
comment, which this plugin's own disposable-tickets doctrine says is the
wrong place. States plainly that nothing implements `sources` today.

The README's synonym claim is scoped to the skills it is true of. Stuffing
ticket/issue into an adapter generator's triggers to satisfy a fleet-wide
sentence would buy a tidier claim at the cost of worse routing.

work-items 0.39.9 → 0.39.10; review 0.26.2 → 0.26.3.

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

claude Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

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


Claude is working on this

  • Gather context (PR diff, changed files)
  • Run /review:security-review per custom instructions
  • Post findings

Reviewed the diff directly (no .github/workflows files touched). Running an independent hunter/verifier pass over the new schema-check/ shell + Node tooling now.

@github-actions

github-actions Bot commented Aug 21, 2026

Copy link
Copy Markdown

Last security-reviewed head: 74c13db103bd53c639eead48f8ee9498762eed25. 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: ef6a92c6f1

ℹ️ 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/review/skills/quality-gate/context/close-out.md
@claude

claude Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 4m 11s —— View job


Claude's code review

  • Gather context (PR diff, changed files, CLAUDE.md / REVIEW.md)
  • Invoke /review:code-review procedure
  • Post findings as inline comments
  • Post summary comment

This repo has a claude-security-review.yml workflow, so this lane (per REVIEW.md) is scoped to correctness/design/conventions/docs and excludes security — nothing security-relevant stood out in this diff anyway (docs, a review-skill doc, and a new offline validation harness with no network credentials or live-server access).

4 findings posted inline, all on lines this PR touched or added:

  1. 🔴 docs/upstream/aihero-shipping-course.md#L439 — the corrected paragraph says "all 17 operations validate clean," but validate.mjs's ops array (this PR) has 18 entries, matching this PR's own work-items/CHANGELOG.md and PR description ("18/18"). 17 was correct for 0.39.9; this paragraph describes the post-fix state and should say 18. Notable because this section is explicitly called out in the PR as the durable record that must not drift from the tracker.
  2. 🔴 plugins/review/skills/quality-gate/context/close-out.md#L273 — an unchanged line immediately below the new rule still frames rung 2 as reached only when rung 1 "failed," contradicting the fix two paragraphs up ("an empty rung-1 result falls to rung 2 as well — not only a failed query").
  3. 🟡 .../schema-check/fetch-schema.sh#L18 — error hint points to /root/.ccr/README.md, which reads as a path from the authoring session's own sandbox, not something a contributor's checkout or CI runner would have.
  4. 🟡 .../schema-check/fidelity.sh#L13-21 — the WIT_LINEAR_ISSUE_FIELDS extraction is printed but never diffed against the multi-line F template in validate.mjs (used by 7 of 18 operations); only the 11 single-line ops get an automated verbatim check, so the README's "every operation string must match... VERBATIM" claim overstates this script's actual coverage.

Everything else — the two blocker fixes (close-out.md rung-1/rung-2 basis rule, the SSOT correction-in-place), the new schema-check harness's actual validation logic, CONTRACT.md/tracker-seam.md/README additions, and the version/changelog bumps — read correctly and consistently with the stated rationale. I did not re-run validate.mjs/negative.mjs/fidelity.sh myself (would require npm install graphql and fetching Linear's SDL over the network); the PR's claimed run results are author-claimed and unverified by me beyond the internal-consistency check in finding #1.

Branch: claude/pocock-shipping-breakdown-ukohlx

Comment thread docs/upstream/aihero-shipping-course.md Outdated
Comment thread plugins/review/skills/quality-gate/context/close-out.md Outdated
@github-actions

github-actions Bot commented Aug 21, 2026

Copy link
Copy Markdown

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

…ncile rung 2

Five review findings on #3083, all correct, and three of them are the same
mistake I have spent this branch calling out in other people's code.

Every script in the schema-check harness printed FAIL / MISSED / MISMATCH
and then EXITED 0. No caller — a shell, CI, a future close-out — could tell
a passing run from a failing one. I committed three checks that cannot go
red, ran them, saw green, and reported that as verification. A check that
cannot fail is exactly the vacuous green this seam has spent three PRs
eliminating. All three now return 1 on failure.

fidelity.sh had a deeper hole: it matched each operation against the ADAPTER
only, never against validate.mjs. So validate.mjs could have held a
different — and still schema-valid — query while both scripts stayed green
and the adapter's real request went unvalidated, which defeats the entire
guarantee the script advertises ("the thing validated IS the thing sent").
It now requires each operation on BOTH sides, and covers the multi-line
operations whitespace-normalized rather than merely printing them. That
raised coverage from 11 single-line literals to 16 operations, and needed an
unescaping step because the adapter writes its sigils as \$ inside
double-quoted shell strings while validate.mjs holds them bare.

close-out.md's rung 2 contradicted the rung-1 fix from the previous commit.
Rung 1 now says no-code when both rungs come back empty; rung 2 still said
no surviving hit means unresolved, which escalates to rung 3 and can stop a
close-out. Two sections prescribing opposite outcomes for the exact case the
fallback exists to preserve. Rung 2 now classifies by WHY rung 1 was empty:
succeeded-and-empty plus rung 2 empty is no-code and does not escalate;
FAILED plus rung 2 empty is unresolved and does, because then nothing has
actually looked successfully.

Verified by breaking each check deliberately: an invalid field in
validate.mjs, a neutered fault in negative.mjs, and a validate.mjs query
that no longer matches the adapter — each returns 1, and a clean run still
returns 0. That is the check I skipped the first time.

Versions unchanged: 0.39.10 and 0.26.3 have not shipped, so their entries
are extended rather than superseded.

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

claude Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

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


Claude's security review

  • Gather context (PR diff since last-reviewed head ef6a92c)
  • Apply skip gate
  • Review changed surface for security-relevant issues
  • Post findings

Skip gate hit — no findings to post.

Per /review:security-review's relevance gate, this run is scoped to commits since the last-reviewed head ef6a92c6f1717f2ea1ef681263a1fe76f42ff81b. The only new commit is fc96555 ("make the schema checks able to fail, and reconcile rung 2"), touching:

  • plugins/work-items/tools/work-item-tracker/adapters/linear/schema-check/{validate.mjs,negative.mjs,fidelity.sh,README.md} — adds nonzero exit codes when checks fail, and extends fidelity.sh to also match each literal against validate.mjs (not just the adapter source) plus whitespace-normalized multi-line operations.
  • plugins/review/skills/quality-gate/context/close-out.md — reconciles the rung-2 wording so an empty result is classified consistently.
  • plugins/review/CHANGELOG.md, plugins/work-items/CHANGELOG.md — changelog entries for the above.

None of this touches authentication, authorization, secrets/credentials, network input handling, or GitHub Actions workflow config. The new grep -qF comparisons in fidelity.sh operate only on hardcoded literals/file paths, not external or user-controlled input, so there's no injection surface. This is a no-op change from a security standpoint — exit-code/control-flow correctness fixes and documentation reconciliation only.

Per skip gate condition 2 (no security-relevant surface in the diff under review), no inline findings are posted.

@claude

claude Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 3m 42s —— View job


Claude's code review

  • Gather context (PR diff, changed files, custom instructions)
  • Invoke /review:code-review procedure
  • Post findings as inline comments
  • Post summary comment

This lane is scoped to correctness/design/conventions/docs (security is a separate lane per REVIEW.md). Reviewed the full cumulative diff at HEAD fc96555 (gh pr diff 3083), and compared the fixes in the second commit against the findings from the prior review pass on ef6a92c.

What fc96555 fixed (confirmed correct):

  • close-out.md rung-2's own reduction bullets (lines 295-303) now classify by why rung 1 was empty, resolving Codex's P1 finding about rung-2 contradicting the new rung-1 rule.
  • validate.mjs, negative.mjs, and fidelity.sh all now exit/process.exit(1) on failure instead of printing FAIL/MISMATCH/MISSED and returning 0 — resolves Codex's four P2 findings about the harness being unable to fail.
  • fidelity.sh now checks literals against both the adapter source and validate.mjs (not just the adapter), plus adds whitespace-normalized checks for 5 multi-line operation fragments.

4 findings posted inline, all repeats of findings from the prior review pass that the follow-up commit didn't address:

  1. 🔴 docs/upstream/aihero-shipping-course.md#L439 — still says "all 17 operations validate clean," but validate.mjs's ops array has 18 entries, matching this PR's own CHANGELOG and README ("18/18"). Untouched by fc96555.
  2. 🔴 plugins/review/skills/quality-gate/context/close-out.md#L273 — the "Rung 2" entry line still says "The rung-1 query failed:" as the sole trigger, contradicting the new rule two paragraphs above ("an empty rung-1 result falls to rung 2 as well"). fc96555 fixed the classification bullets further down but left this framing sentence as-is.
  3. 🟡 .../schema-check/fidelity.sh#L13-21 (refined) — the MULTILINE check fc96555 added covers the wrapper structure of fetch_issue/list-items issues/list-sub-items children, but not the shared ${F} field-selection block those three operations interpolate — WIT_LINEAR_ISSUE_FIELDS is still extracted and printed but never asserted against anything. No live drift today (checked directly), but the README's "every operation must match... VERBATIM" claim still overstates this script's coverage for those three ops.
  4. 🟡 .../schema-check/fetch-schema.sh#L18 — error hint still points to /root/.ccr/README.md, a path from the authoring session's own sandbox rather than a real path for other contributors/CI.

Everything else (the rung-1 basis-rule fix, the SSOT correction-in-place, CONTRACT.md/tracker-seam.md/README additions, version/changelog bumps, and the newly-fixed exit-code behavior) reads correctly. I did not re-run validate.mjs/negative.mjs/fidelity.sh myself (would need npm install graphql + network access to fetch Linear's SDL, which I don't have in this sandbox); I verified finding #3 by reading common.sh's WIT_LINEAR_ISSUE_FIELDS directly against validate.mjs's F constant rather than executing the script.

Branch: claude/pocock-shipping-breakdown-ukohlx

Comment thread docs/upstream/aihero-shipping-course.md Outdated
Comment thread plugins/review/skills/quality-gate/context/close-out.md Outdated
claude added 2 commits August 21, 2026 10:32
…count in the drift paragraph

Round three on #3083. All four correct.

The SSOT said "all 17 operations validate clean" where the harness now has
18 — written in the very paragraph arguing that a durable record which
contradicts reality is what archival-by-closure cannot survive. Same failure
mode, one paragraph later, in my own prose. The 17 in the 0.39.9 CHANGELOG
entry is left alone: that entry describes the state at that version, where
17 was correct.

close-out.md's rung 2 ENTRY sentence still read "The rung-1 query failed:"
while the rule two paragraphs up now says an empty rung 1 falls through too.
The previous commit fixed the classification bullets and left the sentence
that introduces them, so a reader landing on Rung 2 met the pre-fix framing
immediately below the fix.

fetch-schema.sh pointed a failing contributor at /root/.ccr/README.md — a
path from this authoring session's own sandbox, which exists in no
contributor checkout or CI runner. Replaced with advice that is true
anywhere.

fidelity.sh extracted WIT_LINEAR_ISSUE_FIELDS, printed it, and compared it
to nothing. That block is the shared field selection which fetch_issue,
list-items and list-sub-items all interpolate rather than spelling out, so
the three highest-traffic reads rested on a human noticing a difference
between two echo blocks — while the README claimed every operation was
checked. Now asserted against validate.mjs's F and contributing to ok/bad:
17 checks, and verified discriminating by drifting F on one side only
(exit 1, restored exit 0).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CnzwTKoTa6xNY7iyEzMYpm
…g-breakdown-ukohlx

# Conflicts:
#	plugins/review/CHANGELOG.md
@claude

claude Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

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


Claude's security review

  • Gather context (PR diff since last-reviewed head fc96555, custom instructions)
  • Apply skip gate
  • Review changed surface for security-relevant issues
  • Post findings

Skip gate hit — no findings to post.

Per /review:security-review's relevance gate, this run is scoped to commits landed since the last-reviewed head fc965558. Since then, HEAD (74c13db) adds:

  • d17fb8e — the only new commit belonging to this PR. Touches:
    • docs/upstream/aihero-shipping-course.md — corrects a stale operation count in prose (17 → 18).
    • plugins/review/skills/quality-gate/context/close-out.md — wording fix so the Rung 2 entry sentence matches the rule stated two paragraphs above.
    • .../schema-check/README.md — doc update describing the new fidelity check.
    • .../schema-check/fetch-schema.sh — replaces an error hint that pointed at /root/.ccr/README.md (a path specific to the authoring session's sandbox) with generic proxy guidance. Net security-positive (drops a leaked internal path); no new surface introduced.
    • .../schema-check/fidelity.sh — adds a new check comparing WIT_LINEAR_ISSUE_FIELDS (extracted from common.sh) against validate.mjs's F constant. Reviewed line-by-line: all inputs are local repo files, comparisons use grep -qF (fixed-string, no regex/glob expansion), and no user-controlled or network input reaches this script. No injection surface.
  • af5af55out of scope: this is an already-merged main commit (parent 26f26a9, not part of this branch's own history) pulled in by the merge commit 74c13db. It touches the markdown-format plugin's hook gating (if: Edit(*.md)/Edit(*.mdc)), unrelated to this PR's own changes.
  • 74c13db — the merge commit itself; introduces no diff beyond combining the two above.

None of the in-scope changes touch authentication, authorization, secrets/credentials, network input handling, or GitHub Actions workflow config. This is a documentation-reconciliation and offline-validation-tooling change only.

Per skip gate condition 2 (no security-relevant surface in the diff under review), no inline findings are posted.

Branch: claude/pocock-shipping-breakdown-ukohlx

@claude

claude Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

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


Claude's code review

  • Gather context (PR diff, changed files, custom instructions)
  • Invoke /review:code-review procedure
  • Post findings as inline comments
  • Post summary comment

This lane is scoped to correctness/design/conventions/docs (security is the separate /review:security-review lane). Reviewed the diff since the last-reviewed head fc96555 (git diff fc96555..74c13db, then filtered the merge commit's contents down to files this PR actually touches — the rest of the merge is unrelated commits already on main).

The only substantive new content is commit d17fb8e, which fixes all four findings from the prior two review passes. All four verified correct, no new issues introduced:

  1. docs/upstream/aihero-shipping-course.md:439 — now says 18, matching validate.mjs's ops array (confirmed 18 entries by count) and the CHANGELOG. The deliberate non-change at work-items/CHANGELOG.md:67 (still 17, describing the shipped 0.39.9 state) is correctly left alone — a changelog entry records what a release contained, not today's state.
  2. plugins/review/skills/quality-gate/context/close-out.md:273 — the Rung 2 entry sentence now reads "The rung-1 query failed or came back empty — both reach here, per the rule above," consistent with the corrected basis rule at line 253 and the classification bullets at lines 296–304. Read the full section end-to-end; no remaining contradiction.
  3. .../schema-check/fetch-schema.sh:18 — the session-local /root/.ccr/README.md path is gone, replaced with generic HTTPS_PROXY/CA-bundle guidance that holds regardless of where the script runs.
  4. .../schema-check/fidelity.sh:96-112WIT_LINEAR_ISSUE_FIELDS is now asserted against validate.mjs's F (not just printed) and contributes to ok/bad/exit status. Confirmed F and WIT_LINEAR_ISSUE_FIELDS are textually identical in the current source, so this closes the gap without a live mismatch. One-sided check (validate.mjs only, no adapter-source containment check) is correct here and not a regression from the two-sided LITERALS/MULTILINE checks above it: FIELDS is extracted directly from common.sh, so it is the adapter source by construction — there's nothing to check it against on that side.

No new findings. Plugin versions and CHANGELOG headers are consistent (review 0.26.4, work-items 0.39.10, both matching their .claude-plugin/plugin.json). I did not execute fidelity.sh/validate.mjs/negative.mjs myself (this lane's tool grant is scoped to Read/Glob/Grep/gh pr *, no general script execution) — verified the fix statically by reading the script logic and cross-checking the literal field-selection text against common.sh and validate.mjs directly, same approach as the prior two passes.

Branch: claude/pocock-shipping-breakdown-ukohlx

@kyle-sexton
kyle-sexton merged commit b21705f into main Aug 21, 2026
49 checks passed
@kyle-sexton
kyle-sexton deleted the claude/pocock-shipping-breakdown-ukohlx branch August 21, 2026 11:12
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.

2 participants