feat(F-089): completed feature
This commit is contained in:
@@ -4059,6 +4059,38 @@
|
||||
"close": true
|
||||
},
|
||||
"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">
|
||||
{p.state === 'active' ? (
|
||||
<a
|
||||
href={`http://192.168.18.93:3003/productos/${p.slug}`}
|
||||
href={`http://192.168.18.93:3003/products/${p.slug}`}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
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 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**.
|
||||
|
||||
## 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)
|
||||
|
||||
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",
|
||||
"agent": "leader",
|
||||
"action": "F-088 cerrado: admin :3004 verificado HTTP 200 y verify.sh verde",
|
||||
"state": "done",
|
||||
"action": "Validate F-089 gates and close route correction",
|
||||
"state": "running",
|
||||
"next_agent": "leader",
|
||||
"waiting_for": "Seleccionar la siguiente feature pending",
|
||||
"updated_at": "2026-08-20T19:29:27Z",
|
||||
"waiting_for": "verify.sh green",
|
||||
"updated_at": "2026-08-20T19:34:01Z",
|
||||
"timeline": [
|
||||
{
|
||||
"ts": "2026-08-20T19:15:36Z",
|
||||
@@ -56,6 +56,48 @@
|
||||
"stage": "close",
|
||||
"state": "done",
|
||||
"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