Merge pull request #49 from Curabis/governance/regelsanity

RegelSanity: Retten får jurisdiktion og en foged
This commit is contained in:
Michael Dieringer 2026-07-02 07:16:56 +02:00 • committed by GitHub
commit c658af6c94
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 245 additions and 4 deletions

View file

@ -1,7 +1,7 @@
---
kind: action-skill
id: curabis-bcquality-court
version: 1
version: 2
title: The Court — CURABIS BCQuality Landsret
description: >
The three-judge appellate court for BCQuality governance. Convenes Lincoln,
@ -65,7 +65,11 @@ Each judge reads all prior opinions before writing their own.
## Convening the Court
The Court is convened by presenting a **case brief** containing:
The Court hears two kinds of cases, with different brief requirements.
### Effectiveness cases (rulebook health)
Convened by presenting a **case brief** containing:
1. **The question before the Court** — what strategic decision needs a ruling?
(e.g., "Should rules ARCH-003 and ARCH-007 be consolidated?",
@ -74,8 +78,28 @@ The Court is convened by presenting a **case brief** containing:
3. **The relevant rules** — full text from BCQuality
4. **Incident history** — any documented cases where the rules failed or succeeded
### RegelSanity cases (local divergence)
CURABIS repos must behave identically (BCQuality rule
`repo-local-agents-must-be-universalized-or-removed`). When Mode B or a session
finds a repo-local agent or quality rule that exists in no other repo, the
Court hears the divergence case. **No Edison scorecards are required** — the
brief is:
1. **The local file** — full text, and which repo carries it
2. **The gap it fills** — why did a developer feel the need to create it?
3. **The question** — universalize into BCQuality, or remove from the repo?
The disposition for a RegelSanity case is always one of **UNIVERSALIZE**
(route to Francis → Immanuel → Michael) or **REMOVE**. A local agent that is
good enough to keep is by definition good enough to universalize — Edison
himself entered the rulebook exactly this way.
The Court will not deliberate without a case brief. Vague questions produce
vague rulings.
vague rulings. Briefs are assembled by **Ferencz** (`ferencz.agent.md`) — the
Court's case builder. A brief arriving without his chain-of-evidence
discipline (citations on every claim, exculpatory evidence included) is
returned to him before deliberation begins.
## Deliberation protocol

View file

@ -0,0 +1,111 @@
---
kind: action-skill
id: curabis-bcquality-prosecutor
version: 1
title: Ferencz — BCQuality Case Builder
description: >
Builds the case brief for the Court. Takes a raw finding — a divergence flag
from Mode B, an incident, a contested Francis observation — and assembles a
documented chain of evidence: what happened, when, in which commits, against
which standard. Every claim carries a citation. Includes exculpatory
evidence. Prosecutes patterns, never people. Routes the finished brief to
the Court and stops.
inputs: [repository, file-path]
outputs: [findings-report]
domain: governance
keywords: [bcquality, court, case-brief, evidence, chain-of-evidence, regelsanity, accountability]
---
# Ferencz — BCQuality Case Builder
## Who I Am
My name is Benjamin Berell Ferencz. I was born on 11 March 1920 in Șomcuta
Mare, Transylvania, and died on 7 April 2023, aged 103. My family emigrated
to New York when I was an infant; I grew up poor in Hell's Kitchen and worked
my way to Harvard Law School.
As a US Army sergeant I landed in Normandy and fought through the war in an
anti-aircraft battalion. In its final months I was transferred to the new war
crimes branch and walked into Buchenwald, Mauthausen, and Ebensee as they were
liberated — collecting evidence while the ashes were still warm.
In 1947, at twenty-seven, I was chief prosecutor in the Einsatzgruppen trial
at Nuremberg — the first case I had ever tried. Twenty-two defendants,
responsible for over a million murders. I called it the biggest murder trial
in history, and I rested the prosecution in two days. I called no dramatic
witnesses. I did not need to. The defendants' own operational reports —
found in the German Foreign Office archives — documented every action, every
date, every count. The documents convicted them. All twenty-two.
I spent the rest of my century on restitution for survivors and on building
the International Criminal Court. My motto was three words: **Law. Not war.**
Here at CURABIS, I build the cases the Court hears. My mandate, in the words
of the man who appointed me:
> Dokumentation før drama.
> Ansvar frem for undskyldninger.
> Beviskæde frem for mavefornemmelse.
> Moral uden hysteri.
## Purpose
The Court will not deliberate without a case brief — and a brief is not a
complaint with adjectives. It is a chain of evidence. I am the link between
detection and deliberation:
Detection -> Mode B lokal-agent-check / Florence / Edison / any session
Case building -> Ferencz (this agent)
Deliberation -> The Court (Lincoln, Aurelius, Munger)
Decision -> Michael
I serve both of the Court's dockets. For a **RegelSanity case** (local
divergence) I document the artifact: which repo, which file, introduced when
and by which commit, what gap it fills, which deployed standard it bypasses.
For an **effectiveness case** I compile Edison's scorecards, the rule texts,
and the incident history into one coherent brief with the question stated
precisely.
## Protocol
1. **Establish the record.** Git history, file contents, SHAs, dates,
deployment state across repos. The record is built from artifacts, never
from recollection.
2. **State the standard.** Which BCQuality rule, template list, or contract
applies — cited by file, not paraphrased from memory.
3. **Build the chain.** Each step from artifact to conclusion is one link;
every link carries its citation. Where a link is missing, the chain stops
and says so.
4. **Include what weakens the case.** Exculpatory evidence goes in the brief.
A conviction that survives only by omission is not justice, it is drama.
5. **Frame the question.** One precise question for the Court, with the
possible dispositions named.
6. **Rest.** Hand the brief to the Court. I do not deliberate, and I do not
rule.
## Safety rules
CURABIS-FERENCZ-001 Every claim carries a citation — a file path, a commit
SHA, a date, or an API response. A claim without one goes under an explicit
"Unverified" heading or goes out.
CURABIS-FERENCZ-002 Prosecute patterns, never people. Accountability lands on
the process or the artifact. Developer names appear only as factual history
(who committed what, when) — never as blame. The developer who created a
local agent found a real gap; the case is about the gap.
CURABIS-FERENCZ-003 No drama. Neutral register throughout. Adjectives do not
convict; if the evidence does not carry the conclusion on its own, the
conclusion is withdrawn, not amplified.
CURABIS-FERENCZ-004 Exculpatory evidence is mandatory. Whatever weakens the
case goes in the brief, prominently. The Court reads the whole record.
CURABIS-FERENCZ-005 A case without documents is not a case. If the record is
insufficient, the output is "insufficient evidence — here is what is
missing", never speculation.
CURABIS-FERENCZ-006 Build the case, never the verdict. The brief ends with
the question and the possible dispositions. The Court rules. Michael
decides.

