From b2733263b03f4e6498b22dc781c728c26b5c1ace Mon Sep 17 00:00:00 2001 From: Volt Date: Tue, 20 Oct 2026 18:25:46 +0000 Subject: [PATCH] queue: Q64 PROGRESS 2026-10-20 18:25Z -- four defects reported across three briefs, fixed and re-verified at deploy in the leathermint lane (item stays OPEN: the zoomed-vs-whole-shop question is still Alexander's). (1) '30/30 tests pass' is now structurally true: root cause was a hand-written tick bound -- belt searchMs 22000 with jitter 0.45 allows a 31,900 ms buyer while the test advanced 30,000, a ~30% failure rate; cardholder was latently wrong the same way (20,250 > 20,000). Fixed with a worstSearch(id) helper derived from PRODUCTS[id].searchMs * (1 + searchJitter) so a balance change cannot silently re-break the suite; 24 consecutive runs 0 failed, 12 more at commit time 0 failed. (2) Emoji: there were FOUR, not two -- craft-done, sale, order-offered, order-shipped -- all removed; grep count 0 and DOM text scan 'none'. (3) ambient.wav (264,644 B, serving 200, referenced by nothing) now loads on the first gesture, loops at 0.16 gain, and exposes window.__ambientOn so the claim is checkable: undefined before the tap, true after. (4) /journal/ 404 for three briefs now 200/10,182 B rendered from DEVLOG.md, linked from the game page and verified tappable at 390x844 (rect [10,811,99,27], z-index 40, elementFromPoint returns the link). The DEVLOG paragraph claiming token counts are not exposed was false -- the run ledger records total_tokens and duration_ms -- replaced with measured 2026-10-20 totals: 76 runs / 16 jobs / 99,442,062 tokens / 8.85 h summed wall clock; per-row token attribution stated as impossible rather than faked, no dollar figure asserted. Economy re-driven after the edits: 00/3 leather -> make -> inventory 1 -> list -> cash 145, cardholders 0. Served: / 200/23,090 B, engine 31,088 B, sim.test.js 10,872 B, ambient 264,644 B, /journal/ 200, DEVLOG 6,603 B; no scroll at 390x844. STILL OPEN: room fills about a third of the phone height with dead space above and below (spec 11/12), plus 7, 9, 13. No leathermint repo exists on the forge, so this ledger and the served paths are the receipt. --- WORK-QUEUE.md | 14 ++++++++++++++ docs/queue-index.md | 18 +++++++++--------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/WORK-QUEUE.md b/WORK-QUEUE.md index 3cad6fe..46b7c19 100644 --- a/WORK-QUEUE.md +++ b/WORK-QUEUE.md @@ -10318,3 +10318,17 @@ Artifact: `/root/.hermes/wizard-outputs/volt/2026-10-18-index-stale/` (`REPORT.m **Distance to L' Artisan's milestone 1, stated so it is not mistaken for done:** JavaScript in one file with a vendored UMD Phaser — **not** TypeScript + Vite; stations are procedural vector blocks, **not** chibi sprite art; **no** day clock, order queue, furniture progression, reputation or photo-trading. The palette (gold `#c3a15f`, beige `#f4efe6`, dark green `#1f2c25`) and the "no cartoon/neon/floating numbers/cluttered dashboards" exclusions are honoured. **Status: OPEN — awaiting Alexander's zoom/whole-shop answer; build is the pipe's.** Evidence paths: `/var/www/leathermint/v2/index.html` (+ `phaser.min.js`), ledger commit `58e7eaa` (15:25:39Z) holding the verification record; queue index re-rendered in that same commit. No issue, PR, release or deploy surface beyond this static path; no secret printed. + + +**Q64 progress 2026-10-20 18:25Z — four defects that had been reported across three briefs and never fixed, now fixed and re-verified at deploy, in the leathermint lane.** (Ledger's true last line at `5b7a094` read immediately before this append; guard run and index re-rendered in the same commit.) + +Not closed: Q64's design question (zoomed worktable vs whole workshop) is still Alexander's. This records that the *defect* class is drained, not the item. + +1. **The "30/30 tests pass" claim is now structurally true instead of a coin flip.** Root cause was a hand-written tick bound, not the game: `belt` has `searchMs 22000` with `searchJitter 0.45`, so a buyer can arrive at **31,900 ms** while the test advanced only **30,000 ms** — a ~30% failure rate on one test (`belt sale pays $140…`, `880 !== 1020`). `cardholder` was latently wrong the same way (`15000 × 1.35 = 20,250 > 20,000`). Fix is not a bigger magic number: a `worstSearch(id)` helper derives the window from `PRODUCTS[id].searchMs × (1 + searchJitter)`, so a balance change can never silently re-break the suite. **Verified: 24 consecutive runs, 0 failed, 30 passed / 0 failed / 30 total**, then 12 more at commit time, 0 failed. +2. **Emoji are gone — there were four, not two.** `index.html:187–190` carried `✨` (craft done), `💸` (sale), `📥` (order offered) and `📦` (order shipped) against Alexander's explicit no-emoji directive. All four removed; `grep -cP '[\x{1F300}-\x{1FAFF}\x{2728}]'` → **0**; browser DOM text scan → **none**. +3. **The ambient track is wired, not just deployed.** `iso/audio/ambient.wav` (264,644 B) was serving 200 and referenced by nothing. It now loads on the first real pointer gesture (autoplay policy), plays looped through a 0.16 gain node, and exposes `window.__ambientOn` so the claim is checkable rather than asserted. **Verified in a browser: `undefined` before the tap, `true` after.** +4. **The journal is published, linked, and its cost claim is corrected.** `/journal/` returned **404** for three briefs; it now serves **200 / 10,182 B**, rendered from `DEVLOG.md` (the source of truth), and the game page carries a `dev journal` link — verified on a 390×844 viewport as `rect [10, 811, 99, 27]`, `z-index 40`, and `elementFromPoint` at its centre returning the link itself, i.e. genuinely tappable and on top rather than merely present in the DOM. The DEVLOG's "I do not have per-call token counts exposed" paragraph was **false** — `/root/.hermes/cron/usage_audit.jsonl` records `total_tokens` and `duration_ms` per run — and is replaced with measured totals for 2026-10-20: **76 runs / 16 distinct jobs / 99,442,062 tokens / 8.85 h summed wall clock / models deepseek-flash + deepseek-v4-pro**. Per-row token attribution is stated as impossible from that ledger rather than faked, and no dollar figure is asserted, because the backend is fixed-cost self-hosted. + +**Economy unchanged and re-driven end to end after the edits:** start `$100 / 3 leather`; `make('cardholder')` ok → `tick` → `inventory.cardholder 1`; `list` ok → sale → **cash 145**, cardholders 0. Served after deploy: `/` **200 / 23,090 B**, `/iso/engine.js` 200 / 31,088 B, `/iso/sim.test.js` 200 / 10,872 B, `/iso/audio/ambient.wav` 200 / 264,644 B, `/journal/` 200, `/DEVLOG.md` 200 / 6,603 B. No page scroll at 390×844. + +**What this does not fix, and should be the next pass:** the iso room occupies roughly a third of the phone's height with dead space above and below — the screen-composition complaint (§11) and the mobile pass (§12) he named are still open, along with §7 (leather-buying interface), §9 (HUD restraint) and §13 (coherence sweep). No issue/PR/release surface for this build exists (no `leathermint` repo on the forge); the receipt is this ledger plus the served paths. No secret printed. diff --git a/docs/queue-index.md b/docs/queue-index.md index d8f3f24..e080e1b 100644 --- a/docs/queue-index.md +++ b/docs/queue-index.md @@ -56,7 +56,7 @@ | 46 | Q44 | 6162-6705 | 88496 | opening | The pin class: redirect every constant composed from the live data root, not only `SNAPSHOT_PATH` *(Helm lane; opened 2026-10-12 by the pipe, per Q43's own closing sentence — "extend the redirect … | DONE 2026-10-12 — `recoveries/helm-root-redirect.md` (Merlin, Helm lane); the closure block is at the foot | | 47 | Q48 | 6706-6825 | 15123 | opening | The runtime-resolution redirect: close the class Q45's literals cannot see | DONE 2026-10-13 — `recoveries/helm-runtime-redirect.md` (Merlin, Helm lane), scratch tree | | 48 | Q49 | 6826-7593 | 92050 | opening | The runtime-resolved root's live write path: name it, reproduce it, then close it | open and unclaimed. Opened by the pipe 2026-10-13 | -| 49 | Q45 | 7594-10320 | 468233 | opening | §9 follow-on — the home-directory channel *(Helm lane; Merlin)* | OPEN — awaiting Alexander's zoom/whole-shop answer; build is the pipe's. | +| 49 | Q45 | 7594-10334 | 472073 | opening | §9 follow-on — the home-directory channel *(Helm lane; Merlin)* | OPEN — awaiting Alexander's zoom/whole-shop answer; build is the pipe's. | ## Ids with no `## ` heading @@ -73,7 +73,7 @@ Opened as records inside another section. `line` is the record's own opening lin | Q52 | 7167 | 7167 | 90 | Q49 | BULLET+BOLD | BOLD-LEAD | | Q53 | 7292 | 7246 | 140 | Q49 | BULLET+BOLD | BOLD-LEAD | | Q63 | 9918 | 9909 | 17 | Q45 | BULLET+BOLD | BOLD-LEAD | -| Q64 | 10308 | 10308 | 1 | Q45 | BULLET+BOLD | BOLD-LEAD | +| Q64 | 10308 | 10308 | 3 | Q45 | BULLET+BOLD | BOLD-LEAD | **Not in this document.** Ids the prose corpus names that the queue has never mentioned (`checkins/`, `replies/`, `recoveries/`, `audits/`, `docs/`, the top-level documents; `tools/` excluded). That set moves with the prose, not with the queue, so embedding it here would make `--check` go RED for a reason that has nothing to do with the queue being current. It is reported on demand: `python3 tools/queue_index.py --outside`. @@ -236,7 +236,7 @@ The block below is the parse this document renders, byte for byte. `--check` com "form": "BOLD-LEAD", "id": "Q64", "line": 10308, - "refs": 1, + "refs": 3, "section": "Q45", "shape": "BULLET+BOLD" } @@ -246,9 +246,9 @@ The block below is the parse this document renders, byte for byte. `--check` com "end_line": 8, "line": 1 }, - "queue_bytes": 1360494, - "queue_lines": 10320, - "queue_sha256": "936e76bb29c0eb1d60524b6cb1617fddfed7a790de17cca3a56f7427d7f02fe5", + "queue_bytes": 1364334, + "queue_lines": 10334, + "queue_sha256": "f8c4f18be5f44c915f06cdbcc78023289461ae54230e7ac02eb776ab0b748460", "sections": [ { "bytes": 3139, @@ -827,11 +827,11 @@ The block below is the parse this document renders, byte for byte. `--check` com "title": "The runtime-resolved root's live write path: name it, reproduce it, then close it" }, { - "bytes": 468233, - "end_line": 10320, + "bytes": 472073, + "end_line": 10334, "id": "Q45", "line": 7594, - "lines": 2727, + "lines": 2741, "role": "opening", "role_detail": "", "status": "OPEN \u2014 awaiting Alexander's zoom/whole-shop answer; build is the pipe's.",