Commit Graph
1350 Commits
Author SHA1 Message Date
claude[bot] 52c74301f9 docs: review document for #290
Validate / docs (push) Successful in 28s
Validate / process-workflow-sync (push) Successful in 36s
Validate / provenance (push) Successful in 40s
Validate / process-gate (push) Failing after 40s
Validate / changes (push) Successful in 37s
Validate / hacs (push) Skipped
Validate / hassfest (push) Skipped
Validate / frontend (push) Skipped
Validate / reuse (push) Successful in 47s
Validate / smoke (2) (push) Skipped
Validate / smoke (3) (push) Skipped
Validate / smoke_done (push) Skipped
Validate / golden (push) Skipped
Validate / performance_smoke (push) Skipped
Validate / backend (push) Skipped
Validate / smoke (1) (push) Skipped
Issue: #290
User-Visible: no
2026-08-24 14:11:02 +00:00
Sergey Matyunin 01512081db test: enforce shared near-axis threshold source
Issue: #290
User-Visible: no
2026-08-24 17:02:48 +03:00
claude[bot] 1245beaaf6 docs: review document for #290
Issue: #290
User-Visible: no
2026-08-24 14:01:23 +00:00
Sergey Matyunin d33ae88da4 docs: accept screenshots after near-axis rebase
Issue: #290
User-Visible: no
2026-08-24 16:33:20 +03:00
claude[bot]andSergey Matyunin f6cb957bba docs: review document for #290
Issue: #290
User-Visible: no
2026-08-24 16:30:43 +03:00
Sergey Matyunin f44df5d05d test: reconcile near-axis resize proof
Issue: #290
User-Visible: no
2026-08-24 16:30:25 +03:00
claude[bot]andSergey Matyunin 6983f2b088 docs: review document for #290
Issue: #290
User-Visible: no
2026-08-24 16:30:25 +03:00
Sergey Matyunin f6cf2c93ae fix: scope near-axis resize validation
Keep unrelated pre-existing near-axis edges from disabling exact Resize handles, make tracked single-space fixtures visible to the invariants CLI, and add the three missing mutation gates plus real-plan coverage.

