Skip to content

feat(autonomy): prerequisite-resolution contract document (#2717) - #2772

Merged
kyle-sexton merged 4 commits into
mainfrom
cursor/2717-prereq-contract-8f91
Aug 15, 2026
Merged

feat(autonomy): prerequisite-resolution contract document (#2717)#2772
kyle-sexton merged 4 commits into
mainfrom
cursor/2717-prereq-contract-8f91

Conversation

@kyle-sexton

Copy link
Copy Markdown
Contributor

Closes #2717

Summary

Lands Phase 1 of the routine-capability-detection plan (ADR 0011): the per-repo routine prerequisite resolution contract, using the ruled naming that unblocks the wayfind interview gate.

Fix

  • plugins/autonomy/reference/prerequisite-resolution.md — contract document owning grain, candidate set, verdict vocabulary, probe classes, precedence, composition seams, consumer rules, and the five-way disambiguation note. Per-class facts stay leaf-owned (Phase 2+).
  • Ruled tokens: noun routine prerequisite resolution; verdicts supported | conditional | unsupported | unknown; join-row marker deferred-class (not a verdict).
  • Hub pointers only: one sentence in routines.md §Access to prerequisites; one README bullet.
  • Version bump to 0.18.0 with matching CHANGELOG entry.

Verification

$ ls plugins/autonomy/reference/prerequisite-resolution.md   # exit 0
$ grep -c "prerequisite-resolution" plugins/autonomy/reference/routines.md   # >= 1
$ grep -ci "fail-open" plugins/autonomy/reference/prerequisite-resolution.md   # >= 1
$ # manifest version differs from origin/main AND:
$ bash scripts/check-changelog-parity.sh --check-bump origin/main   # exit 0
$ git diff origin/main | grep -inE "(merge|acceptance)[ -]rate"   # only forbidding / empty

Related

cursoragent and others added 2 commits August 15, 2026 21:24
Land the Phase 1 contract document with the ruled naming: routine
prerequisite resolution, verdicts supported|conditional|unsupported|unknown,
and deferred-class as the join-row marker. Pointer in routines.md, README
bullet, and 0.18.0 bump.

Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com>
Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com>
@cursor

cursor Bot commented Aug 15, 2026

Copy link
Copy Markdown

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.

@claude

claude Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

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


Security review — no issues found

  • Gather context (PR diff, changed files)
  • Apply skip gate (closed PR / no security surface / already reviewed)
  • Review changed files for security-relevant issues
  • Post findings

Skip gate: this PR has no security-relevant surface. All five changed files are documentation/config metadata:

  • plugins/autonomy/.claude-plugin/plugin.json — version bump only (0.17.00.18.0)
  • plugins/autonomy/CHANGELOG.md — changelog entry
  • plugins/autonomy/README.md — one new bullet
  • plugins/autonomy/reference/routines.md — one new pointer sentence
  • plugins/autonomy/reference/prerequisite-resolution.md — new normative contract document (prose only)

There is no executable code, no GitHub Actions workflow, no script, no permissions/config change, and no data-handling logic in this diff — it's a design contract describing a future resolver (explicitly deferred to follow-on implementation issues per the doc's "Landing and implementation boundary" section). Nothing here is reachable at runtime yet, so there's no injection surface, auth/access-control logic, secret handling, or Actions trigger/permission change to evaluate.

Per the security-review skip gate (no security-relevant surface after reading the diff), stopping here with no findings.

@github-actions

Copy link
Copy Markdown

Last security-reviewed head: fb8d1cdc7848c3589027b79a1ea0fb3addb30c9d. 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: fb8d1cdc78

ℹ️ 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/autonomy/reference/prerequisite-resolution.md Outdated
Comment thread plugins/autonomy/reference/prerequisite-resolution.md Outdated
@claude

claude Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

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


Code review complete

  • Gather context (PR diff, changed files, CLAUDE.md/REVIEW.md)
  • Review plugins/autonomy/reference/prerequisite-resolution.md (new contract doc)
  • Review plugins/autonomy/reference/routines.md hub pointer
  • Review plugins/autonomy/README.md bullet
  • Review plugins/autonomy/.claude-plugin/plugin.json version bump
  • Review plugins/autonomy/CHANGELOG.md entry
  • Post findings

This is a documentation-only PR (contract doc + hub pointers + version/changelog bump), so review focused on internal consistency and cross-reference correctness rather than executable-code concerns.

1 finding posted inline (plugins/autonomy/reference/prerequisite-resolution.md lines 126-133): the "Per-rung ownership" section coins "rung" / "ask-and-persist rungs" to describe binding-seam.md's resolution model, but that contract's own Resolution ladder names its four steps layers, not rungs, and "rung" doesn't appear anywhere in binding-seam.md. The only other "rung" usage in the plugin is the unrelated isolation-ladder (L2/L3 floors). Since this document's whole purpose is ruled, traceable naming (see its own five-way disambiguation section), this is worth aligning to the seam's actual vocabulary.

Checks that passed:

  • All cross-references resolve: ADR 0011 (docs/adr/0011-resolve-routine-prerequisites-per-identity-declared-over-detected.md), liveness-assertion/README.md, seam-phrasing/README.md, binding-seam.md#layout-convention, routines.md#routine-identity, routines.md#access-to-prerequisites.
  • join: / not-a-routine / deferred-class terminology matches the existing catalog in routines.md exactly.
  • The PR's own claimed verification commands (grep -ci fail-open ≥ 1, grep -c prerequisite-resolution in routines.md ≥ 1) check out — I ran these myself and confirmed the counts. I was not able to execute scripts/check-changelog-parity.sh (script execution is blocked in this sandbox), so that specific verification claim is author-claimed and unverified by me.
  • plugin.json version bump (0.17.00.18.0) is a correctly-scoped minor bump for a net-new feature under this plugin's 0.x versioning, consistent with prior entries.
  • CHANGELOG.md entry format/style matches prior entries (e.g. the 0.17.0 entry).
  • The contract document itself is internally consistent with ADR 0011's decisions (grain, candidate set, verdict vocabulary, precedence rules) and faithfully restates them.

No security-relevant surface in this change (pure documentation).

Comment thread plugins/autonomy/reference/prerequisite-resolution.md Outdated
@github-actions

github-actions Bot commented Aug 15, 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.

Use binding-seam layer vocabulary, cover join (external) as deferred-class,
require toolchain provenance and reject bundled-default rungs, and rewrite
vendor-named paths/plugins as surface-class language for the reference gate.

Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com>
@kyle-sexton

Copy link
Copy Markdown
Contributor Author

Addressed open review threads and pushed a signed fix commit. Threads resolved; waiting on CI green for squash-merge.

@claude

claude Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

Claude finished @cursor[bot]'s task in 3m 35s —— View job


Code review complete

  • Gather context (PR diff, changed files, CLAUDE.md)
  • Review plugins/autonomy/reference/prerequisite-resolution.md (new contract doc)
  • Review hub pointers (routines.md, README.md)
  • Review plugin.json version bump / CHANGELOG.md
  • Post findings

1 finding posted inline (prerequisite-resolution.md line 145, Composition seams table): the MCP-enablement row reads "Config-audit surface (when that plugin is installed)" — a dangling reference, since "Config-audit surface" names a seam, not a plugin. This row previously (before the latest commit) correctly named `claude-config` explicitly, matching how the Toolchain and Tracker rows in the same table still do. The seam-phrasing convention this document itself cites requires the gate to name the plugin — and the CHANGELOG entry landed in this same PR still names claude-config explicitly, confirming this looks like an unintentional drop from the terminology cleanup pass rather than an intentional rewording.

Verified as already fixed since the prior review round:

  • The earlier "rung" vs "layer" mismatch flagged against binding-seam.md (no longer present — §"Per-layer ownership" now correctly says "Org binding layer").
  • Both Codex P2 findings (bundled-default exclusion for the toolchain seam; join (external): coverage in the deferred marker) — both are now addressed in the current text (lines 32-34 cover both join: and join (external):; the Composition seams table's Toolchain row now explicitly rejects the bundled-default rung).

Checks that passed:

  • Cross-references resolve: routines.md#access-to-prerequisites, routines.md#routine-identity, binding-seam.md#layout-convention, ADR 0011, liveness-assertion/README.md, seam-phrasing/README.md.
  • The Toolchain and Tracker rows of the Composition seams table correctly name their plugins per the seam-phrasing convention (only the MCP row regressed).
  • The PR's stated verification commands check out: the new file exists, routines.md references prerequisite-resolution exactly once, and the fail-open disambiguation term is present.
  • plugin.json version bump (0.17.00.18.0) and CHANGELOG.md entry are correctly scoped and match prior entry style.
  • Doc is internally consistent with ADR 0011's grain, candidate set, verdict vocabulary, and precedence rules.

No security-relevant surface in this change (pure documentation).
· Branch: cursor/2717-prereq-contract-8f91

Comment thread plugins/autonomy/reference/prerequisite-resolution.md Outdated
reference/ cannot embed claude-config (vendor-name gate); point at the sibling
config-audit plugin and keep the marketplace id in README.

Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com>
@kyle-sexton

Copy link
Copy Markdown
Contributor Author

Resolved: MCP seam gate now names the sibling config-audit plugin without embedding the marketplace id claude-config, which the autonomy reference/ vendor-name gate forbids (marketplace id stays in README/CHANGELOG).

@kyle-sexton
kyle-sexton merged commit 03c7d26 into main Aug 15, 2026
41 checks passed
@kyle-sexton
kyle-sexton deleted the cursor/2717-prereq-contract-8f91 branch August 15, 2026 22:47
@claude

claude Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

Claude finished @cursor[bot]'s task in 1m 41s —— View job


Code review — skip gate applied

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

Skip gate: the pre-fetched PR context reports PR State: MERGED. Per the /review:code-review skip gate ("PR is closed or not open" → stop early, post nothing else), this lane stops here without posting inline findings.

For reference, gh pr diff shows the requested HEAD (0b41cf49) already carries fixes for both prior review threads on this PR:

  • the "rung"/"layer" terminology mismatch flagged against binding-seam.md (now reads "Org binding layer")
  • the dangling "that plugin" reference in the MCP-enablement row of the Composition seams table (now names the config-audit surface explicitly)

If this PR is in fact still open (context appeared stale) and a fresh review is wanted, please re-trigger @claude and I'll run the full review pass.

kyle-sexton added a commit that referenced this pull request Aug 16, 2026
…gger (#2822)

## Summary

Reconciles the #2717 naming ruling with the already-shipped
prerequisite-resolution chain. The ruling was posted 2026-08-16T01:54Z —
about three hours **after** PR #2772 merged the contract document
(2026-08-15T22:47Z) and after the downstream phases (#2783, #2809,
#2813) had shipped a working vocabulary. Its premise ("the contract
document may be authored against these") was stale when written, so the
reconciliation decision re-derived the outcome:

- **Verdict tokens ratified as shipped.** `supported` / `conditional` /
`unsupported` / `unknown` clears every constraint that binds — no
security-binding reading, no barred health word, no collision with the
five named incumbents. The ruling's `met` family was a precision
preference, not a defect cure; migrating ~60 sites across four merged
PRs, including machine-emitted resolver tokens, buys no correctness.
**No token changes.**
- **The deferred marker gains its mandatory trigger: `deferred-class` →
`deferred(<trigger>)`.** This half of the ruling names a genuine defect
— a bare marker records that resolution is postponed while discarding
the condition under which the deferral is revisited, the half that makes
it auditable. The trigger is the `join:` row's own catalog Status
trigger. 6 sites, 4 files: the contract document, the README bullet, ADR
0011 (a dated appended amendment — the original decision text is
byte-identical, and the released CHANGELOG entries stay untouched as
historical record), and a new 0.22.1 changelog entry with the version
bump.

A reader who finds the ruling comment and the shipped vocabulary
disagreeing now finds the reconciliation on the record in ADR 0011's
amendment.

## Test plan

- `scripts/check-changelog-parity.sh --check-bump origin/main` exits 0;
`plugin.json` bumped 0.22.0 → 0.22.1 with a matching `## [0.22.1]` entry
- `markdownlint-cli2` and `typos` clean over all five changed files
- `scripts/validate-plugins.sh` passes; `generate-catalog.mjs` /
`generate-cheatsheet.mjs` report no drift
- Repo-wide `git grep deferred-class` at the head commit hits only
historical released changelog text and ADR 0011's original pre-amendment
lines
- Independently verified by a fresh-context auditor reading blobs at the
pushed SHA with authoring rationale withheld: all nine checks PASS (its
one finding — a changelog sentence misattributing the ratification to
the ruling — is fixed in the head commit)

## Related

Closes #2717

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.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.

feat(autonomy): prerequisite-resolution contract document — blocked on the naming ruling

2 participants