homemaker-layout/experiments/usage_map_proposal.yaml
Claude 6bed7cc535
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

122 lines
5.3 KiB
YAML

# Proposed `usage:` assignments for every corpus room code (homemaker-py-sel).
#
# FOR REVIEW — nothing reads this yet. Once agreed it becomes the input to the
# migration that writes `usage:` into each `patterns.config`.
#
# Usage is an ACCESS-REQUIREMENT class, not a room-name category (Bruno's
# framing: "library corner and staff room are living rooms as they have the same
# access requirements"). What each class actually does, in `graph.has_circulation`:
#
# 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.
# utility NEW. Terminal, not a route — the same requirement as `bedroom`.
# See OPEN QUESTION 1 below.
# 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.
#
# The `none` semantics are the reason this is a bigger change than it looks:
# 34 of 52 corpus codes currently get no class, so a Dental Surgery, a Records
# Room and a Utilities Closet can all serve as corridors today.
living:
cr1: Common Room with Fireplace
da1: Dining Area
en1: TV / Media Room
gy1: Exercise Room
l1: Living/Dining/Kitchen
li1: Library Corner # confirmed: same access requirements as a living room
lo1: Lounge
lr1: Common Living Room
br1: Staff Room # confirmed: same access requirements as a living room
m: Meeting Room
kitchen:
k1: Kitchen
kt1: Staff Kitchenette
bedroom: # terminal private room, entered from circulation only
b1: Master Bedroom
b2: Second Bedroom
r: Individual Room
tr1: Treatment Room # confirmed: access requirements of a bedroom
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
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
la1: Laundry Room # confirmed: utility, not a circulation route
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
none: # genuinely part of the circulation system
ef1: Entrance Foyer
rc1: Reception # "Reception Office" in maple-court — see Q3
wa1: Waiting Room
# --------------------------------------------------------------------------- #
# UNRESOLVED — please rule on these
# --------------------------------------------------------------------------- #
unresolved:
ws1: Workshop Space # living (shared activity) or utility (terminal)?
zt1: Sterilisation Room # utility, or bedroom-class off a surgery?
ph1: Pharmacy / Dispensary # health-centre; bedroom-class? and see Q3
n: Neighborhood # unclear what this models at all
gh1: Greenhouse # utility, or outside-ish?
# --------------------------------------------------------------------------- #
# OPEN QUESTIONS
# --------------------------------------------------------------------------- #
#
# Q1 Does `utility` need behaviour distinct from `bedroom`? Both are "terminal,
# not a route", and the engine has no term today that would tell them apart.
# Declaring it as a distinct name that maps onto bedroom's edge-stripping
# costs nothing and makes the config read truthfully, leaving somewhere to
# hang a real difference later. The alternative is to drop it and write
# `bedroom`, which reads badly for a bin store.
#
# The "ground floor external access" cases (fuel stores, bins) do NOT need a
# class: `level: 0` plus `adjacency: [o]` already expresses that, and it is
# per-room programme data rather than an access class.
#
# Q2 A dedicated toilet off a bedroom-class room does NOT survive scoring.
# Verified: `has_circulation` runs its bedroom loop before its toilet loop,
# and the bedroom loop removes bedroom->toilet edges, so the ensuite is
# severed — for real bedrooms too, not just for treatment rooms. This is
# existing Urb behaviour that the usage key neither causes nor fixes; filed
# separately if it should change.
#
# Q3 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 can differ — but
# it is worth confirming that is intended rather than a copy-paste drift.