# AGENTS.md ## STOP — coding paused (Phase 2: requirements reconciliation) Do not implement Milestone 3 or any feature right now. Trunk docs are being consolidated. Scope authority is `docs/REQUIREMENTS.md` + `docs/MILESTONES.md`. M3 will be re-derived as a subset of requirement IDs. The Milestone 3 text below is the pre-reconciliation state and is not authoritative until Phase 2 completes. ## Structure contract (read before creating any doc) Requirements live only in `docs/REQUIREMENTS.md`; milestone scope in `docs/MILESTONES.md`. Before creating or moving any doc, look up its home in `docs/STRUCTURE.md` (artifact registry + namespace routing). If no home exists, stop and ask Ty — do not create a new artifact. Run `python tools/check_requirements.py` after any docs change; it must pass. ## Agent context Read `docs/README.md` first, then this file, `docs/CAPTURE.md`, `docs/PHOTOS.md`, and `docs/CREATE.md`. Implement **Milestone 3** only. Specification: `docs/CREATE.md`. Product overview: `docs/PRODUCT.md`. **M3 scope** (what is in vs out) comes from Ty conversations and `docs/CREATE.md`. **Behavior** for Woo sync, metadata, pricing, and inference is written into `docs/CREATE.md` from the technical requirements on `main`. Do not treat older milestone splits on `main` as scope authority. Do not code against `main` docs by cross-reference. Use `docs/CREATE.md` on this branch. Do not implement work outside `docs/CREATE.md` unless Ty expands scope in chat. Do not touch deploy port `:10880`. UAT redeploy target is overnight Docker on ubudual5060 `:10881`. ## Milestone 3 Create. Exit criteria: a Photos-ready slab is **submission-ready for WooCommerce**, proven by a `SLAB-UAT-*` Woo draft that matches the reviewed ready set. Inference-off path required. ## Milestone 1 and 2 (shipped inputs) - Capture: `docs/CAPTURE.md` - Photos: `docs/PHOTOS.md` (UAT on `:10881`) ## Invariants - Quantity per listing is one. - User enters length, thickness, and SKU. - App may propose remaining listing fields. User reviews before create. - Non-math fields remain editable until create. - `bdft = sqft × thickness_in` - Price proposal is `bdft × species $/bdft`. User may replace it. Missing rate leaves price empty. - User-entered length, thickness, SKU, price, and taxonomy override computed or inferred values. - **Woo attributes** means synced species and wood categories; Edge, Figure, Grade, Thickness, Moisture; `fig-*` and `feat-*`. Store is source of truth. - Woo auth is WordPress application password (server-side). `WOO_BASE_URL` is compose/env. Inference URL is Settings. - SKUs matching `SLAB-UAT-*` create as Woo draft. - Create works with inference off. - Source below the PNG size floor requires a new photo. - Existing store SKU blocks create. - Dimension overlay orientation follows the user-approved length axis from Milestone 1.