Evidence (live on production 2026-06-12)
Both non-draft statements ship operator-facing scaffolding to readers:
Root cause: the upstream poly-track generator emits bodies containing operator instructions, and nothing on the LP side fails CI when such an entry is merged with draft: false. The existing statements.body.test.ts gates only EVM addresses.
TDD plan (failing tests first)
- Extend the content-lint module (
src/content/body-disclosure.ts or a sibling src/content/publish-gate.ts) with a pure function, e.g. findScaffoldingPhrases(body: string): string[] matching at minimum: left blank for the operator, flipping \draft: false`, TODO, Placeholder, belongs here`.
- Unit tests for the matcher (positive + negative cases — e.g. legitimate prose mentioning "todo lists" should be considered; decide case-sensitivity).
- Extend
src/content/statements.body.test.ts: for every statement file with draft: false (parse frontmatter), findScaffoldingPhrases(body) must be empty. Draft entries are exempt.
- These tests will FAIL against the current repo (2026-05-31-weekly is non-draft and contains the phrase) — that's the point. Fixing them requires real commentary (operator copy → hitl).
Acceptance criteria
| AC |
Status driver |
| CI fails when a non-draft statement contains scaffolding phrases |
new vitest content lint |
| 2026-05-31-weekly body rewritten with real commentary |
operator copy needed |
| 2026-05-monthly body has a real P&L prose breakdown (revenue 0 stated explicitly, opex itemized, runway honest) |
operator copy needed |
| Upstream poly-track template revised so generated bodies stop embedding operator instructions in publishable prose (move to an HTML comment like the monthly skeleton used) |
upstream coordination |
Evidence (live on production 2026-06-12)
Both non-draft statements ship operator-facing scaffolding to readers:
draft: false" — whiledraft: falseis set and the page is public.opex_usd: 0.0— violating closed issue Phase 3 / Slice 9: v1 launch — real weekly + monthly statements + schema-freeze + acceptance battery #10's AC ("real opex line-item breakdown in prose; if revenue == 0, say so explicitly").Root cause: the upstream poly-track generator emits bodies containing operator instructions, and nothing on the LP side fails CI when such an entry is merged with
draft: false. The existingstatements.body.test.tsgates only EVM addresses.TDD plan (failing tests first)
src/content/body-disclosure.tsor a siblingsrc/content/publish-gate.ts) with a pure function, e.g.findScaffoldingPhrases(body: string): string[]matching at minimum:left blank for the operator,flipping \draft: false`,TODO,Placeholder,belongs here`.src/content/statements.body.test.ts: for every statement file withdraft: false(parse frontmatter),findScaffoldingPhrases(body)must be empty. Draft entries are exempt.Acceptance criteria