{
 "started": "7 Oct 2026, 14:48 CET",
 "go": "Operator GO 7 Oct ~14:47 CET: P0 + P1, realistic first, default order (vehicles, buildings, props, weapons, then creatures).",
 "phases": [
  {
   "id": "P0",
   "name": "Cards for everything we already own",
   "state": "done",
   "items": [
    "Card format with release hash (what games pin)",
    "Category tree (11 kinds, 60 groups) + 66 everyday-word aliases + 54 real-size ranges",
    "Measuring tool (no dependencies, 276 files in 0.5 s)",
    "Importer: 276 owned models -> cards, licence evidence for each",
    "GPU pass on gex44: every model loaded like a game loads it, exact size + thumbnail next to a 1.8 m person (36 s, 0 errors)",
    "Index (236 KB) + lookup in Python and JavaScript (0.1-0.3 ms per query)",
    "Browse page",
    "Canonical copy on gex44 /srv/forge-assets + cloud copy gs://forge-assets-library-eu (forge-dev-492809, europe-west3, private, versioned): 276/276 models verified by hash, repo mirrored, nightly at 05:40 CEST and after every publish"
   ]
  },
  {
   "id": "P1",
   "name": "One real OMG game picks its models from the library",
   "state": "done",
   "items": [
    "DONE Factory picker (games_library.py): game words -> library models, deterministic, gaps reported, caps 30 models / 8 MB",
    "DONE Pack: models + cards + lock (release hashes) copied into the game; loader src/lib/library + LIBRARY.md laws L1-L7",
    "DONE Live on the OMG Factory (read-only mount, no rebuild for new models); 13 new tests + garage/cast 45 pass",
    "DONE real test build 'Storm Harbour Delivery' (15:11-15:44 CET): 21 library models placed by the builder with the cards' colliders; GPU play: 22/22 library files load, 61 fps, 0 errors, a delivery scored"
   ]
  }
 ],
 "log": [
  {
   "t": "14:48 CET",
   "text": "GO received. Library repo forge-assets created (local dev tree; canonical copy goes to gex44 /srv/forge-assets)."
  },
  {
   "t": "14:54 CET",
   "text": "P0 core: card format, taxonomy, measuring tool, importer: 276 owned models carded with licence evidence."
  },
  {
   "t": "14:54 CET",
   "text": "Lookup: 0.1-0.3 ms per query; an empty class reports a GAP instead of a lookalike (tank, dragon, castle, house)."
  },
  {
   "t": "14:57 CET",
   "text": "GPU pass on gex44 (RTX 4000): all 276 load like in a game, exact sizes + thumbnails, 0 errors. Found: 12 Cast 'characters' are headless outfits (refiled), the harbour trawler faces X not +Z (flagged), Kenney cars at the garage's x1.9 are 2.85 m wide (toy style, kept), IKEA reconstructions not cleared for games (real designs)."
  },
  {
   "t": "15:02 CET",
   "text": "Browse page live (search, category tree, filters, 3D viewer with the real FGE loaders). Garage vehicles now render with the garage's own paint material, as games show them. Kenney 'truck' refiled as pickup. Checked at 1280 and 375 px on the GPU box: 0 page errors."
  },
  {
   "t": "15:10 CET",
   "text": "P1 wiring LIVE on the OMG Factory: games_library.py picks library models from the game's words (harbour game -> 20 models, 2.4 MB, 74 ms), copies them INTO the game with cards + lock, loader src/lib/library. Library mounted read-only from gex44 /srv/forge-assets (new models need no Factory rebuild). Tests: 13 new pass; garage+cast 45 pass; the 4 failing games tests fail the same before the change. Rollback copy kept."
  },
  {
   "t": "15:12 CET",
   "text": "Real OMG test build started: 'Storm Harbour Delivery' (operator account, normal billing). Card: custom, no room, top view; 21 library models attached (fish market, lighthouse, crates, barrels, street lamps, benches, mooring posts, anchors, buoys, lobster pots, fish boxes, quay walls...). Brief verified: contract + lock hash in it."
  },
  {
   "t": "15:33 CET",
   "text": "Build in progress (Engine run 1075): the builder unpacked the library (21 models + cards + lock) and its world.ts places every prop with lib.place + the cards' colliders, after lib.preload(), and merges the static library meshes by material (~25 draw calls)."
  },
  {
   "t": "15:47 CET",
   "text": "P1 DONE. Storm Harbour Delivery built and deployed 15:44 CET; GPU play 61 fps, 0 errors, all 21 library models loaded. Law L8 added to the game kit (tall models off the camera line)."
  },
  {
   "t": "16:11 CET",
   "text": "Cloud copy LIVE (operator: use forge-dev-492809): bucket gs://forge-assets-library-eu, private + versioned, dedicated account forge-assets-sync with rights on this bucket only (403 elsewhere, checked). Models are write-once there; 276/276 verified by hash in 13 s; nightly timer 05:40 CEST."
  },
  {
   "t": "17:08 CET",
   "text": "Detail is the problem (operator: 'blocky'): the imported kits are ~800 triangles, flat colours. Quality pilot started 17:04 CET: Astra authors a realistic fishing trawler and a Breton granite house in Blender from Nano Banana Pro sheets, with baked CC0 Poly Haven photographic materials (the weapon-kit recipe). Browse page: every model now has a Feedback box (collapsed) with Re-run: your note goes to Astra, the new version replaces the old one here (one job at a time, 20 to 40 min)."
  },
  {
   "t": "17:54 CET",
   "text": "Realistic pilot: Astra built a fishing trawler (110k tris) and a Breton granite house (95k) with photographic materials; made game-weight (KTX2 + Draco: 23 and 16 MB GPU, 3.1 and 2.1 MB files); KTX2 decoders now ship in OMG library packs (Factory redeployed). Feedback + Re-run live on Browse."
  },
  {
   "t": "18:41 CET",
   "text": "Houses from atoms: Astra cut the Breton house into 19 pieces + 9 shared materials (18:13-18:28 CET); the code assembler builds any house from a seed. 12 different houses: 50 draw calls, 61 fps, about 1.3 MB per extra house after a 30 MB shared kit."
  },
  {
   "t": "01:02 CET",
   "text": "Building model: blueprint v3 after 2 review passes (Astra, Fable 5.1, Gemini 3.8); fleet started: 3 Astra Blender kits (Breton v2, medieval, modern) + 2 Sonnet 5.5 + 1 Haiku 5.5 coders"
  },
  {
   "t": "01:51 CET",
   "text": "Building model live: 3 styles (Breton v2, medieval, modern) from 3 new Astra kits; law + checker; 800 Breton buildings, 0 rule errors"
  },
  {
   "t": "02:08 CET",
   "text": "Light roof strips by Astra: medieval village 6.0M -> 3.1M triangles, Breton 2.9M -> 2.1M; lean-to annexes off until their roofs exist"
  },
  {
   "t": "03:42 CET",
   "text": "Round 2: settlement law + church, cathedral, smithy, bakery, market, walls (4 Astra kits) + light detail; OhMyGames Factory wired (town kit, city kit)"
  },
  {
   "t": "13:23 CET",
   "text": "Round 4 shipped: houses by wealth and place, city layout law, doors on the ground, medieval-town kit"
  },
  {
   "t": "11:50 CET",
   "text": "Round 7: roofs, church and props textured, meadow grass, tree zoom fix, bridge parapets. Tests green."
  },
  {
   "t": "17:00 CET",
   "text": "Round 8: speed back to round 6 cost, tree flashes and roof dots fixed."
  },
  {
   "t": "02:17 CET",
   "text": "Lighter copies (operator, 10 Oct 01:53-02:17 CET): Browse viewer gets a version switch (same camera), 'Use vN in games' and a Lighter copy button (auto or triangle target). Auto keeps the lightest try that changes <= 5 % of the model's pixels and no small spot by more than 20 % brightness, checked on the GPU from 4 sides; copies stay drafts until 'Use in games'. Live: trawler 110,267 -> 64,813 tris (-41 %), Breton house 95,184 -> 61,669 (-35 %); house v3 withdrawn (broken side window the first check missed)."
  }
 ],
 "results": [
  {
   "title": "Round 8b: no more glitter on roof sides",
   "url": "browse/settlement.html",
   "shots": [
    "shots/st9-roof-glitter.jpg"
   ],
   "facts": [
    "Operator laptop check: 34 fps at start, 15 briefly, then a steady 60 (the slow-machine steps work).",
    "Glitter on roofs while moving (30-60 m): every modelled tile had dark thin edges (a rule meant for flat roof slabs), the layer under the tiles was dark and shadowed, and each tile had its own random shade even when only 2-3 pixels wide. Now: light tile edges, the under-layer in tile colour, the per-tile shade fades out at distance. Strip: before, step 1, final (two consecutive frames each)."
   ]
  },
  {
   "title": "Round 8: laptop speed, no more tree flashes or roof dots",
   "url": "browse/settlement.html",
   "shots": [
    "shots/st8-trees-before.jpg",
    "shots/st8-trees-after.jpg",
    "shots/st8-roof-dots-before.jpg",
    "shots/st8-roof-dots-after.jpg",
    "shots/st8-village-street.jpg",
    "shots/st8-town-street.jpg",
    "shots/st8-town-low.jpg",
    "shots/st8-city-aerial.jpg",
    "shots/st8-slow-guard.jpg"
   ],
   "facts": [
    "Speed (operator: 23 fps on a laptop): round 7 had quietly made the town heavier. The texture coordinates added to church/props/barn models tripled their corner points (walls, tile strips, woodpiles): now made without copies, back to round 6 (city 11.9 M points). Grass was built in 64 m squares and sent 1.4 M blade points to the graphics card on a town street: now 12 m squares and 38 m reach, 0.18 M.",
    "Slow machines: after switching corner shading off, the page now also drops to 1 pixel per screen point on a retina screen (a quarter of the pixels) when still slow; the frame badge says so.",
    "Tree flashes: while a tree blends between two detail levels or into its flat picture, each pixel showed only one of the two, so leaf gaps let the pale ground through as sparkles while moving. Now the coarser version draws whole and the finer one fades on top: no holes. Trees and grass also update before the frame is listed.",
    "Roof dots: the shaded frame was drawn without anti-aliasing (the plain canvas has it), so the thin gaps between modelled tiles came out as black dots that shimmer. Now 4x anti-aliasing there too (about +2 ms per frame on the test GPU at laptop resolution; only while corner shading is on). Bright stone walls also get specular anti-aliasing."
   ]
  },
  {
   "title": "Round 7: real roofs, textured church and props, living grass, steady trees",
   "url": "browse/settlement.html",
   "shots": [
    "shots/st7-before-roofs.jpg",
    "shots/st7-roofs.jpg",
    "shots/st7-before-roof-close.jpg",
    "shots/st7-roof-close.jpg",
    "shots/st7-before-church.jpg",
    "shots/st7-church.jpg",
    "shots/st7-before-church-close.jpg",
    "shots/st7-church-close.jpg",
    "shots/st7-before-props.jpg",
    "shots/st7-props.jpg",
    "shots/st7-before-town-street.jpg",
    "shots/st7-town-street.jpg",
    "shots/st7-grass-meadow.jpg",
    "shots/st7-village-street.jpg",
    "shots/st7-trees-zoom.jpg",
    "shots/st7-before-bridge.jpg",
    "shots/st7-bridge.jpg",
    "shots/st7-square.jpg",
    "shots/st7-village-aerial.jpg",
    "shots/st7-city-aerial.jpg"
   ],
   "facts": [
    "Church, cathedral, trade props, fountain, fences and barn doors were exported without texture coordinates, so every texture showed as one flat colour. They now get coordinates when the kit loads: stone walls, slate, wooden stalls, market cross, gravestones.",
    "Roofs: new photographed tiles and slate (Poly Haven, CC0). Each slope is one continuous tile surface (before, every roof piece restarted the pattern and the roof looked like a patchwork); cut edges are dark instead of a smeared texture; soft moss on the shady side and rain streaks. Close-up modelled tiles get a clay colour with a shade per tile. The tower hero house slate lost its polka dots.",
    "Grass: one living meadow (the engine grass module) over all open grass ground: gardens, churchyard, banks, outside the walls. None on roads, squares, fields, water or under buildings; thin at path edges; the walker presses it. Button \"grass: on/off\". About +0.2 ms GPU and +3 draw calls at street level, nothing from the air.",
    "Trees on zoom: the corner shading pass drew tree leaves as black flat planes at 60-80 m and the switch to flat picture cards snapped. Trees now keep their cutouts in that pass, fade over a short band, and the card is lit like the real tree.",
    "Bridge parapets: one texture was stretched over each 20 m stone wall (streaks); now laid at real stone size.",
    "Workers: grass and trees by two GPT-6.1 Sol workers; both were stopped by the host for low memory at about 11:33 CET after committing their work, the root merged and checked it. No paid images this round."
   ]
  },
  {
   "title": "Round 6: a town that looks lived in: authored hero houses, trees and props, curved streets and squares, a real sky and light",
   "url": "browse/settlement.html",
   "shots": [
    "shots/st6-before-town-street.jpg",
    "shots/st6-town-street.jpg",
    "shots/st6-before-village-street.jpg",
    "shots/st6-village-street.jpg",
    "shots/st6-before-city-street.jpg",
    "shots/st6-city-street.jpg",
    "shots/st6-before-town-top.jpg",
    "shots/st6-town-aerial.jpg",
    "shots/st6-hero-lineup.jpg",
    "shots/st6-heroes-close.jpg",
    "shots/st6-hero-street.jpg",
    "shots/st6-square.jpg",
    "shots/st6-fronts.jpg",
    "shots/st6-village-aerial.jpg",
    "shots/st6-city-aerial.jpg",
    "shots/st6-roof-close.jpg"
   ],
   "facts": [
    "Frame rate on screen: every 3D page shows fps, frame time, triangles and draw calls (bottom right). The slowness was 3 km of retaining wall buried up to 30 m deep in hill towns: 14.7 M -> 3.6 M triangles.",
    "Hero houses: 6 authored late-medieval French row houses (merchant, open shop, tavern, stone tower house, joiner, bakery) made like the Breton house (Astra in Blender from 3 concept sheets, then an ageing pass): fallen plaster, damp wall feet, sagging roofs, moss, goods, signs, flower boxes. They stand where the eye goes (around the square and main streets, 8 to 17 per town), the piece-built houses fill the rest. 300k triangles for all six, 5.4 MB, shared materials.",
    "Light: a sky with haze toward the horizon, distance haze scaled to the view, a warm low sun, sharp shadows that follow you at street level, soft shading in corners (switches itself off on a slow machine; button 'shading'), land to the horizon (no world edge).",
    "Life: real trees (oak, ash, bushes from the game engine's tree module) in gardens, orchards, along rivers and outside walls; hedges, grass at wall feet, ivy, flower boxes, lanterns; yards with firewood, carts, hay, barrels; street fronts with benches, barrels, crates, potted plants, shop counters, cloth awnings and washing lines over alleys. Doors keep 1.6 m free.",
    "Streets: smooth curved centrelines before houses are placed, rounded junctions, worn verges that fade into grass, cobbles on main streets and dirt lanes; squares are irregular 8-sided places with a large-stone border and gutter; the church gets a paved forecourt with a big old tree and a round stone bench.",
    "Roofs: each house its own roof shade, tile rows vary, some rows patched or mossy; moss no longer repeats as a pattern. Bridges are walkable (one collision box covered every bridge deck since round 1).",
    "Cost: town street 3.0-4.5 M triangles, 390-410 draw calls (round 5: 3.6 M / 341); 60 fps on the test GPU. Plan + build of a hill town ~1.7 s. Still open: ground seams up to 3 cm on some sites (test kept as an open todo), curved hill rows keep some gaps. Workers: Astra (kit + 1 revision) and 4 GPT-6.1 Sol passes."
   ]
  },
  {
   "title": "Round 5: carved streets, houses wall to wall, free doors, trades you can see, real window openings, aged roofs and walls",
   "url": "browse/settlement.html",
   "shots": [
    "shots/st5-before-hill-road.jpg",
    "shots/st5-hill-road.jpg",
    "shots/st5-hill-row.jpg",
    "shots/st5-before-wall-door.jpg",
    "shots/st5-wall-door-fixed.jpg",
    "shots/st5-before-window-pane.jpg",
    "shots/st5-window-reveal.jpg",
    "shots/st5-smithy.jpg",
    "shots/st5-bakery.jpg",
    "shots/st5-tavern.jpg",
    "shots/st5-barn.jpg",
    "shots/st5-town-rows.jpg",
    "shots/st5-city-street.jpg",
    "shots/st5-aged-roof.jpg",
    "shots/st5-kit-v2.jpg",
    "shots/st5-reference-streets.jpg"
   ],
   "facts": [
    "Ground is carved, not painted: one graded ground (1 m cells) for terrain, roads, houses, props and the walker. Streets are flat across and at most 12 % uphill; house pads are flat at street level; retaining walls where the cut is over 1 m.",
    "Town streets are paved from house front to house front; houses fill their plot exactly and stand wall to wall, gaps only as alleys or cross streets. Still open: curved hill rows keep some gaps.",
    "Doors are free: no wall, fence, stall or prop within 1.6 m in front of any door (the churchyard wall across a door on village/hill/1 is gone). No window or door is buried: the house drops openings below the ground and its stone base reaches the lowest ground.",
    "Trades read from 30 m: smithy with an open forge, anvil and big chimney on the street; bakery with its oven out front; tavern with tables, barrels, a double door and big sign; barns of planks with great doors and a hay cart (barns were plain houses before). Every town street with 8+ houses has a trade.",
    "Unglazed windows have a real reveal and a dark room behind (the flat dark pane with light gaps is gone). Houses are hand-built: storeys lean a little, ridges sag, windows and timbers are not on a perfect grid.",
    "New Astra kit medieval-town-v2 (11 parts, 11k triangles, 3.5 MB, 1 revision): barn doors, loft door, vent slits, aged tile strips and ridge, grime along wall feet, hay cart, trough, barrel stack, tavern table; aged clay tile, plaster, oak, barn planks, lighter thatch. Materials are swappable by name per game theme.",
    "Cost: city default view 5.4 M triangles (round 4: 3.5 M), plan + build about 2.1 s. Workers: Astra + 2 GPT-6.1 Sol."
   ]
  },
  {
   "title": "Round 4: houses by wealth and place (from the medieval-town video), a city layout law, doors on the ground",
   "url": "browse/settlement.html",
   "shots": [
    "shots/st4-city-aerial.jpg",
    "shots/st4-city-street.jpg",
    "shots/st4-tower-square.jpg",
    "shots/st4-village.jpg",
    "shots/st4-hill-cellar-door.jpg",
    "shots/st4-hill-street-doors.jpg",
    "shots/st4-catalogue.jpg",
    "shots/st4-patrician.jpg",
    "shots/st4-cottage.jpg",
    "shots/st4-kit-sheet.jpg",
    "shots/st4-wealth-rings.jpg"
   ],
   "facts": [
    "City layout law (CITY-LAYOUT.md) from the Grim Dream video and Watabou: rings of wealth from the square (patrician tenements, merchants on the main roads, craftsmen, cottages along the wall), the church at a corner of the square with a pillory and a wheel well, smelly trades and hovels outside the gates, a fish market by a gate, a shelter in a far corner.",
    "Six house archetypes (hovel, cottage, craft, burgher, patrician, tower), 144 measured variants generated before the planner lays them: 1 to 4 floors, floor heights, roof pitch, jetties, brace patterns, stone or timber, thatch or tile, glazing only for the rich, signs by trade. City seed 5: 485 craft, 170 cottage, 68 burgher, 37 hovel, 6 tower, 5 patrician (was 1 house type).",
    "Doors touch the ground: street doors sit on the road surface; a back door only where there is a yard and the ground meets it; where the ground falls a storey behind the house, a cellar door in the stone base instead.",
    "New Astra kit medieval-town (20 parts, 25k triangles, 2.3 MB): 3 dormers, chimney stacks, roof louvre, boot/pig/key/pretzel signs, oriel, arched and cellar doors, shuttered window, thatch, pillory, wheel well.",
    "Workers: Astra (Blender kit, 35 min + 1 revision), 2 GPT-6.1 Sol (houses, planner). 156 tests pass."
   ]
  },
  {
   "title": "Round 3: three times denser towns, irregular hill towns, walls that follow the slope, a props rulebook, church stones fixed",
   "url": "browse/settlement.html",
   "shots": [
    "shots/st3-city-plain.jpg",
    "shots/st3-city-hill.jpg",
    "shots/st3-town-spur.jpg",
    "shots/st3-town-river.jpg",
    "shots/st3-village-hill.jpg",
    "shots/st3-city-street.jpg",
    "shots/st3-wall-slope.jpg",
    "shots/st3-oven-footing.jpg",
    "shots/st3-square-props.jpg",
    "shots/st3-church-quoins.jpg"
   ],
   "facts": [
    "Density (same seeds, GPU box): city 285 -> 670-770 buildings on flat sites (318-443 on hills), town 110 -> 210-360, village 30-48 -> 56-91. Towns and cities build wall to wall along every street and back to back between parallel streets; a street now runs round the church or cathedral and a road leaves its far side, so the town no longer stops at the church.",
    "Hills are no longer cones: an elongated, lobed, lopsided hill, contour streets as arcs instead of rings, both sides of each contour street built, the town centred on the summit.",
    "Town and churchyard walls are sheared to follow the ground: one continuous wall up and down the slope, no 4 m steps. Towers and gates stand on the lowest corner of their footprint.",
    "The baker's oven and the smith's forge shed get a stone footing down to the ground when the slope falls away behind the house (they floated).",
    "Props rulebook: nothing on a road, inside a building or floating; trade props at the shop corners, firewood against back walls, carts and hay only in yards deep enough, village yards fenced as whole runs, market stalls in rows facing the square, the well at the edge, the fountain and cross near the middle, gravestones in rows.",
    "Church corner stones: the streaks were the trim stone sitting exactly in the wall plane and flickering against it (not the texture). Fixed in the renderer for every kit, and the Blender kit contract now asks for trim 15 mm proud of the wall.",
    "Weight went DOWN while the towns tripled: a new far detail (flat walls with window quads, about 1.3k triangles a house) beyond 60 m of the player. City 1.7-3.6 M triangles (was 5-9 M), town 2.2-3.3 M, village 1.3-2.4 M, 214-319 draw calls.",
    "Not done: no barn type yet, castle plot empty, roads still pale from above, hill villages are about 2x (not 3x) denser, no real OhMyGames build with the new kit yet."
   ]
  },
  {
   "title": "Villages, towns and cities: a placement law, a church and a cathedral, smithy, baker and market, all wired into OhMyGames",
   "url": "browse/settlement.html",
   "shots": [
    "shots/st-village-hill.jpg",
    "shots/st-town-river.jpg",
    "shots/st-city-cathedral.jpg",
    "shots/st-town-square.jpg",
    "shots/st-cathedral.jpg",
    "shots/st-church.jpg",
    "shots/st-smithy.jpg",
    "shots/st-bakery.jpg"
   ],
   "facts": [
    "Placement law (settle): hamlet / village / town / city on plain, river, crossroads, hill, spur or coast. Water and roads first, the square at the crossing, the church on the high point (hilltop villages stack in terraces up the slope, streets follow the contours, stair lanes go straight up, the downhill side of a house stands on a stone base), smithy at the edge on the road in, tavern on the square, bakery near it, market hall in the market square, walls with gate towers around towns, fields outside. Sources: lance1d20 (tiers, districts) and the Drivalia village photos (how houses stack).",
    "New buildings from 4 Astra Blender kits made tonight: smithy (open forge shed with glowing hearth, forge chimney, wide workshop door, anvil sign), bakery (bread oven, shop counter, pretzel sign), market hall on oak posts with stalls, village church (west tower, nave and chancel slices, porch, apse, churchyard), Gothic cathedral (twin spires, rose windows, flying buttresses, crossing tower, transepts), town walls, round towers, gate tower, terraces, stairs, fences, fountain, market cross, street and square ground.",
    "Churches and cathedrals are assembled from slices like the houses (bay counts, towers, spires, apse or flat end vary per seed); town houses can be wall-to-wall with the gable to the street.",
    "Weight (GPU box): village 3-5.6 M triangles at full detail, town 3-4.5 M and city 5-9 M with the new light detail (roof slabs and flat walls past the near ring), 140-200 draw calls, built in 0.1-0.3 s.",
    "Wired: the OhMyGames Factory now attaches the town kit to medieval / Breton village, town and city games (one call: createTown) and the city generator kit to GTA-like open-city games (createCity: colliders, roads, spawn, traffic you can hit, minimap); live 8 Oct 03:25 CET. A packed kit was run exactly as a game would use it; no real OhMyGames build has been made with it yet.",
    "Known flaws: no barn type (a house stands in), the castle plot is reserved but empty, bridges are plain stone decks, roads read light from high above, some bakeries are 0.6 m wider than their town plot (flagged), a real phone was not tested."
   ]
  },
  {
   "title": "Building model: 3 styles, each building planned by a law before a single piece is placed",
   "url": "browse/buildings.html",
   "shots": [
    "shots/bm-breton-longhouse.jpg",
    "shots/bm-breton-eaves.jpg",
    "shots/bm-breton-village.jpg",
    "shots/bm-medieval-village.jpg",
    "shots/bm-medieval-tavern.jpg",
    "shots/bm-modern-village.jpg"
   ],
   "facts": [
    "The law plans the building first (type, bays, storeys, which opening goes on which axis, roof, gutters), then places pieces, then checks the result in plain sentences. Fixes what you saw: one window size on every full storey (heads line up with the door), a back with a back door and windows on the same axes as the front, gutters hung on brackets BELOW the slate edge with end caps and downpipes, slates laid from the eaves with real overlap and half slates at the edges.",
    "Proof: 800 Breton buildings (4 types x 200 seeds) on the new kit: 0 rule errors; 49 tests; the old houses fail the new rules (gutter 205 mm above the lowest slate, upper windows smaller, lone back windows).",
    "3 styles, 3 new Blender kits by Astra tonight: Breton v2 (30 pieces: shutters, shop window, carriage door, back door, gutter system, 4 slates + strips, 4 wall stones, 2 slates, paintable joinery), medieval half-timber (stone ground floor, jettied timber floors, braces, leaded windows, tile roof, tavern sign), modern (render, larch cladding, concrete, tall windows, sliders, balconies, canopy, flat roof with parapet).",
    "Coherence: one village draws ONE palette (2 wall stones, 1 roof, 3 paint colours) and a type mix (houses, 1 tavern per 10, shops); every building takes its colours from it.",
    "Weight (24 buildings, GPU box, 0 page errors): Breton 61 draw calls / 2.1M triangles, medieval 71 / 3.1M (was 6.0M: Astra made light roof strips, 48 triangles instead of 224, same look from 3 m), modern 43 / 1.8M. A phone-size viewport rendered all three; a real phone was not tested.",
    "Known flaws: lean-to annexes are off (their roof shape is not laid yet); the medieval roof shows faint banding where light strips meet single tiles; medieval and modern have no rule checker yet (Breton has 20+ rules)."
   ]
  },
  {
   "title": "Houses from atoms: 19 pieces + 9 shared materials make any number of Breton houses",
   "url": "browse/houses.html",
   "shots": [
    "shots/kit-compare.jpg",
    "shots/kit-village.jpg",
    "shots/kit-street.jpg",
    "shots/kit-pieces.jpg"
   ],
   "facts": [
    "Astra cut the Breton house into 19 reusable pieces (slates, ridge tile, corner stones, 5 window types, door, dormer, chimney, gutter, downpipe, boards, lantern: 17,012 triangles in all) and 9 shared tileable materials. Code assembles houses from a seed: no model call, a new house in milliseconds.",
    "Weight: the kit costs about 28 MB of GPU textures + 1.7 MB of shapes ONCE (4.5 MB download); each house then costs about 1.3 MB (its generated stone walls + piece positions). One house alone: kit 31 MB vs baked 16 MB, so the kit wins from the 2nd house; 12 different houses: about 45 MB vs about 240 MB if each were baked.",
    "12 houses = 18,869 pieces drawn in 50 draw calls (pieces repeat as instances), 61 fps on the GPU box, 0 errors, kit loads in about 0.5 s.",
    "Side by side with the original (first picture): same stonework, quoins, shutters, dormers, roof. Lost: the original's unique moss and salt staining low on the walls (the kit's moss band texture came out streaky, switched off for now)."
   ]
  },
  {
   "title": "Detail: the first two realistic models (Astra in Blender)",
   "url": "browse/index.html?q=house",
   "shots": [
    "shots/before-after.jpg",
    "shots/game-kit-house.jpg"
   ],
   "facts": [
    "Left: the old kit pieces (trawler 3,466 triangles, wall module 932, flat colours). Right: Astra's new trawler (110k triangles) and Breton granite house (95k), photographic CC0 Poly Haven materials baked in Blender.",
    "v1 straight out of Blender was 222 MB and 131 MB of GPU texture memory: far too heavy for phones, kept as candidate. v2 = same model, textures capped at 1024 px and GPU-compressed (KTX2) + compressed geometry: 3.1 MB / 23 MB and 2.1 MB / 16 MB. Approved.",
    "Proven in the game kit itself (second picture): the house loads with its compressed textures and colliders, 0 errors. The live Factory now ships the decoders with such models.",
    "Next problem seen: old flat crates beside the new house clash. Picking should keep one style per game."
   ]
  },
  {
   "title": "Storm Harbour Delivery: the first OMG game dressed from the library",
   "url": "https://pb75d0339.timothee-leborgne.ohmyunicorn.com",
   "shots": [
    "shots/game-quay.jpg",
    "shots/game-lighthouse.jpg",
    "shots/game-market.jpg"
   ],
   "facts": [
    "Built by the normal OMG pipeline from a player-style prompt (operator account, normal billing).",
    "The Factory picked 21 models from the game's words; the builder placed them with lib.place and the cards' colliders, after preload, and merged the static ones by material.",
    "Played on the GPU box: 22 of 22 library files loaded, 61 fps, 0 page errors, a delivery scored.",
    "Finding: at true size the 22 m lighthouse hides the cart in the top-down view when you pass it. New law L8 in the game kit: tall models stay off the camera's line to the player, or fade."
   ]
  }
 ]
}