Owner directive 2026-07-16: verify the K1 band-hall numbering assumption.
Decisive evidence: 832 electrical circuit labels (P{panel}-{hall}{zone}-{no})
in the trench drawing, zero exceptions: band1=hall5(165) band2=hall4(168)
band3=hall3(168) band4=hall2(168) band5=hall1(163) => band n = hall (6-n).
The previous assumption (band n = hall n) was WRONG - only hall 3 matched by
luck. Mirror features in official JPGs (notch corners, exterior entrances)
independently agree.
- V67: delete all K1 measured rows (old mapping) and reseed with corrected
generators (trench 875, pillars, obstacles, K1 exits). Assembly strips the
V61 y-flip UPDATE (would double-flip) and the global obstacle DELETE
(would wipe K2 rows)
- Swap DWG-tab underlays hall1<->hall5, hall2<->hall4
- All 5 generators now canonically map band = 6 - hall
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Extract trench channels from original 1F site plan DWG (same origin as
hall frames) via streaming DXF tag parser that walks xref BLOCK contents
and resolves INSERT-chain transforms (missed by top-level iteration,
which caused the earlier 'no trench layer in K2' misjudgment).
- Power trunk plan (E3-59~69) used as cross-validation only: its util-line
xref is a cropped copy (x<=509.2m) with ~3.5m phase offset; angle
clusters (0/+-11/-12 deg) confirm frame rotation alignment.
- Generator tools/cad/extract_trench_seed_k2.py: frame rotation, horizontal
clip (Liang-Barsky), >=30m runs, 1.5m twin-line merge, 6m point sampling
(V61 convention). H6 9 / H7 H8 H9 H10 14 channels each, is_assumed=false.
- All halls H1-H10 now have measured trench (PLANNING R4 resolved).
- Docs: cad-extraction.md V66 section, OWNER_FEEDBACK log.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Owner directive 2026-07-15: extract pillars and make auto-placement avoid them.
- tools/cad/extract_pillar_seed.py: K1 pillars from CAD layer 4-COL-H
(cross-validated against official drawing dims 54/117m south wall pillars);
K2 H7-H10 from official drawing dimension annotations (one interior midline
pillar each, dia 2.3m); H6 not seeded (no source - recorded as limitation)
- V62: hall_pillar table + 74 seeds; also corrects V61 trench y-axis
(RT points were seeded in CAD-y without the top-of-drawing flip - now 63-y,
generator fixed as the canonical form)
- Engine: autoGenerate reserves pillar radius + 0.6m buffer, packing skips
overlapping cells; HallInfo.pillars contract extension (additive, NON_NULL)
- Canvas: structure layer renders pillar circles (editor passes hall pillars)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Worker published only Redis pub/sub events; backend status stayed QUEUED
forever (callback endpoint never called — gap masked by earlier Gemini 429).
- worker.py: POST /api/internal/render/callback (X-Worker-Token) after each
job with imageUrl=/renders/{key}, schemaHash, modelVersion, errorMessage
- backend: serve /renders/** from RENDER_OUTPUT_DIR + security permit
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>