TAP version 13
# Subtest: carved ground is a metre grid with exact, slope-limited road profiles
ok 1 - carved ground is a metre grid with exact, slope-limited road profiles
  ---
  duration_ms: 22339.137912
  ...
# Subtest: square paving has a small drainage fall and the grade survives a JSON round trip
ok 2 - square paving has a small drainage fall and the grade survives a JSON round trip
  ---
  duration_ms: 114.471084
  ...
# Subtest: road ends meet roads, squares, terminal walls or the world boundary, never an unlabelled void
ok 3 - road ends meet roads, squares, terminal walls or the world boundary, never an unlabelled void
  ---
  duration_ms: 312.754963
  ...
# Subtest: straight town rows touch their marked party neighbour, while house widths remain exact inputs
ok 4 - straight town rows touch their marked party neighbour, while house widths remain exact inputs
  ---
  duration_ms: 3.688148
  ...
# Subtest: house pad interiors are flat on the same ground sampled by the walker
ok 5 - house pad interiors are flat on the same ground sampled by the walker
  ---
  duration_ms: 153.450247
  ...
# Subtest: every possible street, rear and barn door has 1.6 m free across tiers, sites and seeds 1 to 5
ok 6 - every possible street, rear and barn door has 1.6 m free across tiers, sites and seeds 1 to 5
  ---
  duration_ms: 259547.649376
  ...
# Subtest: every long urban street shows a shop, bakery, smithy or tavern; the square and gates keep taverns
ok 7 - every long urban street shows a shop, bakery, smithy or tavern; the square and gates keep taverns
  ---
  duration_ms: 17.884932
  ...
# Subtest: retaining walls stand only where the carved ground steps, and never run deep underground
ok 8 - retaining walls stand only where the carved ground steps, and never run deep underground
  ---
  duration_ms: 38.867402
  ...
# Subtest: wealth rings: square elite, merchants on core main roads, poor near walls and outside
ok 9 - wealth rings: square elite, merchants on core main roads, poor near walls and outside
  ---
  duration_ms: 140520.194419
  ...
# Subtest: village and hamlet houses stay low; no street side repeats the same profile three times
ok 10 - village and hamlet houses stay low; no street side repeats the same profile three times
  ---
  duration_ms: 5605.133172
  ...
# Subtest: church is at a square corner; towns have a well, pillory, gate fish market and sheltered garden
ok 11 - church is at a square corner; towns have a well, pillory, gate fish market and sheltered garden
  ---
  duration_ms: 75.668325
  ...
# Subtest: gate suburbs are wholly outside the wall and clear of its roads, with vegetable gardens
ok 12 - gate suburbs are wholly outside the wall and clear of its roads, with vegetable gardens
  ---
  duration_ms: 97.880377
  ...
# Subtest: road sampler uses the drawn triangle heights, including lift, on sharply changing ground
ok 13 - road sampler uses the drawn triangle heights, including lift, on sharply changing ground
  ---
  duration_ms: 4.399082
  ...
# Subtest: all plots have rear grade inputs and blocked/back-to-back rows never have a rear door
ok 14 - all plots have rear grade inputs and blocked/back-to-back rows never have a rear door
  ---
  duration_ms: 6667.416774
  ...
# Subtest: real catalogue variants fit plots and every built street and rear door meets its drawn ground
ok 15 - real catalogue variants fit plots and every built street and rear door meets its drawn ground # SKIP
  ---
  duration_ms: 0.174363
  ...
# Subtest: a village without a market hall keeps its council tavern on the square
ok 16 - a village without a market hall keeps its council tavern on the square
  ---
  duration_ms: 20085.650929
  ...
# Subtest: new civic and fish props obey the footprint, road, wall, water and level-ground laws
ok 17 - new civic and fish props obey the footprint, road, wall, water and level-ground laws
  ---
  duration_ms: 529.537671
  ...
# Subtest: renderer passes the exact frontage and measured per-wall ground inputs without extra public layout calls
ok 18 - renderer passes the exact frontage and measured per-wall ground inputs without extra public layout calls # SKIP
  ---
  duration_ms: 0.53081
  ...
