feat(modernization): promote deferred routes to in-scope and unify page header styles

Promote /tables, /excel-query, /query-tool, /mid-section-defect from
deferred to full shell-governed in-scope routes with canonical redirects,
content contracts, governance artifacts, and updated CI gates.

Unify all page header gradients to #667eea → #764ba2 and h1 font-size
to 24px for visual consistency across all dashboard pages. Remove
Native Route-View dev annotations from job-query, excel-query, and
query-tool headers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
egg
2026-02-12 13:20:06 +08:00
parent 0ed69ce326
commit c38b5f646a
67 changed files with 1073 additions and 252 deletions

View File

@@ -0,0 +1,27 @@
# Deferred Route Modernization Follow-up Artifacts
This directory stores execution artifacts for `deferred-route-modernization-follow-up`.
## Upstream Reference
- Phase 1: `docs/migration/full-modernization-architecture-blueprint/`
- Handoff: `docs/migration/full-modernization-architecture-blueprint/deferred_route_handoff.md`
## Core Governance
- `route_scope_matrix.json`: frozen in-scope deferred route matrix (promoted from phase 1 deferred).
- `governance_milestones.md`: completion and deprecation milestones for deferred-route phase.
- `exception_registry.json`: approved temporary exceptions with owner and milestone.
- `upstream_linkage.json`: explicit linkage to phase 1 handoff artifacts.
- `scope_boundary_note.md`: clarification that dev routes are eligible for modernization.
## Pre-Change Confirmation
- `pre_change_confirmation_template.md`: required fields and template.
- `pre_change_confirmations.json`: recorded per-route confirmations.
## Rollout Operations
- `rollout_runbook.md`: phase steps and hold points for deferred-route cutover.
- `rollback_controls.md`: per-route rollback and false-positive gate handling.
- `observability_checkpoints.md`: route/gate/rollback observability contract.

View File

@@ -0,0 +1,42 @@
{
"version": 1,
"change": "deferred-route-modernization-follow-up",
"fields": [
"id",
"type",
"scope",
"owner",
"introduced_by",
"reason",
"mitigation",
"status",
"milestone",
"tracking_issue"
],
"entries": [
{
"id": "style-excel-query-shell-tokens-no-fallback",
"type": "style",
"scope": "/excel-query",
"owner": "frontend-mes-reporting",
"introduced_by": "legacy-template",
"reason": "excel-query uses shell tokens (--portal-brand-start, --portal-brand-end, --portal-shadow-panel) without CSS fallback values; inherited from legacy era before shell token governance",
"mitigation": "add fallback values during content modernization cutover for /excel-query",
"status": "approved-temporary",
"milestone": "2026-03-19",
"tracking_issue": "deferred-route-modernization-follow-up/excel-query-style-hardening"
},
{
"id": "style-query-tool-shell-tokens-no-fallback",
"type": "style",
"scope": "/query-tool",
"owner": "frontend-mes-reporting",
"introduced_by": "legacy-template",
"reason": "query-tool uses shell tokens (--portal-brand-start, --portal-brand-end, --portal-shadow-panel) without CSS fallback values; inherited from legacy era before shell token governance",
"mitigation": "add fallback values during content modernization cutover for /query-tool",
"status": "approved-temporary",
"milestone": "2026-03-19",
"tracking_issue": "deferred-route-modernization-follow-up/query-tool-style-hardening"
}
]
}

View File

