Design Memory Platform

Technical diary

20 records · 11 decisions · 1 moments · 2 features · 6 tickets
D111 newadoptedPanelDecision03 Jul 2026

Panel v2_3: the working-loop panel (batched UX amendment)

The batched amendment under the D107 sanction-then-batch protocol, covering the rapid UX rounds Miles drove by live testing (addon v0_69 through v0_72, mock-up v2_2/v2_3 in lockstep): (1) Stage Size promoted from the buried Parameters sub-tab to the foot of GAAD Lab directly above Reset - matching the working flow Reset -> pick Stage Size -> Initial Generation; always editable. (2) LIVE STAGE PLATFORM PREVIEW: changing Stage Size between runs rebuilds the empty platform to NxN immediately (pure-mesh, no bpy.ops in the update callback, T006 safe pattern, generator-parity layout; only Stage_N_Surface objects are swept - Navigator lineage surfaces are never touched; mid-run the change is a no-op until the next Initial Generation). (3) Design Language quick-select at the top of CREATE: Primitives, then Garden Room - same property as the old selector. (4) Orthogonal moved to the bottom of Evolution Rules with the terse label 'Orthogonal' (degrees text removed). (5) The truncated 'Choose the object set...' header line removed; toggles stand alone. (6) Parameters emptied. (7) The DESIGN LANGUAGE section DELETED: after the above it held a duplicated selector, four unbuilt placeholders and one functional leaf - Objects - which is rescued into CREATE under the quick-select, contract view intact; non-PAL languages show 'No object set for this language yet.' Manhattan (MAL) loses its panel presence until built; the DL data is untouched (the panel is a view onto the DL, D102). This amendment RETIRES the v1_0-era principle that non-functional leaves stay visible in angle brackets - the reflow's rule is that built things earn panel space. Static check v0.4 expectations updated to match.

D112 newadoptedProcessDecision03 Jul 2026

Development efficiency: GAAD Skill, bundle automation, session-per-bundle

Direction agreed with Miles after he observed sessions slowing: (1) a GAAD SKILL - a durable skill file encoding the standing rules (four-point version check, JSON -> MD -> HTML regeneration order, bundle lockstep and naming, no em dashes, record schemas, zip procedure) so every session starts with the rules loaded instead of re-taught from memory; (2) BUNDLE AUTOMATION - a tools script (cut_bundle.py) performing version bumps, full regeneration, static check, lockstep verification and zip in one command; (3) SESSION-PER-BUNDLE - start each bundle in a fresh conversation, with HANDOVER.md plus CURRENT_ACTIONS.md as the context transfer (long conversations are the main cause of slower processing and stale-context errors); (4) evaluate CLAUDE CODE for working directly in the local Development folder and running the static check against real Blender (blender --background) - runtime testing this chat environment cannot do. Skill + automation build is the centrepiece of an upcoming bundle. Artifacts were considered and skipped: the Records Hub already serves that role, offline and versioned.

D113 newadoptedDesignDecision03 Jul 2026

Panel lean pass: remove Garden Room, the Design Language quick-select, and dead properties

In the working-loop panel (addon v0_73) remove the Design Language quick-select (Primitives / Garden Room) and the Garden Room leaf. Primitives is the only built language, so the Objects picker shows directly under CREATE. Remove three scene properties left registered but never drawn since earlier section deletions: gaad_show_design_language, gaad_dl_subtab, gaad_show_mutation. Keep the gaad_design_language enum (with GARDEN_ROOM and MANHATTAN) in registration as the future GRAL / MAL hook; it simply leaves the panel until a second language is built.

D114 newadoptedProcessDecision03 Jul 2026

Integrity Check stays off the generation path; STATUS carries integrity and generation-time readouts

A brief experiment (addon v0_74) ran a silent Integrity Check after every generation; it was removed (v0_76). Generation writes JSON only and renders no HTML - the Integrity Check renders on demand from its button (JSON-now, render-on-demand). The STATUS panel gains a readout of the last Integrity Check result (pass / fail), updated on load and on the button, and a live generation-time readout in seconds after each run (addon v0_78).

