You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 1b33db4
Browse filesBrowse the repository at this point in the historyBrowse files
docs(spec): cite Cursor-native hook fail-closed validation and Claude-import coexistence as req-tg-016/017
Adds Section 8.5.9 to the OpenAPM v0.1 spec documenting the already-shipped
Cursor-native hook installation behavior from this PR: fail-closed
conversion validation (req-tg-016) and Claude-import-coexistence rejection
(req-tg-017, both install orders). Narrowly bound to the accepted
Cursor-native(+Claude-import) capability only, not a universal
target-native obligation. Includes vendor-grounded editorial note
(cursor.com/docs/hooks, cursor.com/docs/reference/third-party-hooks)
distinguishing APM's own conservative conversion/safety policy from
vendor-documented defaults (vendor default is merge-not-reject; vendor
top-level shape is not documented as closed).
Updates Section 8.7 and 11.3.2 enumerations, Appendix C (2 new rows,
total 127 statements / 122 MUST), the requirements manifest, the
0.1.44 (proposed) revision-history row, regenerated CONFORMANCE
artifacts, and new drift-sentinel conformance tests
(tests/spec_conformance/test_cursor_hook_reqs.py) citing the
already-existing, already-passing behavioral integration tests.
Folds 4 round-1 findings from the real apm-spec-guardian 4-persona panel
(spec-swagger-editor, spec-oci-editor, spec-pkgmgr-editor,
spec-tag-architect; synthesizer ship_decision=fold_and_ship,
shocked_meter_avg=8.0, 0 blockers across all 4 panels):
- req-tg-017: defines the "observable overlap" predicate normatively
(non-empty hook-event-identifier intersection after alias
normalization), closing a 4/4-panel-convergent second-implementer
reproducibility gap.
- req-tg-016: adds a SHOULD-level sentence requiring implementations to
document/expose their accepted source-format vocabulary, so
conformance claims are independently verifiable.
- Editorial note: drops the stale "eight" alias count (staleness magnet
in informative text).
- 0.1.44 revision row: adds a one-line clarification that revision label
0.1.43 and requirement id req-tg-015 are reserved by a concurrent
sibling unit (PR #3150) on its own branch, not an unintentional gap.
Deferred to v0.1.1 (not folded here, too heavy for a surgical mechanical
fold): a machine-readable accepted-vocabulary artifact, and a stale-
partial-artifact disposition clause for req-tg-016. Rejected: the
stale cursor_preflight_done cache-bypass surface (out of scope, requires
a src/apm_cli/** change this unit does not authorize) and the full
vocabulary-artifact proposal (superseded by the lighter SHOULD-sentence
folded above).
No src/apm_cli/** changes. No spec waiver. Statement count unchanged at
127 (122 MUST, 5 SHOULD) -- this fold is prose-only, no new anchors.
tests/spec_conformance/ re-verified: 293 passed, 2 skipped (orphan 4-way
invariant intact). Closes the Spec conformance gate gap for PR #3149 /
issue #3129.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,6 +14,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
14
14
### Fixed
15
15
16
16
- Codex agent conversion preserves native `model` and `model_reasoning_effort` settings and warns about dropped metadata instead of silently losing it. (#3150)
17
+
### Added
18
+
19
+
- OpenAPM v0.1 spec: documented the already-shipped Cursor-native hook installation fail-closed conversion validation and Claude-import-coexistence rejection as [req-tg-016] and [req-tg-017] (Section 8.5.9). (#3149)
Copy file name to clipboardExpand all lines: docs/public/specs/manifests/openapm-v0.1.requirements.yml
+10Lines changed: 10 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -465,6 +465,16 @@ requirements:
465
465
section: "8.5.1"
466
466
conformance_class: consumer
467
467
notes: "a conforming consumer providing the Codex-native agent conversion capability preserves a source-declared model or model_reasoning_effort string value in its native top-level placement, leaves either field absent when absent from the source, diagnoses a non-string source value by field name without including that value, and emits a diagnostic bounded on dropped-field count (at least one shown when any are dropped), per-field name length, and ASCII-sanitized field-name display (never the value) for any other dropped, non-capability-restriction frontmatter field"
468
+
- id: req-tg-016
469
+
keyword: MUST
470
+
section: "8.5.9"
471
+
conformance_class: consumer
472
+
notes: "a Cursor-native hook installation implementation fails closed (no partial write) when converting a source-declared hook configuration whose event, top-level key, or handler field falls outside the accepted Cursor-native vocabulary, emitting an actionable diagnostic naming the unrecognized value(s)"
473
+
- id: req-tg-017
474
+
keyword: MUST
475
+
section: "8.5.9"
476
+
conformance_class: consumer
477
+
notes: "a Cursor-native hook installation implementation detects, before writing, an observable overlap with an in-effect Claude-settings hook import for either install order, and rejects the write with an actionable diagnostic rather than merging, redirecting, or broadening accepted input, without altering the Claude import's own settings"
@@ -4177,6 +4234,7 @@ renumbering of conformance classes.
4177
4234
| 0.1.41 | 2026-09-09 | Alias containment and lock-replay contract for PR #2901. Added [req-mf-025] (Section 4.3.2, consumer MUST), the optional lock-entry `alias` field, and conformance coverage. Under Section 9.2 this is an additive optional field and a defensive definition of previously unspecified alias behavior, not behavior-neutral errata: unsafe or reserved aliases can newly fail; valid dotted aliases remain accepted; surrounding whitespace is canonicalized; recorded aliases determine replay placement; absent aliases retain the unaliased layout. Source identity and permitted local source paths are unchanged. Older readers preserving the unknown field do not thereby implement placement support. Selects distinct 0.1.41 schema publication identities without changing published v0.1 URLs or bytes; Section 9.3 remains pending (see Appendix A). Sections 1.3, 4.9, 5.2, 10.7, 10.11, 11.3.2, and Appendix C updated. Statement count: 122 -> 123 (118 MUST, 5 SHOULD). |
4178
4235
| 0.1.42 (proposed) | 2026-09-30 | Optional deployed-prompt audit capability for PR #2962. Added conditional governance [req-pl-019] and [req-pl-020] in Section 6.8.1, both enumerations, Appendix C, requirements manifest and behavioral conformance coverage. Under Section 9.2 this is a new opt-in conformance capability, not behavior-neutral errata or a reinterpretation of an existing obligation: implementations not claiming it acquire no new required feature. APM claims it; newly discovered prompt findings and incomplete native coverage can newly fail default and CI audits, command-only content remains non-failing, and protected remediation is refused before writes. No schema, lockfile version, existing mandatory feature, drift-policy or ownership rule changes. Section 9.3 reviewer approvals and public comment period remain pending; this proposal is not evidence of adoption. Statement count: 123 -> 125 (120 MUST, 5 SHOULD). |
4179
4236
| 0.1.43 (proposed) | 2026-10-03 | Codex-native agent model preservation and bounded dropped-metadata diagnostic for PR #3150 (closes #3126). Added [req-tg-015] (Section 8.5.1, consumer MUST): a conforming consumer providing the Codex-native agent conversion capability MUST preserve a source-declared `model` or `model_reasoning_effort` string value in its native top-level placement, MUST leave either field absent when absent from the source, MUST diagnose a non-string value by field name without including that value, and MUST emit a diagnostic bounded on both dropped-field count and per-field name length (never the value) for any other dropped, non-capability-restriction frontmatter field. Under Section 9.2 this is a new opt-in conformance capability scoped to consumers providing the Codex-native agent conversion capability, not behavior-neutral errata: it does not require or imply preservation of any other `config.toml`-native key and does not define behavior for any other conversion target. Implementations not providing Codex-native agent conversion acquire no new required feature. No schema, lockfile version, existing mandatory feature, drift-policy or ownership rule changes. Section 9.3 reviewer approvals and public comment period remain pending; this proposal is not evidence of adoption. Section 8.7, Section 11.3.2, and Appendix C updated. Statement count: 125 -> 126 (121 MUST, 5 SHOULD). |
4237
+
| 0.1.44 (proposed) | 2026-10-03 | Spec-citation fold for already-accepted Cursor-native hook installation (PR #3149, closes issue #3129's conformance gap). Added [req-tg-016] (Section 8.5.9, consumer MUST): fail-closed validation of out-of-vocabulary events, top-level keys, and handler fields when converting into the Cursor-native hook format. Added [req-tg-017] (Section 8.5.9, consumer MUST): pre-write detection and rejection of a Cursor-native-plus-Claude-import hook overlap, for both install orders, without altering the Claude import's own settings. Both anchors are bound specifically to the already-accepted Cursor-native (and Cursor-native-plus-Claude-import) capability, not a universal target-native or cross-target obligation. Section 8.7, Section 11.3.2, and Appendix C updated. Under Section 9.2 this is a defensive citation of previously unspecified fail-closed/coexistence behavior already shipped and tested in PR #3149, not a new mandatory feature for implementations that do not provide this capability. Section 9.3 reviewer approvals and public comment period remain pending; this proposal is not evidence of adoption. Statement count: 125 -> 127 (122 MUST, 5 SHOULD). Revision label `0.1.43` and requirement id [req-tg-015] are reserved by a concurrent sibling unit on a separate branch and are not assigned here. |
0 commit comments