Skip to content

Commit 6cb2de4

Browse files
committed
Link Tools Progress and add tool previous next navigation - PR_26155_096-099-tool-navigation
1 parent 52f509a commit 6cb2de4

44 files changed

Lines changed: 882 additions & 252 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

admin/tools-progress.js

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { getActiveToolRegistry } from "../toolbox/toolRegistry.js";
1+
import { getActiveToolRegistry, getToolRoute } from "../toolbox/toolRegistry.js";
22

33
const completionByStatus = Object.freeze({
44
Ready: "Yes",
@@ -29,6 +29,37 @@ function createCell(tagName, text) {
2929
return cell;
3030
}
3131

32+
export function createToolNameNode(tool) {
33+
const label = document.createElement("span");
34+
label.className = "content-cluster";
35+
const route = getToolRoute(tool);
36+
37+
if (route) {
38+
const link = document.createElement("a");
39+
link.href = route;
40+
link.textContent = tool.displayName;
41+
link.dataset.toolsProgressRoute = route;
42+
label.append(link);
43+
return label;
44+
}
45+
46+
const text = document.createElement("span");
47+
text.textContent = tool.displayName;
48+
49+
const planned = document.createElement("span");
50+
planned.className = "pill";
51+
planned.textContent = `${tool.status || "Planned"} - Route pending`;
52+
53+
label.append(text, planned);
54+
return label;
55+
}
56+
57+
function createToolNameCell(tool) {
58+
const cell = document.createElement("td");
59+
cell.append(createToolNameNode(tool));
60+
return cell;
61+
}
62+
3263
function createGroupCell(tool) {
3364
const cell = document.createElement("td");
3465
const label = document.createElement("span");
@@ -74,7 +105,7 @@ function renderToolsProgress() {
74105
row.dataset.toolsProgressComplete = isComplete(tool);
75106
row.append(
76107
createCell("td", String(tool.order)),
77-
createCell("td", tool.displayName),
108+
createToolNameCell(tool),
78109
createGroupCell(tool),
79110
createCell("td", tool.status),
80111
createCell("td", isComplete(tool))

assets/theme-v2/js/tool-display-mode.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,60 @@
5757
displayMode.appendChild(body);
5858
slot.replaceWith(displayMode);
5959

60+
function roleAwareHref(targetHref) {
61+
const role = new URLSearchParams(window.location.search).get("role");
62+
if (!role || !targetHref) {
63+
return targetHref;
64+
}
65+
66+
const targetUrl = new URL(targetHref, window.location.origin + "/");
67+
targetUrl.searchParams.set("role", role);
68+
return targetUrl.pathname.replace(/^\/+/, "") + targetUrl.search + targetUrl.hash;
69+
}
70+
71+
function createNavigationControl(direction, target) {
72+
const controlLabel = direction === "previous" ? "Previous Tool" : "Next Tool";
73+
const dataAttribute = direction === "previous" ? "toolNavPrevious" : "toolNavNext";
74+
75+
if (!target || target.disabled) {
76+
const button = document.createElement("button");
77+
button.type = "button";
78+
button.className = "btn";
79+
button.disabled = true;
80+
button.dataset[dataAttribute] = "disabled";
81+
button.textContent = controlLabel + ": " + (target?.label || "Unavailable");
82+
return button;
83+
}
84+
85+
const link = document.createElement("a");
86+
link.className = "btn";
87+
link.href = roleAwareHref(target.href);
88+
link.dataset[dataAttribute] = target.kind;
89+
if (target.group) {
90+
link.dataset.toolNavGroup = target.group;
91+
}
92+
link.textContent = controlLabel + ": " + target.label;
93+
return link;
94+
}
95+
96+
async function renderToolNavigation() {
97+
try {
98+
const registry = await import("/toolbox/toolRegistry.js");
99+
const navigation = registry.getToolNavigationTargets(toolSlug);
100+
const navigationRow = document.createElement("nav");
101+
navigationRow.className = "content-cluster";
102+
navigationRow.setAttribute("aria-label", "Tool build-order navigation");
103+
navigationRow.append(
104+
createNavigationControl("previous", navigation.previous),
105+
createNavigationControl("next", navigation.next)
106+
);
107+
body.appendChild(navigationRow);
108+
} catch (error) {
109+
console.warn("Tool navigation could not be loaded.", error);
110+
}
111+
}
112+
113+
renderToolNavigation();
60114

61115
async function enterToolMode() {
62116
document.body.classList.add("tool-focus-mode");

docs_build/dev/reports/coverage_changed_js_guardrail.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ Missing changed runtime JS files are WARN, not FAIL.
66
Source: Playwright/Chromium built-in V8 coverage from the active Playwright run.
77

88
Changed runtime JS files considered:
9-
(0%) toolbox/toolRegistry.js - WARNING: changed runtime JS file was not collected by Playwright V8 coverage; advisory only
10-
(95%) toolbox/tools-page-accordions.js - executed lines 1843/1843; executed functions 59/62
9+
(70%) toolbox/tools-page-accordions.js - executed lines 1858/1858; executed functions 39/56
10+
(91%) toolbox/toolRegistry.js - executed lines 1311/1311; executed functions 21/23
1111

1212
Guardrail warnings:
13-
(0%) toolbox/toolRegistry.js - WARNING: changed runtime JS file missing from coverage; advisory only
13+
(100%) none - no changed runtime JS coverage warnings

docs_build/dev/reports/dependency_gating_report.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Dependency Gating Report
22

3-
Generated: 2026-06-05T00:58:35.519Z
3+
Generated: 2026-06-05T01:16:23.999Z
44
Status: PASS
55

66
## Gate Order
@@ -14,12 +14,13 @@ Status: PASS
1414

1515
| Lane | Selected | Status | Dependencies | Affected Surface | Reason |
1616
| --- | --- | --- | --- | --- | --- |
17-
| workspace-contract | Yes | PASS | none | Root tools future-state navigation and Tool Template V2 contract | Lane has no lane dependencies and is eligible after preflight and compilation pass. |
17+
| workspace-contract | No | SKIP | none | Root tools future-state navigation and Tool Template V2 contract | Lane was not selected, so dependency-gated runtime scheduling skipped it. |
1818
| project-workspace | No | SKIP | none | Project Workspace mock repository, Project Workspace UI, and Toolbox Progress/Build Path project-state bridge | Lane was not selected, so dependency-gated runtime scheduling skipped it. |
1919
| game-design | No | SKIP | none | Game Design mock repository, project purpose flow, validation overlay, capability demo authoring, and Toolbox progress handoff | Lane was not selected, so dependency-gated runtime scheduling skipped it. |
2020
| game-configuration | No | SKIP | none | Game Configuration mock repository, Game Design handoff, configuration validation, user-facing output, and Toolbox progress handoff | Lane was not selected, so dependency-gated runtime scheduling skipped it. |
2121
| build-path | No | SKIP | none | Toolbox Build Path simplification, workflow status table, and Admin Tools Progress navigation | Lane was not selected, so dependency-gated runtime scheduling skipped it. |
2222
| tools-progress | No | SKIP | none | Admin Tools Progress hydration, Toolbox Group view color model, and Project Build Path separation | Lane was not selected, so dependency-gated runtime scheduling skipped it. |
23+
| tool-navigation | Yes | PASS | none | Admin Tools Progress tool route links, Tool Display Mode build-order previous/next controls, and Toolbox group fallback routing | Lane has no lane dependencies and is eligible after preflight and compilation pass. |
2324
| tool-runtime | No | SKIP | none | Active public toolbox and Tool Template V2 contract | Lane was not selected, so dependency-gated runtime scheduling skipped it. |
2425
| game-runtime | No | SKIP | none | Deprecated archive/v1-v2/games reference coverage | Lane was not selected, so dependency-gated runtime scheduling skipped it. |
2526
| integration | No | SKIP | none | Integration handoff behavior | Lane was not selected, so dependency-gated runtime scheduling skipped it. |

docs_build/dev/reports/dependency_hydration_reuse_report.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
# Dependency Hydration Reuse Report
22

3-
Generated: 2026-06-05T00:58:35.520Z
3+
Generated: 2026-06-05T01:16:23.999Z
44
Status: PASS
55

66
## Summary
77

8-
Reused dependency hydration: 1
9-
Invalidated dependency hydration: 0
8+
Reused dependency hydration: 0
9+
Invalidated dependency hydration: 1
1010
Generated dependency hydration: 0
11-
Prevented dependency graph hydration: 1
12-
Prevented helper resolution passes: 4
11+
Prevented dependency graph hydration: 0
12+
Prevented helper resolution passes: 0
1313
Prevented fixture ownership traversal: 0
1414

1515
## Hydration Decisions
1616

1717
| Lane | Status | Helpers | Fixtures | Imports | Dependency Hydration Hash | Reason |
1818
| --- | --- | --- | --- | --- | --- | --- |
19-
| workspace-contract | REUSED | tests/helpers/playwrightRepoServer.mjs; tests/helpers/playwrightStorageIsolation.mjs; tests/helpers/playwrightV8CoverageReporter.mjs; tests/helpers/workspaceV2CoverageReporter.mjs | none | tests/helpers/playwrightRepoServer.mjs; tests/helpers/playwrightStorageIsolation.mjs; tests/helpers/playwrightV8CoverageReporter.mjs; tests/helpers/workspaceV2CoverageReporter.mjs | 0ff8fc92c789456d | Dependency hydration reused from validated warm-start state. |
19+
| tool-navigation | INVALIDATED | tests/helpers/playwrightRepoServer.mjs; tests/helpers/playwrightStorageIsolation.mjs; tests/helpers/playwrightV8CoverageReporter.mjs; tests/helpers/workspaceV2CoverageReporter.mjs | none | tests/helpers/playwrightRepoServer.mjs; tests/helpers/playwrightStorageIsolation.mjs; tests/helpers/playwrightV8CoverageReporter.mjs; tests/helpers/workspaceV2CoverageReporter.mjs; toolbox/toolRegistry.js | ac2d176afce66b9b | Dependency hydration was refreshed after warm-start invalidation. |
2020

2121
## Safeguards
2222

docs_build/dev/reports/execution_graph_reuse_report.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
# Execution Graph Reuse Report
22

3-
Generated: 2026-06-05T00:58:35.520Z
3+
Generated: 2026-06-05T01:16:23.999Z
44
Status: PASS
55

66
## Summary
77

8-
Reused execution graphs: 1
9-
Prevented graph rebuilds: 1
10-
Prevented redundant dependency traversal: 1
11-
Prevented fixture/helper graph assembly: 4
12-
Prevented manifest traversal: 1
13-
Prevented targeted scheduling work: 1
8+
Reused execution graphs: 0
9+
Prevented graph rebuilds: 0
10+
Prevented redundant dependency traversal: 0
11+
Prevented fixture/helper graph assembly: 0
12+
Prevented manifest traversal: 0
13+
Prevented targeted scheduling work: 0
1414

1515
## Execution Graph Decisions
1616

1717
| Lane | Status | Snapshot Status | Execution Graph Hash | Reason |
1818
| --- | --- | --- | --- | --- |
19-
| workspace-contract | REUSED | REUSED | 0bd589c4cb15d4e9 | Lane snapshot is part of the selected targeted execution graph. |
19+
| tool-navigation | INVALIDATED | INVALIDATED | bfb37d857f4805dd | Lane snapshot is part of the selected targeted execution graph. |
2020

2121
## Safeguards
2222

docs_build/dev/reports/failure_fingerprint_report.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Failure Fingerprint Report
22

3-
Generated: 2026-06-05T00:59:06.465Z
3+
Generated: 2026-06-05T01:16:40.602Z
44
Status: PASS
55

66
## Summary

docs_build/dev/reports/filesystem_scan_reduction_report.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Filesystem Scan Reduction Report
22

3-
Generated: 2026-06-05T00:58:35.492Z
3+
Generated: 2026-06-05T01:16:23.974Z
44
Status: PASS
55

66
## Scan Enforcement
@@ -13,7 +13,7 @@ Status: PASS
1313
| tests/playwright/engine | SKIP | Unselected lane directory discovery was skipped. |
1414
| tests/playwright/games | SKIP | Unselected lane directory discovery was skipped. |
1515
| tests/playwright/integration | SKIP | Unselected lane directory discovery was skipped. |
16-
| tests/playwright/tools | SCOPED | Selected lane discovery was restricted to explicit target specs. |
16+
| tests/playwright/tools | SKIP | Unselected lane directory discovery was skipped. |
1717

1818
## Runtime Savings Observations
1919

docs_build/dev/reports/incremental_validation_report.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
# Incremental Validation Report
22

3-
Generated: 2026-06-05T00:58:35.521Z
3+
Generated: 2026-06-05T01:16:24.000Z
44
Status: PASS
55

66
## Reuse Summary
77

8-
Reused manifests: 1
9-
Invalidated manifests: 0
8+
Reused manifests: 0
9+
Invalidated manifests: 1
1010
Generated manifests: 0
1111
Skipped manifests: 0
12-
Prevented lane regeneration: 1
13-
Prevented discovery scans: 1
14-
Prevented helper resolution passes: 4
12+
Prevented lane regeneration: 0
13+
Prevented discovery scans: 0
14+
Prevented helper resolution passes: 0
1515
Prevented fixture resolution passes: 0
1616

1717
## Incremental Decisions
1818

1919
| Lane | Decision | Invalidated By | Runtime Savings Observation |
2020
| --- | --- | --- | --- |
21-
| workspace-contract | REUSED | unchanged inputs | Reused 1 test input(s), 4 helper(s), and 0 fixture(s). |
21+
| tool-navigation | INVALIDATED | Persistent manifest input hash changed for tool-navigation.; Persistent manifest hash changed for tool-navigation. | Manifest was regenerated or skipped; no reuse savings for this lane. |
2222

2323
## Invalidation Rules
2424

docs_build/dev/reports/lane_compilation_report.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
# Lane Compilation Report
22

3-
Generated: 2026-06-05T00:58:35.519Z
3+
Generated: 2026-06-05T01:16:23.998Z
44
Status: PASS
55

66
## Lane Graph
77

88
| Lane | Status | Affected Surface | Targets | Commands | Reason |
99
| --- | --- | --- | --- | --- | --- |
10-
| workspace-contract | PASS | Root tools future-state navigation and Tool Template V2 contract | tests/playwright/tools/RootToolsFutureState.spec.mjs | C:\nvm4w\nodejs\node.exe C:\Users\davidq\Documents\GitHub\HTML-JavaScript-Gaming\node_modules\@playwright\test\cli.js test tests/playwright/tools/RootToolsFutureState.spec.mjs --project=playwright --workers=1 --reporter=list | Lane graph, command shape, targets, fixtures, and ownership compile before runtime. |
10+
| workspace-contract | SKIP | Root tools future-state navigation and Tool Template V2 contract | tests/playwright/tools/RootToolsFutureState.spec.mjs | C:\nvm4w\nodejs\node.exe C:\Users\davidq\Documents\GitHub\HTML-JavaScript-Gaming\node_modules\@playwright\test\cli.js test tests/playwright/tools/RootToolsFutureState.spec.mjs --project=playwright --workers=1 --reporter=list | Lane was not selected. |
1111
| project-workspace | SKIP | Project Workspace mock repository, Project Workspace UI, and Toolbox Progress/Build Path project-state bridge | tests/playwright/tools/ProjectWorkspaceMockRepository.spec.mjs | C:\nvm4w\nodejs\node.exe C:\Users\davidq\Documents\GitHub\HTML-JavaScript-Gaming\node_modules\@playwright\test\cli.js test tests/playwright/tools/ProjectWorkspaceMockRepository.spec.mjs --project=playwright --workers=1 --reporter=list | Lane was not selected. |
1212
| game-design | SKIP | Game Design mock repository, project purpose flow, validation overlay, capability demo authoring, and Toolbox progress handoff | tests/playwright/tools/GameDesignMockRepository.spec.mjs | C:\nvm4w\nodejs\node.exe C:\Users\davidq\Documents\GitHub\HTML-JavaScript-Gaming\node_modules\@playwright\test\cli.js test tests/playwright/tools/GameDesignMockRepository.spec.mjs --project=playwright --workers=1 --reporter=list | Lane was not selected. |
1313
| game-configuration | SKIP | Game Configuration mock repository, Game Design handoff, configuration validation, user-facing output, and Toolbox progress handoff | tests/playwright/tools/GameConfigurationMockRepository.spec.mjs | C:\nvm4w\nodejs\node.exe C:\Users\davidq\Documents\GitHub\HTML-JavaScript-Gaming\node_modules\@playwright\test\cli.js test tests/playwright/tools/GameConfigurationMockRepository.spec.mjs --project=playwright --workers=1 --reporter=list | Lane was not selected. |
1414
| build-path | SKIP | Toolbox Build Path simplification, workflow status table, and Admin Tools Progress navigation | tests/playwright/tools/BuildPathProgressSimplification.spec.mjs | C:\nvm4w\nodejs\node.exe C:\Users\davidq\Documents\GitHub\HTML-JavaScript-Gaming\node_modules\@playwright\test\cli.js test tests/playwright/tools/BuildPathProgressSimplification.spec.mjs --project=playwright --workers=1 --reporter=list | Lane was not selected. |
1515
| tools-progress | SKIP | Admin Tools Progress hydration, Toolbox Group view color model, and Project Build Path separation | tests/playwright/tools/ToolsProgressHydration.spec.mjs | C:\nvm4w\nodejs\node.exe C:\Users\davidq\Documents\GitHub\HTML-JavaScript-Gaming\node_modules\@playwright\test\cli.js test tests/playwright/tools/ToolsProgressHydration.spec.mjs --project=playwright --workers=1 --reporter=list | Lane was not selected. |
16+
| tool-navigation | PASS | Admin Tools Progress tool route links, Tool Display Mode build-order previous/next controls, and Toolbox group fallback routing | tests/playwright/tools/ToolNavigationPrevNext.spec.mjs | C:\nvm4w\nodejs\node.exe C:\Users\davidq\Documents\GitHub\HTML-JavaScript-Gaming\node_modules\@playwright\test\cli.js test tests/playwright/tools/ToolNavigationPrevNext.spec.mjs --project=playwright --workers=1 --reporter=list | Lane graph, command shape, targets, fixtures, and ownership compile before runtime. |
1617
| tool-runtime | SKIP | Active public toolbox and Tool Template V2 contract | tests/playwright/tools/RootToolsFutureState.spec.mjs | C:\nvm4w\nodejs\node.exe C:\Users\davidq\Documents\GitHub\HTML-JavaScript-Gaming\node_modules\@playwright\test\cli.js test tests/playwright/tools/RootToolsFutureState.spec.mjs --project=playwright --workers=1 --reporter=list | Lane was not selected. |
1718
| game-runtime | SKIP | Deprecated archive/v1-v2/games reference coverage | none | none | Lane was not selected. |
1819
| integration | SKIP | Integration handoff behavior | none | none | Lane was not selected. |

0 commit comments

Comments
 (0)