Skip to content

feat(taxonomy): PLANT_ROOM n=4 + honest-zero air-well/storage + ACMV↔plant correlation (weak/none) — drains the meshdb-livewire backlog#42

Merged
red1oon merged 109 commits into
masterfrom
fable/meshdb-livewire
Jul 11, 2026
Merged

feat(taxonomy): PLANT_ROOM n=4 + honest-zero air-well/storage + ACMV↔plant correlation (weak/none) — drains the meshdb-livewire backlog#42
red1oon merged 109 commits into
masterfrom
fable/meshdb-livewire

Conversation

@red1oon

@red1oon red1oon commented Jul 11, 2026

Copy link
Copy Markdown
Owner

Executes prompts/DISCWALK_PLANT_ROOM_INDUSTRIAL_TAXONOMY.md (Tasks 1+2) and carries the branch's accumulated post-#41 backlog to master per the user's 2026-07-11 directive ("push all so we have no backlog").

Task 1 — Plant Room n=2→n=4 (class-checked on full extractions): Hospital 5391 (4816 IfcDuctSegment + 575 AHU/fan/damper proxies), Clinic 1881 (incl. 2 chillers, 5 fans/pumps), HHS 1769, Terminal 644 full / 74 ARC-resident (+6 walls literally typed A_Wall_Ext_230mm_AHU_V1). config/building_taxonomy.yaml updated, both scopes labeled. W-BUILDING-PARTS re-run: 13/13 PASS. Hospital_3 confirmed a duplicate import, not a variant.

Task 1 — Air well & Storage: honest zero. Air well: zero name evidence in all 5 DBs; geometric route blocked — spatial_structure.size_z is a per-storey constant (verified by distribution), so tall-void candidates are GIGO. Storage: compiled room names are synthetic (≈ Level N Rk) so label search is structurally blind; no shelving classes anywhere. Yaml deliberately unchanged for both.

