feat(F-089): completed feature
This commit is contained in:
@@ -4059,6 +4059,38 @@
|
|||||||
"close": true
|
"close": true
|
||||||
},
|
},
|
||||||
"completed_at": "2026-08-20T19:29:14Z"
|
"completed_at": "2026-08-20T19:29:14Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "F-089",
|
||||||
|
"type": "fix",
|
||||||
|
"title": "Product listing link uses storefront /productos route instead of frontend /products route",
|
||||||
|
"problem": "The active product link in the admin product listing points to the storefront Spanish route /productos/:slug, but the customer frontend served on port 3003 exposes product detail at /products/:slug. Clicking the listing link lands on the wrong application route.",
|
||||||
|
"goal": "Use the frontend customer route /products/:slug for the product listing link so operators open the correct product page on port 3003.",
|
||||||
|
"scope_in": [
|
||||||
|
"admin product listing"
|
||||||
|
],
|
||||||
|
"scope_out": [
|
||||||
|
"No backend or storefront changes; no URL redesign"
|
||||||
|
],
|
||||||
|
"priority": "med",
|
||||||
|
"risk": "low",
|
||||||
|
"description": "Problem: The active product link in the admin product listing points to the storefront Spanish route /productos/:slug, but the customer frontend served on port 3003 exposes product detail at /products/:slug. Clicking the listing link lands on the wrong application route.. Goal: Use the frontend customer route /products/:slug for the product listing link so operators open the correct product page on port 3003.. Scope IN: admin product listing. Scope OUT: No backend or storefront changes; no URL redesign. Type: fix. Priority: med. Risk: low.",
|
||||||
|
"acceptance": [
|
||||||
|
"- Active product links from the admin listing use http://192.168.18.93:3003/products/:slug",
|
||||||
|
"- The link no longer uses the /productos/:slug path",
|
||||||
|
"- Existing target blank and safe rel attributes remain unchanged",
|
||||||
|
"- Admin typecheck/lint pass",
|
||||||
|
"- verify.sh is green"
|
||||||
|
],
|
||||||
|
"status": "done",
|
||||||
|
"created_at": "2026-08-20",
|
||||||
|
"gates": {
|
||||||
|
"reviewer": true,
|
||||||
|
"security": true,
|
||||||
|
"qa": true,
|
||||||
|
"close": true
|
||||||
|
},
|
||||||
|
"completed_at": "2026-08-20T19:34:12Z"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -262,7 +262,7 @@ export default function ProductsPage() {
|
|||||||
<td className="px-4 py-3">
|
<td className="px-4 py-3">
|
||||||
{p.state === 'active' ? (
|
{p.state === 'active' ? (
|
||||||
<a
|
<a
|
||||||
href={`http://192.168.18.93:3003/productos/${p.slug}`}
|
href={`http://192.168.18.93:3003/products/${p.slug}`}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
title="Ver en la tienda"
|
title="Ver en la tienda"
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
16
work/artifacts/F-089/implementer.md
Normal file
16
work/artifacts/F-089/implementer.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# F-089 — Implementer evidence
|
||||||
|
|
||||||
|
## Change
|
||||||
|
|
||||||
|
Updated the active-product link in `project/apps/admin/src/app/(dashboard)/products/page.tsx`:
|
||||||
|
|
||||||
|
- Before: `http://192.168.18.93:3003/productos/${p.slug}`
|
||||||
|
- After: `http://192.168.18.93:3003/products/${p.slug}`
|
||||||
|
|
||||||
|
The link still opens in a new tab and keeps `rel="noopener noreferrer"` and click propagation behavior unchanged.
|
||||||
|
|
||||||
|
## Validation
|
||||||
|
|
||||||
|
- `cd project/apps/admin && npx tsc --noEmit` → exit 0
|
||||||
|
- `cd project/apps/admin && npx eslint 'src/app/(dashboard)/products/page.tsx'` → 0 errors (3 pre-existing warnings)
|
||||||
|
- Search confirms the old `3003/productos/${p.slug}` link is absent from the admin product listing.
|
||||||
15
work/artifacts/F-089/leader-close.json
Normal file
15
work/artifacts/F-089/leader-close.json
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"feature_id": "F-089",
|
||||||
|
"agent": "leader",
|
||||||
|
"verdict": "APPROVED",
|
||||||
|
"summary": "F-089 corrects the admin product listing link to the customer frontend /products/:slug route.",
|
||||||
|
"evidence": [
|
||||||
|
"reviewer.json verdict=APPROVED",
|
||||||
|
"security.json verdict=APPROVED",
|
||||||
|
"qa.json verdict=APPROVED",
|
||||||
|
"scripts/verify.sh exit 0",
|
||||||
|
"project/apps/admin npx tsc --noEmit exit 0",
|
||||||
|
"Old /productos listing path absent; new /products path present"
|
||||||
|
],
|
||||||
|
"timestamp": "2026-08-20T19:34:20Z"
|
||||||
|
}
|
||||||
14
work/artifacts/F-089/qa.json
Normal file
14
work/artifacts/F-089/qa.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"feature_id": "F-089",
|
||||||
|
"agent": "qa",
|
||||||
|
"verdict": "APPROVED",
|
||||||
|
"summary": "The admin listing route correction passes static route regression, TypeScript, lint, and harness verification.",
|
||||||
|
"evidence": [
|
||||||
|
"Admin listing contains http://192.168.18.93:3003/products/${p.slug}",
|
||||||
|
"No old 3003/productos/${p.slug} listing link remains",
|
||||||
|
"project/apps/admin npx tsc --noEmit exit 0",
|
||||||
|
"project/apps/admin eslint touched page exit 0 with warnings only",
|
||||||
|
"scripts/verify.sh exit 0"
|
||||||
|
],
|
||||||
|
"timestamp": "2026-08-20T19:34:10Z"
|
||||||
|
}
|
||||||
13
work/artifacts/F-089/reviewer.json
Normal file
13
work/artifacts/F-089/reviewer.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"feature_id": "F-089",
|
||||||
|
"agent": "reviewer",
|
||||||
|
"verdict": "APPROVED",
|
||||||
|
"summary": "The admin product listing now links active products to the customer frontend's /products/:slug route; unrelated link behavior is unchanged.",
|
||||||
|
"evidence": [
|
||||||
|
"Changed only project/apps/admin/src/app/(dashboard)/products/page.tsx",
|
||||||
|
"Old /productos/:slug path removed from the listing link",
|
||||||
|
"New /products/:slug path matches project/frontend/src/app/products/[slug]/page.tsx",
|
||||||
|
"Admin TypeScript check passes"
|
||||||
|
],
|
||||||
|
"timestamp": "2026-08-20T19:33:40Z"
|
||||||
|
}
|
||||||
13
work/artifacts/F-089/security.json
Normal file
13
work/artifacts/F-089/security.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"feature_id": "F-089",
|
||||||
|
"agent": "security",
|
||||||
|
"verdict": "APPROVED",
|
||||||
|
"summary": "The change only corrects a same-host route path. Existing new-tab protections remain in place and no user-controlled URL construction or dependency changes were introduced.",
|
||||||
|
"evidence": [
|
||||||
|
"URL remains the fixed configured frontend host on port 3003",
|
||||||
|
"Slug interpolation behavior is unchanged",
|
||||||
|
"target=\"_blank\" retains rel=\"noopener noreferrer\"",
|
||||||
|
"No backend, auth, dependency, or secret changes"
|
||||||
|
],
|
||||||
|
"timestamp": "2026-08-20T19:33:50Z"
|
||||||
|
}
|
||||||
@@ -1,11 +1,15 @@
|
|||||||
# Feature actual
|
# Feature actual
|
||||||
|
|
||||||
## Feature activa: ninguna — F-088 cerrada
|
## Feature activa: F-089 (in_progress) — Product listing link uses `/productos` instead of frontend `/products`
|
||||||
|
|
||||||
Backlog: 156 features (147 done, 9 pending, 0 in_progress).
|
Backlog: 157 features (147 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**.
|
Últimas features cerradas: **F-080**, **F-081**, **F-082**, **F-083**, **F-084**, **F-085**, **F-086**, **F-087**.
|
||||||
|
|
||||||
|
## Incidencia actual (2026-08-20)
|
||||||
|
|
||||||
|
El enlace de producto del listado admin apunta a `http://192.168.18.93:3003/productos/<slug>`, pero el frontend customer usa `/products/<slug>`. F-089 corrige únicamente ese path.
|
||||||
|
|
||||||
## Última incidencia resuelta (2026-08-20)
|
## Última incidencia resuelta (2026-08-20)
|
||||||
|
|
||||||
F-088 cerrada con todos los gates aprobados. El admin responde HTTP 200 en `http://192.168.18.93:3004/`.
|
F-088 cerrada con todos los gates aprobados. El admin responde HTTP 200 en `http://192.168.18.93:3004/`.
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"feature_id": "F-088",
|
"feature_id": "F-089",
|
||||||
"stage": "close",
|
"stage": "close",
|
||||||
"agent": "leader",
|
"agent": "leader",
|
||||||
"action": "F-088 cerrado: admin :3004 verificado HTTP 200 y verify.sh verde",
|
"action": "Validate F-089 gates and close route correction",
|
||||||
"state": "done",
|
"state": "running",
|
||||||
"next_agent": "leader",
|
"next_agent": "leader",
|
||||||
"waiting_for": "Seleccionar la siguiente feature pending",
|
"waiting_for": "verify.sh green",
|
||||||
"updated_at": "2026-08-20T19:29:27Z",
|
"updated_at": "2026-08-20T19:34:01Z",
|
||||||
"timeline": [
|
"timeline": [
|
||||||
{
|
{
|
||||||
"ts": "2026-08-20T19:15:36Z",
|
"ts": "2026-08-20T19:15:36Z",
|
||||||
@@ -56,6 +56,48 @@
|
|||||||
"stage": "close",
|
"stage": "close",
|
||||||
"state": "done",
|
"state": "done",
|
||||||
"message": "F-088 cerrado: admin :3004 verificado HTTP 200 y verify.sh verde"
|
"message": "F-088 cerrado: admin :3004 verificado HTTP 200 y verify.sh verde"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-08-20T19:32:56Z",
|
||||||
|
"agent": "leader",
|
||||||
|
"stage": "intake",
|
||||||
|
"state": "running",
|
||||||
|
"message": "Triage product listing link route mismatch: /productos vs frontend /products"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-08-20T19:33:07Z",
|
||||||
|
"agent": "implementer",
|
||||||
|
"stage": "build",
|
||||||
|
"state": "running",
|
||||||
|
"message": "Change admin product listing link from /productos/:slug to frontend /products/:slug"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-08-20T19:33:31Z",
|
||||||
|
"agent": "reviewer",
|
||||||
|
"stage": "review_gate",
|
||||||
|
"state": "running",
|
||||||
|
"message": "Review corrected customer frontend route in admin product listing"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-08-20T19:33:41Z",
|
||||||
|
"agent": "security",
|
||||||
|
"stage": "security_gate",
|
||||||
|
"state": "running",
|
||||||
|
"message": "Check F-089 link-only change for unsafe URL or target behavior"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-08-20T19:33:49Z",
|
||||||
|
"agent": "qa",
|
||||||
|
"stage": "qa_gate",
|
||||||
|
"state": "running",
|
||||||
|
"message": "Run F-089 route regression, admin typecheck/lint, and verify"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-08-20T19:34:01Z",
|
||||||
|
"agent": "leader",
|
||||||
|
"stage": "close",
|
||||||
|
"state": "running",
|
||||||
|
"message": "Validate F-089 gates and close route correction"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user