Design Memory Platform

Decisions

157 decisions · 10 rebirth · 14 evolved · 87 new
D161 adoptedProcess12 Jul 2026

No addon release without tracing the change against the assert contracts

Before any addon/script release, the Specification Owner must (1) trace the change against gaad_assert.py's expectations - the asserts are platform CONTRACTS (e.g. 'Reset leaves GAAD_World absent'), not just tests; (2) name which Validate Scripts steps the change touches, so Miles runs those first; (3) Miles runs Validate Scripts (F030) as the release gate - green before anything else builds on the change. The empty-stages-on-Reset failure (v1_013/014, 18/26 fail, reverted in v1_015) was catchable by reading the Reset assert alone.

Rationale & options

Rationale: The AI seat cannot run Blender, so the proving run only executes on Miles's machine. Four versions shipped tonight that Validate would have failed instantly. D135 built one assert library for exactly this; the discipline of reading it pre-release was missing. 24 seconds of Validate beats an evening of cascade debugging.

D160 openLanguage12 Jul 2026

TWAL tower count vs grid size needs resolution

OPEN - flagged for resolution, not yet settled. TWAL's tower count (target 40 in the standalone) and the platform's stage grid size (3x3, 6x6, NxN) are currently independent, so a dense tower target on a large grid produces very cluttered stages, and a small grid can under-fill. The relationship between how many towers a TWAL city holds and the stage/grid size it renders into must be defined - fixed target, grid-relative scaling, or a per-stage density rule.

Rationale & options

Rationale: Surfaced when TWAL ran through GAAD at 6x6 (D158): the 40-tower city per stage read as clutter across a large grid, exactly the 'development zone may become cluttered' concern from the 1994 thesis (Fig 3.10). Density was accepted for now (Miles, 12 Jul), but the tower-to-grid relationship is unresolved and should be decided before TWAL evolution work continues.

D159 adoptedProcess12 Jul 2026

Session diary lives at estate root (GAAD/6_Diary) - retires HANDOVER rule 7

The session diary pair (gaad_diary_YYYYMMDD.md + gaad_diary_technical_YYYYMMDD.md) lives in GAAD/6_Diary at the local estate root, not inside any working folder or the main bundle. This retires HANDOVER rule 7 ('diaries travel with worksets'): a session now spans many languages and platform areas, so the diary's scope is the whole session, and its location must match that scope. The bundle no longer carries a diary folder; gaad_home.py no longer lists one.

Rationale & options

Rationale: Rule 7 was written when a session was one workset (one fenced language). That is no longer true - today's session touched ARAL, housekeeping, panels, folder structure and TWAL. Filing the diary inside one language folder miscategorised a whole-project record.

D158 adoptedLanguage12 Jul 2026

TWAL graduated - fence lifted (D144 closed)

TWAL is graduated into the GAAD platform and verified live: its connector (twal_connector_v1_001.py) ships in Scripts/ and its prototype in Prototype/, so the GAAD generator finds the connector and TWAL generates THROUGH GAAD (confirmed in Blender by Miles, 12 Jul 2026). TWAL moves from the addon's Wired row to Live (addon v1_005); PRAL and TWAL are both Live. The D144 ringfence is lifted. The standalone TWAL in 2_Working is now superseded by the graduated copy - one source of truth is the bundle.

Rationale & options

Rationale: TWAL reached full platform parity on 09 Jul (24/24 validate). Graduation was held until a through-GAAD generate was proven, not assumed - the honest bar for lifting a fence. Confirmed working, so banked.

D157 adoptedGALF12 Jul 2026

Languages compose by reference - separation of concerns is not isolation

Qualifies D154. A language must not mix concerns inside its own file, but languages are expected to COMPOSE by reference where scales or concerns nest: one language invokes another as the authority on that concern, and the relationship is declared, never smuggled. Worked example (Miles, 12 Jul 2026): MHAL owns the grid, blocks and urban grammar; when a block needs buildings, MHAL uses TWAL for the building rules rather than growing its own. The plan does not design the buildings, it commissions them. Composition relationships are declared in the language files and will be carried at Connector level when cross-language invocation is built. Settled by Chief Architect, 12 Jul 2026.

Rationale & options

Rationale: D154's prohibition alone could read as isolation. Composition is a positive rule of its own: it keeps each language the single honest authority on its concern while letting the family build at every scale - and it matters at Connector level, where cross-language invocation will need declared relationships to ride on.

D157 adoptedGALF12 Jul 2026

A Language Seed is behaviour, not code

The 1994 AutoLISP listings (A6, A16, A17) will not be transcribed into GAAD. A Language Seed is captured as published BEHAVIOUR - primitive, rules, gene semantics and printed outputs - and the rebirth rebuilds fresh against those replay targets. Applied first to MSc 2.4: the seed source (gaad_msc_2_4_source_v0_001) holds the behaviour; aral_prototype v1_002+ rebuilds it in Python/Blender. Miles: 'we will do so much better than AutoLISP.'

Rationale & options

Rationale: Generalises to every future seed, including ones where no code ever existed (a canvas, an animation). The behaviour is the language; the implementation is the era.

D156 adoptedProcess11 Jul 2026

Standing rules - diary pair, UK clock, HTML-not-JSON

Three standing rules confirmed: (a) every handover session produces the diary pair (gaad_diary_YYYYMMDD.md personal + gaad_diary_technical_YYYYMMDD.md) into the workset diary/ folder, D149 names; (b) all dates/times use Miles's UK clock (Europe/London), established at chat start, never the AI session's clock; (c) structured artefacts (language files, records, specs) are presented to Miles as brand-styled HTML, not raw JSON, unless he asks for JSON.

Rationale & options

Rationale: Captured after each was needed in-session 11 Jul 2026. Written into HANDOVER and SKILL.md.

D155 adoptedConventions11 Jul 2026

s-notation reserved for GALF contract sections

The s-prefix notation (s1 to s18) refers ONLY to the 18 GALF contract sections. Research and experimental content (x_ keys) never uses s-notation; it is tagged x. Applies to all language-file and contract renders.

Rationale & options

Rationale: Keeps 's5' unambiguous - always GALF section 5, never a research block. Matches how the GALF spec refers to its own sections.

D154 adoptedLanguages11 Jul 2026

ARAL born - the art language; languages do not mix

ARAL (Falling-free art language) is created as GAAD's language for art, split from the PRAL prototype line at v1_010. Gravity (F034) and the sphere migrate to ARAL; PRAL resets to its five 1994 primitives and the ground (pral_prototype_v1_011). ARAL starts with two orientation-free solids (cube, sphere). Principle: a language does not mix concerns - architecture and art are separate languages.

Rationale & options

Rationale: Miles: 'this does not mix languages'. ARAL will have a life of its own, a Latham-lineage generator the ambition. Version lines restart per language (D149).

D153 adoptedConventions11 Jul 2026

Dimensional standard - metric units and precision

Metres (m) and square metres (m2) are reported to 2 decimal places (10.95 m, 864.00 m2). Lengths below one centimetre are reported in whole millimetres (6 mm, not 0.006 m). Verified precision finer than a whole millimetre rounds to whole mm (44.5 mm to 45 mm). Ratios, counts and non-length values are exempt. The unit is always stated.

Rationale & options

Rationale: Consistent units make cross-language comparison and generation reliable and stop both false precision and lost precision. Adopted into GALF s18 (D152). Contributed by Miles.

D152 adoptedGALF11 Jul 2026

Honest Knowledge - GALF s18 Knowledge Status adopted

GALF gains section 18, Knowledge Status (Recommended): a seven-level evidence vocabulary (VERIFIED, DERIVED, SUPPORTED_INTERPRETATION, APPROXIMATE, EXTRACTABLE, UNVERIFIED, UNKNOWN), a per-parameter provenance schema (name, value, units, evidence_status, source, date_verified, verified_by, notes), and the dimensional standard. The Confidence field is held OPEN. The 7-level vocabulary and MHAL's 4-level V/C/P/I coexist by seat decision. GALF grew 17 to 18 sections.

Rationale & options

Rationale: Generalises Honest Geometry (fake no geometry) to Honest Knowledge (fake no confidence). Proven in FWAL and MHAL before adoption. GAAD's first contract amendment through the full three-seat process (D140). Ratified by all three seats 11 Jul 2026.

P059
D151 adoptedWebsite11 Jul 2026

Language status display labels - DORMANT displays stored platform_status unintegrated; ACTIVE is earned

On the website, a language tile or card displays the friendly label DORMANT wherever the language file stores platform_status = unintegrated, and ACTIVE where it stores platform_status = active. Stored values never change to match display (GALF v0.005 s5.2: friendly labels may display, stored values may not drift). The prior tile label 'genome' is retired - it was not a status from any file. A tile flips to ACTIVE only when the language earns platform_status = active under D147 (a working Connector); TWAL flips first, at graduation.

Rationale & options

Rationale: The Architecture page promises status shown honestly, straight from each language file - 'genome' broke that promise. DORMANT is the display face of the stored vocabulary, permitted explicitly by the GALF v0.005 friendly-label provision, and reads better to a first-time visitor than 'unintegrated'. Settled by Chief Architect + Specification Owner, 11 Jul 2026.

P057
D150 Miles, on discovering the CEL field live in stage files the same day TWAL connectedopenPlatform10 Jul 2026

Standalone .cel files on disk - the 1994 gene bank as a folder (OPEN)

OPEN - held by Miles, 10 Jul 2026. Question: should the CEL envelope (D148), which currently lives only as the 'cel' field inside TWAL stage files, ALSO be written as standalone .cel files on disk - a gene bank folder echoing the 1994 pattern (four .CEL files per visit, visit counter in filename, e.g. 7_2_BL.CEL)? Candidate shape if adopted: an export verb or automatic per-champion write, lowercase 1_-era names under D149. Not scheduled; decide when the TWAL road quietens.

Rationale & optionsOptions considered
  • W
  • r
  • i
  • t
  • e
  • .
  • c
  • e
  • l
  • f
  • i
  • l
  • e
  • s
  • p
  • e
  • r
  • c
  • h
  • a
  • m
  • p
  • i
  • o
  • n
  • ;
  • e
  • x
  • p
  • o
  • r
  • t
  • -
  • o
  • n
  • -
  • d
  • e
  • m
  • a
  • n
  • d
  • v
  • e
  • r
  • b
  • ;
  • k
  • e
  • e
  • p
  • C
  • E
  • L
  • e
  • m
  • b
  • e
  • d
  • d
  • e
  • d
  • o
  • n
  • l
  • y
  • (
  • s
  • t
  • a
  • t
  • u
  • s
  • q
  • u
  • o
  • )
  • .

Rationale: The CEL data exists and replays correctly from inside stage files, so standalone files are sentiment plus interoperability rather than necessity - but the 1994 echo has real narrative and archival value. Held rather than decided.

P057
D149 Miles + Specification Owner working session, 10 Jul 2026 (queued from the TWAL wiring day)adoptedStandards10 Jul 2026

Filenaming and folder standard, second edition - lowercase, underscore-only, three digits, the 1_ era

Supersedes D031's naming and folder sections; applies to the CURRENT ORBIT (TWAL Development set) and everything new - legacy files keep their names until naturally re-versioned, no mass rename ever. Rules: (1) FOLDERS: a cut is '[project] development N_NNN\' with the .blend and start_here at root, scripts in scripts\, plus per-need languages\ / spec\ / prototype\ / generations\ / reports\; the zip name equals the folder name. (2) VERSIONED FILENAMES for anything needing side-by-side versions or rollback: scripts, specs, language files, prototypes, connectors, test runners. (3) FIXED NAMES for contracts (imported/consumed by exact name, e.g. gaad_palette.py, lineage.json), current-state files (current_actions, handover) and records (the bundle track versions the set) - version lives inside the file. (4) Generated reports in caps with owner prefix (TWAL_CONNECTOR_REPORT.txt). (5) All-lowercase filenames - explicitly including the gaad prefix: new-era documents are gaad_twal_language_v1_001.md, not GAAD_...; D032 (GAAD always capitalised) governs prose, labels and output, never filenames. (6) Characters: a-z, 0-9, underscore only; the single dot belongs to the extension; dates as 2026_07_10; versions ALWAYS underscore form, dotted versions permitted only inside headers and prose; the version is ALWAYS the LAST element of the name, immediately before the extension (gaad_twal_language_v1_001.md, gaad_language_connector_twal_v1_001.md). (8) NO FILLER WORDS: a name never contains a word that adds no meaning - 'file' above all (everything is a file); gaad_twal_language_v1_001.md, never ..._language_file_... (7) Three-digit zero-padded versions, and THE 1_ ERA: files renamed or created under this standard start at v1_001 - 1_ sorts after every legacy 0_ version (promotion, not restart, honouring provenance) and marks the naming era on sight. (9) DATES in filenames are ISO 8601 basic form: 20260710 - unambiguous, sorts, no separators. (10) LENGTH: names aim for 30 characters or fewer (Miles: keep things tight); if a name wants to encode more, the metadata belongs in a record, not the name - names identify, records describe. (11) The convention is DOCUMENTED WHERE THE FILES LIVE: a short naming section in START_HERE and SKILL.md pointing at this decision. (12) NOUN ORDER: owner before tool - gaad_twal_connector_v1_001, never gaad_connector_twal or gaad_language_connector_twal; names family-sort by language and read in speaking order. (13) LANGUAGE TRIOS are named for the language itself: gaad_twal_v1_001.md/.json/.html - the file IS the language on paper; 'language', 'contract' and 'definition' rejected as fillers (Miles, final). STANDARD DECLARED FINAL AND MANDATORY (Miles, 10 Jul 2026): every file the Specification Owner generates from this point follows D149 without exception; HANDOVER carries it as a standing rule.

Rationale & optionsOptions considered
  • P
  • l
  • a
  • t
  • f
  • o
  • r
  • m
  • -
  • w
  • i
  • d
  • e
  • r
  • e
  • n
  • a
  • m
  • e
  • (
  • r
  • e
  • j
  • e
  • c
  • t
  • e
  • d
  • :
  • b
  • r
  • e
  • a
  • k
  • s
  • l
  • i
  • n
  • k
  • s
  • a
  • n
  • d
  • p
  • r
  • o
  • v
  • e
  • n
  • a
  • n
  • c
  • e
  • )
  • ;
  • k
  • e
  • e
  • p
  • t
  • h
  • e
  • z
  • o
  • o
  • d
  • o
  • c
  • u
  • m
  • e
  • n
  • t
  • e
  • d
  • (
  • r
  • e
  • j
  • e
  • c
  • t
  • e
  • d
  • :
  • d
  • e
  • f
  • e
  • c
  • t
  • s
  • r
  • e
  • m
  • a
  • i
  • n
  • )
  • ;
  • d
  • o
  • t
  • t
  • e
  • d
  • v
  • e
  • r
  • s
  • i
  • o
  • n
  • s
  • i
  • n
  • f
  • i
  • l
  • e
  • n
  • a
  • m
  • e
  • s
  • (
  • r
  • e
  • j
  • e
  • c
  • t
  • e
  • d
  • :
  • M
  • i
  • l
  • e
  • s
  • -
  • n
  • o
  • d
  • o
  • t
  • s
  • o
  • r
  • h
  • y
  • p
  • h
  • e
  • n
  • s
  • i
  • n
  • n
  • a
  • m
  • e
  • s
  • )
  • ;
  • c
  • a
  • p
  • i
  • t
  • a
  • l
  • i
  • s
  • e
  • d
  • n
  • a
  • m
  • e
  • s
  • (
  • r
  • e
  • j
  • e
  • c
  • t
  • e
  • d
  • :
  • c
  • a
  • s
  • e
  • -
  • s
  • e
  • n
  • s
  • i
  • t
  • i
  • v
  • i
  • t
  • y
  • r
  • i
  • s
  • k
  • ,
  • n
  • o
  • b
  • e
  • n
  • e
  • f
  • i
  • t
  • )
  • .

Rationale: Seven version schemes were in live use, with two real defects: lexical sort breaks on unpadded versions (v0_9 vs v0_18), and the same artefact spelt two ways (connector 0.6 in-header vs v0_6 on disk) taxes every cross-reference. Lowercase kills the Linux case-sensitivity 404 class on the website. Underscore-only keeps names shell-, URL- and pipeline-safe. The contract/versioned split states what the platform already practises (fixed palette, versioned generator). Orbit scoping avoids breaking published links and recorded provenance. Second edition checked against industry and research-data-management standards (10 Jul 2026): snake_case all-lowercase is the established best practice in data engineering and the Python ecosystem; version-as-last-element, leading zeros for sort order, ISO 8601 dates, concise names, and documenting the convention beside the files are all standard guidance (UBC RDM, Harvard HMS, Stanford Libraries, PEP 8 norms). D149 adopts the standard rather than inventing one; the only local strictures are no-hyphens (consistency over kebab-case) and the 30-character tightness.

D148 adopted10 Jul 2026

.CEL is a shared platform envelope; each language owns its payload

The serialize/.CEL format is defined ONCE at platform level as a shared envelope - language, language_version, galf_version, payload - with the payload schema owned by each language. The wrapper that makes any stage replayable under the language that made it is written once and inherited by every language; the 1994 .CEL idea preserved as one design-memory format. Defined in the Connector spec (platform side), not per language. Settled by Chief Architect + Specification Owner, 10 Jul 2026; Architecture Reviewer notification pending (same pattern as GALF v0.005). One of the three open three-seat decisions from T021 / the Connector spec s10.

Rationale & options

Rationale: One wrapper written once beats five written differently: replay depends on the envelope fields being uniform across languages, and per-language envelopes would be five chances to break design memory. The payload stays language-owned so the envelope adds no coupling.

D147 adopted10 Jul 2026

platform_status=active REQUIRES a working Connector - PRAL grandfathered with a dated exception

A language may only claim platform_status=active if it ships a conforming, working Connector implementation - contractual, not convention, so the status stays honest ('active' must mean 'actually runs'). PRAL, active via pre-Connector native wiring, holds a written dated exception (10 Jul 2026) until it is ported to the Connector verbs; a ticket tracks the port so the exception is temporary by design. Enters GALF at its next version cut. Settled by Chief Architect + Specification Owner, 10 Jul 2026; Architecture Reviewer notification pending (same pattern as GALF v0.005). One of the three open three-seat decisions from T021 / the Connector spec s10.

Rationale & options

Rationale: GAAD's records are only worth what their honesty guarantees; a status nobody enforces is decoration. The grandfather clause keeps the rule strict without falsifying PRAL's real, working status - one honest exception beats a loose rule, and the port ticket makes the exception self-erasing.

D146 adopted10 Jul 2026

The GAAD Language Connector is a separate platform spec, referencing GALF - not part of GALF

The Connector is its own specification with its own version track (v0.001 already cut), referencing GALF but never merged into it. GALF stays engine-neutral by SILENCE (names no software); the Connector stays neutral by ABSTRACTION (names verbs, never a vendor). Confirms the assumption the v0.001 draft was written on. Settled by Chief Architect + Specification Owner, 10 Jul 2026; Architecture Reviewer notification pending (same pattern as GALF v0.005). One of the three open three-seat decisions from T021 / the Connector spec s10.

Rationale & options

Rationale: Keeps both contracts honest about what they are: GALF cannot own a runtime interface without breaking its own neutrality rule (the T021 finding), and merging them would couple the language definition to the platform runtime. Matches D145's discipline of keeping distinct senses apart.

D145 Raised by Miles from architectural-school usage ('what is the architectural language of Fallingwater') versus the computing sense ('the architecture of how hardware and software connect'), prompted while building the website language/framework page. ChatGPT (Architecture Reviewer) proposed ALF + Core/Foundation/Fabric.acceptedNaming09 Jul 2026

Two senses of 'architecture' kept apart; GALF retained over ALF

The word 'architecture' carries two unrelated senses in GAAD and they are kept distinct. (1) The design-school sense - 'architectural language' as the grammar of a building (the architectural language of Fallingwater) - stays lowercase in prose and is formalised as the platform term 'Architectural Language' (a GALF-conforming language: PRAL/GRAL/MHAL/FWAL/TWAL). (2) The system-structure sense - how the framework, languages, connector and engine connect - is named 'The Architecture' (capitalised) only as a website page/section title, never as a bare noun in prose. The framework keeps its agreed name GALF (GAAD Architectural Language Framework); the proposed rename to 'ALF' is rejected.

Rationale & optionsOptions considered
  • Page named 'Architecture' (bare) - rejected: ambiguous across the two senses
  • Page named 'Framework' - rejected: collides with GALF, which is the framework
  • Rename GALF -> ALF and add Core/Foundation/Fabric (Reviewer suggestion) - rejected: costly rename + unneeded nouns
  • Page named 'The Architecture' (capitalised, system-structure sense) + keep GALF - chosen

Rationale: GAAD's own name (Genetic Aided Architectural Design) already claims 'architectural' for the design sense, and the audience spans both architecture-school and software/BIM readers, so an unqualified 'Architecture' page would read ambiguously. 'The Architecture' as a proper-noun page title reads as system structure by context (beside Story/Platform/Records) without colliding with the design sense. Renaming GALF to ALF was rejected because GALF is baked into every language file's conforms_to, spec filenames, D140 and the website, so a rename ripples widely for no functional gain; and 'Framework' as a page name sits too close to GALF (which IS the framework). New nouns (Core/Foundation/Fabric) were declined as vocabulary not yet needed.