Task 2 — ACMV↔Plant-Room proximity: weak-to-none, NOT wired. Calibration falsifier passed (clustering locates Terminal's labeled AHU enclosure at 0.76m median). Correlation vs pre-stated rule: Terminal ratios 0.72–0.79 (weak), HHS 1.00–1.05 (none) → disc_walker placement untouched, honest negative recorded (scoreboard row 15).

Full findings appended to prompts/DISCWALK_PLANT_ROOM_INDUSTRIAL_TAXONOMY.md; ROOM_INTELLIGENCE_SCOREBOARD.md row 15 + building table refreshed.

🤖 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 11, 2026 12:02
…AGER-verified — both VISION-LOCK sentence-5 UI halves done

Independently checked the diff: new modeller/building_parts_outliner.js mirrors the existing
dw_instances_outliner.js extension-seam pattern correctly, bonsai_outliner.js untouched, real
leaf-id bug caught+fixed during verification (compound id broke the existing click-to-frame path).
Third Duplex Stairway data point (4, matching bim-compiler's own witness) narrows the earlier
DB-divergence finding to the Viewer's specific served copy being the outlier, not a universal
disagreement. Scoreboard row 15 bumped 8->9.
…Sonnet session

User's own live review of today's Modeller work: LOD confirmed no longer bad, but material
rendering still wrong (glass walls/windows not see-through, unlike the Viewer). Blocks adding
today's Building Parts Outliner screenshot to docs/ModellerGuide.md — "not fitting for the guide."
Also folds in a named UI quirk (Outliner panel collapse control not discoverable) per user request,
tracked rather than dropped. Delegated as a written spec, not fire-fought reactively mid-session.
…missing Viewer-side spec

User caught it live twice in one session: material-parity got a proper prompts/# after the first
correction, but the Find-panel screenshot chase (3 failed attempts to find the panel-open
mechanism) was still ad-hoc debugging inline in the MANAGER turn, not delegated. Hardened
prompts/MANAGER.md with the rule (stop after a second failed quick-check, write the spec instead
of continuing to guess) and wrote prompts/VIEWER_FIND_PANEL_PARTS_VERIFICATION.md so a dispatched
session picks this up with the 3 known dead-ends already named, not repeated.
…ng-parts+disc-walk threads, note guide-blocker specs
…-open blocker solved + real bug found

Root cause of MANAGER's 3 failed guesses: window.A never existed, A is a local closure
parameter aliasing window.APP. window.APP.openFindPanel('') works; so does the real-user
path (press 'f', per scene.js's own keyboard shortcut). Live-driven evidence captured
(2 screenshots, §-tagged console logs) confirming the Parts axis renders real Stairway(4)/
Plant Room(6) counts on Duplex from a fresh page load.

Byproduct finding, not fixed (out of this file's verification-only scope): PLANT_KEYWORDS'
bare 'vent' substring match false-positives on "Backflow Preventer" (4 of 6 Duplex "Plant
Room" hits are false positives) and the live Parts axis has no class gate, unlike
checklistReport()'s class-gated report. Also a 4th confirmed instance of the DB-snapshot
divergence landmine (root buildings/Duplex_extracted.db vs the actually-served
viewer/buildings/Duplex_extracted.db disagree on Stairway count, 2 vs 4).

PUSH PAUSE in effect — commit local-only, no push, no PR.

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

bim-ootb fix/modeller-render-material-parity @ 2fc3964 (local, unpushed —
push pause in effect): glass/window transparency threaded through from
elements_meta.material_rgba alpha (mirrors viewer/streaming.js's own
opacity gate), and the Outliner collapse button's discoverability fixed
(was functionally correct, just zero visual weight at rest). Both verified
in real headless Chrome against the real Duplex resident, no regressions
in existing suites. Guide unblocked.
Cherry-picked from agent worktree (40d0c2444) to consolidate onto this
branch. Documents the Find panel's open path, search/voice query box,
and all six axes incl. the new Parts axis. Screenshot placeholders only
(img/viewer/*.png), no images captured yet.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…g class-gate finding

From VIEWER_FIND_PANEL_PARTS_VERIFICATION.md's byproduct bug (found, not fixed there).
Row 15 now names both the substring-collision fix and the live-query class-gate fix
so they aren't lost before the follow-up session picks them up.

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

Bounded follow-up to VIEWER_FIND_PANEL_PARTS_VERIFICATION.md's byproduct findings
(substring false-positive + missing class-gate), ready to dispatch.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ocalhost-gap root cause logged

Session's own working file, not memory, per user's steer this turn.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ne + collapse-all button + Find-panel-highlight proposal

Follow-up to the earlier findings entry: the fix wasn't reaching the
user's actual test server (worktree vs shared checkout + stale SW
precache, both now fixed and merged into ~/bim-ootb). Added a real
Collapse All button. Documented 3 ranked options for the open "click a
higher-level row to highlight the section" question — not yet
implemented, needs user's pick given a real collision risk with the
existing disc-walk-on-click wiring.
Lane sessions now self-review and administer their own follow-up prompts.
User's own words captured verbatim so this doesn't drift back silently.

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

Documents the select-then-collapse conflict found and resolved (auto-
expand-on-pick vs manual collapse-toggle, can't coexist on one click),
the final select-only design, and live verification against the user's
actual port-8080 server.
…ects stale marathon framing

Investigated "the DiscWalk task" per user request. Found the 2026-07-10
marathon memory's framing is stale: the Z-datum bug it called "the actual
next real gap" is fully done and merged in BOTH repos (bim-compiler PR
#40, bim-ootb PR #726 squash 3d09ad6 — confirmed already an ancestor of
local main, correcting PROGRESS.md's "open, not merged" note) — as is
fix/dw-rot-units (PR #723). Only 3 small, already-verified, no-conflict
branches remain genuinely unmerged (PRs #722/#724/#725), plus one real
open question: the guide-screenshot camera bug from the same marathon,
never diagnosed. Scoped a Fable session: re-verify the 3 branches fresh
(no merge/push — Sonnet reviews before any of that), then chase the
screenshot bug's root cause. Named the stale-radians migration question
as explicitly out of scope (separate, harder design task).
prompts/FIND_PANEL_PLANT_ROOM_GATE_FIX.md Bug 1 (bim-ootb port ported byte-identical
to viewer/navigate_find.js + modeller/building_parts_outliner.js, same session).

build/building_parts_taxonomy.js's checklistReport() already class-gated PLANT_ROOM
correctly via config/building_taxonomy.yaml (Bug 2 doesn't apply here) — only the
bare LIKE '%vent%' substring match needed fixing. Real-data-driven: surveyed 59
distinct element_name templates across 5 buildings before picking the fix (token
split on delimiters + camelCase, keyword-as-token-prefix match).

Verified: Clinic 1890->1881 (9 "Backflow Preventer" false positives dropped, all
real duct/fan/pump/chiller/vent rows kept). Terminal 74->74 unchanged (no
true-positive regression). witness_building_parts_taxonomy.js 13/13 PASS, unchanged.

PUSH PAUSE stands in this repo per CLAUDE.md standing directive — local commit only.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… Parts/glass section

Cherry-picked from agent worktree (a77fcc2b0). Replaces the 5 Find-panel placeholders
with real Playwright captures off bim-ootb main (f0f0994), corrects two prose details
the source-only draft got wrong (search placeholder text, Navigate drawer row name).
Adds ModellerGuide.md coverage for Building Parts Outliner + glass transparency, both
previously undocumented. Two new findings flagged in-doc: NL-query hint never renders
live (CSS gating bug), Parts axis Plant Room false-positive (tracked in
FIND_PANEL_PLANT_ROOM_GATE_FIX.md, not duplicated here).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…s already built, only the witness re-run + report remain

Found /tmp/wt-verify-{grid-tilt,oracle,dwprobe} already exist with the
target branches merged into fresh checkouts off current main (dwprobe hit
a real conflict since my last check, resolved KEEP-BOTH). None have a
logged witness re-run yet — that's the only remaining step before a
Manager-scoped session can make the merge call. Noted so the next
dispatch doesn't redo the merge work.
…ppended (3 PRs re-verified, guide-shot bug diagnosed+fixed)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…result, 2 merged 1 held

#722 and #725 (as #741) merged after fresh re-verification. #724 held — real regression
in the KEEP-BOTH conflict resolution (SampleCastle MEP disc node now absent from UI,
was 8/8 historically, now 6/8), needs a fix, not Manager's to patch.

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

Independently verified Manager's flagged "regression" on fable/dwprobe-dedup
(#724): ran witness_modeller_disc_walk.js directly against pristine
origin/main (9b62c4f, zero relation to the branch) and reproduced the
IDENTICAL B5/B6 failure. Conclusive — the branch/merge isn't the cause.
Root cause: SampleCastle_ARC.db is ARC-only (0 MEP rows, confirmed via
direct SQL), a data-vs-witness staleness, not a code regression. #724
is clear to merge on the same terms as #722/#725. Scoped the actual fix
(retarget or honestly skip B5/B6, fix the uncaught-rejection crash path)
as its own small follow-up rather than blocking the branch verification
task on it.
… merged

My earlier "real regression" call was wrong — independently re-verified Sonnet 1's
counter-finding (pristine main reproduces the same failure, unrelated to the branch)
before merging. Root cause was stale SampleCastle_ARC.db data, not the KEEP-BOTH merge.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…/B6 retargeted to Clinic, 8/8 green (local-only per push pause)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ata, post-fix)

The Duplex screenshot predated bim-ootb PR #740/#742 (word-boundary + class-gate
fix) and showed the pre-fix false-positive behavior. Replaced with a real capture
on HHS Office (complex-class): Stairway(20), Lift Shaft(3), Plant Room(1769) all
visible at once, and updated the caveat note now that the fix is landed.

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

DiscWalk-strengthening + Plant Room industrial taxonomy expansion, next step on
MANAGER.md's own "Flag on the Hill" mission. Grounded in live HHS Find-panel
verification this session (real 1769-match Plant Room evidence, class-checked
not just LIKE-counted). Terminal named explicitly as the calibration anchor
(real professional project, not public-sourced like the other buildings).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
# Conflicts:
#	PROGRESS.md
#	prompts/MANAGER.md
#	prompts/Modeller/DISC_Walker/VIEWER_FIND_PANEL_ROOM_ACCURACY.md
#	prompts/ROOM_TYPE_TEMPLATE_CLASSIFIER.md
#	scripts/compile_rooms.py
… investigation only

User spotted geometry chaos + no material/LOD400 on the live ModellerGuide's
walker-fixtures screenshot. Traced to _renderDiscWalk in modeller.html (confirmed
a separate, flat disc-tinted material path from today's ARC-seed glass fix, and
confirmed placement x/y/z comes straight from disc_walker.js with no clamping in
the renderer) before writing the spec, so the dispatched session isn't starting
from a guess. Explicitly investigation-only, gates whether this is a render bug,
a disc_walker placement-data defect, or a screenshot framing illusion, and
whether it's ELEC-specific or a systemic DiscWalk-baseline risk.

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

Investigation only (per file scope). Verdict: pre-existing cat[0]-fallback bug in
_commitDiscWalk (folded unmatched fixtures as the catalog's first item -> full-height
Column per outlet), already fixed on bim-ootb main (670bf0f, 2026-07-10, §LIVEWIRE).
Deployed docs/img/modeller/walk-fixtures.png predates the fix by 2 days (bim-compiler
3ec99e8, 2026-07-08) -- stale screenshot, not a live defect. Confirmed via live
puppeteer probe on current main: ELEC/PLB/FP/ACMV z-values all sane within envelope.
Systemic (any discipline), not ELEC-specific, but moot -- #722/#741 density/clash
witnesses already postdate the fix. Named follow-up: re-capture the guide screenshot
(separate docs task, not actioned here).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…checked) + honest-zero air-well/storage + ACMV↔plant correlation measured WEAK/NONE

DISCWALK_PLANT_ROOM_INDUSTRIAL_TAXONOMY.md Tasks 1+2. W-BUILDING-PARTS re-run
13/13 after the yaml update. Air well: geometric route blocked (size_z is a
per-storey constant, verified by distribution). Storage: synthetic room names
make label search structurally blind; no shelving classes. ACMV proximity:
calibration falsifier PASSED (AHU-labeled walls 0.76m from found cluster);
correlation 0.72-0.79 (Terminal) / 1.00-1.05 (HHS) vs pre-stated rule ->
weak-to-none, disc_walker placement NOT modified.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@red1oon red1oon merged commit f4cdb42 into master Jul 11, 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