Issue: #290
User-Visible: no
2026-08-24 16:30:25 +03:00
Sergey Matyunin edf8b068ed fix: straighten near-axis wall geometry
Issue: #290
User-Visible: yes
2026-08-24 16:30:11 +03:00
claude[bot]andSergey Matyunin 6551c5d53d docs: review document for #290
Issue: #290
User-Visible: no
2026-08-24 16:29:51 +03:00
Sergey Matyunin e102f34156 docs: add real-plan proof and rollback
Issue: #290
User-Visible: no
2026-08-24 16:29:51 +03:00
claude[bot]andSergey Matyunin 7fd9ca0f6a docs: review document for #290
Issue: #290
User-Visible: no
2026-08-24 16:29:50 +03:00
Sergey Matyunin 6e1007a363 docs: specify near-axis authoring and repair
Issue: #290
User-Visible: no
2026-08-24 16:29:50 +03:00
claude[bot] 10fa0dc7fb docs: review document for #288
Validate / process-gate (push) Failing after 44s
Validate / changes (push) Successful in 29s
Validate / hacs (push) Skipped
Validate / hassfest (push) Skipped
Validate / frontend (push) Skipped
Validate / reuse (push) Successful in 1m0s
Validate / smoke_done (push) Skipped
Validate / backend (push) Skipped
Validate / smoke (1) (push) Skipped
Validate / smoke (2) (push) Skipped
Validate / smoke (3) (push) Skipped
Validate / golden (push) Skipped
Validate / performance_smoke (push) Skipped
Validate / docs (push) Failing after 39s
Validate / process-workflow-sync (push) Successful in 38s
Validate / provenance (push) Successful in 43s
Issue: #288
User-Visible: no
2026-08-24 13:14:55 +00:00
Sergey Matyunin f2c0721a9d docs: recapture screenshots after corridor integration
Issue: #288
User-Visible: no
2026-08-24 16:02:03 +03:00
claude[bot]andSergey Matyunin e8a4db7972 docs: review document for #288
Issue: #288
User-Visible: no
2026-08-24 15:57:49 +03:00
Sergey Matyunin 406e46ecb1 docs: recapture screenshots after fixture repair
Issue: #288
User-Visible: no
2026-08-24 15:57:49 +03:00
claude[bot]andSergey Matyunin 4201644d33 docs: review document for #288
Issue: #288
User-Visible: no
2026-08-24 15:57:25 +03:00
Sergey Matyunin 17086d3cf2 fix: preserve walls beyond short junction rays
Issue: #288
User-Visible: yes
2026-08-24 15:57:25 +03:00
claude[bot]andSergey Matyunin 74fdf2182c docs: review document for #288
Issue: #288
User-Visible: no
2026-08-24 15:56:48 +03:00
Sergey Matyunin 2d8ade3b2b docs: add risks and rollback to junction spec
Issue: #288
User-Visible: no
2026-08-24 15:56:48 +03:00
claude[bot]andSergey Matyunin 6f67d53665 docs: review document for #288
Issue: #288
User-Visible: no
2026-08-24 15:56:48 +03:00
Sergey Matyunin e333f0b2f1 docs: specify bounded multiwall corridor
Issue: #288
User-Visible: no
2026-08-24 15:56:48 +03:00
claude[bot] f472af88a3 docs: review document for #289
Validate / smoke (1) (push) Skipped
Validate / smoke (2) (push) Skipped
Validate / smoke (3) (push) Skipped
Validate / smoke_done (push) Skipped
Validate / golden (push) Skipped
Validate / performance_smoke (push) Skipped
Validate / backend (push) Skipped
Validate / docs (push) Failing after 23s
Validate / process-workflow-sync (push) Successful in 37s
Validate / provenance (push) Successful in 56s
Validate / process-gate (push) Failing after 57s
Validate / changes (push) Successful in 44s
Validate / hacs (push) Skipped
Validate / hassfest (push) Skipped
Validate / frontend (push) Skipped
Validate / reuse (push) Successful in 36s
Issue: #289
User-Visible: no
2026-08-24 12:50:45 +00:00
Sergey Matyunin a7618151cc test: accept safe resize baselines
Accepted the complete Linux artifact after visual review. Only the dark and light safe-resize handle views change intentionally; all other passing scenarios keep their prior bytes.

Issue: #289
User-Visible: no
Release: v1.67.0-beta.10
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/32726613816
2026-08-24 15:31:26 +03:00
Sergey Matyunin 10ca913fad test: keep resize smokes self-contained
Issue: #289
User-Visible: no
2026-08-24 15:30:23 +03:00
claude[bot]andSergey Matyunin 849b3e5f76 docs: review document for #289
Issue: #289
User-Visible: no
2026-08-24 15:19:47 +03:00
Sergey Matyunin bca3bfd52c fix: prevent mixed-role walls during resize
Issue: #289
User-Visible: yes
2026-08-24 15:19:40 +03:00
claude[bot]andSergey Matyunin 2ad20dca2b docs: review document for #289
Issue: #289
User-Visible: no
2026-08-24 15:19:20 +03:00
Sergey Matyunin 0bca6dfb14 docs: add evidence and rollback to resize spec
Issue: #289
User-Visible: no
2026-08-24 15:19:20 +03:00
claude[bot]andSergey Matyunin 8877e8c6d6 docs: review document for #289
Issue: #289
User-Visible: no
2026-08-24 15:19:20 +03:00
Sergey Matyunin 6a4e665d33 docs: specify mixed-role resize guard
Issue: #289
User-Visible: no
2026-08-24 15:19:20 +03:00
Sergey Matyunin 5272287671 test: accept fixture wall key baselines
Validate / docs (push) Failing after 32s
Validate / process-workflow-sync (push) Successful in 32s
Validate / frontend (push) Successful in 8m9s
Validate / provenance (push) Successful in 47s
Validate / process-gate (push) Successful in 40s
Validate / changes (push) Successful in 34s
Validate / hacs (push) Skipped
Validate / hassfest (push) Skipped
Validate / reuse (push) Successful in 48s
Validate / smoke (1) (push) Failing after 20m38s
Validate / backend (push) Skipped
Validate / smoke (3) (push) Failing after 22m20s
Validate / smoke (2) (push) Failing after 22m32s
Validate / smoke_done (push) Skipped
Validate / golden (push) Failing after 22m59s
Validate / performance_smoke (push) Failing after 19m3s
Accepted the complete Linux artifact after visual review. Only the dark and light isometric geometry views change intentionally; 106 passing scenarios keep their prior bytes.