@@ -0,0 +1,39 @@
# Deferred Route Modernization Governance Milestones
## Upstream Reference
- Phase 1: `full-modernization-architecture-blueprint`
- Handoff: `docs/migration/full-modernization-architecture-blueprint/deferred_route_handoff.md`
## Phase Completion Criteria
A phase is complete only when all criteria below are true:
1. Route governance: 100% of in-scope deferred routes in `route_scope_matrix.json` have valid shell contract metadata and ownership with scope promoted to `in-scope`.
2. Style governance: deferred route-local styles do not introduce page-global selectors (`:root`, `body`) unless recorded in exception registry.
3. Quality governance: functional parity, visual checkpoints, accessibility checks, and performance budgets pass at configured gate severity.
4. Content safety governance: page-content parity evidence + manual acceptance sign-off exist for each migrated deferred route.
5. Bug carry-over governance: known-bug replay checks for migrated scope do not reproduce legacy defects.
6. Pre-change confirmation: each deferred route has an approved pre-change confirmation record before implementation begins.
## Legacy Deprecation Milestones
- 2026-02-19: deferred route contract CI completeness gate enabled in `warn` mode.
- 2026-02-26: deferred route contract CI completeness gate promoted to `block` mode.
- 2026-03-05: deferred route asset readiness gate promoted to `block` mode.
- 2026-03-12: runtime fallback posture retired for deferred routes in production policy.
- 2026-03-19: unresolved style exceptions past milestone fail modernization review.
## Route Cutover Sequence
Routes are cut over one at a time in the following planned order:
1. `/tables`
2. `/excel-query`
3. `/query-tool`
4. `/mid-section-defect`
Next route cutover is blocked until current route has:
- Parity pass (golden fixtures + interaction checks)
- Manual acceptance sign-off
- Known-bug replay pass

View File

@@ -0,0 +1,44 @@
# Deferred Route Modernization Observability Checkpoints
## Route Governance Signals
1. `navigation_contract_mismatch_total`
- Source: `/api/portal/navigation` diagnostics.
- Alert condition: non-zero for deferred-promoted routes.
2. `route_contract_missing_metadata_total`
- Source: route governance CI script.
- Alert condition: >0 in block mode for `/tables`, `/excel-query`, `/query-tool`, `/mid-section-defect`.
## Quality Gate Signals
1. `quality_gate_failed_total{gate_id}`
- Source: quality gate report.
- Alert condition: any mandatory gate failed for deferred-promoted routes.
2. `manual_acceptance_pending_routes`
- Source: manual acceptance records.
- Alert condition: cutover attempted with pending sign-off for deferred routes.
3. `pre_change_confirmation_missing`
- Source: pre-change confirmation records.
- Alert condition: implementation started without recorded confirmation.
## Fallback and Rollback Signals
1. `deferred_route_runtime_fallback_served_total`
- Should remain zero after fallback retirement milestone for each route.
2. `content_cutover_flag_rollbacks_total{route}`
- Track frequency per deferred route.
3. `legacy_bug_replay_failures_total{route}`
- Any non-zero indicates carry-over risk and blocks sign-off.
## Cutover Sequence Signals
1. `deferred_route_cutover_sequence_violation`
- Alert condition: route cutover attempted out of planned sequence.
2. `deferred_route_signoff_blocked_by_bug_replay`
- Alert condition: sign-off blocked due to reproduced legacy bug.

View File

@@ -0,0 +1,35 @@
# Pre-Change Confirmation Template (Deferred Route)
## Rule
Before any implementation work begins on a deferred route, a route-scoped pre-change confirmation MUST be recorded and approved. Implementation is BLOCKED until confirmation exists.
## Required Fields
1. **Route**: The deferred route path (e.g., `/tables`).
2. **Status Snapshot**: Current route status in page registry (e.g., `dev`, `released`).
3. **Scope Boundary Check**: Confirmation that the route is listed in `route_scope_matrix.json` as in-scope for this change.
4. **Contract Baseline Refs**: References to existing route contracts and content contracts that define expected behavior.
5. **Known-Bug Baseline Ref**: Reference to `known_bug_baseline.json` entry for this route (or confirmation that baseline is initialized).
6. **Rollback Flag Plan**: Planned feature flag key and rollback strategy for this route's cutover.
7. **Owner**: The person/team responsible for this route's modernization.
8. **Date**: Date of confirmation.
9. **Approved By**: Reviewer who approved the pre-change confirmation.
## Template
```
Route: /<route-name>
Status Snapshot: <dev|released>
Scope Boundary Check: confirmed in route_scope_matrix.json as in-scope
Contract Baseline Refs:
- Route contract: route_contracts.json#/<route-name>
- Content contract: route_content_contracts.json#/<route-name>
Known-Bug Baseline Ref: known_bug_baseline.json#/<route-name>
Rollback Flag Plan:
- Feature flag: modernization_feature_flags.json#/<route-name>.content_cutover_enabled
- Rollback strategy: fallback_to_legacy_route
Owner: <owner>
Date: <YYYY-MM-DD>
Approved By: <reviewer>
```