D115 newadoptedDesignDecision03 Jul 2026

Stage id labels are an on-demand panel action, not generator-built

The generator no longer builds the per-stage id labels (generator v0_36); they were the expensive per-stage bpy.ops.text_add (one extruded text object per stage, each forcing a scene re-evaluation). Labels are now a VIEW > Show / Hide Stage Labels toggle (addon v0_76) that builds font-curve labels for the current stages on demand with no bpy.ops, and removes them with the T006-safe pattern. Labels do not persist across generations.

D116 newadoptedGeneratorDecision03 Jul 2026

Per-stage generation geometry is bpy.ops-free (from_pydata surfaces and joined buildings)

Every per-stage object the generator builds is now raw mesh via from_pydata, with no bpy.ops in the per-stage loop. The buildings were already joined-mesh (D106); the stage surface is converted from bpy.ops.primitive_cube_add + transform_apply to from_pydata (generator v0_38), matching the addon preview's geometry. The only remaining bpy.ops per generation are one-time (champion frame, title panel, view framing) and do not scale with grid size.

D117 newadoptedProcessDecision03 Jul 2026

Session capstone: test-driven panel-lean and generation-performance pass (bundle 0_113)

A single working session took the addon from v0_72 to v0_78 and the generator from v0_35 to v0_38 through a tight build-test-fix loop with Miles. The day's design decisions, captured individually, were: lean the panel to only built controls (D113); keep the Integrity Check off the generation path with STATUS readouts instead (D114); make stage labels an on-demand panel action (D115); and make per-stage generation geometry bpy.ops-free (D116). Live Blender testing drove three tickets to fixes: 9x9 generation speed (T012, ~9s down to ~4s and lower), empty-preview clipping (T013), and first-run default-object clutter plus an unframed view (T014). The D112 automation - cut_bundle.py, the validator parity gate and D105 orphaned-file WARN, and the static-check Blender-runtime layer - was completed and used to cut the bundle. This record is the single index for the day; D113-D116 and T012-T014 hold the detail.

D118 newadoptedGeneratorDecision03 Jul 2026

Shared shape materials and batch datablock handling (generator v0_39)

The generator uses ONE shared material per primitive type for the whole GAAD world (GAAD_Cube_Material, GAAD_Pyramid_Material, GAAD_Dome_Material, GAAD_Wedge_Material, GAAD_Cylinder_Material), created once and reused by every object on every stage across generations, replacing one uniquely named material per primitive. Alongside it, the remaining per-primitive and per-datablock Python costs are removed: material_index is set with mesh.polygons.foreach_set, scene clearing collects every object across all stages into a single bpy.data.batch_remove (the T006-safe pattern) and purge_orphans batch-removes per pass, cos/sin are computed once per primitive rather than per vertex, unit geometries are cached, and the replay JSON is written at mm precision (3 decimals) with indent=1. The JSON remains the full per-object record including colour; stage surface materials are unchanged.

D119 newadoptedInteractionDecision03 Jul 2026

Rapid Stage Select shipped as an additive toggle (F022 v1, addon v0_79 + generator v0_40)