Issue: #260
User-Visible: no
Release: v1.67.0-beta.10
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/32725286757
2026-08-24 15:13:41 +03:00
ClaudeandSergey Matyunin c14dcecb98 test(fixtures): write the real wall key in one place
Validate / smoke (3) (push) Failing after 18m12s
Validate / smoke_done (push) Skipped
Validate / golden (push) Failing after 20m2s
Validate / performance_smoke (push) Failing after 25m25s
Validate / docs (push) Failing after 25s
Validate / process-workflow-sync (push) Successful in 32s
Validate / provenance (push) Successful in 42s
Validate / process-gate (push) Failing after 41s
Validate / changes (push) Successful in 32s
Validate / hacs (push) Skipped
Validate / hassfest (push) Skipped
Validate / reuse (push) Successful in 46s
Validate / backend (push) Skipped
Validate / frontend (push) Successful in 9m15s
Validate / smoke (1) (push) Failing after 18m47s
Validate / smoke (2) (push) Failing after 19m9s
Refresh the shared wall-key fixture contract and keep generated frontend bundles synchronized with the fingerprinted geometry fixtures.

Issue: #260
User-Visible: no
2026-08-24 15:06:06 +03:00
Claude 523190d8f4 test: one thickness record must not describe two wall roles
Validate / process-workflow-sync (push) Successful in 35s
Validate / provenance (push) Successful in 46s
Validate / changes (push) Successful in 31s
Validate / process-gate (push) Failing after 45s
Validate / reuse (push) Successful in 46s
Validate / hacs (push) Failing after 16s
Validate / hassfest (push) Failing after 18s
Validate / frontend (push) Successful in 9m19s
Validate / backend (push) Failing after 9m31s
Validate / smoke (1) (push) Failing after 17m56s
Validate / smoke (3) (push) Failing after 17m52s
Validate / smoke (2) (push) Failing after 18m9s
Validate / smoke_done (push) Skipped
Validate / golden (push) Failing after 23m10s
Validate / performance_smoke (push) Failing after 51m44s
Validate / docs (push) Failing after 26s
The continuity gate cannot see the defect from the owner's 66.json: masonry is
continuous there and the record agrees with what is painted. The record itself
is wrong — a partial resize left 43 steps of a former shared boundary as an
exterior wall while it kept the 20 cm of that boundary, next to 30 cm exterior
neighbours. Thickness followed the key, not the role of the edge.

A width check would not have caught it, and I built one before throwing it away.
It compares the painted body against the record, and here the two agree. On real
plans it also fires where masonry is legitimately wider — columns, junction
influence, abutting parallel walls: 76 to 82 steps measured against 4 expected,
every case legal. A gate that needs explaining half the time is noise.

The defect is expressible in a single state instead: one record whose span is
partly shared and partly exterior. Nobody sets that on purpose. Roles come from
the polygons — a stretch is shared when another room's edge covers it — so the
check needs neither a build nor product code.

Two traps found by measurement, both of which produced false positives. Count
distinct rooms rather than edges: in a corner one room owns two edges, and
counting edges called every exterior corner a shared boundary — 12 and 14 false
positives. And do not sample the endpoints: an endpoint is a node, where a wall
legitimately touches two rooms, and including them reported 95 per cent exterior
on every wall abutting a shared one.