View File

@@ -0,0 +1,85 @@
{
"change": "deferred-route-modernization-follow-up",
"rule": "implementation is blocked for a route until its pre-change confirmation is recorded and approved",
"required_fields": [
"route",
"status_snapshot",
"scope_boundary_check",
"contract_baseline_refs",
"known_bug_baseline_ref",
"rollback_flag_plan",
"owner",
"date",
"approved_by"
],
"records": [
{
"route": "/tables",
"status_snapshot": "dev",
"scope_boundary_check": "confirmed in route_scope_matrix.json as in-scope (promoted from deferred)",
"contract_baseline_refs": {
"route_contract": "route_contracts.json#/tables",
"content_contract": "route_content_contracts.json#/tables"
},
"known_bug_baseline_ref": "known_bug_baseline.json#/tables",
"rollback_flag_plan": {
"feature_flag": "modernization_feature_flags.json#/tables.content_cutover_enabled",
"rollback_strategy": "fallback_to_legacy_route"
},
"owner": "frontend-mes-reporting",
"date": "2026-02-12",
"approved_by": "deferred-route-modernization-follow-up"
},
{
"route": "/excel-query",
"status_snapshot": "dev",
"scope_boundary_check": "confirmed in route_scope_matrix.json as in-scope (promoted from deferred)",
"contract_baseline_refs": {
"route_contract": "route_contracts.json#/excel-query",
"content_contract": "route_content_contracts.json#/excel-query"
},
"known_bug_baseline_ref": "known_bug_baseline.json#/excel-query",
"rollback_flag_plan": {
"feature_flag": "modernization_feature_flags.json#/excel-query.content_cutover_enabled",
"rollback_strategy": "fallback_to_legacy_route"
},
"owner": "frontend-mes-reporting",
"date": "2026-02-12",
"approved_by": "deferred-route-modernization-follow-up"
},
{
"route": "/query-tool",
"status_snapshot": "dev",
"scope_boundary_check": "confirmed in route_scope_matrix.json as in-scope (promoted from deferred)",
"contract_baseline_refs": {
"route_contract": "route_contracts.json#/query-tool",
"content_contract": "route_content_contracts.json#/query-tool"
},
"known_bug_baseline_ref": "known_bug_baseline.json#/query-tool",
"rollback_flag_plan": {
"feature_flag": "modernization_feature_flags.json#/query-tool.content_cutover_enabled",
"rollback_strategy": "fallback_to_legacy_route"
},
"owner": "frontend-mes-reporting",
"date": "2026-02-12",
"approved_by": "deferred-route-modernization-follow-up"
},
{
"route": "/mid-section-defect",
"status_snapshot": "dev",
"scope_boundary_check": "confirmed in route_scope_matrix.json as in-scope (promoted from deferred)",
"contract_baseline_refs": {
"route_contract": "route_contracts.json#/mid-section-defect",
"content_contract": "route_content_contracts.json#/mid-section-defect"
},
"known_bug_baseline_ref": "known_bug_baseline.json#/mid-section-defect",
"rollback_flag_plan": {
"feature_flag": "modernization_feature_flags.json#/mid-section-defect.content_cutover_enabled",
"rollback_strategy": "fallback_to_legacy_route"
},
"owner": "frontend-mes-reporting",
"date": "2026-02-12",
"approved_by": "deferred-route-modernization-follow-up"
}
]
}

View File

