# AGENTS.md — SlabUploader Working contract. Read this before writing code or more docs. Branch intent: `doc-simplification` replaces the live doc pile with a small production set. Old files live under `docs/archive/` and are **not** sources for new work. ## Live files | File | Owns | |---|---| | `README.md` | What this is | | `AGENTS.md` | Locks, slice scope, proof | | `docs/PRODUCT.md` | Listing factory, fields, who decides, Woo outcome | | `docs/CAPTURE.md` | Photo, mask slider, crop, numbers | | `deploy/` | How it is hosted | Do not add a new live markdown file without Ty saying so. ## Slice 1 (build this, nothing else) Client-side capture on phone and PC: 1. Open the app. 2. Take or pick one slab photo. 3. Isolate the slab with **one live sensitivity slider** (plus Auto / Green / Black if the sheet is not obvious). Instant overlay. No Apply. No server trip for the slider. 4. User approves the edge. 5. App then produces the uniform inventory PNG **and** sizes / board feet from that reference photo. 6. User sees both on screen. Out of Slice 1: Woo, vision, titles, extra sliders, U2Net, offline, OCR, bulk. Add a second slider only after real slabs prove one cannot put the edge on the wood. ## Proof A passing test suite is not proof. Proof is Ty on a phone, real slab, approved edge, visible uniform PNG, visible length-derived widths and board feet. If step 5 does not run after approve, the build failed. ## Locks - Every slab is quantity one. Photos + metadata are the listing. - User types **length**, **thickness**, and **SKU**. - App proposes everything else. User reviews before submit. - Non-math fields stay editable until submit. - Board feet is `sqft × thickness_in`. User does not invent the math. - Price is proposed as `bdft × species $/bdft`. User may override. No rate → empty price, user types it. - Manual length, thickness, SKU, price, and taxonomy always win over a model. - `SLAB-UAT-*` is always a Woo draft. - Vision does not gate publish. Full path must work with inference off. - Undersized source → retake, not a soft publish. - Duplicate SKU → stop. This version does not update the other product. ## Conflict order 1. These locks 2. `docs/PRODUCT.md` and `docs/CAPTURE.md` 3. `docs/archive/` (history only) ## Do not - Restate these locks in a fourth file - Treat `docs/archive/` as the spec - Ship four sliders because an older spec listed four - Call the slice done because unit tests passed