Mutation coverage, stated honestly: the endpoint mutant is killed by the
real-plan test. The rooms-versus-edges mutant survived — once endpoints are
excluded, counting edges gives the same answer on real plans, so that choice is
not load-bearing. I removed the mutant rather than ship a surviving one, and said
so in the code.

Issue: #287
User-Visible: no
2026-08-24 13:20:34 +03:00
Claude d5659478aa test: add a second real plan to the masonry gate
The second floor covers one class: the multi-wall corridor eating a neighbouring
wall. The first floor brings what neither it nor any synthetic fixture has —
three virtual spans, two wall columns, two solid edges with no thickness record
at all, and 127 noisy coordinates.

The two plans pin opposite states, which is worth more than two plans with the
same defect: one records a known debt of 181 steps, the other records cleanliness
at zero. A regression is caught in both directions.

A declared virtual span is a declared break, not a defect, so the rule from #285
would have reddened on the first floor's own contract. Samples lying on
open_spans are now excluded: 830 of 6800 on that plan, and the remaining gap
count is zero.

The two zero-thickness solid edges are two grid steps long and covered by the
bodies of their neighbours, so the browser sees no break. Their count is
therefore pinned in the model test rather than the smoke — if it grows, or if the
neighbours stop covering them, that shows up before it becomes a hole.

Both fixtures must stay noisy: the project's synthetic models carry exactly zero
noise, which is why #258 and #248 are not reproducible on them. A profile check
asserts at least a hundred noisy coordinates each, so a future write barrier run
over the fixtures cannot quietly rob them of their purpose.

Privacy: names, ids, markers, device bindings and layout are gone; geometry
stays, coordinates unchanged, because they are the point.

Issue: #286
User-Visible: no
2026-08-24 13:10:33 +03:00
Claude c654e0ec42 test(smoke): masonry of a real plan must not break
Eight closed issues on wall junctions — #271, #272, #275, #276, #277, #278,
\#279, #280 — shipped in beta.9, and the break in the owner's real plan
survived. Every one of them was accepted on synthetic fixtures: a cell-5
mixed-depth T, a rectilinear T with three equal half-depths. On those the fixes
work.

The smoke asks the product itself, through isPointInFill on the wall path,
whether masonry exists where the model promises it. That is independent of both
resolution and the pixel-diff thresholds which miss this class: a 45-step break
on a large plan is a fraction of a per cent of the frame, well under the 0.05
per cent scene tolerance.

Measured on the shipped code: four breaks, 181 grid steps in total, 45.25 each.
That number is derivable rather than incidental — the node joins a 30 cm
exterior wall, a 30 cm spur and an arm five steps long; half-depth 15,
MITRE_LIMIT 4, corridor radius 60, and 60 − 15 = 45 steps are cut out of the
neighbouring 20 cm wall. The corridor eats the masonry, which is what #271 and
\#275 describe.

The fixture is privacy-minimised — neutral room names and ids, no device
bindings — and keeps its coordinates, because they are the point. It lives in
test/fixtures rather than demo/fixtures on purpose: sourceFingerprint hashes the
.mjs of demo/fixtures and demo/golden, so anything added there staleizes the
committed bundle and the screenshot manifest at once. Verified after this
commit: bundle still fresh, screenshots still current.

The debt is recorded as numbers and compared exactly. Better and the test asks
for the numbers to be updated, which proves the improvement; worse and it
catches the regression. Verified by execution in both directions.