@@ -0,0 +1,31 @@
# Deferred Route Modernization Rollback Controls
## Route-Level Reversion Controls
- **Content cutover feature flag**: Set `content_cutover_enabled: false` in `data/modernization_feature_flags.json` for the affected route to immediately revert to legacy content path.
- **PORTAL_SPA_ENABLED=false**: Disable shell-first navigation runtime globally (affects all routes).
- **Route-scoped contract fallback**: Mark route contract with fallback strategy and redeploy shell assets.
## Per-Route Rollback Procedure
1. Set `content_cutover_enabled: false` for the affected route in `modernization_feature_flags.json`.
2. Restart workers to pick up the flag change.
3. Verify legacy content path is serving correctly.
4. Record rollback in manual acceptance records with reason and timestamp.
5. Investigate root cause before re-enabling cutover.
## False-Positive Gate Handling
1. Capture failing gate output and route impact.
2. Confirm whether failure is test flake or product defect.
3. If false-positive and production risk is high:
- Temporarily switch gate severity from `block` to `warn`.
- Record waiver with owner, reason, expiry.
4. Restore `block` mode after corrective action.
## Required Rollback Evidence
- Incident timestamp and impacted route.
- Gate IDs that triggered rollback.
- Feature flag state before/after rollback.
- Manual acceptance and known-bug replay references.

View File

@@ -0,0 +1,47 @@
# Deferred Route Modernization Rollout Runbook
## Upstream Reference
- Phase 1 runbook: `docs/migration/full-modernization-architecture-blueprint/rollout_runbook.md`
## Phase Sequence
1. Governance freeze
- Confirm `route_scope_matrix.json` has deferred routes promoted to in-scope.
- Confirm pre-change confirmations recorded for all 4 routes.
- Confirm exception registry has no unresolved blocking entries.
2. Route governance enforcement
- Run route contract completeness checks in warn mode.
- Fix all deferred-route metadata gaps.
- Promote route governance checks to block mode.
3. Per-route content modernization (sequential)
- Enable content cutover flag for first route (`/tables`).
- Execute parity checks and manual acceptance.
- Run known-bug replay checks.
- On pass: sign off and proceed to next route.
- On fail: rollback flag and investigate.
4. Cutover sequence
- `/tables` -> `/excel-query` -> `/query-tool` -> `/mid-section-defect`
- Next route blocked until current route has approved sign-off.
5. Asset/gate enforcement
- Validate deferred route asset readiness.
- Run quality gate suite (functional, visual, accessibility, performance).
- Promote gate severity from warn to block per milestones.
6. Fallback retirement
- Retire runtime fallback for deferred routes after all acceptance gates pass.
## Hold Points
- Hold-1: Any deferred route missing contract metadata or pre-change confirmation.
- Hold-2: Any parity failure or known-bug replay failure.
- Hold-3: Any mandatory quality gate failure in block mode.
- Hold-4: Cutover attempted before previous route sign-off complete.
## Promotion Rule
Promotion is allowed only when all hold points are clear for the current route in sequence.

View File

@@ -0,0 +1,100 @@
{
"change": "deferred-route-modernization-follow-up",
"upstream_change": "full-modernization-architecture-blueprint",
"generated_at": "2026-02-12T00:00:00Z",
"phase": "phase-2-deferred-route-modernization",
"policy": {
"scope_is_frozen": true,
"out_of_scope_tasks_must_be_rejected": true,
"dev_routes_are_eligible": true,
"released_only_restriction_does_not_apply": true
},
"in_scope": [
{
"route": "/tables",
"category": "report",
"canonical_shell_path": "/portal-shell/tables",
"owner": "frontend-mes-reporting",
"visibility_policy": "released_or_admin",
"prior_scope": "deferred",
"prior_change": "full-modernization-architecture-blueprint"
},
{
"route": "/excel-query",
"category": "report",
"canonical_shell_path": "/portal-shell/excel-query",
"owner": "frontend-mes-reporting",
"visibility_policy": "released_or_admin",
"prior_scope": "deferred",
"prior_change": "full-modernization-architecture-blueprint"
},
{
"route": "/query-tool",
"category": "report",
"canonical_shell_path": "/portal-shell/query-tool",
"owner": "frontend-mes-reporting",
"visibility_policy": "released_or_admin",
"prior_scope": "deferred",
"prior_change": "full-modernization-architecture-blueprint"
},
{
"route": "/mid-section-defect",
"category": "report",
"canonical_shell_path": "/portal-shell/mid-section-defect",
"owner": "frontend-mes-reporting",
"visibility_policy": "released_or_admin",
"prior_scope": "deferred",
"prior_change": "full-modernization-architecture-blueprint"
}
],
"out_of_scope": [
{
"route": "/wip-overview",
"reason": "completed-in-phase-1"
},
{
"route": "/wip-detail",
"reason": "completed-in-phase-1"
},
{
"route": "/hold-overview",
"reason": "completed-in-phase-1"
},
{
"route": "/hold-detail",
"reason": "completed-in-phase-1"
},
{
"route": "/hold-history",
"reason": "completed-in-phase-1"
},
{
"route": "/resource",
"reason": "completed-in-phase-1"
},
{
"route": "/resource-history",
"reason": "completed-in-phase-1"
},
{
"route": "/qc-gate",
"reason": "completed-in-phase-1"
},
{
"route": "/job-query",
"reason": "completed-in-phase-1"
},
{
"route": "/tmtt-defect",
"reason": "completed-in-phase-1"
},
{
"route": "/admin/pages",
"reason": "completed-in-phase-1"
},
{
"route": "/admin/performance",
"reason": "completed-in-phase-1"
}
]
}

