Kind-aware branch prefixes

Branch prefixes are static — one string for all work items. But the system already knows the work type: Ana classifies every scope as `feature`, `fix`, `chore`, or `milestone` (after Scope 1 ships). Teams with git conventions like `fix/`, `feature/`, `chore/` can't express those conventions through Anatomia. The branch always gets whatever single prefix is configured, regardless of what the work actually is. This scope makes `branchPrefix` kind-aware: a map from kind to prefix, so `fix/auth-timeout` and `feature/add-export` happen automatically based on what Ana already knows.

verdict PASSscore 23 / 24findings 8 (1 risk · 3 debt · 4 obs)duration 9h 49mrejection cycles 0shipped May 12, 2026surface cli

Pipeline timeline

Intent to proven code in 9h 49m across Think, Plan, Build, and Verify.

Think
67m
Plan
16m
Build
399m
Verify
12m

Assertion ledger

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

IDSaysMatcher
A001String-form branch prefix works exactly as beforeverifiedok
A002Map-form config returns the correct prefix for a given kindverifiedok
A003Map-form config falls back to feature prefix when no kind is specifiedverifiedok
A004String-form config ignores the kind parameter entirelyverifiedok
A005Unknown kind falls back to the feature key in the mapverifiedok
A006Partial map without a feature key falls back to the hardcoded defaultverifiedok
A007Empty map falls back to the hardcoded defaultverifiedok
A008Malformed map values fall back to the hardcoded defaultverifiedok

Findings 8 total

debtscope
Contract assertions A013-A019 have no tagged tests — verified by source inspection only
obspackages/cli/tests/utils/git-operations.test.tsclosed
Contract A001 has no tagged test for this contract — relies on pre-existing test from previous build
riskpackages/cli/src/commands/work.tsclosed
getWorkBranch glob pattern `*${slug}` may over-match for short slugs (e.g., slug 'fix' matches all branches containing 'fix')
obspackages/cli/src/utils/worktree.tsclosed
Detached HEAD produces branchName '(unknown)' — rev-list and log commands will fail silently, showing 0 commits and 0 days
debtpackages/cli/src/commands/work.tsclosed
printExistingWorktree duplicates HEAD-reading logic from getWorktreeInfo — same pattern in two places
+3more findings

Integrity seal

scopesha256:cb2de95e02a1e...
contractsha256:0339b9da5318c...
plansha256:5660d6157d9b5...
specsha256:cdd2087218aa4...
build-reportsha256:83e993a5567ea...
build-datasha256:87aef607de4fc...
verify-reportsha256:99d547dfbee2d...
verify-datasha256:09db2f87fe288...
audit cmd$ ana proof audit kind-aware-branch-prefixes   → all hashes match