scorecard (internal)¶
Turn gate results and design evidence into 1–10 marks, findings, and optionally issues.
Not a slash command
This is an internal procedure (plugin/prompts/scorecard.md), not something you
invoke. /rhiza:quality reads and follows it once the
gates have run and design-analysis has produced its evidence.
The scoping rule¶
The most important rule in the plugin's scoring: score only what the repo owns.
- In scope:
src/,tests/,pyproject.toml,README.md, project docs,.rhiza/template.yml, locally-hardened config. - Out of scope: everything the template delivers —
.github/workflows/*,Makefile,.pre-commit-config.yaml,pytest.ini,ruff.toml, and the typecheck/mutation/fuzzing targets.
A gap in a Rhiza-owned file is fixed upstream, and is reported as "upstream/out-of-scope" rather than scored. Without this, every managed repo would be marked down for its own template — making the score meaningless and identical everywhere. A gate that was unavailable for the repo's profile is out-of-scope too, never a FAIL.
What it does¶
- Assigns marks — always the two design subcategories, plus the gate-derived ones (lint, types, docs, test pass rate, coverage, deps/security, template fidelity) and any additional ones with real signal: test design quality, error handling and CLI UX, security posture, semver discipline, cross-platform robustness, idempotency, user-facing docs.
- Requires evidence per mark — a score with a justification that cites nothing isn't earned; the subcategory is dropped instead.
- Produces findings — one per subcategory below 10, each with a self-contained
title, current→target score, the file(s)/lines to change, a
done when…criterion, and an evidence snippet, ordered by leverage. - Offers to file them — via an
AskUserQuestionmulti-select, never free text. Nothing is created without an explicit selection. Filing goes throughplugin/scripts/platform_cli.py issue-create, which maps togh issue createorglab issue create— and matters becauseglab issue createhas no body-file flag, so the body has to be passed inline.
Notes¶
- The coverage bar is the repo's own
COVERAGE_FAIL_UNDER, not a number picked at scoring time. - Coverage alone doesn't earn the test-design mark — a brittle suite can hit 100% and still pin internals.
- It re-runs nothing and gathers nothing. A missing number means an unscored subcategory, not a guess.
Reference¶
| Source | plugin/prompts/scorecard.md |
| Invocation | not a slash command — reached with Read, never invoked |
| Read by | /rhiza:quality, design-analysis, known-issues |