Tasks: the env file the CLI config names
The last spec artifact. A DAG derived from the design and testing plan; each task names the testing-plan row that proves it. TDD: the test first, red, then green.
Task list
- [x] 1. The loader —
cli/the_loop/envfile.py:parse,load,ParseResult,LoadResult- Depends on: none
- Requirements: R1.4, R1.5, R2.1–R2.5
- Test: T1 —
test_envfile.py::test_the_grammar_*,::test_the_environment_wins_over_the_file,::test_a_missing_file_warns_and_loads_nothing,::test_an_unreadable_file_warns_with_the_error_class,::test_a_file_readable_by_others_is_warned_about_and_still_loaded,::test_malformed_lines_are_skipped_by_number_and_the_rest_loaded,::test_a_warning_never_carries_a_value_or_a_line
- [x] 2. The resolver and the schema —
cli_config.resolve_env_file,cli_config.load_env_file;env.filein.the-loop/cli-config.schema.jsonand the packaged copy- Depends on: 1
- Requirements: R1.1, R1.3, R2.6, R3.1
- Test: T1 —
test_envfile.py::test_a_relative_path_resolves_against_the_config_directory,::test_tilde_is_expanded,::test_an_absolute_or_parent_path_is_honoured_and_named,::test_a_config_without_an_env_block_loads_nothing,::test_a_wrong_type_is_a_warning_not_a_path,::test_a_stale_or_broken_config_loads_nothing_and_does_not_raise; T10 —test_config_schema_parity.py,make validate
- [x] 3. The entry points —
cli.main,daemon_entry.main,api/serve.main- Depends on: 2
- Requirements: R1.2, R1.6
- Test: T1 —
test_envfile.py::test_the_cli_loads_the_env_file_before_building_the_parser,::test_the_daemon_entry_loads_the_env_file_before_running,::test_the_service_loads_the_env_file_before_its_config
- [x] 4. The scenario —
test_envfile_integration.py- Depends on: 3
- Requirements: R1.2, R1.5, R1.6
- Test: T2
- [x] 5. Docs, template, capability doc, decision —
docs/config/cli/index.md,docs/cli/getting-started.md,docs/cli/receiver.md,docs/config/cli/webhook-options.md,docs/config/cli/channels-options.md,skills/the-loop/templates/cli-config.yaml,.the-loop/cli-config.yaml,docs/capabilities/cli.md,decision-108+ index row- Depends on: 2
- Requirements: R3.1–R3.3, the capability-docs gate
- Test: T10 —
test_docs_parity.py; T12 —make check
- [x] 6. Verification — execute
testing-plan.md, recordevidence/verification.mdandevidence/security-review.md- Depends on: 4, 5
- Requirements: all
- Test: T1, T2, T8, T10, T12, T13
Dependency graph (DAG)
flowchart LR
T1["1 loader"] --> T2["2 resolver + schema"]
T2 --> T3["3 entry points"]
T3 --> T4["4 scenario"]
T2 --> T5["5 docs + decision"]
T4 --> T6["6 verification"]
T5 --> T6Checkpoints
After task 1 and after task 3: the named tests red → green recorded in evidence/verification.md. After task 4: the integration file green. After task 5: make check. Then the verification node, then the self-review rounds and the security review gate (evidence/security-review.md), then the PR with the reviewer briefing.
Review comments
Appended by the-loop's
record-feedbackhook when a human gate approves with comments (issue-109). Append-only and attributed: an approval never silently discards a reviewer's suggestions, and the feedback travels with the document it concerns rather than living in a side-channel tracker.