D144 2026 RebirthadoptedDesign Language09 Jul 2026

MHAL Blender prototype is a ringfenced, Claude-owned standalone - GALF-conformant, GAAD untouched

The MHAL Blender explorer (MHAL_Prototype_0_008.py, evolved from an uploaded 0_005c) is a standalone prototype that Claude (Specification Owner) owns and iterates. It is ringfenced from the GAAD platform 'for now': it lives outside the bundle, adds no GAAD records or pipeline dependencies, and no MHAL work modifies GAAD scripts. The fence only comes down on Miles's explicit instruction. Even while ringfenced, the prototype is built to STRICTLY ALIGN with MHAL v0.003 and HONOUR GALF v0.005 - it emits the platform contact-point stamp (language/language_version/galf_version), the MHAL type-level and per-instance relationship triples, the honest City>District>Block hierarchy, the Scale Resolution Axis, and per-concept status - so its JSON can port into GAAD later without rework.

Rationale & optionsOptions considered
  • Fold the prototype into the GAAD bundle now (rejected - couples exploratory work to the live platform and violates 'GAAD must remain as current')
  • Keep it standalone but GALF-agnostic (rejected - would need a rework to port later; cheap to honour GALF now)
  • Standalone, Claude-owned, ringfenced, GALF-conformant (adopted)

Rationale: Keeps exploratory MHAL geometry work moving fast without risking the live GAAD bundle, while proving something valuable to GAAD itself: that GALF works as a real contract an independent standalone can honour from the outside. Ownership with a clear boundary means the prototype can be freely iterated (colour-by-term, standing legend, fast geometry, safe clear) without touching platform state, yet lands cleanly if and when it is brought inside.

P053
D143 2026 RebirthadoptedConvention08 Jul 2026

Languages/ folder: Architectural Language files live apart from platform specs

The bundle gains a top-level Languages/ folder holding the Architectural Language file trios (md/json/html): GAAD_PRAL_v0_001, GAAD_GRAL_v0_021, GAAD_MHAL_v0_003, and future languages (FWAL). Spec/ holds what the platform PROMISES (Lineage, SmokeTest, DL, and the GALF contract per D142); Languages/ holds the implementations that conform to it.

Rationale & optionsOptions considered
  • Spec/Languages/ subfolder (rejected - the languages are peers of the spec concept, not children of it)
  • Keep everything in Spec/ (rejected - the folder no longer says what a file is)

Rationale: Spec/ was starting to conflate two kinds of document: platform specifications and conforming language implementations. Separating them mirrors the GALF architecture itself - contract in Spec/, implementations in Languages/ - and gives every future language an obvious home.

D142 2026 RebirthadoptedConvention08 Jul 2026

GALF stewardship: owned by the Specification Owner, versioned on the GAAD spec track

GALF is owned by the Specification Owner (Claude) and lives in the bundle's Spec/ folder under GAAD file naming: Spec/GAAD_GALF_v0_0X_Architectural_Language_Contract_Specification.md (+ .json mirror). v0.004 is the stewardship version - content is the agreed v0.003 verbatim; only ownership, naming and the Resolution Axis freeze pointer (now v0.005) changed. The externally-named v0.003 files are removed from Spec/ (one authoritative copy, drop discipline); the agreed v0.003 share bundle remains the record of the three-seat agreement (D140).

Rationale & optionsOptions considered
  • Keep external GALF naming inside Spec/ (rejected - two naming schemes in one folder invites drift)

Rationale: Miles handed GALF ownership to the Specification Owner on 08 Jul 2026. Bringing it under GAAD naming and the Spec/ folder makes the contract a first-class platform specification alongside Lineage, SmokeTest and DL, versioned and validated with everything else.

P052
D141 2026 RebirthadoptedArchitecture08 Jul 2026

GRAL is the first Architectural Language built on the GALF contract

GRAL (Garden Room Architectural Language) is recognised as the first Architectural Language built on the GALF contract - no longer just a prototype. Its conformance pass to GALF v0.003 (terminology linkage of platform terms, mandatory status vocabulary mapping) is the template every subsequent language follows.

Rationale & optionsOptions considered
  • PRAL first, as the platform-active language (rejected as the template case - PRAL is knowledge-thin; GRAL exercises the full contract)

Rationale: Miles, on agreeing GALF v0.003: the project changes direction here - the simple decision gives GAAD a foundation for every language that follows (Q027). GRAL earns first position: it is the knowledge-richest language, grounded in the real garden room, and its v0.020 file stress-tested the contract before agreement.

P052
D140 2026 RebirthadoptedArchitecture08 Jul 2026

Adopt GALF - the GAAD Architectural Language Framework contract (v0.003, agreed by all three seats)

GALF (GAAD Architectural Language Framework) defines the Architectural Language Contract that every GAAD Architectural Language implements. GAAD is the platform; GALF is the contract; PRAL, GRAL, MHAL, FWAL and future languages are implementations. v0.003 agreed 08 Jul 2026 by all three seats: 16 contract sections with requirement levels (Relationships Required; Mission/Identity/Validation never empty); two-axis language status (knowledge_status / platform_status - PRAL is platform-active); typed relationship triples for internal-coherence validation; no tool names in the contract body; every stage file records language, language_version and galf_version; validation layer 3 is the F030 proving run. Resolution Axis remains EXPERIMENTAL pending the FWAL acid test (freeze at v0.004 only if unchanged). MAHL removed as accidental. Contract filed at Spec/GALF_Architectural_Language_Contract_v0_003.md.

Rationale & optionsOptions considered
  • Per-language ad hoc definitions with no shared contract (rejected - languages would drift; the platform could not validate them uniformly)
  • Tie the contract to the current Blender implementation (rejected - implementation independence is absolute; the contract says what a language IS, never how it executes)

