feat(F-137): completed feature

This commit is contained in:
chattie
2026-08-21 21:03:28 +02:00
parent 8ef3faad42
commit 852b1c1873
60 changed files with 916 additions and 292 deletions

View File

@@ -5439,6 +5439,83 @@
"close": true
},
"completed_at": "2026-08-21T16:48:24Z"
},
{
"id": "F-136",
"type": "fix",
"title": "Brand names Title Case + SEO title auto from name",
"description": "Brands DB has names like A.VOGEL, BIOCOP, BIOSPIRIT (all uppercase). Need: (1) data migration to Title Case (A.Vogel, Biocop, Biospirit). (2) Brand create/edit form auto-fills seo_title from name when blank. (3) Frontend /marca/<slug> uses seo_title with name fallback.",
"priority": "med",
"risk": "low",
"status": "pending",
"created_at": "2026-08-21",
"gates": {
"reviewer": false,
"security": false,
"qa": false
}
},
{
"id": "F-137",
"type": "fix",
"title": "Remove 'Guardar precio' button in PriceStockSection, save prices via main 'Guardar cambios'",
"description": "apps/admin/src/features/products/components/sections/PriceStockSection.tsx:349 has its own 'Guardar precio' button that PUTs /api/pricing/variants/:id. User wants this removed — prices must save via the main 'Guardar cambios' button in ProductEditor.tsx:229 alongside the rest of the product payload.",
"priority": "high",
"risk": "low",
"status": "done",
"created_at": "2026-08-21",
"gates": {
"reviewer": true,
"security": true,
"qa": true,
"close": true
},
"completed_at": "2026-08-21T19:03:28Z"
},
{
"id": "F-138",
"type": "bug",
"title": "Auto-seed price row on variant creation to prevent 404 race window",
"description": "Variant 04bfcbc7 was created at 16:44:21 but price row only at 17:08:20 — 24-minute window where GET /api/pricing/variants/<id> returns 404 PRICING_PRICE_NOT_FOUND. Operator saw 3x 404 in console. Root cause: variant creation in catalog module does not insert into pricing_variant_prices. Fix: on CreateProductVariant, also INSERT a row with net_unit_amount_cents=0, vat_rate='general' (or use a sensible default). Add unique constraint check so re-seeding is no-op. Tests: integration for variant creation that confirms price row exists immediately after.",
"priority": "high",
"risk": "med",
"status": "pending",
"created_at": "2026-08-21",
"gates": {
"reviewer": false,
"security": false,
"qa": false
}
},
{
"id": "F-139",
"type": "bug",
"title": "Admin /admin/logs/stream SSE connection drops with ERR_NETWORK_IO_SUSPENDED",
"description": "Browser console shows: api/admin/logs/stream:1 ERR_NETWORK_IO_SUSPENDED. The Next.js catch-all proxy in apps/admin/src/app/api/[...path]/route.ts streams the SSE response correctly, but the SSE connection appears to drop on the client side. Probable causes: (a) proxy doesn't forward Connection: keep-alive correctly, (b) admin frontend doesn't reconnect on drop, (c) backend SSE endpoint closes on idle. Triage: inspect proxy headers + frontend EventSource usage, add reconnect logic, ensure backend sends keep-alive comments.",
"priority": "med",
"risk": "low",
"status": "pending",
"created_at": "2026-08-21",
"gates": {
"reviewer": false,
"security": false,
"qa": false
}
},
{
"id": "F-140",
"type": "feature",
"title": "Order detail page shows customer, shipping address, billing address, payment method",
"description": "apps/admin/src/app/(dashboard)/orders/[id]/page.tsx currently shows only items + state + shipping (tracking, courier, note). Missing: customer name/email/phone, shipping address, billing address, payment method + last 4 + state. Data lives in identity_users, users_addresses, payments_transactions. Fix: (1) backend GET /orders/:id joins + serializes customer/address/payment. (2) admin page renders new sections. (3) keep read-only — no edits from this page.",
"priority": "high",
"risk": "med",
"status": "pending",
"created_at": "2026-08-21",
"gates": {
"reviewer": false,
"security": false,
"qa": false
}
}
]
}