P0011: split Policies vs. Requirements into distinct categories (captain-ratified, below evidence floor — named exception) - #305
Conversation
…eep, C1 2026-07-20) — maintainer-gated
Canon Quality — P0010 Retrieval-Readiness
|
Canon Quality — Homepage Surfacing ✅50 essay(s) scanned. Soft report — never blocks; the hard field gate is the Frontmatter Schema job. All published essays resolve to the homepage feed. Report: |
Canon Quality — Frontmatter Schema ✅All 50 file(s) in Validator: |
Canon Quality —
|
| Line | Rule | Occurrence | Message |
|---|---|---|---|
| 242 | dead-reference |
klappy://writings/nothing-new-even-ai |
URI does not resolve |
writings/choosing-faith-not-fear.md — 1 finding(s)
| Line | Rule | Occurrence | Message |
|---|---|---|---|
| 203 | dead-reference |
klappy://writings/four-questions-that-change-everything |
URI does not resolve |
writings/getting-started-with-odd-and-oddkit.md — 4 finding(s)
| Line | Rule | Occurrence | Message |
|---|---|---|---|
| 69 | legacy-link-pattern |
/page/writings/the-journey-from-ai-tasks-to-ai-augmented-workflows |
Use a klappy:// URI instead of /page/ path |
| 202 | legacy-link-pattern |
/page/docs/oddkit/proactive/proactive-bootstrap |
Use a klappy:// URI instead of /page/ path |
| 204 | legacy-link-pattern |
/page/docs/examples/project-instructions-template |
Use a klappy:// URI instead of /page/ path |
| 260 | legacy-link-pattern |
/page/writings/the-journey-from-ai-tasks-to-ai-augmented-workflows |
Use a klappy:// URI instead of /page/ path |
writings/the-broken-wall-and-the-buried-talent.md — 1 finding(s)
| Line | Rule | Occurrence | Message |
|---|---|---|---|
| 332 | dead-reference |
klappy://draft-zeros/appendix-a-the-biblical-roots |
URI does not resolve |
writings/the-voice-came-first.md — 1 finding(s)
| Line | Rule | Occurrence | Message |
|---|---|---|---|
| 244 | dead-reference |
klappy://writings/four-questions-that-change-everything |
URI does not resolve |
Soft-block mode — this status is informational; the job will not fail. Hard-block ships in PR-3.2 after the observation cycle.
What to do for each finding:
- Fix the slug if the target now lives at a different
klappy://URI.- Remove the link if it is no longer needed.
- Allowlist with a reason if the rot is intentional (e.g. forward-ref to an upcoming article): place
<!-- audit-allow: dead-reference reason="..." -->on the line above the offending link. The directive is line-level and scopes to the next markdown link.
Spec: klappy://docs/oddkit/specs/oddkit-audit · Workflow: .github/workflows/canon-quality.yml · Run: #401
Inline proposed language extracted verbatim to canon/meta/policies-vs-requirements.md
per captain instruction 2026-07-20 ('A and merge it') — one-merge landing shape.
Promotion from the first distillation sweep (C1, successor charter, 2026-07-20). Drafted by sweep flight
run_fb133d81, transplanted by the dispatch seat (klappy.dev push refused to the flight — documented fallback). Patch wasgit apply --checkverified against main. Merging is the maintainer's alone (M3) — defer and reject are legitimate outcomes and each promotion's Evidence section says so honestly.Full report + kirigami foldout:
docs/reports/2026-07-20-first-distillation-sweep.mdonsweep/2026-07-20-first-distillationin outcomes-driven-development.uri: klappy://docs/promotions/P0011-policies-vs-requirements-split
title: "P0011: Policies vs. Requirements — Split an Overloaded Category So Steering Failures Stop Reproducing"
audience: docs
exposure: nav
tier: 3
voice: neutral
stability: evolving
tags: ["promotions", "proposed", "policy", "requirements", "steering", "prd", "governance"]
promotion_status: proposed
P0011: Policies vs. Requirements — Split an Overloaded Category So Steering Failures Stop Reproducing
Observed Pattern
The program has overloaded "policy" to cover everything that shapes AI behavior, from durable abstract guidance down to the specific functional needs of a single build. Two failure modes follow from the collapse:
A requirement written as if it were policy inherits policy's durability expectations and becomes artificially resistant to change, when it should be revisable per build.
A policy written as if it were a requirement inherits requirements' fast-changing cadence and churns on every build cycle, when it should be stable.
Affects: mode-output contracts, PRD gates, and any surface that currently asks for "policy" without naming which of the two artifact types it means
Outcome without the split: steering failures of the two shapes above continue to reproduce, each misdiagnosed as a one-off rather than an instance of a named category error
Evidence
Total observations: 1 (direct captain ruling, not a repeated-validator-failure pattern)
Independent occurrences: 1 — this promotion does not meet
docs/promotions/README.md's literal rule ("No promotion without ≥2 independent validations"). Flagged squarely, not softened: this is below the pipeline's stated floor, not merely a "different evidence class." It is drafted anyway because the evidentiary basis is a direct captain ruling already recorded (candidates/2026-07-18-policies-vs-requirements-split.md, status: ratified) rather than a validator-discovered failure pattern, and the sweep judges that a captain's own in-session ratification is a legitimate basis for the maintainer to consider — but the maintainer should treat the ≥2-validations rule as unmet here, andacceptedon the strength of the ruling alone (rather thandeferredpending independent corroboration) is a deliberate exception to the pipeline's own numeric bar, not a case where the bar was satisfied.Affected workflows: any workflow that produces or consumes something currently labeled "policy" — mode-output contracts, PRD gates, canon authoring
Current Handling
No canon document currently names this split.
canon/meta/writing-canon.mdand the PRD gate discuss what canon documents look like, but neither distinguishes POLICIES (durable, canon-shaped) from REQUIREMENTS (fast-changing, PRD-shaped) as a named category question a document must answer before being filed.Proposed Promotion
Target Document
canon/meta/policies-vs-requirements.md(new)Section
Whole document; new file.
Proposed Language