R2D2-MERIDIAN/examples
Joshua Belke de4cfec61e feat: rebrand Codebase Chat to Meridian
Renames the product to Meridian across 1826 files: 24 crates
(codebase-chat-* -> meridian-*), the Flutter package, env vars
(CODEBASE_CHAT_* -> MERIDIAN_*), the deep-link scheme (meridian://),
Postgres GUCs, Helm charts, skills, and the agent surface.

White-labels every external identity onto self-hosted infrastructure:
hosts move from *.codebase.design to *.meridian.r2d2.office.ilab.zone,
images to registry.r2d2.office.ilab.zone/meridian-*, the repo slug to
r2d2/meridian, and bundle IDs to zone.ilab.office.r2d2.meridian.*.
The Block staging relay and the four Block-internal build repos are not
reachable from a self-hosted deployment and are no longer referenced.

The mark becomes a pixel M. It is 5x6 rather than a square 5x5 because
the avatar-pile mask asserts the hole clears the glyph's right edge:
at 5x5 that edge moves from 68.4% to 73% of the tile, which overruns the
56px team-card hole outright and leaves the other three piles under a
pixel. At 5x6 the aspect is 0.833 against the retired C's 0.800, so all
four masks clear it unchanged. All 59 materializations are regenerated
from the generators; `just check-brand` passes.

Four things are deliberately NOT renamed, because they match what was
*stored* rather than what now ships. Rewriting any of them makes a
migration no-op on exactly the installs it exists to repair:

- Frozen migrations 0001-0030. Their SHA-256 digests are pinned in
  n-minus-one-pins.json and embedded in the attested N-1 image. The new
  vocabulary lands as forward migration 0031, which dual-reads all three
  generations' GUCs, lock names, app profiles and mesh d_tags. The
  push-gateway's own 0001 is likewise restored byte-identical, with
  0002 widening its app_profile CHECK.
- Legacy namespace chains. xyz.block.codebasechat.app is *prepended* to
  LEGACY_RELEASE_IDENTIFIERS and its dev/localStorage twins, per the rule
  in legacy_dirs.rs that a previous rename already broke once.
- Bead IDs (codebaseChat-*), which are cited from commits and docs.
- CHANGELOG history and upstream issue links.

The Codebase-era persona ids are added to RETIRED_PERSONAS with their
prompts verbatim, but deliberately NOT to RETIRED_PERSONA_REPLACEMENTS:
that map drives migration::retire_agents, which deletes deployed
instances, and its safety argument is that the successor is already
deployed alongside. That held for Buzz->Codebase; nothing provisions a
Meridian agent on an install that already onboarded, so mapping these
would delete a working agent and leave nothing in its place.

The brand-guard self-test changes axis: the M is symmetric about its
vertical axis, so a mirrored M *is* the canonical M and asserting a
rejection there would assert a bug. It now flips top-to-bottom (the mark
reads as a W) and pins the horizontal symmetry so the coupling is visible
if the mark ever becomes asymmetric again.

Verified: cargo check --workspace --all-targets clean, just fix-all
clean, flutter analyze clean, just check-skills pass, check-brand 59/59,
brand-core 9/9, avatarPileMask 4/4, starter-avatar contrast 2/2.

Signed-off-by: Joshua Belke <joshua@innovationhub-act.org>
2026-08-04 14:06:04 -04:00
..
countdown-bot feat: rebrand Codebase Chat to Meridian 2026-08-04 14:06:04 -04:00
meadow-core feat: rebrand Codebase Chat to Meridian 2026-08-04 14:06:04 -04:00
workflows feat: rebrand Codebase Chat to Meridian 2026-08-04 14:06:04 -04:00
README.md feat: rebrand Codebase Chat to Meridian 2026-08-04 14:06:04 -04:00

Examples

This directory contains reference material for building on Meridian beyond the desktop app and AI agents.

countdown-bot/

A small non-AI bot that connects directly to the Meridian relay over WebSocket, authenticates with NIP-42, subscribes to one channel, and replies to deterministic commands like !countdown 5 and !fib 8.

It demonstrates two identity paths:

  1. Standalone bot identity — the bot authenticates with its own key and must be explicitly admitted to closed/allowlisted relays.
  2. Owner-attested / agent OAuth path — the bot authenticates with its own key while presenting the same MERIDIAN_AUTH_TAG NIP-OA credential that Meridian agents receive from the owner/agent OAuth flow, so a relay can admit it because its owner is already a relay member.

See countdown-bot/README.md for usage.

meadow-core/

A persona-pack example for Meridian agents.

workflows/

Worked workflow definitions, one YAML file each, covering every trigger and every action the engine can execute. Each opens with a # Demonstrates: comment naming what it teaches.

These are not illustrative snippets — they are load-bearing:

  • cargo test -p meridian-workflow --test examples parses and validates every file against the real schema, and asserts the set still covers all five triggers and all six executable actions. A schema change that invalidates a sample fails the build.
  • They seed the desktop template gallery on the Workflows empty state, via desktop/scripts/generate-workflow-templates.mjs. Adding or renaming a file here requires regenerating (pnpm -C desktop gen:workflow-templates); CI fails on a stale generated module, and the generator refuses a file that is missing from its explicit gallery order.

See docs/workflow-variables.md for the template variable surface and docs/nips/NIP-WF.md for the wire contract.