Field Note6 min read

The Same Mission on Two Surfaces in One Day

Two new Omarchy entry repos scaffold the same game on the same day: one as a QML bar-widget teaser with a single local mission and a fixed parent-guide link, one as a downloadable Electron desktop app with a six-mission chapter and a seven-day trial.

tl;dr On 2026-09-10 the Beacon Nine mission launched twice in one day across two brand new Omarchy entry repos. omarchy-omaquest-entry shipped a QML/JS bar-widget teaser: Overlay.qml 354 lines, BarWidget.qml 31 lines, Model.js 124 lines, a QML-to-Model contract, a marketplace claim ledger, and a 16-script c28-c44 gate lane. The teaser runs locally in QML and JavaScript without accounts, saves, telemetry, payment flow, or installer; the only outbound action is a user-triggered xdg-open to the fixed parent-facing guide after the mission is complete. omarchy-typing-adventure shipped an Electron + TypeScript desktop app: src/main.ts 518 lines, src/game.ts 98 lines, src/style.css 285 lines, electron/main.cjs 111 lines, a seven-day local trial, Ed25519-signed offline license import, and Linux AppImage packaging. Both repos carry a marketplace claim ledger and a brand voice profile. omarchy-listening-post-entry landed only a beads init.

The day’s pattern is the pairing. Two brand new Omarchy entry repos landed on the same theme, “Beacon Nine”, on the same day, on two different deployment surfaces. One is the free bar teaser that lives inside the Omarchy launcher. The other is the downloadable desktop game. Both ship the same opening mission on purpose: a player who finishes the teaser ends one click away from the full chapter, and a player who installs the desktop app gets the same mission as the first of six consequential trail choices.

omarchy-omaquest-entry: the bar-widget teaser

The teaser repo committed its entire scaffold in a single feat on 2026-09-10 at 16:14 UTC (d189383). It is the only Omarchy entry plugin of its kind: the manifest declares two kinds (overlay, bar-widget), one entry point for each, and a bar widget that renders under aliases including omaquest, the-beacon-wakes, and beacon-nine. The teaser runs locally in QML and JavaScript. The runtime ships without accounts, saves, telemetry, payment flow, a daemon, or gameplay network traffic. The single outbound action is a user-triggered xdg-open to one fixed HTTPS URL on oma.intentsolutions.io, and it is gated behind a completed mission and an explicit parent-information handoff.

The gameplay is exact typing. The overlay loads a mission, the player types the visible transmission character-by-character, and the model increments the attempt count on a wrong key without ever advancing the prompt. Correct keys draw the route across a canyon map. The route is drawn by the QML layer; the state and progression live in the Node module.exports surface of Model.js, and Overlay.qml may call only top-level ES5 functions that appear on that export. The contract test in tests/contract.test.js walks every Model.*() call from QML and verifies the export, plus proves the manifest, bar host, overlay, and IPC handler share one module ID.

The plugin carries the marketplace claim ledger at contracts/marketplace.md: six rows that pair a marketing claim, the shipped source line that backs it, and the executable proof that exercises the claim. The proof column names the relevant gate (C31, C34, C35, C41, C42, the contract tests, the model tests, the hash-bound Buzz render receipt).

The follow-up commits the same day tightened the launch. aa1fdce fix: render the mission in progress for marketplace proof updated Overlay.qml (9 lines added) and tests/contract.test.js (9 lines added) so the marketplace preview could show the mission in progress, not the title screen. eae40a5 test: record clean OmaQuest shell render evidence sealed the Buzz-rig render: .render-proof.json now carries fingerprint eba0574023db7f33b56b979ea8d057ed0cbc20420c9d6878dd774c4a5c8d15e4, preview sha256 f172fc1f..., dimensions 1280 x 720, nonblack coverage 1, and .rig-proof.json records omarchyPluginValidate: 0 and qmllintErrors: 0 against source commit 97cdb6b. The 90 KB preview.png is the hash-bound capture that the marketplace preview reuses.

