Skip to content

feat(erp): W-POST-TAIL — 3 more posters oracled (ledger 49→52); 17/20 fold#45

Merged
red1oon merged 249 commits into
masterfrom
fable/meshdb-livewire
Jul 17, 2026
Merged

feat(erp): W-POST-TAIL — 3 more posters oracled (ledger 49→52); 17/20 fold#45
red1oon merged 249 commits into
masterfrom
fable/meshdb-livewire

Conversation

@red1oon

@red1oon red1oon commented Jul 17, 2026

Copy link
Copy Markdown
Owner

What

First half of the last-6-posters tail (prompts/HARDEN_MATRIX.md §W-POST-TAIL) — no oracle generation needed, every class diffs against REAL seed data:

  • C_BankStatement: bank-statement manifest == the 13 posted fact_acct(392) rows, maxDiff=0c (incl. schema-200000 conversion + the 0.01 CurrencyBalancing residual).
  • M_MatchPO: the real engine posted the empty set for all 37 posted docs (PPV gated on StandardCosting, Doc_MatchPO.java:429; seed costs at 'A') — engine ∅ == oracle ∅ over the full population, gate-flip falsifier opens the path.
  • M_Requisition: ∅ by isCreateReservation (commitmenttype 'N'); flip 'N'→'B' → expense+commitment lines appear.
  • Correction to the B-3 fx story: the 0.8006 twin rate row is IsActive='N' — the discriminator is MConversionRate:251's IsActive clause, not client-rank. Inactive row now captured; fxRate filters verbatim; poc_alloc_fx §FALSIFIER-B prop restored.
  • Additive extract widenings only; B-3 fixture regenerated (same 34-row oracle); whole posting bundle + TB 46574.97/300 green.
  • Named skips: C_Cash + M_Inventory (scratch-clone next), M_Production ⛔ (no docs, no component costs).

Also carries the CLAUDE.md push-pause lift and a photoreal session-record commit from this shared branch.

🤖 Generated with Claude Code

red1oon and others added 30 commits July 10, 2026 14:45
… Modeller-only scope

Renumber WalkerDoctrine.md's duplicate §13 to §14 (rooms rule) and fix the citation.
Drop the dead SAMPLECASTLE_REAL_ROOMS_RECONCILE.md anchor (lives only on an unmerged
branch, not this one). Reframe the Viewer Find Panel Room Lens reference as a one-way,
read-only borrow-from source for the Modeller's ARC-import step, name its unfiltered
query as a live false positive, and explicitly scope Task 5 to Modeller-only — no
Viewer files touched.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
MANAGER.md said "get the actual thing working" without citing what working means,
letting review verdicts drift toward generic pass/fail instead of the actual product
bar. Point at RESUME_GRAPH_MODELLER_INTEGRATION.md §VISION-LOCK's five sentences.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…t real

Direct query (object_type=COMPILED, ≈-named) proves Terminal has zero real IfcSpace
rooms — the doc previously miscounted them as "real rooms already baked in." Same
correction applied to HHS's 14 rows (already caught by Task 5 but §2's table hadn't
been updated to match). Adds the full 8-building room-count table: only Duplex has
real, habitability-filtered data, and it isn't merged to main yet.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… bug

Direct grep of internal/sources/Ifc4_SampleHouse.ifc finds 4 real IFCSPACE entities
(Living room, Bedroom, Entrance hall, Roof) that never made it into the shipped
SampleHouse_ARC.db (0 rooms) — an extraction gap, not a source-data gap as previously
assumed. Clinic/Garage/Hospital/HHS have no source IFC in this checkout to check
either way, so their "0 rooms" state is unverified, not confirmed-no-data.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…forward work to Sonnet

Task 6: 3 usable real rooms exist in SampleHouse's source IFC but never reached the
shipped ARC — an extraction bug, not a data gap. Per user directive, all further work
on this doc goes to Sonnet, not Fable, from here on; Tasks 1+5's Fable history is left
as an accurate record, not rewritten.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…/utility) below MIN_AREA

