Document the pr- campaign repository convention
Some checks failed
ci / build (push) Failing after 22s
Some checks failed
ci / build (push) Failing after 22s
Closes FLUID-WP-0009 T01. Writes down what a pr- repository is so the second one need not be reverse-engineered from the first. Keeps the workplan's insistence on naming propaganda alongside public relations and promotion: the mechanism is identical in all three, and what separates them is whether the campaign is accountable to something outside itself -- a source it must not contradict, a named reviewer, a consent basis it can lose. Beyond the required contents, records the boundary table against fluid-*, that a declared presence is brand and belongs to the campaign while the credentials it produces belong to the interface, and that domain and topic follow the subject being promoted rather than the activity -- the domains are market sectors, and none of them is "marketing". 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:
parent
4819fd919a
commit
f2330e68e0
2 changed files with 152 additions and 1 deletions
141
docs/campaign-repositories.md
Normal file
141
docs/campaign-repositories.md
Normal file
|
|
@ -0,0 +1,141 @@
|
|||
# The `pr-` convention — campaign repositories
|
||||
|
||||
A `pr-` repository is a **campaign**: an ongoing public-communication offering
|
||||
with its own voice, cadence, consent records and budget. It consumes one or more
|
||||
`fluid-*` interfaces and owns none of them.
|
||||
|
||||
This document exists so the second campaign repository does not have to be
|
||||
reverse-engineered from the first. `pr-hall-of-helix` is the first instance.
|
||||
|
||||
## Why the prefix says `pr-`
|
||||
|
||||
The prefix covers public relations, promotion, **and propaganda** — including the
|
||||
uncomfortable third word deliberately. A campaign repository that cannot name
|
||||
what it is doing will not govern it well.
|
||||
|
||||
The distinction between the three is not the mechanism, which is identical in all
|
||||
cases. It is whether the campaign is accountable to something outside itself: a
|
||||
source document it must not contradict, a named reviewer, a consent basis it can
|
||||
lose. Everything in this convention exists to keep that accountability
|
||||
structural rather than cultural, because culture does not survive a deadline.
|
||||
|
||||
## What makes a repository a campaign
|
||||
|
||||
Three properties, together. A repository with only one or two of them is
|
||||
something else.
|
||||
|
||||
1. **It speaks outward, in an organisation's voice**, to an audience that did not
|
||||
ask to be written to.
|
||||
2. **It writes about people** — usually people who did not commission the writing.
|
||||
3. **It does not finish.** A campaign has a cadence, not a completion criterion.
|
||||
This is why campaigns must not live inside a workplan: a workplan that never
|
||||
finishes is a workplan that has stopped being honest.
|
||||
|
||||
## Required contents
|
||||
|
||||
### `INTENT.md`
|
||||
|
||||
The ordinary repository intent, plus the campaign's own three questions
|
||||
answered explicitly:
|
||||
|
||||
- **Audience** — who is being written to, and what they did to deserve the
|
||||
attention (usually nothing; they are strangers, and that is the point).
|
||||
- **Voice** — how the organisation sounds here, and why that is appropriate.
|
||||
- **What it will not say.** The most important of the three and the one most
|
||||
often skipped. A campaign with no stated refusals has not decided anything; it
|
||||
has merely not yet been tempted.
|
||||
|
||||
### Consent records
|
||||
|
||||
For every person the campaign writes about: the basis, its date, and how it may
|
||||
be revoked.
|
||||
|
||||
Three rules that are not the campaign's to relax:
|
||||
|
||||
- **Absence of objection is not consent.** Silence is not agreement, and treating
|
||||
it as such is the single most common failure in this class of work.
|
||||
- **A standing agreement does not apply retroactively.** People whose
|
||||
contributions predate the agreement are asked, not assumed in.
|
||||
- **Revocation is honoured going forward**, and the record says so before anyone
|
||||
needs it.
|
||||
|
||||
### Composition strategies as named variants
|
||||
|
||||
Every composed artifact records the `variant` label of the strategy that produced
|
||||
it, at composition time.
|
||||
|
||||
Not afterwards. Reconstructing which strategy wrote what from timestamps is the
|
||||
kind of inference that works until it quietly stops, and by then the comparison
|
||||
it feeds has already been believed.
|
||||
|
||||
### A publishing cadence
|
||||
|
||||
Stated, and slow enough to review at. A backlog is a source to draw on, not a
|
||||
queue to drain — publishing it in a burst is a rate-limit problem, an unkind
|
||||
introduction for a new subscriber, and a volume of writing nobody has had time to
|
||||
read properly.
|
||||
|
||||
### A review step
|
||||
|
||||
A person reads each artifact against its source before it goes out, and their
|
||||
name travels with it.
|
||||
|
||||
This is not ceremony. A condensation can put a claim in someone's mouth that
|
||||
their own source never made, and **in an audit trail an unfaithful artifact looks
|
||||
exactly like a faithful one.** No downstream check recovers this, because there
|
||||
is nothing anomalous to detect. The reviewer is the only mechanism that works.
|
||||
|
||||
## The boundary against `fluid-*`
|
||||
|
||||
| Campaign (`pr-`) owns | Interface (`fluid-*`) owns |
|
||||
|---|---|
|
||||
| Composition and the editorial voice | The contract and its revisions |
|
||||
| Choosing what is worth publishing | The adapter: rendering and delivery |
|
||||
| Variant strategies and their competition | Delivery experiments |
|
||||
| Consent records and the review queue | Per-variant engagement reporting |
|
||||
| The publishing cadence | Platform and channel configuration |
|
||||
| The *declared* presence (names, descriptions, assets) | *Applying* that declaration, and custody of every credential |
|
||||
|
||||
A campaign reaches its interface through the published contract and nothing else.
|
||||
It does not import the adapter, read the evidence store, or hold a credential.
|
||||
|
||||
The separation is architectural rather than stylistic: composition is a
|
||||
probabilistic editorial task, and `ArchitectureBlueprint.md` §48.1 forbids an LLM
|
||||
in the mandatory request path. Putting composition in the campaign is what keeps
|
||||
the interface deterministic.
|
||||
|
||||
### Presence lives with the campaign
|
||||
|
||||
A bot's name, its description, and the channel titles a stranger reads are
|
||||
**brand, not mechanism**, so the declaration belongs to the campaign. The
|
||||
interface holds the schema, applies the declaration, and owns the credentials
|
||||
that result. See `fluid-telegram/docs/provisioning.md` for the worked case.
|
||||
|
||||
## Registration
|
||||
|
||||
- Repository name: `pr-<campaign-slug>`
|
||||
- State Hub domain: **the domain of the subject being promoted**, not a domain
|
||||
named for marketing. The domains are market sectors, and a campaign is
|
||||
classified by what it is about. `pr-hall-of-helix` is `infotech` because
|
||||
HelixForge is.
|
||||
- Topic: the subject's topic, so a query for that subject's work returns the
|
||||
campaign with it (`pr-hall-of-helix` → `helix-forge`).
|
||||
- Workplan prefix: derived from the repo slug (`PRHOH-WP-`).
|
||||
|
||||
## Its own FLUID loop
|
||||
|
||||
A campaign is a consumer of an interface, and it may also run its own FLUID loop
|
||||
over its own artifacts — which composition variant travels — using the
|
||||
per-variant engagement the interface reports.
|
||||
|
||||
These are different loops over different questions and should not be merged. The
|
||||
interface's loop asks *how should this be delivered*; the campaign's asks *what
|
||||
should be said*. The first is settled by the platform's constraints; the second
|
||||
never fully settles.
|
||||
|
||||
## The test of this convention
|
||||
|
||||
Whether a second campaign can be created from this document without reading
|
||||
`pr-hall-of-helix`. Until that has happened, treat the convention as a
|
||||
description of one case rather than a general rule — see `FLUID-WP-0009` T05,
|
||||
which makes the same point about the framework itself.
|
||||
|
|
@ -46,7 +46,7 @@ the wrong place.
|
|||
|
||||
```task
|
||||
id: FLUID-WP-0009-T01
|
||||
status: todo
|
||||
status: done
|
||||
priority: medium
|
||||
state_hub_task_id: "2a3aab85-e464-5b17-980f-1896ecd3794f"
|
||||
```
|
||||
|
|
@ -63,6 +63,16 @@ audience, voice and what it will not say; consent records for anyone it writes
|
|||
about; composition strategies as named variants; and a publishing cadence. It
|
||||
consumes one or more `fluid-*` interfaces and owns none of them.
|
||||
|
||||
**Written: `docs/campaign-repositories.md` (2026-09-04.)** It adds a review step
|
||||
to the list above, the boundary table against `fluid-*`, the registration rules
|
||||
(domain and topic follow the *subject*, since the domains are market sectors and
|
||||
none of them is "marketing"), and the point that a campaign may run its own FLUID
|
||||
loop over its own artifacts without merging it into the interface's.
|
||||
|
||||
It states its own test: whether a second campaign can be created from the
|
||||
document without reading `pr-hall-of-helix`. Until that happens it describes one
|
||||
case rather than a general rule — the same caution T05 applies to the framework.
|
||||
|
||||
## T02 — Establish pr-hall-of-helix
|
||||
|
||||
```task
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue