Fix mission board reachability navigation
This commit is contained in:
@@ -76,6 +76,9 @@ Completion criteria:
|
|||||||
| 2026-03-06 | Live mission-board interaction probe found a second routing defect: the visible `View SBOM` action linked to `/security/sbom/lake`, which stayed on that URL but rendered dashboard fallback content. Direct navigation proved the intended surface is `/security/sbom-lake`. | QA |
|
| 2026-03-06 | Live mission-board interaction probe found a second routing defect: the visible `View SBOM` action linked to `/security/sbom/lake`, which stayed on that URL but rendered dashboard fallback content. Direct navigation proved the intended surface is `/security/sbom-lake`. | QA |
|
||||||
| 2026-03-06 | Fixed the mission-board SBOM action to point at `/security/sbom-lake` and extended `prealpha-canonical-full-sweep.spec.ts` to cover both the canonical SBOM Lake route and the dashboard click-through path. | Developer (FE) |
|
| 2026-03-06 | Fixed the mission-board SBOM action to point at `/security/sbom-lake` and extended `prealpha-canonical-full-sweep.spec.ts` to cover both the canonical SBOM Lake route and the dashboard click-through path. | Developer (FE) |
|
||||||
| 2026-03-06 | Verification: targeted Playwright slice passed locally (`npx playwright test tests/e2e/prealpha-canonical-full-sweep.spec.ts --grep \"sbom-lake|mission board SBOM card opens SBOM Lake\"` -> 2/2 pass). Frontend bundle rebuilt, synced into `compose_console-dist`, and live authenticated Playwright confirmed the mission-board `View SBOM` action now lands on `https://stella-ops.local/security/sbom-lake` with `SBOM Lake` / `Attestation Coverage Metrics` visible. | QA |
|
| 2026-03-06 | Verification: targeted Playwright slice passed locally (`npx playwright test tests/e2e/prealpha-canonical-full-sweep.spec.ts --grep \"sbom-lake|mission board SBOM card opens SBOM Lake\"` -> 2/2 pass). Frontend bundle rebuilt, synced into `compose_console-dist`, and live authenticated Playwright confirmed the mission-board `View SBOM` action now lands on `https://stella-ops.local/security/sbom-lake` with `SBOM Lake` / `Attestation Coverage Metrics` visible. | QA |
|
||||||
|
| 2026-03-06 | Follow-up mission-board QA found a semantic navigation defect: Playwright DOM capture showed both Reachability card actions (`View reachability`, `Deep analysis`) pointing at `/security/findings` even though the working canonical reachability surface is `/security/reachability`. | QA |
|
||||||
|
| 2026-03-06 | Updated the mission-board Reachability card actions to target `/security/reachability` and added focused Playwright coverage for the canonical reachability route plus the mission-board click-through. | Developer (FE) |
|
||||||
|
| 2026-03-06 | Verification: targeted Playwright slice passed locally (`npx playwright test tests/e2e/prealpha-canonical-full-sweep.spec.ts --grep \"route works: /security/reachability|mission board reachability card opens Reachability Center\"` -> 2/2 pass). Frontend bundle rebuilt, synced into `compose_console-dist`, and live authenticated Playwright confirmed the mission-board Reachability action now lands on `https://stella-ops.local/security/reachability` with `Reachability Center` visible. | QA |
|
||||||
|
|
||||||
## Decisions & Risks
|
## Decisions & Risks
|
||||||
- Decision: this sprint stays inside `src/Web/StellaOps.Web` plus required sprint/doc updates only.
|
- Decision: this sprint stays inside `src/Web/StellaOps.Web` plus required sprint/doc updates only.
|
||||||
|
|||||||
@@ -274,7 +274,7 @@ interface MissionSummary {
|
|||||||
<section class="domain-card" aria-label="Reachability summary">
|
<section class="domain-card" aria-label="Reachability summary">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h2 class="card-title">Reachability</h2>
|
<h2 class="card-title">Reachability</h2>
|
||||||
<a routerLink="/security/findings" class="card-link">View reachability</a>
|
<a routerLink="/security/reachability" class="card-link">View reachability</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="bir-matrix">
|
<div class="bir-matrix">
|
||||||
@@ -305,7 +305,7 @@ interface MissionSummary {
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer">
|
<div class="card-footer">
|
||||||
<a routerLink="/security/findings" class="card-action">Deep analysis</a>
|
<a routerLink="/security/reachability" class="card-action">Deep analysis</a>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -1146,4 +1146,3 @@ export class DashboardV3Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -187,6 +187,10 @@ const strictRouteExpectations: Partial<Record<(typeof canonicalRoutes)[number],
|
|||||||
title: /SBOM Lake/i,
|
title: /SBOM Lake/i,
|
||||||
texts: ['SBOM Lake', 'Attestation Coverage Metrics'],
|
texts: ['SBOM Lake', 'Attestation Coverage Metrics'],
|
||||||
},
|
},
|
||||||
|
'/security/reachability': {
|
||||||
|
title: /Reachability/i,
|
||||||
|
texts: ['Reachability Center'],
|
||||||
|
},
|
||||||
'/ops/policy': {
|
'/ops/policy': {
|
||||||
title: /Policy/i,
|
title: /Policy/i,
|
||||||
texts: ['Policy Governance', 'Risk Budget Overview'],
|
texts: ['Policy Governance', 'Risk Budget Overview'],
|
||||||
@@ -1281,6 +1285,15 @@ test.describe('Pre-alpha key end-user interactions', () => {
|
|||||||
await expect(page.locator('#main-content')).toContainText('Attestation Coverage Metrics');
|
await expect(page.locator('#main-content')).toContainText('Attestation Coverage Metrics');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('mission board reachability card opens Reachability Center', async ({ page }) => {
|
||||||
|
await page.goto('/mission-control/board', { waitUntil: 'domcontentloaded' });
|
||||||
|
await page.locator('#main-content a[href="/security/reachability"]').first().click();
|
||||||
|
|
||||||
|
await expect(page).toHaveURL(/\/security\/reachability$/);
|
||||||
|
await expect(page).toHaveTitle(/Reachability/i);
|
||||||
|
await expect(page.locator('#main-content')).toContainText('Reachability Center');
|
||||||
|
});
|
||||||
|
|
||||||
test('sidebar root navigation works for all canonical workspaces', async ({ page }) => {
|
test('sidebar root navigation works for all canonical workspaces', async ({ page }) => {
|
||||||
await page.goto('/mission-control/board', { waitUntil: 'domcontentloaded' });
|
await page.goto('/mission-control/board', { waitUntil: 'domcontentloaded' });
|
||||||
await page.locator('aside.sidebar a[href="/releases/overview"]').first().click();
|
await page.locator('aside.sidebar a[href="/releases/overview"]').first().click();
|
||||||
|
|||||||
Reference in New Issue
Block a user