Rationale: Concept by Miles with ChatGPT (v0.002); Specification Owner review produced seven amendments (v0.003 draft), tested against real language files GRAL v0.020 and MHAL v0.002 which earned two further contract rules (mandatory status vocabulary; internal coherence - MHAL's Hierarchy contradicted its own Relationships three ways); Architecture Reviewer approved with four minor amendments, all applied. The contract absorbs parked features F016/F017/F018 and extends the standing stage-file language precondition with galf_version. Three-seat process working as designed.

D139 2026 RebirthadoptedTerminology08 Jul 2026

The remembered circle on the Navigator lineage is a Genome

Each circle on the Navigator lineage array is a Genome: the complete genetic makeup of one remembered design at one generation. The square in the Generator stays a Stage (where design happens, D134). The Backtrack button and prompts name it - 'Select Genome for Backtrack', 'Backtrack to Genome - String {s} / Gen {g}'.

Rationale & optionsOptions considered
  • Disc (rejected - describes the shape, not the meaning; not genetic)
  • Cell (rejected - already means a building-block shape in GAAD's vocabulary; overloading it blurs shape-unit vs whole-design)
  • Individual / Specimen (viable GA terms; Genome preferred as it names the design's genetic content, which is what Backtrack replays)

Rationale: 'Genome' layers cleanly with GAAD's existing vocabulary: a Genome is expressed into cells/shapes (box/cube, column/cylinder - the 1994 'cell' vocabulary), so the Navigator holds each design's genome and each genome builds from cells. This avoids overloading 'cell', which already means a building-block shape unit, and it is more precise than 'disc' (which only named the shape) - a whole remembered individual deserves a whole-organism term. Reinforces the D134 split: square = Stage (design happens), circle = Genome (design remembered).

D138 2026 RebirthadoptedInteraction08 Jul 2026

Backtrack button self-labels in three states and arms red

The Backtrack button (F006) now tells the whole arm/confirm flow through its own label and colour. In the Generator, idle, it reads 'Backtrack' with no colour. The first press opens the Navigator and the button turns red, reading 'Select Stage for Backtrack'. Selecting a lineage disc relabels it, still red, to 'Backtrack to String {s} / Gen {g}'. Committing replays the chosen stage and returns to the Generator, where the button is plain 'Backtrack' again.

Rationale & optionsOptions considered
  • Leave the static 'Backtrack' label with a separate status message (rejected - the button should carry its own state, as Isolate did)
  • Show only 'Backtrack to Gen {g}' (superseded - the string is part of the identity; the label now names String and Gen, matching the Navigator disc)

Rationale: Backtrack is a two-context verb (D133): press once to open the Navigator, select a disc, press again to commit. Nothing on the button said which step you were on. Reusing the self-labelling grammar of the retired Isolate toggle - live text plus a red (row.alert) armed state - makes the sequence legible without a separate status line, and the red signals 'you are mid-Backtrack, one more click commits'. Panel-only change; the operator already did the two-context work.

D137 2026 RebirthadoptedInteraction08 Jul 2026

The Isolator is its own scene; Generator / Navigator / Isolator are peer scene-jumps

GAAD now has three peer scenes: GAAD Generator (where design happens), GAAD Navigator (where design is remembered, D134), and the new GAAD Isolator (where one stage is studied on its own). The panel top row switches between them - Generator / Navigator / Isolator - each a single click, none a toggle. Pressing Isolator LINKS the selected Generator stage's objects into the Isolator scene (the same objects and materials, never duplicated, so colour mode stays in sync automatically) and switches there, with its own HUD titled 'Isolator - Stage N'. Isolator is Generator-fed for now; isolating a remembered stage from a Navigator disc via replay is a later pass.

Rationale & optionsOptions considered
  • Keep the visibility toggle in the Generator scene (rejected - the restore dance is the bug source)
  • Duplicate the stage into the Isolator (rejected - drift and double the objects/materials; linking shares one source)
  • Replay the stage from its lineage file into the Isolator (deferred - needed for isolating a remembered Navigator stage, not for the live Generator case)

Rationale: The old Isolate Stage (F004) toggled object visibility inside the Generator scene and stashed/restored the view and label state on exit - the exact machinery behind the v0.95-v0.97 label-restore bugs. Making the Isolator a separate scene fed by object links means the Generator scene is never mutated, so there is nothing to restore and that whole class of bug disappears. It also makes scene-switching the single, consistent navigation model. Linking (not duplicating) keeps one source of truth for geometry and materials, so a colour-mode change in the Generator is reflected in the Isolator with no sync code.

D136 2026 RebirthadoptedVisualisation08 Jul 2026

Records-over-time dots deep-link to individual records

On the homepage Records-over-time graph, each line carries a small dot in the line's own colour on every day that series gained a record, and each dot is a hyperlink into the matching record page anchored at a specific record (records/gaad_<type>.html#<id>). Dots are increment-only (none on flat runs); a dot targets the record that took the count to that level, and the final dot of each line is pinned to the newest record of that type.

Rationale & optionsOptions considered
  • Plain white dots at every vertex (rejected - noisy, and no link value)
  • Dots link only to the record-type page top (rejected - does not reach the individual record)
  • Regenerate the whole graph from JSON to guarantee dot-on-line alignment (deferred - would shift the approved hand-authored lines; kept the lines, read each dot's count off its existing y instead)
  • Dot opens a date-filtered view of all records from that day (deferred - larger build; current model is one dot, one specific record)

Rationale: Turns a decorative trend line into a navigable index: the graph is not just a picture of accumulation, it is a way into the records themselves. Record pages already carry per-record id anchors, so no records change was needed. Ids run in strict date order per series, so a dot's cumulative level maps cleanly to a real id; an invisible 5px hit-circle sits behind each 1.8px dot so the small targets stay clickable. One dot marks a day the count rose, so it opens the top record of that step rather than every record from that day.

D135 evolvedadoptedProcess07 Jul 2026

Hardening the build loop: maths before code, pure layout module, headless smoke test, scene-state ownership, drop discipline

Five practices adopted after the Bauhaus-persistence and disc-spacing troubleshoot cycles (07 Jul): (1) MATHS BEFORE CODE - any geometry or layout change gets a stated derivation (inputs, formula, worked example at 60/85/100m) agreed before scripting; Miles's 'confirm the maths first' demand ended the disc saga in one message. (2) PURE LAYOUT MODULE - layout arithmetic moves to a bpy-free gaad_tree_layout.py (the gaad_palette pattern) with a test file asserting invariants: pitch >= largest disc diameter (no overlap ever), radius >= half x sqrt2 (containment), connector endpoints on circumference. (3) HEADLESS SMOKE TEST - blender --background --python gaad_smoke_test.py builds a synthetic two-string lineage, runs generator + tree for real, asserts disc bounds do not intersect, materials match the active colour mode in BOTH scenes, labels carry stamps, stage files parse; catches the runtime class of bug (Bauhaus) invisible to sandbox syntax checks. Spec: Spec/GAAD_Smoke_Test_v0_01. (4) SCENE-STATE OWNERSHIP - any state crossing scenes gets a named source of truth at design time (colour mode: the Generator scene); the smoke test asserts the sync. (5) DROP DISCIPLINE - every mid-session file drop lists which files move together; shared modules use defensive reload-and-fallback imports; fast iteration days prefer micro-bundle zips over loose files. Build order: smoke test first (multiplies Miles's testing), layout module second.

Rationale & optionsOptions considered
  • Continue drop-and-eyeball iteration - rejected: two multi-cycle troubleshoots in one afternoon, both preventable (one by an invariant check, one by a runtime assertion)
  • Full CI pipeline - deferred: the headless smoke test gives most of the value at a fraction of the setup; revisit with the Claude Code evaluation

Rationale: The sandbox can prove syntax and pure maths but never runtime scene behaviour; Miles can prove runtime but should not be the first line of defence for arithmetic. These practices put each check where it is cheapest.

D134 1994adoptedInterface07 Jul 2026

Navigator stages are circles: square is where design happens, circle is where design is remembered

Navigator lineage stages are circular discs (tree v0_11), returning to the 1994 evolutionary tree language (Figs 3.21 / 3.28 / 3.29 - specimens under glass, cells in a lineage). The World keeps square stages. The geometry itself now distinguishes the two scenes at a glance: square = plot/site, the unit of WORK; circle = cell/specimen, the unit of MEMORY. Disc diameter = stage size, same thickness, colours (neutral / DEADEND_RED / CURRENT_GOLD), engine stamps and connectors unchanged; raw-mesh 48-segment disc, zero bpy.ops (v0_6 fast-geometry discipline). Proposed by Miles ('circles like 1994 - they look more genetic'), runtime-confirmed same day ('such a quick fix fable - love it').

Rationale & optionsOptions considered
  • Keep squares in both scenes (rejected: World and Navigator shared one visual grammar, so screenshots and glances could not tell work from memory apart)
  • Circles in both scenes (rejected: the World IS a site - square stages are the right architectural unit for the place where design happens)

Rationale: Semantic separation encoded in geometry; alignment with the 1994 plates, the website hero's dots-on-a-path, and Q024's atoms (atoms are round). The scene boundary now quietly teaches the Evolve/Backtrack distinction on every crossing.

P050
D133 evolvedagreed - engine in buildInteraction07 Jul 2026

Backtrack interaction: the Navigator is the Track decision point; the button commits, selection never does

Agreed flow (Miles, 07 Jul): pressing Backtrack in the Generator switches to the Navigator scene (skipped if already there). The user selects any past stage on any string - the backtrack target. A second press of the button (contextually relabelled, e.g. 'Backtrack to Gen N') performs the return: the target generation's full grid replays in the Generator world, the historical champion restored and highlighted - the world exactly as it stood. Selecting a stage and breeding then follows the D132 string rules. Selection alone NEVER commits anything; only the button press does. Rapid Stage Select is disabled for the entire F006 build (addon v0_93 development guard) so a click on a replayed grid can never trigger an accidental breed. Boundary behaviour keeps the 1994 warnings, starting with the progenitor warning verbatim.

Rationale & optionsOptions considered
  • Single-step Backtrack (one generation per press, 1994 Track loop exactly) - superseded by Miles's Navigator flow: seeing the whole lineage and jumping to the pivot beats blind stepping; the Genetic Tree was 1994's answer to the same need
  • Reuse the existing Back to Generation operator with the selected stage as target - rejected: overloads an operator that means something different and splits Backtrack across two buttons
  • Click-commits in the Navigator (Rapid-style) - rejected: with clicks-as-commitments live, a stray click would open phantom strings; the button is the commitment

Rationale: The Navigator-as-Track-decision-point is faithful to 1994 in spirit - the Genetic Tree was where you could see where to go. One button, two contexts, honest labels. Engine lands in addon v0_93.

D132 evolvedadoptedArchitecture07 Jul 2026

Lineage storage: flat sN_gNN stage files + lineage.json master record (Lineage Spec v0.01)

Generations now write to a flat Generations/ set: lineage.json (the master array record - strings, pivots, current_position, global creation index) plus one s{string}_g{generation}.json stage file per breed (s3_g07.json). Lexical sort of the filenames IS the genetic array, the 1994 discipline (one folder, the names tell the story) with the 2026 upgrade that JSON content is the single source of truth and filenames are a human-readable mirror. Development caps: 9 strings, 99 generations, defined once as constants, with honest warnings at every boundary. Strings are first-class records (id, parent_string, pivot_generation, pivot_variant_id, status active/preserved - no deleted status by design). The 1994 visit counter becomes DERIVED, never stored: visit n at depth g = the nth string through that depth, shown as an homage label (g07 visit 2) that can never drift. Breeding at a string tip extends it; breeding from a backtracked mid-string position opens a new string with its pivot recorded; pivot selections append to pivot_selection_events, never overwriting the historical selection_event. First Generation ARCHIVES any existing lineage set into Generations/archive_<timestamp>/ (moved, never deleted). Stage files today carry full parameters for all variants with sibling_seeds alongside; D030 seed-slimming is a later size optimisation, not a structure change. Old gen_XXX data is untouched and ignored. Shipped in generator v0_46, unit-tested with a simulated Fig 3.29 session. Full schema: Spec/GAAD_Lineage_v0_01_Storage_Specification.md.

Rationale & optionsOptions considered
  • Depth+visit in the filename, 1994-faithful (gen_007_v2.json) - rejected: string membership stays implicit, reconstructed by chaining parent refs
  • Subfolder per string (s002/s002_g007.json) - rejected after discussion: one glob reads the whole array, lexical sort shows the strings anyway, no orphan folders, simplest generator code; 1994 kept all .CEL files in one folder and it worked
  • Bare tree of stages with parent pointers, strings derived at display time - rejected: the string is the unit the designer thinks in, and it gives status/pivot/creation metadata a home; the model stays convertible since stage rows + pivots contain the full tree
  • Branch/fork naming from version control - rejected: branch implies merging (design strings never merge), loses the genetic register, and string is the 1994 word - provenance, not sentiment

Rationale: Backtrack (F006) is part of classic GAAD's engine grammar, not an add-on vocabulary (Q025), and its storage is the load-bearing wall for F024, D038 scoring and the Design Memory vision (Q026). Storage schemas are the hardest thing to change once real sessions have written data, hence spec before code. Stages are the atoms of the memory - every one preserved and replayable as a 3D view (Q024); dead ends become preserved strings, the Rebirth's deliberate upgrade on 1994's discarded dead ends. Caps chosen for development sanity, one edit to lift.

D131 newadoptedConvention07 Jul 2026

Technical Spec sections carry a per-section date, bumped when the section changes

Each Technical Specification section now carries its own date field, seeded at 2026-07-01 for all twelve sections. When a section's content is updated, its date is bumped to the date of that update. The Records Hub surfaces this in the Date column, and the tech spec schema gained a date entry describing the rule.

Rationale & optionsOptions considered
  • Leave tech spec sections undated (rejected - the Hub Date column read as empty, and a spec section has a real 'last updated' moment worth recording)
  • Reuse the single top-level spec date for every section (rejected - sections change independently, so a per-section date is more truthful and more useful)
  • Show a dash for empty cells (rejected - a real date carries information a placeholder does not)

Rationale: A spec section's currency matters. A per-section date shows at a glance when each part was last touched and fills the Hub Date column meaningfully. Seeding all sections at 2026-07-01 gives a clean baseline to diverge from as sections are revised.

D130 newadoptedRecords07 Jul 2026

Records Hub: auto-link record references (D/P/T/F/Q) to their pages

In the Records Hub, any record reference - D129, P024, T012, F006, Q021 and the like - appearing in a field value, whether in a related-records list or inline in decision, rationale, moment or description prose, is now rendered as a hyperlink to that record on its dedicated page (D to gaad_decisions.html#D###, P to pivotal moments, T to tickets, F to features, Q to quotes). Quote cards gained per-record id anchors so quote links resolve; the other record pages already had them, with scroll-margin already set to clear the sticky header.

Rationale & optionsOptions considered
  • Link references to positions within the Hub SPA (rejected - the Hub renders rows dynamically, so in-page anchors are unreliable; the static record pages carry stable per-record anchors)
  • Only linkify the explicit related fields (rejected - references also appear inline in prose, so linkifying at the value renderer covers both)
  • Validate each reference before linking (deferred - the parity checker already guards related fields, and a missing anchor simply does not scroll)

Rationale: Cross-references were dead text that forced manual lookup. Auto-linking at the single render_value choke point turns the whole record set into a navigable web with one change, reusing the anchors and scroll-margin the record pages already provide.

D129 newadoptedRecords07 Jul 2026

Records Hub: Date column after ID, date out of Status, key types newest-first

In the Records Hub table, a record's date now has its own column immediately after ID, instead of sitting as a badge inside the Status column. The Status column keeps only status, category and origin badges. Decisions, pivotal moments and features are listed newest-first (descending ID), so the latest work is at the top and the earliest at the bottom.

Rationale & optionsOptions considered
  • Rewire every record-type normalizer to carry the date separately (rejected - the renderer can lift the existing date badge into the new column at a single point, leaving the normalizers untouched)
  • Leave the date as a Status badge (rejected - it read as a status and was easy to miss; a dedicated column scans far better)
  • Sort every record type newest-first (deferred - only decisions, pivotal moments and features were requested; other types keep their order for now)

Rationale: A record's date is a first-class attribute and reads better in its own column than buried among status badges. Newest-first matches how the individual record pages already sort, and puts the most recent activity where the eye lands first.

D128 newadoptedConvention06 Jul 2026

Website publish package versioned on its own 1_### track (gaad_website_publish_#_###)

The website publish package (the deployable index.html plus the records/ folder served at 4bim.com/gaad) is versioned independently of the GAAD Development 0_### bundle, on its own track. Filename standard: gaad_website_publish_#_###. The first published package - the 06 Jul 2026 go-live (P049) - is designated 1_001 retrospectively; the next cut will be 1_002. The site track is decoupled from the development-bundle numbering because the public site is republished on its own cadence (content freshness, copy and link fixes) that does not map one-to-one onto development bundles.

Rationale & optionsOptions considered
  • Reuse the development-bundle number for the publish zip (rejected - the site republishes on a different cadence than bundle cuts; a shared number would either force needless site cuts or leave gaps)
  • No version on the publish zip, overwrite in place (rejected - loses the ability to reference or roll back a specific published state)
  • Date-stamped filename (rejected - a monotonic 1_### line is easier to cite in records and sorts predictably)

Rationale: The site went public on 06 Jul 2026 (P049) as a single deployable package. Giving it its own 1_### line, distinct from the 0_### development bundles, lets the public site be refreshed and cited on its own terms while keeping a clean, roll-back-able history. Supports CURRENT_ACTIONS item 3 (automate records publish to the website), where each cut assembles a publish package: that package now has a defined name and number.

P049
D127 newadoptedIdentity06 Jul 2026

Brand v1.2 rollout: /Brand masters, logo on every report, reports link home

The agreed logo (solid gold deltas, bases on the letter baseline at cap height; lockup: white rule at 85% with centred gold node trimmed to the wordmark - brand v1.2, P049) was rolled out across the platform. A new /Brand folder joins the bundle with the masters: lockup and wordmark as PNG (harvested from a verified genuine Space Grotesk render) and SVG, a gaad_logo_export.html tool that renders with the true fonts in the browser and exports pixel-perfect PNGs at 800/1600/3200px, and a README of the geometry rules. All 13 record HTML pages now open with the logo: gaad_html_modern.py embeds Brand/gaad_logo_wordmark.png as a data URI at build time (single source, offline-proof, no font dependency), page titles standardised to bold gold sans matching the Records Hub, duplicate text wordmarks removed, and the logo is wrapped in a link to ../index.html so every report clicks home to the website. Four standalone documents (audit, team roles, both architecture pages) were patched directly and will need a manual touch if the header changes again.

Rationale & optionsOptions considered
  • Web-font text wordmark in report headers (rejected - font-fallback failure observed on the website; reports must render correctly offline)
  • Reference the logo PNG by relative path (rejected - reports are single-file by design)
  • Embed the /Brand PNG as a data URI at build time from one source (chosen)

Rationale: One source of truth for the mark, mirroring the gaad_palette.py dedup pattern: change the PNG in /Brand, re-run gaad_build.py, every generated report updates. The ../index.html link is correct at the published site (records/ sits beside index.html) and a harmless dead click in the local bundle.

P049
D126 newadoptedRecords06 Jul 2026

Records HTML restructured: flat tables with category filter buttons

Three HTML views were restructured around one pattern Miles approved on the audit: a single flat table with an All-plus-categories filter button row. (1) gaad_audit.html: the seven per-category tables flattened into one 41-row table with columns Item / 1994 / Rebirth / Comment / Category (Comment folds the old ID and Status columns), category filter buttons, all expandable Reference/Development notes preserved. (2) The Records Hub (generate_records_hub_html.py): sidebar-and-cards replaced by a flat ID / Title / Detail / Status / Type table with type filter buttons and counts, cross-record search kept, two-line detail preview with expander, and a dynamic page title (H1 and document.title follow the active type). Terminology gets its own column view inside the Hub: Title / Thesis 1994 / Rebirth 2026 / Notes / Status / Type, with the Cells-vocabulary schema mapped by fallback so no row is blank. (3) Features page ordering fixed to newest-first (F### descending), matching every other log page.

Rationale & optionsOptions considered
  • Keep per-category tables on the audit (rejected - Miles asked for one flat table)
  • Convert the long-form log pages (decisions, PMs, tickets) to tables too (rejected - card layout reads better for long rationale text; they already carry filter buttons)
  • Flat table + filter buttons on audit, Hub and Hub-terminology only (chosen)

Rationale: Miles's verdict on the audit rework: 'wow this feature audit with category buttons is very good - please remember this.' The pattern gives one sortable scan of everything while the buttons restore the grouping that flattening removes. Applied only where content is genuinely tabular; forcing decisions or tickets into rows would be a regression. Note: gaad_audit.html is standalone (not rebuilt by gaad_build.py), so its restructure lives in the HTML itself.

P049
D125 newadoptedInteraction06 Jul 2026

Rapid Stage Select hardened against watcher loss (T015, addon v0_91)

The Rapid Stage Select watcher (F022, D119) could stop firing after an undo/redo, a Navigator visit or Reset GAAD Platform, because Blender clears bpy.msgbus subscriptions across those events and a breed interrupted before its finally ran could leave the re-entry busy flag latched. v0_91 makes the watcher self-healing through one shared recovery helper, _gaad_rapid_rearm(), which clears the busy flag and re-subscribes the active-object watcher. It is now called from four places: new undo_post and redo_post persistent handlers (the prime cause), at the end of the Reset GAAD Platform operator, on file load (replacing the load-only re-arm of v0_79), and from a new update callback on the gaad_rapid_select toggle so flipping it OFF then ON is a user-accessible recovery. Separately, the busy flag now carries a time() stamp and self-clears after a 2 s timeout in the notify guard, so an interrupted fire path can never wedge Rapid permanently. Re-subscribing does not itself breed: subscribe_rna notifies only on later changes, so the active object restored by an undo is not treated as a click. The change is additive - while Rapid is working normally there is no behaviour change - and it does not touch the single gaad.generate breeding path (D119).

Rationale & optionsOptions considered
  • Re-arm only on file load as in v0_79 (rejected - does not cover undo/redo, Reset or a mid-session loss)
  • A modal operator capturing clicks instead of msgbus (rejected - heavier, and D119 chose the additive msgbus watcher deliberately)
  • One shared _gaad_rapid_rearm() wired to undo_post / redo_post / Reset / toggle-ON, plus a timestamped busy timeout (chosen)

Rationale: T015 was the highest-priority open defect (Phigh): clicks silently stopped breeding, which is worse than a crash because nothing signals the loss. Routing every subscription-dropping event through one helper keeps the recovery logic in a single place, and the toggle-ON path gives Miles a manual reset if any unforeseen route still drops it. The busy timeout is the belt-and-braces guarantee that the flag can never wedge. Backtrack (F006) remains the eventual safety net for a misclick while ON; this decision only hardens the watcher, it does not add undo of a breed.

P048
D124 newadoptedPanel05 Jul 2026

Live panel is the spec of record; v2_7 direction built and evolved into the EVOLVE working hub

The panel mock-up line (v2_0..v2_7) served its purpose and is retired - the live addon panel is now the spec of record (Miles: 'panel is live, mock-up is dead'; cut_bundle v0.2 makes the Spec pair optional). The built direction: a LANGUAGE section at the top (AL radio with Objects inside, gated to PRAL), WORLD holding only language-independent scene settings, and EVOLVE as the working hub - First Generation (renamed from Initial Generation, auto-collapses LANGUAGE and WORLD on success), Next Generation, Rapid Stage Select, an always-active Colour pair ([Colour | Grey]) that live-recolours the world and Navigator at any generation, a single Show / Hide Labels toggle, and MUTATION (renamed from EVOLUTION) as a collapsible sub-section with its Population sub-group. Generator and Navigator scene jumps plus an icon-only Collapse / Expand All sit on an always-visible top row, with Reset GAAD Platform (was Reset World) on a slim row beneath; Reset collapses the panel on completion. STATUS is two short grouped lines (run state, then versions). All sections are collapsible chevrons; native Blender sub-panels were rejected because they cannot be collapsed programmatically, which would break Collapse All. Shape colours moved to the shared Scripts/gaad_palette.py, the single palette source for generator, tree and addon.

Rationale & optionsOptions considered
  • Native Blender sub-panels (bl_parent_id) as mocked in v2_4 (rejected - no Python API to collapse them, breaking Collapse All)
  • Prop-driven chevron sections with the v2_7 structure (chosen)
  • Keep maintaining the mock-up pair in lockstep with the live panel (rejected - the live panel moved faster; retired instead)

Rationale: The panel stabilised through hands-on iteration (addon v0_86 to v0_90) faster than the mock-up could track, so the artefact that people actually use is the honest spec. The EVOLVE hub groups everything touched per-cycle; set-once sections collapse away at Gen 1.

D123 newadoptedNaming05 Jul 2026

Architectural Language (AL) adopted: PRAL / GRAL / MHAL

The selectable vocabularies under GAAD are named Architectural Languages (ALs): PRAL (Primitives Architectural Language, built), GRAL (Garden Room Architectural Language, not yet built) and MHAL (Manhattan Architectural Language, not yet built). PAL is retired in favour of PRAL and MAL in favour of MHAL. HAL / House is left out of scope by Miles's call and is not shown in the picker; it remains in the historical records untouched. Design Language (DL) stays reserved for the master spec (D102). The panel picker is labelled Language; the scene property is gaad_architectural_language (replacing the gaad_design_language hook).

Rationale & optionsOptions considered
  • Keep calling the picker Design Language (matches D099/D102 wording but overloads DL, the master spec)
  • Architectural Language with PRAL / GRAL / MHAL (chosen - clean split from the master DL, pronounceable set)
  • Keep the original PAL / MAL acronyms

Rationale: AL keeps a clean three-layer hierarchy (GAAD platform, DL master spec, ALs as selectable vocabularies, Objects within an AL). PRAL is unmistakably Primitives where PAL read as a word; MHAL removes the MAL/HAL near-collision and keeps HAL free for House. Each acronym is a short distinctive prefix plus AL.

D122 newadoptedInteraction05 Jul 2026

Stage tools hardened: property-first resolver, Stage disarms Rapid, Present Stage render (F025)

The VIEW stage tools were reworked. Isolate Stage now resolves the target stage from the shared gaad_stage_number property carried by both the stage floor and the buildings, with exact-integer matching, replacing a fragile active-object name-regex that could silently do nothing; it now reports what it did. Pressing a stage tool disarms Rapid Stage Select first, so the selecting click can no longer breed the next generation before the view command runs. The Stage button became a self-labelling toggle (Isolate Stage / Show All Stages, drawn red while isolated). A separate Present Stage button (F025) renders the selected stage to a clean PNG in a new //Image folder: black studio world, key and fill sun rig, framed camera, other stages hidden from the render, materials as chosen (Brand or Grey).

Rationale & optionsOptions considered
  • Keep name-regex resolution and only patch the no-op
  • Resolve from the shared gaad_stage_number property, as champion selection already does (chosen)
  • Block the Stage button while Rapid is on, rather than disarm Rapid

Rationale: The real cause of Stage appearing dead was Rapid Stage Select breeding on the selecting click; disarming Rapid makes the stage tools behave as pure view commands. Property-first resolution mirrors the proven champion-selection path and removes a whole substring-leak class of bug (Stage_2 matching Stage_20).

D121 newadoptedPanel03 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.

Rationale & optionsOptions considered
  • One 'STUDIO' group holding all seven buttons
  • Two groups: EVOLVE + NAVIGATE
  • Two groups: EVOLVE + GENERATE (chosen, Miles's call - GENERATE mirrors what those buttons return to)

Rationale: The seven buttons had accumulated three different jobs in one place: breed/progress the world (Initial, Next, Rapid, Reset), jump to a different scene (Generator, Navigator), open a report (Navigator Report). Grouping them under one name always felt forced. Two honest sub-groups match the actions: EVOLVE is what the working session is DOING, GENERATE is where the design lives (return to the Generator scene, jump to the Navigator scene, read the report). Both always-open so they don't hide when other sections collapse - the panel's busiest controls should never be one click away from reachable. The sub-question of renaming the scene/HUD (currently 'Generator' from D058) is left open because that name is threaded through the code and records; a later session can address the naming with proper supersedes to D058 rather than half-doing it now.

D120 newadoptedArchitecture03 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.

Rationale & optionsOptions considered
  • Keep the single 85 m stage from the Rebirth default
  • Add square-only selector with five preset sizes (chosen)
  • Add rectangular option immediately (deferred to F023 - own session)

Rationale: Reference block sizes: Portland 60 m walkable grid, Chicago Loop 100 m, Barcelona Eixample 113 m, London mews 50-80 m, Manhattan 80x275 m (rectangular), suburban US 400 m+. Five square presets cover the walkable-to-campus range with clean round numbers; 100 m is the honest current default. Gutter as a fixed 18% keeps visual proportion consistent - a 300 m block on a 60 m gutter would look packed, 60 m on a 60 m gutter would look sparse. Rectangular Manhattan blocks are genuinely different urban DNA and give the designer a real new tool, but adding them alongside the selector risks a half-built change - separated as F023.

D119 newadoptedInteraction03 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).

Rationale & optionsOptions considered
  • Replace Next Generation with click-to-breed
  • A modal operator capturing clicks
  • Additive toggle + msgbus watcher firing the existing operator (chosen, Miles's call)

Rationale: First live test (P048): 'works v well and is super fast' and 'not distracting - keeps the human engaged' - the EVOLVE stance of D110 made real, running at 0.3s per generation (D118). Additive-toggle preserves the safe two-step for inspection (EXPLORE) and costs nothing when off. Known v1 limits, accepted: a misclick breeds while ON (Backtrack F006 is the eventual safety net, deferred - big topic, Miles), and the watcher can be lost after a Navigator visit or platform reset (T015, open - msgbus is cleared on undo/redo; hardening pass queued as addon v0_80).

P048
D118 newadoptedGenerator03 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.

Rationale & optionsOptions considered
  • Keep one uniquely named material per primitive
  • Deduplicate materials by colour value
  • One shared material per shape type, world-wide (chosen, Miles's call)

Rationale: At a full 9x9 (~3,488 objects) Next Generation was creating ~3,488 near-identical materials and purging the previous ~3,488 one at a time - roughly 7,000 datablock operations per click for what is really a five-colour palette, since an object's colour is always its shape's palette colour (an inherited colour only survives while the shape stays the same). Shape-type materials are simpler and more honest than colour-keyed deduplication: the material IS the shape's identity. Measured baseline was 12.8s per Next Generation at 9x9/3,488; this pass targets the datablock churn and Python loops that remained after D116 removed bpy.ops from the per-stage path. VERIFIED in Blender 03 Jul 2026: 0.3s per Next Generation at 9x9 with 6,041 objects (was 12.8s at ~3,488) - roughly 40x faster at nearly double the population. Closes T012.

D117 newadoptedProcess03 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.

Rationale & optionsOptions considered
  • Leave only the granular D113-D116 + T012-T014
  • Add a capstone decision indexing them (chosen)
  • Fold everything into one decision instead of granular records

Rationale: The guiding principle held throughout: generation writes JSON only, and everything visual - labels, reports, the Integrity Check - renders on demand, so the working loop stays fast (Miles's 'no HTML updates per generation; replay on demand' call). One capstone ties the day's granular records into a coherent move rather than a scatter of edits, and records the working method D112 set up: build-test-fix in one session, records captured at the end.

D116 newadoptedGenerator03 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.

Rationale & optionsOptions considered
  • Leave the surface on bpy.ops
  • Batch the surfaces then apply the scale once
  • Build the surface as raw mesh via from_pydata (chosen)

Rationale: Each bpy.ops forces a full dependency-graph re-evaluation of a scene that grows as the build proceeds - a quadratic cost that bit hardest at 9x9 (162 surface ops). Direct mesh-data creation removes them, so 9x9 does the same handful of scene re-evaluations as 3x3.

D115 newadoptedDesign03 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.

Rationale & optionsOptions considered
  • Keep labels built by the generator
  • A generator flag to build labels only when set
  • On-demand panel toggle; the generator builds none (chosen)

Rationale: Labels are a viewing aid, not design data, so they should not tax every generation. Moving them off the generation path was the single biggest 9x9 speed win (roughly 9s to 4s). Building on demand honours the same JSON-now / render-on-demand principle as reports (D114).

D114 newadoptedProcess03 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).

Rationale & optionsOptions considered
  • Keep the per-generation integrity check
  • Run only the fast runtime checks after generation
  • Remove it from the generation path; STATUS line plus on-demand button instead (chosen)

Rationale: The integrity check validates bundle structure, addon source and HTML records - none of which a generation changes - so running it per generation was pure cost (file reads plus an HTML report write) for no signal, and it worsened the already-slow 9x9 generation. Miles's principle: no HTML updates per generation; data lives in JSON and reports replay on demand, like Navigator Report. The STATUS line gives the same feedback without the cost.

D113 newadoptedDesign03 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.

Rationale & optionsOptions considered
  • Leave the quick-select and Garden Room in place
  • Remove Garden Room only (leaves a pointless one-option selector)
  • Remove the quick-select, show the picker directly, keep the enum as a hook (chosen)

Rationale: Applies D111 (built things earn panel space). Garden Room was an orphan leaf - selecting it only showed 'No object set', with no GRAL generator behind it and the generator never reading the enum. With a single built language a selector is dead weight. Keeping the enum registered preserves the hook without showing an unbuilt control (D072: no placeholders).

D112 newadoptedProcess03 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.

Rationale & optionsOptions considered
  • Continue as-is with memory summaries
  • Skill + automation + fresh sessions (chosen)
  • Move all development to Claude Code immediately (evaluate first instead)

Rationale: The conversation itself had become the store of procedure - slow to carry, fragile to transfer, and the breeding ground for errors like T008. Encoding procedure as files (skill + scripts) makes it durable, versioned and testable, in the same spirit as the records system itself.

D111 newadoptedPanel03 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.

Rationale & optionsOptions considered
  • Keep DESIGN LANGUAGE as a slim reference section
  • Delete with Objects rescued into CREATE (chosen)
  • Per-change spec amendments instead of one batch (rejected by D107 protocol)

Rationale: Every item came from Miles working the panel live: Stage Size was buried and truncated; mutation had been unfindable; the Objects box was lock theatre; the DESIGN LANGUAGE section had emptied itself into a shell ('delete Design Languages from panel. We dont need this any more'). The panel now reads as one vertical working loop: language -> objects -> generate -> rules -> navigate -> records -> platform.

D110 newopenDesign Language02 Jul 2026

Evolve / Explore / Backtrack: the platform's mode grammar

Direction agreed, implementation deferred (Miles: open, no action today). The platform has three fundamental stances toward the design space, named by Miles: EVOLVE (selection breeds instantly - the world is hot; forward motion), EXPLORE (selection is safe - orbit, inspect, Navigator; standing still), BACKTRACK (step back through the lineage - F006 promoted from convenience utility to core verb). Forward, still, back: the complete verb set of genetic design. When implemented, the triad becomes the panel's organising principle - the mode you are in sits at the top and everything arranges beneath it. Naming candidates considered and rejected: Play/Pause (transport metaphor is right but 'Play' implies time passing without the user's click - GAAD never breeds on its own).

Rationale & optionsOptions considered
  • Play / Pause transport metaphor
  • Live / Safe
  • Evolve / Explore / Backtrack (agreed direction)

Rationale: Emerged from Miles's Rapid Evolution request (F022) and his usage narrative: click, click, click, click - pause - orbit, inspect - resume - click, click - Navigator - explore. The pause state and the Navigator visit are the same mental state ('I am looking, not breeding'), so the panel should organise around states, not tool categories. Also names something the 1994 thesis system never had: a stance toward the design space.

D109 newadoptedPanel02 Jul 2026

Panel v2_1 reflow: subtraction first

The panel is reflowed per mock-up v2_1 (tested hands-on by Miles before any addon change). REMOVED: DEVELOPMENT (-> Records Hub button, D108), SETTINGS (version strings duplicate the STATUS line; Last Full Release moves to the Hub page), TOOLS (was empty), and GAAD Studio (DEFERRED, not deleted - Miles is not developing Studio yet; it returns to the spec when its development resumes). RELOCATED: Reset GAAD Platform to the foot of GAAD Lab beside Integrity Check (platform-level actions together; keeps its confirm dialog). PROMOTED: Evolution Rules out of the Design Language dropdown into CREATE as a collapsible block directly under Next Generation - Miles could not find mutation, buried two levels deep behind a dropdown; the sliders are now always editable, since the generator re-reads them on every run (the old 'Locked - used for this run' state on rules was UI-imposed, not real). One home, not two: Evolution Rules no longer appears in the DL sub-tab list (D102 cover: the panel is a VIEW onto the DL; the DL still owns Evolution Rules as data). REDESIGNED: the Objects sub-tab becomes a CONTRACT VIEW - mid-run one read-only line showing the actual locked object set, toggles rendered only between runs when they work (Miles: 'object panel sucks' - the locked-but-clickable-looking mixed states were the worst of both). COLLAPSE: 'Collapse Sections' removed; 'Collapse All' is one two-way toggle whose label flips to 'Expand All' when everything is closed (Miles's mock-up feedback). The three tech-spec Section 3 drift points resolve toward the live addon (Navigator Report name kept; the DEVELOPMENT drift dissolves with the section). Implemented as addon v0_68 against mock-up v2_1; static check v0.3 expectations updated to match.

Rationale & optionsOptions considered
  • Patch individual complaints without a reflow
  • Full restructure including the Evolve/Explore/Backtrack triad now
  • Subtraction-first reflow now, triad reserved (chosen)

Rationale: Miles's hands-on feedback across the 0_107/0_108 test rounds: 'the panel is causing me problems and is not flowing well'. Subtraction first: four sections gone or replaced by single buttons removes most of the friction before any restructuring. Reference material becomes compact and read-only while working; controls appear where and when they act.

D108 newadoptedPanel02 Jul 2026

Records Hub replaces the nine DEVELOPMENT buttons

The DEVELOPMENT section's nine record buttons are replaced by ONE 'Records Hub' button (HOME icon) that opens Records/gaad_records.html - every record type, one searchable, fully offline page. Resolves the panel-wiring question parked since the Hub was built in 0_105 (replace vs sit alongside): REPLACE, per Miles's call ('development settings and tools need deleting, they serve no purpose, one new button to Hub (home) would be nice').

Rationale & optionsOptions considered
  • Hub alongside the nine buttons
  • Hub replaces the nine buttons (chosen)
  • No Hub wiring (status quo)

Rationale: The Hub aggregates all record entries with search; nine single-purpose buttons were panel bloat from the moment the Hub existed. 'Home' is the right mental model: the front door to the project's memory.

D107 newadoptedProcess02 Jul 2026

Panel spec unfrozen; ownership with Claude; sanction-then-batch protocol

The v1_0 panel spec freeze (D100) is lifted by Miles's explicit call: 'I am happy to unfreeze the panel spec so we can update as needed, you own it.' Panel spec ownership sits with Claude as Specification Owner: Miles sanctions direction; Claude owns coherence, consistency and structural detail, iterating on the mock-up chain and prompting Miles when a formal amendment to the spec document is warranted, batching several settled items into one amendment rather than churning the document per change. Miles approves each amendment before it lands in the records.

Rationale & optionsOptions considered
  • Keep the freeze and log feedback for a future revision
  • Unfreeze with per-change document updates
  • Unfreeze with sanction-then-batch amendments (chosen)

Rationale: Miles is the first person working the panel hard across generations, scene switches and resets, and reported it 'not flowing well' - drift between specced-well and works-well-in-the-hand is exactly the evidence the anti-churn discipline (D103) says should drive the next revision. The sanction-then-batch protocol keeps the spec document stable and authoritative while the working layer iterates.

D106 newadoptedArchitecture02 Jul 2026

Fast geometry: direct mesh construction, joined per variant

From generator v0_33, variant primitives are built as raw mesh data (pure-Python vertex/face construction, replicating the v0_32 primitive layouts exactly) and joined into ONE mesh object per stage, replacing one bpy.ops object per primitive. Each primitive keeps its own material as a slot on the joined mesh (faces assigned by material_index) and its full parameters plus a logical object_name in the replay JSON, which remains the record of every individual primitive. The joined object carries variant-level properties (gaad_variant_id, gaad_stage_number, gaad_object_count, gaad_shape_types, gaad_is_generated), so champion selection by clicking is unchanged. Stage furniture (surface, labels, title panel, camera, sun) is out of scope: fixed overhead, not the scaling problem. The 3D view, materials, rendering and solar behaviour are unchanged: same polygons, same materials, same placement. Incidental fix: the v0_32 wedge face list carried a duplicated slope face with mixed winding (invisible in the double-sided viewport); the wedge is now a clean 5-face closed solid with the same vertex positions.

Rationale & optionsOptions considered
  • Keep one bpy.ops object per primitive (status quo)
  • Direct mesh construction only, still one object per primitive
  • Linked mesh data (instancing) - shares mesh datablocks but object count unchanged
  • Direct mesh construction + join per variant (chosen)
  • Geometry nodes per stage (F015 - remains the candidate for future languages/city scale)
  • Lazy build - only construct stages in view, regenerate on demand (D030-adjacent, deferred)

Rationale: Blender's dependency graph degrades with OBJECT COUNT, not polygon count. A 5x5 world at typical object counts already places hundreds of primitive objects per generation; beyond 5x5 the viewport, selection and bulk deletion all suffer (T006 is a bulk-deletion symptom). Joining collapses object count from N_stages x object_count to N_stages, flat as worlds scale, and removing bpy.ops from the variant path removes a full scene-update per primitive plus a transform_apply per primitive. The scene becomes a render of the JSON record rather than the record itself, which strengthens the decisions-become-data principle (D008): the semantic identity of every primitive lives in the JSON. Miles confirmed the forward path before adoption: complex buildings and cities per stage remain possible (join granularity is a dial - per variant now, per building later; polygon count, which Blender handles well in a single mesh, replaces object count as the limit), and a future slow path can rebuild any variant from the JSON as separate editable objects for the chosen final design. Accepted tradeoffs: no per-element viewport selection or per-element modifiers on generated variants; per-primitive custom properties replaced by variant-level properties plus the JSON. Verified by out-of-Blender tests: vertex-layout parity with v0_32 per shape, closed-solid winding (signed-volume positive and translation-invariant), exact volumes for cube/pyramid/wedge and faceted-band volumes for cylinder/dome, placement and rotation parity, and an end-to-end joined-build test (material slots, material_index ranges, properties, JSON object_name writeback).

D105 newopenConvention02 Jul 2026

Orphaned reference documents in Records/ need indexing

Seven reference/analysis documents in Records/ (gaad_charter.md, gaad_brand.md, gaad_roadmap.md, gaad_episode_plan.md, gaad_id_mapping.md, gaad_project_background.json, gaad_1994_audit.md) sit outside the JSON -> MD -> HTML record pipeline and are not referenced by the technical specification, any generator, or any other record. They are functionally orphaned: present but undiscoverable except by browsing the folder directly. Logged as an open decision rather than fixed silently, since resolving it (index all seven from the tech spec, consolidate some, or retire stale ones such as gaad_1994_audit.md now that gaad_audit.html supersedes it) is a content call, not a mechanical fix. Marked as orphaned in the Section 4 folder tree (gaad_technical_spec.json) so the gap is visible rather than requiring inspection to notice. Follow-up action (not built yet): add an orphaned-file WARN check to gaad_static_check.py Layer 1 - a Records/ file that is neither a record's .json/.md/.html trio, nor a generate_*.py, nor referenced in any technical-spec 'see' array, flagged as a warning (not a fail, since orphaned is not the same as broken).

Rationale & optionsOptions considered
  • Leave as-is (status quo)
  • Index all seven from the tech spec with one-line descriptions
  • Review each file individually - index, consolidate, or retire
  • Fold them into the Records Hub as a tenth category

Rationale: Matches the pattern already surfaced in D031 and Section 9 (File Naming Conventions): drift and gaps should be tracked as decisions so they get resolved deliberately, not accidentally. The automated-check follow-up converts tonight's manual discovery into a permanent guard against the same class of drift recurring unnoticed.

D104 newadoptedProcess01 Jul 2026

DL v0.03 specification filed into the bundle under Claude's ownership

The GAAD Design Language Specification v0.03 (owner: Claude, Specification Owner per P045) is filed into the versioned bundle in Spec/, as both the authoritative .docx and a hyphen-clean .md reference extraction, alongside the frozen panel mock-up v1_0. This stops the frozen GRAL baseline (D103) from living only in chat history. The bundle carrying it is named GAAD Development 0_103 to avoid confusion with the separately-scoped 0_102 task list. Authoring the DL as gaad_design_language.json in the house record style (so it obeys JSON -> MD -> HTML like every other record) remains outstanding and is developed alongside GRAL v0.01, not in isolation.

Rationale & optionsOptions considered
  • Leave the DL spec in chat/workspace only
  • File the .docx into the bundle now; author the JSON later alongside GRAL
  • Author the JSON immediately before filing anything

Rationale: A frozen baseline that GRAL depends on should travel with the bundle. Filing the document now closes the immediate gap; authoring the JSON is deferred deliberately so the schema is proven against a real language (GRAL) rather than designed in isolation, per the spec's own development sequence.

P044
D103 newadoptedProcess01 Jul 2026

Freeze DL v0.03 for the duration of GRAL (anti-churn)

GAAD DL v0.03 is frozen as the baseline specification for the entire duration of GRAL v0.01. GRAL is implemented against v0.03 exactly as peer-reviewed and approved, with no specification changes mid-implementation. The five peer-review recommendations (required-but-empty human-centred sections; unknown-key validation as warning within a reserved namespace; a Terminology section referencing gaad_terminology.json; a shared GAAD Principles record; and an explicit idea-to-standard lifecycle) are logged and parked as the v0.04 agenda, to be applied after GRAL and informed by it. Anything GRAL surfaces that appears to need a spec change is added to the v0.04 backlog rather than reopening v0.03. The freeze may only be broken by a genuine blocker where GRAL cannot proceed, and only as a deliberate, logged exception.

Rationale & optionsOptions considered
  • Issue v0.04 now folding in all five recommendations before GRAL
  • Freeze v0.03 for GRAL's duration and park the recommendations for v0.04

Rationale: Applying the recommendations before GRAL risks architecture churn - stopping to redesign the architecture every time implementation reveals a detail, so the spec never stabilises and GRAL never ships. Freezing the approved baseline breaks that loop. Recommendations 1 and 3 in particular will be better shaped by what GRAL actually needs, so parking them is not just safer but produces better decisions.

P044
D102 newadoptedArchitecture01 Jul 2026

GAAD Design Language (DL) is the master architecture; panel is a view; JSON is source of truth

The GAAD Design Language becomes the authoritative architectural model from which all Design Languages (PAL, GRAL, MAL, HAL) inherit. The DL defines the data model, not the Blender interface. The Blender Panel is a presentation layer onto the DL and is not required to expose every DL field or share its structure. JSON remains the single source of truth; documentation, reports and interfaces are derived from it. The DL comprises eleven sections (Metadata/Identity, Philosophy, People, Place, Experience, Objects, Parameters, Relationships, Evolution Rules, Evaluation Criteria, Initial State), with human-centred sections optional so a thin language such as PAL validates without inventing content. The Project Design Record is a SEPARATE, linked record type (record_type 'design_record'), because the Language is stable while the Record grows. Two owner-level corrections were made to the coordinated response: (1) Seed is a run control belonging to the Design Record, not a DL section, so it maps to no DL section; (2) Getting Started is derived help generated from Metadata and Philosophy, not the storage location of Metadata. Issued as GAAD DL v0.03 for peer review; GRAL becomes the first reference implementation to validate the spec before v1.00.

Rationale & optionsOptions considered
  • Keep the panel and DL structurally identical (seven-part panel = DL)
  • Make the DL the master data model and treat the panel as a partial view onto it

Rationale: The panel and the DL were drifting into two competing structures. Declaring the DL the master and the panel a view resolves the collision cleanly and matches GAAD's existing JSON-source discipline. The two owner corrections keep the DL-to-panel mapping internally consistent in both directions.

P043P044
D101 newadoptedArchitecture30 Jun 2026

v0_101 panel refinements; Navigator rename; GAAD Studio added

Several refinements built on the v1_0 spec (bundle 0_101, addon v0_64). Objects and Evolution Rules stay visible after Initial Generation but are greyed out so the run's settings remain inspectable. The GAAD Studio panel is added at the same level as GAAD Lab (CREATE: Initial Generation + Next Generation; VIEW: 3D/Perspective/Plan/Stage; Reset GAAD Platform at the bottom). Collapse Panel is split into Collapse All and Collapse Sections. The tree scene is renamed from 'GAAD Design Evolution' to 'GAAD Navigator' across generator, tree and addon; the HUD titles change to 'Navigator' and 'Generator'; and the report becomes the 'Navigator Report' with GAAD-branded HTML.

Rationale & optionsOptions considered
  • Hide Objects/Evolution Rules after Gen 1 (previous behaviour)
  • Keep them visible but greyed so the run stays inspectable

Rationale: At this stage of development it is important to see what objects and rules drove a generation even after it has run; hiding them lost useful context. Renaming the tree scene, HUD and report to Navigator aligns the whole platform with the panel's Navigator terminology.

D100 newadoptedArchitecture30 Jun 2026

v1_0 panel spec adopted as locked blueprint; built into the real addon

The GAAD panel structure is frozen at v1_0 (GAAD panel mock-up v1_0) and adopted as the locked blueprint of record. The real addon (gaad_rebirth_addon_v0_63) is restructured to match it: STATUS, CREATE, DESIGN LANGUAGE with a Current Design Language selector and seven sub-sections (Getting Started, Knowledge, Objects, Parameters, Evolution Rules, Seed, Initial State), VIEW, DEVELOPMENT, SETTINGS, TOOLS, plus Integrity Check and Collapse Panel at the bottom of GAAD Lab. Where a leaf is not yet functional it is shown wrapped in angle brackets. OBJECT COLLECTION folds into Objects and MUTATION folds into Evolution Rules. A Technical Specification index (gaad_technical_spec) is added under DEVELOPMENT. This milestone bundle jumps to GAAD Development 0_100 to mark its significance. The frozen mock-up is kept as a separate Spec artifact and is never folded into the addon chain.

Rationale & optionsOptions considered
  • Keep iterating the mock-up without committing to a real build
  • Freeze the spec at v1_0 and build the real addon to match it

Rationale: The panel design had stabilised across many small iterations and a critical architectural review scored 9/10. Freezing it as a versioned blueprint and building the real addon against it locks in the agreed structure, while the angle-bracket convention keeps not-yet-built leaves honest and visible rather than hidden.

P042
D099 newadoptedArchitecture30 Jun 2026

DESIGN LANGUAGE panel section added; MUTATION gated by selection

New DESIGN LANGUAGE section added to the panel between CREATE and MUTATION, implementing D098. Mutually exclusive selector (single EnumProperty, gaad_design_language) offering Garden Room, Manhattan and Primitives; default Primitives. Garden Room and Manhattan are selectable now but show "Not yet built - no parameters available" since neither language has primitives or generation logic yet. MUTATION section is gated on the selection: shows the existing five sliders only when Primitives is active, otherwise shows "No parameters yet". CREATE buttons remain active regardless of language selected, so the user is never blocked, only informed.

Rationale & optionsOptions considered
  • Grey out Garden Room and Manhattan entirely until built
  • Auto-revert to Primitives if an unbuilt language is selected
  • Allow selection now, show an honest not-yet-built message, keep CREATE usable

Rationale: Selecting an unbuilt language should not feel broken or block the user from using GAAD as normal. An honest in-panel message keeps the mechanism visible and testable now, ahead of HAL/GRAL primitive work which depends on the outcome of D038.

D098 newadoptedArchitecture30 Jun 2026

GAAD as platform, AL languages as Object Collection modes

GAAD confirmed as the underlying platform: one breeding engine, one Records system, one panel, one HUD, shared across all Architectural Languages. Object Collection becomes a language selector (MAL, HAL, GRAL, and future languages) followed by primitives specific to that language. The existing Cube/Pyramid/Dome/Wedge/Cylinder set remains the generic GAAD default for now; formal reclassification as MAL primitives is deferred to a future decision.

Rationale & optionsOptions considered
  • GRG/HAL/MAL as separate standalone projects with duplicated engines
  • GRG/HAL/MAL as a feature bolted onto existing Object Collection without a language concept
  • GAAD as platform with Object Collection offering selectable Architectural Languages

Rationale: Garden rooms, houses and Manhattan-style towers are structurally different vocabularies of form but share the same genetic breeding need, Records system, panel and HUD. Treating them as languages within one platform avoids duplicating the engine while keeping each language's primitive set uncrowded and distinct.

P041
D097 newadoptedFeature30 Jun 2026

Layer 1 static test harness introduced

New script gaad_static_check.py added to Scripts/. Checks: blend file present, expected folders present, expected scripts present, expected records present, four-point addon version match, em dash scan, expected panel labels present, expected operators present, HTML records well-formed. Writes a branded gaad_test_report.html to Reports/ and opens it automatically. New operator gaad.run_test and "Test Script" button added to TOOLS.

Rationale & optionsOptions considered
  • No automated testing; continue manual checklist per release
  • Build a Layer 1 static check script run from the panel

Rationale: Manual checklists do not scale and are error-prone across many small panel changes per session. A one-click static check run from the panel catches regressions in seconds, before the bundle is used.

P039
D096 newadoptedArchitecture30 Jun 2026

Stage Size and Stage Gutter written to scene properties by generator

Generator writes gaad_stage_size_m and gaad_stage_gutter_m to the scene as custom properties immediately after building the world. Addon reads these properties for display rather than hardcoding the values.

Rationale & optionsOptions considered
  • Hardcode stage size/gutter values in the addon
  • Have the generator write them to scene properties for the addon to read

Rationale: Keeps the addon decoupled from generator internals; if stage geometry constants ever change, the addon automatically reflects the new values with no addon code change required.

D095 newadoptedFeature30 Jun 2026

Perspective View built (F012)

New operator gaad.perspective_view added: eye-level perspective view of the stage grid, 82 degree tilt, distance 250. Button "Perspective" sits below "3D" in the VIEW section.

Rationale & options

Rationale: Closes out F012 from the feature backlog, giving a human eye-level viewing angle distinct from the existing top-down-leaning 3D view.

D094 newadoptedArchitecture30 Jun 2026

EXPLORE renamed to VIEW with simplified button labels

EXPLORE section renamed to VIEW. Buttons simplified: "3D View" to "3D", "Plan View" to "Plan", "Stage Isolator" to "Stage". New "Perspective" button added below "3D" (see D095).

Rationale & optionsOptions considered
  • Keep EXPLORE name and verbose button labels
  • Rename to VIEW with terse labels

Rationale: VIEW more accurately describes camera/viewport controls now that Generator and Navigator moved to CREATE. Terse labels read faster in a narrow panel.

D093 newadoptedArchitecture30 Jun 2026

CREATE section restructured: Initial Generation, Next Generation, Generator, Navigator, Report

CREATE section rebuilt with five items in order: Initial Generation (renamed from Create First Generation; greyed out after Gen 1), Next Generation (renamed from Create Next Generation, then Start Generation), a separator, Generator (renamed from Design Generator, moved from EXPLORE), Navigator (renamed from Design Tree, moved from EXPLORE), a separator, and Report (renamed from Design Evolution Report, moved from KNOWLEDGE; now runs the report script and opens the HTML in one click).

Rationale & optionsOptions considered
  • Leave Design Generator and Design Tree under EXPLORE
  • Move them into CREATE alongside generation controls

Rationale: Generator and Navigator are core creation-flow destinations, not exploratory extras; grouping them with Initial/Next Generation and Report makes CREATE the single home for the full design workflow.

D092 newadoptedArchitecture30 Jun 2026

CONFIGURATION section renamed to SETTINGS

The CONFIGURATION panel section (script versions, last release) renamed to SETTINGS throughout the addon (draw, register, unregister).

Rationale & optionsOptions considered
  • Keep CONFIGURATION
  • Rename to SETTINGS

Rationale: SETTINGS is more familiar terminology to most software users than CONFIGURATION.

D091 newadoptedArchitecture30 Jun 2026

STATUS line redesigned to compact pipe-separated format

STATUS section changed from a multi-line label block to a single compact pipe-separated line: "Gen N | NxN | v_addon | v_generator | object_count". Dots shown for any segment not yet known (before Gen 1: "... | ... | v_addon | ..."). Always visible, not collapsible. Object count formatted with thousands separator.

Rationale & optionsOptions considered
  • Keep multi-line STATUS labels
  • Single compact pipe-separated line

Rationale: A single line reads faster at a glance and matches how a HUD or dashboard typically communicates live state, without consuming panel vertical space.

D090 newadoptedArchitecture29 Jun 2026

GAAD Lab panel restructure into collapsible sections

Rename the developer panel 'GAAD Rebirth' to 'GAAD Lab' and reorganise it into eight collapsible sections: OBJECT COLLECTION, CREATE, MUTATION, KNOWLEDGE, EXPLORE, DEVELOPMENT, CONFIGURATION, TOOLS. The GENERATE heading becomes CREATE; Reset GAAD Platform moves under TOOLS; Design Evolution Report sits under KNOWLEDGE; the record links sit under DEVELOPMENT; the version block becomes its own CONFIGURATION section; Object Collection is its own section above CREATE (still shown only before Gen 1). Mutation labels are Title-Cased and 'Min/Max objects' become 'Minimum/Maximum Objects'. Lab panel only, panel-only with no algorithm changes, nothing removed. Framework / AL / Brief / Knowledge Records are deliberately NOT added (Charter principle: the user sees only what exists). Implemented in addon v0_54 then v0_55 (em dashes scrubbed).

Rationale & optionsOptions considered
  • Keep the flat GENERATE/EXPLORE prototype layout
  • Restructure into named collapsible sections (GAAD Lab)

Rationale: The panel had grown bottom-up so everything carried equal weight. Grouping by intent with collapsible sections makes the architecture read like GAAD rather than a prototype, while staying low-risk (no algorithm change) so testing continues immediately. It sets a stable information architecture that pays dividends for every release that follows. Builds on F009.

P038
D089 newadoptedUI28 Jun 2026

Scene backgrounds set to pure black

Changed the viewport and world background colour from Deep Teal (#1A535C in the generator) and brand dark (#0D0E11 in the addon) to pure black (#000000) across both scripts. The generator's world node and solid-mode viewport are now black; the addon sets the viewport background to black on load and on Create First Generation.

Rationale & optionsOptions considered
  • Keep Deep Teal / brand dark (rejected: Miles preferred black for cleaner contrast)
  • Pure black #000000 (chosen — cleaner, lets the stages and forms stand out)

Rationale: Black provides the strongest contrast against the neutral stage surfaces and coloured primitives. The Deep Teal and brand dark were adopted at different points (D041, D087) but Miles preferred a simpler, cleaner black backdrop for the working environment.

D088 newadoptedRecords28 Jun 2026

Release Notes as styled HTML (same card feed as other records)

Generate gaad_releases.html from gaad_releases.json using the same modern card-feed template (gaad_html_modern.py) as all other record types. Added to generate_all_html.py pipeline. The addon's Release Notes button now opens the HTML (with release.txt fallback). Release Notes moved from the Reports section into Development Reports.

Rationale & optionsOptions considered
  • Keep release.txt only (rejected: inconsistent with HTML records)
  • Styled HTML from JSON like other records (chosen — consistent, modern, filterable)

Rationale: All other record types already have the JSON → MD → HTML pipeline. Release Notes was the odd one out with a plain text file. Bringing it into the HTML system gives it the same visual treatment — gold timeline, expandable cards, version chips — and makes it accessible from the Development Reports section alongside all other project records.

D087 newadoptedVisualisation28 Jun 2026

Viewport background set to GAAD brand dark (#0D0E11)

Set the Blender 3D viewport background colour to GAAD brand dark (#0D0E11 = Midnight) using shading.background_type='VIEWPORT' and a custom background_color. Applied on addon registration and on Create First Generation to catch viewports created after load.

Rationale & optionsOptions considered
  • Blender theme default (rejected: grey background doesn't match GAAD brand)
  • World shader background (rejected: only visible in rendered mode)
  • Viewport custom background colour (chosen — works in solid/material preview, self-contained)

Rationale: The GAAD brand uses a very dark (#0D0E11) background throughout its HTML records, HUD overlay, and visual identity. Setting the viewport to match creates a cohesive visual experience. The setting is per-viewport and does not modify the Blender theme globally.

D086 newadoptedBugfix28 Jun 2026

Reset fix — stray objects when resetting from Design Evolution scene

Replace the selection-based object deletion in the Reset operator (bpy.ops.object.delete()) with bpy.data.objects.remove(obj, do_unlink=True). The old method only worked for objects in the active scene — when Reset was triggered from the Design Evolution scene, Generator scene objects could not be selected and survived as strays. The new method is scene-independent and also scans ALL scenes for stray GAAD objects.

Rationale & optionsOptions considered
  • Switch to Generator scene before deleting (rejected: fragile, changes user context)
  • Use bpy.data.objects.remove() throughout (chosen — scene-independent, robust)

Rationale: bpy.data.objects.remove() is the correct low-level API for scene-independent object removal. Step 6 (Evolution scene cleanup) was already using it — applying the same approach to Steps 1-3 makes the entire Reset operator consistent and reliable regardless of which scene the user is in.

D085 rebirthadoptedGenome28 Jun 2026

5×5 grid added; grid labels tidied (2×2 Classic / 3×3 / 4×4 / 5×5)

Add a 5×5 grid option (25 stages) to the Stage Size selector. Drop the 'Default' and 'Testing' suffixes from the 3×3 and 4×4 labels — only 2×2 keeps its 'Classic' subtitle. The generator's build_stage_grid(n) already handles any N; changes are to the addon enum and the generator's _grid_size() validator.

Rationale & optionsOptions considered
  • Keep 3 options with descriptive labels (rejected: labels 'Default' and 'Testing' no longer accurate)
  • Add 5×5 and tidy labels (chosen)

Rationale: 25 stages gives the user a much larger population to select from, which is valuable for exploring design space. The dynamic grid already supports any N, so adding 5×5 is a trivial change. Tidying the labels makes the selector cleaner.

D084 rebirthadoptedUX28 Jun 2026

Allow Mutation toggle — checkbox instead of blue toggle button

Change the Allow Mutation to Other Types control from a full-width toggle button (toggle=True, which renders as a loud blue pill when on) to a standard checkbox. The checkbox is quieter and consistent with the Orthogonal Rotation Only checkbox above it. Slider colours are accepted as Blender standard (same territory as D082).

Rationale & optionsOptions considered
  • Full-width blue toggle button (rejected: too visually loud, dominates the Mutation section)
  • Standard checkbox (chosen — quiet, consistent with other boolean controls)
  • Custom colour toggle (rejected: same API limitation as D082)

Rationale: Miles flagged the blue toggle as visually loud in the Mutation section. A checkbox is the natural Blender widget for a boolean setting. The slider fill colours remain blue (Blender theme standard) — changing them would require slider=False which loses the drag gesture.

D083 rebirthadoptedUX28 Jun 2026

Panel redesign — Records becomes Development Reports; Reports section removed

Rename the panel's 'Records' collapsible section to 'Development Reports' for clearer language. The separate 'Reports' collapsible section is removed — Design Evolution Report moves above Reset GAAD Platform for quick access, and Release Notes moves into Development Reports. The scripts info box is renamed to 'Configuration' with a title and a 'Last Full Release' reference line.

Rationale & optionsOptions considered
  • Keep Records and Reports as separate sections (rejected: two collapsible sections for similar content)
  • Merge everything into one section (rejected: Design Evolution Report needs quick access, not buried)
  • Development Reports + Design Evolution Report above Reset (chosen — clean hierarchy)

Rationale: The panel had too many small collapsible sections. Design Evolution Report is a frequently-used action that should not be buried inside a collapsed group. 'Development Reports' better describes the collection of project records (decisions, features, release notes etc.) than the generic 'Records'. Adding 'Configuration' as a titled box and showing the last release version gives the panel a professional, complete feel.

D082 newadoptedUX28 Jun 2026

Primary-action button highlight — Blender alert red, not GAAD Gold (platform limitation)

Highlight the primary Generate button using Blender's built-in alert state (layout.alert = True): Create First Generation glows on a fresh/reset world when primitives are ticked; Create Next Generation glows when a stage object is selected. The alert colour is red in Blender's default theme. GAAD Gold (#D9A441) was preferred but Blender's Python API provides no mechanism to set an arbitrary button colour — alert is the only highlight available and it uses the theme's fixed alert colour. Accepted as a platform limitation; red is Blender's native language for 'this button is live' and users already understand it. Added in addon v0_51.

Rationale & optionsOptions considered
  • GAAD Gold button colour (preferred but not possible — Blender API limitation)
  • Change Blender theme alert colour to gold (rejected: affects all of Blender, not just GAAD)
  • Blender alert red as primary-action highlight (chosen — platform-native, understood by users)
  • No button highlight (rejected: primary action should be visually clear)

Rationale: The Generate buttons are the single most important action in the panel — highlighting them when they are ready to fire makes the workflow self-guiding. Blender's alert system is the correct, supported way to do this even though the colour is red rather than brand gold. Fighting the theme system for a custom colour would add fragility for a cosmetic gain.

D081 1994adoptedRecords28 Jun 2026

Generation Timer — record build_time_seconds in JSON and Design History Report

Add a high-resolution timer to the generator (v0_29) that records how long each generation takes to create, stored as build_time_seconds (2 decimal places) in the generation JSON. The Design History Report (v0_6) gains a BUILD TIME column showing the value for each generation. The 1994 GAAD had a timer where generations took approximately 5 minutes for a 2×2 grid; in Rebirth 2026 a 4×4 grid (16 stages) builds in roughly 6 seconds. Older generation JSON files without the field display a dash in the report. Uses time.perf_counter() for sub-millisecond accuracy.

Rationale & optionsOptions considered
  • No timer (status quo)
  • Timer in the generator only, not surfaced in reports
  • Timer in generator + BUILD TIME column in Design History Report (chosen)

Rationale: Build time is a core performance metric that echoes the 1994 thesis timer. Recording it in JSON makes it available for future analysis (performance trends across grid sizes, hardware comparisons). Surfacing it in the Design History Report gives the user immediate feedback on how long each generation took — a satisfying data point that also highlights the 200× speed improvement over 1994.

P036
D080 rebirthadoptedGenome28 Jun 2026

Stage Size — configurable NxN grid (2×2 / 3×3 / 4×4)

Add a Stage Size selector to the Object Collection panel (addon v0_49, generator v0_28). The user picks from three grid layouts before creating Generation 1: 2×2 Classic (4 stages), 3×3 Default (9 stages, the standard layout), or 4×4 Testing (16 stages). The hardcoded 3×3 stages list in the generator is replaced by a build_stage_grid(n) function that computes positions dynamically. Each stage keeps the same physical size; only the grid footprint changes. The grid size is stored in the scene property gaad_grid_size and recorded in the generation JSON (world.stage_grid, world.stage_count). The selector is hidden once Gen 1 exists (same visibility rule as the primitive toggles).

Rationale & optionsOptions considered
  • Hardcode three separate stage lists (rejected: duplication, hard to extend)
  • Dynamic grid builder with NxN parameter (chosen: clean, extensible)

Rationale: Testing different grid sizes is essential for evaluating population diversity and selection pressure. 2×2 is the minimal viable grid (small/quick); 3×3 is the established default from the 1994 thesis; 4×4 gives a larger population for richer testing. Using a function means future grid sizes (5×5, 6×6) are trivial to add.

D079 1994adoptedInteraction27 Jun 2026

Stage Isolator — toggle hide/show other stages (F004)

Add a Stage Isolator toggle to the EXPLORE panel (addon v0_48). When an object on a stage is selected, clicking 'Stage Isolator' hides all objects NOT belonging to that stage (matched by the G###_S### variant prefix), saves the current 3D view state (perspective, location, distance, rotation), and frames the viewport on the isolated stage. The button label changes to 'Show Stages'; clicking it unhides everything and restores the saved 3D view exactly. Resolves the 1994 thesis 'Isolator' feature (F004 in the audit).

Rationale & optionsOptions considered
  • A separate Blender scene for isolation (rejected: heavyweight, loses context)
  • Toggle hide_viewport on non-matching objects + save/restore view state (chosen)

Rationale: The 1994 GAAD had an Isolator to examine one macro phenotype in detail. Using hide_viewport is lightweight and reversible — no objects are moved or deleted, and saving the view state means the user returns exactly where they were. Matching by the G###_S### prefix is robust because every object and surface in the generator carries this naming convention.

P034
D078 1994adoptedInteraction27 Jun 2026

Plan View & 3D View buttons in the EXPLORE panel

Add two viewport-preset buttons to the EXPLORE section of the addon panel: '3D View' (perspective, 65° elevation, view_distance 430) and 'Plan View' (top-down orthographic, identity quaternion, view_distance 430). Both call view_all after setting the camera to frame the full stage grid. Plan View resolves the 1994 thesis '2D Development Zone' feature (a plan view of all progeny). 3D View provides a quick reset to a readable perspective angle. Added in addon v0_47; EXPLORE order is now Design Generator, Design Tree, 3D View, Plan View.

Rationale & optionsOptions considered
  • A single toggle (plan/perspective) — rejected: two named buttons are clearer
  • Two separate buttons with explicit labels (chosen)

Rationale: The 1994 GAAD had a dedicated 2D Development Zone (plan view of all progeny) as a core viewing feature. Adding a Plan View button restores this capability. A companion 3D View button gives the user a quick way to return to a useful perspective angle without manually orbiting. Both are lightweight viewport manipulations with no scene data changes.

P034
D077 rebirthadoptedGenome27 Jun 2026

Mutation tuning values — live sliders wired in v0_26

Revised per-generation mutation parameters: shape-switch chance 12% → 10%; height mutation ±50% → ±20%; rotation drift is now UNCAPPED (still ±5°/gen, but the previous ±30° ceiling is removed so rotation accumulates freely); position X/Y drift ±5 m → ±10 m; population max 20 → 30 objects and min 5 → 10 objects. Width/depth (±10%) and add/remove chances (22% / 18%) unchanged. Initial Gen-1 rotation still seeds within ±30° (widening that is a separate open question). UPDATE (Chat 6): generator v0_26 now reads these values from the addon's scene properties (gaad_mut_*) at call time, making the Mutation panel sliders LIVE. The module-level constants are kept as fallback defaults for standalone use. Each generation's JSON records the active mutation settings under generation.mutation_settings for full replay fidelity.

Rationale & optionsOptions considered
  • Keep v0_24 values
  • Adopt the v0_25 values above

Rationale: Larger position and looser rotation give bolder spatial variation per generation; the higher min/max object counts allow denser, more varied stages; the gentler height mutation keeps proportions more stable while shapes still explore.

D076 rebirthproposedTerminology27 Jun 2026

Reword 'Allow Mutation to Other Types' to remove clash with the Type layer

With 'Type' now denoting the collection (Primitives / Buildings / ...), the existing 'Allow Mutation to Other Types' toggle is ambiguous. Under single-Type selection (D075) it can only mean mutation among the objects WITHIN the selected Type (e.g. a Cube becoming a Pyramid). Proposed rename: 'Allow Mutation to Other Objects'. Final wording awaiting Miles's ruling.

Rationale & optionsOptions considered
  • Allow Mutation to Other Objects
  • Keep 'Allow Mutation to Other Types'
  • Other wording

Rationale: Removes the collision between 'Type' (collection) and 'Types' (object kinds) so the toggle's meaning is unambiguous.

D075 rebirthadoptedArchitecture27 Jun 2026

Object Collection gains a Type layer; selection is single-Type only

Object Collection becomes a hierarchy: Object Collection > Type > Objects. A run selects objects from exactly ONE Type — never a mix across Types. Today the only Type is Primitives (Cube, Pyramid, Dome, Wedge, Cylinder); future Types (Buildings, Rockets, Garden Rooms) slot into the same Type selector with no panel redesign. Per D072 the selector shows only built Types.

Rationale & optionsOptions considered
  • Flat primitive list (no Type layer)
  • Type layer with multi-Type selection
  • Type layer with single-Type selection

Rationale: A Type taxonomy future-proofs the panel for Buildings / Rockets / Garden Rooms. Constraining a run to a single Type keeps the genome coherent (no cross-Type breeding) and simplifies the generator. Dovetails with D071 (modular architecture).

D074 rebirthadoptedTerminology27 Jun 2026

Rename Design Evolution view to Design Tree; order Design Generator above it

In the EXPLORE group, the 'Design Evolution' view button is renamed to 'Design Tree', and 'Back to Design Generator' is renamed to 'Design Generator' and placed ABOVE Design Tree, giving a consistent two-view order (Generator, then Tree). Confirmed for the panel labels; the wider scope (Blender scene name 'GAAD Design Evolution', the 'Design Evolution Report' button, and the terminology record) is still to be ruled on. PHASING (agreed 27 Jun): Tier 1 (panel view-button label) and Tier 2 (HUD title line) are renamed to 'Design Tree' now, in addon v0_44. Tier 3 — the internal scene rename 'GAAD Design Evolution' → 'GAAD Design Tree' (~17 references across gaad_tree, gaad_rebirth_addon and gaad_generator) plus the 'Design Evolution Report' label — is DEFERRED to a later, careful pass.

Rationale & optionsOptions considered
  • Keep 'Design Evolution'
  • Rename to 'Design Tree'

Rationale: 'Design Tree' is more literal and concrete than 'Design Evolution' for the recorded lineage view. Dropping the 'Back to...' framing and fixing the order reads as two peer views rather than an action plus a return.

D073 rebirthadoptedUX26 Jun 2026

Hide Reset GAAD Platform button in Design Evolution scene

The Reset GAAD Platform button must not be shown when the user is in the GAAD Design Evolution scene. Resetting from that scene causes new stages to be generated there instead of in GAAD Generator. Fix: suppress the button entirely when scene.name == GAAD Design Evolution.

Rationale & options

Rationale: Reset has no valid purpose in the Design Evolution scene. Hiding it prevents the bug and removes the temptation to use it in the wrong context.

D072 rebirthadoptedUX26 Jun 2026

No coming soon labels in the UI

The GAAD panel must never show placeholder text such as "coming soon". If a feature is not yet built, it is simply absent from the panel. Unbuilt features belong in the records (as Feature Requests or Decisions), not in the live UI.

Rationale & options

Rationale: Coming soon labels create noise and imply a half-finished product. The panel should only show what works.

D071 newproposedArchitecture26 Jun 2026

Modular architecture plan — split generator into focused modules

As the codebase grows toward 10k lines, the monolithic generator script should be split into focused modules: gaad_shapes.py (shape creation), gaad_genome.py (mutation and scaling), gaad_data.py (JSON read/write), gaad_generator.py (thin orchestrator/main loop). A shared geometry/diff module should also be created to resolve D052 (metrics duplication between tree and report). The addon-generator coupling via scene properties should be reviewed for robustness.

Rationale & optionsOptions considered
  • Keep monolithic structure (rejected: will become unmanageable at 5k+ lines)
  • Split into focused modules with thin orchestrator (chosen — action when generator approaches 2000 lines or Buildings/Garden Rooms object types are added)

Rationale: The generator is already 1,226 lines and growing. Shape creation, mutation, genome scaling, JSON logging and scene setup all live together. Adding new object types (Buildings, Garden Rooms) will compound this. Modular architecture now, before the codebase is too large to refactor safely, will keep GAAD maintainable and testable long-term.

D066 newadoptedBugfix25 Jun 2026

Fix: double-draw HUD handler on addon reload

The _gaad_hud_add() function now always calls _gaad_hud_remove() before registering a new draw handler. Previously, the module-level _gaad_hud_handle variable would reset to None on addon reload while the old handler remained active, causing a second handler to be registered and the logo/text to draw twice. The fix ensures only one handler is ever active.

Rationale & optionsOptions considered
  • Guard with 'if handle is None' only (rejected: fails on module reload)
  • Always remove before adding (chosen)

Rationale: Module-level variables in Blender addons reset on reload without triggering unregister(), so the 'if None' guard is not sufficient. Always removing first is the correct defensive pattern.

P033
D065 newadoptedUX25 Jun 2026

Panel Scripts box shows all four scripts; scenes named GAAD Generator / GAAD Design Evolution

Two related naming/panel changes: (1) The Scripts box in the GAAD panel now shows all four script filenames — Generator, Tree, Report, and Add-on. Previously the add-on was omitted. (2) The two Blender scenes are given explicit names: the generator/breeding world is named 'GAAD Generator' (set on first build by the generator script); the lineage tree scene is named 'GAAD Design Evolution' (set by the tree script). These names drive the HUD is_tree detection and all scene-switching logic in the addon.

Rationale & optionsOptions considered
  • Leave scene names as Blender defaults ('Scene', 'GAAD Tree') (rejected: confusing in the outliner)
  • Named scenes + all four scripts in panel (chosen)

Rationale: Clear scene names in the outliner make it immediately obvious which scene is active. Showing the add-on filename in the panel completes the scripts inventory and makes version-checking straightforward.

D064 newadoptedVisualisation25 Jun 2026

HUD redesign — large headline text, split lines, date/time, non-GAAD guard

The on-screen HUD is redesigned for both views: (1) The view name ('Design Generator' / 'Design Evolution') displays at size 30 as a large headline. (2) In the Design Evolution view, the generation count moves to its own line below the headline. (3) A date/time line (e.g. '25 Jun 2026 09:03') is added to both views. (4) A guard is added so the HUD never draws in blank or non-GAAD Blender files — it exits immediately unless the scene is named 'GAAD Generator' or 'GAAD Design Evolution', or contains a GAAD collection.

Rationale & optionsOptions considered
  • Keep single-line HUD text at uniform size (rejected: headline lost in the small text)
  • Large headline + split lines + date/time + guard (chosen)

Rationale: The HUD is the primary identity element in both views. Making the view name large and prominent gives instant orientation. Splitting the generation count to its own line keeps it readable. Date/time adds useful session context. The non-GAAD guard prevents the HUD appearing on unrelated Blender files when the addon is installed.

P033
D062 newadoptedVisualisation24 Jun 2026

Remove the 3D title plaques from the Design Studio and Design History (HUD replaces them)

Remove the extruded 3D title plaques from both views now that the on-screen HUD (D060) carries the identity. The Design Studio (generator v0_22d) no longer builds 'GAAD - Design Studio' as floor geometry; the Design History (tree v0_5d) no longer builds the 'GAAD - Design History' foot panel. Both create_title_panel / create_tree_title_panel functions are retained in code but no longer called, so they can be restored if ever needed. Identity is now shown only as the modern HUD (logo + Design Studio/Design History + generation/stage info), which always faces the user and never tilts.

Rationale & optionsOptions considered
  • Keep both the plaque AND the HUD (rejected: redundant, and the plaque is the dated element)
  • Remove the plaques, keep only the HUD (chosen)

Rationale: Completes the '1994 plaque out, modern HUD in' swap. The plaque was the most dated element in the 3D views; with the HUD confirmed working (logo + brand text), the plaque is pure redundancy and visual clutter on the floor. Functions kept in code as a safety net.

P026
D061 evolvedadoptedTerminology24 Jun 2026

Rename the two core views to brand language: 'Design Studio' (world) and 'Design History' (tree)

Adopt brand-aligned names for GAAD's two views, echoing the logo strapline 'Design History - Design Memory - Design Intelligence'. The live Generation world becomes the 'Design Studio' (where you actively design - breed and choose). The Evolution / Forward Evolution Tree becomes 'Design History' (the recorded lineage of what came before - literally the design history). 'Next Generation' is KEPT as the breeding action (a generation is still each evolutionary step). Rippled through: HUD titles ('GAAD - Design Studio', 'Design History - N Generations'), the 3D title plaques, add-on buttons (Design History, Write/Open Design History Report, Back to Studio), the report H1 ('GAAD - Design History Report'), and tool banners. Reserves 'Design Intelligence' (the third strapline term) for the future scoring/learning capability. Tools bumped: generator v0_22c, tree v0_5c, report v0_5, add-on v0.12.

Rationale & optionsOptions considered
  • Keep 'Generation' / 'Evolution Tree' (rejected: off-brand, inconsistent - HUD said 'Generation Tree' while buttons said 'Evolution Tree')
  • World -> 'Design Generator' (rejected: clashes with the generator SCRIPT name; mechanical)
  • Tree -> 'Lineage' (good, but technical; 'Design History' is the brand word from the logo)
  • World -> 'Design Studio', Tree -> 'Design History' (chosen)

Rationale: The logo's strapline is the brand's spine; pulling 'Design' into the view names makes the whole tool feel of-a-piece and fixes a real inconsistency (the tree was called both 'Evolution Tree' and 'Generation Tree' across the UI). 'Design History' is literally what the lineage is, is meaningful to non-technical audiences, and sets up 'Design Intelligence' for the scoring future. 'Design Studio' frames the world as the human, active place of designing without colliding with the generator script name.

P032P026
D060 newadoptedVisualisation24 Jun 2026

On-screen HUD title overlay (Heads-Up Display) with GAAD logo, replacing the 3D title plaque

HUD = Heads-Up Display: flat 2D text/graphics drawn over the viewport (the same layer Blender uses for 'User Perspective' etc.), always facing the user and crisp at any zoom - the term comes from aviation/games for status info shown over the view. Add a 2D on-screen HUD overlay to the add-on (v0.10) that draws the GAAD identity as flat viewport text - 'GAAD - Generation', the current Generation number (read live from the scene), the saved .blend filename, and the selected variant (in gold) when one is picked. Drawn via a blf/SpaceView3D POST_PIXEL draw handler in the bottom-left, so it always faces the user, stays crisp at any zoom, and never tilts - unlike the extruded 3D title plaque (which reads as dated/'1994'). Bottom-left placement visually replaces the plaque. A 'Show on-screen title (HUD)' checkbox toggles it (default on). The HUD is suppressed in the GAAD Tree scene (the tree has its own title). Handler is registered/unregistered cleanly to avoid leaks. NEXT STEP (separate, after confirmation): remove the 3D title plaque from the generator (a later v0_22x), once the HUD is confirmed - kept in place for now so there is never 'no title'. [v0.11: the white+gold GAAD logo (gaad_logo_white.png) is drawn at the top of the HUD, replacing the 'GAAD' text (falls back to text if the image isn't found); the World HUD line now reads 'Generation N · A × B Stages'; and the Tree scene gets its own HUD: the logo + 'Generation Tree · N Generations'. Two logo assets were cropped from the brand artwork: gaad_logo_white.png (white+gold, for dark backgrounds/HUD) and gaad_logo.png (black+gold, for light backgrounds).]

Rationale & optionsOptions considered
  • Keep the extruded 3D title plaque (rejected: dated, tilts, foreshortens)
  • Blender annotations/text objects (still geometry; not as clean)
  • A blf/gpu HUD draw handler - flat 2D viewport text (chosen)

Rationale: The 3D plaque was the most '1994' element left in the World. A HUD overlay is the modern idiom (it's the same layer Blender uses for 'User Perspective' etc.) - always legible, screen-anchored, no geometry in the scene. Building the HUD first and removing the plaque later avoids ever leaving the World untitled.

P026P032
D059 newadoptedInteraction24 Jun 2026

'Back to Generation' button: return from the Tree to the World, centred and framed

Add a 'Back to Generation' button to the add-on (v0.9), the counterpart to 'Evolution Tree'. It switches from the GAAD Tree scene back to the generator World, then centres the 3D cursor + view pivot on the middle of the stage grid and frames the view (view_all). This fixes the issue where returning from the Tree left the World tiny and off-centre with the pivot stuck at the world origin. Deliberately scoped: re-centring happens ONLY on this explicit return, NOT on every Next Generation - so the user's chosen view is preserved during normal breeding, and only restored when coming back from the Tree.

Rationale & optionsOptions considered
  • Re-frame the World on every Next Generation (rejected: yanks the camera away from the user's chosen view)
  • Auto-detect the Tree->World switch (fiddly, surprising)
  • An explicit 'Back to Generation' button that switches + centres + frames (chosen)

Rationale: The orbit/centring fix the Tree received (D051/v0_5b) was also needed for the World, but only when returning from the Tree - during normal breeding the user wants their view kept. An explicit button matches GAAD's one-click idiom, keeps the user in control of when the snap happens, and pairs naturally with the Evolution Tree button.

P026
D058 newadoptedRecords24 Jun 2026

HTML record pages redesigned as a modern, mobile-first card feed on a timeline spine

Replace the table-based record pages with a modern app-like CARD FEED: each record is a card hung off a vertical gold timeline spine (newest first), with Fraunces (display) + Inter (body) type, brand colours (Midnight/Gold + timeline palette), category/status/priority/origin/source as coloured pills, and dense detail tucked into a tap-to-open 'details' expander. Mobile-first (cards from the smallest screen up - no tables to collapse), so it reads cleanly on a phone. Shared helper gaad_html_modern.py drives all five pages (decisions, PMs, tickets, quotes, terminology). Supersedes the earlier stacked-label responsive table format (D050/brand re-skin), which read as dated on mobile.

Rationale & optionsOptions considered
  • Keep the responsive table -> stacked-card format (rejected: looked dated on mobile)
  • Compact expandable list
  • App-like timeline card feed (chosen)

Rationale: The table-to-stacked-card mobile format was functional but felt utilitarian. A timeline card feed is both more modern and truer to GAAD as 'The Design Memory Platform' - the records literally read as a journey down a timeline. Mobile-first cards remove the awkward table collapse entirely. One shared helper keeps all five pages consistent.

P031P032
D057 newopenVisualisation24 Jun 2026

Brand proposes neutral 'Light Concrete' objects on Dark Slate stages (CONFLICTS with D041 - OPEN)

OPEN - needs an explicit ruling. The brand (D055) proposes stripping colour from variant objects: a single neutral Light Concrete #C7CED6 (architectural massing-model feel) on Dark Slate stages #1A2330 (border #2E3B4F, label #D7DEE7), so the eye reads form/scale/mass/proportion/evolution rather than decoration ('the object is not the hero, the decision is the hero'). This DIRECTLY CONFLICTS with this chat's adopted D041 'Rebirth Colours' (coloured shapes: aqua/coral/green/grey/purple). Renumbered from the original chat's D039 (this chat's D039 is the open title panel). Left OPEN rather than auto-superseding D041, because it is a genuine design fork the human should decide: brand-neutral objects vs Rebirth-Colours objects.

Rationale & optionsOptions considered
  • Adopt brand neutral objects - supersede D041 Rebirth Colours (brand wins)
  • Keep D041 Rebirth Colours - brand identity adopted but objects stay coloured
  • A hybrid (neutral by default, colour as an optional 'mode')

Rationale: Both positions are coherent: the brand argues colour competes with the design process; D041 argued colour aids shape legibility and gives GAAD a vivid identity. Because D041 is ADOPTED and in the shipping generator, the brand's neutral-object direction must not silently override it - it is logged OPEN for the human to rule on when the brand re-skin is built.

P032
D056 evolvedadoptedVisualisation24 Jun 2026

Selected/champion stage = GAAD Gold #D9A441 (brand alignment; already satisfied by D042)

Per the brand, the selected/champion stage is GAAD Gold - gold = human judgement, choice, Design Memory, the selected path. This ALIGNS with work already done in this chat: D042 already made the champion a whole GOLD stage (superseding the green frame D028). The only change is to standardise the exact hex to brand GAAD Gold #D9A441 (this chat used #F2B705). Renumbered from the original chat's D038 (this chat's D038 is the open scoring model).

Rationale & optionsOptions considered
  • Keep the green edge-frame (D028) - off-brand, already superseded
  • Gold champion stage (chosen; already built in D042) - align hex to brand #D9A441

Rationale: Confirms the independent convergence on gold and simply ties the hex to the canonical brand value. Low-risk: the gold champion already exists in the generator (v0_22a); this is a colour-value tweak when the brand re-skin is built.

P032
D055 newadoptedPhilosophy24 Jun 2026

Adopt the GAAD brand identity - 'The Design Memory Platform' (canonical)

Adopt the GAAD Brand Guidelines (gaad_brand.md) as canonical, folded in from the original chat (renumbered from its D037 to avoid an ID clash - this chat's D037 is the terminology file). Positioning: GAAD is 'The Design Memory Platform' - a system for recording, replaying, understanding and learning from the complete design journey; NOT a CAD/BIM/generative/AI tool. Tagline: 'Where design history becomes design intelligence.' Continuum: Design History -> Design Memory -> Design Intelligence. Logo: GAAD wordmark with both A's as gold delta peaks (no crossbar), gold underline + node, subtitle 'DESIGN MEMORY PLATFORM'. Core palette: Midnight Black #070B12, GAAD Gold #D9A441, Pure White #F5F7FA. Timeline palette (Idea->Exploration->Evolution->Decision->Outcome): Gold #D9A441, Cyan #23D5D5, Blue #66B8FF, Purple #A06CFF, Violet #C67DFF. Neutral/UI: panel #101722, border #263241, muted #8B98A8, light #D7DEE7, slate #1A2330. Supersedes the earlier GREEN identity entirely (logo/banner/portraits now stale). NOTE: the brand's object-colour direction (neutral objects) conflicts with this chat's adopted D041 'Rebirth Colours' and is logged separately as OPEN (D057) for an explicit ruling, not auto-applied.

Rationale & optionsOptions considered
  • Keep the green genetic-path identity (superseded by the brand)
  • Adopt the gold-delta 'Design Memory Platform' identity (chosen)

Rationale: A deliberate, complete brand system that states the thesis in one line and sidesteps CAD/BIM/generative/AI framing. Adopted from the original chat where it was canonical; renumbered to D055 to avoid colliding with this chat's existing D037-D039. Pleasing convergence: this chat independently moved the champion to GOLD (D042), so the brand and the build already agree on gold = selection. The conflict (brand wants neutral objects; this chat adopted coloured 'Rebirth Colours') is deliberately NOT resolved here - see open D057.

P032
D054 newadoptedRecords24 Jun 2026

Split bundle docs into readme.txt (setup) + release.txt (auto-generated notes & version history); add Release Notes button

Two text docs ship in the bundle root: README.txt (stable - how to install/run, folder map) and release.txt (what's new + version history). release.txt is AUTO-GENERATED from a new gaad_releases.json by generate_release_notes.py, rendered newest-first so the top is the current release and the entries below are the version history - one file serving both needs. The add-on (v0.8) gains a 'Release Notes' button that opens release.txt (one-click, like the Records buttons). gaad_releases.json becomes the single source for release info, ready to feed richer in-panel version history later (P031 render-ecosystem).

Rationale & optionsOptions considered
  • One combined README with a version block (previous approach)
  • Hand-written changelog (drifts out of sync)
  • readme.txt + auto-generated release.txt from a releases record (chosen)
  • In-panel version history: a simple Release Notes button now vs a full in-panel changelog browser (chose the button; richer browser deferred)

Rationale: readme.txt and release.txt answer different questions (how do I run it? vs what's new?) and change at different rates, so separating them is cleaner and matches real software. Generating release.txt from gaad_releases.json keeps one source of truth and lets the records write the notes. Newest-first rendering makes the same file double as the version history. The Release Notes button surfaces it inside GAADBlender with no new machinery - another renderer reading the records.

P031P024
D053 newadoptedConvention24 Jun 2026

Project folder structure + version convention: only the .blend in root, capitalised subfolders, bundle versioning

Standardise the project layout: ONLY the .blend (and VERSION.txt) live in the root; everything else sits in capitalised subfolders - Scripts/, Records/, Generations/, Reports/, Records_Tree/. Bundles are delivered as a zip whose name carries the version + short tag (e.g. 'GAAD Development 0_23.zip'), unzipping to a matching folder ready to copy into a new dev folder. Versioning: tool files keep INDEPENDENT versions (Option A) - generator v0_22a, tree v0_5a, report v0_4, add-on v0_7 - while the BUNDLE/folder carries the headline version (0_23) and a VERSION.txt declares the set. The standalone 'V' prefix is dropped (0_23, not V0_23); '0.' signals pre-1.0 development. Patch revisions (e.g. v0_22a) are dropped into the current bundle folder manually and do NOT trigger a new zip; zips are for minor versions. Tool versions will UNIFY at the 1.0 release. Capitalised folder names are kept for now (zero script changes, since the scripts already search Records/, Reports/, Generations/); a future 1.0 reset may switch all to lowercase. ENABLER: add-on v0.7 now auto-detects scripts in a Scripts/ subfolder (then the .blend root, back-compat), so 'only the .blend in root' works without configuring the Scripts-folder field.

Rationale & optionsOptions considered
  • Everything loose in root (status quo - cluttered)
  • Lowercase subfolders now (cleaner, but needs path changes in 4 scripts - deferred to 1.0)
  • Capitalised subfolders now, zero script changes (chosen)
  • Per-tool versions + bundle headline version (Option A, chosen) vs stamp every tool with the bundle version (Option B)
  • Keep 'V' prefix vs drop it (dropped)

Rationale: A single .blend in root with tidy capitalised subfolders is clean, professional and self-contained - copy one folder into a fresh dev folder and run. Independent tool versions stay honest (a file's number only moves when it changes) while the bundle version gives an at-a-glance release identity, with VERSION.txt bridging the two. Dropping 'V' and keeping '0.' follows common practice and signals pre-1.0 status truthfully. Capitalised-now avoids touching working path logic; lowercase waits for the 1.0 reset when everything is bumped anyway. The add-on Scripts/ auto-detect is the small enabler that makes the structure work with no manual configuration.

P024P031
D052 newopenVisualisation24 Jun 2026

Tree side-by-side copy carries a full per-stage metric change panel (deferred feature)

OPEN. The side-by-side stage copy in the Tree (D051) will carry a full 'what changed on stage' metric panel - floor area, volume, max height, shape-mix deltas and object intersections vs the previous generation - not just the concise line shipped in D051. Deferred because it should read the same diff maths the Evolution Summary Report uses; building it now would create a third copy of that logic. To be implemented once the shared geometry/diff module exists, so report and tree compute the diff from one place.

Rationale & optionsOptions considered
  • Duplicate the report's diff maths into the tree now (rejected - third copy to maintain)
  • Concise change line now, full metric panel after a shared diff module (chosen)

Rationale: Putting the real per-generation metrics beside each stage in the tree makes the lineage genuinely analytical, not just visual. But it depends on a shared diff module so the numbers are computed once and trusted everywhere - the recurring shared-module foundation. A deferred FEATURE, so it lives as an open Decision, not a ticket (tickets are for deferred bugs).

P028
D051 evolvedadoptedVisualisation24 Jun 2026

World + Tree title/label UX: 'GAAD - Generation' panels, unified grey text, side-by-side tree stages

A UX pass across the World and the Tree. WORLD title panel: title now reads 'GAAD - Generation'; the version line shows the FULL generating filename with extension (e.g. gaad_generator_v0_21.py) so a screenshot is fully traceable; the 'Generation NN' line is quietened; 3D title text sits ON the panel surface and extrudes UP only (no longer punching below); the green accent bar is removed; all panel/wordmark text is unified to Rebirth grey #8A9299. STAGES: the gold champion selection halo is widened to roughly twice its width. Variant ID labels (e.g. G023_S009) are made legible. TREE: each generation node shows the stage, a gutter, then a side-by-side copy of the same stage; tree labels are enlarged/bolded for visibility; a concise 'what changed on stage' line accompanies the side-by-side copy; and a title panel is added at the foot of the last stage in the tree, styled like the World panel, reading 'GAAD - Generation Tree'. [0.22a refinement: title 3D text properly seated on the panel (extrude up only) and its height halved; the panel filename line now shows the saved .BLEND file name (bpy.data.filepath), not the script; the gold champion EDGE RIM is removed - the gold stage FILL alone marks the champion (cleaner). In the Tree, the right-hand side-by-side stage COPY is replaced by a clean LOZENGE card carrying the variant id (bold) + the 'what changed' line - no duplicated geometry; the 'GAAD - Generation Tree' title panel is moved clear of the last stage.] [v0_5b backtrack: the side-by-side stage copy / lozenge card was tried and REMOVED - it added clutter and text-heavy info doesn't belong in 3D geometry beside a stage; per-stage change data belongs in the report or a future graph renderer (P031), not the tree. The tree returns to a clean stacked column of stages + variant-id labels, keeping the 'GAAD - Generation Tree' foot panel. Also fixed: the tree now sets the 3D cursor + view pivot to the centre of the lineage so it orbits from the middle, not Gen 1 (pair with Blender's 'Orbit Around Selection').]

Rationale & optionsOptions considered
  • Keep the green 'AutoCAD-retro' panel (rejected - see T002)
  • Short version stub 'v0_21' vs full filename gaad_generator_v0_21.py (chose full filename, traceable)
  • Per-element text colours vs one unified grey (chose unified grey #8A9299)
  • Concise change line now vs full metric diff panel (concise now; full metrics deferred to D052)

Rationale: The title panel read as a 1990s CAD label (T002) and several labels were invisible at working angles (T003); this pass gives the World and Tree a consistent, legible, modern identity. Unifying text to grey calms the panel so the coloured forms carry the colour. The full filename makes every render self-documenting. The side-by-side tree with its own signed 'GAAD - Generation Tree' title makes the lineage readable and gives the Tree its own identity alongside the World. Bugs fixed in passing (text extrude below surface, stray green accent bar, loud Generation text, invisible labels) are resolved this cycle and need no tickets; T002/T003 are closed.

P026
D050 newadoptedRecords23 Jun 2026

Record pages also output as styled HTML (origin/status colour-coded); add-on opens HTML

Every record type now generates a styled HTML page alongside its Markdown: gaad_<type>.html via a shared helper (gaad_html_style.py) matching the Evolution Summary Report look (dark, Deep-Teal accent, Rebirth Colours). Origin (1994 gold / evolved aqua / new purple), status (adopted green / open orange / closed grey) and ticket priority (high coral / med yellow / low grey) render as colour pills; decisions cross-link supersedes/superseded-by; a summary table links to per-record detail cards. Markdown is KEPT as the source for quick diffs and GitHub rendering; HTML is the readable/shareable page. A driver generate_all_html.py rebuilds all five. Add-on v0.6 points the Records buttons at the .html pages (opening in the browser like the report) instead of raw .md.

Rationale & optionsOptions considered
  • Keep raw Markdown only (renders as plain text in editors)
  • HTML instead of Markdown (lose easy diffs/GitHub)
  • HTML + keep Markdown, shared style helper, origin colour-coded (chosen)

Rationale: Raw .md opened as plain text in an editor, which read poorly. Styled HTML gives a proper page - scannable, colour-coded so the 1994-vs-new and open-vs-closed stories show at a glance - while keeping .md for diffs and GitHub. A shared helper means all five pages look identical and styling lives in one place (the recurring shared-module discipline).

P024P031
D049 1994adoptedTooling23 Jun 2026

Records-Tree: render the project's own records as a live evolutionary tree (Graphviz)

Adopt a Records-Tree generator (generate_records_tree.py) that reads the project's own records (gaad_decisions.json + gaad_pivotal_moments.json) and renders a branching evolutionary tree via Graphviz (dot) to SVG + PNG. Decisions form the vertical spine (the genetic path); nodes are coloured by ORIGIN (gold=1994 rebirth, aqua=evolved, purple=new); Pivotal Moments are coral blooms branching beside their anchor decision; supersedes links are gold fork-arcs with the superseded node faded/dashed (a pruned branch); open decisions are dashed-white (live growth points). Regenerated from the source of truth, so it is a true live infographic - never out of date. Uses a graph tool, not Blender (per P029): the architectural tree renders 3D form in Blender; the Records-Tree renders relationships in Graphviz - same data-agnostic engine idea, different renderer (P027).

Rationale & optionsOptions considered
  • Graphviz - script JSON->dot->auto-laid-out SVG/PNG (chosen: lowest effort, regenerates live)
  • Cytoscape.js / Dash Cytoscape (interactive, browser - deferred)
  • D3.js (bespoke, steep - deferred)
  • Render it in Blender (rejected: it is a node/text graph, not 3D form)

Rationale: Closes the loop the project has circled since P022/P027/P029: GAAD turned on itself. Every mark is true - gold clusters are the 1994 DNA, faded nodes are backtracked ideas, blooms are turning points. It is the thesis's own Genetic Array (Fig 3.29) pointed at the development of GAAD itself, and being generated from the records it is alive: log a decision, rerun one script, the tree grows. Origin colouring (D046) finally has a spatial job.

P029P030
D048 newadoptedRecords23 Jun 2026

Rename Issues to Tickets (T###); priority high/med/low; status open/in progress/closed

Rename the Issues record type to TICKETS (T###), reframing the log from a passive list of problems into an active backlog worked down through the development cycle as resources allow (solo developer). Fields: id, date, category (shared taxonomy), priority (high / medium / low), status (open / in progress / closed), title, description, resolution (filled on close), related. Migrated I001 -> T001 (closed). The old gaad_issues.json/.md are superseded by gaad_tickets.json/.md with its own generator, and have now been removed (archived to _archive/). Add-on v0.5 replaces the Issues button with Tickets and adds a Quotes button. Seeded two live tickets: T002 (title panel 'AutoCAD retro' rework) and T003 (variant ID labels not legible), both to be bundled into one text-legibility / title pass.

Rationale & optionsOptions considered
  • Keep 'Issues' with binary open/resolved
  • Severity vs priority (chose priority - answers 'what next?' for a solo dev)
  • Two-state vs three-state status (chose open/in progress/closed)
  • Rename to Tickets with priority + 3-state status (chosen)

Rationale: 'Issues' is passive; 'Tickets' is active - a unit of work that moves through a cycle and gets closed, which fits the solo-developer reality of triaging 'noticed it, will deal with it when I have resources (me)'. Priority (not severity) answers what to do next; a three-state status gives just enough granularity to see work in flight. Turns the log into a backlog.

P028
D047 newadoptedRecords23 Jun 2026

Add a Quotes (Q###) record type for marketing / posts

Introduce a new record type, Quotes (Q###), in gaad_quotes.json with its own generated gaad_quotes.md (newest-first). Fields: id, date, source (thesis_1994 / miles_2026 / ai_collaboration), theme (light tag e.g. philosophy, vision, origin-story, the-tree, decisions-as-data), quote, context, related (optional links to D/P records). No 'cleared for use' flag - the project is open source, so all quotes are cleared; source is always attributed and AI-assisted lines are explicitly marked. Seeded with 12: 5 from the 1994 thesis, 2 from Miles 2026, 5 AI-assisted. Curation bar kept deliberately high. To gain a Records button in the add-on later.

Rationale & optionsOptions considered
  • Fold memorable lines into PM records (rejected - quotes are about language, a different kind of record)
  • Capture quotes with a public/private flag (rejected - open-source project, all cleared)
  • Dedicated Q### record type with source attribution (chosen)

Rationale: Good phrasings are a distinct asset - reusable for posts, talks and marketing - and easy to lose in the flow of work. A curated, attributed quotes file captures them while keeping the attribution honesty Miles applies on LinkedIn (what is his to claim vs AI-assisted). Themes make it easy to pull the right line for the right post; an ai_collaboration source credits the collaboration openly.

P024
D046 newadoptedRecords23 Jun 2026

Add an 'origin' field to decisions: 1994 (rebirth) / evolved / new

Add an 'origin' field to every Decision record, with three values: '1994' (restored from the Digital Evolutions thesis), 'evolved' (a 1994 seed taken somewhere the thesis did not go), and 'new' (no 1994 precedent). Rendered as an Origin column in the decisions summary table and in each detail block. Applies to Decisions only; Pivotal Moments are excluded (they are largely realisations, often about the 1994<->now relationship itself). First-pass classification of all 45 decisions: 14 are '1994', 8 'evolved', 23 'new'.

Rationale & optionsOptions considered
  • No origin field (status quo - distinction lives only in prose)
  • Two values (rebirth / new)
  • Three values 1994 / evolved / new (chosen - captures the hybrid middle)

Rationale: Makes queryable the most important story in the project: how much of Rebirth is restoration of the 1994 thesis versus new invention. A pure binary forced too many hybrid decisions into the wrong bucket, so a three-value scheme was chosen. A nice side effect: the future Records-Tree can colour nodes by origin, showing the 1994 DNA threaded through the project with new growth branching off it.

P022P029
D045 1994openVision23 Jun 2026

Adopt backward / forward tracking (replay-based) - restore stored phenotypes from a pivot progeny

OPEN. Bring the thesis's second algorithm - Backward / Forward Tracking (Richard Coyne backward chaining) - into Rebirth. When forward search hits a DEAD END (a path that will not reach satisfactory quality), the designer BACKWARD-TRACKS up the recorded genetic path to an earlier ancestor (a PIVOT PROGENY) and then FORWARD-TRACKS, striking out in a new direction. Per the thesis (p.14), backward/forward tracking are REPLAY functions that RESTORE previously-created stored macro phenotypes - they do not re-mutate - so they depend on the genes for every visited node already being stored (D030 seed/quad-numbering). The Forward Evolution Tree must therefore grow from just the genetic PATH (today) into the full GENETIC ARRAY / tree (Fig 3.16 / 3.29) with dead-end stubs and multiple pivots. To be resolved: (a) exact UX for choosing a pivot and a new direction; (b) whether the tracking tree is shown in Blender or a dedicated 2D graph tool; (c) dependency/order vs D030 storage and D038 scoring; (d) warnings when no forward/backward generation exists (Fig 3.17).

Rationale & optionsOptions considered
  • Leave Rebirth as forward-search only (status quo)
  • Re-mutate when revisiting an ancestor (rejected - thesis specifies replay/restore, not re-mutation)
  • Replay-based backward/forward tracking restoring stored phenotypes from a pivot progeny (chosen direction, OPEN on detail)
  • Render the tracking tree in Blender vs a dedicated 2D graph tool (open)

Rationale: Forward search alone has the thesis's stated 'significant limitation' - the dead end - where hill-climbing gets stuck. Backward/forward tracking is the escape that turns GAAD from a hill-climber into a genuine exploration of the design space, and is one of the three algorithms that define GAAD (with Forward Search and Genetic Engineering). It is the concrete realisation of the rear-cover promise of 'exploration in the 4th dimension'. Left OPEN because it is a large capability that depends on seed-based storage (D030) being built first and interacts with scoring (D038); the build order is storage -> tracking. Logged now so the direction is captured while the thesis reading is fresh.

P029P026
D044 newadoptedTooling23 Jun 2026

Project records reachable from the GAAD add-on; 'Records/' folder convention

The GAAD Blender add-on (v0_4) gains a 'Records' panel section with four one-click buttons - Decisions, Pivotal Moments, Issues, Terminology - each opening its .md directly (wm.path_open). The record .md files live in a 'Records/' folder beside the .blend (matching the Generations/ and Reports/ convention of D031), with fallbacks to GAAD_Rebirth_data/ and the .blend root so existing layouts still work.

Rationale & optionsOptions considered
  • Keep records outside the tool (status quo)
  • One 'Open Records folder' button
  • A dropdown of records
  • Four named buttons opening each .md directly (chosen)
  • Loose beside the .blend vs a Records/ subfolder (chose subfolder)

Rationale: Makes GAAD self-documenting from inside the app: the decision history is one click away while working, reinforcing 'decisions become data'. Four named buttons match the one-click spirit of Open Report. A Records/ subfolder keeps the root tidy and consistent with D031; fallbacks avoid forcing a reorganisation.

P023P024
D043 1994adoptedRecords23 Jun 2026

Record same-stage 'object intersections' as neutral data (not 'clashes')

Give primitives relational awareness on their own stage by recording OBJECT INTERSECTIONS: pairs of objects on the same stage whose axis-aligned bounding boxes overlap. Recorded as a count of intersecting pairs plus the total overlap volume (m3), each with a per-generation delta, surfaced as columns in the Evolution Summary Report (report v0_4). Scope is strictly objects on the SAME stage. The term is 'object intersection', deliberately NOT 'clash': an intersection is neutral, measured data, not a fault - it may be intentional and a precursor to a future Boolean join (echoing the thesis 'penetration of one body with another'). Whether intersections ever penalise a score is a separate, later decision (D038). Bounding-box test; rotation ignored (approximation) for now. Adjacency-as-quality is parked: with no relationship rules defined it cannot be measured, though neighbour topology may be recorded later.

Rationale & optionsOptions considered
  • Call it 'clash' and treat as a fault to minimise
  • Bounding-box intersection vs true mesh intersection (chose bounding-box first)
  • Count only vs count + overlap volume (chose both, count headline)
  • 'Object intersection' as neutral recorded data, Boolean-join reserved (chosen)
  • Score intersections now vs record first, score later (chose record first)

Rationale: Primitives previously knew only their own shape; intersection gives them context. Naming it neutrally ('intersection', not 'clash') keeps it consistent with 'decisions become data' - measure the fact, don't bake in a verdict - and preserves the option that an overlap is a deliberate Boolean join. Bounding-box is cheap, deterministic (important for replay/seed storage) and good enough for a first signal. Recording before scoring avoids quietly turning GAAD back into a constraint-solver against the unrestricted-growth spirit of D015.

P028P021
D042 evolvedadoptedTooling23 Jun 2026

Champion = whole stage gold (supersedes the green edge-frame); add Grey, wedge becomes grey

Replace the champion's green square edge-frame (D028) with highlighting the ENTIRE champion stage surface in GOLD - fill #F2B705 with a brighter #FFD23F rim - echoing the gold parent stage of early GAAD versions, because the thin green frame did not read well in practice. Extends the Rebirth Colours palette (D041): add a neutral Grey #8A9299 (now 8 colours) and reassign the wedge from Bright Yellow to Grey, so yellow/gold is reserved as the champion signal and is unambiguous. With the champion no longer green, Green stays free as the dome's shape colour. Non-champion stages remain neutral light so the single gold stage stands out.

Rationale & optionsOptions considered
  • Keep the green square edge-frame (D028)
  • A gold/yellow edge-frame only
  • Highlight the whole stage gold (chosen, as in early GAAD)
  • Keep wedge yellow vs reassign wedge to grey (chose grey, to reserve yellow/gold for the champion)

Rationale: The green edge-frame was visually weak. A full gold stage fill is a strong pre-attentive 'this one is selected' cue (used in early versions) and far more legible than a thin frame. Freeing green from champion duty also removes the dome/champion green ambiguity flagged at D041. Grey adds a calm neutral shape option and lets yellow/gold mean only 'champion'.

P026
D041 evolvedadoptedTooling23 Jun 2026

Adopt the 'Rebirth Colours' palette; rename the 1994 palette 'Retro Bold'

Adopt a modern shape palette named 'Rebirth Colours' = the 'Vibrant Startup' web/UI palette (Coral Red #FF6B6B, Bright Yellow #FFE66D, Aqua Blue #4ECDC4, Deep Teal #1A535C, Sunset Orange #FF9F1C) plus an added Green #6BCB77 and Purple #9B5DE5. The original 1994 saturated-primary palette is retrospectively named 'Retro Bold' and kept as a selectable heritage look. Initial shape assignment: cube = Aqua Blue, pyramid = Coral Red, dome = Green, wedge = Bright Yellow, cylinder = Purple; Deep Teal reserved as the dark studio world tone and Sunset Orange as a secondary accent. The champion stays marked by the bright emissive green stage edge-frame (D028), which is distinct from the matte dome-green fill.

Rationale & optionsOptions considered
  • Keep the 1994 'Retro Bold' primaries
  • Desaturated tonal palette (earlier swatch)
  • 'Rebirth Colours' = Vibrant Startup + green + purple (chosen)

Rationale: The 1994 primaries read as dated (P026). A curated vibrant-but-modern web/UI palette gives GAAD a contemporary identity while staying colourful and legible. Naming the original 'Retro Bold' preserves it as a heritage option and frames the 1994->Rebirth shift. Adding green and purple keeps all five shapes clearly distinct and carries the brand green into the world. To be applied in the generator alongside the studio look (Eevee AO/soft shadow/bloom + grounding plinth).

P026
D040 newadoptedRecords23 Jun 2026

Adopt a development-issues log (I###)

Maintain a third record log - Development Issues (I###) - as JSON source of truth with generated Markdown, newest-first, in the same pattern as Decisions (D###) and Pivotal Moments (P###). Each issue records symptom, root cause, resolution, severity, status (open/resolved), the script version that introduced it (introduced_in) and the one that resolved it (resolved_in), and links to related decisions/PMs. Rendering is folded into generate_records_markdown.py so one command refreshes all views. All three record logs (Decisions, Pivotal Moments, Issues) also carry a Category field, drawn from one shared taxonomy - Philosophy, Platform, Terminology, Convention, Genome, Interaction, Records, Visualisation, Tooling, Scoring, Vision, Milestone - rendered as a Category column after Date so a large log stays navigable. A category means the same thing across all three logs.

Rationale & optionsOptions considered
  • Rely on the 'Changes in 0.x' script-header changelogs only
  • Track issues as Pivotal Moments
  • A dedicated structured Issues log (I###) with version traceability (chosen)

Rationale: Decisions and Pivotal Moments have no natural slot for 'this broke / why / how it was fixed', and the changelog prose is buried in script files and not queryable. A structured issues log captures the debugging journey as first-class data with version-level traceability (introduced_in -> resolved_in) that the changelogs cannot give, consistent with decisions-as-data (D020). Backfilled with I001, the v0.15 title-panel selection regression.

P024
D039 evolvedopenTooling23 Jun 2026

Ground-level title panel (GAAD + version + Generation number)

OPEN. Add a flat title plaque on the ground in FRONT of the 3x3 world, at stage level, in the empty foreground, showing the project name GAAD (brand green), the script version parsed from the filename (e.g. v0_18), and a clear 'Generation N' label - all as plan-readable surface text (D010), with a slim green brand accent bar. Implemented additively in v0.15 (no geometry/mutation/JSON change); the version auto-updates from the filename. Held OPEN pending UX tweaks (size, position, content and styling).

Rationale & optionsOptions considered
  • No title panel (status quo)
  • Flat ground plaque at stage level in the foreground (chosen)
  • Billboarded HUD panel hovering above the world
  • Content: GAAD wordmark + filename version + 'Generation N' label

Rationale: Gives the 3D view a clear, readable header identifying the tool, its version and the live generation - useful in screenshots, recordings and LinkedIn posts, and a step toward the thesis's 'comprehensive graphical user interface'. Placed flat at stage level so it reads as a title plaque consistent with surface labels (D010). Kept open because Miles has UX tweaks pending.

P023P024
D038 1994openScoring23 Jun 2026

Scoring model for variants/generations

OPEN. Adopt a measured 'fitness' score per variant/generation, derived from the data the report already computes (floor area, volume, shape mix, deltas), running ALONGSIDE human selection rather than replacing it. Held open pending Miles's UX feedback and resolution of the design forks below; the scoring rule encodes what 'good' means, so it is a real decision to be settled before code.

Rationale & optionsOptions considered
  • Objective (pure geometry: area, volume, compactness, variety) vs goal-directed (distance from a set target, e.g. tall-spiky / enveloping domes)
  • Absolute (variant in isolation) vs relative (improvement over its parent)
  • Told (Miles defines the rule) vs learned (GAAD infers taste from picks)
  • Single headline number vs a small vector breakdown (size / variety / goal-fit)
  • UX/surfacing: report column vs on-stage cue vs tree (pending Miles's UX feedback)

Rationale: The Evolution Summary already self-summarises the raw material, so the foundation exists (P021). This is the leap from recording the journey to evaluating it - the first foothold on the Design-Intelligence arc. Recorded as OPEN so the design conversation and UX feedback are captured before any scoring code is written.

P010P021P043P044
D037 newadoptedTerminology23 Jun 2026

Formalise the 1994 to Rebirth terminology as a source-of-truth record

Adopt a dedicated terminology record - gaad_terminology.json as the source of truth with a generated gaad_terminology.md view - mapping every GAAD term and concept from the 1994 thesis to its 2026 Rebirth equivalent, grouped into seven categories (identity & platform; genetic encoding & evolution mechanics; spatial structure & interface; selection & lineage; history, replay & storage; cells/shapes vocabulary; records, tooling & framing). Blank 1994 cells mark terms new in Rebirth; concepts that existed in 1994 but are not yet built are flagged. Each row cites its governing decision where one exists.

Rationale & optionsOptions considered
  • Leave terminology scattered across decisions and the handover doc
  • A single flat glossary table
  • Comprehensive categorised JSON source of truth with generated Markdown (chosen)

Rationale: Terminology was defined piecemeal across D003/D004/D005/D006/D007/D021/D022/D024 and the project background, and the handover repeatedly referenced a gaad_terminology.md that did not yet exist on disk. Making it a first-class record matches the decisions-as-data principle (D020), gives the vocabulary one canonical home, ties each Rebirth term back to its 1994 thesis root, and supplies clean reference material for posts, the thesis write-up and the future AI-learning chapter.

P019P022
D036 newadoptedVisualisation22 Jun 2026

Evolution Summary Report: add per-generation ISO date/time and rename title

Rename the report title to 'GAAD - Evolution Summary Report' and add a Date / Time column showing each generation's creation timestamp in ISO format (YYYY-MM-DD HH:MM:SS, to the second), so rows can be sorted chronologically. The timestamp is read from generation.created_at already stored in the JSON - no generator change needed (report v0_2).

Rationale & optionsOptions considered
  • No timestamps
  • Friendly date format
  • ISO format for sortability (chosen)

Rationale: The generation JSON already records created_at to the second; surfacing it gives the report a real chronology, and ISO format sorts correctly as plain text.

P010
D035 newadoptedTooling22 Jun 2026

Add-on UX: rename Evolution Tree, auto-write report with it, one-click Open Report

Refine the GAAD add-on panel: (1) rename 'Build Tree' to 'Evolution Tree' (names the thing, not the action; the build is quick); (2) running Evolution Tree also auto-writes the report, since both read the same Generations data and are usually wanted together - a standalone 'Write Report' button is kept for report-only runs; (3) 'Open Report Folder' becomes 'Open Report', opening the report HTML directly in the browser, with opening the folder as a fallback when the HTML is not yet present. Labels finalised: 'Evolution Tree', 'Write Evolution Tree Report', 'Open Evolution Tree Report'.

Rationale & optionsOptions considered
  • Keep current labels/behaviour
  • Rename only
  • Auto-report on tree run
  • Open HTML directly vs open folder

Rationale: Lowers friction: one click gives both the 3D lineage and the report, and the result opens straight in the browser. Keeping standalone Write Report preserves report-only runs. Pure workflow polish on the tool (P024).

P024
D034 newadoptedTooling22 Jun 2026

Scene hygiene: purge orphaned data, isolate the tree scene, and auto-frame the view each run

Adopt clean scene management across the GAAD scripts: (1) each run PURGES orphaned/accumulated data (stray cameras, lights, meshes, curves left from prior runs) so counts stay stable rather than climbing into the hundreds; (2) the Forward Evolution Tree builds in its own dedicated 'GAAD Tree' scene, fully isolated from the generator world; (3) after building, the script AUTO-FRAMES the viewport on the actual geometry and sets a generous clip distance, so the world/tree is always correctly sized and centred without manual Home / clip-end fiddling.

Rationale & optionsOptions considered
  • Leave manual (press Home, set clip end by hand each time) - current, error-prone
  • Auto-frame only
  • Purge only
  • Purge + tree isolation + auto-frame (chosen)

Rationale: After ~24 generations plus repeated tree builds, data accumulated (many cameras/lights/curves) and the leftover tree camera/view made the generator world appear tiny and clipped when switching scenes. The root cause is scene/data management, not the view; fixing it in the scripts removes a whole class of usability problems and keeps files lean - important as worlds scale (D007) and as seed-based storage (D030) arrives.

P023
D033 newadoptedTooling22 Jun 2026

GAAD Rebirth Blender add-on for one-click workflow

Provide a small installable Blender add-on (gaad_rebirth_addon.py) that adds a 'GAAD' sidebar tab with buttons - Next Generation, Build Tree, Write Report (plus Open Report Folder) - so the scripts no longer have to be loaded/pasted each session. The add-on auto-detects the newest versioned script (gaad_generator_v*.py etc.) in the .blend's folder, so future versions are picked up automatically. The standalone scripts remain the canonical artefacts; the add-on is a thin launcher that runs them.

Rationale & optionsOptions considered
  • Manual load/paste each run (current - slow)
  • Register + auto-run on file open
  • External editor workflow
  • Installable add-on with a GAAD panel and buttons (chosen)

Rationale: Removes the repetitive load-script step that was slowing every session, while keeping the versioned scripts as the source of truth (the add-on just launches the newest). Auto-detection avoids editing the add-on per version, fitting the D031 naming/folder convention.

D032 newadoptedTerminology22 Jun 2026

'GAAD' is always capitalised in prose, labels and output

Whenever GAAD appears as a word - in comments, strings, on-screen labels, reports, posts, graphics and documentation - it is written in full uppercase: GAAD. Exception: the lowercase 'gaad_' prefix in filenames and code identifiers (e.g. gaad_generator_v0_12.py, gaad_version) is retained, as lowercase is standard coding convention.

Rationale & optionsOptions considered
  • Always uppercase GAAD everywhere including filenames
  • Uppercase in prose/labels, keep lowercase gaad_ prefix in code/filenames (chosen)

Rationale: GAAD is an acronym (Genetic Aided Architectural Design) and reads correctly only in uppercase. Code identifiers and filenames keep the conventional lowercase prefix to avoid breakage and match normal practice.

D031 evolvedadoptedConvention22 Jun 2026

Filename and folder-structure convention

ADOPTED. Filenames follow gaad_[tool]_v[version].py (e.g. gaad_generator_v0_12.py, gaad_tree_v0_1.py, gaad_tree_report_v0_1.py). Local project layout: a per-version folder (e.g. 'GAAD Development 0_12') containing the .blend and the .py scripts side by side, plus two subfolders - 'Generations/' (the recorded per-generation JSON; was 'Replay') and 'Reports/' (HTML/PNG report output). Scripts resolve the data folder RELATIVE to the .blend (Blender //Generations) so paths never need hand-editing; the plain-Python report falls back to a Generations folder beside the script. An absolute path remains an optional override.

Rationale & optionsOptions considered
  • Per-project hand-edited absolute REPLAY_ROOT (current - error-prone, caused a path mismatch)
  • Fixed standard folder layout with relative //Replay resolution
  • Single config file/variable shared by all scripts
  • Versioned project folders (GAAD Development 0_11, 0_12 ...) vs one stable project folder
  • ADOPTED: default to //Replay relative to the .blend; absolute path optional override

Rationale: Folder/filename drift has already caused a real problem: the tree script's REPLAY_ROOT pointed at an old folder while the data lived in a newer one, so no geometry appeared. A convention removes that whole class of error and makes the project portable and self-consistent. Opened to decide deliberately rather than ad hoc. Resolved: scripts beside the .blend; data folder renamed 'Generations' (clearer than 'Replay'); reports in 'Reports/'. Relative resolution removes the path-mismatch class of error.

D030 1994adoptedRecords22 Jun 2026

Seed-based storage: keep the selected variant in full, store only seeds for unselected stages

Change replay JSON storage to 'store the recipe, not the cake'. Per generation, save the SELECTED variant's full design parameters, plus only the SEED (variant_seed) for each UNSELECTED stage. Any sibling can then be regenerated identically on demand from parent + seed, so full backtracking into non-selected stages is preserved at near-zero storage cost - scaling cleanly from 3x3 to nxn (e.g. 12x12). REQUIRES generation to be bit-for-bit deterministic from seed+parent, so a 'genome_version' is stamped into the JSON and reconstruction always uses the matching algorithm version.

Rationale & optionsOptions considered
  • Full population (current 0.11) - total backtrack, explodes at large n
  • Selected-only - lean, but unchosen siblings lost permanently
  • Seed + reconstruct - store recipe, regenerate siblings on demand (chosen)
  • Lazy snapshot - save siblings only if a backtrack actually happens

Rationale: Modern echo of the thesis's compact unique-numbering encoding (Figs 3.23/3.25): store the generative recipe rather than every output. Keeps full backtracking while files stay tiny at nxn. The generator already seeds each variant with random.Random(variant_seed), so the foundation exists. The catch - and the companion rule - is that generation becomes a contract: a genome_version must be recorded so old seeds reconstruct faithfully even as the genome evolves. Chosen by Miles.

P010P020
D029 newadoptedVisualisation21 Jun 2026

Tree captions: billboarded HUD pill, neutral accent, headline + metrics

Each Forward Evolution Tree stage gets a hovering HUD-style pill caption, billboarded to face the camera (aligning with the D020 green-ring language: lifted off the ground, readable from any orbit angle, modern). Content is a bold change HEADLINE (e.g. 'shed 1 form, more cubes') over a faint METRICS line (floor area m2 / volume m3). Captions use a NEUTRAL accent (cool white/grey); green is reserved only for the live champion marker so that signal stays rare and strong. The change/headline/metrics are derived from the same replay-diff logic as the Evolution Summary, so the tree and the report tell one story from one source. Blender = intuitive quick-read; Markdown/HTML = formal report.

Rationale & optionsOptions considered
  • Flat ground text (current)
  • Hovering billboarded HUD pill (chosen)
  • Glowing/emissive caption
  • Node label on genetic-path connector
  • Green-accent parent caption vs reserve green for champion only (chose reserve)
  • Headline only vs headline + metrics line (chose headline + metrics)

Rationale: HUD pill inherits D020's modern, hover-and-billboard language without the legibility risk of glowing text, and stays independent of the not-yet-built Tree 0.2 connector (which can tie in later). Reserving green for the live champion keeps the signal meaningful. Two-tier content (bold headline + faint metrics) is scannable in-scene while full detail stays in the report. Sharing the summary's diff logic keeps one source of truth. Claude decided at Miles's request.

P020P021
D028 newadoptedInteraction21 Jun 2026

Champion highlight: glowing green square frame around the stage edge

The champion (parent) stage is highlighted by a glowing GREEN SQUARE FRAME tracing the stage perimeter, sitting just above the surface, on a neutral stage. Revised from the original hovering ring (which clashed with tall objects on the stage): an edge frame stays clear of all geometry. Label stays the bare variant id; status shown visually.

Rationale & optionsOptions considered
  • Keep '(PARENT)' text suffix
  • Colour alone (gold)
  • Border/frame
  • Glowing orb marker
  • Hovering ring/halo marker (chosen)
  • Vertical beam/pin marker
  • Slight plinth
  • Neutral stage vs keep gold (chose neutral)
  • REVISED to square edge frame (ring clashed with tall objects)
  • Flat frame vs raised rim (chose just-above-surface frame)
  • Square frame vs circular (chose square to match stage)

Rationale: GUI principle: show state visually, not in words. A green ring reads pre-attentively as 'active/selected' from any orbit angle in 3D, feels modern/cutting-edge, and frames the stage rather than obscuring it. Neutral surface lets green be the single parent signal without a competing colour. Label stays bare id, honouring D016. Chosen by Miles. REVISED: the hovering centre ring intersected tall forms on the stage; a perimeter frame keeps the modern emissive 'active' cue while staying clear of the objects, and a square frame matches the square stage footprint ('this whole stage is selected').

P020
D027 newadoptedRecords21 Jun 2026

Adopt a development roadmap (near-term + beyond-1.0 vision)

Maintain a living roadmap (gaad_roadmap.md): next-days fixes (close D018 dome question, tree connector 0.2, summary PNG export), next-weeks first new capability (Scoring), then a beyond-1.0 vision carrying the research questions and the 'AI learns from design evolution' principle. Arc: Generate -> Select -> Record -> Replay -> Summarise -> Score -> Learn -> Design Intelligence.

Rationale & optionsOptions considered
  • No formal roadmap
  • Tight near-term only
  • Balanced near-term + vision
  • Vision-forward roadmap

Rationale: Today was complex and generative; a roadmap captures momentum without overcommitting. Weighted vision-forward because the session's real discovery (GAAD as recorded design lineage, beyond geometry) is the compass. Kept a living document, like the decision log.

P021P022
D026 newadoptedGenome21 Jun 2026

Dome geometry: circular hemisphere; area = pi r squared, volume = hemisphere

Domes are KEPT and trimmed to a true HEMISPHERE cap sitting flat on the stage (no buried lower half). Domes are locked CIRCULAR in plan: width = depth = diameter, so a dome is defined by a single size. Floor area = pi * r^2 (the circle on the stage). Volume = (2/3) * pi * r^3 (hemisphere). Domes are now INCLUDED in the evolution-summary sums (INCLUDE_DOMES_IN_SUMS = True). This also resolves the long-parked dome hemisphere-trim.

Rationale & optionsOptions considered
  • Geometry: full sphere (as currently rendered) vs hemisphere trim (true dome cap)
  • Volume if full sphere: (4/3)*pi*r^3 vs visible half (2/3)*pi*r^3
  • Volume if hemisphere: (2/3)*pi*r^3
  • Floor area: plan circle/ellipse pi*(w/2)*(d/2) (same either way)
  • Whether the hemisphere trim (long-parked) is done as part of this
  • Circular vs elliptical plan (chose circular)
  • Hemisphere volume (2/3 pi r^3) vs visible-half of full sphere

Rationale: Circular hemisphere is the honest, simplest reading: half a form sitting on the surface, footprint a true circle, volume the matching hemisphere. Locking circular reduces a dome to one parameter (diameter), tidies the genome, and makes area/volume unambiguous. Chosen by Miles.

P018
D025 newadoptedVisualisation21 Jun 2026

Evolution summary (readout C) with floor area and volume; domes excluded from sums

Build a standalone companion 2D readout (HTML/PNG) that reads the replay folder, walks the selected-parent lineage, and writes one row per generation: generation number, variant id, a plain-English 'what changed' headline, and a 'from the data' column showing shape-mix shift plus total floor area (m2) and total volume (m3). Floor area and volume are SUM OF PER-OBJECT footprints/volumes, shown as the absolute total with the change from the previous generation beside it. Per-shape maths: cube w*d and w*d*h; pyramid w*d and (w*d*h)/3; cylinder ellipse pi*(w/2)*(d/2) and *h; wedge (w*d) and (w*d*h)/2. DOMES ARE EXCLUDED from the area/volume sums for now (remarked out in code, flagged in the readout), pending D018. Domes still generate and render normally.

Rationale & optionsOptions considered
  • Display placement: on-stage caption (A) vs side billboard (B) vs companion 2D readout (C)
  • Floor area as sum of per-object footprints vs combined union coverage
  • Totals shown as absolute vs delta vs both
  • Include domes in sums now vs exclude until their geometry is settled

Rationale: Readout C is fully legible, shareable (LinkedIn/thesis), and avoids 3D-text problems; it pairs with the bare variant-id labels already on the Blender stages (D016). Sum-of-footprints is simple and transparent (noted as a gross sum). Floor area and volume reconnect the abstract evolution to architectural terms. Domes are excluded for now because their geometry is unresolved (full sphere vs hemisphere), which would distort the sums; tracked as the open decision D018.

P020P010
D024 newadoptedConvention21 Jun 2026

All labels use the JSON variant id (G001_S006 format)

Every on-screen label - stage labels in the main generator and row labels in the Forward Evolution Tree - shows the bare variant id in 'G001_S006' format, identical to the variant_id stored in the JSON. No friendly 'Gen N / Stage S' text and no A/B/C stage letters.

Rationale & optionsOptions considered
  • Letter stage names A,B,C... to avoid verbal confusion with generations (rejected earlier)
  • Friendly 'Gen N - Stage S' labels
  • Bare JSON variant id 'G001_S006' for all labels

Rationale: Keeps it simple and faithful: the label IS the data. What you see in the scene matches the JSON and the replay filenames exactly, with no translation layer to maintain or get out of sync - consistent with the decisions-as-data philosophy. The id already encodes the stage (S006), so nothing is lost.

P010P020
D023 1994adoptedVisualisation21 Jun 2026

Forward Evolution Tree - selected-parent lineage from replay JSON

Build a standalone script (run in a fresh Blender file) that reconstructs the selected-parent lineage (the 'genetic path' of the thesis) by reading the Replay/G001... JSON files. It rebuilds each generation's chosen parent as full 3D geometry, one stage per generation, stacked in a single vertical column with Gen 1 at the top descending downward and vertical gutters between rows.

Rationale & optionsOptions considered
  • Rebuild full 3D parents (option a) vs flat plan/thumbnail strip (option b)
  • Read from replay JSON vs from the live scene
  • Run in a new Blender file vs build into the current scene
  • Stop at last recorded selection vs append the current unselected generation
  • Read all generations vs a start/end range
  • Stacked stages only vs an explicit genetic-path connector line between parents

Rationale: Faithful to the thesis 'genetic array' (Fig 3.29) and genetic path (Fig 3.25). Reading the replay folder keeps it consistent with the replay philosophy and decouples it from the live generator. Agreed scope: option a (full 3D), reads JSON, new Blender file, stop at last recorded selection, all generations (no range), labels show generation and chosen stage (as in the thesis), stacked stages only for now (connector line deferred).

P010
D022 evolvedadoptedTerminology21 Jun 2026

GAAD expands to 'Genetic Aided Architectural Design'

The canonical expansion of GAAD is 'Genetic Aided Architectural Design', applying to both the 1994 thesis and GAAD Rebirth.

Rationale & optionsOptions considered
  • Genetic Aided Architectural Design (as the thesis pages read)
  • Generic Aided Architectural Design (as some Rebirth summaries read)
  • A deliberate meaning shift between 1994 and Rebirth

Rationale: The 1994 thesis (Fig 3.3 heading and back-cover abstract) reads 'Genetic'. The 'Generic' wording in later Rebirth summary documents was a transcription slip rather than an intentional change. Settling on 'Genetic' keeps 1994 and Rebirth consistent.

P019
D021 1994adoptedGenome21 Jun 2026

Per-cell scaling rules for the typed genome

Keep the five current cell names (cube, pyramid, dome, wedge, cylinder) and apply per-type scaling rules during mutation: dome mutates with uniform XYZ (all axes locked together); cylinder keeps X and Y equal with Z free (a true round column); cube, pyramid and wedge mutate freely per axis.

Rationale & optionsOptions considered
  • Restore the original six historical cells (slab, dome, box, pyramid, wedge, column) with their Fig 3.27 rules
  • Keep the five current names and apply per-type scaling rules to them
  • Cylinder free to squash vs cylinder locked XY-equal

Rationale: Keeps GAAD simple and avoids renaming churn (no going backwards on naming, consistent with existing JSON and scenes). Locking dome to uniform XYZ fixes the spindle artefact; locking cylinder XY-equal keeps it a proper circular column. Cube, pyramid and wedge stay free so the tall-spike (3.6A) and long/wide-wedge (3.6B) experiment behaviours remain reachable.

P018
D020 evolvedadoptedRecords21 Jun 2026

Decisions and Pivotal Moments recorded as JSON with generated Markdown

Maintain two linked logs (Decisions D###, Pivotal Moments P###) with JSON as the source of truth and Markdown views generated from it.

Rationale & optionsOptions considered
  • Markdown only
  • JSON only
  • JSON source of truth with generated Markdown

Rationale: Mirrors how GAAD already treats design history (structured data first, human view second) and makes the decision log itself replayable and parseable for the future AI chapter.

P002
D019 newadoptedConvention21 Jun 2026

Filenames carry a descriptive update tag

Each script version's filename and header self-document the change (e.g. a few words describing the update), so the first few lines explain what changed.

Rationale & optionsOptions considered
  • Version number only
  • Version number plus descriptive tag

Rationale: Makes each artefact self-documenting and easier to track across the development history.

D018 newadoptedGenome21 Jun 2026

Adopt the 8-gene typed genome (option a)

Rebuild the mutation engine around the original 8-parameter typed genome: cell type, XY movement, XYZ scale factors, and rotation, with type-specific growth constraints (e.g. columns grow in Z only, domes uniform XYZ, slabs in XY).

Rationale & optionsOptions considered
  • (a) Faithfully reproduce the original typed genome with per-type scaling rules
  • (b) Keep a looser abstract sandbox with a simple anti-spindle cap

Rationale: Makes Rebirth a genuine re-implementation of the thesis rather than a lookalike, and fixes the spindle while preserving enveloping domes. Chosen by Miles.

P018
D017 1994adoptedGenome21 Jun 2026

Dome geometry faithful to the original genome

Cells mutate under the original per-type scaling rules from the 1994 genome (Fig 3.27) rather than free per-axis mutation. In particular, domes mutate with uniform XYZ scaling so they stay spherical-proportioned at any size.

Rationale & optionsOptions considered
  • Cap dome height relative to footprint (simple sandbox fix)
  • Restore the original per-type scaling rules so dome XYZ stays uniform

Rationale: The spindle artefact was a port error: the Blender port let height mutate independently of width/depth, which the original genome's 'domes keep equal XYZ scales' rule prevented. The height-cap would also have broken Experiment 3.6A, which intentionally evolves large enveloping domes.

P018
D016 newadoptedPhilosophy2026-06-week1

Decisions become first-class project data

GAAD records design, development, terminology and selection decisions as data - underpinning the future Design Memory / AI-learning direction.

Rationale & options

Rationale: Recorded in Week 1 (GAAD Rebirth Master Context Archive v2.0).

D015 1994adoptedGenome2026-06-week1

Unrestricted growth after Generation 1

Designs are not constrained after Generation 1 - shifting from architectural modelling toward abstract evolutionary exploration (prototype 0.6d).

Rationale & options

Rationale: Recorded in Week 1 (GAAD Rebirth Master Context Archive v2.0).

D014 newadoptedGenome2026-06-week1

Multiple objects per Stage

Each Stage/variant may contain multiple objects, enriching the selection space (prototype 0.4).

Rationale & options

Rationale: Recorded in Week 1 (GAAD Rebirth Master Context Archive v2.0).

D013 newadoptedRecords2026-06-week1

Dedicated data folders

Store outputs in a dedicated data folder beside the project (Project.blend + Project_data/) for replay and scalability.

Rationale & options

Rationale: Recorded in Week 1 (GAAD Rebirth Master Context Archive v2.0).

D012 newadoptedRecords2026-06-week1

JSON recording

Record project state to JSON - the foundation of replay.

Rationale & options

Rationale: Recorded in Week 1 (GAAD Rebirth Master Context Archive v2.0).

D011 newadoptedInteraction2026-06-week1

Click selection

The user selects by clicking Stages/objects directly - visual and intuitive, closer to the original thesis workflow.

Rationale & options

Rationale: Recorded in Week 1 (GAAD Rebirth Master Context Archive v2.0).

D010 newadoptedInteraction2026-06-week1

Surface labels

Stages labelled on the surface (plan-readable), rather than via menus or side panels.

Rationale & options

Rationale: Recorded in Week 1 (GAAD Rebirth Master Context Archive v2.0).

D009 evolvedadoptedGenome2026-06-week1

Zero-gap Stage layout

Week 1 layout: Stages placed edge-to-edge with no gap. (Note: superseded in Week 2 by gutters/footprint constraints - see D023's lineage.)

Rationale & options

Rationale: Recorded in Week 1 (GAAD Rebirth Master Context Archive v2.0).

D008 1994adoptedConvention2026-06-week1

Generation numbering begins at 1

Generations numbered from 1, not 0, to align with human understanding.

Rationale & options

Rationale: Recorded in Week 1 (GAAD Rebirth Master Context Archive v2.0).

D007 1994adoptedTerminology2026-06-week1

GAAD Expanded defined

Allow NxN Worlds (3x3, 4x4, 12x12, larger). Same philosophy at greater scale.

Rationale & options

Rationale: Recorded in Week 1 (GAAD Rebirth Master Context Archive v2.0).

D006 evolvedadoptedTerminology2026-06-week1

GAAD Classic defined

Preserve the original MSc architecture as GAAD Classic: a 2x2 World, four Stages, a selected parent generating children.

Rationale & options

Rationale: Recorded in Week 1 (GAAD Rebirth Master Context Archive v2.0).

D005 1994adoptedTerminology2026-06-week1

'Design Parameters' replaces 'Genome'

Terminology: Design Parameters (and Design Parameter) replace Genome/Gene, to be understandable to designers and unambiguous for future AI.

Rationale & options

Rationale: Recorded in Week 1 (GAAD Rebirth Master Context Archive v2.0).

D004 1994adoptedTerminology2026-06-week1

'Stage' adopted as the evaluation area

Terminology: Stage becomes the individual design presentation / evaluation area within a World.

Rationale & options

Rationale: Recorded in Week 1 (GAAD Rebirth Master Context Archive v2.0).

D003 1994adoptedTerminology2026-06-week1

'World' adopted as the top-level environment

Terminology: World becomes the top-level design environment containing Stages.

Rationale & options

Rationale: Recorded in Week 1 (GAAD Rebirth Master Context Archive v2.0).

D002 newadoptedPlatform2026-06-week1

Blender selected as platform

Use Blender (over Revit, Grasshopper, Unity). Open source, Python scripting, full geometric control, rapid prototyping, AI-integration potential.

Rationale & options

Rationale: Recorded in Week 1 (GAAD Rebirth Master Context Archive v2.0).

D001 1994adoptedPhilosophy2026-06-week1

Record design journeys

Adopt the founding principle: GAAD records the design journey - decisions, alternatives, selections and branching histories - as first-class data, not just final outcomes.

Rationale & options

Rationale: Recorded in Week 1 (GAAD Rebirth Master Context Archive v2.0).