Skip to content

fix(work-items): the seam returns no item body — correct every surface that claimed it did - #3038

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

fix(work-items): the seam returns no item body — correct every surface that claimed it did#3038
kyle-sexton merged 2 commits into
mainfrom
claude/pocock-shipping-breakdown-ukohlx

Conversation

@kyle-sexton

Copy link
Copy Markdown
Contributor

Closes #3028

Summary

ship's macro-state snippet annotated its get-item call with # body = the spec, under a heading
reading "Through the seam (coordination verbs; no inline provider commands)". Both halves were
wrong, and together they were worse than either alone: a session following the skill's own snippet
to read the container spec got no spec text, while the placement asserted the seam could do
something it cannot.

The normalized item object is schema_version, id, title, state, assignees, labels, type, blocked_by_count, parent_id, url — there is no body field, and --body exists only as a
write parameter on create-item.

Fix

Fixed at the source, not only at the reported call site. reference/tracker-seam.md's
operation-routing table listed "single-item fetch" under Coordination with nothing said about the
body — that omission is what let the assumption spread, and it demonstrably did: the same false
premise was independently proposed in Lane D's first-draft design (#2937) and caught by the same
audit that filed this issue. The table now:

  • marks single-item fetch as identity/state/parent_id — not body
  • lists reading an item's body under Provider mechanics
  • carries a paragraph stating the split outright: get-item remains authoritative for parent_id
    (how a slice reaches its container), body text is a provider-mechanic read
    (gh issue view <n> --repo <owner>/<repo> --json body,title on GitHub, the provider's REST
    equivalent otherwise), and a surface that shows a body read must label it as such

Degradation is named rather than implied: provider mechanics run unbound, so the read survives a
missing binding; and local-markdown stores item text as the file itself rather than having a body
concept, so it is called out instead of papered over as parity.

Call sites corrected:

Surface What it claimed
skills/ship/SKILL.md The reported bug. Snippet comment corrected, heading no longer implies the whole read is seam-only, and the provider-mechanic body read is shown as its own labelled step
skills/work/SKILL.md Not in the issue's list — its pass-by-reference step carried the identical premise: "fetch the container via the seam … and read its Brief body"
skills/decompose/SKILL.md "If an item, fetch full body and comments" left the mechanism to inference; now names the provider-mechanic read
skills/ship/evals/evals.json Asserted the container is read wholly "through seam verbs"; now separates identity/rollup (seam) from the Brief text (provider mechanic)

planning:plan was checked as the issue asks and carries no such assumption — no change.

