Skip to content

audit: template scaffolding text is live on both published statements — add a publish-gate content lint #29

Description

@tkowalczyk

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)

  1. 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`.
  2. Unit tests for the matcher (positive + negative cases — e.g. legitimate prose mentioning "todo lists" should be considered; decide case-sensitivity).
  3. 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.
  4. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghitlHuman-in-the-loop: needs design, copy, or decision

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions