Found while implementing #6748 + #6749 (one PR, packages/spec/src/automation/node-executor.zod.ts). Not fixed there: #6749 scoped itself to the TSDoc and explicitly recorded "no schema, baseline, or registry consequence", so touching this text would have widened that card's blast radius into generated artifacts. Filing instead, per Prime Directive #10.
The stale text
packages/spec/src/migrations/registry.ts, inside the MIGRATIONS_BY_MAJOR[17].semantic entry for the #5561 resumeAuthority secure-default flip, acceptanceCriteria closes with:
⚠️ supportsPause is a declaration nothing enforces (#5703), so an executor whose execute() returns suspend: true while leaving supportsPause false is warned about by NEITHER channel — check those by hand against the same rule.
That was true when written. PR #6746 (#6667, merged 2026-08-08 14:54Z) made it false: AutomationEngine.refuseUndeclaredSuspension refuses exactly that executor at the one seam every suspension passes through (packages/services/service-automation/src/engine.ts, refuseUndeclaredSuspension / the call site in executeNode).
Why it is worth a card rather than a shrug
This is not an internal comment. The string is projected verbatim into two published channels by gen:spec-changes / gen:upgrade-guide:
packages/spec/spec-changes.json — which the spec_changes MCP tool serves;
docs/protocol-upgrade-guide.md:396 — the "Done when" line an upgrading author (very often an AI, ADR-0033) reads.
So a v17 upgrader is currently told to hand-audit a class of mistake the engine now refuses on its own, and told that the mismatch is invisible when it is in fact loud. It is the same defect class as #6749 — #6746's residue in a doc surface — just in the channel #6749 did not name.
Suggested fix
Replace the ⚠️ clause with the post-#6746 statement: the mismatch is refused at run time (guard-class, not routable by a fault edge), so the remaining hand-check is only the resumeAuthority declaration itself. Then pnpm --filter @objectstack/spec gen:spec-changes && gen:upgrade-guide — editing this string alone goes stale in both generated files otherwise (the spec-property-retirement skill's "editing only a conversion's summary still goes stale" trap).
Unlabeled and unassigned for PM triage: it is a concrete defect (a published instruction that is now wrong), not an observation-class finding, but it is prose-only and harms nobody's runtime.
Generated by Claude Code
Found while implementing #6748 + #6749 (one PR,
packages/spec/src/automation/node-executor.zod.ts). Not fixed there: #6749 scoped itself to the TSDoc and explicitly recorded "no schema, baseline, or registry consequence", so touching this text would have widened that card's blast radius into generated artifacts. Filing instead, per Prime Directive #10.The stale text
packages/spec/src/migrations/registry.ts, inside theMIGRATIONS_BY_MAJOR[17].semanticentry for the #5561resumeAuthoritysecure-default flip,acceptanceCriteriacloses with:That was true when written. PR #6746 (#6667, merged 2026-08-08 14:54Z) made it false:
AutomationEngine.refuseUndeclaredSuspensionrefuses exactly that executor at the one seam every suspension passes through (packages/services/service-automation/src/engine.ts,refuseUndeclaredSuspension/ the call site inexecuteNode).Why it is worth a card rather than a shrug
This is not an internal comment. The string is projected verbatim into two published channels by
gen:spec-changes/gen:upgrade-guide:packages/spec/spec-changes.json— which thespec_changesMCP tool serves;docs/protocol-upgrade-guide.md:396— the "Done when" line an upgrading author (very often an AI, ADR-0033) reads.So a v17 upgrader is currently told to hand-audit a class of mistake the engine now refuses on its own, and told that the mismatch is invisible when it is in fact loud. It is the same defect class as #6749 — #6746's residue in a doc surface — just in the channel #6749 did not name.
Suggested fix
Replace the⚠️ clause with the post-#6746 statement: the mismatch is refused at run time (guard-class, not routable by a
faultedge), so the remaining hand-check is only theresumeAuthoritydeclaration itself. Thenpnpm --filter @objectstack/spec gen:spec-changes && gen:upgrade-guide— editing this string alone goes stale in both generated files otherwise (thespec-property-retirementskill's "editing only a conversion's summary still goes stale" trap).Unlabeled and unassigned for PM triage: it is a concrete defect (a published instruction that is now wrong), not an observation-class finding, but it is prose-only and harms nobody's runtime.
Generated by Claude Code