Skip to content

doctor: report project readiness (is this project ready to certify and ship?) - #391

Merged
IanFrelinger merged 1 commit into
masterfrom
claude/doctor-project-readiness
Aug 24, 2026
Merged

doctor: report project readiness (is this project ready to certify and ship?)#391
IanFrelinger merged 1 commit into
masterfrom
claude/doctor-project-readiness

Conversation

@IanFrelinger

Copy link
Copy Markdown
Owner

ashlar doctor answered "is my machine set up"; it now also answers "is my project set up" — when run inside an ashlar project — as a separate verdict block that names the single next action to advance readiness.

The readiness ladder

verdictmeaningnext
NOT READYverify failingashlar verify
NOT CERTIFIEDverified, no keyashlar keys init
READY TO CERTIFYkeyed, no ledgerashlar verify
CERTIFIEDverified, keyed, ledger intactready
BLOCKEDcorrupt key or corrupt (altered) ledgerinvestigate

Reuses the verbs' own kernel logic (ProjectVerifier, OperatorKey, InstanceLedger). It ties the whole signing arc (#386#390) into one "am I ready to ship?" view.

Additive & safe

  • --path (default cwd); not an ashlar project ⇒ the block is omitted, so doctor outside a project is unchanged.
  • The environment checks, their exit code, and the existing doctor tests are untouched (the new param is optional and defaults to cwd, which is not a project during those tests). A projectReadiness field is added to --json.

Verification

5 unit tests pin the ladder (not-a-project, not-certified, ready-to-certify, certified, corrupt-ledger BLOCK). Smoke-verified end to end through the real binary: NOT CERTIFIED before keys → CERTIFIED · ledger intact (1 signed) after keys init + verify.

[coordinated-integration]

Application-only (the CLI host), no src/ changes; reuses kernel types already on master. The verbs it aggregates already live on master, and cert-gate (the sole required check) gates the merge.

…nd ship?
`ashlar doctor` answered "is my machine set up"; it now also answers "is my project set up",
when run inside an ashlar project (--path, default cwd). A separate verdict block, never folded
into the environment exit code, that aggregates the signals the product loop already exposes and
names the single next action:
NOT READY → verify is failing; run `ashlar verify`
NOT CERTIFIED → verified but no key; run `ashlar keys init`
READY TO CERTIFY → keyed but no ledger; run `ashlar verify`
CERTIFIED → verified, keyed, ledger intact — ready
BLOCKED → a corrupt key or a corrupt (altered) ledger
Reuses the verbs' own kernel logic (ProjectVerifier, OperatorKey, InstanceLedger); not an ashlar
project => the block is omitted entirely, so `doctor` outside a project is unchanged. Additive
only: the environment checks, their exit code, and the existing doctor tests are untouched (a new
optional --path/param defaults to cwd, which is not a project during those tests).
5 unit tests pin the readiness ladder (not-a-project, not-certified, ready-to-certify, certified,
corrupt-ledger block); smoke-verified end to end through the real binary (NOT CERTIFIED before
keys, CERTIFIED after keys init + verify).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@IanFrelinger
IanFrelinger merged commit 7c2c014 into masterAug 24, 2026
17 checks passed
@IanFrelinger
IanFrelinger deleted the claude/doctor-project-readiness branch August 24, 2026 04:39
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@IanFrelinger@PlzTouchGrass