View File

@@ -0,0 +1,30 @@
# Scope Boundary Note
## Change
`deferred-route-modernization-follow-up`
## Scope Clarification
Deferred routes (`/tables`, `/excel-query`, `/query-tool`, `/mid-section-defect`) are **in-scope** for this follow-up change regardless of their current page status (`dev` or `released`).
The **released-only restriction does not apply** to this change. These routes were intentionally deferred from phase 1 to control blast radius and are now the explicit modernization target.
## What Is In-Scope
- `/tables` — currently `dev` in page registry
- `/excel-query` — currently `dev` in page registry
- `/query-tool` — currently `dev` in page registry
- `/mid-section-defect` — currently `dev` in page registry
## What Is NOT In-Scope
- Phase-1 routes that are already modernized and governed (10 report + 2 admin routes)
- Routes outside the deferred matrix
- Backend business data semantics beyond compatibility safeguards
- Unrelated admin/report features not in the deferred matrix
## Policy
- Phase-1 in-scope routes SHALL NOT be reopened by this change unless explicitly required for shared governance wiring.
- Deferred routes adopt identical governance rigor (contracts, parity, manual acceptance, bug replay) as phase-1 routes.

View File

@@ -0,0 +1,27 @@
{
"change": "deferred-route-modernization-follow-up",
"upstream_change": "full-modernization-architecture-blueprint",
"handoff_artifact": "docs/migration/full-modernization-architecture-blueprint/deferred_route_handoff.md",
"consumed_artifacts": {
"scope_boundary": "docs/migration/full-modernization-architecture-blueprint/route_scope_matrix.json",
"parity_fixtures": "docs/migration/full-modernization-architecture-blueprint/parity_golden_fixtures.json",
"interaction_parity_checks": "docs/migration/full-modernization-architecture-blueprint/interaction_parity_checks.json",
"manual_acceptance_checklist": "docs/migration/full-modernization-architecture-blueprint/page_content_manual_acceptance_checklist.md",
"known_bug_baseline": "docs/migration/full-modernization-architecture-blueprint/known_bug_baseline.json",
"bug_revalidation_records": "docs/migration/full-modernization-architecture-blueprint/bug_revalidation_records.json",
"quality_gate_policy": "docs/migration/full-modernization-architecture-blueprint/quality_gate_policy.json",
"governance_milestones": "docs/migration/full-modernization-architecture-blueprint/governance_milestones.md",
"asset_readiness_manifest": "docs/migration/full-modernization-architecture-blueprint/asset_readiness_manifest.json"
},
"transfer_rules": [
"Deferred routes remain excluded from phase-1 blocking criteria",
"Follow-up change MUST promote these routes to in-scope before legacy retirement",
"Equivalent parity/manual-acceptance/bug-revalidation gates must be applied"
],
"deferred_routes": [
"/tables",
"/excel-query",
"/query-tool",
"/mid-section-defect"
]
}

View File

