You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
M27: fittings, props, and a hallway that is a place rather than a stroke
Presentation only again -- model.py, map.py and ledger.py untouched.
The corridor was a wide dark stroke through the room centres: a line on a
diagram rather than somewhere you could walk. The runs of floor that are
genuinely outside a room are now computed from the gap between two consecutive
shells and drawn as sections -- walls down both sides, deck plating, a dashed
guide down the middle and a light overhead -- so they line up with the doorways
because they are measured from the same gap those were cut for. Inside a room
the walk continues as a band of darker plating across the floor, and each
threshold gets hazard chevrons.
Rooms went from seven objects to twelve or fourteen: a fittings band against the
top wall with vents, conduit runs and an illuminated sign over the door; a third
row of furniture; and loose props tucked into the margins the patrol does not
use -- chairs, barrels, a cart, a coil of cables, a floor hatch. Eleven new
fixture kinds. Each room carries its number as a large faint floor stencil, the
same index its callout card shows.
The ten humanoid builds gained arms: shoulders, sleeves in the room's colour and
hands, which is what was missing when a figure was holding a tablet or a wrench
with nothing to hold it with.
Two things worth recording:
* The overhead light strips were positioned from the top of the floor and the
new wall fittings from the content origin, and at the room's height those two
coincide -- the lights were being drawn inside the vents. Neither was wrong on
its own. The lights now run across the room where a ceiling light would be.
* A patch script that asserts its way down a file and writes at the end leaves
nothing written when an assertion fires, while the earlier substitutions have
already succeeded against the in-memory copy. The run reads as partial and is
in fact a no-op, which is the safer failure and the more confusing one.
572 passed, mypy --strict clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: BUILD_PLAN.md
+47-1Lines changed: 47 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@
4
4
5
5
This is the executable plan derived from [`docs/`](docs/). The design documents say *what* to build and *why*; this says *in what order*, *with what acceptance test*, and *what changes because of the machine we're actually on*.
6
6
7
-
**Status:** M0–M26 complete; v5 and v6 landed, v7 registered and not yet run. **V6's result does not adjudicate what v6 registered** — its treatment arm did not implement the mechanism it names; see M23. The live path is wired but unspent (mock-driven throughout; the first live run awaits an API key). M12's code-generation half is blocked on both a key and Docker. Nothing below is claimed as done until its acceptance criteria are green in CI.
7
+
**Status:** M0–M27 complete; v5 and v6 landed, v7 registered and not yet run. **V6's result does not adjudicate what v6 registered** — its treatment arm did not implement the mechanism it names; see M23. The live path is wired but unspent (mock-driven throughout; the first live run awaits an API key). M12's code-generation half is blocked on both a key and Docker. Nothing below is claimed as done until its acceptance criteria are green in CI.
8
8
9
9
---
10
10
@@ -1010,6 +1010,52 @@ state into the next interaction. It is measured from the start of each press now
1010
1010
1011
1011
---
1012
1012
1013
+
### M27 · Fittings, props, and a hallway that is a place ✅
1014
+
Presentation only again — `model.py`, `map.py` and `ledger.py` untouched.
1015
+
1016
+
**The corridor was a stroke through the room centres.** Wide, dark, and a line on a diagram
1017
+
rather than somewhere you could walk. The runs of floor that are genuinely *outside* a room are
1018
+
now computed from the gap between two consecutive shells and drawn as sections: walls down both
1019
+
sides, deck plating, a dashed guide down the middle and a light overhead. They line up with the
1020
+
doorways because they are measured from the same gap the doorways were cut for. Inside a room the
1021
+
walk continues as a band of darker plating across its floor, so the route reads as one run rather
1022
+
than as rooms with a line between them. Each threshold gets hazard chevrons.
1023
+
1024
+
**Rooms went from seven objects to twelve.** A fittings band against the top wall — vents, conduit
1025
+
runs with a pilot light, an illuminated sign over the door — a third row of furniture, and loose
1026
+
props tucked into the margins the patrol does not use: chairs, barrels, a cart, a coil of cables,
1027
+
a floor hatch. Eleven new fixture kinds. Each room also carries its number as a large faint floor
1028
+
stencil, which is the same index its callout card shows.
1029
+
1030
+
**The actors have arms.** Ten builds gained shoulders, sleeves in the room's colour, and hands —
1031
+
which is what was missing when a figure was holding a tablet or a wrench with nothing to hold it
1032
+
with.
1033
+
1034
+
#### What building it revealed was wrong
1035
+
1036
+
**1. Two bands were computed from different origins and landed on each other.** The overhead
1037
+
light strips were positioned from the top of the floor and the new wall fittings from the content
1038
+
origin, and at the room's height those two happen to coincide — the lights were drawn inside the
1039
+
vents. Neither was wrong on its own. The lights now run across the room where a ceiling light
1040
+
would be, rather than along the wall where the fittings are.
1041
+
1042
+
**2. A patch script that asserts its way down a file leaves the file half-written.** The
1043
+
substitution for the floor stencil did not match, the assertion fired, and because the write is
1044
+
at the end nothing at all was applied — but the earlier substitutions had already succeeded
1045
+
against the in-memory copy, so the run *looked* partial and was in fact a no-op. Worth recording
1046
+
because the failure reads as the opposite of what it is: an aborted all-or-nothing patch is
1047
+
safer than a partial one, and it is easy to spend a while looking for changes that were never
1048
+
written.
1049
+
1050
+
**Acceptance**
1051
+
- Every test from M22 through M26 still passes.
1052
+
- A room holds at least five drawn fixtures, all inside its floor — now twelve to fourteen.
1053
+
Tested.
1054
+
- No two labels overlap, including the new floor stencils, at any zoom. Tested.
1055
+
- Still one self-contained file; still refuses to build on input that does not verify.
1056
+
1057
+
---
1058
+
1013
1059
## 2. Working agreement
1014
1060
1015
1061
-**`main` is always green.** Every milestone lands as a PR with CI passing on Linux and Windows.
0 commit comments