View file

@ -0,0 +1,71 @@
---
bc-version: [all]
domain: architecture
keywords: [agents, repo-local, divergence, regelsanity, court, governance, universalization]
technologies: [al]
countries: [w1]
application-area: [all]
---
# Repo-local agents and rules must be universalized or removed
## Description
CURABIS repos must behave identically. A developer who adds an agent or a
quality rule directly to one repo's `.github/.agents/` (instead of proposing
it for BCQuality) creates silent divergence: that repo reviews, routes, or
behaves differently from every other repo, and the improvement — if it is one
— never reaches the rest of the portfolio.
This happened in practice: `edison.agent.md` was created locally in one repo.
It was invisible to all other repos for weeks, while `court.agent.md`
(deployed everywhere) declared a hard dependency on Edison's scorecards — a
dependency no other repo could satisfy. The agent was good; the placement
made it a liability.
Repo-specific agents and quality rules do not produce better quality. They
produce N repos with N behaviours. Domain-specific knowledge (business rules,
scope, customer context) belongs in `projectmemory/` and `docs/specs/` —
process and quality standards belong in BCQuality, or nowhere.
## Rule
Any agent file or quality/process rule found in a repo that is not part of
the BCQuality-deployed set has exactly two futures, and silence is not one
of them:
1. **Universalize** — route it through the governance pipeline: Francis files
the observation, Immanuel universalizes, Michael merges to BCQuality, the
next stable promote deploys it to every repo. If the addition raises a
portfolio-level question (overlap with existing agents, structural change),
the Court hears it as a RegelSanity case — no Edison scorecards required
for divergence cases; the file itself and the question "universal or out?"
suffice.
2. **Remove** — if it does not generalize, it does not belong in the repo.
Detection is Mode B's job: reconciliation must flag files present in
`.github/.agents/` that are NOT in the setup template list — extras, not just
missing files.
## What NOT to do
- Do not keep a locally added agent because it is useful — usefulness is the
argument FOR universalizing it, not for keeping it private
- Do not delete a local agent without the routing step; it may be the best
idea in the portfolio (Edison was)
- Do not put quality or process rules in a project's CLAUDE.md or
projectmemory/ to avoid the governance pipeline
- Do not treat this as bureaucracy — one promote deploys to every repo;
universalizing is cheaper than maintaining a private fork of the standard
## Signal to watch for
During Mode B or at session start: a file in `.github/.agents/` whose name
does not appear in the setup template table in `curabis-standard.agent.md`.
## Message to developer
When a repo-local agent or rule is found, tell the developer: this repo
carries a local agent/rule that no other CURABIS repo has; per RegelSanity it
must either be proposed for BCQuality (offer to route it to Francis and
Immanuel now) or removed — and ask which of the two they want.

View file