@@ -11,12 +11,11 @@
"/resource-history": ["resource-history.html", "resource-history.js"],
"/qc-gate": ["qc-gate.html", "qc-gate.js"],
"/job-query": ["job-query.js"],
"/tmtt-defect": ["tmtt-defect.js"]
"/tmtt-defect": ["tmtt-defect.js"],
"/tables": ["tables.html", "tables.js"],
"/excel-query": ["excel-query.js"],
"/query-tool": ["query-tool.js"],
"/mid-section-defect": ["mid-section-defect.html", "mid-section-defect.js"]
},
"deferred_routes": [
"/tables",
"/excel-query",
"/query-tool",
"/mid-section-defect"
]
"deferred_routes": []
}

View File

@@ -19,6 +19,10 @@
"/resource-history",
"/qc-gate",
"/job-query",
"/tmtt-defect"
"/tmtt-defect",
"/tables",
"/excel-query",
"/query-tool",
"/mid-section-defect"
]
}

View File

@@ -37,6 +37,30 @@
"status": "approved-temporary",
"milestone": "2026-03-19",
"tracking_issue": "deferred-route-modernization-follow-up/admin-template-modernization"
},
{
"id": "style-excel-query-shell-tokens-no-fallback",
"type": "style",
"scope": "/excel-query",
"owner": "frontend-mes-reporting",
"introduced_by": "legacy-template",
"reason": "shell tokens without CSS fallback values; inherited from legacy era",
"mitigation": "add fallback values during content modernization cutover",
"status": "approved-temporary",
"milestone": "2026-03-19",
"tracking_issue": "deferred-route-modernization-follow-up/excel-query-style-hardening"
},
{
"id": "style-query-tool-shell-tokens-no-fallback",
"type": "style",
"scope": "/query-tool",
"owner": "frontend-mes-reporting",
"introduced_by": "legacy-template",
"reason": "shell tokens without CSS fallback values; inherited from legacy era",
"mitigation": "add fallback values during content modernization cutover",
"status": "approved-temporary",
"milestone": "2026-03-19",
"tracking_issue": "deferred-route-modernization-follow-up/query-tool-style-hardening"
}
]
}

View File

@@ -12,6 +12,10 @@
"/job-query": ["resource_select", "query_submit", "export_csv"],
"/tmtt-defect": ["date_range_query", "chart_filter_link", "detail_sort"],
"/admin/pages": ["drawer_crud", "page_status_update", "admin_visibility"],
"/admin/performance": ["admin_auth_access", "performance_view_load"]
"/admin/performance": ["admin_auth_access", "performance_view_load"],
"/tables": ["table_select", "column_filter_apply", "query_submit"],
"/excel-query": ["file_upload", "column_select", "query_execute", "export_csv"],
"/query-tool": ["lot_resolve", "history_load", "association_query", "equipment_period_query", "export_csv"],
"/mid-section-defect": ["date_range_query", "loss_reason_filter", "pareto_chart_drill", "detail_pagination", "export_csv"]
}
}

View File

@@ -1,6 +1,6 @@
{
"change": "full-modernization-architecture-blueprint",
"scope": "in-scope-routes-only",
"scope": "all-governed-routes",
"routes": {
"/wip-overview": {
"baseline_status": "initialized",
@@ -49,6 +49,22 @@
"/admin/performance": {
"baseline_status": "initialized",
"known_bugs": []
},
"/tables": {
"baseline_status": "initialized",
"known_bugs": []
},
"/excel-query": {
"baseline_status": "initialized",
"known_bugs": []
},
"/query-tool": {
"baseline_status": "initialized",
"known_bugs": []
},
"/mid-section-defect": {
"baseline_status": "initialized",
"known_bugs": []
}
},
"revalidation_rule": {

View File

@@ -12,6 +12,10 @@
"/job-query": ["docs/migration/portal-shell-route-view-integration/wave-b-parity-evidence.json"],
"/tmtt-defect": ["docs/migration/portal-shell-route-view-integration/wave-b-parity-evidence.json"],
"/admin/pages": ["tests/test_portal_shell_routes.py"],
"/admin/performance": ["tests/test_performance_integration.py"]
"/admin/performance": ["tests/test_performance_integration.py"],
"/tables": ["tests/test_portal_shell_routes.py"],
"/excel-query": ["tests/test_portal_shell_routes.py"],
"/query-tool": ["tests/test_portal_shell_routes.py"],
"/mid-section-defect": ["tests/test_portal_shell_routes.py"]
}
}

View File

@@ -12,10 +12,5 @@
{"id": "Q4", "name": "performance-budget", "required": true},
{"id": "Q5", "name": "manual-acceptance-and-bug-revalidation", "required": true}
],
"deferred_routes_excluded": [
"/tables",
"/excel-query",
"/query-tool",
"/mid-section-defect"
]
"deferred_routes_excluded": []
}

