From 305e6cd31340f7902fac544d6ce29ad19b48d6b7 Mon Sep 17 00:00:00 2001 From: tegwick Date: Fri, 4 Sep 2026 19:30:39 +0200 Subject: [PATCH] Declare the Telegram presence and state the campaign's boundary The presence spec is editorial -- a bot's name, its description and the channel titles a stranger reads are brand, not mechanism -- so it belongs to the campaign rather than to the delivery interface. fluid-telegram's provisioner consumes it by path, which keeps that interface reusable by campaigns other than this one. The avatar is referenced but deliberately absent: it is the first thing a stranger sees of HelixForge on Telegram, and a generated placeholder would quietly become permanent. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_0172sgCZEEDJcnQmr4SGDvKa Assistant: claude-code Assistant-Model: opus Assistant-Process: 1361245@bnt-lap001 Assistant-Session: b3b428ef-f3e6-4688-b091-01f71461d66a --- README.md | 64 ++++++++++++++++++++++++++++++++++++- presence/assets/README.md | 17 ++++++++++ presence/telegram.yaml | 67 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 presence/assets/README.md create mode 100644 presence/telegram.yaml diff --git a/README.md b/README.md index 88b2e25..2250806 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,65 @@ # pr-hall-of-helix -Marketing campaign and outlet to promote achievements on helix-forge from the hall-of-helix information about work sessions by agents or humans. \ No newline at end of file +The public-relations campaign that turns `hall-of-helix` work into published +posts. The `pr-` prefix marks it as a campaign repository rather than a service. + +## What this repo owns + +- **Composition** — turning a hall entry into a post, and the editorial voice + that does it. +- **Selection** — which work is worth a post, and when. +- **Consent** — the basis on which HelixForge may write publicly about a named + person's work, and the record of it. +- **Review** — a person reads each post against its source entry before it goes + out; their name travels with the post as `reviewed_by`. +- **Variant strategies** and their competition. +- **The declared presence** — `presence/telegram.yaml`, because a bot's name and + a channel's title are brand, not mechanism. + +## What it does not own + +Delivery. Posts are published through the FLUID interface +`helix-forge-telegram-publishing` in [`fluid-telegram`](../fluid-telegram), by a +single call: + +``` +POST /v1/channel-posts +``` + +That interface renders and delivers. It never writes, selects, shortens or +embellishes — a post that will not fit is refused, not truncated. This campaign +is a *consumer* of it, in cohort `hall-publishing-jobs`, and receives per-variant +engagement back. + +The channel **does not republish entries.** A hall entry is a considered +first-person account written for a colleague reading a repository; a post is +short, personal, and written to travel. The post is composed *from* the entry +and is a different piece of writing. The entry is the source and the check, +never the payload. + +## Status + +Stub. The declared presence exists; composition, consent and the review queue do +not yet. They currently live in `fluid-telegram` under `FT-WP-0001` T06/T07 as a +temporary arrangement, and move here under `FT-WP-0001` T13 once the loop has +closed at least once. + +## Layout + +``` +presence/telegram.yaml the declared Telegram presence (validated by + fluid-telegram/presence/telegram.schema.yaml) +presence/assets/ avatar and other brand assets +``` + +## Provisioning the presence + +From `fluid-telegram`, after the seeding runbook (`docs/seeding-runbook.md`): + +```bash +provision plan --spec ../pr-hall-of-helix/presence/telegram.yaml +provision apply --spec ../pr-hall-of-helix/presence/telegram.yaml +``` + +Nothing secret belongs in this repo. Tokens, sessions and the redaction salt +live in OpenBao. See `fluid-telegram/docs/provisioning.md`. diff --git a/presence/assets/README.md b/presence/assets/README.md new file mode 100644 index 0000000..85883e3 --- /dev/null +++ b/presence/assets/README.md @@ -0,0 +1,17 @@ +# Brand assets + +## helixforge-avatar.png — MISSING + +`presence/telegram.yaml` references `presence/assets/helixforge-avatar.png`. +It does not exist yet, and `provision apply` will fail on `/setuserpic` until +it does. + +Requirements: square, at least 512×512, PNG. Telegram crops to a circle, so +keep the mark clear of the corners. + +Deliberately not generated. This is the first thing a stranger sees of +HelixForge on Telegram, and it should be a considered choice rather than a +placeholder that quietly becomes permanent. + +Provisioning is content-addressed on the file's digest, so replacing this file +is what triggers an avatar update on a later `apply`. diff --git a/presence/telegram.yaml b/presence/telegram.yaml new file mode 100644 index 0000000..1999155 --- /dev/null +++ b/presence/telegram.yaml @@ -0,0 +1,67 @@ +# The declared Telegram presence for the Hall of Helix campaign. +# +# This file is the campaign's, because it is editorial: the bot's name, its +# description, and the channel titles a stranger reads are brand, not mechanism. +# +# It is consumed by the provisioner in fluid-telegram, which validates it against +# presence/telegram.schema.yaml there and reconciles Telegram to match: +# +# provision plan --spec ../pr-hall-of-helix/presence/telegram.yaml +# provision apply --spec ../pr-hall-of-helix/presence/telegram.yaml +# +# Nothing secret belongs here. See fluid-telegram/docs/provisioning.md. +presence: + schema_version: "0.1" + campaign: "hall-of-helix" + interface: "helix-forge-telegram-publishing" + + bot: + name: "HelixForge" + + # BotFather requires a globally unique username ending in "bot" or "_bot", + # and a good first choice is usually taken. Fallbacks keep apply from + # stopping on a collision; the one actually issued is recorded in + # fluid-telegram/presence/resolved/hall-of-helix.yaml. + username_preference: + - "HelixForgeBot" + - "HelixForgeHallBot" + - "HelixForgePublishBot" + + about: >- + Short notes on the work going into HelixForge, and the people doing it. + + description: >- + HelixForge turns intent into structure, structure into capability, and + capability into lasting progress. The Hall of Helix is where the people + and sessions doing that work are acknowledged. This channel carries short + accounts of it, each linking back to the entry it was written from. + + avatar: "presence/assets/helixforge-avatar.png" + + channels: + # Created first. Every rendering is checked here, and nothing reaches the + # public channel until a person has looked at one. + test: + title: "HelixForge — rendering checks" + description: >- + Private. Publications land here first so a person can see them rendered + before any subscriber does. Nothing here is published. + visibility: private + admin_rights: [post_messages] + + public: + title: "Hall of Helix" + description: >- + Short notes on the work going into HelixForge, and the people doing it. + Each post links to the entry it was written from. + visibility: public + username_preference: + - "hallofhelix" + - "halloftheHelix" + - "helixforgehall" + admin_rights: [post_messages] + + # Comments are an inbound surface; this interface is outbound only. Turning + # this on is a scope change rather than a setting — it creates a moderation + # obligation that nothing in the current design carries. + linked_discussion_group: false