Capture actual think time from Ana session start

The think phase in pipeline timing systematically undercounts. Every proof shows 1-2 minutes of "think" time because the clock starts at `ana work start` (when the slug directory is created), not when the Ana conversation actually began. The real thinking — investigation, navigation, tradeoff discussion, scope drafting — happens before `work start`. A 45-minute scoping conversation records as 1 minute.

verdict PASSscore 15 / 17findings 6 (1 risk · 2 debt · 3 obs)duration 2h 17mrejection cycles 1shipped May 14, 2026surface cli

Pipeline timeline

Intent to proven code in 2h 17m across Think, Plan, and 1 Build→Verify phases.

Think
33m
Plan
5m
Build 1
72m

Assertion ledger

17 claims, each independently verified. Showing 8 — show all →

IDSaysMatcher
A001The CLI can resolve the Claude Code process ID from the current process treeverifiedok
A002PID resolution returns null when the process lookup failsverifiedok
A003PID resolution returns null when ps output is not a valid numberverifiedok
A004Running work status with --session creates a session file in .ana/state/verifiedfail
A005The session file contains a valid UTC timestampverifiedok
A006Running work status without --session does not create a session fileverifiedfail
A007Starting a new work item with a session file uses the session timestamp instead of nowverifiedok
A008The session file is deleted before the timestamp is written to savesverifiedok

Findings 6 total

riskpackages/cli/tests/commands/work.test.tsscope
Conditional PID guard makes 8 tests potential no-ops in environments where getClaudePid() returns null
debtpackages/cli/tests/commands/work.test.tsclosed
A015 reads source code instead of testing runtime behavior — pragmatic for Commander registration
debtpackages/cli/tests/commands/work.test.tsclosed
A008 ordering verified by inspection only — no test enforces delete-before-use sequence
obspackages/cli/src/commands/work.tsclosed
Async/sync IO inconsistency — session file written with fsPromises.writeFile but read with fs.readFileSync
obspackages/cli/src/commands/work.tsclosed
spawnSync used instead of spec-recommended execSync — better choice, structured exit code handling
+1more findings

Integrity seal

scopesha256:1bb0af7d63e74...
contractsha256:7339ff7c7b13a...
plansha256:e6fc05b5ee008...
specsha256:fd954256b5e73...
build-reportsha256:eee148c17579d...
build-datasha256:70312df532332...
verify-reportsha256:5b0997e763783...
verify-datasha256:0d469ba9d01f6...
audit cmd$ ana proof audit capture-think-time   → all hashes match