Ty
0d06e6f7b7
UAT-3: browser gate (hard stop) + iPad Safari fix
...
Spec CAPTURE.md §Browsers: Phone iOS Safari / Android Chrome, PC
Chrome / Edge / Firefox, others hard stop.
- browserGate.js: UA detection + allowlist (pure, DOM-free)
- +layout.svelte: renders hard-stop panel when unsupported
- iPadOS 13+ reports as Macintosh — added Safari rule (Version/ +
Safari/ without Chrome/) so iPad Safari is not blocked
- 27 unit tests incl. iPad Safari regression
- 107/107 full suite green
2026-09-14 07:44:49 -07:00
Ty
a83c9239ff
UAT-7: fix auto key selection — prefer key that removes more background
...
Root cause: auto selected the key with MORE kept pixels, which always
picked the green key (it keeps 100% of dark non-green backgrounds).
The black key correctly isolates the slab on dark surfaces.
Fix:
- auto now prefers the key with FEWER kept pixels (removed more bg)
when both are non-empty
- green key has a greenness pre-filter: non-greenish pixels pass
through (kept) so the black key can handle them, instead of the
green key keeping 100% of a dark surface
- added 3 regression tests: dark-bg auto selection, green-sheet auto
selection, green-key passthrough on non-green surfaces
106/106 unit tests green.
2026-09-14 07:41:51 -07:00
Ty
88b9c47200
UAT-4: remove non-spec controls (edge offset, feather) from Mask UI
...
Spec CAPTURE.md §Mask lists exactly two controls: Sheet and Sensitivity. Edge offset and feather nudge buttons were extra. Removed from the UI; core params (edgeOffset, feather) remain in maskState.js, still unit-tested.
2026-09-14 07:24:42 -07:00
Ty
eca306e869
M1-6: record UAT host in INVENTORY.md
2026-09-14 07:08:41 -07:00
Ty
509e2e82a3
Add M1-6 deploy script
2026-09-14 02:14:08 -07:00
Ty
25b1650a8a
M1-5: clean up debug artifacts
2026-09-14 02:12:53 -07:00
Ty
b124450d0c
M1-5: Measure + PNG + full capture UI (TDD)
...
- measure.js: sampleWidthsPx scanline sampler
- inventory.js: prepareInventoryMetadata
- +page.svelte: full 4-state capture flow (Add photo, Mask, Axis, Measure)
- Canvas overlay: checkerboard mask, bounding rect, axis line
- Inventory PNG: 3:4 portrait, slab centered 80% fill, alpha
- 77/77 unit tests green
2026-09-14 02:11:28 -07:00
Ty
507865e30b
Add e2e fixtures: slab-green.jpg, sheet-only-green.jpg, slab.heic
2026-09-14 00:43:58 -07:00
Ty
0284a2211a
M1-4: Length axis (TDD)
...
- Add axis.js: length axis rectangle state, 28 tests
- 71/71 unit tests green
2026-09-14 00:32:42 -07:00
Ty
7e2a1845cf
M1-3: Capture + Mask state (TDD)
...
- Add maskState.js: sheet Auto/Green/Black, sensitivity, edge offset, feather
- Overlay = slab photo + checkerboard on removed px
- Debounced recompute 2.0s after last sensitivity change
- Approve blocked when maskStats empty
- HEIC shows retake notice
- Refactored mask.test.js + extended e2e mask.spec.js
- 43/43 unit tests green
2026-09-14 00:02:36 -07:00
Ty
dd011207a0
feat(m1-2,m1-3): deterministic core + mask keying (TDD, green)
...
Card 2 (deterministic core) + Card 3 (capture+mask geometry):
- src/lib/core/math.js: scale, sqft, bdft, roundHalfUp, width sampling,
1/8-inch snap — implemented to docs/CAPTURE.md identities.
- src/lib/core/mask.js: keySheet green/black/auto chroma keys + maskStats.
- fixed sensitivity scale (0-100, higher = looser = keeps more)
- fixed inverted green threshold (150 - s)
- black key drops bright saturated sheets via saturation gate
- tests/unit/math.test.js: corrected 3 wrong expected values to match the
spec (sqft 21x12in = 1.75 not 17.5; bdft 3.06; sample avg 11.25).
- tests/e2e/mask.spec.js: skeleton, skipped pending M1-5 live UI.
Full unit suite green: 24/24. E2e collects clean.
2026-09-13 23:17:36 -07:00
Ty
93666320ef
feat(m1-1): scaffold SvelteKit + Dockerfile + TDD test harness
...
- SvelteKit (JS, adapter-node) home page + /api/health route
- frontend/Dockerfile multi-stage build->serve (slabuploader-m1:local, 349MB)
- Test harness: Vitest unit + Playwright e2e; smoke tests RED->GREEN verified
- Build, image build, and image serve all verified
2026-09-13 22:55:34 -07:00
Ty
ba8e5f72f6
docs(m1): calibrated worker delegation policy (prompt framing, verify-before-land)
2026-09-13 22:48:48 -07:00
Ty
92d1a7ec5e
docs(m1): plan of record — TDD card breakdown, UAT deployment, fixtures, worker dispatch
...
- docs/M1-POR.md: scope, TDD method, 6-card breakdown, deployment POR,
test plan, real-slab fixtures, dev/QA worker dispatch (.202:8081 text,
.202:8082 vision; one task per endpoint)
- docs/CAPTURE.md: input photo (JPEG + HEIC fallback), 200KB soft goal
- deploy/README.md: Milestone 1 UAT deployment POR (one container, LAN URL)
- tests/fixtures/: 3 black-sheet slab photos + calibration records
(152422 28x2.25 irregular, 155818 21x1.75, 155754 21x1.75)
2026-09-13 22:37:19 -07:00
Ty
3bae76cea3
docs: Calculate runs measure after length and thickness
2026-09-11 15:16:14 +00:00
Ty
74bd8b2863
docs: restore Milestone 1 user/app use case
2026-09-11 15:14:00 +00:00
Ty
92c4f81640
docs: remove structure check that pins the old doc set
2026-09-11 15:11:23 +00:00
Ty
566ea0675c
docs: mark leftover compose as pre-Milestone 1
2026-09-11 15:06:24 +00:00
Ty
7db28438ad
docs: strip full-factory release process from Milestone 1
2026-09-11 15:06:04 +00:00
Ty
d411352644
docs: strip host-specific deploy inventory
2026-09-11 15:06:02 +00:00
Ty
47abad22bc
docs: Milestone 1 deploy is a Docker image; host is runtime
2026-09-11 15:06:00 +00:00
Ty
0f0bd71f35
docs: system seams for client capture vs server Woo
2026-09-11 15:02:56 +00:00
Ty
daf03248c4
docs: runtime, one photo, empty mask, browsers
2026-09-11 15:02:47 +00:00
Ty
188905e778
docs: Milestone 1 states, display vs source pixels, mask controls
2026-09-11 14:53:33 +00:00
Ty
ea4931e53f
docs: state Milestone 1 has no inference URL
2026-09-11 14:43:58 +00:00
Ty
baf2f89b3e
docs: Milestone 1 is inference-free client code
2026-09-11 14:43:48 +00:00
Ty
9ca4b4520d
docs: CAPTURE.md is Milestone 1 only
2026-09-11 14:36:38 +00:00
Ty
53830dcb91
docs: PRD milestones with acceptance
2026-09-11 14:36:25 +00:00
Ty
9418cc2eb5
docs: agent context is Milestone 1
2026-09-11 14:36:16 +00:00
Ty
fb9a8c820c
docs: use milestone vocabulary in README
2026-09-11 14:36:12 +00:00
Ty
fd48105c99
docs: name device draft vs Woo draft in PRD
2026-09-11 14:33:19 +00:00
Ty
121ff7035e
docs: Milestone 1 ends at step 8; separate device draft from Woo draft
2026-09-11 14:33:13 +00:00
Ty
65ec1ca3d2
docs: device draft continue or start fresh
2026-09-11 14:30:58 +00:00
Ty
ff245529aa
docs: lock inventory PNG properties from Woo research
2026-09-11 14:20:51 +00:00
Ty
f08569894e
docs: PRD starting state is green or black sheet
2026-09-11 14:16:06 +00:00
Ty
82e9e652f8
docs: capture setup on green or black sheet
2026-09-11 14:15:57 +00:00
Ty
10eee46097
docs: PRODUCT.md as PRD with milestones
2026-09-11 14:14:17 +00:00
Ty
781bfd17ec
docs: AGENTS.md as invariants and current increment context
2026-09-11 14:14:12 +00:00
Ty
b4bff31d58
docs: map PRD, invariants, and current increment
2026-09-11 14:14:07 +00:00
Ty
f63f95a730
docs: state mask as background removal
2026-09-11 14:05:24 +00:00
Ty
18294f6ed8
docs: align Slice 1 with capture flow
2026-09-11 14:03:47 +00:00
Ty
b01527fb4f
docs: add capture user flow and rectangle length axis
2026-09-11 14:03:43 +00:00
Ty
fb50e6e7b4
docs: strip editorial language from CAPTURE.md
2026-09-11 14:01:29 +00:00
Ty
6f5ae7e724
docs: strip editorial language from PRODUCT.md
2026-09-11 14:01:24 +00:00
Ty
440fedc90f
docs: strip editorial language from AGENTS.md
2026-09-11 14:01:19 +00:00
Ty
b9028ec1bd
docs: strip editorial language from README
2026-09-11 14:01:13 +00:00
Ty
5bb9f9e7fb
docs: clarify archive vs main snapshot
2026-09-11 13:47:46 +00:00
Ty
627f0fd2c0
docs: remove live UAT-PRACTICE.md
2026-09-11 13:47:38 +00:00
Ty
cf635aa0b0
docs: remove live PROMPTS.md
2026-09-11 13:47:31 +00:00
Ty
1c64f96b54
docs: remove live Build-release-standard.md
2026-09-11 13:47:26 +00:00