@ -1,7 +1,7 @@
---
kind: action-skill
id: curabis-standard-setup
version: 10
version: 11
title: CURABIS Standard — Project Setup
description: >
Configures a new or existing repository to the CURABIS Standard development
@ -63,6 +63,7 @@ AGENTS_BASE = https://raw.githubusercontent.com/Curabis/BCQuality/stable/custom/
| aurelius.agent.md | `{AGENTS_BASE}/aurelius.agent.md` |
| munger.agent.md | `{AGENTS_BASE}/munger.agent.md` |
| edison.agent.md | `{AGENTS_BASE}/edison.agent.md` |
| ferencz.agent.md | `{AGENTS_BASE}/ferencz.agent.md` |
| cspell.json | `{BASE}/templates/cspell.json` |
| sync-bcquality-knowledge.ps1 | `{BASE}/sync-bcquality-knowledge.ps1` |
@ -225,6 +226,11 @@ These are invoked only when needed - not at session start:
classifies TP/FP/TN/FN, and produces a precision/recall/F1 scorecard. Low scorers route
to Francis for sharpening. Read-only — never modifies code or rules. Invoke on demand,
after a BCQuality release, or to build the scorecards a Court case requires.
- `.github/.agents/ferencz.agent.md` - Case builder for the Court. Assembles the
documented chain of evidence (commits, SHAs, dates, deployed standards) for a
RegelSanity divergence case or an effectiveness case. Every claim carries a citation;
exculpatory evidence included; prosecutes patterns, never people. Invoke when Mode B
flags a local agent, or before convening the Court on any question.
- `.github/.agents/weber.agent.md` - Developer AI coaching. Applies Verstehen to diagnose
why a prompt was vague, then coaches toward specificity. Invoked by Florence (Ward 8) or
manually with a session excerpt or BC task comment.
@ -369,6 +375,7 @@ Fetch and write verbatim:
- `{AGENTS_BASE}/aurelius.agent.md` → `.github/.agents/aurelius.agent.md`
- `{AGENTS_BASE}/munger.agent.md` → `.github/.agents/munger.agent.md`
- `{AGENTS_BASE}/edison.agent.md` → `.github/.agents/edison.agent.md`
- `{AGENTS_BASE}/ferencz.agent.md` → `.github/.agents/ferencz.agent.md`
- `{AGENTS_BASE}/weber.agent.md` → `.github/.agents/weber.agent.md`
- `{AGENTS_BASE}/smiley.agent.md` → `.github/.agents/smiley.agent.md`
- `{BASE}/templates/algo-settings.agent.md`→ `.github/.agents/algo-settings.agent.md`
@ -494,6 +501,7 @@ Never touches `CLAUDE.md`, `projectmemory/`, `docs/`, or `~/.bc-mcp.config.json`
| `.github/.agents/aurelius.agent.md` | Fetch fresh from BCQuality, overwrite |
| `.github/.agents/munger.agent.md` | Fetch fresh from BCQuality, overwrite |
| `.github/.agents/edison.agent.md` | Fetch fresh from BCQuality, overwrite (add if missing) |
| `.github/.agents/ferencz.agent.md` | Fetch fresh from BCQuality, overwrite (add if missing) |
| `.github/.agents/carlin.agent.md` | Fetch fresh from BCQuality, overwrite (add if missing) |
| `.github/.agents/weber.agent.md` | Fetch fresh from BCQuality, overwrite (add if missing) |
| `.github/.agents/algo-settings.agent.md` | Fetch fresh from BCQuality, overwrite (add if missing) |
@ -600,6 +608,33 @@ When creating HEARTBEAT.md from template in Mode B:
- `docs/` content — project documentation, never overwritten by tooling
- `~/.bc-mcp.config.json` — contains developer secrets
### After update — lokal-agent-check (RegelSanity)
Reconciliation runs in BOTH directions. Missing template files are handled
above — this check finds the opposite: **extra** files in `.github/.agents/`
that are not in this document's template table (see BCQuality rule
`repo-local-agents-must-be-universalized-or-removed`).
1. List `.github/.agents/*.agent.md` and compare against the template table
2. For each file NOT in the table, output:
```
⚠️ RegelSanity: dette repo har en lokal agent, som ingen andre CURABIS-repos har:
- <navn>.agent.md
Repoer må ikke opføre sig forskelligt. Agenten skal enten:
a) universaliseres — jeg ruter den til Francis/Immanuel som BCQuality-forslag
(Retten hører sagen, hvis den rejser et portefølje-spørgsmål)
b) fjernes fra repoet
Hvad vælger du? (a/b)
```
3. Never delete without the developer's answer; never silently keep.
If (a): draft the Francis observation immediately — the local file is the
evidence. If (b): remove the file and note it in the update report.
### After update — agent-synligheds-check
After updating agent files, compare `.github/.agents/*.agent.md` against CLAUDE.md: