<!-- 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, theNode.commandgrammar,slash_command,compile_graph(data, known=None)ingraph/model.py; switch the two/the-loop:renderers toslash_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 incli/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=), thex-resolution, the unknown-name error,resolve_outer_loop(name, declared), the repository-file warning naming the top-levelgraphs. 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_runtimehonours declared names andguest;core/graphs._recorded_loopresolves 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_commandfor new and overridden words,ControlResult.loop,ControlRecord.loop,ControlStore.record(loop=). Tests first incli/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
ControlConfigbuilder passes the declared graphs;graphlink._outer_loop_namereads 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.pywith 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.jsoncopies; the commented samples in.the-loop/cli-config.yamlandskills/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.mdfor the verb), the config reference,SKILL.mdandreference/workflow.mdwhere they say a graph cannot be user-defined;docs/decisions/decision-136.mdand 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) androuting.control.commands(<word>: {graph, keyword?});cli_config.apply_graphsfans the list intorouting._graphs; both schema copies, samples, docs (a newgraphs-optionspage), 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.