Repository navigation
mw-plugin-test: --allow known-debt ratchet for the plugins gate - #723
Conversation
…check.allow The plugins gate ran for the first time on 2026-07-30 (it had died in checkout since being armed) and truthfully reported the repo's pre-existing debt: 12 packages failing the install-idempotence pin (plugins#235) and six Tests areas that shipped red while nothing executed them. Without a ratchet the gate can only merge red or be silenced. --allow <file> names the known debt per scope+check (install/idempotence on packages, compile/render/tests on types): listed failures are tolerated and labeled, new failures fail, and an entry whose check passes again is STALE and fails until removed — the list only shrinks. A skipped check or absent scope is unverifiable and warned, never failed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013H31ey1UdhPk4xXdhVQBw7
There was a problem hiding this comment.
Pull request overview
Adds a “known-debt allowlist” ratchet to mw-plugin-test so the MeshWeaver.Plugins gate can be enforced without permanently staying red: listed failures are tolerated as debt, new failures fail the run, and stale allowlist entries (now passing) fail until removed.
Changes:
- Add
--allow <file>CLI option and compute aGateVerdictthat classifies failures into new vs known debt, plus stale/unverifiable allow entries. - Extend
GateReport.WriteSummary(...)to reflect the allowlist verdict (DEBT labeling, stale/unverifiable reporting, and a verdict-driven final line). - Introduce
GateAllowlistparsing and the verdict evaluation logic.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| tools/MeshWeaver.PluginTester/Program.cs | Adds --allow argument parsing and applies the allowlist verdict to determine exit code and summary output. |
| tools/MeshWeaver.PluginTester/GateReport.cs | Updates summary writer to support allowlist-aware labeling and final verdict output. |
| tools/MeshWeaver.PluginTester/GateAllowlist.cs | New allowlist format/parser and verdict evaluation (new failures vs debt, stale/unverifiable entries). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| case "--allow" when i + 1 < args.Length: | ||
| allowlist = GateAllowlist.Load(args[++i]); | ||
| allowApplied = true; | ||
| break; |
There was a problem hiding this comment.
Fixed in 317bd42: a value-taking option as the last argument now errors with "requires a value" (exit 2) — applied to --compile-timeout/--render-timeout too, which had the same fall-through.
| /// <summary>Parses the allow file, throwing on a malformed line — a typo that silently | ||
| /// allowed nothing (or everything) would defeat the ratchet.</summary> | ||
| public static GateAllowlist Parse(IEnumerable<string> lines) | ||
| { | ||
| var entries = new List<AllowEntry>(); | ||
| var number = 0; |
There was a problem hiding this comment.
Added GateAllowlistTest (15 cases) in 317bd42: parse incl. malformed-line throw, known/new split, the stale rule (exact scope only), the unverifiable escape (absent scope, skipped tests, idempotence behind a failed install), and the single-verdict summary.
…ned by tests --allow (and the timeout flags) as the last argument now say 'requires a value' instead of the misleading 'Unknown argument'. GateAllowlistTest pins parse (comments, case, malformed-line throw), the known/new split, the stale rule (a passing entry fails until removed, exact scope only), the unverifiable escape (absent scope, skipped tests, idempotence behind a failed install), and the one-verdict summary. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013H31ey1UdhPk4xXdhVQBw7
The MeshWeaver.Plugins
test-reposgate executed for the first time today (Systemorph/MeshWeaver.Plugins#250 fixed its run mechanics — it had died inactions/checkoutsince being armed) and truthfully reported pre-existing debt: 12 packages failing the install-idempotence pin (tracked in MeshWeaver.Plugins#235), six Tests areas red on main (never executed in CI before), and one in-mesh compile failure. A gate that can only merge red or be silenced gets turned off; this adds the same one-way ratchet the plugins repo already uses forcompile-check.allow:--allow <file>: lines of<scope> <check>(install/idempotenceon package ids,compile/render/testson NodeType paths),#comments.[known-debt](package rolls up asDEBT); a new failure fails the run.STALEand fails the run until removed — the list only shrinks.Without
--allowbehavior is byte-for-byte unchanged. Consumer change (workflow flag + the populatedplugin-gate.allow): MeshWeaver.Plugins#250.🤖 Generated with Claude Code
https://claude.ai/code/session_013H31ey1UdhPk4xXdhVQBw7