# Seams A seam is a place the map has not decided yet. Every one has **real types** — the signature is the handoff, so a ticket lands by replacing a body rather than by designing an interface. ``` yarn seams # this list, from the code ``` | Seam | Ticket | What is undecided | |---|---|---| | `src/audit/` | #21 | Retention and query design. Every *input* is already fixed by #14, #15 and #16. | | `src/integration/` | #18 | Formats and transport. Export can never exceed read — fixed by #14. | | `src/helmdocs/` | #19 | The API/MCP boundary. | | `src/kickoff/` | #17 | Everything. Starts where release reaches `awarded`. | | `src/claiming/` | #24 | Verification, and how "Acme Foods Inc" and "Acme Foods" resolve to one org. | | `src/pricing/` | #29 | The closed set of rate structure types. No model fallback exists, by #15. | | `src/extraction/` | #30 | Cannot be built or measured before the corpus exists. | | `src/extraction/completeness.ts` | #30 | Same, and needs *labelled known-misses* to have measurable recall. | | `src/scheduler/jobs/expiry.ts` | #27 | Per-type expiry rules — the catalogue defines them. | | `src/auth/entitlement.ts` | #35 | Resolution wiring only. The principle and the tier table are decided. | ## What is deliberately *not* a seam These are decided, and implemented as real code. Changing them means reopening a closed ticket, not filling in a blank. - **`src/db/index.ts`** — the single database entry point. The pool is not exported; `withActor` is the only way in. - **`src/db/privileged.ts`** — the enumerated privileged paths. Three of them. Adding a fourth should feel like a decision. - **`src/release/matrix.ts`** — the release matrix. One rule set, versioned. - **`src/scoring/routing.ts`** — what a model may decide. Two lanes of six.