Tasks: one harness-config reader, one recorded rule
Phase 3 of 3 (requirements → design → tasks). A DAG of implementation tasks derived from the approved design. MUST be reviewed/approved before implementation begins.
Task list
TDD invariant (tdd.mode: standard): T1 writes the failing test first. H1–H4 cannot pass before harness_config.READS exists (H1/H3/H4) or while three modules still open the file themselves (H2), so the red is genuine and each later task turns one part green.
[x] 1. The pin, red.
cli/tests/test_harness_config.pywith H1–H4 from design A3, plus the loader unit tests from the testing strategy. Stdlib + PyYAML only; the doc halves skip whendocs/is absent.- Depends on: none
- Requirements: R4.1–R4.5
- Test:
uv run --project cli python -m pytest cli/tests/test_harness_config.py— red: nothe_loop.harness_configmodule
[x] 2. The shared reader.
cli/the_loop/harness_config.py:FILENAMES,HarnessConfigError,config_path,load,load_strict,HarnessConfigRead,READS. Module docstring states the direction rule and points at decision-044.- Depends on: 1
- Requirements: R3.1, R3.2, R3.3, R4.1
- Test: the loader unit tests and H1 green; H2/H3/H4 still red
[x] 3. Collapse the three call sites.
graph/bootstrap.pyre-exportsload_harness_configfrom the module (keeping__all__);critics.py'sconfig_pathbecomes an alias andload_criticsusesload_strict, re-raising asCriticConfigError;commands/scenarios.py::_load_config_globsreadsharness_config.load. No pre-existing test edited.- Depends on: 2
- Requirements: R3.1, R3.3, R3.4, R5.1, R5.2
- Test: H2 green;
test_critics.py,test_critics_integration.py,test_cli.py,test_graph_*.pyall pass unmodified
[x] 4. Decision-044.
docs/decisions/decision-044.md— the invariant, both directions, the three readers and their keys, the four rejection reasons, the relationship to decision-032. Add the row todocs/decisions/decisions.md.- Depends on: none
- Requirements: R1.1, R1.2, R1.3
- Test:
markdownlintgreen; the record is linked from every page changed in T5
[x] 5. Correct the four false claims + document the read surface.
docs/config/index.md,docs/cli/concepts.md,docs/cli/commands/index.md,docs/cli/index.md(prose + Mermaid),docs/cli/extending.md, and the new "What the CLI reads from it" section indocs/config/harness-config.md.- Depends on: 4
- Requirements: R2.1, R2.2, R2.3, R2.4
- Test: H3/H4 green;
markdownlintgreen; no page still asserts "never"
[x] 6. Capability docs.
docs/capabilities/cli.md: the invariant in the behaviour section, and a history row for issue-121.- Depends on: 5
- Requirements: R5.3
- Test:
markdownlintgreen
[x] 7. Full gates + the process gate.
make checkgreen;uv run the-loop check issue-121 --recompute --fail-on blockexit 0. Execution log updated with evidence.- Depends on: 3, 6
- Requirements: R5.1, R5.2
- Test:
make check;the-loop check issue-121
Out of scope
- Removing the pre-rename
.the-loop/config.yamlfallback (decision-035 compatibility). - Any per-repository override of harness policy from
cli-config.yaml— rejected in design § Alternatives. - The
bugfix.mdvsrequirements.mdgraph mismatch raised on PR #120; unrelated.