F022 is built as 'Rapid Stage Select': a toggle button in CREATE directly under Next Generation. While ON, clicking any object carrying gaad_variant_id breeds the next generation from it immediately, firing the SAME gaad.generate operator - Rapid adds a trigger, never a second breeding path. Next Generation keeps its exact existing behaviour (Miles's explicit call: keep current functionality, add the new button). Mechanism: a bpy.msgbus subscription on the active object, deferred one tick via bpy.app.timers with a window override, guarded by a busy flag, the Navigator-scene check, and the generator's own deselect-after-build. Re-armed on file load. Companion generator change (v0_40): when the toggle is ON, end-of-build framing raises clip_end but SKIPS the view_all recentre, so the user's viewpoint survives every breed; toggle OFF keeps the D034 reframe. The addon bump also carried the stage-label position fix (labels stacked at the world origin because v0_38+ from_pydata surfaces keep their origin at (0,0,0); the builder now reads the stage centre from the world-space bounding box).

D120 newadoptedArchitectureDecision03 Jul 2026

Stage Size selector: five square options (60/100/150/200/300 m)

The WORLD panel gains a Stage Size selector alongside Grid Size. Stage Size is a five-value enum of square footprints: 60, 100, 150, 200, 300 metres. Gutter is fixed at 18% of stage size so the visual proportion holds at every scale (pitch = size + gutter). The 85 m Rebirth default is retired; the new default is 100 m - the closest urban-block choice on a clean number, matching the Chicago Loop scale. Rectangular stages (Manhattan-style ~80 x 275 m blocks) are captured as F023 for a later build - they touch the generator, Navigator, camera framing and spec together and deserve their own session. The old dropdown called Stage Size is renamed Grid Size (it was always the NxN grid selector, not physical size). Locked to Initial Generation with the other WORLD controls.

D121 newadoptedPanelDecision03 Jul 2026

EVOLVE and GENERATE panel groups; scene/HUD name rename OPEN

The seven action buttons at the base of the WORLD section are lifted out to TWO new top-level always-open panel sections, peer with WORLD / EVOLUTION / VIEW: EVOLVE (Initial Generation, Next Generation, Rapid Stage Select, Reset World) and GENERATE (Generator, Navigator, Navigator Report). Always-reachable whatever else the user has collapsed - matches the fact that these are the busiest controls. Rests on the same panel grammar as WORLD/EVOLUTION (D110 EVOLVE stance): world identity, evolutionary pressure, working actions, navigation, all named for what they actually do. Reset World stays with EVOLVE because reset IS an evolution action (resetting the world's evolution). SUB-QUESTION LEFT OPEN: whether the Design Studio scene (D058) and the corner HUD title should also rename to 'Generate' to align with the panel section - Miles's call: leave both unchanged for now, capture as an open decision to revisit.

P048 VisionMoment03 Jul 2026

Rapid Stage Select works: selection becomes the breeding act

First live test of Rapid Stage Select (F022, addon v0_79): with the toggle on, clicking any object on a stage breeds the next generation from it immediately - Miles's click-click-click loop, running on the v0_39 generator at 0.3s per generation at 9x9 with ~6,000 objects. Miles's verdict on the day: the feature 'works v well and is super fast', and crucially it is 'not distracting - no looking away at the panel - it keeps the human engaged'. Pick and breed are one gesture; the eye never leaves the design. A robustness gap surfaced in the same session (rapid stopped firing after a Navigator visit or a platform reset - ticketed as T015), but the concept verdict was immediate: gold.

F023 openArchitectureFeature03 Jul 2026

Rectangular stages (Manhattan-style)

Add rectangular stage footprints as an option alongside the square presets (D120). Reference size: Manhattan avenue-to-avenue block at approximately 80 x 275 metres (roughly 260 x 900 feet). Rectangular stages introduce genuinely different urban DNA: long thin blocks generate a different feeling world from square ones. Scope: touches the generator (stage geometry, per-stage layout, object placement rules, label position), the Navigator (stage previews and layouts), the camera framing (aspect ratio and view-all behaviour), the panel spec (stage-size selector grows a rectangular option) and the D110 grammar (world-shape choice, locks with the square-size selector). Deserves its own session and its own D### when built. Miles: 'just add as new feature'.

F024 next 7 daysNavigatorFeature03 Jul 2026

Evolution Tree showing forward AND backtrack lineage

The Navigator today (gaad_tree_v0_6.py) shows the forward lineage - the world as it was evolved. When Backtrack (F006) ships, the same tree needs to show BOTH directions from any moment: what was bred forward from it AND what alternative branches were rewound from. Reads as a directed graph rather than a straight chain - a design's true genealogy. Scope: touches the tree renderer, the Records data model (branch links from Backtrack events), the Navigator report, and how the Generator restores a branched state when a designer clicks a node. Related to T016 (Navigator materials + grids) - would be sensible to fix both in one Navigator pass. Own session, own D### when built.

T011 highclosedGeneratorTicket03 Jul 2026

Generator silently degraded 6x6..9x9 grids to 3x3

Fixed in generator v0_35 (bundle 0_111).

T012 highclosedGeneratorTicket03 Jul 2026

Next Generation slow at 9x9 (~9s)

CLOSED, verified in Blender 03 Jul 2026. Label fix took ~9s to ~4s (v0_36, D115); surface off bpy.ops (v0_38, D116); then at a heavier population (50-100 objects per stage) the time rose to 12.8s at ~3,488 objects - root cause one uniquely named material per primitive, ~3,500 created and ~3,500 purged one at a time per click. Generator v0_39 (D118: shared shape materials, foreach_set, batch_remove, cached geometry, per-primitive trig) - measured result 0.3s at 9x9 with 6,041 objects. ~40x faster than the 12.8s baseline at nearly double the population.

T013 mediumopenInteractionTicket03 Jul 2026

Empty stage-platform preview clips at large grids (9x9)

Fixed in addon v0_75: the view buttons and the Stage Size preview raise the viewport far clip to suit the grid, raise-only (same max() pattern as the generator, so the two never fight). Awaiting Miles's verdict.

T014 mediumopenInteractionTicket03 Jul 2026

First-run scene shows default Cube/Camera/Light and view not framed to all stages

Fixed in generator v0_37 and addon v0_77: remove_default_objects() strips the startup Cube/Camera/Light at generation and in the preview (exact default names only, never a GAAD object; the generator provides its own GAAD camera/sun); frame_all_views centres the view (view_all center=True), and the preview frames the grid by setting region_3d directly (no bpy.ops). Awaiting Miles's verdict.

T015 highclosedInteractionTicket03 Jul 2026

Rapid Stage Select stops firing after a Navigator visit or Reset GAAD Platform

Fixed in addon v0_91 (D125): the Rapid msgbus watcher is re-armed through one shared _gaad_rapid_rearm() on undo_post / redo_post, at the end of Reset GAAD Platform, on file load, and when the toggle is switched ON (a manual recovery); the busy flag is timestamped and self-clears after a 2 s timeout so it cannot wedge. Runtime-confirmed by Miles on 06 Jul 2026 - Rapid survives Navigator visits, Reset and undo/redo. Closes the highest-priority open interaction defect.

T016 mediumopenNavigatorTicket03 Jul 2026

Navigator: grids visible through stages and materials not honouring Colour mode

First observed 03 Jul 2026 in bundle 0_115 while testing the addon v0_80 / generator v0_42 panel rebuild. Two related issues showed up in the Navigator scene (gaad.tree operator, gaad_tree_v0_6.py) that had been hidden until the Colour Grey mode (D118, D120 era) started producing worlds that looked right in the Generator: (a) MATERIALS - stages in the Navigator render in the D041/D042 aqua Brand cube colour regardless of the world's chosen Colour mode (Grey world in the screenshot shows aqua Navigator). The Navigator's stage rebuild is not reading scene.gaad_colour_mode, or is not using the shared shape materials introduced in generator v0_39/D118. (b) GRIDS - the infinite Blender floor grid and the stage-pitch grid both show through and between stages in the Navigator, breaking the clean composed look the Navigator had before. Framing and background may also need a look. Both issues live in Scripts/gaad_tree_v0_6.py; the Generator scene is unaffected. Fix scope for a later session: read the Colour mode when building Navigator stage materials, use the same GAAD_<Shape>_Material_<Brand|Grey> naming so materials are shared with the Generator; hide the floor grid and pitch grid in the Navigator scene (or draw a bounded ground plane behind the lineage). UPDATE 05 Jul 2026: the COLOUR half is fixed - tree v0_7 uses the shared per-shape mode materials from gaad_palette.py, so the Navigator honours the Brand / Grey choice and the addon's live recolour covers Navigator objects. The through-grids half remains open.