Skip to content

fix(sdd): sdd-attempt acquire/status reject valid change name resolvable by sdd-status #2116

Description

@hjagar

Pre-flight Checklist

  • I have searched existing open and closed issues and confirmed this is not a duplicate.
  • I understand that PRs will be rejected if the linked issue does not have status:approved.

📝 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

  1. 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.
  2. 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
    
  3. Observe Error: open native SDD runtime authority: invalid SDD change name (exit 1).
  4. Try the diagnostic-only status operation instead:
    gentle-ai sdd-attempt status --cwd <repo> --change <change>
    
  5. Observe the identical error, for the same change AND for a second, unrelated change name in the same repo.
  6. 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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions