Reviewing decisions
Before to-openspec, treat the Auth Change as a plan you are willing to lock. After implementation, authright review checks for silent inversions.
Before export (human pass)
- Decisions are accepted in
decisions.yaml(and narrative indecisions.mdas needed). Edit files deliberately. - Contract is filled (
contract.md) with implementable constraints. - Lock when export-ready:
authright change AUTH-YYYY-NNNN --ready- Request match — the locked plan must still match what you asked. Export waits until this check passes:
authright request-match AUTH-YYYY-NNNN- Export:
authright to-openspec AUTH-YYYY-NNNNIf something is still fuzzy, fix analysis/decisions first—exporting a vague package only moves confusion into OpenSpec or Plan mode.
After implementation (authright review)
Write .authright/reviews/<id>/semantic.md first (implementation + handoff Binding package — OpenSpec or agent-plan/requirements.md — vs accepted decisions). Then:
authright review AUTH-YYYY-NNNN
authright review AUTH-YYYY-NNNN --no-source- Allowed from
EXPORTED(and implementing states) - Writes
.authright/reviews/<id>/(report.md,result.yaml; recordssemantic_reviewonly ifsemantic.mdalready existed) - Does not mutate application source
- CLI = deterministic heuristics (decision mentions, contract fragments, security keyword checklist)—not a full audit. Mechanical PASS is not proof that code honors Decision Lock.
- Host
semantic.mdis judgment, not a lifecycle flip: semantic FAIL does not changeVERIFIED/VERIFICATION_FAILED - Default source-signal: missing required aliases for locked architecture/technology →
FAIL.--no-sourceskips.
Decision Lock: accepted Auth Decisions must not be silently inverted during handoff implementation. Review is how you catch that cheaply.