View File

@@ -1,7 +1,10 @@
{
"mode": "block",
"errors": [],
"warnings": [],
"warnings": [
"/excel-query uses shell tokens without fallback ['--portal-brand-end', '--portal-brand-start', '--portal-shadow-panel'] in frontend/src/excel-query/style.css with approved exception",
"/query-tool uses shell tokens without fallback ['--portal-brand-end', '--portal-brand-start', '--portal-shadow-panel'] in frontend/src/query-tool/style.css with approved exception"
],
"info": [],
"passed": true
}

View File

@@ -72,6 +72,30 @@
"query_payload_contract": ["performance_summary", "log_stream"],
"chart_data_shape": ["timeline", "status_summary"],
"state_contract": ["loading", "empty", "error", "success"]
},
"/tables": {
"filter_input_semantics": ["table_category", "table_name", "dynamic_column_filters"],
"query_payload_contract": ["table_name", "limit", "time_field", "filters"],
"chart_data_shape": ["dynamic_data_table"],
"state_contract": ["loading", "empty", "error", "success"]
},
"/excel-query": {
"filter_input_semantics": ["file_upload", "excel_column", "table_name", "search_column", "query_type", "return_columns", "date_range"],
"query_payload_contract": ["table_name", "search_column", "return_columns", "search_values", "query_type", "date_column", "date_from", "date_to"],
"chart_data_shape": ["result_table", "csv_export"],
"state_contract": ["loading", "empty", "error", "success"]
},
"/query-tool": {
"filter_input_semantics": ["input_type", "workcenter_groups", "input_values", "association_type", "equipment_ids", "equipment_query_type", "start_date", "end_date"],
"query_payload_contract": ["input_type", "values", "container_id", "workcenter_groups", "type", "equipment_ids", "equipment_names", "start_date", "end_date", "query_type"],
"chart_data_shape": ["resolved_lots_table", "lot_history_table", "association_table", "equipment_table"],
"state_contract": ["loading", "empty", "error", "success"]
},
"/mid-section-defect": {
"filter_input_semantics": ["start_date", "end_date", "loss_reasons"],
"query_payload_contract": ["start_date", "end_date", "loss_reasons", "page", "page_size"],
"chart_data_shape": ["kpi_cards", "pareto_by_station", "pareto_by_loss_reason", "pareto_by_machine", "pareto_by_tmtt_machine", "pareto_by_workflow", "pareto_by_package", "daily_trend", "detail_table"],
"state_contract": ["loading", "empty", "error", "success"]
}
}
}

View File

