Skip to content

dupe ledger: re-bless after #11359 removed copies -- master Duplicate Body Ratchet green (Closes #11104) - #11401

Merged
gHashTag merged 80 commits into
masterfrom
claude/dupe-rebless-11359
Oct 20, 2026
Merged

gHashTag merged 80 commits into
masterfrom
claude/dupe-rebless-11359

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

See #11104. After #11359 replaced the T27 OS copies of clamp01 and scale with uses of petal_glass, master's Duplicate Body Ratchet went red the other way ("the corpus improved and the ledger did not move"). This re-blesses tools/duplicate_bodies_baseline.txt on master: 623 groups, 1758 bodies; the ceiling only goes down.

Generated with Claude Code (https://claude.com/claude-code)

claude and others added 30 commits October 19, 2026 14:25
…ols carry 22833 hand lines, 2775 of them pure logic (Closes #10938)

specs/widgets/catalog.t27 pins the census measured at trinity origin/main.
specs/t27f/widget_factory.t27 states six stages, the t27c-seal build key and the port gate.
specs/t27f/frontend.t27 registers SF_WIDGET_FACTORY. Epic #10937.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…wers no fn bodies, so the logic stage waits (Closes #10938)

specs/widgets/gatle_rule.t27 replaces rule.js as the single source. widget_factory.t27
records that gen-js/gen-ts emit declarations only. Epic #10937.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…s and embed sizes run native under t27b, 3 of 3 (Closes #10938)

specs/widgets/gallery_rules.t27 holds the decisions of scripts/widgets-from-spec.mjs
(trinity); the gallery data stays in trinity gallery.t27. Epic #10937.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…lOf, exit codes and hud views over bytes; 8 of 8 under t27c and t27b, byte-identical to metaOf on all 337 corpus files (Closes #10938)

specs/widgets/page_reader.t27 replaces the reading half of widgets-from-spec.mjs. Epic #10937.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…en-c and zig, 866178 comparisons against rule.js, 0 mismatches (Closes #10938)

gen-js lowers no fn bodies (#10943), but the path the Queen's app.wasm takes works: 490 bytes.
Epic #10937.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…nded buffer, escaping, en-US grouped numbers; 4 of 4 under t27c and t27b (Closes #10938)

Stage "page" of the widget factory: a view writes HTML into a fixed buffer and the host sets innerHTML.
Epic #10937.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…les and page in one .t27, a 9269-byte wasm, 3015 DOM comparisons against tool.js, 0 differences (Closes #10938)

specs/widgets/jtag_verdict.t27 holds the trinity spec's words and a native page (w_init, w_input,
w_click, w_hash, w_render, w_hash_out); html_out.t27 becomes a stateless writer (a pub var does not
cross a use). catalog.t27 records gatle at PORT_LOGIC and jtag-verdict at PORT_DRAW. Epic #10937.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…idget data files match JSON.parse except 6 numbers of 16-17 digits; html_out gains named fill (Closes #10938)

json_scan.t27 gives spans of values (obj_get, arr_at, str_byte with UTF-8 decoding, num_f64) so a
native view needs no tree. html_out.t27 gets fill_named and dec_to. Epic #10937.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…m, 59 DOM comparisons including 13 data variants, 0 differences (Closes #10938)

specs/widgets/race_the_bee.t27: the trinity spec's words plus the page (tabs, snapshot, lanes, head to
head, open issues) over json_scan spans; catalog.t27 records it at PORT_DRAW. Epic #10937.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…isons vs treemap.js, 0 mismatches (Closes #10938)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…sons vs lut.js, 0 mismatches (Closes #10938)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… vs ltpparse.js, 0 mismatches (Closes #10938)

specs/widgets/lut_depth_logic.t27 ports every function of
apps/website/public/widgets/lut-depth/ltpparse.js (parseLtp, classOf, bare;
listsOf is only a renaming of the spec constants and is left to the glue).
Built to wasm (4430 bytes with a thin C-ABI wrapper) and compared field by
field with the original JavaScript on the shipped sample, its prefixes and
variants, mutations and grammar fuzz: 0 mismatches; a negative control
(class_of min -> max) gives 2838.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… vs statparse.js, 0 mismatches (Closes #10938)

specs/widgets/stat_card_logic.t27 ports parseStat (with a strict JSON.parse
reader and the JS object rules it leaned on: duplicate keys, key order,
Number() of counts, the module expansion of flatten) and badgeSvg. listsOf is
a renaming of spec constants and is left to the glue. Cases the port does not
carry (string/array counts, numbers not exactly rounded here, lone surrogates,
integer-like or Object.prototype type names) answer status 9, listed in the
header. Built to wasm (13741 bytes with a thin C-ABI wrapper) and compared
field by field with the original JavaScript: 0 mismatches; a negative control
(group priority reversed) gives 2469.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…sons vs skyline.js, 0 mismatches (Closes #10938)

specs/widgets/fasm_skyline_logic.t27 ports every export of
apps/website/public/widgets/fasm-skyline/skyline.js: parseFasm, decodeGrid
(split into grid_* calls the glue makes from grid.json, plus grid_lookup and
grid_at), familyOf and summarize. Built to wasm (8390 bytes with a thin C-ABI
wrapper) and compared with the original JavaScript on the real grid.json (every
cell, every sample tile name, 60000 random names), FASM texts built from the
two shipped samples, line-grammar fuzz, 6000 random small grids and random
family lists: 0 mismatches; a negative control (zero test of a constant
reversed) gives 6165.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…epth, stat-card, fasm-skyline, lut-treemap, lut-explain (Closes #10960)
…a019d686a52279b4d

# Conflicts:
#	specs/t27f/widget_factory.t27
#	specs/widgets/catalog.t27
…catalog-3e2d7f

# Conflicts:
#	specs/t27f/widget_factory.t27
#	specs/widgets/catalog.t27
…mparisons, 0 differences (Closes #10938)

String(x), toFixed, toLocaleString('en-US'), Math.round/floor and a correctly rounded Number(text) as
one stateless library for the native widget views (json_scan.num_f64 is off in the last place for the
16- and 17-digit numbers of t27-cell and t27-vs-nvfp4). 5 tests, 7398-byte wasm.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… vs bitparse.js, 0 mismatches (Closes #10938)

specs/widgets/bit_diff_logic.t27 ports every export of
apps/website/public/widgets/bit-diff/bitparse.js: findSync, parseBitstream,
packetLine, packetSequence, lineDiff, frameSlots, mapFrames, frameDelta,
compareFrames, bytesIdentical, stripOf, summarize (as getters) and
compareBitstreams (compare_all), plus decodeFar/encodeFar, the register, command
and block name tables and the constants. Built to wasm (14133 bytes with a thin
C-ABI wrapper) and compared field by field with the original JavaScript on 52
real .bit/.bin files from this repository (parse, packet lines, pairs, derived
pairs), mutations of their headers and bodies, 5000 synthetic streams and pairs
against the four shipped geometries, and the small pure functions: 0 mismatches;
a negative control (ECC mask changed) gives 1098 on the quick run.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ns vs vcdstats.js, 0 mismatches (Closes #10938)

specs/widgets/vcd_wrapped_logic.t27 ports every export of
apps/website/public/widgets/vcd-wrapped/vcdstats.js: the streaming reader
(createVcdReader as vcd_begin/vcd_push/vcd_end with the VcdError codes and
details), summarize, vcdSummary and spanUnits (with an exact toPrecision(4)
done in small big integers). Built to wasm (14135 bytes with a thin C-ABI
wrapper) and compared field by field with the original JavaScript on the three
shipped sample VCDs (whole, in random chunks, prefixes, mutated), grammar fuzz
of headers and bodies in random chunking, and 60000+ spanUnits cases: 0
mismatches; a negative control (name order reversed) gives 1730. Cases the port
does not carry answer status 90 and are listed in the header.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…rse's verdict on a JSON span; js_num grows ceil, min, max, log2 (Closes #10938)

js_val.t27 reads a value in the bytes the way JavaScript reads the parsed value (null prints "null", a missing
key "undefined", 1.50 prints "1.5", 1e23 prints "1e+23") and fills {name} / {0} templates from a value pool.
js_num.t27 gains Math.ceil, two-argument Math.max/min and Math.log2 (fdlibm port, bit-identical to V8), all
checked against node over 1925210 comparisons, 0 differences. 9 tests in the two files.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…parisons, 0 differences (Closes #10938)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…vs xdc.js, 0 mismatches (Closes #10938)

specs/widgets/pin_map_logic.t27 ports every export of xdc.js: parseXdc, lintXdc,
summarize, covers, pinType, isDualConfig. Differential: wasm built from t27c gen
(Zig) against the verbatim xdc.js, ASCII domain.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ons vs smellparse.js, 0 mismatches (Closes #10938)

specs/widgets/synth_smells_logic.t27 ports every export of smellparse.js:
CELL_GROUPS/groupOf, parseYosysLog, smellCounts, trimLog. Differential: wasm
built from t27c gen (Zig) against the verbatim smellparse.js, full result.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ns vs fsmparse.js, 0 mismatches (Closes #10938)

specs/widgets/fsm_sketch_logic.t27 ports every export of fsmparse.js: sniff,
parseAny, parseKiss2, parseLog, countsOf, codeValue, conditionOf, walkOrder,
layoutFsm. Math.sin, Math.cos and Math.atan2 of layoutFsm stay with the host
(passed in as a table / computed from the returned points): V8's own results
differ from fdlibm and musl in the last bit. Differential: wasm built from
t27c gen (Zig) against the verbatim fsmparse.js.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ns vs autopsy.js, 0 mismatches (Closes #10938)

specs/widgets/bit_autopsy_logic.t27 ports every export of autopsy.js: the
constants and name tables, hex8, parseHeader, findSync, dieOf, lookupIdcode,
frameSlots, walkPackets and autopsy. Differential: wasm built from t27c gen
(Zig) against the verbatim autopsy.js on the five real .bit files of
fpga/openxc7-synth, their mutations and truncations, and 4000 generated
streams.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… synth-smells, fsm-sketch, bit-autopsy join (Closes #10960)
…o/0b with one rounding, -0) -- 170040 comparisons, 0 differences (Closes #10938)

Number(text) over 90027 texts and JSON.parse's verdict over 80013 texts against node 23: 0 differences.
The hex path folds dropped digits into a sticky bit so a 20-digit 0x value rounds once, as JavaScript does.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
claude and others added 27 commits October 19, 2026 21:55
…parisons, 0 differences (Closes #10938)

Page, yosys-log reader (folded from synth_smells_logic.t27), file/drop/paste UI and the
PNG card as a canvas_out draw list plus one fit-to-width record. Measured against the
original tool.js in two happy-dom windows: DOM, canvas call sequence, downloads.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…oses #10938)

tm_width / tm_fit_left / tm_wrap: the card asks, the host measures on a scratch canvas,
the card is written again; 4 tests, 20 asserts. Used by vcd-wrapped, bit-diff, bit-autopsy.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… test with a sentence (Closes #10938)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…arisons, 0 differences (Closes #10938)

Page, VCD reader (folded from vcd_wrapped_logic.t27), file/drop UI and the PNG card as a
canvas_out draw list whose text widths come from text_meas.t27. Measured against the
original tool.js in two happy-dom windows: DOM, canvas call sequence, downloads.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…nvas comparisons, 0 differences (Closes #10938)

The whole page of the stat-card tool in .t27: the 1200x630 card as a canvas draw list (card text cut and
wrapped by widths the host measures: w_text_need / w_text_give), the facts table, the README badge SVG,
paste / pick / drop, PNG and SVG download, copy with its timer. stat_card_logic.t27 is folded into the module.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…arisons, 0 differences (Closes #10938)

The whole page of the lut-treemap tool in .t27: the squarified treemap as absolutely placed tiles (their labels
left off where the host-measured text does not fit), the per-module table, the detail line, both drop boxes
(the stat and the flattened stat), the metric buttons, the map size from the host. lut_treemap_logic.t27 is
folded into the module; the reader keeps one parse, so the stat that is shown is read again from its text
whenever another text was read.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… canvas comparisons, 0 differences (Closes #10938)

The whole page of the fasm-skyline tool in .t27: the isometric drawing as a binary draw list (bit-exact
doubles; text lists cost seconds at 150000 numbers), pan / pinch / wheel / key control, hover and tap
info, rotate and fit, the PNG with its card text wrapped to host-measured widths, a binary STL with
float32 rounding, FASM file counting, both data files decoded in the module. fasm_skyline_logic.t27 is
folded in unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…hree dots (Closes #10938)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…that show a digest (Closes #10938)

3 tests (empty, abc, 56 and 1000 bytes); checked in the pages against crypto.subtle on 9.7 MB streams.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…sons, 0 differences (Closes #10938)

Page, bitstream reader (folded from bit_diff_logic.t27), two drop zones, SHA-256, the comparison
written as the same JSON the demo uses, and the frame map as a canvas_out draw list. Measured
against the original tool.js in two happy-dom windows: DOM, last canvas paint, downloads; 46
demo.json variants, XC7A200T-sized streams (9.7 MB).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…arisons, 0 differences (Closes #10938)

Page, bitstream autopsy reader (folded from bit_autopsy_logic.t27), file/drop UI, SHA-256, the
result written as the JSON the samples use, the on-page frame map and the PNG card as canvas_out
draw lists with text_meas widths. Measured against the original tool.js: DOM, canvas (card exactly,
map last paint), downloads; 40 samples.json/data variants, 100T and 200T sized streams.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…catalog-3e2d7f

# Conflicts:
#	specs/widgets/build_receipt.t27
#	specs/widgets/catalog.t27
#	specs/widgets/t27_cell.t27
#	specs/widgets/t27_vs_nvfp4.t27
#	specs/widgets/test_touch.t27
#	specs/widgets/uart_bucket.t27
#	tools/duplicate_bodies_baseline.txt
…ns, 0 differences (Closes #10938)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…comparisons, 0 differences (Closes #10938)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…arisons, 0 differences (Closes #10938)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…omparisons, 0 differences (Closes #10938)

specs/widgets/placement_map.t27 = the trinity spec placement-map.t27 verbatim (module, words, K_ numbers) with a
use block and the native page appended. Canvas drawing through the binary draw list, pointer down/move/up/leave/
cancel with pointerId and pointerType, wheel with ctrlKey (Math.exp through the host libm service), keydown on the
canvas, ResizeObserver, window.innerHeight, a dropped or picked nextpnr JSON read by the page (cells sorted in
UTF-16 order, modules in Object.values order, repeated keys last-wins), Math.hypot as V8 computes it.

Edits to the verbatim spec: its eight str == str asserts use same_text (t27c does not compile str == str) and
K_GRID_W * K_GRID_H is cast to u32 (the u16 product overflows at compile time).

Measured against the original tool.js in two happy-dom windows (DOM and the recorded 2D-context call sequence):
10869 comparisons, 0 differences; 27 placement.json variants; 80 fuzzed runs; hypot2 against node over 4000529
pairs, 0 differences; 21 negative controls detected. Files are read up to 64 MiB (tool.js 512 MB), at most 300000
cells, JSON nested at most 60 deep; modules or cells given as arrays and lone surrogates are not modelled.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…21 bits), host-side plumbing of browser pages, the same class as why_card and deps_card (Closes #11104)
…arisons, 0 differences (Closes #10938)

specs/widgets/t27c_stages.t27 = the trinity spec verbatim + the page in .t27. The page asks the
compiler (public/t27/t27_compiler.wasm) through a request/answer pair, w_compile_need and
w_compile_give, the way the libm and text services are asked; the host runs t27_analyze.
14 tests (t27b: 14 passed); proven against tool.js in two happy-dom windows with the real compiler.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…s, 0 differences (Closes #10938)

specs/widgets/gatle.t27 = the trinity spec verbatim + the page in .t27 (tool.js and the
URL-hash half of rule.js; the rest of rule.js is gatle_rule.t27). The Verilog is compiled through
the same w_compile_need / w_compile_give service as t27c-stages; the digests are sha256_hex.t27.
19 tests (t27b: 19 passed); proven against tool.js in two happy-dom windows: 52 days, practice,
hash round trips, the pool of 37 puzzles, 15 pool variants, 11 failure cases.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…catalog-3e2d7f

# Conflicts:
#	specs/widgets/catalog.t27
#	tools/duplicate_bodies_baseline.txt
@gHashTag
gHashTag enabled auto-merge (squash) October 20, 2026 13:56
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-20 13:56:16 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 47
PRs with All Checks Green 3
READY 2
FAILING 47
PENDING 0
NO CHECKS YET 0

These columns do not partition: 2 + 47 + 0 + 0 = 49, and there are 50 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=5aec047d42ec != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@gHashTag
gHashTag merged commit 5981f19 into master Oct 20, 2026
31 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants