docs(prompts): Sonnet follow-through card — posting-tail finish + ERPUserGuide S&D chapter#46
Merged
Conversation
… 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>
…seded by abstract rule
…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>
…es, HHS WC gap flagged open
…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>
…n guessing where no IfcSpace ever named it
…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>
…wcase ARC.db files, both required
…atus/total) as Task 3's actual output shape
…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>
…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
…/Inventory) + ERPUserGuide core S&D chapter Wrap-up of the 2026-07-17/18 Fable-5 posting-oracle sessions: - prompts/RESUME_ERP_POST_TAIL_AND_USERGUIDE.md — §A drive the REAL engine over the REAL unposted seed docs (2 CO cash journals, 3 draft inventories) on a scratch clone via the built B-3 generator; capture, manifest, diff maxDiff=0c; Production stays ⛔ (no costs synthesized). §B ERPUserGuide: high-level navigation section + the core S&D standard-flow walkthrough (SO → shipment → AR → allocation → replenishment → PO → receipt → AP → match → GL/bank → TB → financial reports), every step citing its oracle witness; addon lenses untouched. Git note: fresh branch off master (this one squash-merged twice). - PROGRESS.md OPEN pointer. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Hand-off card wrapping the Fable-5 posting-oracle sessions:
prompts/RESUME_ERP_POST_TAIL_AND_USERGUIDE.md.🤖 Generated with Claude Code