Commit graph

7 commits

Author SHA1 Message Date
Doxa Maps
550a69b8b9 check-circular-layout: use globalThis.gc, not the free identifier global
check:no-free-identifiers (gates:post) flagged `global` at the budget
arm's optional gc() call. globalThis is the portable form. Script only.
2026-10-02 19:30:09 +00:00
Doxa Maps
d6be5806a6 Merge remote-tracking branch 'origin/development' into cities-plugin/circular-layout
# Conflicts:
#	package.json
2026-10-02 15:57:21 +00:00
Doxa Maps
7f272a4cd4 circularLayout gate: close two tautological checks (5B P2/P3)
P2: test fourSides numbering against GEOMETRY per side (L cy↓, R y↑,
T x↑, B x↓) with a de-overlap drift tolerance, not label-emission order
(which numbering walks, so it could never fail). P3: assert every
pairedRows leader carries polys.length===2. Both mutation-tested: a
reversed side sort and a dropped polys each make the gate FAIL.
2026-10-02 12:35:00 +00:00
Doxa Maps
00db24ed0c circularLayout: fix 5B findings
Clear check:no-fleet-names (neutral wording for the classic4 reference,
the vendored-fork note, the browser-budget comment, the gate's format
comment and the package.json description). Fix pairedRows leaders[].polys
(was null on every leader — store fork.polys; drop dead polysForCount).
Tie-break ids by code unit (cmpId), not localeCompare, for byte-identity
across runtimes/locales. Harden the gate: assert the fourSides side
sequence L<T<R<B and monotone numbering within each side (by label
emission order), and recount pins-outside-state and pairedRows crossings
from the OUTPUT, not from stats.
2026-10-02 12:27:56 +00:00
Doxa Maps
6e593f2ae9 packet: circularLayout — poster circular logic as one pure module
New library/packet/circularLayout.js: ring order, leader routing,
numbered four-sides and paired-row forks as a single pure, Worker-safe
module (geometry in, geometry out; no SVG, no DOM, deterministic). Modes
sideLanes (today's L/R), fourSides (numbered, no leaders) and pairedRows
(two leaders per row). measure/slotOf and placePinsInState/forkRoute are
injected; forkRoute falls back to a vendored copy until fork-leaders is
on this tree. Adds check:circular-layout (frozen 855-pin 60x96 fixture:
ring order, 0 dupes, 0 pins-outside-state, 0 crossings on paired rows,
determinism, a poison, and a node time/heap budget).
2026-10-02 12:16:39 +00:00
Doxa Maps
d12d926870 packet: fork-leaders — octilinear forked leaders for paired rows
New library/packet/fork-leaders.js: a pure, deterministic router for one
paired-row leader, forking a stem at a 45° chamfer into two short legs
(one per pin), in row and trunk modes. All segments H/V/45°. Returns
polylines for drawing and a deduped segment list (stem once) so a fork
counts as one polyline for crossings, plus octilinear and through-pin
reports. Imitates the poster-render octilinear lane routing (read, not
called). Adds check:fork-leaders (both modes, 0 crossings on a 220-row
monotone set, through-pin + poison arms).
2026-10-02 09:07:49 +00:00
Doxa Maps
4e8e3158f5 packet: pins-in-state — de-overlap pins while keeping each in its own state
New library/packet/pins-in-state.js: a deterministic pixel-space pin
de-overlap for the whole-India poster that also keeps every pin inside
its own ADM1 state (multipolygon + holes), pulling a pushed-out pin to
the nearest point just inside. Reports displacement, remaining overlaps,
pins-outside (0), and an infeasible list for states too small to hold
their pins — never a silent overlap. Imitates the poster-render pin
relaxation (read, not called). Adds check:pins-in-state (real India data
when present, else a 60x96 fixture; hole/island + poison arms).
2026-10-02 08:23:06 +00:00