Tasks: the contribution loop
Phase 4. DAG: T1 → {T2, T3, T4} → T5 → T6 → {T7, T8} → T9. Each task's Test: names a row of testing-plan.md.
Task list
- [x] T1 — the graph. Add
cli/the_loop/graph/pdlc-contribution-loop.yaml(nodes, edges, skip sets per design),PDLC_CONTRIBUTION_LOOPinmodel.py, and the repo-override warning entry. Requirements: R1, R4. Test: Unit (graph compiles/routes). - [x] T2 — the goal gate. New
graph/hooks/goal.py(post-goal-request,classify-goal), registered inhooks/__init__.py; extend the runtime's decision recorder to persist the goal payload. Requirements: R2. Test: Unit (goal parser), Security (unauthorized/self-authored). - [x] T3 — the keyword.
CONTRIBUTEincontrol.py(command, default keyword, arming); dispatcher treats it asstartat both spawn seams; cli-config schema gainskeywords.contribute. Requirements: R3. Test: Unit (keyword, arming), Security (ambiguity refusal). - [x] T4 — durable loop choice.
GraphState.loop(write atRuntime.start, round-trip);build_runtime(loop=…). Requirements: R1.3. Test: Unit (state round-trip, migration). - [x] T5 — loop resolution.
GraphLink._outer_loop_name(state-first, control record second, default third) wired into_guarded; same read incore/graphs.pyverbs. Requirements: R1.3, R3.1. Test: Unit (resolution order), Security (unknown name falls back). - [x] T6 — integration walk. Stubbed-integration test: goal-definition → phase-selection, authorized vs unauthorized goal, checklist from this graph. Requirements: R2, R4.1. Test: Integration.
- [x] T7 — plugin surface.
commands/contribute-to.md;skills/the-loop/templates/contribution.md. Requirements: R4.2, R5. Test: Manual n/a — markdown lint only. - [x] T8 — docs. SKILL.md,
reference/workflow.md, README/guide "two loops" mentions,docs/capabilities/process-graph.md+webhook-triggers.md,docs/config/cli/routing-options.md, decision-070. Requirements: all (the documentation gate). Test: markdownlint. - [x] T9 — verification. Execute the testing plan; record results + evidence. Requirements: R5. Test: the plan itself.
- [x] T10 — the uninitialized repository (review round human-1, PR #187).
harness_config.initialized;repoInitializedinbuild_runtime's config; spec-tree git exclusion atRuntime.start(+graph.spec_tree_excludedevent);publish-artifacthook wired intoplan-approvalandhuman-approval; docs swept (decision-070, process-graph, workflow reference, contribute-to). Requirements: R6. Test: Unit + integration (uninitialized-repo rows).