# hamlet/plain: {"bush":9,"flower_box":3,"oak":53,"firewood_stack":4,"basket_produce":3,"ash":11,"barrel_stack":1,"lantern_iron":2,"grass":111,"hay_cart":1,"barrel":1,"hay_bale":1,"hedge":18}
# village/plain: {"well_roofed":1,"bench_wood":3,"lantern_post":2,"flower_bed":4,"oak":77,"barrel":18,"grass":488,"flower_box":19,"lantern_iron":13,"ash":30,"firewood_stack":20,"bush":64,"ivy":16,"basket_produce":8,"barrel_stack":5,"washing_line":3,"trough":3,"hay_bale":2,"crate_stack":1,"market_goods":4,"hedge":155}
# town/hill: {"oak":106,"round_stone_bench":1,"churchyard_cross":2,"bench_wood":4,"lantern_post":4,"flower_bed":10,"bush":73,"firewood_stack":72,"grass":138,"flower_box":72,"ash":35,"lantern_iron":29,"ivy":17,"cart_hand":9,"hay_bale":10,"trough":4,"hay_cart":1,"basket_produce":1,"market_goods":22,"hedge":55}
# city/plain: {"oak":234,"round_stone_bench":1,"churchyard_cross":1,"bench_wood":3,"lantern_post":2,"flower_bed":15,"flower_box":256,"lantern_iron":84,"firewood_stack":138,"grass":403,"ivy":79,"basket_produce":47,"ash":94,"bush":240,"barrel":67,"barrel_stack":40,"hay_cart":13,"cart_hand":10,"hay_bale":6,"washing_line":2,"trough":2,"market_goods":22,"hedge":31}
# village/river: {"well_roofed":1,"bench_wood":4,"lantern_post":2,"oak":77,"bush":44,"barrel":15,"grass":482,"flower_box":16,"barrel_stack":9,"firewood_stack":15,"basket_produce":10,"ash":47,"lantern_iron":10,"ivy":11,"washing_line":5,"trough":5,"hay_bale":2,"crate_stack":1,"hay_cart":1,"market_goods":4,"hedge":86}
# town/coast: {"oak":113,"round_stone_bench":2,"churchyard_cross":2,"bench_wood":4,"lantern_post":3,"flower_bed":12,"flower_box":81,"grass":112,"bush":100,"barrel_stack":19,"ivy":24,"lantern_iron":34,"firewood_stack":47,"basket_produce":21,"barrel":25,"ash":32,"washing_line":2,"hay_bale":4,"trough":2,"hay_cart":6,"cart_hand":3,"market_goods":22,"hedge":60}
# Subtest: hamlet/plain/1: deterministic, level and clear roots
ok 19 - hamlet/plain/1: deterministic, level and clear roots
  ---
  duration_ms: 793.964571
  ...
# Subtest: village/plain/1: deterministic, level and clear roots
ok 20 - village/plain/1: deterministic, level and clear roots
  ---
  duration_ms: 9232.964221
  ...
# Subtest: town/hill/1: deterministic, level and clear roots
ok 21 - town/hill/1: deterministic, level and clear roots
  ---
  duration_ms: 12862.268088
  ...
# Subtest: city/plain/1: deterministic, level and clear roots
ok 22 - city/plain/1: deterministic, level and clear roots
  ---
  duration_ms: 61938.692765
  ...
# Subtest: village/river/7: deterministic, level and clear roots
ok 23 - village/river/7: deterministic, level and clear roots
  ---
  duration_ms: 10901.95134
  ...
# Subtest: town/coast/9: deterministic, level and clear roots
ok 24 - town/coast/9: deterministic, level and clear roots
  ---
  duration_ms: 11655.7423
  ...
# Subtest: dressing does not rewrite the finished layout
ok 25 - dressing does not rewrite the finished layout
  ---
  duration_ms: 496.942104
  ...
# Subtest: polygon collision includes concave square recesses
ok 26 - polygon collision includes concave square recesses
  ---
  duration_ms: 0.583891
  ...
# Subtest: flower boxes bind to real window sills, and removal releases dressing
not ok 27 - flower boxes bind to real window sills, and removal releases dressing
  ---
  duration_ms: 4.189158
  location: '/home/claude-agent/forge-build/forge-assets/.forge-worktrees/1791498880-fc9b80/test/dress.test.mjs:30:1'
  failureType: 'testCodeFailure'
  error: "Cannot find module '/home/claude-agent/forge-build/forge-assets/.forge-worktrees/1791498880-fc9b80/browse/vendor/build/three.module.min.js' imported from /home/claude-agent/forge-build/forge-assets/.forge-worktrees/1791498880-fc9b80/test/dress.test.mjs"
  code: 'ERR_MODULE_NOT_FOUND'
  stack: |-
    finalizeResolution (node:internal/modules/esm/resolve:283:11)
    moduleResolve (node:internal/modules/esm/resolve:952:10)
    defaultResolve (node:internal/modules/esm/resolve:1188:11)
    ModuleLoader.defaultResolve (node:internal/modules/esm/loader:708:12)
    #cachedDefaultResolve (node:internal/modules/esm/loader:657:25)
    ModuleLoader.resolve (node:internal/modules/esm/loader:640:38)
    ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:264:38)
    ModuleLoader.import (node:internal/modules/esm/loader:605:34)
    defaultImportModuleDynamicallyForModule (node:internal/modules/esm/utils:221:31)
    importModuleDynamicallyCallback (node:internal/modules/esm/utils:260:12)
  ...
1..27
# tests 27
# suites 0
# pass 24
# fail 1
# cancelled 0
# skipped 2
# todo 0
# duration_ms 283842.464317
