Updates
updates/2026-09-24-slug.md. The console reads it here, the board site renders it at team level, and a session sees the latest at boot. Nothing is typed twice, so the feed and the board cannot disagree — the same law the board dashboard holds its figures to, applied to narrative.On the go
Linear open per seat — one label group in RCTX (seat:product, seat:revenue, …) and the count is a query. Today issues carry repo labels (platform, app, board), not seat labels.
Merged this week — the GitHub API against the eight repos, keyed by the repo → seat map the collector already holds.
Seat page priorities — every seat page's Current priorities was last touched 2026-08-06. Phase 0 makes that block a render of the seat's newest status and ask updates, so it stops rotting.
Write an update
- R1Outcome level, never mechanism. How Relay works internally stays in the vault. The collector refuses a post that names a mechanism-gated term; the disclosure gate is Erik's.
- R2Nothing person-attached. No pay, equity, terms, or a figure tied to a name — that lives one tier up and is never quoted down. A post can say a role was filled; it cannot say what it costs.
- R3Never "patent pending". Nothing is filed. Filing status is a headline-only vault post, never a claim in copy.
- R4Vault material is headline only. A Legal & IP post carries its first sentence and a lock; the detail stays behind the vault gate, exactly as the board's What's new already handles vault entries.
- R5No second copy of an open question. An ask links to where it is worked — a Linear issue, a board page, a pending-decisions file — and is resolved by a later post, not by editing this one.
- R6Append-only. A wrong update gets a correcting update. The file is never rewritten after merge; the directors-log rule, applied down.
- R7The first sentence stands alone. It is the headline on the board render, in the boot pack, and in a notification. If it needs the second sentence, rewrite it.
Sources & wiring
- Committed in the PR that did the work
- Frontmatter: seat · kind · visibility · title · date · author · links
- Also: the console form (P2) · a seat relaying it (P2) · a Linear status update (P2)
- A workflow on relay-board reads every Relay repo's
updates/on a schedule and on dispatch - Validates frontmatter, refuses what fails — names the field
- Opens a PR on relay-board; never pushes
main. Same token, same posture asboard-sync.yml
- board.relayctx.com/updates/ — team-visible posts in full; the rest counted (P0)
- Console · Updates — this shell, per-row visibility, seat cards (P1)
- Boot — the newest posts in the pack a session boots with, and in
relay_context(P3)
| Surface | What it is today | What changes | Status |
|---|---|---|---|
relay-platform changelog/ → board platform-shipped.md | Dated engineering entries rendered onto the board by board-sync.yml + render_board_changelog.py; opens a PR, never pushes main | The pattern the collector generalises. The changelog stays engineering's record; a shipped update is the seat-level line above it, written when it matters to the company | exists |
relay-board docs/UPDATES.md | The hand-written cross-agent bulletin, newest first, CI-checked for staleness against the shipped record | Becomes a generated view of the feed, the way the home page's What's new is a view of the changelog. Its freshness check keeps running — now against the feed | extend |
relay-board hooks/whats_new.py | Build hook rendering the newest changelog entries onto the home page; enforces the 🔒 headline-only rule for vault entries | A second marker, <!-- updates:5 -->, renders the newest team-visible updates the same way, same lock rule | extend |
Every repo's CLAUDE.md — the close-the-loop section | relay-creative and relay-board already end with Pushed is not published — recommend the merge; relay-platform's is the engineering guide | One paragraph in each: if your work changes what a seat would tell the company, write an update — path, fields, rules — in the same PR. Eight repos, one line each | proposed |
relay-board docs/operations/session-coordination.md | The seven-rule convention every session reads before building | Rule 8: close the loop in the feed. Where a session learns the rule is where the rule has to be | proposed |
Hub orgs/relayctx/agent/relay.md § Close-out · NEXT.md · CONTEXT.md | The brand-agent close-out: update streams, rebuild NEXT, refresh CONTEXT, add a LEDGER line, sync Relay | One more step in the close-out: post the update. CONTEXT's Right now block can be rendered from the newest status posts instead of rewritten by hand | proposed |
Seat pages — relay-board docs/leadership/*.md | Eight seats, each with a hand-written Current priorities block, all last touched 2026-08-06 | The block becomes a render of the seat's newest status and ask posts. The page stops rotting because nobody has to remember it | extend |
Seat series — relay-strategy · relay-finance · relay-revenue · relay-operations · relay-chief-of-staff | Each operating seat is reclaimable as a Relay context by series name | Path C: a seat session ends by relaying its update. Needs the write-gate posture decided (a peer must not execute what the initiator could not) | proposed · P2 |
Boot pack — hub BOOT.md · leadership boot series · relay_context | A session boots from the repo and a Code; the pack points at files, never copies them | The pack gains one pointer: the feed is where you learn what moved since your last session, and where you leave what you moved. relay_context returns the newest posts at the caller's level | proposed · P3 |
| Linear — team RCTX, project status updates | Projects carry status updates with a health signal; issues carry repo labels, no seat labels | Ingest a project status update as a status post (P2); add a seat:* label group so the per-seat open count goes live (P3) | proposed |
Console — System notices · platform_alerts | The console already authors one record with several deliveries (banner · card · overlay · bell), and already carries a per-admin notification layer | The console form (P2) reuses the notices pattern; a new ask or risk at the viewer's level can raise a bell item the same way an alert does | exists · reuse |
Guards — check_auth · check_tier1 · the RBAC catalog | Admin gate accepts admin · superadmin · platform_admin; tier-1 is the top two; the capability catalog exists, ships dark, enforcement off | Interim: the section behind check_auth, board rows behind check_tier1, per endpoint. Target: platform.updates.read granted to a management group — the first console surface a non-operator holds | extend |
| Viewer | team | management | board | How |
|---|---|---|---|---|
| Superadmin · platform_admin | ✓ | ✓ | ✓ | check_tier1, per endpoint |
| Admin (platform ops) | ✓ | ✓ | withheld, counted | check_auth today; narrows to the capability later |
| Management (group grant) | ✓ | ✓ | withheld, counted | platform.updates.read via a platform group — needs the RBAC wiring flip |
| Team (board site reader) | ✓ in full | counted | counted | Cloudflare Access on board.relayctx.com; the render never carries the rows |
Hiding a section is not a gate. Every endpoint filters server-side and returns withheld_count; a missing classification defaults to withheld. Both rules are already the board dashboard's (edge cases 13–15), reused rather than re-decided.
updates/ convention and schema, the collector on relay-board, the board page, UPDATES.md as a view, the pointer in every CLAUDE.md and the coordination convention. No platform code.seat_updates table fed by the collector, the Feed and On-the-go screens, per-row visibility, tier-1 for board rows. Read-only — authoring stays in git.EC, mid-round: “How does this become automated to a certain extent?” A ladder. Each rung removes one human act; a derived or drafted post lands at the level of its source or below, never above, and nothing automated ever produces a board row.
UPDATES.md regenerated, seat-page priorities rebuilt, the PR opened — one workflow. A person writes the file and clicks merge (D7 asks whether generated-only PRs may auto-merge). P0changelog/ entry becomes a shipped post (the titles are already board-grade); a Linear project status update becomes a status post with its health; a seat-tagged changelog line on the board or here becomes one too. The platform seat posts itself every time engineering ships. P2relay_context returns the newest at the caller’s level; a session claims it at boot and starts knowing what moved and where to leave what it moves. Nothing left for a person to remember. P3Never automated, on purpose: the answer to an ask (a decision is Erik’s), anything above team (a person raises visibility on a post they wrote), and anything from tier 0.
- [ ]D1 · The name. Updates is used here because it is Erik's word and the bulletin already carries it. Pulse and Stream are product nouns and are out.
- [ ]D2 · Git is the record. Files in the repos are canonical; the platform table is an index; console-typed posts are mirrored into git by PR. The alternative — the table canonical, git a mirror — inverts the estate's rule and is not recommended.
- [ ]D3 · Who is management. The group grant is a list of people, held in the console. Until the RBAC flip, the interim gate is the admin role, which makes every operator a reader.
- [ ]D4 · Withheld rows on the board site — counted only, or headline-only with a lock. Counted only is the fail-closed default drawn here; the lock convention is the What's new precedent.
- [ ]D5 · Cadence per seat. Product weekly, Legal & IP monthly, everything else fortnightly is the default drawn here. Past cadence reads quiet on the dashboard and nowhere else.
- [ ]D7 · Auto-merge the collector's PR when it changes generated files only and the lint passed — removes the last click at L0. Drawn as a human merge.
- [ ]D6 · Path C's write gate. A seat session relaying its update stalls on a human approving
relay_sendunless the seat is pre-authorised — a posture to decide deliberately.