# AGENTS.md ## Status — Phase 2 reconciliation complete `docs/REQUIREMENTS.md` (153 rows) is the only normative text; scope is the M3 ID subset in `docs/MILESTONES.md`. Capability and contract docs live in `docs/capabilities/` and `docs/contracts/`. Reconciliation evidence is archived under `.audit/archive/`; the coverage ledger and matrices are in `.audit/coverage/`. Starting implementation is Ty's call; when it starts, implement only the M3 ID subset. ## 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 runtime rules - Subagents (`explore`, `general`) run on a single local GPU and cannot handle concurrency. Invoke only one subagent at a time; never issue parallel subagent calls. - Subagents are for mechanical extraction only (read and list). They never write and never set a disposition; rulings stay with Ty. ## Agent context Read `docs/README.md` first, then this file, `docs/capabilities/CAPTURE.md`, `docs/capabilities/PHOTOS.md`, and `docs/capabilities/CREATE.md`. Implement **Milestone 3** only. Specification: `docs/capabilities/CREATE.md`. Product overview: `docs/PRODUCT.md`. **M3 scope** (what is in vs out) comes from Ty conversations and the reconciled `docs/MILESTONES.md` + `docs/REQUIREMENTS.md`. **Behavior** for Woo sync, metadata, pricing, and inference is in `docs/capabilities/CREATE.md` and the `docs/contracts/` set. `docs/REQUIREMENTS.md` is the only normative text. Do not implement work outside the M3 requirement subset unless Ty expands scope in chat. Do not touch deploy port `:10880`. UAT redeploy target is overnight Docker on ubudual5060 `:10881`. ## Milestones and capabilities Scope and exit criteria: `docs/MILESTONES.md`. Capability specs: `docs/capabilities/`. Interfaces: `docs/contracts/`. ## 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 Slab Taxonomy** 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.