Skip to content

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

Testing plan: a Slack app from one click, named by its operator ​

Derived from requirements.md and design.md. The results are in evidence/verification.md.

Test matrix ​

#TypeApplies?Scope / what it provesWhere it runs
T1Unit (naming)yes--name sets the two name fields and nothing else; the handle rule; every refused name exits 2 and writes nothingcli/tests/test_channels_commands.py -k manifest
T2Unit (formats, link)yesno option prints the packaged file verbatim; --format json parses back to the built manifest; --link decodes back to the same manifestsame
T3Unit (kept file)yes--write defaults beside the resolved CLI config; creates, reports unchanged without rewriting, reuses the kept name, reports the scope and event delta and the reinstall line; refuses an unreadable file without --name and leaves it untouchedsame
T4Regression (full suite + hooks)yesruff, ruff format, pyright, all CLI tests, markdownlintmake check equivalents
T5Securityyes (review)name only through the serializers, nothing but the name read back, no network, no tokenevidence/security-review.md
T6Manual (Slack)no, not runnable herethe link opens Slack's create dialog prefilledsee below
T7Integration / contract / UI / accessibility / migration / performancen/ano service route, no API contract, no UI, no stored data beyond one file the command owns, no hot path

Requirement trace ​

RequirementTests
R1.1, R1.5T2
R1.2, R1.3, R1.4T1
R2.1, R2.2T2, T5
R3.1–R3.6T3
R4, R5review of the walkthrough diff (evidence/documentation.md)
Security considerationsT1, T3, T5

Verification environment ​

This repository's own checkout. No service, fixture or credential: the verb is local and the tests point $THE_LOOP_CLI_CONFIG at a temporary directory.

Not covered by an automated test ​

Slack's handling of the link (T6). This cloud session has no Slack workspace or browser login. The test decodes the link back to the manifest, and Slack documents the new_app=1&manifest_json= parameters. The live check is the next operator who runs /the-loop:init.

Released under the MIT License.