284 lines
16 KiB
Markdown
284 lines
16 KiB
Markdown
# SlabUploader docs refactor: proposal v2 (post-interrogate)
|
||
|
||
Status: PROPOSAL v2. Not a rewrite. No repo files changed by this document.
|
||
SoT: Gitea `Ty_Tech/SlabUploader` on gitea-atd.
|
||
Date: 2026-09-01.
|
||
Basis: `/workspace/slabuploader-docs-refactor-proposal.md` revised for Act-on findings in `/workspace/slabuploader-docs-refactor-interrogate.md`.
|
||
Panel that forced the revision: composer-2.5, DpBlu-Qwen3.6-27b, UbuDual-Qwen3.8-27b, grok-composer-2.5-fast (all four completed).
|
||
|
||
---
|
||
|
||
## 1. Executive summary for Ty
|
||
|
||
Direction from v1 stands: deletion-first cleanup, one Diataxis mode per file, one home per locked decision, product locks unchanged.
|
||
|
||
v1 is **not** sign-off ready. Four-model interrogate blocked it for structural execution bugs, not for wrong product intent.
|
||
|
||
v2 changes the execution rules:
|
||
|
||
1. **AGENTS.md stays the agent working contract.** Hard locks stay verbatim. Pointers add depth; they do not replace lock text.
|
||
2. **Named SoT hierarchy** for Woo safety and secrets (agent-facing policy vs schema vs payload).
|
||
3. **Gate C hybrid capture slice is written before Phase 2 body delete.**
|
||
4. **IMPL Phases 3–5 + Risks get hybrid alignment or an explicit “do not implement” guard.** No claim that superseded text is gone after Phase 2/6 only.
|
||
5. **PRD archive is allowed only with reference rewrite + superseded FR header** (or fix W6–W8 first).
|
||
6. **Contract wrong-code lines (OPENAPI B1/W1, AGENTS/IMPL W2) land in commit 1** with greppable DoD before PM-DESIGN dies.
|
||
7. **File count and inventory worksheet are honest.** Target is 10 active docs files + DEPLOYMENT-owned inventory worksheet, not “9.”
|
||
|
||
Nothing here reopens: hybrid client math, `bdft = sqft × thickness_in`, AES-GCM server secrets, Woo draft + `SLAB-UAT-*`, inference OFF until first draft listing, gates A/B/C meaning, env-agnostic deploy.
|
||
|
||
---
|
||
|
||
## 2. What v1 got right (kept)
|
||
|
||
- Stale IMPL Phase 2 offline/OCR/ruler body and Phase 6 offline UAT must go.
|
||
- Phase 1 must not invent `processing → ready`.
|
||
- OPENAPI PUT must not recompute client math as SoT; POST calibrated wording must match status machine.
|
||
- DEPLOYMENT must become env-agnostic per `/workspace/slabuploader-env-agnostic-doc-outline.md`.
|
||
- TECH-SPEC and DATA-MODEL structure stay; no churn for purity.
|
||
- PM-DESIGN-ALIGNMENT is a reconciliation artifact and should not live forever.
|
||
- Docs only. No code, schema migration, run-host work, commit, or push in the design pass.
|
||
|
||
---
|
||
|
||
## 3. v1 defects fixed in v2 (Act-on map)
|
||
|
||
| ID | Defect | v2 rule |
|
||
|---|---|---|
|
||
| A1 | Slim AGENTS to pointers drops locks | Verbatim hard-rules block retained |
|
||
| A2 | Woo dual-SoT | AGENTS = policy; CONTENT-WOO = payload cites AGENTS |
|
||
| A3 | Secrets SoT = DATA-MODEL | AGENTS policy; ARCHITECTURE why; DATA-MODEL keys only |
|
||
| A4 | PRD archive orphans references | Same-commit reference rewrite |
|
||
| A5 | W6–W8 “applied” by silence | Superseded header or fix-before-archive; PM delete gated |
|
||
| A6 | Phase 2 delete leaves Gate C homeless | Write Gate C slice first |
|
||
| A7 | Phases 3–5 still stale | Hybrid-align or keep AGENTS guard |
|
||
| A8 | W2 TV-10 unscheduled | Mandatory AGENTS + IMPL Phase 0 edit |
|
||
| A9 | Deletion-first overclaim / B1 late | Commit 1 = B1/W1/W2 + IMPL wrong-code deletes |
|
||
| A10 | Gate table only in PM-DESIGN | Copy into AGENTS before PM delete |
|
||
| A11 | No docs DoD | Greppable acceptance section |
|
||
| A12 | “9 files” false; INVENTORY missing | Recount; map inventory under DEPLOYMENT |
|
||
| A13 | AGENTS known-stale FR4 false | Rewrite known-stale against HEAD |
|
||
|
||
---
|
||
|
||
## 4. Target design
|
||
|
||
### 4.1 File list and modes
|
||
|
||
| File | Mode | Owns | v2 change vs today |
|
||
|---|---|---|---|
|
||
| `README.md` | explanation | Orientation, remotes, POC bar, where to read next | Drop duplicate “what” table bloat; deploy line env-agnostic; PRD row → archive path when moved |
|
||
| `AGENTS.md` | reference (agent contract) | **Verbatim** hard rules + Gate A/B/C table + test/delivery + short precedence while copies remain | Add pointers *beside* locks; never replace locks; rewrite known-stale; absorb gate table + open-doc-defects until clear |
|
||
| `docs/TECH-SPEC-PIPELINE.md` | reference | Math + image prep + TV-1…**TV-10** | Status bump only; no structural rewrite |
|
||
| `docs/ARCHITECTURE.md` | explanation **and** normative topology reference | Hybrid split, swimlane, what-runs-where, secrets **why**, status transitions explained | Keep tables; fix “Remaining sections TBD” (N3); secrets detail points to DATA-MODEL keys, policy stays here + AGENTS |
|
||
| `docs/DATA-MODEL.md` | reference | Schema, status enum, settings **keys** | Drop server sheet/slider prefs (W3); “client” not “PWA” (N1); not the never-browser policy home |
|
||
| `docs/OPENAPI.md` | reference | HTTP contract | B1 PUT store-only; W1 POST `calibrated` **and** examples; N1 PWA wording |
|
||
| `docs/CONTENT-WOO.md` | reference | Templates, Woo payload, dedupe, publish logging | W4 PNG; W5 fig-/feat-*; W11 no calibration photos; **attributes = five locked attrs not species/character/length as attrs**; cite AGENTS for SLAB-UAT force-draft |
|
||
| `docs/PROMPTS.md` | reference | Call 1/2 files, inputs, reset-to-default | Keep short tuning note in-file (no split for POC) |
|
||
| `docs/DEPLOYMENT.md` | how-to | Env-agnostic playbook | `APP_HOSTNAME` / inventory; corrected Caddy `handle /api/*` then frontend `handle`; drop RemBG/ruler/1000px SoT (W9); W10 |
|
||
| `docs/IMPL-PLAN.md` | how-to | Phases + exit gates, hybrid-only | Gate C slice with capture+draft listing; stub Phase 2 deferred; kill `processing`; hybrid-align 3–5 + Risks; Phase 6 online UAT only; TV-1…TV-10 in Phase 0 |
|
||
| `deploy/INVENTORY.md` | how-to worksheet | Host inventory filled at Gate B | Created empty/template when DEPLOYMENT goes env-agnostic; owned by DEPLOYMENT, not a second product spec |
|
||
| `docs/archive/PRD-2026-08.txt` | frozen record | Historical PRD | Move + superseded header listing non-authoritative FRs; **or** fix W6–W8 before freeze |
|
||
|
||
**Active count:** 10 docs surfaces (README, AGENTS, 8 under `docs/` excluding archive) + inventory worksheet. Plus archived PRD. Not “9.”
|
||
|
||
**Delete after DoD green:** `docs/PM-DESIGN-ALIGNMENT.md` (reconciliation body). Preserve freeze provenance by lifting SHA-to-lock summary into AGENTS or a one-screen freeze note inside AGENTS.
|
||
|
||
### 4.2 Ownership hierarchy (single home, typed)
|
||
|
||
| Decision | Normative home | Depth / implementation home | Others |
|
||
|---|---|---|---|
|
||
| Math, crop, no-upscale, TV vectors | TECH-SPEC | — | AGENTS verbatim summary + pointer |
|
||
| Hybrid what-runs-where | ARCHITECTURE | — | AGENTS verbatim summary + pointer |
|
||
| Schema columns, status enum, settings keys | DATA-MODEL | OPENAPI shapes | Pointers only |
|
||
| HTTP behavior | OPENAPI | — | Pointers |
|
||
| Woo **payload** / templates / publish sequence | CONTENT-WOO | — | — |
|
||
| Woo **safety policy** (`SLAB-UAT-*` force draft, UAT draft default, no edit-same-SKU, purge-after-publish) | **AGENTS** | CONTENT-WOO cites AGENTS; DATA-MODEL has `woo_create_status` key | README one-liner OK |
|
||
| Secrets **never-browser / AES / SLAB_AES_KEY env** | **AGENTS** | ARCHITECTURE why/flow; DATA-MODEL key list | — |
|
||
| Inference sequencing (OFF until Gate C; Call 2 manual) | **AGENTS** | PROMPTS file mechanics; ARCHITECTURE call placement | — |
|
||
| Gate A/B/C human map | **AGENTS** | IMPL-PLAN phase mapping | — |
|
||
| Build phases / acceptance | IMPL-PLAN | — | AGENTS gate map + “incomplete rewrite” guard until 1+ clean |
|
||
| Deploy ops | DEPLOYMENT (+ inventory worksheet) | — | AGENTS deploy sketch points here |
|
||
| Product orientation | README | — | — |
|
||
|
||
### 4.3 AGENTS verbatim hard-rules block (non-negotiable list)
|
||
|
||
Keep short full sentences in AGENTS for all of:
|
||
|
||
- Hybrid: client owns happy-path math/mask/PNG; server stores, Woo, inference proxy, on-demand U2Net
|
||
- `bdft = sqft × thickness_in` (no `/12`)
|
||
- No fake upscale; <1600 after crop → warn + retake
|
||
- Do-not-build table (offline PWA, OCR, ruler, server happy-path pipeline, etc.)
|
||
- Secrets never in browser storage or JS bundles; AES-GCM server; `SLAB_AES_KEY` env only
|
||
- Woo UAT: draft default; `SLAB-UAT-*` force draft; real publish only after Ty review; duplicate SKU stops
|
||
- Inference OFF for full suite and Gate C; Call 1/2 after Gate C still inside POC; Call 2 never auto
|
||
- Status machine names: `draft → calibrated → ready → publishing → published | failed` (not Woo draft)
|
||
- Gate table A/B/C
|
||
- Test/delivery: no feature without passing test + shown output; deterministic core unit-tested first
|
||
- TV-1 through TV-10 required
|
||
- While IMPL 1+ rewrite incomplete: implement only Phase 0 + sections explicitly marked rewritten
|
||
|
||
Pointers after each block are encouraged. Replacing any bullet with only a link is forbidden.
|
||
|
||
### 4.4 IMPL-PLAN hybrid shape (Gate C home)
|
||
|
||
**Phase 0** (unchanged intent): Gates A+B; client TECH-SPEC modules; thin FastAPI health/settings; TV-1…TV-10.
|
||
|
||
**Early Phase 1 / Gate C slice** (must exist as real deliverables before Phase 2 stub):
|
||
|
||
- Online capture 1–5 photos (no OCR/ruler/offline)
|
||
- Client sheet/sliders, mask confirm, length axis confirm
|
||
- Client sqft/bdft/widths; calibrated draft upload (server stores client numbers)
|
||
- Manual SKU/length/thickness/taxonomy as needed for one listing
|
||
- Woo **draft** create with `SLAB-UAT-*` on configured store; inference OFF
|
||
- Exit: one draft listing Ty can open in Woo admin
|
||
|
||
**Phase 1 remainder:** broader API/settings/taxonomy cache as needed; **no** `processing` status; no server happy-path math SoT.
|
||
|
||
**Phase 2:** deferred stub only (offline PWA / OCR / ruler). No airplane-mode acceptance.
|
||
|
||
**Phases 3–5:** rewrite enough to match hybrid + all-photos@1024 Call 1 + inference after Gate C. Remove top-down-only vision SoT and offline-era assumptions. Confidence threshold 0.7 (from PRD FR22a / current Phase 5) moves here or PROMPTS deliberately.
|
||
|
||
**Phase 6:** online UAT only; env-agnostic host; no OCR/offline/server-normalization budgets; no `output_px`→1000; no ruler risk row as SoT.
|
||
|
||
### 4.5 PRD disposition (v2)
|
||
|
||
**Recommend archive** to `docs/archive/PRD-2026-08.txt` with:
|
||
|
||
```text
|
||
Frozen 2026-08-31. Not a source for new work.
|
||
Superseded by AGENTS + ARCHITECTURE + TECH-SPEC + DATA-MODEL + CONTENT-WOO + IMPL-PLAN.
|
||
Non-authoritative if they conflict: FR17 tag wording, FR19 category-weighted pricing,
|
||
FR40 server-side processing, NFR server normalization timing, FR42 host .201 binding,
|
||
and any line AGENTS known-stale still lists.
|
||
```
|
||
|
||
Same commit must update AGENTS, README, ARCHITECTURE companion, TECH-SPEC scope, IMPL DoD language, CONTENT-WOO FR cites.
|
||
|
||
Alternate: fix W6–W8/FR42 in PRD then archive with a shorter header. Do not archive unedited without the non-authoritative list.
|
||
|
||
### 4.6 PM-DESIGN-ALIGNMENT deletion gate
|
||
|
||
Delete only when **all** are true:
|
||
|
||
1. Docs DoD greps green (section 6).
|
||
2. Gate A/B/C table lives in AGENTS.
|
||
3. Freeze SHA-to-lock one-liner or small table lifted into AGENTS.
|
||
4. Residual open items (if any) listed under AGENTS “open doc defects,” not only in chat.
|
||
5. PRD archive/reference step done or PRD fixed in place.
|
||
|
||
Until then keep the file or a trimmed “open defects” section. Do not delete on hope.
|
||
|
||
---
|
||
|
||
## 5. Migration order (v2)
|
||
|
||
Honest label: **wrong-code-first, then deletes, then env-agnostic add, then de-dupe.** Not pure deletion-first.
|
||
|
||
### Commit 1 — Stop wrong code if followed
|
||
1. OPENAPI: PUT stores client-sent derived fields (no recompute as SoT). POST returns `calibrated`. Update **examples** too (W1).
|
||
2. AGENTS + IMPL Phase 0: TV-1 through TV-10 (W2).
|
||
3. IMPL: remove `processing`; write Gate C hybrid capture+draft-listing slice; stub Phase 2 deferred; strip Phase 6 offline/OCR/server-normalization UAT; start Risks cleanup (W9).
|
||
4. AGENTS: fix known-stale list vs HEAD (drop false FR4 `/12` warning).
|
||
|
||
**Checkpoint:** safe for agents on contract + Phase 0/Gate C docs. Still may have duplicate prose elsewhere.
|
||
|
||
### Commit 2 — Env-agnostic deploy
|
||
1. DEPLOYMENT + AGENTS §9 + README + IMPL host wording per env outline.
|
||
2. Add `deploy/INVENTORY.md` template.
|
||
3. Corrected Caddy fragment (`handle /api/*` then frontend `handle`).
|
||
4. Drop RemBG/ruler/1000px as deploy SoT.
|
||
|
||
### Commit 3 — Factual fixes in place
|
||
1. CONTENT-WOO: W4, W5, W11, attributes bullet (C4), cite AGENTS for safety policy.
|
||
2. DATA-MODEL / OPENAPI: W3 sheet prefs out of server settings; N1 client not PWA.
|
||
3. ARCHITECTURE: N3 status line; keep topology tables.
|
||
4. IMPL Phases 3–5 hybrid alignment (or AGENTS guard left on if partial).
|
||
|
||
### Commit 4 — De-dupe and archive
|
||
1. README/ARCHITECTURE/CONTENT-WOO: replace long restatements with pointers where AGENTS/TECH-SPEC already state the lock (locks remain in AGENTS).
|
||
2. Archive PRD with header + rewrite all live references.
|
||
3. Copy Gate table + freeze provenance into AGENTS if not already.
|
||
4. Run DoD (section 6). Delete PM-DESIGN only if green.
|
||
|
||
Each commit is reviewable. Agent-safe checkpoints: after commit 1, after commit 3, after commit 4. Do not hand a half-finished commit 4 tree to implementers.
|
||
|
||
---
|
||
|
||
## 6. Docs refactor definition of done
|
||
|
||
Run from repo root after the last commit. All must pass before Ty treats the cleanup as done.
|
||
|
||
**Wrong-code absences (active docs, not archive):**
|
||
|
||
- No `re-runs derived math` / “server re-runs derived” on slab PUT.
|
||
- No IMPL acceptance requiring offline capture, airplane mode, Tesseract OCR, or OpenCV ruler for POC.
|
||
- No IMPL `processing→ready` as a slab status.
|
||
- No DEPLOYMENT normative SoT that RemBG/ruler/`output_px` 1000 define the happy path.
|
||
- No CONTENT-WOO “JPEG bytes” as processed listing media SoT (PNG).
|
||
- No active AGENTS line claiming PRD FR4 still uses `/12` if PRD FR4 is already correct.
|
||
|
||
**Lock presences in AGENTS (verbatim):**
|
||
|
||
- `bdft` identity / no `/12`
|
||
- never browser secrets / AES-GCM / `SLAB_AES_KEY`
|
||
- `SLAB-UAT-*` force draft
|
||
- inference OFF until Gate C
|
||
- Gate A / Gate B / Gate C table rows
|
||
- TV-1 through TV-10
|
||
- hybrid client math SoT one-liner
|
||
|
||
**Structural:**
|
||
|
||
- Gate C slice exists in IMPL with capture + Woo draft listing exit.
|
||
- PRD either absent from active paths or only under `docs/archive/` with superseded header; README/AGENTS/ARCHITECTURE do not point at a missing root PRD path.
|
||
- `deploy/INVENTORY.md` exists when DEPLOYMENT claims it.
|
||
- PM-DESIGN-ALIGNMENT deleted only with DoD green + provenance relocated.
|
||
|
||
**Optional smoke:** `rg` for `SLAB-UAT` in AGENTS and CONTENT-WOO; CONTENT-WOO must cite AGENTS for force-draft policy rather than diverging.
|
||
|
||
---
|
||
|
||
## 7. What stays locked (do not reopen)
|
||
|
||
Hybrid topology; `bdft = sqft × thickness_in`; AES-GCM server secrets never in browser; Woo draft + `SLAB-UAT-*` force-draft; inference OFF for first claimable publish; Call 1/2 after Gate C still inside POC; Gate A docs freeze / Gate B run-host / Gate C first draft listing; env-agnostic deploy direction; online-only POC.
|
||
|
||
---
|
||
|
||
## 8. Non-goals
|
||
|
||
- No code, schema migrations, scaffold, or run-host inventory execution in this design pass.
|
||
- No TECH-SPEC or DATA-MODEL structural rewrite.
|
||
- No Diataxis split of PROMPTS tuning or CONTENT-WOO short publish list for POC.
|
||
- No product lock renegotiation.
|
||
- No commit/push until Ty signs this v2 (or a successor).
|
||
- N5 workspace review-package hygiene stays out of repo commits.
|
||
|
||
---
|
||
|
||
## 9. Open questions for Ty (max 3)
|
||
|
||
1. **PRD:** Archive with strong superseded header (recommended), or fix W6–W8/FR42 in place then archive?
|
||
2. **PM-DESIGN:** Delete after DoD green with provenance in AGENTS (recommended), or keep a trimmed open-defects file until Gate C is green?
|
||
3. **IMPL 3–5:** Full hybrid rewrite in the same docs stack as Phase 2/6 cleanup (recommended for less guard complexity), or minimal wrong-path deletes + AGENTS “incomplete rewrite” guard until a later commit?
|
||
|
||
---
|
||
|
||
## 10. Consider-class items folded or deferred
|
||
|
||
| Item | v2 handling |
|
||
|---|---|
|
||
| W1 examples | Folded into commit 1 |
|
||
| CONTENT-WOO attributes | Folded into commit 3 |
|
||
| Corrected Caddy fragment | Folded into commit 2 target text |
|
||
| ARCHITECTURE normative topology | Folded into §4.1 |
|
||
| FR42 vs archive | Open Q1 |
|
||
| Confidence 0.7 relocate | Folded into Phase 5 / PROMPTS note in §4.4 |
|
||
| Step-4 split | Folded into commits 3–4 |
|
||
| N5 workspace | Non-goal |
|
||
|
||
---
|
||
|
||
## 11. No repo writes confirmed
|
||
|
||
This v2 document lives at `/workspace/slabuploader-docs-refactor-proposal-v2.md` only. Interrogate verdict at `/workspace/slabuploader-docs-refactor-interrogate.md`. Original v1 left in place for audit. **No changes under** `/workspace/gitea-atd/Ty_Tech/SlabUploader/`. No git commit. No push.
|