Skip to content

<!-- Authored per the the-loop:writing skill. -->

Tasks: an operator can bring their own graphs and bind commands to them ​

The last spec artifact. Derived from design.md and testing-plan.md. Gate-less (issue-281): it advances on shape.

Execution DAG ​

Tasks ​

  • [x] 1 · The compiler's new rules. PHASE_VOCABULARY, the Node.command grammar, slash_command, compile_graph(data, known=None) in graph/model.py; switch the two /the-loop: renderers to slash_command. Requirements: R2.1, R2.3, R2.5. Test: testing-plan T2.

  • [x] 2 · The catalog. cli/the_loop/graph/catalog.py — CustomGraph, Catalog, read_catalog, read_bindings, config_base, compile_custom. Tests first in cli/tests/test_graph_catalog.py. Requirements: R1.1–R1.5, R2.2, R2.3, R2.6, R3.1–R3.3. Test: testing-plan T1, T2.

  • [x] 3 · Loading and resolving. load_graph(..., catalog=), the x- resolution, the unknown-name error, resolve_outer_loop(name, declared), the repository-file warning naming the top-level graphs. Requirements: R2.4, R4.2, R4.4, R8. Test: testing-plan T2, T3, T8.

  • [x] 4 · Scoped attachments. Attachment.loops, its parse and validation, apply's skip, the digest. Requirements: R6.1, R6.2. Test: testing-plan T6.

  • [x] 5 · The runtime builder. build_runtime honours declared names and guest; core/graphs._recorded_loop resolves against the catalog. Requirements: R4.2, R4.3, R5.1, R5.2. Test: testing-plan T3.

  • [x] 6 · The control vocabulary. ControlConfig.bindings/loops, from_mapping(…, graphs=), parse_command for new and overridden words, ControlResult.loop, ControlRecord.loop, ControlStore.record(loop=). Tests first in cli/tests/test_control_custom_commands.py. Requirements: R3.4–R3.6. Test: testing-plan T4, T8.

  • [x] 7 · The daemon path. The dispatcher records the loop and logs it; every ControlConfig builder passes the declared graphs; graphlink._outer_loop_name reads the record's loop through the resolver. Requirements: R3.5–R3.8, R4.1, R4.2. Test: testing-plan T5.

  • [x] 8 · the-loop graph loops. Text and JSON; compile without importing modules; exit 1 on a failure. Requirements: R7.1–R7.3. Test: testing-plan T7.

  • [x] 9 · Integration scenarios. cli/tests/test_custom_graph_integration.py with Gherkin docstrings. Requirements: R3.5, R3.6, R4.1; abuse case 3. Test: testing-plan T5, T8.

  • [x] 10 · Schema and samples. Both cli-config.schema.json copies; the commented samples in .the-loop/cli-config.yaml and skills/the-loop/templates/cli-config.yaml. Requirements: R1.1, R6.1. Test: testing-plan T9.

  • [x] 11 · Docs and decision. docs/capabilities/process-graph.md (+ cli.md for the verb), the config reference, SKILL.md and reference/workflow.md where they say a graph cannot be user-defined; docs/decisions/decision-136.md and its index row. Requirements: all (documentation parity). Test: testing-plan T12.

  • [x] 12 · Verify and record. Run the plan, write evidence/, tick this list. Test: testing-plan T10, all rows.

  • [x] 13 · The owner's shape (PR #425 review). Top-level graphs (name, path, guest) and routing.control.commands (<word>: {graph, keyword?}); cli_config.apply_graphs fans the list into routing._graphs; both schema copies, samples, docs (a new graphs-options page), decision-136 and this spec follow. Requirements: R1.1, R1.5, R3.1–R3.4, R8. Test: testing-plan T1, T4, T5, T7, T9, T10.

Released under the MIT License.