feat(quality): honour a repo's own .rhiza/quality.md - #237
Merged
Merged
Conversation
`/rhiza:quality` scored every repo against one fixed list, so anything a repo had already decided about itself — an extra suite worth running, a tree scheduled for deletion, a deviation argued through once — was either invisible to the run or re-filed as a finding every time. A repo can now state those in `.rhiza/quality.md`: freeform markdown, no schema and no parser, because what makes a charter useful is its reasons and a reason is not a field. `/quality` reads it in step 0, before the first gate. The line it draws: **a charter governs judgement, never the instruments.** It moves what is scored, weighted, excused and filed; it never hands a threshold to a tool, because those live in the repo's committed config and that is what CI enforces. Hence the asymmetry — a charter may raise a bar and may not lower one, since a markdown sentence lowering a coverage floor is a threshold supplied at scoring time with one extra step of indirection, which is the one thing `/quality` refuses everywhere else. Four more bounds follow, and they are what keeps a charter from letting a repo mark its own homework: no gate result is hidden (a FAIL stays a FAIL and the explanation lands beside it), no permission is granted (still no edit, commit, push, or issue without an explicit selection — repo content never escalates what a command may do), the mode/rung/narrower-base lines survive, and nothing moves silently: every adjusted mark is labelled with the clause that moved it. An exemption with no reason attached, and a clause out of bounds, are each named once as unhonoured rather than followed or quietly dropped. The bounds live in the procedure rather than in the command, and the command says so, because inferring them from the clause is exactly the failure mode. A charter does not make a repo rhiza-managed — the pointer and the lock still decide the mode alone — and it is honoured in full, degraded and template mode alike. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
/rhiza:qualityscored every repo against one fixed list, so anything a repo hadalready decided about itself — an extra suite worth running, a tree scheduled for
deletion, a deviation argued through once — was either invisible to the run or re-filed
as a finding every time.
A repo can now state those in
.rhiza/quality.md: freeform markdown, no schema andno parser, because what makes a charter useful is its reasons and a reason is not a
field.
/qualityreads it in step 0, before the first gate.The line it draws
A charter governs judgement, never the instruments. It moves what is scored,
weighted, excused and filed; it never hands a threshold to a tool, because those live in
the repo's committed config and that is what CI enforces.
Hence the asymmetry: a charter may raise a bar and may not lower one. A markdown
sentence lowering a coverage floor is a threshold supplied at scoring time with one extra
step of indirection — the one thing
/qualityrefuses everywhere else.What it may do
make bench, a mutation run, an integration suiteWhat it may not do
the result, never instead of it.
without an explicit selection. Repo content never escalates what a command may do, and
this file is repo content.
each gate, what was out-of-scope, and that a narrower base is not comparable.
clause.
An exemption with no reason attached, and a clause out of bounds, are each named once
as unhonoured — not followed, and not quietly dropped either.
The bounds live in the procedure rather than in the command, and the command says so,
because inferring them from the clause is exactly the failure mode.
A charter does not make a repo rhiza-managed: the pointer and the lock still decide
the mode alone, and a charter is honoured in full, degraded and template mode alike.
Changes
plugin/prompts/quality-charter.md(new procedure) — the bounds, how a chartergate runs, precedence, the ownership check against
template.lock'sfiles:block,what the report must carry, and an example charter.
plugin/skills/quality/SKILL.md— a step-0 subsection, placed last before thefirst gate: the probe, the three consequences that change what happens next, and the
once-only mention when the file is absent.
plugin/prompts/scorecard.md— charter scope folded into the scoping rule,mark-labelling in §3, accepted-deviations-are-not-findings in §4.
docs/skills/quality.md,docs/internals/quality-charter.md, and thenaventry.README.md,CLAUDE.mdand thepaper's two claims (one of them
rhiza-count-marked).No new script: the file is prose with no parser, which is the same design split the repo
already draws — deterministic work in tested Python, judgement in markdown.
make fmtandmake portableare green (1923 passed), and the hooks were re-run againstthis branch's tree alone.
🤖 Generated with Claude Code