Skip to content

docs(prompts): PATH_LEGAL_SEGMENTS — spec + DONE, mesh-derived storey raster#43

Merged
red1oon merged 150 commits into
masterfrom
fix/disc-walker-path-legal-mesh-footprint
Jul 12, 2026
Merged

docs(prompts): PATH_LEGAL_SEGMENTS — spec + DONE, mesh-derived storey raster#43
red1oon merged 150 commits into
masterfrom
fix/disc-walker-path-legal-mesh-footprint

Conversation

@red1oon

@red1oon red1oon commented Jul 12, 2026

Copy link
Copy Markdown
Owner

Summary

  • Records the PATH_LEGAL_SEGMENTS spec's full arc: POC gate fail (bbox slab overreach on HHS's
    courtyard), root-cause + diagnostic, coordinator decision (§G3-REVISED: mesh-derived storey
    raster instead of a better bbox rule), and the DONE section with the implementation shipped in
    bim-ootb PR #767 (auto-merge armed).
  • Docs-only change to prompts/Modeller/DISC_Walker/PATH_LEGAL_SEGMENTS.md.

Test plan

  • N/A — documentation only, no code changes in this repo.

🤖 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 12, 2026 06:17
…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>
…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>
…l misfires, root-caused

POC gate ran against real HHS (patched) + Duplex data per the spec's own POC-first fence. The
named control case (HHS R18->R31 courtyard chord) does not classify illegal under G3's
room-rects+floor-slabs union — root cause measured: this building's per-storey IfcSlab is a
single concave (U-shaped) element stored as one axis-aligned bbox in element_transforms, so its
AABB overreaches into the courtyard notch (same failure shape as a concave room's AABB). Duplex
control passed clean. A room-rects-only diagnostic (not applied) correctly flags the same chord —
reported to inform, not decide, the next call. Per the preamble: STOP on a misfiring control case,
report the numbers, don't improvise a replacement definition solo. No engine files touched;
evidence (poc_path_legal.js) pushed to bim-ootb fix/path-legal-segments, not merged.
…raster, coordinator decision

Neither of the two bbox-only options in the prior DONE section is used. The real fix is not a
better bbox rule but dropping bboxes entirely for the slab half of the union: real triangulated
mesh geometry already exists one join away (element_instances -> component_geometries, the same
table modeller/real_geometry.js already decodes for rendering) and was simply unused by the
original G3 definition. New architecture: precompute a per-storey walkable bitset raster from real
slab mesh triangles (offline, node), ship it as a self-heal patch per this project's existing DB-
change doctrine, and have room_graph.js do a plain O(1) bitset lookup at query time — no mesh
decode in the browser, "instant next time" per the user's framing. Implementing directly this
session per user directive, not queued as a further open question.
…tb PR #767

Mesh-derived storey raster implemented, witnessed (POC re-run, real-browser HHS live check,
Duplex byte-identical regression, SampleCastle structurally immune), and pushed with a PR open
(auto-merge armed) — see the DONE section for the full numbers and the one real bug found and
fixed during witnessing (DOOR_BUFFER_SLACK tolerance on the room-rects fallback).
@red1oon red1oon merged commit 6963f5b into master Jul 12, 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