Skip to content

feat: strengthen polar, and test on wasip1/wasm - #11

Merged
timzifer merged 2 commits into
mainfrom
feat/stronger-polar-and-wasm
Sep 10, 2026
Merged

timzifer merged 2 commits into
mainfrom
feat/stronger-polar-and-wasm

Conversation

@timzifer

Copy link
Copy Markdown
Owner

polar was the weakest of the six

An evenly spaced ring of evenly filled wedges reduces, at the resolution a
perceptual hash works at, to "a grey annulus" whatever the cells say. Its
marks scored far closer together than they looked, because the information that
distinguished them lived entirely in the high frequencies a coarse comparison
averages away.

So the radial profile now carries identity too:

  • ring widths are drawn, not uniform — the variant stream gives a release
    family its radial rhythm, the patch stream re-proportions it;
  • each ring has its own density, so a figure has a brightness profile from
    the middle outwards rather than one uniform grey;
  • a centre device — disc, ring, rosette or star — fills the hole, which is
    the most visible position on a radial mark and was previously wasted;
  • ring and sector counts span a wider range.
before after
weakest relation 14 16
patch minimum 14 16
minor minimum 16 16
major minimum 18 22
global floor 6 8
mean over all pairs 43.1 47.7
intra- vs inter-major mean 41.9 / 43.3 44.4 / 48.3

The family signal is stronger as well: the gap between intra-major and
inter-major means widens from 1.4 bits to 3.9.

Four ideas that were measured and rejected

Recorded on the renderer, because they are all the same reason and the next
person will have the same ideas. On a radial figure, anything large enough for
a coarse comparison to see is large enough to dominate it:

Idea What the measurement said
Heavy outer rim, archetype stream Every version of a major shares one silhouette. Cohesion up, patch minimum 21 → 12.
Same rim, patch stream Drowns out the symmetry that separates majors: major minimum 22 → 14.
Overall size on the variant stream Separates minors (12 → 15) and pushes patches together by as much (21 → 12).
Independent per-ring rotation Breaks the fold symmetry a major is recognised by: major minimum 22 → 14.

What remains is the configuration whose weakest relation is strongest — which
is what matters when the guarantee is a floor rather than an average.

A wasip1/wasm leg in CI

The library is pure Go with no syscalls beyond reading a corpus file, so it
ought to run anywhere Go runs. WebAssembly is the cheapest way to prove that
rather than assume it, and it is a genuinely different target: no FMA
contraction, 32-bit pointers, a sandboxed filesystem. If the marks come out the
same there, the suite's float tolerances are doing their job.

wasmtime is pinned and fetched from its release tarball rather than pulled in
as a third-party action. The race detector does not support wasm, so that leg
runs without it; the native legs cover it.

🤖 Generated with Claude Code

https://claude.ai/code/session_01KwWthYNYf1egKNFrFS83Dm

timzifer and others added 2 commits September 10, 2026 09:29
Two things.

polar was the weakest of the six renderers: an evenly spaced ring of evenly
filled wedges reduces, at the resolution a perceptual hash works at, to "a grey
annulus" whatever the cells say, so its marks scored far closer together than
they looked. Information a coarse comparison can see has to live in the low
frequencies, which for a radial figure means the profile from the middle
outwards. So the profile now carries identity too: ring widths are drawn rather
than uniform and re-proportioned by the patch, each ring has its own density,
and a centre device — disc, ring, rosette or star — fills the hole, which is
the most visible position on the mark and was previously wasted. The ring and
sector counts span a wider range.

Weakest relation rises from 14 to 16 bits, major jumps from 18 to 22, the
global floor from 6 to 8, and the mean over all pairs from 43.1 to 47.7. The
gap between intra-major and inter-major means widens from 1.4 to 3.9, so the
family signal is stronger as well.

Four further ideas were measured and rejected, and the reasons are recorded on
the renderer, because they are all the same reason and the next person will
have the same ideas. On a radial figure anything large enough for a coarse
comparison to see is large enough to dominate it: a heavy outer rim on the
archetype stream made every version of a major share one silhouette, and on the
patch stream it drowned out the symmetry that distinguishes majors; putting
overall size on the variant stream separated minors and pushed patches together
by as much; independent per-ring rotation broke the fold symmetry a major is
recognised by. What remains is the configuration whose weakest relation is
strongest, which is what matters when the guarantee is a floor.

The second thing is a wasip1/wasm leg in CI. The library is pure Go with no
syscalls beyond reading a corpus file, so it ought to run anywhere Go runs, and
WebAssembly is the cheapest way to prove that rather than assume it. It is also
a genuinely different target — no FMA contraction, 32-bit pointers, a sandboxed
filesystem — so it is a real test of whether the suite's float tolerances hold.
The race detector does not support wasm, so that leg runs without it; the
native legs cover it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KwWthYNYf1egKNFrFS83Dm
@timzifer
timzifer merged commit 12d2801 into main Sep 10, 2026
9 checks passed
@timzifer
timzifer deleted the feat/stronger-polar-and-wasm branch September 10, 2026 07:39
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.

1 participant