Skip to content

docs(topic-docs): the contract-slice prune rule is normative, unenforced, and contradicted 17 times on main #1422

Description

@kyle-sexton

The contradiction

docs/conventions/topic-docs/README.md states the contract-slice lifecycle as normative:

  • Contract tier is "Committed on the task branch only; pruned before merge" (:33).
  • Step 4: "A final commit prunes the contract slice <contract_dir>/<slug>/".
  • Step 5: "Enforcement: a required check that the net PR diff (git diff --name-only base...head) contains no path under the resolved <contract_dir>/**".

Neither the pruning nor the enforcement is real:

  • origin/main carries 17 topic slices under docs/topics/, and new ones keep landing — docs/topics/context-engineering-claude-5/PLAN.md arrived in the current batch.
  • No such required check exists. The only occurrence of docs/topics in .github/workflows/ is a comment in ci.yml:39 about path filters.

Why it matters

The gap is not cosmetic. It surfaced as a review finding on #1400, where a reviewer correctly cited :33 and :290-309 to argue a PR should not merge — against a repository whose observable convention is the opposite. Any reviewer, human or automated, reading the doc will keep reaching the same conclusion, and any author following it will keep deleting work the repository in fact keeps.

An unenforced normative rule that practice contradicts 17 times is worse than no rule: it makes the doc unciteable without checking whether this particular clause is the live one.

Decide, do not split the difference

One of these, not a softening of both:

  1. The doc is what's out of date — topic slices are durable and land with their PRs. Rewrite the lifecycle: drop steps 4–5, restate the contract tier as committed-and-kept, and describe the promotion-to-knowledge-vault path as an option for durable rationale rather than a prerequisite for merge.
  2. The practice is what's wrong — build the required check step 5 already specifies, and prune the 17 existing slices through the knowledge-vault seam. This is the expensive branch, and it invalidates the accumulated cross-references to those paths.

Recommendation is (1): the doc's own rationale for pruning is diff noise and review-surface cleanliness, and the repository has been paying that cost deliberately for 17 slices without anyone reverting the practice. That is a decision already made in code; the doc simply never recorded it.

Filed rather than fixed inline because it changes a normative convention document, and because the correct branch is a judgment call about what the repository wants topic slices to be — not a drafting error.

Surfaced while driving #1400 to merge. #1400 merges under reading (1); if (2) is chosen instead, #1400's two files are pruned along with the other 17.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.priority: mediumReal value, no hard deadline; normal backlog flow.status: needs-decisionAwaiting a human or maintainer judgment call.

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions