Tasks: instances scoped to their own work items
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 block —
cli/the_loop/instance.py:InstanceConfig,parse_address,decide, the outcome constants;cli_config.apply_instance;RoutingConfig.instance- Depends on: none
- Requirements: R1.1, R1.2, R1.4, R1.5, R3.1, R3.3, R3.4, R2.1–R2.4 (the table)
- Test: T1 —
test_instance.py::test_the_block_*,::test_the_token_*,::test_decide_*,::test_an_unknown_mode_resolves_to_locked,::test_a_malformed_token_is_not_an_address_and_reaches_no_record
- [x] 2. The schema —
instancein.the-loop/cli-config.schema.jsonand the packaged copy; the template and this repository'scli-config.yaml- Depends on: 1
- Requirements: R1.1, R1.2, R5.3
- Test: T10 —
test_config_schema_parity.py,test_migrations.py,make validate
- [x] 3. The seam —
Dispatcher._manages,_refuse_scope, the call inhandle;SETTLED_OUTCOMES;ControlRecord.instanceand the threerecordcall sites;core.sessions.control_session's locked refusal- Depends on: 1
- Requirements: R2.1–R2.7, R3.2, R3.5, R4.1
- Test: T2 —
test_instance_integration.py(every scenario); T8 —test_an_unauthorized_address_grants_nothing,test_an_address_does_not_unlock_a_locked_instance,test_a_refused_event_leaves_no_mark
- [x] 4. The marks —
command_comment(address=)andcore.sessions._announce;announcement_body(instance=)andSessionAnnouncer;TmuxRunner.instance, the version probe and the-eargv; the dispatcher andcore.standingsetting it- Depends on: 1
- Requirements: R4.2, R4.3, R4.6
- Test: T1 —
test_control.py::test_the_posted_keyword_carries_the_address,test_announce.py::test_the_announcement_names_the_instance,test_instance.py::test_a_named_instance_spawns_with_the_environment_variable,::test_an_old_tmux_gets_no_environment_flag_and_one_warning; T8 —test_only_the_configured_name_reaches_tmux_and_the_comment
- [x] 5. The surface —
core/instance.py::describe_instance;GET /api/v1/instanceinroutes.pyand the authored contract;status_alland thestatusline; the SDK'sinstance()and its docs row- Depends on: 1
- Requirements: R4.4, R4.5
- Test: T1 —
test_instance.py::test_describe_instance_*,test_lifecycle_cmd.py::test_status_prints_the_instance_line; T3 —test_api_contract_parity.py,test_mcp_integration.py; T10 —test_sdk_docs_parity.py
- [x] 6. Docs, capability docs, decision —
docs/config/cli/instance-options.md,docs/config/cli/index.md, the sidebar,docs/cli/instances.md,docs/cli/state.md,docs/cli/commands/status.md,skills/the-loop/reference/automation.md,docs/capabilities/instances.md+ index, rows inwebhook-triggers.md,cli.md,control-plane.md;decision-110+ index row- Depends on: 2, 5
- Requirements: R5.1–R5.3, the capability-docs gate
- Test: T10 —
test_docs_parity.py; T12 —make check
- [x] 7. Verification — execute
testing-plan.md, recordevidence/verification.mdandevidence/security-review.md- Depends on: 3, 4, 6
- Requirements: all
- Test: T1, T2, T3, T8, T10, T12, T13
Dependency graph (DAG)
flowchart LR
T1["1 the block"] --> T2["2 schema + template"]
T1 --> T3["3 the seam"]
T1 --> T4["4 the marks"]
T1 --> T5["5 the surface"]
T2 --> T6["6 docs + decision"]
T5 --> T6
T3 --> T7["7 verification"]
T4 --> T7
T6 --> T7Checkpoints
After task 1 and after task 3: the named tests red → green recorded in evidence/verification.md. After task 5: the contract and MCP tests green. After task 6: 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.