97cdb6b docs: align the model contract with Beacon Nine then renamed the contract reference from Panel.qml to Overlay.qml, tightened the model contract (“deterministic mission state, prompt progression, accuracy, route progress”) and removed the older line about external response fixtures. The teaser has no external data contract of its own. The harness-hash rolled to match.

The gate lane that ships with the plugin is sixteen scripts, C28 through C44: c28 voice no-dashes, c29 private names, c30 markdown strikethrough, c31 QML security, c34 exec injection, c35 runtime dependency, c36 QML overflow, c38 SSRF host allowlist, c40 panel design, c41 state file hygiene, c42 local resource budget, c43 marketplace presentation, c44 installable tree (the same C44 shipped yesterday in contributing-clanker, moved here too). Every gate ships in scripts/gates/ and is called from scripts/run-plugin-gates.sh.

omarchy-typing-adventure: the desktop game

The desktop game committed its first feat on 2026-09-10 as well (2d4c8fa feat: build OmaQuest playable preview, 71 files, 10843 insertions). The product is the same opening act from a different surface: a local Electron + TypeScript game that packages a Vite renderer for Linux AppImage, with a seven-day local trial and an Ed25519-signed offline license import. The gameplay surface is broader: six missions across Signal, Rover, and Orbit trail choices, twelve transmissions in the chapter, mission-boundary checkpoints that survive a reload, accuracy, clean-key streak, WPM, completed-transmission results, and an explicit pause and resume that never discards unfinished input.

The substantive code at first commit: src/main.ts 518 lines, src/game.ts 98 lines, src/style.css 285 lines, electron/main.cjs 111 lines, index.html, vite.config.ts, playwright.config.ts, eslint.config.js. The test lane is broad: Vitest unit tests, Stryker mutation tests, Playwright E2E for browser and packaged, a Playwright config for the generated AppImage under an isolated Linux profile, plus a deterministic screenshot capture (tools/capture.mjs) that produces the five documented product screenshots.

The product brief is the matching half of the pairing. PRODUCT.md explicitly notes that “a separate Omarchy plugin is the planned playable teaser: one original local mission and a fixed link to the parent-facing product page. It is not to be submitted until this game MVP is complete.” The teaser launched the same day the game MVP landed its first playable preview, by design. The desktop product ID is still omaquest during the rename; the player-facing name is “The Beacon Wakes”, and the same alias shows up in the teaser manifest.

The brand voice profile shipped at the same commit (brand/voice-profile.md): “an inventive mission guide that treats young players as capable builders and gives parents clear, credible reasons to trust the experience.” It gives concrete do-and-don’t pairs: “Tune the receiver. Type the signal before it fades.” versus “Hey, little genius. Let us do a super-fun typing exercise.” The voice and the contract claim ledger are the two pieces of documentation that travel to both repos.

omarchy-listening-post-entry: beads only

A third Omarchy entry repo touched git on the same day, but only by a beads init (e178496 bd init: initialize beads issue tracking): 6 files, 237 insertions, no source code. It is on the same estate as the other two but unrelated to the launch; the substantive change there is the issue tracker.

Why the pairing matters

The free teaser and the paid desktop game are the same opening mission in two different distributions. A player who finishes the teaser in the Omarchy bar sees one fixed link to the parent-facing product page; a parent who installs the desktop app gets the same mission as mission one of six. The teaser does not install the game, collect child data, process payment, or promise physical inventory, all four of which are explicit boundaries in both repos’ manifests. The pattern is the deliberate two-surface launch, the playable hook in the launcher plus the downloadable chapter next to it, with one fixed link connecting them.

The day’s receipts are the Buzz rig render on the teaser (previewSha256: f172fc1f...) and the Ed25519 license import plus AppImage packaging on the desktop. Neither repo shipped a debugging story; both shipped initial scaffolds of complementary surfaces.