From 34d116fcb70e89924f2d9ef2212da87a148820b3 Mon Sep 17 00:00:00 2001 From: "prompt.ac/@jeffrey" Date: Thu, 10 Sep 2026 08:16:53 -0400 Subject: [PATCH] prompt.ac is nine bytes shorter, and this address exists to be scanned MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Same runtime as aesthetic.computer behind a leaner shell — it loads the same boot.mjs and honours the same autorun — but nine bytes shorter, which is a whole version of the code once a phone camera's `https://` goes back on. The scan payload drops from 61 bytes to 52, landing inside a version-3 symbol instead of spilling into version 4: 29 modules where there were 33, so every module gets bigger at the same size on screen. --- src/live.mjs | 8 +++++--- test/live.test.mjs | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/live.mjs b/src/live.mjs index 7eef73ea81..016268d586 100644 --- a/src/live.mjs +++ b/src/live.mjs @@ -26,9 +26,11 @@ import { randomChannel, randomSlug } from "./names.mjs"; import { DEFAULT_RUNTIME, runtimeFor, runtimeForExtension } from "./runtimes.mjs"; export const SITE = "https://aesthetic.computer"; -// Scannable codes get smaller the shorter the text, and every phone camera -// adds the scheme back, so the QR carries a bare host. -export const SCAN_HOST = "aesthetic.computer"; +// Scannable codes get smaller the shorter the text, and this address exists to +// be scanned. prompt.ac is the same runtime as aesthetic.computer behind a +// leaner shell, and nine bytes shorter — which is a whole version of the code +// once the scheme a phone camera needs is added back on. +export const SCAN_HOST = "prompt.ac"; const DISKS = join("system", "public", "aesthetic.computer", "disks"); // Pieces belong in the disks folder when the workspace is the Aesthetic diff --git a/test/live.test.mjs b/test/live.test.mjs index 2a3edc9187..d007125b45 100644 --- a/test/live.test.mjs +++ b/test/live.test.mjs @@ -41,7 +41,7 @@ test("names are pronounceable and channels stay short enough to scan", () => { // to the command name, so `channel` runs with no argument and joins nothing. test("the scan URL separates the channel from the command with a space", () => { const live = new LivePiece({ cwd: tmpdir(), channel: "Ab0-_9Zz" }); - assert.equal(live.scanUrl, "aesthetic.computer/prompt~channel%20Ab0-_9Zz~!autorun"); + assert.equal(live.scanUrl, "prompt.ac/prompt~channel%20Ab0-_9Zz~!autorun"); const [, command] = live.scanUrl.match(/\/prompt~(.*)~!autorun$/); assert.deepEqual(decodeURIComponent(command).split(" "), ["channel", "Ab0-_9Zz"]); }); @@ -67,7 +67,7 @@ function decodeBlock(block) { test("the rendered code matches the encoder module for module", async () => { const { qrcode, ErrorCorrectLevel } = await import("../src/vendor/qr.mjs"); - const url = "aesthetic.computer/prompt~channel%20Ab0-_9Zz~!autorun"; + const url = "prompt.ac/prompt~channel%20Ab0-_9Zz~!autorun"; const quiet = 2; const modules = qrcode(url, { errorCorrectLevel: ErrorCorrectLevel.L }).modules; const grid = decodeBlock(qrBlock(url, { quiet })); @@ -154,7 +154,7 @@ test("a session mints a blank piece, pushes it, and cleans up after itself", asy }); assert.equal(live.file, join(root, "movika.mjs")); - assert.equal(live.scanUrl, "aesthetic.computer/prompt~channel%20Ab0-_9Zz~!autorun"); + assert.equal(live.scanUrl, "prompt.ac/prompt~channel%20Ab0-_9Zz~!autorun"); assert.equal(live.publishedUrl("jeffrey"), "https://aesthetic.computer/@jeffrey/movika"); assert.equal(live.publishedUrl(""), ""); -- 2.51.2