feat(#21): Gate B green/black sheet mask (TV-1, TV-2)

Pure client modules for TECH-SPEC sheet detect, chroma-key / black
threshold with border flood-fill, four knobs (live re-run), and mask
confirm hooks. Synthetic fixtures. U2Net never invoked.

TDD: red evidence in test-results/tv1-tv2-red.txt, then minimum impl.

Results:
TV-1 | pass | test-results/tv1-tv2-green.txt
TV-2 | pass | test-results/tv1-tv2-green.txt
This commit is contained in:
2026-09-07 05:53:43 +00:00
parent f02b53dfa2
commit 3c2f8871a8
12 changed files with 2082 additions and 0 deletions
+10
View File
@@ -0,0 +1,10 @@
RUN v2.1.9 /workspace/gitea-atd/Ty_Tech/SlabUploader/frontend
✓ src/__tests__/tv1-tv2-mask.test.ts (5 tests) 34ms
Test Files 1 passed (1)
Tests 5 passed (5)
Start at 05:53:31
Duration 456ms (transform 81ms, setup 0ms, collect 85ms, tests 34ms, environment 0ms, prepare 64ms)
+87
View File
@@ -0,0 +1,87 @@
RUN v2.1.9 /workspace/gitea-atd/Ty_Tech/SlabUploader/frontend
❯ src/__tests__/tv1-tv2-mask.test.ts (5 tests | 5 failed) 14ms
× TV-1 green-sheet chroma-key > keeps interior green-ish patch that does not touch the border 8ms
→ removeSheetBackground not implemented
× TV-1 green-sheet chroma-key > re-runs live when knobs change and still skips U2Net 1ms
→ removeSheetBackground not implemented
× TV-2 black-sheet threshold + border flood-fill > keeps dark interior wood that does not touch the border 1ms
→ removeSheetBackground not implemented
× TV-2 black-sheet threshold + border flood-fill > flood-fill removes only border-connected dark pixels 1ms
→ removeSheetBackground not implemented
× mask confirm hooks (pure) > starts pending, confirm and retake transition without DOM 2ms
→ removeSheetBackground not implemented
⎯⎯⎯⎯⎯⎯⎯ Failed Tests 5 ⎯⎯⎯⎯⎯⎯⎯
FAIL src/__tests__/tv1-tv2-mask.test.ts > TV-1 green-sheet chroma-key > keeps interior green-ish patch that does not touch the border
Error: removeSheetBackground not implemented
❯ Module.removeSheetBackground src/lib/pipeline/mask.ts:31:9
29| _knobs: KnobSettings = defaultKnobs(),
30| ): MaskResult {
31| throw new Error("removeSheetBackground not implemented");
| ^
32| }
33|
❯ src/__tests__/tv1-tv2-mask.test.ts:20:20
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/5]⎯
FAIL src/__tests__/tv1-tv2-mask.test.ts > TV-1 green-sheet chroma-key > re-runs live when knobs change and still skips U2Net
Error: removeSheetBackground not implemented
❯ Module.removeSheetBackground src/lib/pipeline/mask.ts:31:9
29| _knobs: KnobSettings = defaultKnobs(),
30| ): MaskResult {
31| throw new Error("removeSheetBackground not implemented");
| ^
32| }
33|
❯ src/__tests__/tv1-tv2-mask.test.ts:33:19
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/5]⎯
FAIL src/__tests__/tv1-tv2-mask.test.ts > TV-2 black-sheet threshold + border flood-fill > keeps dark interior wood that does not touch the border
Error: removeSheetBackground not implemented
❯ Module.removeSheetBackground src/lib/pipeline/mask.ts:31:9
29| _knobs: KnobSettings = defaultKnobs(),
30| ): MaskResult {
31| throw new Error("removeSheetBackground not implemented");
| ^
32| }
33|
❯ src/__tests__/tv1-tv2-mask.test.ts:51:20
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/5]⎯
FAIL src/__tests__/tv1-tv2-mask.test.ts > TV-2 black-sheet threshold + border flood-fill > flood-fill removes only border-connected dark pixels
Error: removeSheetBackground not implemented
❯ Module.removeSheetBackground src/lib/pipeline/mask.ts:31:9
29| _knobs: KnobSettings = defaultKnobs(),
30| ): MaskResult {
31| throw new Error("removeSheetBackground not implemented");
| ^
32| }
33|
❯ src/__tests__/tv1-tv2-mask.test.ts:64:20
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/5]⎯
FAIL src/__tests__/tv1-tv2-mask.test.ts > mask confirm hooks (pure) > starts pending, confirm and retake transition without DOM
Error: removeSheetBackground not implemented
❯ Module.removeSheetBackground src/lib/pipeline/mask.ts:31:9
29| _knobs: KnobSettings = defaultKnobs(),
30| ): MaskResult {
31| throw new Error("removeSheetBackground not implemented");
| ^
32| }
33|
❯ src/__tests__/tv1-tv2-mask.test.ts:76:20
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/5]⎯
Test Files 1 failed (1)
Tests 5 failed (5)
Start at 05:52:50
Duration 383ms (transform 68ms, setup 0ms, collect 70ms, tests 14ms, environment 0ms, prepare 67ms)