Owner's ruling, and it corrects the design not just the classification: the daylight requirement is already defined in the crinkliness. The gaussian's compact side IS "too little exposed wall per unit floor"; its exposed side is envelope cost. 38.9's proposed daylight: axis was redundant, and keying it off usage: was worse than redundant. What was actually missing: crinkliness is the only leaf quality factor with no per-space target. size, width and proportion are all declared by the space; crinkliness was one global number for every room in every building. crinkliness: none -> no minimum-exposure requirement, may be buried crinkliness: [t, s] -> this space's own target key absent -> the global uncrinkliness target, as today `none` clips the factor on the compact side, it does not switch it off: over-exposure is still penalised, because a crinkly leaf costs envelope whatever it holds. A store may be buried; a store may not be a starfish. The mechanism is backward compatible -- an absent key resolves to the global target, so shipping it changes no score. Behaviour changes only where a config declares something, which keeps the objective change visible per programme in config rather than hidden in a default. Owner's classification: everything a person occupies wants a window, WCs and reception/waiting/foyer included; only stores, plant, records and laundry do not. migrate_crinkliness_key.py declared crinkliness: none on 18 corpus spaces. Crinkliness fails 271 -> 243, of which not-defects 136 (50%) -> 108 (44%); the 28 that went are exactly the utility fails. usage_daylight and needs_daylight are removed as mis-keyed, and DAYLIGHT_USAGES with them -- a vocabulary value should exist only where the engine treats it differently. The historical crinkliness_mode modes stay, default off, so 38.6/38.8 remain reproducible. uncrinkliness_circulation is now settable to none like any space, but its default is left unchanged pending a ruling: corridors were not among the groups ruled on and are 63% of the remaining phantom fails. Lint at parity (46); tests 364 passed, same 7 pre-existing fixture failures. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
176 lines
2.8 KiB
Text
176 lines
2.8 KiB
Text
---
|
|
# Harbor House L0 - single-storey de-risk variant (homemaker-py-c4c.1)
|
|
#
|
|
# Built from harbor-house by retaining ONLY the 10 space codes explicitly
|
|
# marked `level: 0`. The straddling anonymous spaces (n=neighborhood, t=bathroom)
|
|
# carry no explicit level key and are dropped here so the programme is an
|
|
# unambiguous single-storey set. Adjacencies are pruned to the retained codes
|
|
# (all remaining refs are to c/o or to retained codes k1/da1).
|
|
#
|
|
# Purpose: isolate per-floor CONSTRUCTION difficulty from multi-storey COUPLING.
|
|
|
|
spaces:
|
|
cr1:
|
|
usage: living
|
|
name: Common Room with Fireplace
|
|
size:
|
|
- 80.0
|
|
- 10.0
|
|
width:
|
|
- 6.0
|
|
- 1.5
|
|
proportion:
|
|
- 2.0
|
|
- 0.5
|
|
adjacency:
|
|
- c
|
|
- o
|
|
|
|
ef1:
|
|
usage: none
|
|
name: Entrance Foyer
|
|
size:
|
|
- 15.0
|
|
- 3.0
|
|
width:
|
|
- 3.0
|
|
- 0.5
|
|
adjacency:
|
|
- c
|
|
|
|
da1:
|
|
usage: living
|
|
name: Dining Area
|
|
size:
|
|
- 60.0
|
|
- 8.0
|
|
width:
|
|
- 5.0
|
|
- 1.0
|
|
proportion:
|
|
- 2.5
|
|
- 0.8
|
|
adjacency:
|
|
- c
|
|
- k1
|
|
- o
|
|
|
|
k1:
|
|
usage: kitchen
|
|
name: Kitchen
|
|
size:
|
|
- 30.0
|
|
- 5.0
|
|
width:
|
|
- 4.0
|
|
- 1.0
|
|
adjacency:
|
|
- da1
|
|
- c
|
|
|
|
ws1:
|
|
usage: living
|
|
name: Workshop Space
|
|
size:
|
|
- 40.0
|
|
- 6.0
|
|
width:
|
|
- 5.0
|
|
- 1.0
|
|
proportion:
|
|
- 1.8
|
|
- 0.5
|
|
adjacency:
|
|
- c
|
|
- o
|
|
|
|
m:
|
|
usage: living
|
|
name: Meeting Room
|
|
size:
|
|
- 10.0
|
|
- 2.0
|
|
width:
|
|
- 2.5
|
|
- 0.5
|
|
adjacency:
|
|
- c
|
|
count: 3
|
|
|
|
la1:
|
|
crinkliness: none # no window needed
|
|
usage: utility
|
|
name: Laundry Room
|
|
size:
|
|
- 20.0
|
|
- 4.0
|
|
width:
|
|
- 3.0
|
|
- 0.8
|
|
adjacency:
|
|
- c
|
|
|
|
st1:
|
|
crinkliness: none # no window needed
|
|
usage: utility
|
|
name: Ground Floor Storage
|
|
size:
|
|
- 22.0
|
|
- 4.0
|
|
width:
|
|
- 3.0
|
|
- 0.8
|
|
adjacency:
|
|
- c
|
|
|
|
me1:
|
|
crinkliness: none # no window needed
|
|
usage: utility
|
|
name: Mechanical/Electrical Room
|
|
size:
|
|
- 25.0
|
|
- 4.0
|
|
width:
|
|
- 3.5
|
|
- 0.8
|
|
adjacency:
|
|
- c
|
|
|
|
of:
|
|
usage: bedroom
|
|
name: Staff Office
|
|
size:
|
|
- 12.5
|
|
- 2.5
|
|
width:
|
|
- 2.5
|
|
- 0.5
|
|
adjacency:
|
|
- c
|
|
count: 2
|
|
|
|
# Building constraints — single storey
|
|
storey_minimum: 1
|
|
storey_limit: 1
|
|
force_roof_garden: 0
|
|
|
|
# Circulation ratio
|
|
ratio_circulation:
|
|
- 0.08
|
|
- 0.15
|
|
|
|
# Outside space ratio (courtyard requirement)
|
|
ratio_outside:
|
|
- 0.15
|
|
- 0.10
|
|
|
|
# Staircase requirements (single storey: minimum is forced to 1 by the
|
|
# fitness `or 1` default, so we keep exactly one)
|
|
staircase_min: 1
|
|
staircase_max: 1
|
|
|
|
# Economic parameters
|
|
value_inside: 300.0
|
|
value_circulation: 50.0
|
|
value_outside: 100.0
|
|
value_supported: 300.0
|