feat(F-167): completed feature

This commit is contained in:
chattie
2026-08-22 19:17:36 +02:00
parent 767860d546
commit 56eee88315
11 changed files with 74 additions and 55 deletions

View File

@@ -6853,13 +6853,15 @@
"description": "Order edit layout uses three balanced columns: Actions/Products/Payment, Customer/Shipping and billing addresses, Shipping/Summary/History.", "description": "Order edit layout uses three balanced columns: Actions/Products/Payment, Customer/Shipping and billing addresses, Shipping/Summary/History.",
"priority": "high", "priority": "high",
"risk": "med", "risk": "med",
"status": "pending", "status": "done",
"created_at": "2026-08-22", "created_at": "2026-08-22",
"gates": { "gates": {
"reviewer": false, "reviewer": true,
"security": false, "security": true,
"qa": false "qa": true,
} "close": true
},
"completed_at": "2026-08-22T17:17:36Z"
}, },
{ {
"id": "F-168", "id": "F-168",

View File

@@ -365,7 +365,7 @@ export default function OrderDetailPage() {
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6"> <div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
{/* Main content */} {/* Main content */}
<div className="lg:col-span-2 space-y-6"> <div className="space-y-6">
{/* Actions */} {/* Actions */}
{allowed.length > 0 && ( {allowed.length > 0 && (
<div className="bg-white border border-gray-200 rounded-xl p-6"> <div className="bg-white border border-gray-200 rounded-xl p-6">
@@ -521,9 +521,43 @@ export default function OrderDetailPage() {
</div> </div>
)} )}
</div> </div>
<div className="bg-white border border-gray-200 rounded-xl p-6">
<h2 className="font-bold text-gray-900 mb-4">Pago</h2>
{order.payment ? (
<div className="space-y-1 text-sm">
<div className="flex justify-between">
<span className="text-gray-600">Método</span>
<span className="font-medium text-gray-900 capitalize">{order.payment.provider.replace(/_/g, ' ')}</span>
</div>
{order.payment.last4 && (
<div className="flex justify-between">
<span className="text-gray-600">Últimos 4</span>
<span className="font-mono font-medium text-gray-900">····{order.payment.last4}</span>
</div>
)}
<div className="flex justify-between">
<span className="text-gray-600">Importe</span>
<span className="font-medium text-gray-900">{formatPrice(order.payment.amountCents)}</span>
</div>
<div className="flex justify-between items-center">
<span className="text-gray-600">Estado</span>
<span className={`inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium ${
order.payment.status === 'succeeded' ? 'bg-green-100 text-green-800' :
order.payment.status === 'failed' ? 'bg-red-100 text-red-800' :
order.payment.status === 'refunded' ? 'bg-amber-100 text-amber-800' :
'bg-gray-100 text-gray-800'
}`}>
{order.payment.status}
</span>
</div>
</div>
) : (
<p className="text-sm text-gray-500">No hay una transacción de pago registrada para este pedido.</p>
)}
</div>
</div> </div>
{/* Sidebar */} {/* Customer column */}
<div className="space-y-6"> <div className="space-y-6">
{/* F-140: Customer + Addresses + Payment */} {/* F-140: Customer + Addresses + Payment */}
<div className="bg-white border border-gray-200 rounded-xl p-6"> <div className="bg-white border border-gray-200 rounded-xl p-6">
@@ -572,40 +606,10 @@ export default function OrderDetailPage() {
)} )}
</div> </div>
<div className="bg-white border border-gray-200 rounded-xl p-6"> </div>
<h2 className="font-bold text-gray-900 mb-4">Pago</h2>
{order.payment ? ( {/* Shipping column */}
<div className="space-y-1 text-sm"> <div className="space-y-6">
<div className="flex justify-between">
<span className="text-gray-600">Método</span>
<span className="font-medium text-gray-900 capitalize">{order.payment.provider.replace(/_/g, ' ')}</span>
</div>
{order.payment.last4 && (
<div className="flex justify-between">
<span className="text-gray-600">Últimos 4</span>
<span className="font-mono font-medium text-gray-900">····{order.payment.last4}</span>
</div>
)}
<div className="flex justify-between">
<span className="text-gray-600">Importe</span>
<span className="font-medium text-gray-900">{formatPrice(order.payment.amountCents)}</span>
</div>
<div className="flex justify-between items-center">
<span className="text-gray-600">Estado</span>
<span className={`inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium ${
order.payment.status === 'succeeded' ? 'bg-green-100 text-green-800' :
order.payment.status === 'failed' ? 'bg-red-100 text-red-800' :
order.payment.status === 'refunded' ? 'bg-amber-100 text-amber-800' :
'bg-gray-100 text-gray-800'
}`}>
{order.payment.status}
</span>
</div>
</div>
) : (
<p className="text-sm text-gray-500">No hay una transacción de pago registrada para este pedido.</p>
)}
</div>
{/* F-140 already shown above — keep existing Envío section */} {/* F-140 already shown above — keep existing Envío section */}
{/* Envío */} {/* Envío */}
<div className="bg-white border border-gray-200 rounded-xl p-6"> <div className="bg-white border border-gray-200 rounded-xl p-6">

View File

@@ -0,0 +1,3 @@
# F-167
Use three independent responsive column wrappers, avoiding shared CSS-grid row heights.

View File

@@ -0,0 +1,3 @@
# F-167
Pedido usa tres columnas equilibradas en escritorio.

View File

@@ -0,0 +1,3 @@
# F-167
Order editor now has three independent desktop columns: Actions/Products/Payment; Customer/Shipping address/Billing address; Shipping/Summary/History. Mobile remains stacked. Admin build/typecheck pass.

View File

@@ -0,0 +1 @@
{"feature_id":"F-167","agent":"leader","stage":"close","verdict":"APPROVED","checks":[{"item":"all gates/build/verify","ok":true}],"issues":[]}

View File

@@ -0,0 +1 @@
{"feature_id":"F-167","agent":"qa","stage":"qa_gate","verdict":"APPROVED","checks":[{"item":"three columns","ok":true},{"item":"build/typecheck","ok":true}],"issues":[]}

View File

@@ -0,0 +1 @@
{"feature_id":"F-167","agent":"reviewer","stage":"review_gate","verdict":"APPROVED","checks":[{"item":"exact section distribution","ok":true},{"item":"responsive stack","ok":true}],"issues":[]}

View File

@@ -0,0 +1 @@
{"feature_id":"F-167","agent":"security","stage":"security_gate","verdict":"APPROVED","checks":[{"item":"presentation only","ok":true}],"issues":[]}

View File

@@ -1,3 +1,3 @@
# F-172My Account session loop # F-167 — Three-column order editor
Storefront login receives `mdv_session`, while /api/auth/me and logout incorrectly use `session_token`. Align proxy routes to the backend cookie so hydration/navigation preserves the authenticated user. Desktop column 1: Actions, Products, Payment. Column 2: Customer, Shipping address, Billing address. Column 3: Shipping controls, Summary, History. Mobile remains a readable single stack.

View File

@@ -1,64 +1,64 @@
{ {
"feature_id": "F-172", "feature_id": "F-167",
"stage": "close", "stage": "close",
"agent": "leader", "agent": "leader",
"action": "close", "action": "close",
"state": "running", "state": "running",
"next_agent": "leader", "next_agent": "leader",
"waiting_for": "Seleccionar una feature pending y actualizar este estado", "waiting_for": "Seleccionar una feature pending y actualizar este estado",
"updated_at": "2026-08-22T17:16:08Z", "updated_at": "2026-08-22T17:17:36Z",
"timeline": [ "timeline": [
{ {
"ts": "2026-08-22T17:15:07Z", "ts": "2026-08-22T17:16:49Z",
"agent": "leader", "agent": "leader",
"stage": "intake", "stage": "intake",
"state": "running", "state": "running",
"message": "Align storefront auth session cookie" "message": "Reflow order editor into three balanced columns"
}, },
{ {
"ts": "2026-08-22T17:15:07Z", "ts": "2026-08-22T17:16:49Z",
"agent": "architect", "agent": "architect",
"stage": "design", "stage": "design",
"state": "running", "state": "running",
"message": "design" "message": "design"
}, },
{ {
"ts": "2026-08-22T17:15:07Z", "ts": "2026-08-22T17:16:49Z",
"agent": "implementer", "agent": "implementer",
"stage": "build", "stage": "build",
"state": "running", "state": "running",
"message": "Fix storefront session cookie" "message": "Reflow order sections into three columns"
}, },
{ {
"ts": "2026-08-22T17:16:07Z", "ts": "2026-08-22T17:17:36Z",
"agent": "reviewer", "agent": "reviewer",
"stage": "review_gate", "stage": "review_gate",
"state": "running", "state": "running",
"message": "review" "message": "review"
}, },
{ {
"ts": "2026-08-22T17:16:07Z", "ts": "2026-08-22T17:17:36Z",
"agent": "security", "agent": "security",
"stage": "security_gate", "stage": "security_gate",
"state": "running", "state": "running",
"message": "security" "message": "security"
}, },
{ {
"ts": "2026-08-22T17:16:07Z", "ts": "2026-08-22T17:17:36Z",
"agent": "qa", "agent": "qa",
"stage": "qa_gate", "stage": "qa_gate",
"state": "running", "state": "running",
"message": "qa" "message": "qa"
}, },
{ {
"ts": "2026-08-22T17:16:08Z", "ts": "2026-08-22T17:17:36Z",
"agent": "documenter", "agent": "documenter",
"stage": "document", "stage": "document",
"state": "running", "state": "running",
"message": "document" "message": "document"
}, },
{ {
"ts": "2026-08-22T17:16:08Z", "ts": "2026-08-22T17:17:36Z",
"agent": "leader", "agent": "leader",
"stage": "close", "stage": "close",
"state": "running", "state": "running",