Skip to content

Strategic design trial: Eliza's check-in

Date: 2026-09-21. Paper design spike, not executable Blaze or validated lowering. Baseline: PR #166 head c44ef29, examples/blaze/adirondack-mystery/dialogue/eliza.blaze. Goal: decide the next three issues, not implement a parser or rewrite the demo.

What the baseline reveals

The file is 495 lines / 26,039 UTF-8 bytes with 129 literal occurrences of cyberart.world.adirondack_mystery. Across the text, npcText, responseText, canonicalText and captionText fields, 52 occurrences have 15 distinct string values. This count excludes repeatText/blockedText and is not a count of all prose. It identifies duplication, not proof that all equal strings should be merged. The companion characters file is 3,367 lines / 114,595 bytes and also contains voice/TTS/media data; module separation alone does not establish context locality.

The apology text occurs as choice text/caption and line canonical text/caption. The respectful-key choice appears in two nodes with similar prose/effects but different decision-hook identities; deduplicating the complete choices blindly would change meaning. The registry choice has a menu label that differs from its spoken line. Preserve both distinctions.

A small candidate source slice

This deliberately borrows record syntax while testing high-level references. All local names below require explicit scope/import resolution. This is a slice, not a complete conversation; it must not be fed to the current compiler.

blaze
// Within conversation eliza.check_in; clara/eliza are imported characters.
line apology_with_whistle {
  speaker: clara;
  text: "The whistle was under the porch rail. I was rude before, and I'm sorry.";
}
line apology_recovery {
  speaker: eliza;
  text: "An apology offered before it is demanded may still be worth something. Keep the whistle—and take the key. Room Seven has been waiting long enough.";
}

// In repair. Existing records remain available for gates/effects/decision metadata.
choice apology_with_whistle {
  say: apology_with_whistle;
  reply: apology_recovery;
  // visibility: has carved_loon_whistle
  // availability: eliza_refused_room_key == true
  // blocked: "Eliza waits until you can name what the porch hid."
  // decision: irreversible; supersedes rude_key_demand
  // hooks: apology_repair + repaired_room_seven_access, with existing projections
  // ordered effects: refusal=false, repaired=true, give brass_room_key,
  //                  checked_in=true, bedroom_unlocked=true, trust="wary"
  // next: after_key
}

// A DIFFERENT choice illustrates menu/spoken-text separation:
// menu: "Ask whether the blotted registry line is connected to the whistle.";
// say: registry_whistle_followup;
// line text: "Is the blotted registry line connected to the whistle?"

Comments above describe preserved existing fields; they are not executable gates. The full decision projections, conditions and effects still need to be authored or explicitly reused. This sketch saves identity/text plumbing, not genuine gameplay. No whole-conversation reduction percentage is claimed from this abbreviated slice. A required implementation fixture must use full mechanics, not these comments.

Lowering witness to preserve

Source intentionExisting runtime representation
apology_with_whistle spoken by ClaraLine ID cyberart.world.adirondack_mystery.dialogue.eliza_vale.check_in.line.player.apology_with_whistle; existing Clara speaker ID
Text authored once, no caption overridecanonicalText and captionText on line; text and captionText on choice; playerLineId points to line
apology_recovery spoken by ElizaExisting .line.apology_recovery; choice responseText and responseLineId; matching line text/caption
Local choice identityExisting .choice.apology_with_whistle, independently of its line identity
Mechanics aboveExisting visibility/availability distinction, blocked text, decision ID/supersession, both hook projections, effects in original order and .node.after_key
Companion audio slot for apology lineExisting generated_tts key voice.adventure_kit.dialogue.clara_mercer.checkin.apology_with_whistle.v1, revision post:92b60bc8-4e62-4789-b1ef-1ac1c41995b5

The historic .line.player.* path is not inferable from an arbitrary short symbol alone. Define role-aware identity rules or use an explicit identity override for this port. Do not change historical IDs just to simplify a grammar sketch. Existing line registry order must also be preserved explicitly where inference differs.

Media companion sketch

text
slot: line(eliza.check_in.apology_with_whistle).audio
accepted ref: generated_tts / voice.adventure_kit.dialogue.clara_mercer.checkin.apology_with_whistle.v1
revision: post:92b60bc8-4e62-4789-b1ef-1ac1c41995b5
input evidence: preserve existing canonical-text evidence;
                report unknown historical synthesis inputs as unverified

Do not recalculate a fingerprint from today's text and falsely claim an old audio asset was generated from it. For newly generated audio, the exported brief's input fingerprint must match the binding result. Actual payload/rights/voice records may remain in typed hash-pinned data files. The story has no post UUID in its prose.

Four task walkthroughs (reasoned, not executed)

  1. Mechanics pass: inspect repair node. Return visibility, availability, blocked behavior, decision supersession/hooks, ordered effects, destination and affected references. Updating a gate leaves line/media source unchanged. Static impact does not prove reachability; existing runtime scenario checks verify it.
  2. Dialogue pass: inspect apology line + local mechanics summary + Clara's character context. Change text once; compiler updates its emitted copies. Show all consumers and mark the old TTS binding stale. Captions follow only when no override exists. Story mechanics and stable identity remain unchanged.
  3. TTS pass: inspect one unbound/stale line, speaker/voice settings and optional neighboring lines. Export brief, generate externally with Moltazine tooling, bind an immutable accepted result with matching input evidence. Write only the media companion/data and required hash pins, not the dialogue or mechanics.
  4. Art pass: inspect lobby visual slot, room/character/item briefs, selected variant and source-bound geometry constraints. Generate externally; bind only with compatible evidence. Changed image identity can block acceptance pending new geometry/mask review. Dialogue choices need not enter the context packet.

Decision and remaining implementation choices

Proceed with authoring ergonomics/media separation, then read-only context views, then bounded source patches and media binding. Keep the WorldBundle runtime boundary. Use explicit stable identity and a compiler-derived index shared by inspect/edit; retain source trivia/spans for surgical writes. No need for a new story VM.

Implementation must finalize the grammar and role/ID table, companion serialization, packet/patch schemas and concrete transaction recovery mechanism. These are bounded engineering choices under the target contract, not a license to reopen the runtime architecture. Validation and context-reduction claims belong to the implementation issues and #161, not this strategic trial.

BARKLINE mark is served from a local, hash-pinned repository asset.