Skip to content

[finding] Adding a NEW hand-written page under content/docs/ makes a PR human-merge-only — always, and invisibly until the gate runs #13591

Description

@claude

[finding] Adding a genuinely NEW hand-written page under content/docs/ makes a PR human-merge-only — always, and invisibly until the gate runs

Filed by the domain:devx PM seat (post #6023, session session_01Pk26oZ12t5N1hwGW1m1MgC), R33, from evidence produced on #13548 / PR #13584. ⛔ Ungraded, unassigned.

The property

check:docs-audit-scope enforces a two-way equality between the set of hand-written pages under content/docs/** and the ALL_HANDWRITTEN list that lives inside .claude/workflows/docs-accuracy-audit.js.

.claude/** is governed surface (register printed today: docs/adr/** · .claude/** · skills/** · AGENTS.md · CLAUDE.md). Prime Directive #14 judges a PR on its file list, and "a mixed diff is not a proportion question — one path hit is enough."

Adding a new page forces an edit to a governed file, so the whole PR becomes human-merge-only: ⛔ never armed, ⛔ never queued. Modifying an existing page does not, because it is already listed.

Measured, not inferred

On PR #13584 (a 7-file, +1928 diff whose only governed line is a single ALL_HANDWRITTEN entry):

run result
non-governed six files alone exit 1+ 1 hand-written doc(s) exist but are not listed
the one governed line alone exit 1- 1 listed path(s) do not exist
both together exit 0scope is in sync with content/docs/: 190 hand-written doc(s)

⇒ the AGENTS.md remedy for a mixed diff — "split the governed files into their own PR"cannot be applied: it produces two PRs each red on a required gate, the governed one red until the other merges. An ordering deadlock, not a sequencing inconvenience.

Control, confirming this is about ADDING rather than about docs work generally: 2be4a6729 — the isSystem census commit, the pattern #13548 was told to mirror — touched 5 files, none under .claude/, because system-context.mdx was already listed in its parent (grep count 1).

Why the existing escape hatches do not apply

Why this is worth a card

⚠️ It is invisible at dispatch time. A PM reading a card that says "write a new documentation page" sees no governed path in any file list; the governed hit only materialises when the gate runs, after the work is done. ⇒ no dispatch fence can be written for it, and every such card silently costs a human merge that nobody budgeted.

⚠️ And the direction is wrong for the fleet: the governed-surface rule exists so that agent-instruction and policy files get human eyes. A new customer documentation page is not that — it acquires the ceremony incidentally, through a bookkeeping list that happens to live in .claude/.

Options, ⛔ no decision claimed

  1. Accept and document it — write the property into the gate's header and the dispatch playbook so it is at least predictable and budgeted. Cheapest; changes nothing.
  2. Move ALL_HANDWRITTEN out of .claude/ into a non-governed artifact the node:vm body can be handed at build time. ⚠️ Non-trivial: the vm sandbox is the reason it is inline, and docs-accuracy-audit.js 的 ALL_HANDWRITTEN 清单 11 条全部指向改名前的 protocol/objectos/* —— 内部文档审计静默漏审整个 protocol/kernel 目录 #4851's "one subject, two hand-kept lists" bill has to stay paid.
  3. Carve .claude/workflows/** out of the governed register. ⛔ Narrowing the governed surface is a governance change and squarely a maintainer decision — noted for completeness, ⛔ not recommended by this seat.

Refs: #13548 / PR #13584 (the evidence) · #4851, #4920 (why the list is inline and un-excludable) · Prime Directive #14 · 2be4a6729 (the ADD-vs-MODIFY control)


Generated by Claude Code

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions