<!-- Authored per the the-loop:writing skill. -->
Tasks: a work item's whole life is told to every channel, and Slack can begin one
The last spec artifact (requirements → design → testing plan → tasks). A DAG of implementation tasks derived from the approved design and testing plan.
Task list
[x] 1. The catalog rows and the publisher
cli/the_loop/channels/events.py:phase.started,phase.completed,work-item.closed;LIFECYCLE_EVENTScli/the_loop/channels/publishers.py:publish_lifecycle,lifecycle_publisher, theLifecyclecallable typecli/the_loop/graph/hooks/sideeffects.py: the neutral skipped message- Depends on: none
- Requirements: R1.6, R1.7, R3.4, R6.1, R6.4
- Test: T1, T2, T19 (red→green)
[x] 2. The runtime publishes the lifecycle
cli/the_loop/graph/runtime.py:phase_of,_lifecycle, the calls instart,advance(edge and terminal) andcleanupcli/tests/test_graph_lifecycle.py: T3, T5, T18- Depends on: 1
- Requirements: R1.1–R1.5, R1.8, R2.1, R2.2
- Test: T3, T4, T5 (red→green)
[x] 3. The dispatcher announces the close
cli/the_loop/webhook/dispatcher.py: thelifecycleparameter,_announce_closedabove the clears in_record_closurecli/the_loop/poller/daemon.py,cli/the_loop/webhook/daemon.py,cli/the_loop/core/daemons.py(if it builds one): wirelifecycle_publisher(getter)cli/tests/test_lifecycle_integration.py: T6- Depends on: 1
- Requirements: R3.1–R3.5
- Test: T6 (red→green)
[x] 4. The provider table
cli/the_loop/channels/base.py:Loader,CHANNEL_PROVIDERS,_load_slack,load_channelswalking the table- Depends on: none
- Requirements: R6.2, R6.3
- Test: T17 (red→green), T18
[x] 5. The room conversation
cli/the_loop/channels/state.py:modein_record,conversation_for,bindings()accepting a room,_with_bindingsregistering threads onlycli/the_loop/channels/slack.py:_conversationopening a room for a declared home,_open_room,render_room,post/openreadingconversation_forand passingthread_ts=… or Nonecli/the_loop/commands/channels_cmd.py: the mode column inthreads- Depends on: none
- Requirements: R5.1–R5.7
- Test: T11–T16 (red→green)
[x] 6.
/the-loop newcli/the_loop/channels/commands.py: thecreatefamily inparse_invocation,FAMILY_GRANTS,usage(),_create_verb, thecreate_issue/client_factoryseams- Depends on: 5 (opens the conversation through the same
open) - Requirements: R4.1–R4.6
- Test: T7–T10 (red→green)
[x] 7. Documentation
docs/config/cli/channels-options.md: three catalog rows; thenewverb under the slash command and thework-item.creategrant row.the-loop/cli-config.schema.json+cli/the_loop/schemas/cli-config.schema.json: thesubscribedescriptionskills/the-loop/templates/cli-config.yaml,.the-loop/cli-config.yaml: the commentdocs/capabilities/channels.md: three Current-behaviour clauses, design links, historydocs/capabilities/process-graph.md: the runtime publishes the lifecycledocs/guide/slack.md: modes table, the slash command in full, starting a work item, the roomdocs/decisions/decision-130.md+ index- Depends on: 1–6
- Requirements: R7.1–R7.4
- Test: T20
[x] 8. Evidence and the gates
evidence/self-review.md,critic-review.md,security-review.md,final-validation.md,documentation.md,pull-requests.md;make check- Depends on: 7
- Requirements: all
- Test: T4, T20, T23, T24