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

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions