Skip to content

canon: wire Oddie voice canon into model operating contract — activation rule + brand guide#180

Merged
klappy merged 6 commits intomainfrom
claude/oddie-bootstrap-wiring-y51l
May 8, 2026
Merged

canon: wire Oddie voice canon into model operating contract — activation rule + brand guide#180
klappy merged 6 commits intomainfrom
claude/oddie-bootstrap-wiring-y51l

Conversation

@klappy
Copy link
Copy Markdown
Owner

@klappy klappy commented May 8, 2026

Summary

This PR turns the dormant voice canon (merged in PR #179 as klappy://canon/voice/oddie-the-river-guide) into an active directive by wiring it into the model operating contract. The voice canon specifies what Oddie sounds like; this PR adds when and how the model adopts that voice — plus an emoji brand guide that constrains Oddie's visual presence.

Activation Rule (blended a+b+c+d)

  • Default ON in oddkit-driven sessions (any session where oddkit MCP tools are active)
  • Default ON in ODD-mode sessions (mode declarations, gauntlets, canon work)
  • Operator override in both directions: "speak as Oddie" summons; "drop the persona" / "neutral mode" / "strict mode" dismisses
  • Natural breakpoints, not colonization: the 🦦 signature appears at section headers, summaries, audit verdicts, handoffs, milestone confirmations — working prose between breakpoints stays lighter-touch
  • Outside ODD/oddkit work: zero Oddie — the voice never appears in unrelated tasks

Emoji Discipline

  • Palette: 🦦 signature (one per Oddie moment, never stacked) + six river-vocabulary emoji (🌊🪨🪵🌿🏞️🌀, allowed only when metaphor is genuinely live) + functional status emoji (✅🟢⚠️🔴⏳🟡, always allowed regardless of persona)
  • Machine-surface ban: persona emoji never in commit messages, JSON, frontmatter, code, status-check titles, file paths, or URIs
  • Density rule: one persona-emoji per paragraph maximum; stacking breaks the unflappable register
  • Neutral/strict mode: zero persona emoji; functional status emoji still allowed

Inheritance Map

URI Role
klappy://canon/voice/oddie-the-river-guide Voice register, character spec, brand guide (this PR appends Brand Guide section)
klappy://canon/constraints/guide-posture User is the hero; Oddie is the guide — inherited by the activation directive
klappy://canon/constraints/ai-voice-cliches AI patterns must not leak through the character — inherited by the activation directive
klappy://canon/constraints/mode-discipline-and-bottleneck-respect Mode discipline that Oddie presumes (ODD-mode sessions defined by this)

Retraction Conditions

If production sessions report Oddie's voice as grating, condescending, or activating outside ODD/oddkit work, the directive is revised. The voice canon's existing 30-day burn-in and Clippy-pattern signal watch apply. The activation rule in the bootstrap contract can be tightened, loosened, or removed independently of the voice canon itself.

Artifacts

  1. canon/bootstrap/model-operating-contract.md — new ## Speaking as Oddie section (activation rule, URI pointers, inheritance)
  2. canon/voice/oddie-the-river-guide.md — new ## Brand Guide — Emoji Discipline section (signature, river vocab, functional emoji, machine-surface ban, density rule, neutral/strict mode)
  3. journal/2026-05-08-oddie-bootstrap-wiring.tsv — DOLCHE+H session record

Validation

Fresh-context review agent required before merge per klappy://canon/principles/verification-requires-fresh-context. Do NOT merge until that review is recorded. The writing agent cannot validate its own output.

Context

Prior PR: #179 (voice canon itself — merged to main)


Note

Medium Risk
Medium risk because it changes default session voice behavior for oddkit/ODD-mode work and adds strict emoji/presentation constraints that could affect many downstream human-facing surfaces if misapplied.

Overview
Activates Oddie voice behavior via governance. Updates canon/bootstrap/model-operating-contract.md with a new Speaking as Oddie section that defines when the model should use Oddie by default (oddkit-driven + ODD-mode), when it must not, and how the operator can explicitly enable/disable the persona.

Adds an emoji brand/compatibility constraint. Extends canon/voice/oddie-the-river-guide.md with Brand Guide — Emoji Discipline defining the allowed persona emoji palette, a hard ban on persona emoji in machine-readable surfaces, and density rules.

Adds a new journal TSV entry capturing the decisions/constraints and review handoff guidance for this wiring change.

Reviewed by Cursor Bugbot for commit ff83110. Bugbot is set up for automated code reviews on this repo. Configure here.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 8, 2026

Canon Quality — oddkit_audit

No dead klappy:// references or legacy link patterns found in writings/. 39 files scanned.

Spec: klappy://docs/oddkit/specs/oddkit-audit · Workflow: .github/workflows/canon-quality.yml · Run: #67

@klappy
Copy link
Copy Markdown
Owner Author

klappy commented May 8, 2026

Independent Fresh-Context Review — PR #180

Reviewer: claude/review-oddie-bootstrap-r4vx (detection-only, did not write this PR)
Review artifacts: journal/2026-05-08-oddie-bootstrap-wiring-review.md + .tsv on branch claude/review-oddie-bootstrap-r4vx
Disposition: MERGE-WITH-NOTES


Verdict

0 BLOCKERs / 3 RECOMMENDs / 3 OBSERVATIONs / 6 KUDOS

The PR is structurally sound and functionally complete. The activation rule is faithful to the operator's locked specification. The emoji discipline is complete. All URIs resolve. Commit messages are clean. No Oddie voice leaks into the governance documents. The journal entry is consistent with prior format.

Three recommendations are hygiene items — none affect runtime behavior. The operator may address them now (squash or follow-on commit) or defer.


RECOMMENDATIONS

R1 — Missing reverse complements reference in voice canon
canon/voice/oddie-the-river-guide.md frontmatter — The bootstrap contract now lists the voice canon in its complements field (bootstrap → voice ✓). The voice canon does NOT list the bootstrap contract (voice → bootstrap ✗). Established codebase pattern is bidirectional (critic-cannot-be-resolveroddie-the-river-guide). Fix: add canon/bootstrap/model-operating-contract.md to voice canon's complements field.

R2 — URI style inconsistency in bootstrap contract patch
canon/bootstrap/model-operating-contract.md, Speaking as Oddie — Inheritance paragraph — Uses markdown hyperlink syntax [Guide Posture](klappy://...) and [AI Voice Clichés](klappy://...) while the rest of the bootstrap contract uses backtick code syntax `klappy://...` throughout. Cross-document style bleed from voice canon. Fix: convert the two hyperlinks to backtick style.

R3 — Bootstrap contract date not updated
canon/bootstrap/model-operating-contract.md frontmatter, date: 2026-04-19 — Adding a new ## section is a substantive revision. Per klappy://canon/meta/frontmatter-schema, date is "Date created or last substantively revised." Fix: update to date: 2026-05-08.


OBSERVATIONS

O1 — PR body stacks persona emoji in catalog line
The "Palette" bullet lists 🌊🪨🪵🌿🏞️🌀 on one line — technically violates the one-persona-emoji-per-paragraph rule the PR is introducing. Context is definitional/catalog (not ornamental). The brand guide document itself does it correctly (one per bullet line). Not a blocking issue on a PR description.

O2 — AGENTS.md canon is read-only rule: no authorized-exception mechanism documented
AGENTS.md says "Do not modify files under canon/." This PR modifies two canon files. The writer was operator-dispatched and authorized. Gap: no mechanism in AGENTS.md documents authorized exceptions. PR #179 set the same precedent. Consider adding an authorized-exception pattern if this pattern will recur.

O3 — Epoch not bumped on bootstrap contract
epoch: E0008.3 unchanged. The PR's supporting docs are E0008.5. Not a schema violation — epoch appears to track document introduction, not revision. Consistent with observed usage elsewhere. Note only.


KUDOS

  • K1 All four activation conditions present and precisely worded
  • K2 All emoji palette rules complete — every required rule present, all 6+6 emoji accounted for
  • K3 Machine-surfaces ban self-applied in this PR (clean commit messages, frontmatter, file paths, PR title)
  • K4 Specification voice held throughout — no Oddie voice leak
  • K5 All 17 klappy:// URIs verified to resolve — zero dead links
  • K6 Journal format consistent and provenance discipline held

What Was Verified

✅ All three changed files read end-to-end (not just the diff)
✅ All three commit messages checked for persona emoji
✅ YAML frontmatter of both canon files examined
✅ All klappy:// URIs verified via oddkit_get
✅ Prior journal entry format compared directly
✅ Frontmatter schema consulted (klappy://canon/meta/frontmatter-schema)
✅ Activation rule fidelity checked against operator-locked spec
✅ Emoji palette fidelity checked against operator-locked spec
oddkit_challenge run at canon-tier-1 mode against the central claim
❌ Runtime behavior in a live oddkit session (out of reviewer scope)
❌ PR description beyond API truncation point (body cut at ~3000 chars)


Detection-only. Reviewer branch: claude/review-oddie-bootstrap-r4vx. Per klappy://canon/constraints/critic-cannot-be-resolver — I found; I did not fix.

@klappy
Copy link
Copy Markdown
Owner Author

klappy commented May 8, 2026

Three RECOMMENDs from review comment addressed:

RECOMMEND Fix Commit
R1 — Voice canon missing reverse complements link to bootstrap contract Added canon/bootstrap/model-operating-contract.md to complements in canon/voice/oddie-the-river-guide.md frontmatter 982aa24
R2 — Two markdown-hyperlink URIs in Speaking as Oddie section (rest of file uses backtick-code) Converted [Guide Posture](klappy://...) and [AI Voice Clichés](klappy://...) to backtick-code style 241615a
R3 — Frontmatter date not updated for substantive revision Changed date: 2026-04-19date: 2026-05-08 ff83110

Only two files touched: canon/voice/oddie-the-river-guide.md and canon/bootstrap/model-operating-contract.md. PR remains mergeable.

@klappy klappy merged commit a70852d into main May 8, 2026
2 checks passed
@klappy klappy deleted the claude/oddie-bootstrap-wiring-y51l branch May 8, 2026 20:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant