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 <noreply@anthropic.com>
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
This commit is contained in:
tegwick 2026-09-04 19:30:39 +02:00
parent fa6f38e3d7
commit 305e6cd313
3 changed files with 147 additions and 1 deletions

View file

@ -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.
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`.

17
presence/assets/README.md Normal file
View file

@ -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`.

67
presence/telegram.yaml Normal file
View file

@ -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