feat(work-items): seam contract hygiene — version handshake, ADR 0014, label-default SSOT - #2970
Conversation
…, label-default SSOT (#2942) - Add a directional tolerant-reader contract-version handshake at the adapter seam (major skew refuses with exit 3 in both directions; newer-minor proceeds with a stderr notice; unversioned manifests cannot handshake), wired into the dispatcher before every dispatch, with unit tests and conformance skew coverage. Prerequisite for the adapter-onboarding generator (#2950). (F3.6) - Write ADR 0014 (seam engine plugin-canonical / adapters consumer-first, plus the no-standing-sandbox conformance note) and repoint the dangling "ADR 0022" citations in CONTRACT.md and the GitHub conformance binding. (F3.5) - Single-source the shipped role-label defaults in lib/labels.sh; binding resolution, the frontier filter default, and the dispatcher now read the constants instead of restating the literals. (F3.7) - Record fixed-string postures ([Maintenance] title prefix, recurring-schedule path) in label-taxonomy.md; document gh-absent degradation honestly in CONTRACT.md with the supported backfill ritual (REST fallback explicitly deferred, MCP-as-adapter rejected). (#2942 session finding) - work-items 0.35.25. Closes #2942 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CnzwTKoTa6xNY7iyEzMYpm
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
I'll analyze this and get back to you. |
|
Claude finished @kyle-sexton's task in 5m 39s —— View job Claude's review of PR #2970
This repo runs a dedicated security lane ( One finding posted inline on 🔴 Important — leading-zero version components crash Everything else reviewed clean:
Note: this environment's Bash tool blocked ad hoc script execution (only |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 98e294d647
ℹ️ 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".
…view)
A manifest schema_version with a leading-zero component ("08.0") passes the
MAJOR.MINOR regex, but bare (( )) arithmetic reads 08 as octal and errors —
and an errored condition is falsy, so both refusal branches were skipped and
the major-incompatible adapter was waved through. Force base-10 with 10# at
parse time; regression-covered (leading-zero major now refuses with exit 3).
Refs #2942
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CnzwTKoTa6xNY7iyEzMYpm
|
Claude finished @kyle-sexton's task in 2m 14s —— View job Security review complete ✅
No security issues found. This PR is contract-hygiene/documentation work on the work-item-tracker seam (version handshake, ADR citation fix, label-default consolidation,
Nothing here touches authn/authz, secrets handling, or GitHub Actions workflow permissions — out of scope for this lane's |
|
Last security-reviewed head: |
|
Claude has reviewed this PR 3 times. The lane skips further automatic reviews after 5; deleting this comment resets the count. |
|
Claude finished @kyle-sexton's task in 2m 49s —— View job Code review —
|
Refs #2942 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CnzwTKoTa6xNY7iyEzMYpm
Both #2975 (merged) and this branch claimed work-items 0.35.25. This branch's contract-hygiene entries move to a new 0.35.26 section; plugin.json bumped to match. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CnzwTKoTa6xNY7iyEzMYpm
|
Claude finished @kyle-sexton's task in 1m 24s —— View job Security review —
|
|
Claude finished @kyle-sexton's task in 1m 41s —— View job Claude's review of PR #2970 (
|
#2970 took 0.35.26 on main; this branch's ticket/issue-synonym entries move to a new 0.35.27 section and plugin.json bumps to match. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CnzwTKoTa6xNY7iyEzMYpm

Closes #2942
Summary
Closes the four contract-hygiene findings on the work-item tracker seam (spec container #2933, seam-scrutiny findings F3.5–F3.7 plus the 2026-08-17 session finding): the dangling ADR citation, the missing contract-version handshake, the triple-defined role-label defaults, and the undocumented
gh-absent degradation path.Fix
.verbsfrom the adapter manifest, so a consumer-local, shadowing, or generated adapter at a different contract revision skewed silently.wit_check_contract_version(lib/json.sh) now runs before every dispatch: major skew refuses with exit3naming both versions and the direction-appropriate fix ("update the plugin" vs "update or regenerate the adapter"); a newer-minor manifest proceeds with a stderr notice (tolerant reader); older-minor proceeds silently; an unversioned manifest refuses. Documented both directions in CONTRACT.md "Contract-version handshake". Prerequisite for the adapter-onboarding generator (Adapter-onboarding skill — generator for the provider tail #2950).docs/adr/never reached. The direction-locking rationale is now recorded as ADR 0014 (engine plugin-canonical / adapters consumer-first, plus the no-standing-sandbox conformance note); both citations repointed.needs-human,agent-ready,recurring) were defined in three places (lib/binding.shliterals,lib/frontier.shparameter default, dispatcher inline fallback). They now live once inlib/labels.sh; all three sites read the constants. Fixed-string postures for the[Maintenance]title prefix and the.github/recurring-schedule.jsonpath are recorded as deliberate deferrals inlabel-taxonomy.md"Recorded postures".gh-absent degradation documented. CONTRACT.md "Degradation withoutgh" records that MCP-only sessions cannot run thegithubadapter at all, explicitly defers a REST fallback (rationale recorded), rejects MCP-as-adapter, and documents the supported backfill ritual (body-textBlocked by:edges + provenance comment, replayed vialink-blocks/add-sub-itemfrom the nextgh ≥ 2.94session; leases excluded).work-itemsbumped to 0.35.25 with a CHANGELOG entry.Verification
local-markdown76 cases / 0 failed,jira29 cases / 0 failed — including the new synthetic-skew handshake cases — and both re-run clean under agh/curl-blocking PATH shim.shellcheckclean on every touched shell file;markdownlint-cli20 issues on the four touched markdown files.Related
Refs #2933 (spec container), #2950 (adapter-onboarding generator — unblocked by the handshake), ADR 0014.
🤖 Generated with Claude Code
https://claude.ai/code/session_01CnzwTKoTa6xNY7iyEzMYpm
Generated by Claude Code