feat(reject-history): add materialized Pareto aggregate layer with feature-flagged rollout

Pre-compute 6-dimension metric cubes from cached LOT-level DataFrames so
interactive Pareto requests read compact snapshots instead of re-scanning
detail rows on every filter change. Includes single-flight build guard,
TTL/size guardrails, cross-filter exclude-self evaluation, safe legacy
fallback, response metadata exposure, telemetry counters, and a 3-stage
rollout plan (telemetry-only → build-enabled → read-through).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
egg
2026-03-04 08:05:02 +08:00
parent 98eea066ea
commit e79fb657a3
22 changed files with 2500 additions and 484 deletions

View File

@@ -30,8 +30,8 @@
"route": "/reject-history",
"name": "報廢歷史查詢",
"status": "released",
"drawer_id": "drawer-2",
"order": 4
"drawer_id": "drawer",
"order": 1
},
{
"route": "/wip-detail",
@@ -83,28 +83,28 @@
"name": "設備維修查詢",
"status": "released",
"drawer_id": "drawer",
"order": 1
"order": 2
},
{
"route": "/query-tool",
"name": "批次追蹤工具",
"status": "released",
"drawer_id": "drawer",
"drawer_id": "drawer-3",
"order": 2
},
{
"route": "/mid-section-defect",
"name": "製程不良追溯分析",
"status": "released",
"drawer_id": "drawer",
"drawer_id": "drawer-3",
"order": 3
},
{
"route": "/material-trace",
"name": "原物料追溯查詢",
"status": "released",
"drawer_id": "drawer",
"order": 4
"drawer_id": "drawer-3",
"order": 3
},
{
"route": "/admin/pages",
@@ -152,6 +152,12 @@
"name": "歷史報表",
"order": 2,
"admin_only": false
},
{
"id": "drawer-3",
"name": "追溯工具",
"order": 4,
"admin_only": false
}
]
}