homemaker-layout/experiments/usage_map_proposal.yaml

159 lines
7.6 KiB
YAML
Raw Normal View History

homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
# `usage:` assignments for every corpus room code (homemaker-py-sel).
homemaker-py-sel: propose usage for all 52 corpus codes; scope was understated Bruno's rulings settle the framing: usage is an ACCESS-REQUIREMENT class, not a room-name category. li1 "Library Corner" and br1 "Staff Room" are living rooms (same access requirements); tr1 "Treatment Room" has a bedroom's requirements (terminal, not a circulation route); la1 "Laundry Room" is utility. Ground-floor external cases (fuel stores, bins) need no class — level: 0 plus adjacency: [o] already expresses that. SCOPE CORRECTION. My "93% pure annotation, 7 entries change" estimate was mechanically true but misleading: `none` is not neutral. Nothing is stripped, so has_circulation MAY ROUTE THROUGH the room. 34 of 52 distinct corpus codes currently have no usage class and are therefore modelled as permeable corridors -- including Dental Surgery, GP Consulting, Minor Surgery, Physiotherapy, Counselling, Records, Sterilisation, six storage rooms, four offices and "Individual Room" (a resident's own room). Consequence for §38: the model OVERSTATES connectivity, since a level can be found connected through rooms that are dead ends in reality. "level N not connected" is therefore rarer than it should be, compounding §38.2 -- the objective already pays x60-85 to delete circulation, and the corridors it deletes are then not missed because store cupboards stand in for them. Adds experiments/usage_map_proposal.yaml: all 52 codes covered (47 assigned, 5 unresolved, 0 missing) -- living 10, kitchen 2, bedroom 15, toilet 7, utility 10, none 3. Nothing reads it yet; it is the review artifact and, once agreed, the migration input. Also verified and recorded (Q2): a dedicated toilet off a bedroom-class room does NOT survive scoring. has_circulation runs its bedroom loop before its toilet loop and the bedroom loop strips bedroom->toilet, so the ensuite is severed -- for real bedrooms too. Existing Urb behaviour, neither caused nor fixed by the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:47:11 +00:00
#
# FOR REVIEW — nothing reads this yet. Once agreed it becomes the input to the
# migration that writes `usage:` into each `patterns.config`.
#
homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
# Usage is an ACCESS-REQUIREMENT class, not a room-name category (Bruno:
# "library corner and staff room are living rooms as they have the same access
# requirements"). What each class does today, in `graph.has_circulation`:
homemaker-py-sel: propose usage for all 52 corpus codes; scope was understated Bruno's rulings settle the framing: usage is an ACCESS-REQUIREMENT class, not a room-name category. li1 "Library Corner" and br1 "Staff Room" are living rooms (same access requirements); tr1 "Treatment Room" has a bedroom's requirements (terminal, not a circulation route); la1 "Laundry Room" is utility. Ground-floor external cases (fuel stores, bins) need no class — level: 0 plus adjacency: [o] already expresses that. SCOPE CORRECTION. My "93% pure annotation, 7 entries change" estimate was mechanically true but misleading: `none` is not neutral. Nothing is stripped, so has_circulation MAY ROUTE THROUGH the room. 34 of 52 distinct corpus codes currently have no usage class and are therefore modelled as permeable corridors -- including Dental Surgery, GP Consulting, Minor Surgery, Physiotherapy, Counselling, Records, Sterilisation, six storage rooms, four offices and "Individual Room" (a resident's own room). Consequence for §38: the model OVERSTATES connectivity, since a level can be found connected through rooms that are dead ends in reality. "level N not connected" is therefore rarer than it should be, compounding §38.2 -- the objective already pays x60-85 to delete circulation, and the corridors it deletes are then not missed because store cupboards stand in for them. Adds experiments/usage_map_proposal.yaml: all 52 codes covered (47 assigned, 5 unresolved, 0 missing) -- living 10, kitchen 2, bedroom 15, toilet 7, utility 10, none 3. Nothing reads it yet; it is the review artifact and, once agreed, the migration input. Also verified and recorded (Q2): a dedicated toilet off a bedroom-class room does NOT survive scoring. has_circulation runs its bedroom loop before its toilet loop and the bedroom loop strips bedroom->toilet, so the ensuite is severed -- for real bedrooms too. Existing Urb behaviour, neither caused nor fixed by the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:47:11 +00:00
#
# living keeps its MOST popular circulation neighbour; not stripped from
# other rooms, so living spaces may chain to one another.
# kitchen as living, plus `fitness.access` accepts living/circulation.
# bedroom edges to living/kitchen/bedroom/toilet are REMOVED, so it is
# reachable only from circulation or outside — a terminal private
# room, never a route.
# toilet edges to outside/living/kitchen/toilet removed.
homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
# utility NEW. Same access requirements as `bedroom` today (terminal, never a
# route) but a DISTINCT declared use — see DESIGN NOTE 1.
homemaker-py-sel: propose usage for all 52 corpus codes; scope was understated Bruno's rulings settle the framing: usage is an ACCESS-REQUIREMENT class, not a room-name category. li1 "Library Corner" and br1 "Staff Room" are living rooms (same access requirements); tr1 "Treatment Room" has a bedroom's requirements (terminal, not a circulation route); la1 "Laundry Room" is utility. Ground-floor external cases (fuel stores, bins) need no class — level: 0 plus adjacency: [o] already expresses that. SCOPE CORRECTION. My "93% pure annotation, 7 entries change" estimate was mechanically true but misleading: `none` is not neutral. Nothing is stripped, so has_circulation MAY ROUTE THROUGH the room. 34 of 52 distinct corpus codes currently have no usage class and are therefore modelled as permeable corridors -- including Dental Surgery, GP Consulting, Minor Surgery, Physiotherapy, Counselling, Records, Sterilisation, six storage rooms, four offices and "Individual Room" (a resident's own room). Consequence for §38: the model OVERSTATES connectivity, since a level can be found connected through rooms that are dead ends in reality. "level N not connected" is therefore rarer than it should be, compounding §38.2 -- the objective already pays x60-85 to delete circulation, and the corridors it deletes are then not missed because store cupboards stand in for them. Adds experiments/usage_map_proposal.yaml: all 52 codes covered (47 assigned, 5 unresolved, 0 missing) -- living 10, kitchen 2, bedroom 15, toilet 7, utility 10, none 3. Nothing reads it yet; it is the review artifact and, once agreed, the migration input. Also verified and recorded (Q2): a dedicated toilet off a bedroom-class room does NOT survive scoring. has_circulation runs its bedroom loop before its toilet loop and the bedroom loop strips bedroom->toilet, so the ensuite is severed -- for real bedrooms too. Existing Urb behaviour, neither caused nor fixed by the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:47:11 +00:00
# none nothing is stripped: the room is fully permeable and the
# connectivity graph MAY ROUTE THROUGH IT. Correct only for spaces
# that genuinely are part of the circulation system.
#
homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
# `none` is why this is a bigger change than it looks: 34 of 52 corpus codes
# currently have no class, so a Dental Surgery, a Records Room and a Utilities
# Closet can all serve as corridors today.
homemaker-py-sel: propose usage for all 52 corpus codes; scope was understated Bruno's rulings settle the framing: usage is an ACCESS-REQUIREMENT class, not a room-name category. li1 "Library Corner" and br1 "Staff Room" are living rooms (same access requirements); tr1 "Treatment Room" has a bedroom's requirements (terminal, not a circulation route); la1 "Laundry Room" is utility. Ground-floor external cases (fuel stores, bins) need no class — level: 0 plus adjacency: [o] already expresses that. SCOPE CORRECTION. My "93% pure annotation, 7 entries change" estimate was mechanically true but misleading: `none` is not neutral. Nothing is stripped, so has_circulation MAY ROUTE THROUGH the room. 34 of 52 distinct corpus codes currently have no usage class and are therefore modelled as permeable corridors -- including Dental Surgery, GP Consulting, Minor Surgery, Physiotherapy, Counselling, Records, Sterilisation, six storage rooms, four offices and "Individual Room" (a resident's own room). Consequence for §38: the model OVERSTATES connectivity, since a level can be found connected through rooms that are dead ends in reality. "level N not connected" is therefore rarer than it should be, compounding §38.2 -- the objective already pays x60-85 to delete circulation, and the corridors it deletes are then not missed because store cupboards stand in for them. Adds experiments/usage_map_proposal.yaml: all 52 codes covered (47 assigned, 5 unresolved, 0 missing) -- living 10, kitchen 2, bedroom 15, toilet 7, utility 10, none 3. Nothing reads it yet; it is the review artifact and, once agreed, the migration input. Also verified and recorded (Q2): a dedicated toilet off a bedroom-class room does NOT survive scoring. has_circulation runs its bedroom loop before its toilet loop and the bedroom loop strips bedroom->toilet, so the ensuite is severed -- for real bedrooms too. Existing Urb behaviour, neither caused nor fixed by the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:47:11 +00:00
living:
cr1: Common Room with Fireplace
da1: Dining Area
en1: TV / Media Room
gy1: Exercise Room
l1: Living/Dining/Kitchen
homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
li1: Library Corner # ruled: same access requirements as a living room
homemaker-py-sel: propose usage for all 52 corpus codes; scope was understated Bruno's rulings settle the framing: usage is an ACCESS-REQUIREMENT class, not a room-name category. li1 "Library Corner" and br1 "Staff Room" are living rooms (same access requirements); tr1 "Treatment Room" has a bedroom's requirements (terminal, not a circulation route); la1 "Laundry Room" is utility. Ground-floor external cases (fuel stores, bins) need no class — level: 0 plus adjacency: [o] already expresses that. SCOPE CORRECTION. My "93% pure annotation, 7 entries change" estimate was mechanically true but misleading: `none` is not neutral. Nothing is stripped, so has_circulation MAY ROUTE THROUGH the room. 34 of 52 distinct corpus codes currently have no usage class and are therefore modelled as permeable corridors -- including Dental Surgery, GP Consulting, Minor Surgery, Physiotherapy, Counselling, Records, Sterilisation, six storage rooms, four offices and "Individual Room" (a resident's own room). Consequence for §38: the model OVERSTATES connectivity, since a level can be found connected through rooms that are dead ends in reality. "level N not connected" is therefore rarer than it should be, compounding §38.2 -- the objective already pays x60-85 to delete circulation, and the corridors it deletes are then not missed because store cupboards stand in for them. Adds experiments/usage_map_proposal.yaml: all 52 codes covered (47 assigned, 5 unresolved, 0 missing) -- living 10, kitchen 2, bedroom 15, toilet 7, utility 10, none 3. Nothing reads it yet; it is the review artifact and, once agreed, the migration input. Also verified and recorded (Q2): a dedicated toilet off a bedroom-class room does NOT survive scoring. has_circulation runs its bedroom loop before its toilet loop and the bedroom loop strips bedroom->toilet, so the ensuite is severed -- for real bedrooms too. Existing Urb behaviour, neither caused nor fixed by the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:47:11 +00:00
lo1: Lounge
lr1: Common Living Room
homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
br1: Staff Room # ruled: same access requirements as a living room
homemaker-py-sel: propose usage for all 52 corpus codes; scope was understated Bruno's rulings settle the framing: usage is an ACCESS-REQUIREMENT class, not a room-name category. li1 "Library Corner" and br1 "Staff Room" are living rooms (same access requirements); tr1 "Treatment Room" has a bedroom's requirements (terminal, not a circulation route); la1 "Laundry Room" is utility. Ground-floor external cases (fuel stores, bins) need no class — level: 0 plus adjacency: [o] already expresses that. SCOPE CORRECTION. My "93% pure annotation, 7 entries change" estimate was mechanically true but misleading: `none` is not neutral. Nothing is stripped, so has_circulation MAY ROUTE THROUGH the room. 34 of 52 distinct corpus codes currently have no usage class and are therefore modelled as permeable corridors -- including Dental Surgery, GP Consulting, Minor Surgery, Physiotherapy, Counselling, Records, Sterilisation, six storage rooms, four offices and "Individual Room" (a resident's own room). Consequence for §38: the model OVERSTATES connectivity, since a level can be found connected through rooms that are dead ends in reality. "level N not connected" is therefore rarer than it should be, compounding §38.2 -- the objective already pays x60-85 to delete circulation, and the corridors it deletes are then not missed because store cupboards stand in for them. Adds experiments/usage_map_proposal.yaml: all 52 codes covered (47 assigned, 5 unresolved, 0 missing) -- living 10, kitchen 2, bedroom 15, toilet 7, utility 10, none 3. Nothing reads it yet; it is the review artifact and, once agreed, the migration input. Also verified and recorded (Q2): a dedicated toilet off a bedroom-class room does NOT survive scoring. has_circulation runs its bedroom loop before its toilet loop and the bedroom loop strips bedroom->toilet, so the ensuite is severed -- for real bedrooms too. Existing Urb behaviour, neither caused nor fixed by the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:47:11 +00:00
m: Meeting Room
homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
gh1: Greenhouse # ruled: grows plants, but a living area like a conservatory
ws1: Workshop Space # ruled CONDITIONALLY — see DESIGN NOTE 3
homemaker-py-sel: propose usage for all 52 corpus codes; scope was understated Bruno's rulings settle the framing: usage is an ACCESS-REQUIREMENT class, not a room-name category. li1 "Library Corner" and br1 "Staff Room" are living rooms (same access requirements); tr1 "Treatment Room" has a bedroom's requirements (terminal, not a circulation route); la1 "Laundry Room" is utility. Ground-floor external cases (fuel stores, bins) need no class — level: 0 plus adjacency: [o] already expresses that. SCOPE CORRECTION. My "93% pure annotation, 7 entries change" estimate was mechanically true but misleading: `none` is not neutral. Nothing is stripped, so has_circulation MAY ROUTE THROUGH the room. 34 of 52 distinct corpus codes currently have no usage class and are therefore modelled as permeable corridors -- including Dental Surgery, GP Consulting, Minor Surgery, Physiotherapy, Counselling, Records, Sterilisation, six storage rooms, four offices and "Individual Room" (a resident's own room). Consequence for §38: the model OVERSTATES connectivity, since a level can be found connected through rooms that are dead ends in reality. "level N not connected" is therefore rarer than it should be, compounding §38.2 -- the objective already pays x60-85 to delete circulation, and the corridors it deletes are then not missed because store cupboards stand in for them. Adds experiments/usage_map_proposal.yaml: all 52 codes covered (47 assigned, 5 unresolved, 0 missing) -- living 10, kitchen 2, bedroom 15, toilet 7, utility 10, none 3. Nothing reads it yet; it is the review artifact and, once agreed, the migration input. Also verified and recorded (Q2): a dedicated toilet off a bedroom-class room does NOT survive scoring. has_circulation runs its bedroom loop before its toilet loop and the bedroom loop strips bedroom->toilet, so the ensuite is severed -- for real bedrooms too. Existing Urb behaviour, neither caused nor fixed by the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:47:11 +00:00
kitchen:
k1: Kitchen
kt1: Staff Kitchenette
bedroom: # terminal private room, entered from circulation only
b1: Master Bedroom
b2: Second Bedroom
r: Individual Room
homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
n: Neighborhood # ruled: a communal sleeping area, much like a dormitory
tr1: Treatment Room # ruled: access requirements of a bedroom
homemaker-py-sel: propose usage for all 52 corpus codes; scope was understated Bruno's rulings settle the framing: usage is an ACCESS-REQUIREMENT class, not a room-name category. li1 "Library Corner" and br1 "Staff Room" are living rooms (same access requirements); tr1 "Treatment Room" has a bedroom's requirements (terminal, not a circulation route); la1 "Laundry Room" is utility. Ground-floor external cases (fuel stores, bins) need no class — level: 0 plus adjacency: [o] already expresses that. SCOPE CORRECTION. My "93% pure annotation, 7 entries change" estimate was mechanically true but misleading: `none` is not neutral. Nothing is stripped, so has_circulation MAY ROUTE THROUGH the room. 34 of 52 distinct corpus codes currently have no usage class and are therefore modelled as permeable corridors -- including Dental Surgery, GP Consulting, Minor Surgery, Physiotherapy, Counselling, Records, Sterilisation, six storage rooms, four offices and "Individual Room" (a resident's own room). Consequence for §38: the model OVERSTATES connectivity, since a level can be found connected through rooms that are dead ends in reality. "level N not connected" is therefore rarer than it should be, compounding §38.2 -- the objective already pays x60-85 to delete circulation, and the corridors it deletes are then not missed because store cupboards stand in for them. Adds experiments/usage_map_proposal.yaml: all 52 codes covered (47 assigned, 5 unresolved, 0 missing) -- living 10, kitchen 2, bedroom 15, toilet 7, utility 10, none 3. Nothing reads it yet; it is the review artifact and, once agreed, the migration input. Also verified and recorded (Q2): a dedicated toilet off a bedroom-class room does NOT survive scoring. has_circulation runs its bedroom loop before its toilet loop and the bedroom loop strips bedroom->toilet, so the ensuite is severed -- for real bedrooms too. Existing Urb behaviour, neither caused nor fixed by the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:47:11 +00:00
de1: Dental Surgery
gp1: GP Consulting Room
ms1: Minor Surgery Room
pt1: Physiotherapy Room
qr1: Counselling Room
py: Therapy Room
q1: Quiet Room
mo1: Manager's Office
ao1: Admin Office
em: Staff Office
of: Staff Office
homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
ph1: Pharmacy / Dispensary # ruled: a private room, not public, like an office
homemaker-py-sel: propose usage for all 52 corpus codes; scope was understated Bruno's rulings settle the framing: usage is an ACCESS-REQUIREMENT class, not a room-name category. li1 "Library Corner" and br1 "Staff Room" are living rooms (same access requirements); tr1 "Treatment Room" has a bedroom's requirements (terminal, not a circulation route); la1 "Laundry Room" is utility. Ground-floor external cases (fuel stores, bins) need no class — level: 0 plus adjacency: [o] already expresses that. SCOPE CORRECTION. My "93% pure annotation, 7 entries change" estimate was mechanically true but misleading: `none` is not neutral. Nothing is stripped, so has_circulation MAY ROUTE THROUGH the room. 34 of 52 distinct corpus codes currently have no usage class and are therefore modelled as permeable corridors -- including Dental Surgery, GP Consulting, Minor Surgery, Physiotherapy, Counselling, Records, Sterilisation, six storage rooms, four offices and "Individual Room" (a resident's own room). Consequence for §38: the model OVERSTATES connectivity, since a level can be found connected through rooms that are dead ends in reality. "level N not connected" is therefore rarer than it should be, compounding §38.2 -- the objective already pays x60-85 to delete circulation, and the corridors it deletes are then not missed because store cupboards stand in for them. Adds experiments/usage_map_proposal.yaml: all 52 codes covered (47 assigned, 5 unresolved, 0 missing) -- living 10, kitchen 2, bedroom 15, toilet 7, utility 10, none 3. Nothing reads it yet; it is the review artifact and, once agreed, the migration input. Also verified and recorded (Q2): a dedicated toilet off a bedroom-class room does NOT survive scoring. has_circulation runs its bedroom loop before its toilet loop and the bedroom loop strips bedroom->toilet, so the ensuite is severed -- for real bedrooms too. Existing Urb behaviour, neither caused nor fixed by the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:47:11 +00:00
toilet:
t: Bathroom
t1: Ensuite Bathroom
t2: Guest Bathroom
t3: Ground Floor WC
t9: Public WC
t10: Staff WC
tt: Upper Bathroom
utility: # terminal, never a circulation route
homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
la1: Laundry Room # ruled: utility, not a circulation route
homemaker-py-sel: propose usage for all 52 corpus codes; scope was understated Bruno's rulings settle the framing: usage is an ACCESS-REQUIREMENT class, not a room-name category. li1 "Library Corner" and br1 "Staff Room" are living rooms (same access requirements); tr1 "Treatment Room" has a bedroom's requirements (terminal, not a circulation route); la1 "Laundry Room" is utility. Ground-floor external cases (fuel stores, bins) need no class — level: 0 plus adjacency: [o] already expresses that. SCOPE CORRECTION. My "93% pure annotation, 7 entries change" estimate was mechanically true but misleading: `none` is not neutral. Nothing is stripped, so has_circulation MAY ROUTE THROUGH the room. 34 of 52 distinct corpus codes currently have no usage class and are therefore modelled as permeable corridors -- including Dental Surgery, GP Consulting, Minor Surgery, Physiotherapy, Counselling, Records, Sterilisation, six storage rooms, four offices and "Individual Room" (a resident's own room). Consequence for §38: the model OVERSTATES connectivity, since a level can be found connected through rooms that are dead ends in reality. "level N not connected" is therefore rarer than it should be, compounding §38.2 -- the objective already pays x60-85 to delete circulation, and the corridors it deletes are then not missed because store cupboards stand in for them. Adds experiments/usage_map_proposal.yaml: all 52 codes covered (47 assigned, 5 unresolved, 0 missing) -- living 10, kitchen 2, bedroom 15, toilet 7, utility 10, none 3. Nothing reads it yet; it is the review artifact and, once agreed, the migration input. Also verified and recorded (Q2): a dedicated toilet off a bedroom-class room does NOT survive scoring. has_circulation runs its bedroom loop before its toilet loop and the bedroom loop strips bedroom->toilet, so the ensuite is severed -- for real bedrooms too. Existing Urb behaviour, neither caused nor fixed by the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:47:11 +00:00
ut1: Utilities Closet
me1: Mechanical/Electrical Room # "Plant / Mechanical Room" in health-centre
dp1: General Storage
st1: Ground Floor Storage
st2: First Floor Storage
ur1: Ground Floor Storage
ur2: First Floor Storage
ur3: Second Floor Storage
re1: Records Room
homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
zt1: Sterilisation Room # ruled: utility — a room for sterilising tools and machinery
homemaker-py-sel: propose usage for all 52 corpus codes; scope was understated Bruno's rulings settle the framing: usage is an ACCESS-REQUIREMENT class, not a room-name category. li1 "Library Corner" and br1 "Staff Room" are living rooms (same access requirements); tr1 "Treatment Room" has a bedroom's requirements (terminal, not a circulation route); la1 "Laundry Room" is utility. Ground-floor external cases (fuel stores, bins) need no class — level: 0 plus adjacency: [o] already expresses that. SCOPE CORRECTION. My "93% pure annotation, 7 entries change" estimate was mechanically true but misleading: `none` is not neutral. Nothing is stripped, so has_circulation MAY ROUTE THROUGH the room. 34 of 52 distinct corpus codes currently have no usage class and are therefore modelled as permeable corridors -- including Dental Surgery, GP Consulting, Minor Surgery, Physiotherapy, Counselling, Records, Sterilisation, six storage rooms, four offices and "Individual Room" (a resident's own room). Consequence for §38: the model OVERSTATES connectivity, since a level can be found connected through rooms that are dead ends in reality. "level N not connected" is therefore rarer than it should be, compounding §38.2 -- the objective already pays x60-85 to delete circulation, and the corridors it deletes are then not missed because store cupboards stand in for them. Adds experiments/usage_map_proposal.yaml: all 52 codes covered (47 assigned, 5 unresolved, 0 missing) -- living 10, kitchen 2, bedroom 15, toilet 7, utility 10, none 3. Nothing reads it yet; it is the review artifact and, once agreed, the migration input. Also verified and recorded (Q2): a dedicated toilet off a bedroom-class room does NOT survive scoring. has_circulation runs its bedroom loop before its toilet loop and the bedroom loop strips bedroom->toilet, so the ensuite is severed -- for real bedrooms too. Existing Urb behaviour, neither caused nor fixed by the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:47:11 +00:00
none: # genuinely part of the circulation system
ef1: Entrance Foyer
homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
rc1: Reception # "Reception Office" in maple-court — see DESIGN NOTE 4
homemaker-py-sel: propose usage for all 52 corpus codes; scope was understated Bruno's rulings settle the framing: usage is an ACCESS-REQUIREMENT class, not a room-name category. li1 "Library Corner" and br1 "Staff Room" are living rooms (same access requirements); tr1 "Treatment Room" has a bedroom's requirements (terminal, not a circulation route); la1 "Laundry Room" is utility. Ground-floor external cases (fuel stores, bins) need no class — level: 0 plus adjacency: [o] already expresses that. SCOPE CORRECTION. My "93% pure annotation, 7 entries change" estimate was mechanically true but misleading: `none` is not neutral. Nothing is stripped, so has_circulation MAY ROUTE THROUGH the room. 34 of 52 distinct corpus codes currently have no usage class and are therefore modelled as permeable corridors -- including Dental Surgery, GP Consulting, Minor Surgery, Physiotherapy, Counselling, Records, Sterilisation, six storage rooms, four offices and "Individual Room" (a resident's own room). Consequence for §38: the model OVERSTATES connectivity, since a level can be found connected through rooms that are dead ends in reality. "level N not connected" is therefore rarer than it should be, compounding §38.2 -- the objective already pays x60-85 to delete circulation, and the corridors it deletes are then not missed because store cupboards stand in for them. Adds experiments/usage_map_proposal.yaml: all 52 codes covered (47 assigned, 5 unresolved, 0 missing) -- living 10, kitchen 2, bedroom 15, toilet 7, utility 10, none 3. Nothing reads it yet; it is the review artifact and, once agreed, the migration input. Also verified and recorded (Q2): a dedicated toilet off a bedroom-class room does NOT survive scoring. has_circulation runs its bedroom loop before its toilet loop and the bedroom loop strips bedroom->toilet, so the ensuite is severed -- for real bedrooms too. Existing Urb behaviour, neither caused nor fixed by the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:47:11 +00:00
wa1: Waiting Room
# --------------------------------------------------------------------------- #
homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
# DESIGN NOTES
homemaker-py-sel: propose usage for all 52 corpus codes; scope was understated Bruno's rulings settle the framing: usage is an ACCESS-REQUIREMENT class, not a room-name category. li1 "Library Corner" and br1 "Staff Room" are living rooms (same access requirements); tr1 "Treatment Room" has a bedroom's requirements (terminal, not a circulation route); la1 "Laundry Room" is utility. Ground-floor external cases (fuel stores, bins) need no class — level: 0 plus adjacency: [o] already expresses that. SCOPE CORRECTION. My "93% pure annotation, 7 entries change" estimate was mechanically true but misleading: `none` is not neutral. Nothing is stripped, so has_circulation MAY ROUTE THROUGH the room. 34 of 52 distinct corpus codes currently have no usage class and are therefore modelled as permeable corridors -- including Dental Surgery, GP Consulting, Minor Surgery, Physiotherapy, Counselling, Records, Sterilisation, six storage rooms, four offices and "Individual Room" (a resident's own room). Consequence for §38: the model OVERSTATES connectivity, since a level can be found connected through rooms that are dead ends in reality. "level N not connected" is therefore rarer than it should be, compounding §38.2 -- the objective already pays x60-85 to delete circulation, and the corridors it deletes are then not missed because store cupboards stand in for them. Adds experiments/usage_map_proposal.yaml: all 52 codes covered (47 assigned, 5 unresolved, 0 missing) -- living 10, kitchen 2, bedroom 15, toilet 7, utility 10, none 3. Nothing reads it yet; it is the review artifact and, once agreed, the migration input. Also verified and recorded (Q2): a dedicated toilet off a bedroom-class room does NOT survive scoring. has_circulation runs its bedroom loop before its toilet loop and the bedroom loop strips bedroom->toilet, so the ensuite is severed -- for real bedrooms too. Existing Urb behaviour, neither caused nor fixed by the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:47:11 +00:00
# --------------------------------------------------------------------------- #
#
homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
# 1. `utility` IS a distinct value, not an alias for `bedroom`.
# Ruled: "a utility may have similar requirements to a bedroom, and it may be
# useful during evolution superposition to treat them as interchangeable
# before wave function collapse, but they are very different uses."
# So it maps onto bedroom's edge-stripping today (identical access
# requirements) while staying separately declared, which gives two things:
# the config reads truthfully for a bin store, and `usage` becomes a natural
# axis for `programme.derive_interchange_classes` (§13/§26, homemaker-py-9o5)
# — bedroom-class and utility-class leaves could be declared interchangeable
# DURING search and collapse to their real use at scoring time, which is
# exactly the superposition relaxation that machinery already implements.
#
# 2. Adjacency value survives the connectivity stripping — VERIFIED, no bug.
# Ruled: "a toilet adjacent to a bedroom or treatment room is a positive even
# if there is no door, see How Buildings Learn by Stewart Brand, at some point
# there may be a need to knock it through."
# `fitness._evaluate_full` runs `check_adjacency` against `graph_base_pre`,
# the UNFILTERED graph, so a declared `adjacency:` requirement is satisfied by
# a neighbouring room regardless of what `has_circulation` later strips. The
# stripping only denies ROUTING (you cannot walk through a bedroom to reach
# the loo), which is correct. Brand's adaptability positive is therefore
# already expressible.
#
# BUT it is only ever scored where a programme DECLARES it, and three of the
# four real programmes do not:
# programme-house t1 -> adjacency: [b1] declared
# harbor-house t (Bathroom, count 6) vs r / n (sleeping) NOT declared
# maple-court t, tt vs r / n NOT declared
# health-centre t9 / t10 vs tr1 (Treatment Room) NOT declared
# Adding those declarations is programme authoring, independent of this bead
# (filed as homemaker-py-3qj), and would let the search earn the adaptability credit it
# currently cannot.
#
# 3. `ws1` Workshop Space is building-specific.
# Ruled: "could be a communal craft room, a living space, or it could be a
# maintenance area, a utility room, it depends on the building."
# Both corpus programmes carrying it (harbor-house, maple-court) are communal
# living facilities, so `living` is the reading here — but this is exactly the
# case that argues for per-programme declaration rather than a global map.
# Flip it to `utility` in either file if the intent was a maintenance shop.
#
# 4. Three codes mean different rooms in different programmes: `ph1`
# (Pharmacy/Dispensary in health-centre, Clinic Room in maple-court), `me1`
# (Mechanical/Electrical vs Plant/Mechanical), `rc1` (Reception vs Reception
# Office). Usage is declared per `patterns.config`, so they may legitimately
# differ — worth confirming it is intended rather than copy-paste drift.
# NB the assignments above are listed per CODE for review convenience; the
# migration writes them per FILE, so a code can differ between programmes.
homemaker-py-sel: propose usage for all 52 corpus codes; scope was understated Bruno's rulings settle the framing: usage is an ACCESS-REQUIREMENT class, not a room-name category. li1 "Library Corner" and br1 "Staff Room" are living rooms (same access requirements); tr1 "Treatment Room" has a bedroom's requirements (terminal, not a circulation route); la1 "Laundry Room" is utility. Ground-floor external cases (fuel stores, bins) need no class — level: 0 plus adjacency: [o] already expresses that. SCOPE CORRECTION. My "93% pure annotation, 7 entries change" estimate was mechanically true but misleading: `none` is not neutral. Nothing is stripped, so has_circulation MAY ROUTE THROUGH the room. 34 of 52 distinct corpus codes currently have no usage class and are therefore modelled as permeable corridors -- including Dental Surgery, GP Consulting, Minor Surgery, Physiotherapy, Counselling, Records, Sterilisation, six storage rooms, four offices and "Individual Room" (a resident's own room). Consequence for §38: the model OVERSTATES connectivity, since a level can be found connected through rooms that are dead ends in reality. "level N not connected" is therefore rarer than it should be, compounding §38.2 -- the objective already pays x60-85 to delete circulation, and the corridors it deletes are then not missed because store cupboards stand in for them. Adds experiments/usage_map_proposal.yaml: all 52 codes covered (47 assigned, 5 unresolved, 0 missing) -- living 10, kitchen 2, bedroom 15, toilet 7, utility 10, none 3. Nothing reads it yet; it is the review artifact and, once agreed, the migration input. Also verified and recorded (Q2): a dedicated toilet off a bedroom-class room does NOT survive scoring. has_circulation runs its bedroom loop before its toilet loop and the bedroom loop strips bedroom->toilet, so the ensuite is severed -- for real bedrooms too. Existing Urb behaviour, neither caused nor fixed by the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:47:11 +00:00
#
homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
# 5. Vocabulary: controlled but not closed.
# Ruled: "programmes are building specific, so it would be nice to have a
# controlled vocabulary, but not entirely necessary."
# So the earlier "closed enum, unknown value is an error" recommendation is
# withdrawn. Proposed instead: the six names above are the known vocabulary
# and drive engine behaviour directly; a programme may coin its own name
# (`usage: craft`) provided it binds it to a known class in the same file:
homemaker-py-sel: propose usage for all 52 corpus codes; scope was understated Bruno's rulings settle the framing: usage is an ACCESS-REQUIREMENT class, not a room-name category. li1 "Library Corner" and br1 "Staff Room" are living rooms (same access requirements); tr1 "Treatment Room" has a bedroom's requirements (terminal, not a circulation route); la1 "Laundry Room" is utility. Ground-floor external cases (fuel stores, bins) need no class — level: 0 plus adjacency: [o] already expresses that. SCOPE CORRECTION. My "93% pure annotation, 7 entries change" estimate was mechanically true but misleading: `none` is not neutral. Nothing is stripped, so has_circulation MAY ROUTE THROUGH the room. 34 of 52 distinct corpus codes currently have no usage class and are therefore modelled as permeable corridors -- including Dental Surgery, GP Consulting, Minor Surgery, Physiotherapy, Counselling, Records, Sterilisation, six storage rooms, four offices and "Individual Room" (a resident's own room). Consequence for §38: the model OVERSTATES connectivity, since a level can be found connected through rooms that are dead ends in reality. "level N not connected" is therefore rarer than it should be, compounding §38.2 -- the objective already pays x60-85 to delete circulation, and the corridors it deletes are then not missed because store cupboards stand in for them. Adds experiments/usage_map_proposal.yaml: all 52 codes covered (47 assigned, 5 unresolved, 0 missing) -- living 10, kitchen 2, bedroom 15, toilet 7, utility 10, none 3. Nothing reads it yet; it is the review artifact and, once agreed, the migration input. Also verified and recorded (Q2): a dedicated toilet off a bedroom-class room does NOT survive scoring. has_circulation runs its bedroom loop before its toilet loop and the bedroom loop strips bedroom->toilet, so the ensuite is severed -- for real bedrooms too. Existing Urb behaviour, neither caused nor fixed by the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:47:11 +00:00
#
homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
# usage_classes:
# craft: living
# bin_store: utility
homemaker-py-sel: propose usage for all 52 corpus codes; scope was understated Bruno's rulings settle the framing: usage is an ACCESS-REQUIREMENT class, not a room-name category. li1 "Library Corner" and br1 "Staff Room" are living rooms (same access requirements); tr1 "Treatment Room" has a bedroom's requirements (terminal, not a circulation route); la1 "Laundry Room" is utility. Ground-floor external cases (fuel stores, bins) need no class — level: 0 plus adjacency: [o] already expresses that. SCOPE CORRECTION. My "93% pure annotation, 7 entries change" estimate was mechanically true but misleading: `none` is not neutral. Nothing is stripped, so has_circulation MAY ROUTE THROUGH the room. 34 of 52 distinct corpus codes currently have no usage class and are therefore modelled as permeable corridors -- including Dental Surgery, GP Consulting, Minor Surgery, Physiotherapy, Counselling, Records, Sterilisation, six storage rooms, four offices and "Individual Room" (a resident's own room). Consequence for §38: the model OVERSTATES connectivity, since a level can be found connected through rooms that are dead ends in reality. "level N not connected" is therefore rarer than it should be, compounding §38.2 -- the objective already pays x60-85 to delete circulation, and the corridors it deletes are then not missed because store cupboards stand in for them. Adds experiments/usage_map_proposal.yaml: all 52 codes covered (47 assigned, 5 unresolved, 0 missing) -- living 10, kitchen 2, bedroom 15, toilet 7, utility 10, none 3. Nothing reads it yet; it is the review artifact and, once agreed, the migration input. Also verified and recorded (Q2): a dedicated toilet off a bedroom-class room does NOT survive scoring. has_circulation runs its bedroom loop before its toilet loop and the bedroom loop strips bedroom->toilet, so the ensuite is severed -- for real bedrooms too. Existing Urb behaviour, neither caused nor fixed by the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 10:47:11 +00:00
#
homemaker-py-sel: all 52 corpus codes assigned; utility distinct; open vocabulary Rulings settle every previously-unresolved code: zt1 Sterilisation -> utility; ph1 Pharmacy -> bedroom (a private room, not public, like an office); n "Neighborhood" -> bedroom (a communal sleeping area, much like a dormitory); gh1 Greenhouse -> living (grows plants, but a living area like a conservatory); ws1 Workshop -> living conditionally, since it is building-specific (communal craft room vs maintenance area) and both corpus programmes carrying it are communal living facilities. Final: living 12, bedroom 17, utility 11, toilet 7, kitchen 2, none 3. Zero unresolved, zero missing. DESIGN 1 — `utility` is a distinct value, not an alias for `bedroom`. Same edge-stripping today (identical access requirements) but separately declared, because they are very different uses AND because it gives programme.derive_interchange_classes (§13/§26, homemaker-py-9o5) a natural axis: bedroom- and utility-class leaves could be interchangeable DURING search and collapse to their real use at scoring time, which is exactly the superposition relaxation that machinery already implements. DESIGN 2 — vocabulary controlled but NOT closed. The earlier "closed enum, unknown value errors" recommendation is withdrawn. The six known names drive behaviour; a programme may coin its own (`usage: craft`) provided it binds it in the same file via `usage_classes: {craft: living}`. An unbound name is a load error, so naming stays building-specific without an unrecognised usage ever falling through to a silent default. VERIFIED — the Brand adjacency point is not an engine bug. check_adjacency runs against graph_base_pre, the UNFILTERED graph, so a declared adjacency is satisfied by a neighbouring room regardless of what has_circulation strips; the stripping only denies routing, which is correct. "A toilet adjacent to a bedroom is a positive even if there is no door" is therefore already expressible -- but only where DECLARED, and just one corpus programme declares it (programme-house t1 -> [b1]). harbor-house, maple-court and health-centre leave that adaptability credit on the table. Filed separately; it is programme authoring and can land before or after the usage key. No src changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-08-26 12:34:03 +00:00
# An unbound name is a load error. That keeps naming free and building-
# specific while never letting an unrecognised usage fall through to a silent
# default — the failure mode §39 exists to remove.