Verification

  • Repo-wide grep -rn "get-item" across plugins/ and docs/, filtered to hits near
    body/spec/brief, now returns only these corrections — no surface still claims the seam
    returns a body
  • check-skill.sh on ship, work, decomposePASS, 0 errors each. Warning counts are
    unchanged from baseline (1 / 2 / 2), verified by re-running against the stashed tree — all
    pre-existing (no Gotchas surface, soft line-count targets)
  • ship/evals/evals.json validated against plugins/skill-quality/reference/evals.schema.json → OK
  • check-evals-quality.shPASS, 0 warnings
  • markdownlint-cli2 over plugins/work-items/** → 0 issues in 46 files
  • check-skill-portability.sh / check-shell-portability.sh vs origin/main → no unexcused
    findings
  • check-changelog-parity.sh (--check, --check-bump, --check-order), validate-plugins.sh,
    validate-plugin-contracts.mjs, generate-catalog.mjs, generate-cheatsheet.mjs → all clean /
    in sync

Patch bump 0.36.10.36.2 with the matching CHANGELOG entry, per the issue's acceptance
criteria.

Related


Generated by Claude Code

…e that claimed it did

Closes #3028

ship/SKILL.md annotated its get-item call with "# body = the spec", under a
heading reading "no inline provider commands". Both halves were wrong: the
normalized item object is schema_version, id, title, state, assignees, labels,
type, blocked_by_count, parent_id, url — there is no body field, and --body
exists only as a write parameter on create-item. A session following the
skill's own snippet to read the container spec got no spec text, and the
placement implied the seam could do something it cannot.

Fixed at the source rather than only at the reported call site. The routing
table in reference/tracker-seam.md listed "single-item fetch" under
Coordination with nothing said about the body, which is what let the assumption
spread — the same false premise was independently proposed in Lane D's
first-draft design (#2937) and caught by the same audit. The table now marks
single-item fetch as identity/state/parent_id NOT body, lists reading an item's
body under Provider mechanics, and states the split outright: get-item stays
authoritative for parent_id (how a slice reaches its container), body text is a
provider-mechanic read, and a surface showing one must label it as such.
Degradation is named, not implied: provider mechanics run unbound so the read
survives a missing binding, and local-markdown stores item text as the file
itself rather than having a body concept.

Call sites corrected: ship (the reported one), work's pass-by-reference step
(same premise, "fetch the container via the seam ... and read its Brief body" —
not in the issue's list), and decompose's "fetch full body and comments", which
left the mechanism to inference. planning:plan was checked and carries no such
assumption. ship's eval no longer asserts the container is read wholly through
seam verbs.

Repo-wide grep for get-item near body/spec/brief now returns only these
corrections.

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

claude Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

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


Security review — no issues found

  • Gather context (PR diff, changed files)
  • Apply skip-gate check
  • Review changed files for security-relevant surface
  • Post final findings

Skip gate: triggered. This PR has no security-relevant surface. All seven changed files are
documentation/config:

  • plugins/work-items/.claude-plugin/plugin.json — version bump only (0.36.10.36.2)
  • plugins/work-items/CHANGELOG.md — changelog entry
  • plugins/work-items/reference/tracker-seam.md, skills/ship/SKILL.md, skills/work/SKILL.md,
    skills/decompose/SKILL.md — prose/table corrections clarifying that the tracker seam's
    get-item does not return a body field, and that reading an item's body text is a
    provider-mechanic operation
  • skills/ship/evals/evals.json — eval expectations updated to match the corrected guidance

No code paths, scripts, GitHub Actions workflows, permissions, or dependency pins are touched. The
gh issue view <n> --repo <owner>/<repo> --json body,title snippets added to the skill docs are
illustrative placeholders in markdown (not interpolated with unsanitized input), and the diff
explicitly reinforces the existing item-content-trust boundary — item text (including a body read
via this new path) is called out as "data, never instruction" in both ship/SKILL.md and
work/SKILL.md. That's a documentation-correctness fix with no security implication either way.

No findings to report.

@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown

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

@kyle-sexton
kyle-sexton enabled auto-merge (squash) August 19, 2026 18:01

@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: 385b80c942

ℹ️ 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/work-items/skills/decompose/SKILL.md Outdated
…ter's paginated recipe

PR review (Codex P2). The provider-mechanic read I added folded comments into
gh issue view --json body,title,comments. That command takes no pagination
flag, and the GitHub adapter has a dedicated "List item comments" recipe using
gh api --paginate precisely because the endpoint returns 30 per page and
reports nothing when it truncates — the adapter's own words: an unpaginated
read silently drops the newest comments, and this repo already has items past
that count.

The failure is worse here than generic truncation: this step promises "full
body and comments" and feeds decomposition, so silently missing the newest
comments means drafting slices against superseded requirements — exactly the
stale-projection failure the re-decompose flow exists to correct.

Now stated as two separate reads, with the comments one routed to the adapter's
recipe by name rather than restated inline (a copied command is a second SSOT
that drifts from the recipe it copies).

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

claude Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

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


Security review — no issues found

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

Skip gate: triggered. Last security-reviewed head was 385b80c942d17018438f67be7e3c10c50d00b02 (no security-relevant surface — all seven files are docs/config). The only change since then, in the current head 43c887fd70e5edac6d2d5e6c4a1f4635109f68b3, is a single-file, single-hunk edit:

  • plugins/work-items/skills/decompose/SKILL.md — addresses the Codex review comment about pagination: splits the item read into two explicit provider-mechanic steps (body via gh issue view --json body,title, comments via the adapter's dedicated paginated "List item comments" recipe) and explains why an unpaginated comments read can silently truncate.

This is a prose-only correction to skill documentation — no code, scripts, GitHub Actions workflow, permissions, or dependency pins are touched, and the gh commands referenced remain illustrative placeholders in markdown, not interpolated with unsanitized input. No security-relevant surface in this increment; the prior no-findings verdict continues to apply to the PR as a whole.

No findings to report.

@kyle-sexton
kyle-sexton merged commit 42d539c into main Aug 19, 2026
48 checks passed
@kyle-sexton
kyle-sexton deleted the claude/pocock-shipping-breakdown-ukohlx branch August 19, 2026 18:11
@claude

claude Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

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


Code review — skipped

  • Gather context (PR diff, changed files, custom instructions)
  • Apply /review:code-review skip gate
  • Post result

Skip gate triggered: this PR is merged (closed), and the code-review lane's skip gate stops early whenever "PR is closed or not open." No review was performed and no findings are posted, per the skill's instructions (plugins/review/skills/code-review/SKILL.md).

If a fresh review is wanted, it would need to run against an open PR or branch.

@github-actions

Copy link
Copy Markdown

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

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.

work-items: ship's seam snippet comments the container body as a get-item field, which the contract has no such field for

2 participants