feat(F-094): completed feature
This commit is contained in:
14
work/artifacts/F-094/implementer.md
Normal file
14
work/artifacts/F-094/implementer.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# F-094 — Implementer evidence
|
||||
|
||||
## Changes
|
||||
|
||||
- Added `VariantManager` to the Publish tab with a plain-language explanation of variants, SKU, and EAN.
|
||||
- Added SKU-required/EAN-optional variant creation using the existing `POST /products/:id/variants` API.
|
||||
- Added existing variant list and inline success/conflict feedback.
|
||||
- Added `productsApi.createVariant`.
|
||||
- Updated Pricing and Inventory empty states to point to the now-existing Publish workflow.
|
||||
|
||||
## Validation
|
||||
|
||||
- Admin `npx tsc --noEmit` → exit 0
|
||||
- Admin ESLint on touched files → 0 errors (pre-existing warnings only)
|
||||
14
work/artifacts/F-094/leader-close.json
Normal file
14
work/artifacts/F-094/leader-close.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"feature_id": "F-094",
|
||||
"agent": "leader",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "F-094 adds an understandable variant creation workflow to Publish and fixes the misleading empty-state guidance.",
|
||||
"evidence": [
|
||||
"reviewer.json verdict=APPROVED",
|
||||
"security.json verdict=APPROVED",
|
||||
"qa.json verdict=APPROVED",
|
||||
"Root tests: 133 passed, 56 skipped",
|
||||
"scripts/verify.sh exit 0"
|
||||
],
|
||||
"timestamp": "2026-08-20T20:01:50Z"
|
||||
}
|
||||
13
work/artifacts/F-094/qa.json
Normal file
13
work/artifacts/F-094/qa.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"feature_id": "F-094",
|
||||
"agent": "qa",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "Publish variant management passes admin checks, the root test suite, and harness verification.",
|
||||
"evidence": [
|
||||
"Admin npx tsc --noEmit exit 0",
|
||||
"Admin ESLint touched files exit 0 with warnings only",
|
||||
"Root tests: 133 passed, 56 skipped",
|
||||
"scripts/verify.sh exit 0"
|
||||
],
|
||||
"timestamp": "2026-08-20T20:01:40Z"
|
||||
}
|
||||
14
work/artifacts/F-094/reviewer.json
Normal file
14
work/artifacts/F-094/reviewer.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"feature_id": "F-094",
|
||||
"agent": "reviewer",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "Publish now contains a clear variant workflow backed by the existing create/list endpoints, and empty states point to a real action.",
|
||||
"evidence": [
|
||||
"VariantManager explains sellable variants, SKU, and EAN",
|
||||
"Create form uses SKU required and EAN optional",
|
||||
"Successful creation updates the list without reload",
|
||||
"Duplicate API conflicts are shown to the operator",
|
||||
"Pricing and Inventory messages no longer reference a missing UI"
|
||||
],
|
||||
"timestamp": "2026-08-20T20:01:10Z"
|
||||
}
|
||||
13
work/artifacts/F-094/security.json
Normal file
13
work/artifacts/F-094/security.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"feature_id": "F-094",
|
||||
"agent": "security",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "The UI uses the existing authenticated admin variant endpoint; server-side SKU/EAN validation and uniqueness remain authoritative.",
|
||||
"evidence": [
|
||||
"No new backend route or authorization bypass",
|
||||
"SKU is required in the UI and backend schema validates all fields",
|
||||
"Duplicate SKU/EAN remains rejected by database constraints",
|
||||
"No secrets, unsafe HTML, or dependencies added"
|
||||
],
|
||||
"timestamp": "2026-08-20T20:01:20Z"
|
||||
}
|
||||
@@ -1,14 +1,22 @@
|
||||
# Feature actual
|
||||
|
||||
## Feature activa: F-093 (in_progress) — Inventory search by product name or EAN
|
||||
## Feature activa: F-094 (in_progress) — Create and explain product variants from Publish tab
|
||||
|
||||
Backlog: 161 features (151 done, 9 pending, 1 in_progress).
|
||||
Backlog: 162 features (152 done, 9 pending, 1 in_progress).
|
||||
|
||||
Últimas features cerradas: **F-080**, **F-081**, **F-082**, **F-083**, **F-084**, **F-085**, **F-086**, **F-087**.
|
||||
|
||||
## Incidencia actual (2026-08-20)
|
||||
|
||||
La búsqueda de Inventario envía `q`, pero el listado admin solo filtra por nombre de producto. F-093 añade coincidencias por EAN de variante y actualiza el placeholder a EAN o nombre.
|
||||
Precios e Inventario indican que las variantes se crean desde Publicar, pero Publicar no ofrece creación ni explicación. F-094 añade la gestión de variantes allí.
|
||||
|
||||
## Última incidencia resuelta (2026-08-20)
|
||||
|
||||
F-093 cerrada con todos los gates aprobados. Inventario busca ahora por EAN o nombre de producto.
|
||||
|
||||
## Incidencia anterior (2026-08-20)
|
||||
|
||||
La búsqueda de Inventario enviaba `q`, pero el listado admin solo filtraba por nombre de producto.
|
||||
|
||||
## Última incidencia resuelta (2026-08-20)
|
||||
|
||||
|
||||
@@ -1,62 +1,13 @@
|
||||
{
|
||||
"feature_id": "F-093",
|
||||
"feature_id": "F-094",
|
||||
"stage": "close",
|
||||
"agent": "leader",
|
||||
"action": "Validate F-093 gates and close inventory EAN/name search",
|
||||
"action": "Validate F-094 gates and close variant workflow",
|
||||
"state": "running",
|
||||
"next_agent": "leader",
|
||||
"waiting_for": "verify.sh green",
|
||||
"updated_at": "2026-08-20T19:57:34Z",
|
||||
"updated_at": "2026-08-20T20:01:42Z",
|
||||
"timeline": [
|
||||
{
|
||||
"ts": "2026-08-20T19:44:59Z",
|
||||
"agent": "leader",
|
||||
"stage": "intake",
|
||||
"state": "running",
|
||||
"message": "Triage repeated variant PATCH 409 and opaque SKU/EAN conflict feedback"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-20T19:45:13Z",
|
||||
"agent": "implementer",
|
||||
"stage": "build",
|
||||
"state": "running",
|
||||
"message": "Add field-specific SKU/EAN conflict messages and guard duplicate in-flight saves"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-20T19:46:54Z",
|
||||
"agent": "reviewer",
|
||||
"stage": "review_gate",
|
||||
"state": "running",
|
||||
"message": "Review duplicate variant conflict mapping and in-flight save guard"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-20T19:47:03Z",
|
||||
"agent": "security",
|
||||
"stage": "security_gate",
|
||||
"state": "running",
|
||||
"message": "Check F-091 uniqueness enforcement and error disclosure"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-20T19:47:11Z",
|
||||
"agent": "qa",
|
||||
"stage": "qa_gate",
|
||||
"state": "running",
|
||||
"message": "Run F-091 typecheck, tests, lint, and verify"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-20T19:47:22Z",
|
||||
"agent": "leader",
|
||||
"stage": "close",
|
||||
"state": "running",
|
||||
"message": "Validate F-091 gates and close SKU/EAN conflict fix"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-20T19:47:40Z",
|
||||
"agent": "leader",
|
||||
"stage": "close",
|
||||
"state": "done",
|
||||
"message": "F-091 cerrado: conflictos SKU/EAN identificados y doble envío prevenido"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-20T19:48:12Z",
|
||||
"agent": "leader",
|
||||
@@ -147,6 +98,55 @@
|
||||
"stage": "close",
|
||||
"state": "running",
|
||||
"message": "Validate F-093 gates and close inventory EAN/name search"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-20T19:58:08Z",
|
||||
"agent": "leader",
|
||||
"stage": "close",
|
||||
"state": "done",
|
||||
"message": "F-093 cerrado: búsqueda de Inventario por EAN o nombre"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-20T19:58:26Z",
|
||||
"agent": "leader",
|
||||
"stage": "intake",
|
||||
"state": "running",
|
||||
"message": "Triage missing variant creation UI and explanation in Publish tab"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-20T19:58:57Z",
|
||||
"agent": "implementer",
|
||||
"stage": "build",
|
||||
"state": "running",
|
||||
"message": "Add Publish variant manager, API create method, and clear empty-state guidance"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-20T20:00:59Z",
|
||||
"agent": "reviewer",
|
||||
"stage": "review_gate",
|
||||
"state": "running",
|
||||
"message": "Review Publish variant creation UX and API integration"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-20T20:01:10Z",
|
||||
"agent": "security",
|
||||
"stage": "security_gate",
|
||||
"state": "running",
|
||||
"message": "Check variant creation validation, uniqueness, and authorization"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-20T20:01:22Z",
|
||||
"agent": "qa",
|
||||
"stage": "qa_gate",
|
||||
"state": "running",
|
||||
"message": "Run variant manager typecheck, tests, lint, and verify"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-20T20:01:42Z",
|
||||
"agent": "leader",
|
||||
"stage": "close",
|
||||
"state": "running",
|
||||
"message": "Validate F-094 gates and close variant workflow"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user