Skip to content

feat(erp): B-3 0-seed posting oracles — 6 classes maxDiff=0c vs real compiled posters (W-POST-B3)#44

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

feat(erp): B-3 0-seed posting oracles — 6 classes maxDiff=0c vs real compiled posters (W-POST-B3)#44
red1oon merged 238 commits into
masterfrom
fable/meshdb-livewire

Conversation

@red1oon

@red1oon red1oon commented Jul 17, 2026

Copy link
Copy Markdown
Owner

What

Closes the LAST un-oracled accounting surface (B-3, prompts/FABLE5_B3_POSTING_ORACLE.md): the 8 "0-seed" doc classes that had FSM source-parses but zero posted fact_acct anywhere.

  • 2 ∅-by-design (C_BankTransfer, C_DepositBatch): no Doc_ class in the posting factory — oracle=∅ is structurally correct.
  • 6 G-seed classes oracled maxDiff=0c (C_ProjectIssue + A_Asset_Addition/Disposed/Reval/Transfer + A_Depreciation_Entry): oracle generated by driving the REAL compiled Doc_<Class> posters inside iDempiere's own OSGi test harness (org.idempiere.test tycho-surefire — resolves the G-3 headless-OSGi landmine) on a scratch clone of idempiere_test, over a GardenWorld-model seed (vendor FixedAssetsTest recipe; seed INPUT prep per the 2026-07-17 user ruling — expected facts never hand-authored).

How

  • scripts/generate_post_oracle.sh — clone → seed+post via scripts/logic_oracle/PostingOracleTest.java → capture → drop. Fixture = TEXT (build/erp/oracle/post_b3_fixture.json, 34 fact rows, ΣDR=ΣCR=81,360.56, both acctschemas) — no DB binary.
  • doc_poster.derivePostings gained the 6 per-class manifests, each line-cited to its Doc_*.java source; poc_post_b3.js diffs per document × schema × (account, side) in integer cents.
  • Real catch by the diff: MConversionRate orders AD_Client_ID DESC — the tenant 0.85 rate beats the 0.8006 system rate; engine 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 Expense 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).
  • Banked: docs/internal/ERP_COVERAGE_MATRIX.md +1 row (ledger 43→49), HARDEN_MATRIX.md B-3 band, FABLE5_WORKFLOW_ORACLE.md stop-condition pointer, PROGRESS.md.

Branch also carries the accumulated local docs/session-record commits from the push-pause window (colour/corridor/photoreal/FLY_TOUR records + the §LOCAL-FRAME room-compile fix).

🤖 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 16, 2026 19:14
…uses, fallbacks, definition of done

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

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

Co-Authored-By: Claude Fable 5 <noreply@claude.com>
…es: useDirectLight transition, r185 depth-pack byte order, env-sampling NaNs)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t transparency, tuning spec + knobs

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… user hardware — closing note

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…pre-authorized, gated on the courtyard A/B

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…U), version banner, ghost=1 gate

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…d + deploy record — session 2026-07-17

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ain-merge conflict (playbook case)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… record (PR #815)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…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>
@red1oon
red1oon merged commit 1241cd6 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