Issue: #285
User-Visible: no
2026-08-24 13:02:56 +03:00
Sergey Matyunin d8696315eb test: stabilize opening distance smoke
Issue: #281
User-Visible: no
v1.67.0-beta.9
2026-08-24 11:04:17 +03:00
Sergey Matyunin ed606c0f4a docs: refresh beta 9 screenshots
Issue: #279
Issue: #280
Issue: #281
User-Visible: no
2026-08-24 10:55:56 +03:00
Sergey Matyunin 89658c20fe build: prepare v1.67.0-beta.9 candidate
Issue: #279
Issue: #280
Issue: #281
User-Visible: yes
2026-08-24 10:54:02 +03:00
Claude a988f7c6f1 test: measure how far the stored geometry sits off the lattice
Stage 0 of ADR #282. A lattice node is k/240, which has no exact binary
representation, and a stored coordinate is a float. Nobody could say how much of
a real plan is affected, and Optimize promises to remove coordinate noise
without a definition of noise that can be checked.

latticeProfile splits every coordinate of the model into three populations,
because they are three different problems: exactly on a node, near a node but
not exact, and legitimately off grid. The middle one is the defect class behind
\#258, \#279 and the non-converging Optimize; the last one is authored geometry
the current model allows and must not be called a violation.

Measured on the owner's installation: space 1 has 208 coordinates, 33.65 per
cent exactly on a node and 65.38 per cent in the noise class; space 2 has 21.23
against 78.77. The worst deviation is 8e-8 of a step — invisible, and enough to
put a wall key in the neighbouring bucket.

The counterpart is what makes it worth having: every shipped fixture has zero
noise, all of its off-grid values being authored. Our own test data therefore
cannot reproduce this class by construction, which is why the owner finds these
defects and the gates do not. A test pins that property so it cannot drift.

No violations are produced, no gate turns red, and nothing is repaired: what to
do with a vertex 8e-8 from a node is the owner's decision, and this measures its
price first.

Issue: #283
User-Visible: no
2026-08-24 10:45:48 +03:00
Sergey Matyunin d73790aaab merge: synchronize dev into issue 281
Issue: #281
User-Visible: no
2026-08-24 10:44:23 +03:00
Sergey Matyunin 07bd1a6781 fix: reconcile outer walls before resize
Issue: #281
User-Visible: yes
2026-08-24 10:43:33 +03:00
Claude 0963f5b4dd docs(adr): decide the wall geometry representation
Nine of the last ten specs are one class of defect, 23 fix commits in thirty
days, 595 tolerance mentions across ten geometry modules, one every seventh line
in resize.ts. The specs rate their own risk at 9 and 10 of 10, and two titles
show where that arrived: a nearly orthogonal T junction, and a union failure
that must merely damage less.

The ADR names three properties of the data model that produce the stream — a
float coordinate on a 1/240 step, an identity derived instead of stored, and a
wall living in two representations at once — and records four stages against
them. Stage 0 is accepted for implementation; the rest are direction, in the
same sense as #34.

Issue: #282
User-Visible: no
2026-08-24 10:41:53 +03:00
Sergey Matyunin a3e5f30a3c docs: specify honest resize eligibility
Issue: #281
User-Visible: no
2026-08-24 10:35:13 +03:00
Sergey Matyunin 38ea8a9b9e fix: validate optimize opening rehosts
Issue: #280
User-Visible: yes
2026-08-24 10:33:05 +03:00
Sergey Matyunin 93fad8cfb4 docs: specify optimize rehost validation
Issue: #280
User-Visible: no
2026-08-24 10:28:59 +03:00
Sergey Matyunin c0c30d645a fix: preserve near-orthogonal wall junctions
Issue: #279
User-Visible: yes
2026-08-24 10:27:13 +03:00
Sergey Matyunin cd9916d72a docs: specify near-orthogonal junction protection
Issue: #279
User-Visible: no
2026-08-24 10:24:03 +03:00
Sergey Matyunin 8aa7fc970c Release v1.67.0-beta.8 candidate
Package the reviewed Optimize reconciliation, safe fixed-topology Resize and wall-union isolation fixes from #276, #277 and #278 as the eighth v1.67 prerelease candidate.

Issue: #278
User-Visible: yes
v1.67.0-beta.8
2026-08-24 09:39:11 +03:00