Add milestone kind

The kind system classifies work as `feature`, `fix`, or `chore`. These three values are accurate but incomplete — there's no way to distinguish routine feature work from significant new capabilities. A filter button added to an existing page and an entirely new authentication system are both "feature." This matters because kind flows into the proof chain, the website ship log, and will soon drive branch prefix selection (Scope 2: kind-aware branch prefixes). A fourth kind, `milestone`, gives Ana and developers a way to signal "this is announcement-worthy" — enabling downstream consumers to surface significant work differently from routine work.

verdict PASSscore 18 / 18findings 6 (0 risk · 2 debt · 4 obs)duration 3h 7mrejection cycles 0shipped May 12, 2026

Pipeline timeline

Intent to proven code in 3h 7m across Think, Plan, Build, and Verify.

Think
61m
Plan
5m
Build
10m
Verify
5m

Assertion ledger

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

IDSaysMatcher
A001Scopes with milestone kind are accepted by the validatorverifiedok
A002Invalid kinds are rejected with an error listing all four valid valuesverifiedok
A003The scope parser recognizes milestone and returns itverifiedok
A004The scope parser handles milestone case-insensitivelyverifiedok
A005The ProofChainEntry type accepts milestone as a kind valueverifiedok
A006The ProofSummary type accepts milestone as a kind valueverifiedok
A007The Ana agent template lists milestone with classification guidanceverifiedok
A008The dogfood agent is byte-identical to the templateverifiedok

Findings 6 total

obsclosed
Contract assertions A015/A016 reference docs-research/supermock/ files that are not tracked in git — untracked directory, cannot be modified in a branch
debtpackages/cli/tests/commands/artifact.test.tsclosed
A002 test asserts on echoed invalid input ('fix + chore'), not on the four-value error string — source inspection confirms correct text but test would pass even if milestone were missing from the error message
obspackages/cli/src/utils/proofSummary.tsclosed
extractScopeKind regex matches **Kind:** anywhere in file, not section-scoped — pre-existing issue, milestone addition doesn't change the risk profile
obswebsite/components/proof-feed/proof-feed.module.cssclosed
Dark mode milestone badge has no background override — inherits light-mode color-mix background. Works because transparent mix renders identically in dark mode, but inconsistent with feature badge which doesn't set explicit dark background either
obswebsite/components/proof-feed/ProofFeed.tsxclosed
No test verifies milestone badge CSS class or label output — website has no test suite, so ProofFeed rendering is unverified beyond type checking and build compilation
+1more findings

Integrity seal

scopesha256:b1370566ce3de...
contractsha256:fb4204aa9ee80...
plansha256:1a60de7db709a...
specsha256:00fbe860ff5d2...
build-reportsha256:620fc2712c021...
build-datasha256:01ce6cabd49a5...
verify-reportsha256:47869c336dbab...
verify-datasha256:28e232bd5b8cf...
audit cmd$ ana proof audit add-milestone-kind   → all hashes match