16 KiB
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:
- AGENTS.md stays the agent working contract. Hard locks stay verbatim. Pointers add depth; they do not replace lock text.
- Named SoT hierarchy for Woo safety and secrets (agent-facing policy vs schema vs payload).
- Gate C hybrid capture slice is written before Phase 2 body delete.
- 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.
- PRD archive is allowed only with reference rewrite + superseded FR header (or fix W6–W8 first).
- Contract wrong-code lines (OPENAPI B1/W1, AGENTS/IMPL W2) land in commit 1 with greppable DoD before PM-DESIGN dies.
- 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_KEYenv 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:
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:
- Docs DoD greps green (section 6).
- Gate A/B/C table lives in AGENTS.
- Freeze SHA-to-lock one-liner or small table lifted into AGENTS.
- Residual open items (if any) listed under AGENTS “open doc defects,” not only in chat.
- 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
- OPENAPI: PUT stores client-sent derived fields (no recompute as SoT). POST returns
calibrated. Update examples too (W1). - AGENTS + IMPL Phase 0: TV-1 through TV-10 (W2).
- 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). - AGENTS: fix known-stale list vs HEAD (drop false FR4
/12warning).
Checkpoint: safe for agents on contract + Phase 0/Gate C docs. Still may have duplicate prose elsewhere.
Commit 2 — Env-agnostic deploy
- DEPLOYMENT + AGENTS §9 + README + IMPL host wording per env outline.
- Add
deploy/INVENTORY.mdtemplate. - Corrected Caddy fragment (
handle /api/*then frontendhandle). - Drop RemBG/ruler/1000px as deploy SoT.
Commit 3 — Factual fixes in place
- CONTENT-WOO: W4, W5, W11, attributes bullet (C4), cite AGENTS for safety policy.
- DATA-MODEL / OPENAPI: W3 sheet prefs out of server settings; N1 client not PWA.
- ARCHITECTURE: N3 status line; keep topology tables.
- IMPL Phases 3–5 hybrid alignment (or AGENTS guard left on if partial).
Commit 4 — De-dupe and archive
- README/ARCHITECTURE/CONTENT-WOO: replace long restatements with pointers where AGENTS/TECH-SPEC already state the lock (locks remain in AGENTS).
- Archive PRD with header + rewrite all live references.
- Copy Gate table + freeze provenance into AGENTS if not already.
- 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→readyas a slab status. - No DEPLOYMENT normative SoT that RemBG/ruler/
output_px1000 define the happy path. - No CONTENT-WOO “JPEG bytes” as processed listing media SoT (PNG).
- No active AGENTS line claiming PRD FR4 still uses
/12if PRD FR4 is already correct.
Lock presences in AGENTS (verbatim):
bdftidentity / 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.mdexists 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)
- PRD: Archive with strong superseded header (recommended), or fix W6–W8/FR42 in place then archive?
- PM-DESIGN: Delete after DoD green with provenance in AGENTS (recommended), or keep a trimmed open-defects file until Gate C is green?
- 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.