8.1 KiB
Proposal: Configurable quality level per project
Status: proposal pending implementation — working document. Origin: evaluation of the
saas-prototyperun (see the project'sREPORT.md): fixed gates (CRAP≤6, mutation run, DRY, soft Gherkin) cost tokens that not every project needs. This proposal adds a configurable quality axis per project. Note: the two-pack review (section 5) narrows the proposal — the real value is depth within a pack, not replacing pack choice.
1. The 3 levels
| Level | Relative cost | Typical use |
|---|---|---|
minimal |
~1x | Prototypes, spikes, throwaway code |
standard |
~2x | Reasonable default for product features |
maximum |
~3-4x | Current rigor — critical libraries, security/payments, code consumed by others |
maximum = what the pipeline already does today (nothing beyond that for now).
2. Gates by level
| Gate | minimal | standard | maximum (current) |
|---|---|---|---|
| TDD + unit tests | ✓ | ✓ | ✓ |
| Acceptance Gherkin | optional | ✓ (without full APS pipeline) | ✓ full APS pipeline |
| CRAP | — | improve what is reasonable, no hard gate | ≤6 |
| DRY | — | reduce reasonable duplication | tooling, strict |
| Mutation scan + split >100 sites | — | ✓ (count only — cheap) | ✓ |
| Full mutation run | — | — | ✓ differential, kill non-equivalents |
| Soft Gherkin mutation | — | — | ✓ |
| Property tests | — | — | support |
| Written report | — | optional | ✓ |
3. Role responsibility by level (four-pack)
| Role | minimal | standard | maximum |
|---|---|---|---|
| specifier | Scoping + human gate only (no mandatory Gherkin) | Gherkin ✓ | Gherkin + QA suite |
| coder | Implements with TDD — required | ✓ | ✓ |
| refactorer | No gates → no real work | Reasonable CRAP + DRY + mutation scan | full gates |
| architect | No gates → no real work | light structural review only | full gates |
Conclusion: level and workflow are correlated. At minimal, refactorer/architect have no
gates to apply — configuring 4 roles would waste tokens with no benefit.
4. Mechanism (prompts/articles only, zero code)
1. PROJECT (project.prompt): "## Quality Level → Quality level: standard"
2. SHARED (quality.prompt): the ON/OFF gate table by level
3. EACH ROLE PROMPT (one line): "Apply only the gates that are ON for
the project's level (see quality article)"
The agent reads the level in project.prompt, the table in quality.prompt, and its role
prompt tells it to apply only the ON gates → consistent interpretation across roles.
The quality.prompt article also includes the role mapping by level: "at minimal,
configure only specifier+coder (2 windows in swarmforge.conf); at standard, add
refactorer; at maximum, all 4".
Honest nuance: the adjustment is prompt-soft — agents follow the level by instruction.
Hard enforcement would need a tools/quality-check (validate level artifacts), an optional
later step.
5. Review: does two-pack already solve part of this?
Result of reviewing two-pack's real scope (original project):
- coder (two-pack): TDD + unit tests ONLY — explicitly excludes acceptance, Gherkin, IR, Gherkin mutation, property tests, CRAP, DRY, and language mutation.
- cleaner (two-pack, batch): coverage, CRAP≤6, DRY, structure/encapsulation/dependencies and mutation run on uncovered behavior + tests to kill mutants.
two-pack quality profile: unit tests ✓ · CRAP≤6 ✓ · DRY ✓ · mutation run ✓ · structure ✓ (inside cleaner) · acceptance/Gherkin ✗ · property ✗ · separate QA ✗.
Conclusion
- two-pack is NOT
minimal: it keeps the hard hardening gates (CRAP≤6, DRY, mutation run). It is "full hardening without specification" — not the cheap option on the depth axis. - Packs already encode a quality axis: which gates EXIST (two-pack: no spec; four-pack: spec + architecture; six-pack: + hardender + QA).
- The level axis adds what packs do NOT cover: the DEPTH of each active gate (CRAP≤6 vs "improve reasonably"; mutation run vs scan-only; soft Gherkin on/off).
- Practical implication: for "cheap", choosing two-pack already drops the expensive layers (spec/architecture) — the main cost lever is the pack. Level is for scaling depth WITHIN a pack (e.g. two-pack without mutation run, four-pack without Gherkin mutation). The run confirmed it: the main waste was four-pack for a login form, not gate depth.
Verdict: the level proposal remains valid but is narrower than it first seemed: its real value is depth within a pack, not replacing pack choice. Possible simplification: start with only two levels (standard = current, light = no mutation run or Gherkin mutation) and let pack choice do the rest.
6. Analysis: spec vs hardening priority (the critique of two-pack)
two-pack's logic: TDD already specifies behavior at the unit-test level; Gherkin is a second layer (reviewable contract + end-to-end acceptance) that is expensive (APS pipeline); hardening gates (CRAP≤6, DRY, mutation run) are the code quality floor.
The critique (valid): for a small task the priority is inverted — mutation run is expensive and protects code that may be thrown away in a prototype; cheap spec ensures the RIGHT thing is built. A well-hardened but wrong feature is still wrong. Logical order: first WHAT (spec), then HOW (gates).
| two-pack | spec-first variant (proposal) | |
|---|---|---|
| Base spec | unit tests (TDD) | Light Gherkin (reviewable contract + human approval) + TDD |
| Code protection | CRAP≤6 + DRY + mutation run | Reasonable CRAP/DRY, no mutation run |
| Cost | ~2-3x | ~1.5-2x |
| Risk covered | dirty/unchangeable code | building the wrong thing |
The gap it reveals: two-pack assumes Gherkin comes with the full APS pipeline cost (parser + entrypoint generator + runtime + step handlers). It offers no "spec-lite" variant: write Gherkin as a reviewable contract without building the pipeline or running mutation.
Refinement of the light level:
light= Gherkin written as contract + human approval + TDD + reasonable CRAP/DRY — no APS pipeline, no mutation run, no Gherkin mutation, no property tests.
This variant covers the most important risk (is it the right thing? does a human approve?) at lower cost than "mutation run without spec".
7. Spec-light: Gherkin or other alternatives?
Comparison of options for a cheap, reviewable contract:
| Option | Cost | Human pre-code contract | Real enforcement | Risk | Upgrade to spec-full |
|---|---|---|---|---|---|
| TDD tests as spec (two-pack) | ~1x | ❌ | ✅ | user sees behavior at the end | — |
| Prose criteria (markdown) | ~1x | ✅ imprecise | ❌ | ambiguity | rewrite |
| Gherkin written-only (light) | ~1.5x | ✅ precise | ❌ | spec drift | ✅ zero rewrite |
| Given/When/Then scenarios in markdown | ~1x | ✅ | ❌ | no standard format | medium rewrite |
Key point: in light, real enforcement comes from the coder's TDD — it turns each approved scenario into unit tests. Gherkin remains a human contract + guide, not verification. Spec drift risk is mitigated by a light workflow rule: "the coder maps each approved scenario to unit tests; the handoff/report confirms the scenario→tests mapping".
Recommendation: in four-pack, light = natural degradation — the specifier already writes
Gherkin and asks for approval; the back half of the pipeline is cut (the coder does not build
entrypoint generator/runtime/step handlers, implements with TDD mapping scenarios). If you
later scale to spec-full, the .feature files are already there — you only build the pipeline
around them.
Recommended cheap add-on: in light, the coder runs gherkin-parser ONLY to validate that
the spec parses (seconds, no pipeline build) — prevents broken Gherkin syntax from passing
as a contract.
When to choose each: never going to scale → prose or TDD-only; may scale → Gherkin written-only (the format IS the upgrade path); human must approve before coding → Gherkin.