Pre-flight Checklist
📝 Bug Description
gentle-ai sdd-attempt acquire and gentle-ai sdd-attempt status both fail unconditionally with Error: open native SDD runtime authority: invalid SDD change name, regardless of which change name is passed. This happens even for change names that gentle-ai sdd-status <change> --cwd <repo> --json resolves correctly (valid changeRoot, populated artifactPaths), in the same repo, on the same invocation shape. Tested with two different, syntactically valid change names (kebab-case, alnum + hyphens only) — both fail identically, so this is not specific to one change's name.
There is also a related flag-contract inconsistency: sdd-status accepts the change name as a positional argument (sdd-status <change> --cwd <repo>) and rejects --change position-style docs elsewhere suggest; sdd-attempt accepts --change <name> as a flag but rejects the same value positionally (unexpected sdd-attempt argument "<change>"). Discovering the right shape required trial and error, similar to what's already tracked in #1937 (no --help support on sdd-attempt).
🔄 Steps to Reproduce
- In a git repo with an OpenSpec-backed SDD change already scaffolded (
openspec/changes/<change>/ with proposal/spec/design/tasks present), confirm sdd-status resolves it:
gentle-ai sdd-status <change> --cwd <repo> --json
→ returns a populated changeRoot and artifactPaths for that change.
- Attempt to acquire a runtime attempt token for the same change:
gentle-ai sdd-attempt acquire --cwd <repo> --change <change> --request-id <id> --work-unit <label> --evidence-goal <goal> --max-attempts 3 --max-changed-lines 800
- Observe
Error: open native SDD runtime authority: invalid SDD change name (exit 1).
- Try the diagnostic-only
status operation instead:
gentle-ai sdd-attempt status --cwd <repo> --change <change>
- Observe the identical error, for the same change AND for a second, unrelated change name in the same repo.
- Try the change name positionally instead of via
--change (mirroring sdd-status's accepted shape):
gentle-ai sdd-attempt acquire <change> --cwd <repo> ...
→ Error: unexpected sdd-attempt argument "<change>" — rejected outright, no fallback to the flag form being tried instead.
✅ Expected Behavior
sdd-attempt acquire/status should resolve the same change identity that sdd-status already resolves successfully for the identical --cwd + change name, and return state: proceed (or a genuine, discoverable blocked/complete state per the compact contract) rather than a change-name validation error.
❌ Actual Behavior
sdd-status <change> --cwd <repo> --json → success, valid changeRoot/artifactPaths.
sdd-attempt acquire --cwd <repo> --change <change> ... → Error: open native SDD runtime authority: invalid SDD change name.
sdd-attempt status --cwd <repo> --change <change> → same error.
- Reproduced with two distinct, unrelated, syntactically valid change names in the same repo — not name-specific.
- The Native Runtime Attempt Authority step in the SDD orchestrator workflow (
sdd-attempt acquire before every runtime-bearing sdd-apply/sdd-verify launch) could not be satisfied at all; the SDD pipeline had to proceed without acquiring/settling runtime-attempt tokens for this session.
Environment
Pre-flight Checklist
status:approved.📝 Bug Description
gentle-ai sdd-attempt acquireandgentle-ai sdd-attempt statusboth fail unconditionally withError: open native SDD runtime authority: invalid SDD change name, regardless of which change name is passed. This happens even for change names thatgentle-ai sdd-status <change> --cwd <repo> --jsonresolves correctly (validchangeRoot, populatedartifactPaths), in the same repo, on the same invocation shape. Tested with two different, syntactically valid change names (kebab-case, alnum + hyphens only) — both fail identically, so this is not specific to one change's name.There is also a related flag-contract inconsistency:
sdd-statusaccepts the change name as a positional argument (sdd-status <change> --cwd <repo>) and rejects--changeposition-style docs elsewhere suggest;sdd-attemptaccepts--change <name>as a flag but rejects the same value positionally (unexpected sdd-attempt argument "<change>"). Discovering the right shape required trial and error, similar to what's already tracked in #1937 (no--helpsupport onsdd-attempt).🔄 Steps to Reproduce
openspec/changes/<change>/with proposal/spec/design/tasks present), confirmsdd-statusresolves it:changeRootandartifactPathsfor that change.Error: open native SDD runtime authority: invalid SDD change name(exit 1).statusoperation instead:--change(mirroringsdd-status's accepted shape):Error: unexpected sdd-attempt argument "<change>"— rejected outright, no fallback to the flag form being tried instead.✅ Expected Behavior
sdd-attempt acquire/statusshould resolve the same change identity thatsdd-statusalready resolves successfully for the identical--cwd+ change name, and returnstate: proceed(or a genuine, discoverableblocked/completestate per the compact contract) rather than a change-name validation error.❌ Actual Behavior
sdd-status <change> --cwd <repo> --json→ success, validchangeRoot/artifactPaths.sdd-attempt acquire --cwd <repo> --change <change> ...→Error: open native SDD runtime authority: invalid SDD change name.sdd-attempt status --cwd <repo> --change <change>→ same error.sdd-attempt acquirebefore every runtime-bearingsdd-apply/sdd-verifylaunch) could not be satisfied at all; the SDD pipeline had to proceed without acquiring/settling runtime-attempt tokens for this session.Environment
gentle-aiversion: 2.2.3openspec(repo-local planning home)blocked/authority_failureJSON, not a hard CLI error), [bug] SDD subcommands do not expose usable help or complete flag contracts #1937 (no--helponsdd-attempt, same flag-discoverability pain point that made diagnosing this harder)