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:
@@ -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.
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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
|
||||
@@ -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.
|
||||
@@ -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>
|
||||
```
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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.
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
@@ -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": []
|
||||
}
|
||||
|
||||
@@ -19,6 +19,10 @@
|
||||
"/resource-history",
|
||||
"/qc-gate",
|
||||
"/job-query",
|
||||
"/tmtt-defect"
|
||||
"/tmtt-defect",
|
||||
"/tables",
|
||||
"/excel-query",
|
||||
"/query-tool",
|
||||
"/mid-section-defect"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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": []
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": []
|
||||
}
|
||||
|
||||
@@ -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"],
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user