Skip to content

Testing plan: write the-loop's artifacts for a human reader

Derived from requirements.md and design.md. Authored at test-planning, completed at verification.

This file is executable content. Review the commands like code. No credentials are involved — every command reads this repository and nothing else.

Test matrix

#TypeApplies?Scope / what it provesWhere it runs
T1Unityestest_writing_parity.py P1–P4: skill present and parsing, every human-read template points at it, the pointer names the skill the schema declares and no length limits have returned, no P0 tell in shipped prosemake test
T2Integration (scenario)n/a — the change adds no runtime path. Nothing is dispatched, routed or spawned; there is no cross-module behaviour to document with a Gherkin scenario.
T3Contract (OpenAPI / GraphQL SDL)n/a — no API surface added. docs/api-specs/openapi is untouched.
T4End-to-endn/a — no user-invocable flow. The skill is read by an agent, not executed.
T5UI / visualn/a — no user-facing surface (design.uiArtifacts produces nothing for docs/CLI work).
T6Snapshotn/a — no rendered output to freeze.
T7Performance / loadn/a — filesystem reads in a test; no runtime cost.
T8Security / abuse caseyesthe abuse cases in design.md §Security design: a style pass cannot rewrite a record (P4's glob excludes docs/specs/ and evidence/), and a missing or wrong-skill pointer fails rather than skipsmake test
T9Accessibilityn/a — no UI.
T10Migration / upgradeyesa project scaffolded before this change has no writingStyle block; schema defaults must make absence and default the same statemake validate
T11Manual exploratoryyesread the rendered SKILL.md and one human-read template as a reviewer would, and confirm the contract is findable without reading the specmanual

Scenarios & requirement trace

RowRequirement(s)Scenario / case
T1R1.1, R1.3the writing skill exists, front-matter parses, reference/tells.md present
T1R2.1every human-read template names the governing skill
T1R2.1, R5.1the pointer names the skill writingStyle.skill declares
T1R2.2, R5.1writingStyle.budgets is absent — length limits cannot return unremarked
T1R5.2no P0 tell in shipped prose — skills/, commands/, rules/, README.md and docs/ minus the historical (docs/specs/) and generated trees
T8R2.4, abuse case 2human-read templates still carry their gated sections
T8abuse case 1P4's scan excludes docs/specs/ and evidence/
T10R5.1.the-loop/harness-config.yaml and the shipped template both validate against the schema

Verification environment

  • Repositories: this repository only.
  • Services / containers: none.
  • Fixtures & data: none — the test reads checked-in files.
  • Credentials: none. No command here touches a secret.
  • Bring-up: make install-dev · Tear-down: none.
  • If bring-up fails: record it under Verification results, leave the dependent activities unticked, and escalate.

Evidence plan

RowEvidencePath under evidence/
T1, T8pytest summary for the new test plus the full suiteunit.md
T10make validate output (both configs against the schema)validate.md
allmake lint + make typecheck + make format-check output, plus the-loop's own gatechecks.md
T11the manual read-through findingVerification results, below

Verification activities

  • [x] T1 — uv run --project cli python -m pytest -q cli/tests/test_writing_parity.py
  • [x] T1/T8 — make test (full suite: no regression from the schema and template edits)
  • [x] T10 — make validate, plus the absent-block and rejected-key cases
  • [x] all — make lint, make format-check, make typecheck
  • [x] T11 — read skills/writing/SKILL.md and skills/the-loop/templates/design.md as a reviewer; record whether the contract is findable without the spec

Verification results

ActivityCommand / procedureOutcomeEvidence
T1uv run --project cli python -m pytest -q cli/tests/test_writing_parity.py21 passedevidence/unit.md
T1/T8make test1349 passed, 1 skippedevidence/unit.md
T10make validate + a config with writingStyle removed, an unknown key under writingStyle, and a typo'd formal registerboth configs valid; the pre-issue-165 shape still validates; the unknown key and the typo'd register are both rejectedevidence/validate.md
allmake lint, make format-check, make typecheckruff clean · markdownlint 0 errors over 420 files · pyright 0 errorsevidence/checks.md
T11read SKILL.md and templates/design.md as a reviewerthe contract is visible where the artifact is authored (first lines of the template) and names the skill governing it; no need to open the specthis table
the budget experiment that preceded the current designrecorded for the record: it is what showed the numbers to be unworkableevidence/budgets.md

T11 finding, and what it cost the design. Verification measured every artifact this PR ships against the budgets it then proposed, and three of them did not hold: tasks: 200 was unreachable from its own 274-word empty template, requirements.md ran 682/500 and design.md 1017/900. The numbers were corrected and a sixth assertion added to keep budgets reachable — and then the owner rejected budgets outright on PR #168, for the underlying reason those corrections were evidence of. Length limits are gone; the record of the experiment is evidence/budgets.md and decision-061 §D2.

Not executed: none. Every in-scope activity ran, and re-ran after the budgets were removed.

Review comments

Appended by the-loop's record-feedback hook when a human gate approves with comments (issue-109).

Released under the MIT License.