<!-- Authored per the the-loop:writing skill. -->
Tasks: the mention is the address, and three acts each end in the session
Phase 4 of 4. Derived mechanically from the approved
design.mdandtesting-plan.md; each task names the requirement it satisfies and the matrix row that proves it. No approval gate (issue-281). Test-first per task: a failing test motivates the code, and the commit message records the red→green command.
Tasks
- [x] 1. Catalog rows, schema text, docs pins.
channels/events.pygainscontext.addedanddecision.recorded(origin channel, publishable, recorded, not subscribable); bothcli-config.schema.jsoncopies'publishdescription, the channels options page's grant table and the shippedcli-config.yamlcomment name them;test_bus.py's pinned sets grow by two. Req: R4.6, R5.5, R8.1 (design §8). Test: T1 (test_bus.py), T10 (test_docs_parity.py,test_config_schema_parity.py),test_the_docs_list_every_publishable_event. - [x] 2. Manifest and probe.
slack-app-manifest.yamlgainsapp_mentions:read, theapp_mentionbot event and the two message shortcuts; the guide's fenced copy is byte-equal;subscription_findingsmeasuresapp_mentions:readand names the consequence; the connect-time probe andchannels status --probereport it. Req: R1.8, R6.1 (design §1, §6, §8). Test: T6 (test_channels_dm.py,test_channels_commands.py), T10. - [x] 3.
channels/verbs.py.strip_mention,parse_verb,compose_keyword,help_text. Req: R3.1, R3.2, R3.4 (design §3). Test: T1 (test_channels_verbs.py). - [x] 4. Roster: a Slack id.
CollaboratorRecord.slack,loginoptional whenslackis set, fail-closedfrom_dict;parse_subjects(@login,slack:U…);slack_ids(),is_collaborator_slack();add(login=, slack=); the dispatcher's_apply_collaboratorandcommand_commentspeak both; the CLI's--slackresolves a handle through the directory. Req: R3.5, R7.1, R7.4 (design §5). Test: T1 (test_collaborators.py), T2 (test_collaborators_cli.py), T8 A11, T10. - [x] 5. Room: the listen mode.
CollaborationChannel.listenwith the two-value guard;control._parse_channelsreads--listen;store.add(listen=); the dispatcher's_apply_channeland the CLI's--listen;command_commentspells it back;ChannelStores.listen_mode;channels threadsprints it. Req: R2.1, R2.3, R2.4 (design §2). Test: T1 (test_workchannels.py), T2 (test_workchannels_cli.py), T8 A12, T10. - [x] 6. Ledger record shapes.
GitHubLedger.recordmirrorscontext.addedanddecision.recordedas marked, quoted, scrubbed, defanged, enveloped comments whose visible line names the act and the person. Req: R4.1, R4.3, R5.1, R5.4 (design §4). Test: T1 (test_channels.py), T8 A5, A6. - [x] 7. Session frames.
reply_session(kind=)with thecontextanddecisionframes composed from fixed words, the ref, counts and URLs, naming the text untrusted. Req: R3.7 (design §4). Test: T1 (test_channels_mentions.py), T8 A4. - [x] 8. Inbound: the address, the tiers, the verbs, the acts.
handle_socket_event(addressed=)and the §1 input table (DM,allroom, everything else) with thenot-addressedandduplicatedrops;speaker_forand the act table;_classifystep zero;helpephemeral;record-contextthroughSlackBotChannel.snapshot_thread(cap, links, names, scrub order,snapshotsstate under the lock, nothing-new answer, size refusal);record-decision(empty refusal, kind and rationale);_DELIVERED; the thread reply with the record's link; the kickoff by mention. Req: R1.1–R1.6, R1.9, R2.2, R3.1–R3.7, R4.1–R4.5, R5.1–R5.4, R7.2–R7.5 (design §1, §3, §4, §5). Test: T1, T2 (test_channels_mentions_integration.py), T8 A1–A10. - [x] 9. Listener routing, shortcuts, modal.
handleroutesapp_mention,message_action,view_submission;handle_message_actionandhandle_view_submission;decision_view;views_open;post_ephemeral;once.pyring shared with the slash command. Req: R1.1, R6.1–R6.6 (design §1, §6). Test: T2 (test_channels_shortcuts_integration.py), T6 (test_channels_shortcuts.py), T8 A3. - [x] 10.
the-loop channels records. A read-only verb listing a work item's envelopedcontext.added/decision.recordedrecords (url, actor, ts, body) as json or markdown. Req: R4.7, R5.6 (design §7). Test: T2 (test_channels_records_integration.py). - [x] 11. Status lines and the poll skip.
channels statusprintsmentions:,shortcuts:and theall-room count;fetch_replies/fetch_channel_messagesskip mention-gated conversations and move no cursor. Req: R1.7, R2.4, R6.6, R1.8 (design §1, §8). Test: T2, T6. - [x] 12. The operating model and the docs.
templates/context.md; theworkItemArtifactsrow;interaction._ARTIFACT_RULE;SKILL.md,workflow.md,collaboration.md;docs/guide/slack.md(modes table, Addressing the-loop, the room, upgrade table, limits, downtime);docs/capabilities/channels.mdandwebhook-triggers.mdwith history rows;routing-options.mdfor--listen;evidence/documentation.md. Req: R4.7, R5.6, R8.2–R8.4 (design §7, §9). Test: T10 (test_graph_parity.py,test_interaction.py), T12. - [x] 13. Verification, reviews, evidence. Run the plan (T1, T2, T6, T8, T10, T12; T11 recorded as not executable here, no workspace), fill Verification results, write
evidence/*.md, the self-review and critic-review records, the security review, the PR briefing. Req: all. Test: the plan's activities.
Notes
- Tasks 1–7 are independent of each other; 8 depends on all of them; 9–11 on 8; 12 on the design alone; 13 last.
- Every commit:
<type>(issue-389): …with the test command and its red→green line.