User-flagged, verified before fixing: HHS ("large U-shape office block, lots of office rooms
with doors") only compiled 2 rooms; restrooms/utility rooms were being missed across every
building, not just HHS. Instrumented the flood-fill to log ALL candidate pockets (not just
accepted ones) — confirmed this was NOT a mis-tuned MIN_AREA=4.0 threshold hiding rooms that
were actually detected: most sub-threshold pockets are <1.0 m^2 wall-joint/cavity artefacts
(noise), but a real population of 1.0-4.0 m^2 pockets IS a genuine small room (restroom/closet/
riser) wrongly dropped by the same blanket cutoff.

The user's hint ("rooms has doors" / "look for clues that define a toilet, utility that house
MEP") pointed at the fix: MEP fixture data isn't reliable (ARC-only discipline strip already
removed sanitary/plumbing elements from 4 of 5 buildings), but door adjacency is a real,
non-invented structural signal already in every ARC.db — a genuine small room a person uses
always has a door; a wall cavity never does. Measured before shipping: for HHS/Clinic/Hospital/
SampleCastle, pockets <1.0 m^2 are rarely door-adjacent (noise); pockets in [1.0, 4.0) m^2 are
door-adjacent in the large majority (real small rooms) — the two size bands are different
populations, not an arbitrary split.

