CHG-0039: scribe Is a Base Sent Once and Its Code Built on the Workload, and “Hey Jarvis” Is in Its Prompt

Date2026-10-24
Change typeUpgrade
StatusIn progress
SystemsThe services workload: eds-scribe-base loaded, eds-scribe built there, nowplayd and voiced sent, all restarted
Howmake -C deploy ship WHERE=builder
RiskMedium. Most likely to go wrong: the core router under the base’s one transfer (INC-0002), which is compressed to 256 MB and held to 5 MB/s
DecisionsADR-0042
RelatedINC-0002, whose follow-up this is; CHG-0038

Summary

The end of the wake word, kept with each request, was written “Lee Jarvis”, “Jay Jarrus”, “Travis”, “The band was very generous”, and the request after it was misheard with it. With “Hey Jarvis” in scribe’s prompt, the same recordings, cut as the device cuts them, were written “Jarvis,” each time, and nothing else changed.

The prompt is scribe’s code, and scribe’s image was 767 MB. It is two now: eds-scribe-base, the runtime, libraries and model with what scribe never runs taken out (533 MB, 256 compressed), sent when its dependencies change; and eds-scribe, 60 KB of code built on the workload on that base, its self-test run there.

The grammar skips “Jarvis” as it skips “Ed”, and no longer takes “Genesis’ first album” for Genesi’s.

Goal

  • The base is sent once, and the router stays up.
  • eds-scribe built on the workload, its self-test passing there.
  • “Hey Jarvis, play Genesis’ first album” plays it.

Procedure

  1. make -C deploy ship WHERE=builder.
  2. make -C deploy status; scribe’s /healthz.
  3. The owner asks.

Undo

git revert this change’s commit, and ship: the base stays loaded, unused.

Outcome

When (UTC)What happened
04:04:19–04:08:16ship WHERE=builder from 879103d: four images neither built nor sent; eds-scribe-base built on the Builder and sent, 256 MB compressed at 5 MB/s; nowplayd and voiced sent, 4 MB each; eds-scribe built on the workload from 60 KB of sources, its self-test passing. The router stayed up. The ship then stopped: pruning before the restart, podman refused an image the running scribe still used.
04:09Pruning moved to after the restart; the six restarted. scribe loaded its model in 2.5 s from the image built there; voiced on 879103d; no timeouts.
04:09:30The prune, which matched only images labelled eds.deploy, left fifty untagged images of the evening’s deploys; the workload holds EdS’s alone, so every untagged image is pruned now. None left; 3.2 GB used of 30.
04:10:17Built and loaded again, nothing changed: nothing built, nothing sent, scribe not built again, in 10 s.

Departures from the plan

  • The prune’s order and filter, both corrected in the change.

Follow-ups