You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Merge pull request #9 from SharedIntellect/feature/tester-critic
v0.6.0: Tester Critic (6/9) + Shipping Process Infrastructure
What shipped
Tester Critic (Milestone #10) — Critic 6 of 9
• L1 deterministic verification: loci existence, line number range, excerpt matching, file path validation
• L2 LLM claim verification: evaluates whether findings are substantiated by cited evidence
• 805 lines code, 994 lines tests, 76/76 passing
Shipping Process Infrastructure — prevents the doc staleness that triggered this work
• critic-status.yaml: single source of truth for critic/feature status (replaces hardcoded counts across 10+ files)
• tools/validate-docs.py: automated doc validation against the manifest (CI-enforced)
• SHIPPING.md: shipping checklist for humans and agents
• CLAUDE.md: agent instructions with mandatory shipping process
• .github/workflows/validate-docs.yml: CI gate — runs on every PR to main
Documentation sweep — 11 files updated from stale "4 critics" / "5 critics" to accurate "6 critics" with Cross-Consistency noted as requiring --relationships flag.
Quorum self-validation results
validate-docs.py was validated by Quorum at standard depth across two runs:
Run 1 (pre-fix): REVISE — 5 HIGH, 4 MEDIUM, 1 LOW. All 5 HIGHs were legitimate code quality issues: broad exception handling, unvalidated YAML input, missing type annotations, no file size guards. All addressed in commit 2ad0df0.
Run 2 (post-fix): REVISE — 3 HIGH, 6 MEDIUM, 2 LOW. These are SEC-07 convergence findings — new issues generated by the fixes themselves:
| # | Severity | Finding | Disposition |
| --- | -------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| 1 | HIGH | read_file_lines() returns None without None checks at call sites | False positive. validate_docs() explicitly checks if lines is None: continue on line 218. |
| 2 | HIGH | load_manifest() calls sys.exit(2) violating return type contract | By design. CLI utility, not a library. sys.exit() in validation helpers is standard Python CLI pattern. |
| 3 | HIGH | read_file_lines() return behavior inconsistent with docstring | Docstring says "returns None on failure." Returning None on oversized files IS the documented failure path. |
| 4 | MEDIUM | sys.exit() prevents testability | Accepted for a CLI script. Would refactor if this became a library. |
| 5 | MEDIUM | main() mixes concerns | Addressed in run 1 (extracted 3 helpers). Remaining main() is ~30 lines of orchestration. |
| 6 | MEDIUM | Hardcoded yaml dependency | Not actionable — yaml IS the dependency. |
| 7 | MEDIUM | YAML not validated before field access | False positive. load_manifest() validates structure — this was the H3 fix from run 1. |
| 8-9 | MEDIUM | Error messages expose file paths | Local developer tool. Paths in errors are diagnostic, not a security exposure. |
| 10 | LOW | MAX_FILE_SIZE_BYTES is a magic number | False positive. It IS a named constant with a docstring. |
| 11 | LOW | TOCTOU race on file size check | Theoretical — local markdown files in a git repo, not untrusted concurrent input. |
This is the SEC-07 self-validation convergence pattern documented in docs/SEC07_SELF_VALIDATION_CONVERGENCE.md: each fix round changes code, giving the critic fresh context to generate new findings about the fixes. Run 1 findings were genuine; run 2 findings are the critic being conservative about a 250-line CLI utility. Tests pass (76/76). Merging per SEC-07 interim policy: advisory-only self-validation, CRITICAL-only blocking.
This file provides context for Claude Code and other AI agents working on this repository.
4
+
5
+
## Project Overview
6
+
7
+
Quorum is a multi-critic quality assurance framework. The reference implementation lives in `reference-implementation/` and is published on PyPI as `quorum-validator`.
8
+
9
+
## Current State
10
+
11
+
-**6 of 9 critics shipped**: Correctness, Completeness, Security, Code Hygiene, Cross-Consistency (`--relationships` flag required), Tester (L1 + L2)
12
+
-**3 planned**: Architecture, Delegation, Style
13
+
-**Version**: See `critic-status.yaml` for the canonical version and critic status
14
+
-**Tests**: `cd reference-implementation && pytest tests/ -v` (exclude `test_e2e_smoke.py` and `test_performance.py` for offline runs)
15
+
16
+
## Shipping Checklist — MANDATORY
17
+
18
+
**When shipping any feature or critic to main, follow `SHIPPING.md` in the repo root.**
19
+
20
+
Key steps:
21
+
1. Update `critic-status.yaml` (the single source of truth for critic/feature status)
22
+
2. Bump version in `critic-status.yaml` AND `reference-implementation/pyproject.toml`
23
+
3. Run `python tools/validate-docs.py` — fix all findings before merging
24
+
4. Run `tools/boundary-scan.sh` (located in the workspace, not this repo) — ensure no private paths leak
25
+
5. Update `docs/CHANGELOG.md` with a full release entry
26
+
6. All doc files that reference critic counts or status markers must match the manifest
27
+
28
+
**Why this matters:** We've shipped features with 10+ doc files still claiming old critic counts. The manifest + validation script + CI gate exists to prevent that. Don't skip it.
29
+
30
+
## Key Files
31
+
32
+
| File | Purpose |
33
+
|------|---------|
34
+
|`critic-status.yaml`| Single source of truth for shipped critics and features |
35
+
|`SHIPPING.md`| Full shipping checklist |
36
+
|`tools/validate-docs.py`| Automated doc validation (reads manifest, flags stale references) |
|**Quick**| 2 (correctness, completeness) | 5-10 min |~$0.15 | "Give me a sanity check before I keep going" |
112
-
|**Standard**|4 (+ security, code_hygiene) | 15-30 min |~$0.50 | Most work — solid coverage without the wait |
113
-
|**Thorough**|4 now; more when they ship | 30-60 min |~$1.50+ | "This is going to production. It cannot be wrong." |
112
+
|**Standard**|6 (+ security, code_hygiene, cross_consistency†, tester) | 15-30 min |~$0.50 | Most work — solid coverage without the wait |
113
+
|**Thorough**|6 shipped; more when they ship | 30-60 min |~$1.50+ | "This is going to production. It cannot be wrong." |
114
114
115
-
*Estimates on Claude Sonnet. Scales with model and artifact size. Pre-screen (10 deterministic checks + DevSkim + Ruff + Bandit + PSScriptAnalyzer) runs before LLM critics at every depth level — no extra cost. Today I ship with 4 critics (Correctness, Completeness, Security, Code Hygiene) + re-validation loops + learning memory. Architecture, Delegation, and Tester are coming — the full architecture supports all 9 (see [SPEC.md](SPEC.md)).
115
+
*†Cross-Consistency requires `--relationships` flag with a relationships manifest.*
116
+
117
+
*Estimates on Claude Sonnet. Scales with model and artifact size. Pre-screen (10 deterministic checks + DevSkim + Ruff + Bandit + PSScriptAnalyzer) runs before LLM critics at every depth level — no extra cost. Today I ship with 6 critics (Correctness, Completeness, Security, Code Hygiene, Cross-Consistency†, and Tester) + re-validation loops + learning memory. The full architecture supports all 9 — Architecture, Delegation, and Style are next (see [SPEC.md](SPEC.md)).*
116
118
117
119
---
118
120
@@ -137,8 +139,11 @@ Not every artifact needs the full treatment. Tell me how much is riding on it, a
-**4 critics** — Correctness, Completeness, Security (OWASP ASVS 5.0, CWE Top 25, NIST SA-11; see [SEC-02 workflow](docs/SEC02_BUSINESS_LOGIC_VALIDATION.md) for business logic validation guidance), Code Hygiene (ISO 25010:2023, CISQ) — all with evidence grounding
199
+
-**6 critics** — Correctness, Completeness, Security (OWASP ASVS 5.0, CWE Top 25, NIST SA-11; see [SEC-02 workflow](docs/SEC02_BUSINESS_LOGIC_VALIDATION.md) for business logic validation guidance), Code Hygiene (ISO 25010:2023, CISQ), Cross-Consistency† (`--relationships`), and Tester (L1 deterministic + L2 LLM claim verification) — all with evidence grounding
195
200
-**Parallel execution** — critics run concurrently (ThreadPoolExecutor, max 4); batch files run concurrently (max 3)
196
201
-**Re-validation loops** — Fixer proposes text replacements for CRITICAL/HIGH findings → applies them → re-runs only the critics that flagged the originals → reports improved/unchanged/regressed. Up to 3 loops, stops early when findings clear. `--fix-loops N` or `--depth thorough` (default 1 loop)
197
202
-**Learning memory** — tracks recurring failure patterns across runs in `known_issues.json`. High-frequency patterns auto-promote to mandatory checks injected into critic prompts. `quorum issues list|promote|reset` CLI. Disable with `--no-learning`
@@ -210,7 +215,7 @@ I'm working. I'm real. I'm also still growing.
210
215
211
216
**What's coming:**
212
217
- Dynamic model pricing updates (`quorum costs update`)
213
-
- More critics (Architecture, Delegation, Style, Tester)
-[ ]`SPEC.md` — status matrix / implementation checklist updated
25
+
-[ ]`SPEC.md` — shipped critic counts in prose
26
+
-[ ]`docs/FOR_BEGINNERS.md` — critic counts and cost estimates
27
+
-[ ]`docs/CONFIG_REFERENCE.md` — critic status markers
28
+
-[ ]`docs/TUTORIAL.md` — critic descriptions and status markers
29
+
-[ ]`docs/IMPLEMENTATION.md` — critic status markers and depth profiles
30
+
-[ ]`SKILL.md` — critic counts in depth descriptions
31
+
32
+
**⚠️ Note on Cross-Consistency:** Cross-Consistency is a shipped critic but requires the `--relationships` flag. When updating counts, use language like: "6 shipped critics (including Cross-Consistency, activated with `--relationships`)".
-[ ] Commit message includes: what shipped, critic N of 9, known limitations
40
+
-[ ] Tag release if version bump warrants it
41
+
42
+
---
43
+
44
+
## Why This Exists
45
+
46
+
PR #8 (Tester critic) shipped with 10+ doc files still claiming "4 critics." The Cross-Consistency critic shipped at some point with zero doc updates. This checklist + `validate-docs.py` + CI enforcement exists to prevent that from happening again.
-`thorough` — all 6 shipped critics + pre-screen + fix loops, ~30-60 min
38
+
39
+
*†Cross-Consistency requires `--relationships` flag with a relationships manifest.*
38
40
39
41
All depth profiles include the deterministic pre-screen (10 checks: credentials, PII, syntax errors, broken links, TODOs, and more) before any LLM critic runs.
Copy file name to clipboardExpand all lines: SPEC.md
+5-6Lines changed: 5 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,7 @@
9
9
10
10
## 1. Overview
11
11
12
-
Quorum is a quality assurance framework with a nine-agent target architecture. Currently, 5 critics are implemented (Correctness, Completeness, Security, Code Hygiene, and Cross-Artifact Consistency), with 4 additional critics planned. The framework is designed to rigorously evaluate multi-agent systems, configurations, research, code, and operational procedures against domain-specific rubrics. It combines:
12
+
Quorum is a quality assurance framework with a nine-agent target architecture. Currently, 6 critics are implemented (Correctness, Completeness, Security, Code Hygiene, Cross-Artifact Consistency†, and Tester), with 3 additional critics planned. †Cross-Consistency is activated with the `--relationships` flag. The framework is designed to rigorously evaluate multi-agent systems, configurations, research, code, and operational procedures against domain-specific rubrics. It combines:
13
13
14
14
-**Parallel specialized critics** (9 agents with distinct expertise)
15
15
-**Grounded evidence requirement** (every critique must cite tool-verified proof)
@@ -403,8 +403,7 @@ Status as of v0.5.0 (reference implementation):
@@ -416,7 +415,7 @@ Status as of v0.5.0 (reference implementation):
416
415
- [x] Fixer agent — proposal mode + re-validation loops (Phase 1.5; proposes and applies text replacements for CRITICAL/HIGH, then re-runs critics to verify)
0 commit comments