- storey_doors() + _door_adjacent(): per-storey real IfcDoor centres, 1.0m buffer.
- flood_rooms(): a pocket in [DOOR_RESCUE_MIN_AREA=1.0, MIN_AREA=4.0) m^2 is now accepted iff
  door-adjacent; still-tagged ≈/RM_/COMPILED (spacesOf()'s placement-exclusion untouched) but
  predefined_type='INTERNAL_SMALL' (vs 'INTERNAL') for traceability of which path found it.
- Re-ran --write on the 5 gap buildings: HHS 2→5, Clinic 113→190, Hospital 142→213,
  SampleCastle 25→47, Garage unchanged (0 door-adjacent small pockets found).
- W-ROOM-INJECT-ALL8 rerun 32/32 on bim-ootb worktree: placement-eligibility still 0 for every
  synthetic-only building — door-rescued rooms are exactly as display-only as any other
  compiled room, never reach schedule placement.

Doc: prompts/Modeller/DISC_Walker/ROOM_INJECTION_HYBRID.md updated with the finding + fix.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…bandwidth cap hit

GitHub flagged 10GB/month LFS bandwidth usage. 59+ .db files already LFS-tracked
(deploy/buildings/*, build/*.db) burn quota on every clone/fetch. Going forward:
schema/rules DBs regenerate via migration/*.sql or their mining scripts; extracted/
derived building DBs distribute via OCI (already the dev/live channel), not git.
Existing LFS-tracked files are left alone — this only stops new commits.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…rule

User pushback (correct): the previous §DOOR-RESCUE fix used DOOR_RESCUE_MIN_AREA=1.0 and a flat
1.0m buffer picked by eyeballing HHS/Clinic/Hospital's specific data — a fitted band, not a rule.
This generalizes it:

- The room definition is now architectural, not size-banded: an enclosed pocket is a room if it
  is big enough on its own (area >= MIN_AREA, unchanged) OR it has a real door AND isn't a bare
  rasterization sliver. No area number stands between "noise" and "small room" anymore.
- Door adjacency buffer is now each door's OWN extracted footprint (half its real leaf/frame
  span) + one grid cell of slack (RES) -- self-scaling to whatever doors a building actually has,
  not a fixed metre guess that happened to work on 5 sample buildings.
- The noise floor is NOISE_FLOOR_DIM = 3*RES (0.6m) -- a pocket narrower than a few grid cells in
  EITHER axis is rasterization noise by construction, a property of the flood-fill's own
  resolution, not an area threshold reverse-engineered from observed rooms.

Re-verified: HHS 6, Clinic 195, Hospital 201, SampleCastle 53, Garage 5 (close to, not identical
to, the earlier fitted-band numbers -- expected, since the rule is now geometry-derived rather
than tuned to match them). W-ROOM-INJECT-ALL8 rerun 32/32 on bim-ootb worktree.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…evidence

Tested SEAL=1 (narrower wall-dilation) to try to recover HHS's WC-stall spaces the user found
named in German ("WC Trennwand") — rejected: doesn't fix HHS (the WC block's OWN enclosing walls,
not just its internal stall partitions, are simply absent from this extraction, a resolution/
data-completeness issue SEAL can't touch) AND it fragments real rooms elsewhere into spurious
1-2 sq.m splinters in Hospital (142->253, mostly noise) and SampleCastle -- a regression, not an
improvement. Reverted to SEAL=2 (already-shipped, verified value unchanged).

Separately, user asked whether doors have standard dimensions we could use as a smell test.
Checked: real hinged doors cluster 0.7-1.1m (single leaf) / 1.2-2.7m (double leaf/wide entrance)
across all 5 buildings' door data -- consistent, no anomaly, EXCEPT SampleCastle: 28 IfcDoor rows
at 0.5m width, all named 'liftdeur' (Dutch: elevator door). Real, correctly-classified doors --
but they lead to a lift shaft, not a room, and 2 of them were rescuing actual elevator-shaft
fragments as fake compiled "rooms" (verified directly: room count with vs without lift doors as
the door-rescue signal differs). Same shape of problem as the existing §STAIR-EXCLUDE pattern --
excluded via a maintained, multi-language door-name keyword list (liftdeur/lift/elevator/aufzug/
fahrstuhl/hoist), not a width cutoff (a lift door's width isn't reliably distinct from a narrow
single-leaf door's).

SampleCastle 53->51 (the 2 lift-shaft fakes removed); HHS/Clinic/Hospital/Garage unchanged (no
lift doors in their door-rescue signal). W-ROOM-INJECT-ALL8 rerun 32/32.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…en where walls can't

User's repeated, correct point: HHS has 43/39/34 real doors across 3 floors (verified directly,
German-named "Türelement... Drehflügel" = swing-door elements) -- "each door must be to a room."
Flood-fill (even with §DOOR-RESCUE) only ever found 4/2/0 rooms on those floors because HHS's
extraction is missing the walls that would divide the floor into individual offices at all (91%+
of each floor floods as one exterior-reachable blob) -- door-rescue only widens acceptance for
pockets flood-fill ALREADY finds enclosed; it can't help where nothing is enclosed to begin with.

New technique for where wall-enclosure structurally cannot work: partition the storey's free space
by NEAREST DOOR (multi-source BFS through real free cells, real walls still block) -- each door
claims whatever space no other door reaches first, exactly the "every door leads to a room"
principle stated directly, not an area/threshold proxy for it.

Gate (measured, not fitted per-building): use door-partition only where flood-fill's OWN result
(with door-rescue already applied) finds fewer rooms than DOOR_SHORTFALL_RATIO=0.15 of the
storey's real door count -- HHS's floors find 0-11% of their door count via flood-fill; every
other building's WORKING floors find 20-100%+ of theirs (Garage's sparsest working floor: 5/8=62%;
Hospital's sparsest: 1/5=20%) -- the ratio sits below every failing floor and above every working
one, verified directly so it never overrides an already-functioning result (Garage's 5-room floor
and Hospital's 1-room floor both correctly kept their flood-fill result unchanged).

Result: HHS 6->105 (36/31/29/9 per floor -- in the "tens per floor" range the user predicted from
door counts alone). Clinic/Hospital/Garage/SampleCastle counts unchanged except Clinic's near-empty
'Unknown' storey (0->2, same gate correctly firing there too). predefined_type='INTERNAL_DOORPART'
marks these rows for traceability; object_type='COMPILED' (what tag-purity/placement-exclusion
checks key on) unchanged.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…tability+door-partition results to Find Panel
…m-ootb port

Records the merge (b202eb4) and hands off the one remaining task: port
rule_frame_ref mining + walk-time zOff to bim-ootb's own disc_walker.js and
terminal_rules.db — the fix is bim-compiler-only, the actual Modeller app still
has the collapse bug live until this ports over.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Committing DBs wasn't the only cost: 49 bim-ootb worktrees + a duplicate ~/Projects/bim-ootb
clone were each pulling fresh 100-250MB mesh.db/geo.db LFS blobs. Real end users never
touch git LFS at all (they hit the deployed static site) — 100% of the quota was dev-side
worktree churn. Removed the duplicate clone (confirmed clean, 100+ commits stale) and
pruned 25 safe (clean + fully-pushed) stale worktrees in bim-ootb. Protocol: check
`git worktree list` before creating a new one, one clone per repo, prune on sight.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…tions

GitHub confirmed 0 bandwidth budget remaining, not just approaching the cap. Escalates
the earlier reduce-usage guidance to a hard block: no pushing any commit that touches
LFS-tracked content, no fetching/checking-out branches whose LFS blobs aren't already
locally cached, until the user confirms the quota has reset. Applies to every Agent-tool
prompt that touches git, not just this session.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…repo, right file, new findings

User caught it: the doc anchored on bim-compiler/deploy/dev/navigate_find.js, which turns out to
be a STALE, unmaintained fork (2859-line diff vs the live copy, no recent commits since this
repo's initial migration). The actual, actively-developed Viewer code is bim-ootb/viewer/
navigate_find.js (3640 lines, commits as recent as pill-drawer/HBA work) -- same repo as Modeller's
disc_walker.js, removing the cross-repo constraint the original doc assumed.

Checked the live code directly and found it's further along than assumed (storey grouping + a
Storey/Type toggle already exist) but also found a new, concrete bug: the Type toggle's
`object_type || predefined_type` fallback never reaches predefined_type for compiled rooms, since
object_type='COMPILED' is always truthy -- masks the INTERNAL/INTERNAL_SMALL/INTERNAL_DOORPART
distinction compile_rooms.py now writes.

Biggest correction: confirmed viewer/import_db_builder.js (the live "drop your own IFC" schema
builder) never creates a spatial_structure table at all -- a user's own imported building gets ZERO
room data today, real or synthetic. Scoped as its own Task 5, separate from the display-only fixes,
since fixing it means porting compile_rooms.py's algorithm from Python to JS (no Python runs in a
browser) -- not a quick win.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…e-once via explicit trigger

User's call, this session: since real usage is 100% JS (no server, no Python runtime in the
browser — confirmed for the live IFC-import path), retire compile_rooms.py in favor of one JS
port usable both offline (Node CLI, replacing today's Python bake for the 8 shipped residents) and
in-browser (a new Modeller Outliner "Room Walker" action, parallel to the existing Disc Walker
convention). Explicitly NOT "recompute live on every open" -- user's own point that this costs
real time (HHS's grid alone is ~90k cells/floor) -- compute once, on demand or at import, persist,
same principle as today's offline bake just relocated to whichever moment actually needs it.

5 tasks specced: (1) verify how Disc Walker is actually triggered today before assuming a UI
pattern to copy -- unconfirmed this session; (2) port the algorithm verbatim to a shared JS module;
(3) Node CLI mode replacing compile_rooms.py, witnessed byte-for-byte against this session's Python
counts (SampleHouse 3/Duplex 20/Terminal 43/SampleCastle 51/HHS 105/Clinic 197/Garage 5/Hospital
201) before Python is touched; (4) the browser-mode Room Walker Outliner action; (5) retire
compile_rooms.py once Task 3's parity witness is 100% green.

Cross-referenced from ROOM_INJECTION_HYBRID.md's Task 3 (now has a concrete trigger mechanism
instead of an open-ended display spec) and VIEWER_FIND_PANEL_ROOM_ACCURACY.md's Task 5 (this doc
is its actual breakdown).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…less of content

User-confirmed reset date. Also sharpens the finding: a push touching zero LFS-tracked
files still hung 2+ min and never landed (fix/dw-datum-port push attempt) - the git-lfs
pre-push hook appears to probe the endpoint unconditionally. Rule is now "any push may
hang until reset," not just LFS-content pushes. Don't retry a hung push blindly.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…external target

VISION-LOCK is the internal engineering bar; the guide site is the user-facing proof
it's met. Notes current known gaps (Terminal datum port stuck behind LFS block,
room-mode data coverage, x-ray bug, 2 live Viewer UI bugs) so a new session doesn't
have to re-derive "how far are we" from scratch.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Verified and pushed successfully (earlier push attempt's 2-min hang was transient,
not a hard LFS block - retry succeeded in 25s). Terminal collapse bug heals once
PR #726 merges (user's call).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…status, LFS quota, 2 Viewer bugs

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…llenge answered, W-SCHED-MINE 7/7 + W-DX-WALKBACK-RSGT 14/14 clean-room on committed state

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…l SQL, no-LFS channel for stale mesh.db copies (W-MESHDB-RESOLVE 2/5→5/5, byte-identical, idempotent)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
red1oon and others added 29 commits July 17, 2026 05:57
…es on translated coordinates (user GIGO challenge upheld)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…compile (A/B proven)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…xt session

User request after the SSGI/ground-reflectivity marathon (bim-ootb PRs
#816-#831, all live-verified): bring Alt+S's actual still-refine quality
into Time Machine's construction-sequence playback/export, replacing its
current low-frame/low-res output. Explicitly a patient offline batch
render (user: "even an hour rendering... it holds each frame, apply the
Alt-S effects, snap"), not Cinema Orbit's real-time capture pattern.

Grounded the spec in actual current code (renderAtTime/playTick,
_cineStoryboard, the #tm-share button, zero existing MediaRecorder usage
in time_machine.js) rather than guessing at the current mechanism. Left
the frame-sequence-to-video encoding step as an open, unresolved question
for the next session to research — no vendored muxer library exists yet
for this, unlike Cinema Orbit's real-time captureStream()+MediaRecorder
which doesn't fit a non-real-time per-frame render cadence.

Not implemented — spec only, per explicit user request.
…ression sweep green

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…fix, LTU krn-persist readonly-ops spec, Room Lens §26 texture-serialization hang fix

Was sitting uncommitted in the working tree; no code changes, doc-only.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… in flight

Session record: ambient-occlusion during Time Machine playback. #836
(single-pass AO in renderAtTime + auto-engage on activate) merged/live;
#837 (300ms-hold re-accumulate polish) pushed, auto-merge armed. Records
the durable constraint: N8AO accumulate is incompatible with the
on-demand one-frame render gate — the movie-export spec must use
single-pass too.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Was stale (last touched before 5 recent commits: FLY_TOUR cure chain,
Time Machine spec, ROOM_WALKER_PHASE_INVARIANCE, WALKER-PHASE-SENSITIVITY)
and over the 80-line budget. Folded in recent shipped work, archived
completed items as one-line pointers, kept OPEN list for user to dispatch.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… Opus review session

Reading guide + gap list only, no new spec content. Covers WalkerDoctrine §14
through the 2026-07-17 FLY_TOUR cure chain (PRs #832-#835). Surfaces real open
items (room_guid-unaware room select, unfixed extraction-pipeline source of the
Terminal coordinate bug, ~80% unbuilt room-type inference, deploy/dev viewer
missing the whole stack) plus a stale anchor note in ROOM_INJECTION_HYBRID.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ompile (py+js parity)

ROOM_WALKER_PHASE_INVARIANCE.md executed. S1 named two mechanisms with numbers:
(1) the G1 A/B pair is NOT the same geometry (imported DB's element centers displaced
along wall axes up to 1.86m — importer seam, out of scope); (2) the walker itself
flipped under constant translation (8/14 Δs changed the compile, rooms 50-54 vs 51)
via knife-edge metre comparisons of raster-derived absolute coords (§DOOR-RESCUE
noise-floor at exact 3-cell equality), NOT the raster (cell-identical, e7).

Fix: rebase+quantize (QUANT=1e-6 m) all compile x/y to the wall set's own min corner —
bit-identical numbers in any frame; un-rebase on emit. floor(t+eps)/ceil(t-eps) raster
quantization + integer-cell noise-floor test (round(NOISE_FLOOR_DIM/RES)=3, the
_decompose_region convention).

Witnesses: W-FRAME-EQ 54==54 rooms / 82 rects @0.0000m / E1 28==28 / orphan 35==35;
E4 sweep 14/14 EQUAL (was 8/14 diverged); W-PY-JS-PARITY 6/6 byte-identical;
W-NO-REGRESSION door binding improves fleet-wide (Clinic 174→175 E1, HHS 27→29,
Terminal 26→28; Duplex's removed E1 edges pointed at SUSPECT_OPEN partition slivers);
W-TOUR §FLY_ROUTE accepted on imported Terminal. Logs: /tmp/walker_phase_logs/.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…urrent code

Confirms encoding (proxy-canvas + MediaRecorder, reusing Cinema Orbit's exact
pattern) and UI slot (replace #tm-share) per user decision. Corrects the prior
session's single-pass-N8AO framing after re-reading the code: that constraint
applies to renderAtTime's lightweight _giN8aoPass (render-gate bound), not to
Alt+S's own self-contained 24-frame AO accumulate loop this feature reuses.
Specs the completion-callback addition, the incidental-touch-cancel gap found
in main.js's cancel wiring, and frame storage (dedicated IDB db, not the
existing JSON cache). Not implemented yet — spec only.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…e bug cured by #832 (now backported), real gap is importer wall-transform parity

W-WALKER-PHASE-SWEEP (headless A/B on Terminal_extracted.db): pre-#832 walker 7/14
invariant (counts 50/51/54), #832 §LOCAL-FRAME 14/14 EQUAL. Translating extracted by the
finding's own Δ never reproduces imported's 45 → imported≠extracted is an importer
wall-transform bug (46 vs 54), NOT coordinate phase. #832 backported to this branch in
c44ade9.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…uned

Checked each of the 4 branches' actual fix commits against current origin/main
line-by-line — all already present verbatim (landed via different commits
during last week's marathon, old branches never closed out). Removed the 4
dead branches (local+origin) and their worktrees in bim-ootb rather than
dispatching a redundant sync-and-reverify task.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ll (code + live-test trail verified)

§8 (single purple cuboid highlight, no fragmented seams) shipped in navigate_find.js but the
spec was never closed out. Verified code state: _drawRoomCuboid primary highlight (:2041),
ROOM_CATEGORY_COLORS purple (:1975), §CUBOID-PAINT-ORDER live-test fix (:2566, 2026-07-15).
Records remaining colour gaps (3-bucket cap, no room-type/synthetic distinction) as separate
items — room-type colour now unblockable via the live fixture classifier.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… bugs found/fixed

Implemented in bim-ootb worktree /tmp/wt-tm-movie-export (feat/tm-movie-export,
commit 1e9b313), verified headless end-to-end via the real Export Movie button
(full export + cancel-mid-run paths). Records the two real bugs headless
testing caught: stopStillRefine()'s grace window silently no-op'ing between
fast beats, and a cancel-mid-fold leak leaving _stillRefineActive stuck.
Not pushed — standing localhost-only push-pause.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… is vertex-mean (non-deterministic), fix=bbox-center

Diagnosis (witnessed, same TerminalMerged.ifc offline-extract vs browser-Drop, 4790 GUIDs):
center_x/y/z = arithmetic mean of tessellated verts in BOTH extractIFC2DB.js:422 and
import_worker.js:515 — tessellation-density-dependent, not bit-stable across wasm builds.
Center drifts up to ±1.31m (31/333 walls >0.5m) while bbox delta=0 → 45 vs 54 rooms.
Fix = tessellation-invariant bbox-center (min+max)/2 in both, used as stored center AND
re-center origin. Pipeline-wide blast radius (re-extract all *_extracted.db) → dedicated
fix+regression session, architect sign-off on the center-semantic change. Spec:
prompts/CENTROID_DETERMINISM_FIX.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…OST-B3)

All 8 FSM-parsed/0-posted classes triaged from EXTRACTED facts (live PG +
glassbowl_data.db): all have ZERO source docs. Two arms:
 - ∅-by-design (2, DONE): C_BankTransfer/C_DepositBatch — no Doc_ class in
   the posting factory → oracle=∅ is correct + structural. Closed.
 - G-seed (6, → Fable 5): C_ProjectIssue + FA family — poster exists,
   manifest source-parsed + line-cited, but 0 source docs. Per USER RULING
   (2026-07-17) seed prep along the GardenWorld model is usability/PoC seed,
   NOT a prime-rule violation — the oracle stays the REAL compiled poster's
   output over that seed. Assigned to a Fable 5 session (§W-2→§W-5).
   Hand-authoring facts stays banned.

Load-bearing falsifiers: table 319=96 rows discriminates the fact_acct=0
check; derivePostings(C_Order 104)=3 lines proves the verb is live.
Witness green exit 0, every claim §-logged. Card on-disk (prompts/ gitignored).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…troom/kitchen/bedroom + synthetic-honesty)

Colouring gaps closed in bim-ootb feat/room-restroom-colour: restroom=brown, kitchen=amber,
bedroom=teal added to the prior habitable/corridor/utilities; RM_/≈ synthetic rooms draw
fainter (WalkerDoctrine §14). Deterministic name classifiers, witnessed 21/21 on Duplex.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… real compiled posters (W-POST-B3)

§W-2→§W-6 of prompts/FABLE5_B3_POSTING_ORACLE.md (the Fable-5 hand-off, executed):
- generate_post_oracle.sh + PostingOracleTest.java: drive the REAL Doc_{AssetAddition,DepreciationEntry,
  AssetReval,AssetTransfer,AssetDisposed,ProjectIssue} inside iDempiere's own OSGi test harness
  (org.idempiere.test tycho-surefire — resolves the G-3 headless-OSGi landmine) on a scratch clone
  idempiere_b3, over a GardenWorld-model seed (vendor FixedAssetsTest recipe; USER RULING 2026-07-17:
  seed INPUT prep sanctioned, facts never hand-authored). Capture → build/erp/oracle/post_b3_fixture.json
  (TEXT fixture, 34 fact rows, ΣDR=ΣCR=81360.56, both schemas).
- doc_poster.derivePostings gained the 6 per-class manifests (line-cited to the Doc_*.java sources);
  poc_post_b3.js diffs per document × schema × (account,side) in integer cents: ALL 6 maxDiff=0c.
- The diff caught a real gap: MConversionRate orders AD_Client_ID DESC (tenant 0.85 rate beats the
  0.8006 system rate) — fxRate now replicates the verbatim pick. Doc_AssetAddition is the only B-3
  poster posting doc-currency amounts.
- Falsifiers load-bearing: A_CapvsExp gate-flip (2→0 lines; oracle side = the seed's own Exp addition
  posting ZERO rows) + scale-one-depexp (55556c→111112c). Vacuous-∅ guard refuses an empty oracle.
- Regressions green: poc_post_harden, poc_factacct_doc, poc_doc_poster, poc_morder_post,
  test_report_fin (46574.97 / 300 rows intact — fixture is additive, glassbowl untouched).
- Banked: ERP_COVERAGE_MATRIX +1 row (ledger 43→49), HARDEN_MATRIX B-3 band, WORKFLOW_ORACLE
  stop-condition pointer, PROGRESS.md. PUSH PAUSE honoured: local commit only, no push, no PR.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ence principle (NOTED, not fixed)

Live Clinic Path case (user, 2026-07-17): (A) glass IfcPlate panels (alpha 0.10/0.25) unpickable —
picking.js:256 skips opacity<0.3 before guid resolution (the one clickable glass door had alpha
1.0, GUID 0bpfxAz3XBrAx$RjFuHvgA, card showed Storey:Unknown). (B) curtain-wall glass IfcDoors
carry storey='Unknown' (null-transform curtain-wall parent) → room_graph.js:309 per-storey binding
drops them → path threads room-to-room instead of the corridor. PRINCIPLE: prefer corridor over
room->adjoining-room door-threading; room-to-room when a corridor is adjacent = red flag. NOTE only.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…inciple, 2026-07-17)

Maps the live Clinic room-threading case onto the occupant graph's existing E2 (room<->CIRC)
machinery. C1 (enabler): rescue storey='Unknown' curtain-wall glass doors by center_z so the
corridor edge exists (room_graph.js:309 reads m.storey raw). C2 (preference): penalise E1
room<->room legs by λ>1 so circulation wins — the 'red flag' as a weight. POC-gate first per
this file's law: Clinic (the case) flips to corridor-dominant AND Duplex 26 pairs unchanged.
Cross-ref VIEWER_FIND_PANEL §9.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…enalty) is the lever not C1

Measured shipped room_graph.js on Clinic (118 rooms): E1 room<->room=124, E2 room<->circ=106,
spine=41 — corridor route already exists, so the 12-door thread is a weighting outcome. Only 5
Unknown-storey doors (3 glass, 2 fence) so C1 rescue is minor. Refocuses lane on C2 (penalise E1)
with C1 as a cheap door-storey pre-pass. Next: measure the sample pair hop-by-hop then sweep λ.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Completes the swap first attempted in bim-ootb commit 177194f and reverted same day
(da27f85) — it still looked wrong then because three separate bugs hadn't been fixed
yet: wrong-size cat[0] fallback boxes (bim-ootb PR #844), broken glass/glow X-ray
classification, and flat-opacity alpha-accumulation on deep buildings (both PR #846).

All three now fixed and independently witnessed (witness_dw_honest_fallback.js,
witness_xray_poc.js, witness_xray_sc_duplex.js, witness_e2e_walk_all_disciplines.js —
all green). Recaptured fresh off current main with the real, fixed window.__xrayReveal(),
not a hand-tuned workaround: 270 ELEC fixtures across 6 storeys, clean ghosted structure,
real architectural silhouette (dormers, roofline) visible, no muddy wash, no oversized
spike artifacts, no UI chrome in frame.

Note: this run measured 270 fixtures/6 storeys, vs 325/7 storeys measured earlier the
same day on the same building/discipline — a real, unexplained drift (unrelated to this
docs change) worth someone checking, not silently reconciled here.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…t (user design, not distance/λ)

User's crystallised router design (2026-07-17): enumerate a few full candidate routes, score by
confidence = fewest doors crossed among valid routes, pick best ('fast array maths'). Door-count
metric (each room transition=1, corridor traversal=0) makes the corridor win by construction —
supersedes the λ-penalty sketch, no tuning. C1 stays the enabler (glass door must be a candidate).
Regression-safe by construction on Duplex. Implementable as shortestPath opts.metric='doors'.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…2 E2 + 1 E7), C1+C2 both needed

poc_lane_c1_fast.js: rescuing the 3 Unknown-storey glass IfcDoors by center_z adds +3 edges
straight to the corridor spine (2 room<->spine E2, 1 doorwp<->spine E7). Graph was already 1
component so corridor not globally severed — C1 adds the DIRECT corridor option at the glass door;
fewest-doors metric (C2) makes it get chosen. Next: implement opts.metric='doors', run sample pair.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ce model (C3) + degradation tiers (C4)

User asked for a strategy JSON. Deterministic, reviewable: base=door_count, per-door cost from
IFC host (IfcCurtainWall=transit, cheap) x adjacent-room privacy (from the SHIPPED room classifier
— public cheap, private expensive), collinearity as tie-break only, C1 storey_rescue by center_z,
C4 degradation tiers (walls->doors->floor-slab->raw). Cost numbers marked _calibrate (POC-tuned,
not invented finals); structure is semantic. Records C3/C4 in OCCUPANT_PATHFINDER.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…7-17)

A graph node/yellow dot = any traversable opening between walkable spaces, not only IfcDoor.
Open-plan transitions (corridor<->foyer, room<->corridor with no leaf) are ACQUIRED at wall-free
shared boundaries — the INVERSE of the walker's §ROOM-FORM open-perimeter measure, reusing existing
machinery. Guarded by min passage width + NOISE_FLOOR/window exclusion. Inherits public/transit
priority; primary connector for the C4 no-walls floor-slab tier. path_strategy.json door_acquisition.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ghost family, PR #848

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…O/Requisition config-∅ proven (ledger 49→52)

First half of the last-6-posters tail (HARDEN_MATRIX §W-POST-TAIL spec, same session), no oracle
generation needed — every class diffs against REAL seed data:
- C_BankStatement: bank-statement manifest (per-line Bank.Asset/InTransit/charge/interest legs,
  per-schema conversion + CurrencyBalancing residual) == the 13 posted fact_acct(392) rows, maxDiff=0c.
- M_MatchPO: the real engine posted the EMPTY set for all 37 posted docs — PPV gated on StandardCosting
  (Doc_MatchPO.java:429), seed costs at 'A'. Engine ∅ == oracle ∅ over the full population; falsifier
  flips A→S + cost-scale → the path opens.
- M_Requisition: ∅ by isCreateReservation (MAcctSchema.java:662-669, commitmenttype 'N'); falsifier
  flip N→B → expense+commitment lines appear.
- CORRECTION to the B-3 fx story: the 0.8006 twin rate row is IsActive='N' (same client) — the live
  discriminator is MConversionRate:251's IsActive clause, not client-rank. The inactive row is now
  CAPTURED and fxRate filters it verbatim; poc_alloc_fx §FALSIFIER-B's wrong-rate prop restored.
- Additive extract widenings (bankstatementline amounts, bank interest accts, c_charge_acct, m_matchpo,
  m_requisitionline, category expense/PPV accts, rate client/org/isactive); B-3 fixture regenerated
  (same 34-row oracle). Whole posting bundle + TB 46574.97/300 re-verified green.
- Named skips: C_Cash (post 2 real CO docs on scratch clone next), M_Inventory (complete 3 real drafts
  next), M_Production ⛔ (0 docs, no component costs — not synthesized).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
# Conflicts:
#	PROGRESS.md
#	build/erp/oracle/post_b3_fixture.json
#	docs/ModellerGuide.md
#	docs/img/modeller/walk-fixtures.png
#	docs/internal/ERP_COVERAGE_MATRIX.md
#	prompts/FABLE5_B3_POSTING_ORACLE.md
#	prompts/HARDEN_MATRIX.md
#	prompts/Modeller/DISC_Walker/VIEWER_FIND_PANEL_ROOM_ACCURACY.md
#	prompts/PHOTOREAL_STILL_RENDER.md
#	scripts/capture_post_b3_fixture.js
#	scripts/doc_poster.js
@red1oon
red1oon merged commit 3003b18 into master Jul 17, 2026
1 check failed
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