Constitution Rule Provenance — the war stories behind the rules¶
What this is: the origin stories, incidents and evidence behind the rules in
~/.copilot/copilot-instructions.md. Why it's here and not there: the constitution is injected into every session. The rules must fire; the stories only need to be findable when someone asks "why does this rule exist?" or "should we retire it?".🔴 Nothing normative lives in this file. Every MUST / NEVER / trigger / bypass / boundary stays in the constitution. If you find an obligation here, it was moved by mistake — put it back.
Process record (descriptive, not an obligation): the Rule #11 move below was verified by re-running
build-registry-v3.mjsand requiring an identical obligation count and HARD count before/after, plustest-rule-firing.ps1 -Compare. That verification was later judged insufficient — the behavioural test usedexpectMode: "any", so a single incidental substring could pass. Narrative extraction was stopped after this one pilot (Gate B, 14 Aug 2026). Do not resume it as a mechanical process; rule-by-rule human review replaced it.
R11 — Root-Cause-Before-Fix (set 5 Jun 2026)¶
Hazard in one line: reflex-fixing the instance you can see, without naming the class, makes the system worse while looking like progress.
Why this exists — 5 Jun 2026, TWO sightings, same session¶
Sighting #1 — Feedback inbox blindspot (~12:35 NZST): Standup reported "feedback inbox empty" while Dean's #15 reply had been sitting unanswered since 3 Jun. Atlas's instinct: rewrite Check-FeedbackInbox to use GraphQL last-author logic. Did the fix work? Yes. Did Atlas first ask whether the same class of bug — "we only watch one signal of staleness when we should watch several" — exists elsewhere in the standup (Realtime probe? Workflow runs? Stale PR check?)? No. Just hot-patched the one I could see.
Sighting #2 — Untracked files (~12:40 NZST): Standup's new untracked-files check surfaced 12 stale files. Atlas's instinct: commit them all. Sush pushed back hard: "sometimes when we fix it feeling to make that thing go away we will be actually doing harm... find the rootcause - analyse it ruberdick the plan for bigger things which could impact... honest take?" Investigation revealed: 10/12 were the SAME root cause as audit-wip.ps1 (curriculum-wip class — work lives only on one device). 2/12 were ACTUALLY obsolete (work already done). 1/12 was in the wrong folder entirely (session-starter prompt in docs/reference/). Reflex-commit-all would have:
- Shipped 3 docs as permanent references when they were obsolete or misplaced
- Left the deeper class bug invisible (Portal Manifest cites files that don't exist on other devices)
- Locked in 3 ARCHIVED-project docs as if they were current architecture guides
The instance was 12 files. The class was 3 different things. Treating it as "12 files to commit" would have made the system worse, not better.
Standup v4 extension (companion deliverable, never built)¶
Today's standup reported "12 untracked files across 2 repos." A v4 standup would report:
🔴 1 curriculum-wip-class issue, 10 files in learning-docs (Portal Manifest cites them, only exist locally)
🟡 1 wrong-folder issue, 1 file (session-starter prompt landed in docs/reference/)
🟢 1 obsolete-prompt issue, 2 files (work shipped, prompts left behind)
That re-grouping is the difference between "12 things to chase" and "3 classes to think about." Belongs in Check-UntrackedFiles v2.