fix(rooms): canonicalize storey naming across disciplines for containment join - #55
Open
red1oon wants to merge 368 commits into
Open
fix(rooms): canonicalize storey naming across disciplines for containment join#55red1oon wants to merge 368 commits into
red1oon wants to merge 368 commits into
Conversation
…751), size ledger, 2 classification corrections Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…PR #753), vendor-dedupe deferral with load-site map Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… #754) + live-on-Pages confirmation Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…y blobs in extracted DBs (jkr georeferenced Revit series) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-REJECT/R-DOOR-SCORE/R-SPINE), Task 0 traced, Task 3 no-evidence Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ier (1/1b/2), Lane B judgment-tier (Task 0 trace + R-SPINE non-convex validation) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…grind prompt (§POC0c/§POC5)
Lane B was judgment-shaped ("trace," "watch," "expect"); rewritten as a deterministic
compute-don't-judge prompt for Fable — Task 0's Terminal load-path trace and R-SPINE's
AABB-vs-true-polygon containment question both resolve to a measured geometry number,
not a read. No pipeline code changes in this pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…er move to bim-ootb/buildings JKR_Project.db relocated from ~/Downloads/OPEN SOURCE BIM/ to the canonical ~/bim-ootb/buildings/JKR_extracted.db (same naming convention as Duplex/Terminal) — provisional, not yet confirmed for ARC-walk promotion. Pointer added so a future session doesn't look in Downloads. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…0 closed (Terminal_ARC.db traced, §POC0c), R-SPINE AABB containment rejected+corrected (§POC5, 1188 violations/10 of 14 clusters) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ng>_ARC.db from an extracted DB No generic discipline='ARC' filter script existed (confirmed by search — the 8 shipped *_ARC.db files were built ad-hoc per-building, upstream of any extracted DB). Fills that gap by reusing two already-established patterns: str_walker_outliner.js's _filterArc() predicate and project_spaces_to_arcdb.py's verbatim-column-copy shape. Run against JKR_extracted.db to produce JKR_ARC.db (3118/3118 ARC elements + transforms + instances read back clean, 83 spatial_structure rows carried verbatim) — schema/table-set matches every sibling *_ARC.db exactly. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… moved to canonical bim-ootb/buildings/JKR_extracted.db, corpus verified identical Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…both mirrors, 6/6 parity Ports the POC-validated split-hallway merge rule and enclosure-based non-room rejection into scripts/compile_rooms.py and build/room_walker.js — pseudocode/parameters taken verbatim from the spec's Task 1/1b sections. R-MERGE unions same-storey pockets whose shared seam has no real wall backing it (a synthetic flood-fill/door-partition split, not architecture); R-REJECT drops pockets whose wall-backed perimeter fraction (enclosure) falls below 0.25, flags 0.25-0.50 as SUSPECT_OPEN. Runs merge-then-reject per storey, after flood_rooms/partition_by_doors, before guid assignment. Verified: build/witness_room_walker_parity.js 6/6 PASS byte-identical (SampleCastle/HHS/Clinic/ Garage/Hospital/Terminal). Found + fixed a real cross-language determinism bug along the way: JS Object.keys() on a union-find-root-keyed object silently reorders to ascending numeric order (array-index-like key enumeration) instead of Python dict's insertion order, desyncing which physical room got which guid between mirrors on Hospital/Terminal — fixed via an explicit group-encounter-order array. Session-scratchpad witness (not committed, see spec doc) confirms the named acceptance cases: JKR 66 logical rooms -> 51 after merge (independently reproduces the spec's own row-level 79->51 number), storey '01 Aras Satu' 31->16 (the split-hallway chain fix), 0 false rejects among 34 pre-merge non-OPEN rooms, Duplex 0 merges/0 rejects (21 real ground-truth rooms untouched, confirmed byte-identical before/after --write). R-DOOR-SCORE (Task 2, common/room_graph.js, bim-ootb) was also implemented per spec but DISPROVEN by witness_room_graph_path.js's existing G3a real-path regression check (LAMBDA=0.8 overrides a 9x distance gap on real door 204034) -- reverted, not shipped. Full finding + handoff recorded in this file's new dated section. PUSH PAUSE in effect -- committed locally only, not pushed. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…it check feat/room-pathfind-graph (bim-ootb) traced and confirmed STALE, not unmerged prior art: its common/room_graph.js is byte-identical to what's already live on main (PR #746, commit 3f6dbbc) — branch forked before that merge and was never fast-forwarded. Removed (0 unique commits). Verified directly (real Duplex_ARC.db) that room_graph.js's existing shortestPath() already serves R-SPINE's spine-restricted routing need when fed a node-filtered graph object -- no new pathfinding algorithm required. 4/4 checks pass (session scratchpad witness_rspine_fit.js). Remaining gap for a full R-SPINE build (not attempted, correctly out of scope this pass): spine selection, a ~10-line restriction wrapper, and conduit-polyline geometry -- none are pathfinding. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…Viewer 0→59 rooms, Modeller self-heal loader + fresh room set), browser-proven Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e-press room injection + IDB persist Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… + stair + exit edges, human-walk pathfinding, POC-gated Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e, needle=manual replace, embeds preprocessed Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…3-state standardization)
Implementation landed in /tmp/wt-terminal-rooms (fix/terminal-rooms-selfheal @ 91e28ce, local
only, no push per PUSH PAUSE). All three witnesses PASS incl. the mid-flight §STANDARDIZATION
amendment (zero/recompute/none three-state model, replace semantics, double-press idempotency).
Logs: scratchpad/logs/w_needle_{terminal,patchsrc,healthy}.log. Honest findings: no building in
the local fixture set has real (non-RM_) extracted rooms — proven via a labeled synthetic
single-row fixture instead; old 12-column spatial_structure schema (Duplex) would throw inside
the walker's room_guid INSERT if ever pressed (caught gracefully, not exercised, flagged as
deferred, out of scope for this task).
…t camera-zoom gap noted Room highlight verified live on HHS Office (31 real rooms on Level 2 alone): a single room isolates as a clean, correctly-bounded translucent box, confirming the geometry is well-formed. Removed the guide's unverified "tap a room to zoom to it" claim — confirmed live 3x that room-select doesn't actually reframe the camera; flagged as a known gap instead of leaving a false claim in place. Also appends a deferred design spec (corridor/hallway findability — TYPE/ROOM/PATH surfaces) to ROOM_TAXONOMY_STRATEGY_2026-07-12.md, captured per user direction, explicitly future work. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
# Conflicts: # docs/BIMUserGuide.md
…in bim-ootb) POC-gate-first per spec: Terminal 1.5%->68.7% raw reachable room pairs (100% of the 49 rooms that have any door at all, the other 10 are pre-existing SUSPECT_* zero-door rooms), Duplex E1-only shortest paths byte-identical before/after (26 pairs, 0 mismatches), JKR logged honestly (not gating). Engine shipped in bim-ootb common/room_graph.js on feat/occupant-pathfinder (off fix/terminal-rooms-selfheal), API-compatible, four witnesses quoted in this file's # DONE section. PUSH PAUSE in effect — local commit only, no push, no PR.
…, mobile QR) + OCCUPANT_PATHFINDER follow-up lane (exit detection first) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ug A fix now proven live Both images predated the DiscWalk containment fix (Bug A, resolved+5-axis-verified 2026-07-12). Re-ran the existing proven E2E witnesses unmodified (witness_e2e_walk.js, witness_e2e_seedtrunk.js, both 100% pass) against bim-ootb main with the fix merged, rather than write new capture scripts. walk-fixtures.png: 267→102 fixtures (space-scoped walk superseded the old density walk since these were last captured) — building now reads as a clean, fully-contained shell from outside, no stray geometry. seedtrunk-trunk.png: real post-route state (0→3,922 trunk segments, framebuffer-verified), replacing the honestly-labeled pre-route placeholder that stood in after the 2026-07-09 retraction. route-run.png/route-spine.png/samplecastle-arc-open.png intentionally NOT touched — unrelated tools (Route sketch, ARC-open), not implicated in the containment bug; recapturing those is a separate guide-freshness task. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ect small tasks + report-not-build Codifies today's actual operating model: overlook admin/parallel sessions (standing), do small bounded tasks directly (guide staleness checks/fixes — no need to dispatch an agent for a few-file, reuse- existing-tooling job), and for anything that turns out bigger than "small" (a real feature/code fix surfaced while checking a guide), name it precisely and hand it to another session rather than silently expanding scope under cover of "fixing the guide." Adds §GUIDE STALENESS METHOD — the concrete 7-step workflow proven this session (mtime vs fix-date comparison, reuse existing E2E witnesses rather than hand-rolling capture scripts, look at the actual image, shrink-guard-aware deploy via safe_gh_deploy.sh with explicit ALLOW_SHRINK blessing, verify the live gh-pages branch directly rather than trust a curl that can lag CDN propagation). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…th mirrors, parity 6/6 (user-reported stairwell-as-room) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…fix verified live Reports the STAIRWELL-STACK reject fix from today's Fable session: Terminal healed from 59 to 40 clean rooms via self-heal patch, verified live on localhost. New section documents the Type taxonomy (INTERNAL/INTERNAL_SMALL/SUSPECT_OPEN/SUSPECT_NO_DOOR) with the real SUSPECT_NO_DOOR demo screenshot, names the corridor/CIRCULATION_DISPLAY gap honestly, and confirms the Path sub-mode's multi-step stair-crossing routing now verified live. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…shipped (PR763), two measured open lanes (air-room containment, courtyard chord) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…oor-waypoint detour, POC-gated, Sonnet-executable Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… landmine + the fix (bim-ootb #764/#765) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ass parity now visible These 3 predate the render-material-parity fix (bim-ootb PR #735, merged 2026-07-11) and still showed the pre-fix flat opaque window panel. Re-ran the existing witness scripts unmodified (witness_e2e_rotate.js 7/7, witness_e2e_scale.js 7/7) against current main — same window now renders see-through with real interior furniture visible behind the pane, matching the fix already demoed in glass-window-transparent.png. delete-gone.png NOT touched: re-running witness_e2e_delete.js picks a different element each run (this time a roof skylight, not the wall the current caption describes) and produces an unrelated bird's-eye frame with no window in it — not an improvement, needs a targeted recapture, not a blind re-run. Left as a named gap, not silently dropped. Also found, not fixed here: witness_e2e_delete.js's D4 (REVERSIBLE — redo after delete) FAILs on current main (5 PASS/1 FAIL) — a real regression, unrelated to this guide task. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…do not assume live-confirmed User: "update the prompts/# to continue testing in new session. Do not assume issues solved." All four cinema-orbit PRs this session (#907, #921, #923, #925) are merged and passed their own unit-level witness (a synthetic cinemaPathPlan() probe), but NONE has been confirmed correct by the user actually watching a real Alt+C film — this exact gap already produced two false "done" claims this session (R2 passed its witness and shipped, then came back "STILL BROKEN" in live use over a completely separate bug the witness couldn't have caught; §CINEMA_FLAT_ENDING passed its witness and shipped, then live trial triggered the entire §CINEMA_ORBIT_V2 redesign). Retitled all four section headers from SHIPPED to "MERGED — unit-witnessed only, live-trial status UNKNOWN", flagged §CINEMA_FLAT_ENDING as superseded by §CINEMA_ORBIT_V2 (no longer universal, now sun-last-only), filled in the #925 PR number, and added a NEXT SESSION banner ahead of all four sections with concrete per-piece things to actually watch for on a real Alt+C press (space selection landing somewhere that reads as the main hall vs an awkward bbox-centre fallback; rushed/graceful exit mood actually looking distinct; motivated spin reading as natural not incomplete; sun-first/sun-last shapes both looking intentional; end-deceleration and beat-overlap actually removing the abruptness) rather than re-deriving from scratch or assuming the merged code is correct just because it merged. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…live orbit test Direction (b) chosen: reuses the already-shipped _giHoldCamSig pose-signature diff (TM_GI_HOLD_CAMGUARD, PR #816) to force a full traverse when the camera moved on a DLOD-engaged tick, fixing the box→real restore that silently skipped on pure camera-orbit ticks. CLI-verified (syntax, whitebox baseline unchanged, 5/5 pure-logic self-test); needs the user's live LTU hardware test before merge. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…link ERP Zoom-Across Viewer guide's Time Machine bullet was a one-liner pointing generically at the ERP guide. Adds the box-cube LOD toggle mention, the demo video, and a direct link to the ERP guide's Time Machine authoring section — including the red Zoom Across pill entry point that jumps the timeline to an element's construction moment. Targeted addition per project_viewer_guide_erp_correlation_next memory, not a full guide rescope. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…E.md §5 Real SQL test against buildings/LTU_AHouse_extracted.db (125,698 elements, no browser/GPU needed): grouping by storey shows even the biggest single floor leaves 65% of the building on a different storey (most floors clear 90%+), and elements_meta.storey has complete coverage — a genuinely viable, buildable-today culling axis, additive to the existing distance+frustum box-proxy design. Same-floor room-level occlusion is a separate, currently-blocked idea: rel_contained_in_space only covers 1.3% of elements, a data gap not a logic gap. Also records why this axis was missed in weeks of prior perf triage: every phase (TM delta-render, box-proxy, dlod.js frustum culling, retracted S261 swap) asked a camera-relative question (distance/ frustum/time-window); none asked whether the building's own storey structure already proves an element can't be seen. Not a data gap (storey coverage was always complete) — an analysis blind spot from reactive, reuse-existing-mechanism-only fixing. Surfaced by user pushback on the "wide view = facade" assumption, which also caught that Alt+C Cinema Orbit dives into interior spaces too (not purely exterior), so any occlusion design must cover both entry points. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…heck to FLY_TOUR_DLOD_SCALE.md Two more rounds of user pushback found real cracks in §5's storey-partition idea: (1) aerial/ exterior tour legs (orbit, bird's-eye) have no single "current storey" and genuinely need other floors visible — blanket storey-hiding punches holes in the building during establishing/closing shots; (2) even where valid (camera deep in one floor), storey-level is too coarse — real room- level containment data shows 8.9 elements/room average vs 44,374 on the biggest storey, so the actual win was always the same-floor axis, which storey-partition can't touch. Retracted the storey-only recommendation; replaced with a two-track split (box-proxy for aerial via the existing §0-§2 mechanism, room-level occlusion for interior gated on fixing rel_contained_in_space coverage first — a separate prerequisite task, not scope-crept into this file). Added §6: traced real code (not assumed) for how any DLOD extension interacts with Find Panel and Clash. Find's element-precise highlight and Clash's detail view both draw independent overlay geometry — unaffected. Find's isolate mode (filterByGuids) writes the same per-slot visibility state DLOD's per-tick traverse re-asserts every tick with zero coordination — a confirmed, not hypothetical, conflict: isolating a GUID can be silently reverted by DLOD on the very next tick. Names the required fix (an exemption clause covering A.activeGuidFilter, same shape as TM's existing FRONTIER/RECENT-always-real rule) as non-optional before any DLOD extension ships. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
PR #927 merged to bim-ootb main (ee57a3e). Live-hardware orbit test confirmed via youtu.be/juwOrpqKhFE. Nothing further open on TM_DLOD_SCALE.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Branch was 1 behind main; merged clean, re-witnessed green, pushed, PR opened. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…PR #924 merged The 2026-07-12 back-arrow fix (HISTORY_KNOB_SIGNAL_TAP.md) was witnessed and pushed to a branch but never opened as a PR or merged — that's why "world/history" broke again a week later. Cherry-picked it onto fresh main, re-witnessed, merged (bim-ootb PR #924, bbf8c9e). Documented the fix location, the fragmented-across-8-files structural pattern behind the recurring breakage, and closed out the three affected pointer files. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…when noticed" 61 bim-ootb worktrees had accumulated despite an earlier verbal "everyone clean up" — that instruction only reached sessions live at the time and left nothing for a fresh session to read. Bakes the ahead/dirty check + an active-process guard (don't yank a worktree another concurrent session is mid-command inside, even if git-clean) into the standing protocol instead. 26 of 61 confirmed prunable and removed this pass. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… for FLY_TOUR_DLOD_SCALE.md §7: real SQL math (LTU_AHouse_extracted.db) found the §0-§4 distance-radius rule, reused verbatim from TM_DLOD_SCALE.md, gets occlusion backwards — 54.5% of the whole building (every storey) falls within the "stays real" 50m radius from a central interior point, including elements behind walls 5m away; at the tour's own logged real orbit distance (r=255, from an actual live log line earlier this session) 0% of elements fall within 50m, meaning the entire building would render as boxes during the tour's own opening/closing aerial shots. Distance is not a proxy for occlusion. Names an existing, currently render-unused R-tree spatial index (CINEMATIC_RENDERING.md) as the basis for a corrected line-of-sight axis — not yet designed, two open prerequisites (CPU cost of ~125k raycasts/tick unverified; pop/flicker risk deferred to §8). §8: user directive — before touching any DLOD visibility-swap code, checked this project's own history and found this exact problem class has failed FOUR times already: S258 (disabled on edge- on flicker + TM visibility conflicts), S259 (proposed BatchedMesh fix), S261 (built full geometry swap WITH a hysteresis band specifically to prevent boundary flicker — still retracted, hysteresis alone was proven insufficient), S262 (tried to re-enable, didn't stick, still disabled today behind a whitebox guard). Cross-fade/opacity-blend was named once (S261_DLOD_PBR_MILLION.md) but never built or tested — a genuinely untested idea, not a repeat of a known failure, but also not a known success. §8 authorizes Fable to build an ISOLATED PROTOTYPE reproducing the known edge-on-flicker failure first, then test cross-fade against that same reproduction, and REPORT FINDINGS ONLY — no live wiring into dlod.js/streaming.js/time_machine.js, no touching the _useDlodPath guard, no PR — until the user reviews the report and explicitly authorizes implementation. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
PROGRESS.md was 116 lines (budget 80): archived 2026-07-05→07-16 DONE items to prompts/archive/PROGRESS_DONE_ARCHIVE_pre_2026-07-17.md as one-line pointers (detail already lives in their cited prompts files), trimmed several verbose Archive entries to true one-liners, and updated the Fly Tour route-cache entry to reflect its final gated state (FLY_TOUR_DLOD_SCALE.md §8 — Fable authorized to investigate cross-fade only, report back, no implementation without sign-off). 116 → 87 lines; active OPEN items left untouched. Added a durable cross-session memory (project_dlod_geometry_swap_landmine.md): this session traced four prior failed attempts at distance/geometry-threshold visibility-swap DLOD in bim-ootb's viewer (S258, S259, S261, S262 — hysteresis was already tried and proven insufficient alone) before proposing anything new, per this project's own anti-drift doctrine. Recorded so a future session doesn't have to re-derive that history from scratch. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…E-ATTRIB witness — PR bim-ootb#930 Specs and witnesses the guide's own named next-piece (opt-in per-step signing): device signer was never installed on the live UI, and rebase()/pushRows() each independently dropped gid/branch_id/sig on every cross-device sync. S7 (signer install + column preservation) landed and witnessed 27/27 green; S8 (roster-gated cross-device verify) spec'd as the next phase, not yet built. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…R bim-ootb#932, guide updated
S8 as originally specced ("reuse verifyEpochSigsOps as-is") was wrong — probed
before implementing and found that module enforces a single active signer with
explicit ROTATE handoffs, which would reject any second concurrently-active
device outright. Corrected spec + built the actually-right primitive instead
(per-op independent multi-device verification, PR #932).
Extends witness_e2e_rebase_attrib.js with the S8 verification pass (both real
devices correctly attributed post-sync, tampered roster rejected) — exit 0,
37/37 green, regression-clean against witness_roster_verify.js.
ERPUserGuide.md's "one honest limit" callout rewritten: the signing/verification
mechanism is now proven end-to-end on field edits; DocAction-specific and roster
distribution remain named, honest open items rather than blanket "not yet".
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…yst+fade10+depthWrite-off = pop at camera-motion baseline; report-only, gate respected Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013nFrp9J35tFknm8UM9jSLs
…TX4060 + r185 BatchedMesh/InstancedMesh): batch-alpha FAILS, overlay-hoist pixel-identical, inst-alpha WORKS Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013nFrp9J35tFknm8UM9jSLs
…av+Fly Tour; full disengage under Find isolation; Alt+C/Alt+P excluded Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013nFrp9J35tFknm8UM9jSLs
…rtifact, not a product bug Root-caused via a throwaway debug worktree: idempiere.html deliberately makes individually crud-editable grid cells open a single-field inline editor on click (P4/W-INPLACE-GRID-LIVE "GridView parity"), stopPropagation()-ing past the row's own click handler. A bare row.click() lands wherever Playwright's default click point falls, which cell that is depends on column layout — happened to hit DocumentNo (crud-editable) for the Sales Order window and POReference (not curated, falls through to opening the full form) for Purchase Order. Same table, same code, no SO-specific defect. Added clickRowOpen() — clicks the POReference cell explicitly (present in both windows, deterministically non-crud-editable) instead of the ambiguous row center. Stage 1 now PASSES: a real Sales Order can be authored and completed end-to-end through the live UI. Re-running the full cycle surfaced the next real, distinct gap: Stages 2/3 now fail because neither Generate-process's order picker offers the freshly-created order as a candidate — not yet root-caused, named as the new frontier. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… all W-DLOD-NAV witnesses PASS on real GPU (112.7→17.3ms wide orbit on LTU) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013nFrp9J35tFknm8UM9jSLs
…uota defeats §4 self-heal; Fly re-plans every press (user 'hangs the scene' log); fix direction = IDB store Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013nFrp9J35tFknm8UM9jSLs
…); next frontier named Same class of gap as Stage 1's DocAction fix: renderOrderPicker() read only the raw seed bundle, never folding the op-log overlay, so a freshly-created order could never be a Generate-Shipments/Invoices candidate. Fixed and witnessed. Running the process against the now-offered order surfaces a deeper, more central gap: crud_overlay.js's shared cleanVals()/buildOp strips a save-hook- derived mandatory field (order warehouse) before it's ever persisted on CREATE. Named precisely, not fixed — touches every table's CREATE path, more invasive than the two fixes already landed this cycle. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…nterior-vs-aerial win profile explained Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013nFrp9J35tFknm8UM9jSLs
… wave absorbed in 34ms Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013nFrp9J35tFknm8UM9jSLs
…43 chunked eval flight numbers + budget negative result Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013nFrp9J35tFknm8UM9jSLs
…ge-3 version recompile (spec from Alt-C session, preserved from evaporating scratchpad) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013nFrp9J35tFknm8UM9jSLs
…ge 2 next-layer + new AD_Org_ID casing bug named
Reactive shape (option 1): _ensureRoomsCore() busts the Fly-tour route cache whenever a version-triggered recompile fires, for ANY caller of ensureRooms (not just Fly itself). Witness proves the cache-stored- before-a-version-bump scenario the spec's GIVEN actually describes. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…irmed Stage 6 PO is data-tagged Sales doctype underneath
…ment join CONTAINMENT_LTU_STOREY_ALIAS.md: compile_rooms.py's rel_contained_in_space join keyed on exact storey-string equality, but LTU_AHouse's disciplines each spell the same floor differently (ARC "VÅNING N", STR "VÅN N", MEP "Plan N"/ "Storey N") — verified via Z-band clustering that all four spellings match the same physical floor for a given N. Since room detection is ARC-only, every non-ARC element was silently excluded from containment regardless of true geometric location (MEP = 83.7% of the building, zero rows before). _canonical_floor() collapses the known spellings onto one "F<n>" key on both sides of the join; anything that doesn't match (Unknown/TAKPLAN/Ref.) falls back to nearest-Z resolution against canonical-floor anchors built from the rooms' own center_z — same nearest-anchor technique the file already uses for Unknown-storey wall/door reassignment, applied at the join instead. W-CONTAINMENT-ALIAS (scripts/witness_containment_alias.py, scratch DB copies, never the checked-in DB): LTU_AHouse rel_contained_in_space 314 -> 30,409 rows (0.25% -> 24.2% of 125,698 positioned elements), newly covering HEAT/PLB/VENT/ HVAC/SAN/VOID; room geometry (529 rect rows) byte-identical before/after, zero SUSPECT-room containment leakage. Regression-checked byte-identical (no diff at all) on 4 other buildings (HHS_Office_Federated, Duplex, SampleHouse, Terminal) that don't use this naming scheme — true no-op there. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
red1oon
added a commit
that referenced
this pull request
Jul 21, 2026
Room-level occlusion's blocking data gap (1.3% rel_contained_in_space coverage) was a storey-naming mismatch across disciplines, not a source gap. Fix landed compiler-side; LTU_AHouse now at 24.2%. Occlusion itself still not implemented, and the live deployed DB isn't regenerated yet — both are the next session's job on this lane. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…eeded Correction: compile_rooms.py is the offline reference tool, not what runs for real users. room_walker.js (client-side JS twin, the needle self-heal path) had the identical bug and needed the same fix — otherwise this PR's fix would never have reached anyone. Co-Authored-By: Claude Sonnet 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.
Summary
prompts/Viewer/FLY_TOUR_DLOD_SCALE.md§5), which namedrel_contained_in_spacecoverage as a "separate spec" prerequisite — this is that spec (prompts/done/CONTAINMENT_LTU_STOREY_ALIAS.md).compile_rooms.py's element→room containment join keyed on exactstoreystring equality, but LTU_AHouse's disciplines each spell the same floor differently (ARC "VÅNING N", STR "VÅN N", MEP "Plan N"/"Storey N"). Room detection is ARC-only, so every non-ARC element (83.7% of the building, all MEP) was silently excluded regardless of true geometric location — verified via Z-band clustering that all spellings match the same physical floor for a given N._canonical_floor()collapses the known spellings onto oneF<n>key applied on both sides of the join; anything that doesn't match (Unknown/TAKPLAN/Ref.) falls back to nearest-Z resolution against canonical-floor anchors built from the rooms' owncenter_z— same nearest-anchor technique the file already uses elsewhere for Unknown-storey reassignment.Test plan
scripts/witness_containment_alias.py(fresh scratch DB copies each run, original fetched viagit show, never the checked-in DB touched):rel_contained_in_space314 → 30,409 rows (0.25% → 24.2% of 125,698 positioned elements), newly covering HEAT/PLB/VENT/HVAC/SAN/VOID. Room rect count byte-identical (529/529). Zero SUSPECT-room leakage. PASS.python3 -m py_compile scripts/compile_rooms.pyNot in scope (by design)
LTU_AHouse_extracted.dbvia OCI — no consumer depends on the wider containment yet; that's the natural first step of the follow-up viewer work, not this data-quality fix.🤖 Generated with Claude Code