diff --git a/README.md b/README.md index e95cf9b..201467d 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,6 @@ are in place; the bot, the channel and the adapter itself are not. - Governance: [`InterfaceEvolutionIntent.md`](InterfaceEvolutionIntent.md) - The channel publishes composed posts written *from* hall entries, not the entries themselves. Composition happens upstream and moves to - `pr-hall-of-helix` once the loop has closed once (FT-WP-0001 T11). + `pr-hall-of-helix` once the loop has closed once (FT-WP-0001 T13). - Work: [`workplans/FT-WP-0001-telegram-identity-and-hall-channel.md`](workplans/FT-WP-0001-telegram-identity-and-hall-channel.md) - Handover from fluid-core: `fluid-core/docs/handover/fluid-telegram.md` diff --git a/workplans/FT-WP-0001-telegram-identity-and-hall-channel.md b/workplans/FT-WP-0001-telegram-identity-and-hall-channel.md index 0744d1e..f1cf6a8 100644 --- a/workplans/FT-WP-0001-telegram-identity-and-hall-channel.md +++ b/workplans/FT-WP-0001-telegram-identity-and-hall-channel.md @@ -52,7 +52,6 @@ adapter. id: FT-WP-0001-T01 status: todo priority: high -state_hub_task_id: "a5449e86-3181-54b6-a0fe-e5c761b3e4ba" ``` **Human step.** Register the HelixForge bot through BotFather (Canon BOT-01). @@ -70,7 +69,6 @@ briefly. Consistent with `HF-WP-0002` (bao.coulomb.social). id: FT-WP-0001-T02 status: todo priority: high -state_hub_task_id: "597ab1b7-5903-5a5d-a510-0a6946325404" ``` **Human step.** Create the **private test channel first**, then the public @@ -87,7 +85,6 @@ public channel until the rendering has been seen by a person. id: FT-WP-0001-T03 status: todo priority: high -state_hub_task_id: "bbe5da73-e604-5dfe-b25f-fba802f67618" ``` `openssl rand -hex 32`, stored in OpenBao beside the token, injected as @@ -100,7 +97,6 @@ rotating it silently invalidates every longitudinal comparison. id: FT-WP-0001-T04 status: todo priority: high -state_hub_task_id: "13a92a96-2f87-5de2-a69c-7edc21f3a0c7" ``` ```bash @@ -120,7 +116,6 @@ only, and a revision signed with one stops verifying after a restart. id: FT-WP-0001-T05 status: todo priority: high -state_hub_task_id: "c89782da-9896-5957-b729-7c35165a0067" ``` Implement the three operations in `contracts/r1.openapi.yaml` against the @@ -132,10 +127,10 @@ post arriving without `reviewed_by` or a consent basis is refused with 403; and a post that exceeds the limit for the form being published is refused rather than truncated. The adapter renders and delivers. It never writes. -## T05b — Establish the composition step +## T06 — Establish the composition step ```task -id: FT-WP-0001-T05b +id: FT-WP-0001-T06 status: todo priority: high ``` @@ -144,7 +139,7 @@ Build the step that turns a hall entry into a post: condensed, personal, entertaining, reach-optimized, carrying a link back to the source entry. For now this lives here, as a script plus a review queue. It is temporary by -design — T11 extracts it into `pr-hall-of-helix` — so keep the seam clean. The +design — T13 extracts it into `pr-hall-of-helix` — so keep the seam clean. The composition step's only interface to publishing is `POST /v1/channel-posts`, and it must not reach into the adapter or the evidence store. @@ -158,10 +153,10 @@ someone's mouth that their own entry never made, and in the audit trail an unfaithful post looks exactly like a faithful one. The reviewer reads the post against the entry, and their name goes in `reviewed_by`. -## T05c — Record the consent basis for hall participants +## T07 — Record the consent basis for hall participants ```task -id: FT-WP-0001-T05c +id: FT-WP-0001-T07 status: todo priority: high ``` @@ -175,15 +170,14 @@ say plainly that it is revocable. Contributors who predate it should be asked rather than assumed into it. Absence of objection is not consent, and the interface refuses a post carrying -no basis, so this blocks T08. +no basis, so this blocks T10. -## T06 — Publish one post to the private channel +## T08 — Publish one post to the private channel ```task -id: FT-WP-0001-T06 +id: FT-WP-0001-T08 status: todo priority: high -state_hub_task_id: "317bef32-e82e-586a-8947-8cbb330f6c98" ``` The first real test. Compose one post from one entry, have it reviewed, publish @@ -201,13 +195,12 @@ it to the private channel, and confirm by looking at it: The second bullet is the one that needs a person. Everything else can be automated; whether a condensation is fair to the person it describes cannot. -## T07 — Implement both delivery forms as R-2 and R-3 +## T09 — Implement both delivery forms as R-2 and R-3 ```task -id: FT-WP-0001-T07 +id: FT-WP-0001-T09 status: todo priority: medium -state_hub_task_id: "6a91ea08-8814-58f3-8297-a7ca63405294" ``` R-2 implements `H-tg-visual` — portrait attached, and Telegram's 1024-character @@ -219,16 +212,15 @@ before either sees a subscriber. The two arms impose different length limits on the composer, which is the one place delivery and composition genuinely couple. -## T08 — Open the public channel and start publishing +## T10 — Open the public channel and start publishing ```task -id: FT-WP-0001-T08 +id: FT-WP-0001-T10 status: todo priority: medium -state_hub_task_id: "5e5cd89a-e7b1-5aaf-9331-ece424afe5e3" ``` -Point the production adapter at the public channel. Blocked on T05c: no post +Point the production adapter at the public channel. Blocked on T07: no post goes out about anyone's work without a recorded consent basis. Do not batch-publish the backlog. Ninety-four posts in a burst is a rate-limit @@ -237,13 +229,12 @@ ninety-four compositions nobody has had time to read properly. Publish selectively and at a human pace, and let the backlog be a source to draw on rather than a queue to drain. -## T09 — Run the first delivery experiment +## T11 — Run the first delivery experiment ```task -id: FT-WP-0001-T09 +id: FT-WP-0001-T11 status: todo priority: low -state_hub_task_id: "649e7df6-6c07-5cc8-a022-d1eadcdb7236" ``` Start `E-tg-delivery` once the channel has roughly 100 subscribers. Before then @@ -255,13 +246,12 @@ thin, and the honest expectation is that the first run is inconclusive and informs a better-powered second one. Record that expectation in the experiment's amendments rather than discovering it as a disappointment. -## T10 — Close the loop +## T12 — Close the loop ```task -id: FT-WP-0001-T10 +id: FT-WP-0001-T12 status: todo priority: low -state_hub_task_id: "b469b9b8-a1a8-5f76-a1bb-dd51dd4d2ce5" ``` Record the hypothesis outcome, resolve `CG-tg-delivery`, and promote the winner. @@ -271,10 +261,10 @@ mismatch through to the promoted revision. That trace is the deliverable. It is what makes this the first FLUID interface rather than a bot that posts to a channel. -## T11 — Extract the campaign into pr-hall-of-helix +## T13 — Extract the campaign into pr-hall-of-helix ```task -id: FT-WP-0001-T11 +id: FT-WP-0001-T13 status: todo priority: medium ``` @@ -302,5 +292,5 @@ campaign rather than being about the Hall of Helix specifically. And the Hall of Helix campaign becomes an ongoing offering with its own intent, budget and cadence, rather than living inside a workplan that was supposed to finish. -Do this once the loop has closed at least once (T10). Extracting a seam before +Do this once the loop has closed at least once (T12). Extracting a seam before you have used it is how you find out you cut it in the wrong place.