Decision
Jolt’s per-client agent context (currently a single blended content-dna.md per client) will converge on the same layered architecture as the Megaphone rebuild when client count grows: rule-card.json (machine-checkable rules and config) + voice-card.md (prose voice spec) + exemplars/ (approved outputs and correction diffs). The current single-file format is the right stage-appropriate choice today, not a permanently different architecture.
Also decided in the same conversation: Rye Valley owns and operates the ~/.jolt/workspace runtime on the Mini, not Ben. Hermes merges, syncs, and maintains it under the standard PR workflow, same as any other RV system.
Context
Michael challenged the earlier framing that rule-cards are “right for Megaphone” while prose DNA is “right for Jolt”: both businesses are heading to tens or hundreds of clients, operated first by a larger internal team and eventually self-serve. The architectures differ by STAGE, not by business identity. What drove Megaphone to rule-cards was scale pressure, not taste:
- Cross-client rule conflicts (universal rules needing per-client allowances, e.g. Gusberg spaced hyphens) - prose can describe exceptions, only structure lets a scanner honor them. Rare below ~5 clients, constant above ~10.
- Operator interchangeability - schema keeps client #37’s file shaped like client #4’s when operators no longer share context socially.
- Machine surface area - more automated consumers (scanner, routing, engagement config, regression harness) each want structure, not regex-over-prose.
Fidelity rule that stays absolute at every stage: voice prose is never JSON-ified. Megaphone factored (rules to JSON, voice stayed prose in voice-card.md, examples to exemplars/); it never converted prose to structure. The 91KB polluted Gusberg bible is the standing warning for blending layers.
Trigger and migration
- Trigger: the EARLIER of (a) ~5 active Jolt clients, or (b) the first time two clients’ rules conflict. Do not wait past the trigger; migrating at 4 clients is an afternoon, at 30 it is a project.
- Cheap prep now (already true, keep it so): content-dna.md sections stay cleanly delimited; banned_phrases keep the quoted-literal convention. This makes the eventual factoring a mechanical script.
- The banned_phrase_scan.py shipped 2026-07-31 parses section-wise; pointing it at a rule-card later is a ~20-line change.
- Self-serve horizon (explicitly not today’s problem) pulls the same direction: onboarding forms produce structured data natively; a rule-card IS a form submission, prose DNA would need an LLM writing pass per signup.
Consequences
- Linear JOLT-59 tracks the migration as a backlog item with the trigger condition in its description, so client onboarding hits a documented plan.
- The telemetry log (metrics/review-log.jsonl) accumulates Tatem’s correction signal now, which becomes the seed for exemplars/ at migration time.
- Anyone onboarding a new Jolt client before the trigger keeps using content-dna.md with the current conventions (quoted literals for bans, delimited sections).