feat(review): S5 pricing rules + deterministic title/short desc + server-derived ready + Review UI

- backend/pricing.py: /admin/pricing CRUD (one flat $/bdft per species leaf, SETTINGS-35).
- backend/review.py: POST /slabs/{id}/review -> deterministic title + short description
  (7 leaf patterns, length ft/in split, thickness 1/8-in precision, METADATA-80/85/90),
  price suggestion (bdft x species rate, REVIEW-25), server-derived ready + missing set
  (REVIEW-5).
- frontend: create/review/Review.svelte (slab id, primary category, price override,
  ready state + generated copy) + dev toggle.
- tests: 3 pricing + 4 review tests (title no-dims, ready set, price suggestion,
  knife-blank dims).

Verified: pytest 43 passed; gates exit 0; npm build ok.
This commit is contained in:
2026-09-19 16:52:33 -07:00
parent 861c5e0dd1
commit 732310fdbe
7 changed files with 540 additions and 0 deletions
+6
View File
@@ -262,5 +262,11 @@ app.include_router(slabs_router)
from .photos import router as photos_router
app.include_router(photos_router)
from .pricing import router as pricing_router
app.include_router(pricing_router)
from .review import router as review_router
app.include_router(review_router)
# expose for tests
__all__ = ["app", "__version__"]