@@ -125,7 +125,7 @@
{
"route": "/tables",
"route_id": "tables",
"scope": "deferred",
"scope": "in-scope",
"render_mode": "native",
"owner": "frontend-mes-reporting",
"visibility_policy": "released_or_admin",
@@ -135,7 +135,7 @@
{
"route": "/excel-query",
"route_id": "excel-query",
"scope": "deferred",
"scope": "in-scope",
"render_mode": "native",
"owner": "frontend-mes-reporting",
"visibility_policy": "released_or_admin",
@@ -145,7 +145,7 @@
{
"route": "/query-tool",
"route_id": "query-tool",
"scope": "deferred",
"scope": "in-scope",
"render_mode": "native",
"owner": "frontend-mes-reporting",
"visibility_policy": "released_or_admin",
@@ -155,7 +155,7 @@
{
"route": "/mid-section-defect",
"route_id": "mid-section-defect",
"scope": "deferred",
"scope": "in-scope",
"render_mode": "native",
"owner": "frontend-mes-reporting",
"visibility_policy": "released_or_admin",

View File

@@ -90,24 +90,43 @@
"canonical_shell_path": "/portal-shell/admin/performance",
"owner": "frontend-platform-admin",
"visibility_policy": "admin_only"
}
],
"deferred": [
},
{
"route": "/tables",
"reason": "deferred-to-follow-up-change"
"category": "report",
"canonical_shell_path": "/portal-shell/tables",
"owner": "frontend-mes-reporting",
"visibility_policy": "released_or_admin",
"promoted_from": "deferred",
"promoted_by": "deferred-route-modernization-follow-up"
},
{
"route": "/excel-query",
"reason": "deferred-to-follow-up-change"
"category": "report",
"canonical_shell_path": "/portal-shell/excel-query",
"owner": "frontend-mes-reporting",
"visibility_policy": "released_or_admin",
"promoted_from": "deferred",
"promoted_by": "deferred-route-modernization-follow-up"
},
{
"route": "/query-tool",
"reason": "deferred-to-follow-up-change"
"category": "report",
"canonical_shell_path": "/portal-shell/query-tool",
"owner": "frontend-mes-reporting",
"visibility_policy": "released_or_admin",
"promoted_from": "deferred",
"promoted_by": "deferred-route-modernization-follow-up"
},
{
"route": "/mid-section-defect",
"reason": "deferred-to-follow-up-change"
"category": "report",
"canonical_shell_path": "/portal-shell/mid-section-defect",
"owner": "frontend-mes-reporting",
"visibility_policy": "released_or_admin",
"promoted_from": "deferred",
"promoted_by": "deferred-route-modernization-follow-up"
}
]
],
"deferred": []
}

View File

@@ -21,7 +21,11 @@
"global_selectors": ["body"],
"status": "exception-registered",
"exception_id": "style-admin-performance-inline-css"
}
},
"/tables": {"global_selectors": [], "status": "pending-audit"},
"/excel-query": {"global_selectors": [], "status": "pending-audit"},
"/query-tool": {"global_selectors": [], "status": "pending-audit"},
"/mid-section-defect": {"global_selectors": [], "status": "pending-audit"}
},
"shared_layers": {
"frontend/src/styles/tailwind.css": [":root", "body"],

View File

@@ -1,5 +1,5 @@
{
"generated_at": "2026-02-11T17:49:00+08:00",
"generated_at": "2026-02-12T12:40:00+08:00",
"description": "Critical visual-state snapshots for chart/table/matrix routes.",
"critical_diff_policy": {
"block_release": true,
@@ -27,7 +27,7 @@
"frontend/src/hold-overview/components/HoldMatrix.vue",
"frontend/src/hold-overview/style.css"
],
"fingerprint": "5d42352bfb3de23e2ea5638285b69e2fc8adf6f69d61989f0280739b58fedf4d"
"fingerprint": "f2ca1666f50afb4f922b522cdf739685ce068911a17d6e6c285244770f451f2c"
},
{
"id": "qc-gate-chart-table-linked",
@@ -39,7 +39,7 @@
"frontend/src/qc-gate/components/QcGateChart.vue",
"frontend/src/qc-gate/style.css"
],
"fingerprint": "2d283febab9142f042a7961aef93201a9d75f43c248cdd40b6b4530101b29619"
"fingerprint": "13e000938f5fc398a9abf2c62b3e64dd0c4742ba87b20d144c18befd57e2e1f4"
},
{
"id": "resource-history-chart-detail",
@@ -53,7 +53,7 @@
"frontend/src/resource-history/components/DetailSection.vue",
"frontend/src/resource-history/style.css"
],
"fingerprint": "ec5560c3fd233de9d3a31928965e2c71c2e878cb203076e4b45ef149c46a5387"
"fingerprint": "385910e89f10f016f7973e97be30a697a396a71ea470c1bcfe028a2c6daa4cc9"
},
{
"id": "tmtt-defect-pareto-detail",
@@ -66,7 +66,7 @@
"frontend/src/tmtt-defect/components/TmttKpiCards.vue",
"frontend/src/tmtt-defect/style.css"
],
"fingerprint": "59059868a9f61a20160d2acc8602ee9aa1a494ec0fdb6a816ee98028517451e8"
"fingerprint": "141d712008d33887a103a5a5133543d527be208c2a5700d16f4c045ce13bb166"
}
]
}