diff --git a/docs_build/dev/reports/codex_changed_files.txt b/docs_build/dev/reports/codex_changed_files.txt index cd256bd46..8249c3ff9 100644 --- a/docs_build/dev/reports/codex_changed_files.txt +++ b/docs_build/dev/reports/codex_changed_files.txt @@ -1,39 +1,62 @@ -# Codex Changed Files - PR_26171_059-rollback-restore-plan +# Codex Changed Files - PR_26171_040-idea-board-production-copy-cleanup ## Git Workflow -- Verified starting branch: `main`. -- Verified repo scope: clean after removing leftover local-only PR_26171_057 report artifacts. -- Pulled latest `origin/main`: `20fd280c608917b960b3080484a5d28c51990ccb`. -- Created branch: `pr/26171-059-rollback-restore-plan`. -- Push result: pending until after commit. -- PR URL: pending until after push. +- Current branch: `codex/pr-26171-040-idea-board-production-copy-cleanup`. +- Expected starting branch: `main` (PASS before branch creation). +- Created branch: `codex/pr-26171-040-idea-board-production-copy-cleanup`. +- Commit before conflict resolution: `acbc5b113e9e90a4051e810897415ea222040ddd`. +- Initial push result: PASS, branch pushed to `origin/codex/pr-26171-040-idea-board-production-copy-cleanup`. +- PR URL: `https://github.com/ToolboxAid/HTML-JavaScript-Gaming/pull/15`. +- Conflict resolution: merged `origin/main` at `7393b650228c84d266701cc3f4ce3696029dd47e`; conflicts were limited to `codex_changed_files.txt` and `codex_review.diff`. +- Conflict resolution push result: pending until after merge-validation commit. - Merge result: pending until after PR validation/merge. - Final main sync: pending until after merge and final pull. ## Changed Files -- docs_build/dev/reports/PR_26171_059-rollback-restore-plan.md -- docs_build/dev/reports/PR_26171_059-validation.md -- docs_build/dev/reports/PR_26171_059-manual-validation-notes.md -- docs_build/dev/reports/codex_review.diff - docs_build/dev/reports/codex_changed_files.txt +- docs_build/dev/reports/codex_review.diff +- docs_build/dev/reports/coverage_changed_js_guardrail.txt +- docs_build/dev/reports/playwright_v8_coverage_report.txt +- src/dev-runtime/server/local-api-router.mjs +- src/shared/toolbox/tool-metadata-inventory.js +- tests/playwright/tools/IdeaBoardTableNotes.spec.mjs +- tests/playwright/tools/ToolboxRoutePages.spec.mjs +- toolbox/idea-board/index.html +- toolbox/idea-board/index.js ## Requirement Evidence -- PASS: Documented Local API sign-in recovery requirements. -- PASS: Documented env diagnostics and runtime port requirements. -- PASS: Documented toolbox image restoration requirements. -- PASS: Documented Text To Speech engine/audio rebuild requirements. -- PASS: Documented Game Journey table correction requirements. -- PASS: Documented Game Journey post-rollback verification requirements. -- PASS: Documented reapply rules requiring clean `main`, scoped branches, and no disconnected branch reuse. -- PASS: Documented discarded contaminated work list. -- PASS: No implementation reapply in this PR. +- PASS: Creator-visible Idea Board page copy no longer uses DB-shaped, in-page data model, ID/flag/metadata/seed/debug/mock/test/internal wording. +- PASS: Shared Toolbox metadata for Idea Board now uses simple creator-facing language for short description, description, and progress checklist text. +- PASS: Existing persisted Toolbox metadata rows now source-sync Idea Board copy so the browser-visible registry summary updates from source-controlled text. +- PASS: Idea Board table workflow, Add Idea, Add Note, Edit/Delete, Save/Cancel, Status dropdown, accordion behavior, notes under idea rows, and existing in-page data structure were preserved. +- PASS: Targeted Playwright production-copy checks verify the Idea Board main surface does not expose the prohibited creator-visible wording. +- PASS: Copied/adapted files verified as not applicable for this copy-only PR; no Tool Template V2 file copy was required. ## Validation -- PASS: `npm run test:playwright:static`. -- PASS: Restored unrelated generated validation report churn after static validation. +- PASS: `node --check toolbox/idea-board/index.js`. +- PASS: `node --check src/dev-runtime/server/local-api-router.mjs`. +- PASS: `node --check src/shared/toolbox/tool-metadata-inventory.js`. +- PASS: `node --check tests/playwright/tools/IdeaBoardTableNotes.spec.mjs`. +- PASS: `node --check tests/playwright/tools/ToolboxRoutePages.spec.mjs`. +- PASS: `npx playwright test tests/playwright/tools/IdeaBoardTableNotes.spec.mjs --project=playwright --workers=1 --reporter=line`. +- PASS: `npx playwright test tests/playwright/tools/ToolboxRoutePages.spec.mjs --project=playwright --workers=1 --reporter=line -g "Idea Board launches"`. - PASS: `git diff --check`. -- NOT RUN: `npm run dev:local-api` by design for docs/static-only scope. -- NOT RUN: `npm run test:workspace-v2` by design for docs/static-only scope. +- PASS: Post-conflict rerun completed after merging `origin/main` at `7393b650228c84d266701cc3f4ce3696029dd47e`. +- PASS: Playwright V8 coverage report produced because runtime JavaScript changed. +- WARN: Coverage report marks `src/dev-runtime/server/local-api-router.mjs` and `src/shared/toolbox/tool-metadata-inventory.js` as not collected by browser V8 coverage; advisory only per project instructions. +- SKIPPED: Full samples smoke was not run per request. ## ZIP -- Path: `tmp/PR_26171_059-rollback-restore-plan_delta.zip`. \ No newline at end of file +- Path: `tmp/PR_26171_040-idea-board-production-copy-cleanup_delta.zip`. +- Size: final size reported in the delivery summary after conflict-resolution ZIP refresh. +- Contents: + - docs_build/dev/reports/codex_changed_files.txt + - docs_build/dev/reports/codex_review.diff + - docs_build/dev/reports/coverage_changed_js_guardrail.txt + - docs_build/dev/reports/playwright_v8_coverage_report.txt + - src/dev-runtime/server/local-api-router.mjs + - src/shared/toolbox/tool-metadata-inventory.js + - tests/playwright/tools/IdeaBoardTableNotes.spec.mjs + - tests/playwright/tools/ToolboxRoutePages.spec.mjs + - toolbox/idea-board/index.html + - toolbox/idea-board/index.js diff --git a/docs_build/dev/reports/codex_review.diff b/docs_build/dev/reports/codex_review.diff index 5dd83c240..0e5fe9981 100644 --- a/docs_build/dev/reports/codex_review.diff +++ b/docs_build/dev/reports/codex_review.diff @@ -1,166 +1,420 @@ -diff --git a/docs_build/dev/reports/PR_26171_059-manual-validation-notes.md b/docs_build/dev/reports/PR_26171_059-manual-validation-notes.md -new file mode 100644 -index 000000000..d34d3d31c ---- /dev/null -+++ b/docs_build/dev/reports/PR_26171_059-manual-validation-notes.md -@@ -0,0 +1,19 @@ -+# PR_26171_059 Manual Validation Notes -+ -+## Manual Review -+ -+- Confirmed this PR only documents the rollback restore plan. -+- Confirmed the restore list keeps Local API sign-in recovery, env diagnostics, toolbox image restoration, Text To Speech rebuild, and Game Journey corrections as separate future scoped PRs. -+- Confirmed this PR does not reapply implementation. -+- Confirmed this PR excludes disconnected PC branch reuse, broad cherry-picks, wrong-path `tools/text2speech/` work, placeholder Text To Speech shell work, and unrelated report churn. -+ -+## Runtime Notes -+ -+- No browser sign-in flow was manually exercised for this PR. -+- No Local API runtime was started for this PR. -+- No Project Workspace runtime validation was run for this PR. -+- No Text To Speech runtime validation was run for this PR. -+- No toolbox image runtime validation was run for this PR. -+- No Game Journey runtime validation was run for this PR. -+ -+Runtime validation must happen in the future scoped implementation PRs listed in `PR_26171_059-rollback-restore-plan.md`. -diff --git a/docs_build/dev/reports/PR_26171_059-rollback-restore-plan.md b/docs_build/dev/reports/PR_26171_059-rollback-restore-plan.md -new file mode 100644 -index 000000000..83ddb4f7f ---- /dev/null -+++ b/docs_build/dev/reports/PR_26171_059-rollback-restore-plan.md -@@ -0,0 +1,97 @@ -+# PR_26171_059 Rollback Restore Plan -+ -+## Purpose -+ -+Commit the clean recovery state from latest `main` and document the work that must be restored after rollback. -+ -+This PR is documentation-only. It does not reapply implementation work, does not reuse the disconnected PC branch, and does not cherry-pick broad contaminated history. -+ -+## Baseline Evidence -+ -+- Verified starting branch: `main`. -+- Removed leftover local-only PR_26171_057 report artifacts before branching. -+- Pulled latest `origin/main` with a fast-forward update. -+- Recovery baseline commit used for this PR branch: `20fd280c608917b960b3080484a5d28c51990ccb`. -+- Created scoped branch: `pr/26171-059-rollback-restore-plan`. -+- No runtime, toolbox, engine, API, or test implementation files are changed by this PR. -+ -+## Restore List After Rollback -+ -+1. Local API sign-in recovery -+ - Inspect the sign-in page and its external JavaScript first. -+ - Remove preview-disabled sign-in behavior. -+ - Use the configured API URL instead of hardcoded preview-disabled behavior. -+ - Submit email and password to the Local API session auth endpoint used by `npm run dev:local-api`. -+ - On valid DEV credentials, create a Local API session and redirect to the expected signed-in destination. -+ - On invalid credentials, show a visible actionable error. -+ - Keep Continue Browsing for guest browsing. -+ - Do not create fake login. -+ - Do not use browser-owned auth as the source of truth. -+ - Do not create custom password tables. -+ - Do not change Create Account or Password Reset beyond keeping placeholders safe. -+ -+2. Env diagnostics and runtime ports -+ - Print all env keys one per row. -+ - Mask secrets. -+ - Print the active site, API, and database ports. -+ -+3. Toolbox image restoration -+ - Restore valid toolbox images. -+ - Remove excessive `image-missing.svg` fallbacks. -+ - Keep image restoration scoped to real existing assets or approved replacements. -+ -+4. Text To Speech engine/audio rebuild -+ - Use `old_text2speech-V2` as the functionality sample. -+ - Move reusable Text To Speech engine code to `src/engine/audio/`. -+ - Make `toolbox/text-to-speech/` consume the reusable engine module. -+ - Restore old controls, options, and features from the working sample. -+ - Do not use the wrong `tools/text2speech/` path. -+ - Do not ship placeholder Text To Speech shell work that does not restore functionality. -+ -+5. Game Journey table correction -+ - Add row under the table. -+ - Support inline edit row behavior. -+ - Treat Note Tree as a subtable. -+ - Show metadata in table columns. -+ - Ensure system notes cannot be deleted. -+ -+6. Game Journey post-rollback verification -+ - Confirm friendly descriptions. -+ - Confirm dashboard, targets, and insights only if those surfaces are still present on clean `main`. -+ - Reapply missing approved Journey work only from clean `main`. -+ -+## Reapply Rules -+ -+- Every reapply PR starts from clean `main`. -+- Every reapply PR gets its own branch. -+- Every reapply PR is scoped to one approved purpose. -+- Do not reuse the disconnected branch. -+- Do not merge the disconnected branch. -+- Do not cherry-pick broad PC commits. -+- Prefer file-level or diff-level reapplication for approved scoped changes. -+- Exclude wrong-path work such as `tools/text2speech/`. -+- Exclude placeholder Text To Speech shell work. -+- Exclude unrelated report churn. -+- Run targeted validation only after each reapply PR implements its scoped change. -+ -+## Approved Reapply Order -+ -+1. Local API sign-in recovery. -+2. Env diagnostics and runtime ports. -+3. Toolbox image restoration. -+4. Text To Speech engine/audio rebuild from the old working Text To Speech sample. -+5. Game Journey table corrections if still missing. -+6. Game Journey post-rollback verification and approved follow-up only if still needed. -+ -+## Discarded Contaminated Work -+ -+- Disconnected PC branch history. -+- Broad cherry-picks from contaminated commits. -+- Wrong-path `tools/text2speech/` work. -+- Placeholder Text To Speech shell work. -+- Unrelated report churn. -+- Any implementation work not revalidated from clean `main`. -+ -+## Validation Boundary -+ -+This PR is limited to docs/static validation. It intentionally does not run Local API sign-in validation, Text To Speech runtime validation, toolbox image runtime validation, or Project Workspace validation because implementation reapply is out of scope for PR_26171_059. -diff --git a/docs_build/dev/reports/PR_26171_059-validation.md b/docs_build/dev/reports/PR_26171_059-validation.md -new file mode 100644 -index 000000000..4504c6ddb ---- /dev/null -+++ b/docs_build/dev/reports/PR_26171_059-validation.md -@@ -0,0 +1,32 @@ -+# PR_26171_059 Validation Report -+ -+## Scope -+ -+Validation is docs/static only for this rollback restore plan PR. -+ -+Implementation validation is intentionally deferred until each approved restore item is reapplied in its own scoped PR from clean `main`. -+ -+## Commands -+ -+- `git status --short --branch` -+ - PASS: starting branch was `main`. -+ - PASS: leftover PR_26171_057 local-only report artifacts were removed before branching. -+ - PASS: PR branch was created from clean latest `main`. -+- `git pull --ff-only origin main` -+ - PASS: local `main` fast-forwarded to `20fd280c608917b960b3080484a5d28c51990ccb`. -+- `npm run test:playwright:static` -+ - PASS: static-only validation completed successfully. -+ - Note: the command refreshed generated validation reports; those generated report changes were restored because they are unrelated to this rollback plan PR. -+- `git diff --check` -+ - PASS: no whitespace errors. -+ -+## Not Run -+ -+- `npm run dev:local-api` -+- `npm run test:workspace-v2` -+- Runtime sign-in validation -+- Text To Speech runtime validation -+- Toolbox image runtime validation -+- Game Journey runtime validation -+ -+These commands are intentionally out of scope for this docs/static rollback plan PR. +diff --git a/docs_build/dev/reports/codex_changed_files.txt b/docs_build/dev/reports/codex_changed_files.txt +index cd256bd46..8249c3ff9 100644 +--- a/docs_build/dev/reports/codex_changed_files.txt ++++ b/docs_build/dev/reports/codex_changed_files.txt +@@ -1,39 +1,62 @@ +-# Codex Changed Files - PR_26171_059-rollback-restore-plan ++# Codex Changed Files - PR_26171_040-idea-board-production-copy-cleanup + + ## Git Workflow +-- Verified starting branch: `main`. +-- Verified repo scope: clean after removing leftover local-only PR_26171_057 report artifacts. +-- Pulled latest `origin/main`: `20fd280c608917b960b3080484a5d28c51990ccb`. +-- Created branch: `pr/26171-059-rollback-restore-plan`. +-- Push result: pending until after commit. +-- PR URL: pending until after push. ++- Current branch: `codex/pr-26171-040-idea-board-production-copy-cleanup`. ++- Expected starting branch: `main` (PASS before branch creation). ++- Created branch: `codex/pr-26171-040-idea-board-production-copy-cleanup`. ++- Commit before conflict resolution: `acbc5b113e9e90a4051e810897415ea222040ddd`. ++- Initial push result: PASS, branch pushed to `origin/codex/pr-26171-040-idea-board-production-copy-cleanup`. ++- PR URL: `https://github.com/ToolboxAid/HTML-JavaScript-Gaming/pull/15`. ++- Conflict resolution: merged `origin/main` at `7393b650228c84d266701cc3f4ce3696029dd47e`; conflicts were limited to `codex_changed_files.txt` and `codex_review.diff`. ++- Conflict resolution push result: pending until after merge-validation commit. + - Merge result: pending until after PR validation/merge. + - Final main sync: pending until after merge and final pull. + + ## Changed Files +-- docs_build/dev/reports/PR_26171_059-rollback-restore-plan.md +-- docs_build/dev/reports/PR_26171_059-validation.md +-- docs_build/dev/reports/PR_26171_059-manual-validation-notes.md +-- docs_build/dev/reports/codex_review.diff + - docs_build/dev/reports/codex_changed_files.txt ++- docs_build/dev/reports/codex_review.diff ++- docs_build/dev/reports/coverage_changed_js_guardrail.txt ++- docs_build/dev/reports/playwright_v8_coverage_report.txt ++- src/dev-runtime/server/local-api-router.mjs ++- src/shared/toolbox/tool-metadata-inventory.js ++- tests/playwright/tools/IdeaBoardTableNotes.spec.mjs ++- tests/playwright/tools/ToolboxRoutePages.spec.mjs ++- toolbox/idea-board/index.html ++- toolbox/idea-board/index.js + + ## Requirement Evidence +-- PASS: Documented Local API sign-in recovery requirements. +-- PASS: Documented env diagnostics and runtime port requirements. +-- PASS: Documented toolbox image restoration requirements. +-- PASS: Documented Text To Speech engine/audio rebuild requirements. +-- PASS: Documented Game Journey table correction requirements. +-- PASS: Documented Game Journey post-rollback verification requirements. +-- PASS: Documented reapply rules requiring clean `main`, scoped branches, and no disconnected branch reuse. +-- PASS: Documented discarded contaminated work list. +-- PASS: No implementation reapply in this PR. ++- PASS: Creator-visible Idea Board page copy no longer uses DB-shaped, in-page data model, ID/flag/metadata/seed/debug/mock/test/internal wording. ++- PASS: Shared Toolbox metadata for Idea Board now uses simple creator-facing language for short description, description, and progress checklist text. ++- PASS: Existing persisted Toolbox metadata rows now source-sync Idea Board copy so the browser-visible registry summary updates from source-controlled text. ++- PASS: Idea Board table workflow, Add Idea, Add Note, Edit/Delete, Save/Cancel, Status dropdown, accordion behavior, notes under idea rows, and existing in-page data structure were preserved. ++- PASS: Targeted Playwright production-copy checks verify the Idea Board main surface does not expose the prohibited creator-visible wording. ++- PASS: Copied/adapted files verified as not applicable for this copy-only PR; no Tool Template V2 file copy was required. + + ## Validation +-- PASS: `npm run test:playwright:static`. +-- PASS: Restored unrelated generated validation report churn after static validation. ++- PASS: `node --check toolbox/idea-board/index.js`. ++- PASS: `node --check src/dev-runtime/server/local-api-router.mjs`. ++- PASS: `node --check src/shared/toolbox/tool-metadata-inventory.js`. ++- PASS: `node --check tests/playwright/tools/IdeaBoardTableNotes.spec.mjs`. ++- PASS: `node --check tests/playwright/tools/ToolboxRoutePages.spec.mjs`. ++- PASS: `npx playwright test tests/playwright/tools/IdeaBoardTableNotes.spec.mjs --project=playwright --workers=1 --reporter=line`. ++- PASS: `npx playwright test tests/playwright/tools/ToolboxRoutePages.spec.mjs --project=playwright --workers=1 --reporter=line -g "Idea Board launches"`. + - PASS: `git diff --check`. +-- NOT RUN: `npm run dev:local-api` by design for docs/static-only scope. +-- NOT RUN: `npm run test:workspace-v2` by design for docs/static-only scope. ++- PASS: Post-conflict rerun completed after merging `origin/main` at `7393b650228c84d266701cc3f4ce3696029dd47e`. ++- PASS: Playwright V8 coverage report produced because runtime JavaScript changed. ++- WARN: Coverage report marks `src/dev-runtime/server/local-api-router.mjs` and `src/shared/toolbox/tool-metadata-inventory.js` as not collected by browser V8 coverage; advisory only per project instructions. ++- SKIPPED: Full samples smoke was not run per request. + + ## ZIP +-- Path: `tmp/PR_26171_059-rollback-restore-plan_delta.zip`. +\ No newline at end of file ++- Path: `tmp/PR_26171_040-idea-board-production-copy-cleanup_delta.zip`. ++- Size: final size reported in the delivery summary after conflict-resolution ZIP refresh. ++- Contents: ++ - docs_build/dev/reports/codex_changed_files.txt ++ - docs_build/dev/reports/codex_review.diff ++ - docs_build/dev/reports/coverage_changed_js_guardrail.txt ++ - docs_build/dev/reports/playwright_v8_coverage_report.txt ++ - src/dev-runtime/server/local-api-router.mjs ++ - src/shared/toolbox/tool-metadata-inventory.js ++ - tests/playwright/tools/IdeaBoardTableNotes.spec.mjs ++ - tests/playwright/tools/ToolboxRoutePages.spec.mjs ++ - toolbox/idea-board/index.html ++ - toolbox/idea-board/index.js +diff --git a/docs_build/dev/reports/coverage_changed_js_guardrail.txt b/docs_build/dev/reports/coverage_changed_js_guardrail.txt +index 24989fe63..076d27690 100644 +--- a/docs_build/dev/reports/coverage_changed_js_guardrail.txt ++++ b/docs_build/dev/reports/coverage_changed_js_guardrail.txt +@@ -6,7 +6,10 @@ Missing changed runtime JS files are WARN, not FAIL. + Source: Playwright/Chromium built-in V8 coverage from the active Playwright run. + + Changed runtime JS files considered: +-(70%) toolbox/idea-board/index.js - executed lines 481/481; executed functions 23/33 ++(0%) src/dev-runtime/server/local-api-router.mjs - WARNING: changed runtime JS file was not collected by Playwright V8 coverage; advisory only ++(0%) src/shared/toolbox/tool-metadata-inventory.js - WARNING: changed runtime JS file was not collected by Playwright V8 coverage; advisory only ++(70%) toolbox/idea-board/index.js - executed lines 480/480; executed functions 23/33 + + Guardrail warnings: +-(100%) none - no changed runtime JS coverage warnings ++(0%) src/dev-runtime/server/local-api-router.mjs - WARNING: changed runtime JS file missing from coverage; advisory only ++(0%) src/shared/toolbox/tool-metadata-inventory.js - WARNING: changed runtime JS file missing from coverage; advisory only +diff --git a/docs_build/dev/reports/playwright_v8_coverage_report.txt b/docs_build/dev/reports/playwright_v8_coverage_report.txt +index e9decee67..cb35b4d50 100644 +--- a/docs_build/dev/reports/playwright_v8_coverage_report.txt ++++ b/docs_build/dev/reports/playwright_v8_coverage_report.txt +@@ -17,7 +17,9 @@ Exercised tool entry points detected: + (63%) Theme V2 Shared JS - exercised 2 runtime JS files + + Changed runtime JS files covered: +-(70%) toolbox/idea-board/index.js - executed lines 481/481; executed functions 23/33 ++(0%) src/dev-runtime/server/local-api-router.mjs - WARNING: changed runtime JS file was not collected by Playwright V8 coverage; advisory only ++(0%) src/shared/toolbox/tool-metadata-inventory.js - WARNING: changed runtime JS file was not collected by Playwright V8 coverage; advisory only ++(70%) toolbox/idea-board/index.js - executed lines 480/480; executed functions 23/33 + + Files with executed line/function counts where available: + (25%) src/api/session-api-client.js - executed lines 68/68; executed functions 3/12 +@@ -28,14 +30,17 @@ Files with executed line/function counts where available: + (65%) src/api/public-config-client.js - executed lines 209/209; executed functions 17/26 + (67%) src/api/game-journey-completion-api-client.js - executed lines 15/15; executed functions 2/3 + (67%) toolbox/game-workspace/game-workspace-api-client.js - executed lines 20/20; executed functions 2/3 +-(70%) toolbox/idea-board/index.js - executed lines 481/481; executed functions 23/33 ++(70%) toolbox/idea-board/index.js - executed lines 480/480; executed functions 23/33 + (78%) toolbox/tools-page-accordions.js - executed lines 1156/1156; executed functions 87/111 + (86%) toolbox/tool-registry-api-client.js - executed lines 155/155; executed functions 25/29 + + Uncovered or low-coverage changed JS files: +-(100%) none - no low-coverage changed runtime JS files ++(0%) src/dev-runtime/server/local-api-router.mjs - WARNING: uncovered changed runtime JS file; advisory only ++(0%) src/shared/toolbox/tool-metadata-inventory.js - WARNING: uncovered changed runtime JS file; advisory only + + Changed JS files considered: ++(0%) src/dev-runtime/server/local-api-router.mjs - changed JS file not collected as browser runtime coverage ++(0%) src/shared/toolbox/tool-metadata-inventory.js - changed JS file not collected as browser runtime coverage + (0%) tests/playwright/tools/IdeaBoardTableNotes.spec.mjs - changed JS file not collected as browser runtime coverage + (0%) tests/playwright/tools/ToolboxRoutePages.spec.mjs - changed JS file not collected as browser runtime coverage + (70%) toolbox/idea-board/index.js - changed JS file with browser V8 coverage +diff --git a/src/dev-runtime/server/local-api-router.mjs b/src/dev-runtime/server/local-api-router.mjs +index f272c970b..9b98fca14 100644 +--- a/src/dev-runtime/server/local-api-router.mjs ++++ b/src/dev-runtime/server/local-api-router.mjs +@@ -1427,7 +1427,7 @@ function normalizedToolKey(row) { + return String(row?.toolKey || row?.toolId || row?.id || "").trim(); + } + +-const SOURCE_CONTROLLED_TOOLBOX_TOOL_IDS = new Set(["game-workspace", "messages", "tags", "text-to-speech", "users"]); ++const SOURCE_CONTROLLED_TOOLBOX_TOOL_IDS = new Set(["game-workspace", "idea-board", "messages", "tags", "text-to-speech", "users"]); + const SOURCE_CONTROLLED_TOOLBOX_METADATA_FIELDS = Object.freeze([ + "active", + "adminOnly", +diff --git a/src/shared/toolbox/tool-metadata-inventory.js b/src/shared/toolbox/tool-metadata-inventory.js +index 130f70814..db04eac5b 100644 +--- a/src/shared/toolbox/tool-metadata-inventory.js ++++ b/src/shared/toolbox/tool-metadata-inventory.js +@@ -72,14 +72,14 @@ export const TOOL_REGISTRY = Object.freeze([ + "id": "idea-board", + "name": "Idea Board", + "displayName": "Idea Board", +- "shortDescription": "Capture creator notebook cards before a project exists.", ++ "shortDescription": "Capture, compare, and shape game ideas in a table.", + "shortLabel": "Idea Board", + "path": "idea-board", + "folderName": "idea-board", + "entryPoint": "idea-board/index.html", + "badge": "/assets/theme-v2/images/badges/game-design.png", + "tool": "/assets/theme-v2/images/tools/game-design.png", +- "description": "Capture creator notebook cards, board views, lists, notes, tags, and placeholder project creation before a project exists.", ++ "description": "Capture, compare, and shape game ideas with notes under each idea row.", + "category": "Idea", + "colorGroup": "tool-group-idea", + "active": true, +@@ -91,9 +91,9 @@ export const TOOL_REGISTRY = Object.freeze([ + "status": "Wireframe", + "releaseChannel": "wireframe", + "progressChecklist": [ +- "Wireframe notebook sections visible", +- "Create Project placeholder remains disabled", +- "No persistence or project record creation" ++ "Idea table workflow visible", ++ "Add Idea and Add Note actions remain inline", ++ "Create Project remains unavailable until an idea is ready" + ], + "deferred": false, + "hidden": false, +diff --git a/tests/playwright/tools/IdeaBoardTableNotes.spec.mjs b/tests/playwright/tools/IdeaBoardTableNotes.spec.mjs +index b115c4191..f5544ca88 100644 +--- a/tests/playwright/tools/IdeaBoardTableNotes.spec.mjs ++++ b/tests/playwright/tools/IdeaBoardTableNotes.spec.mjs +@@ -90,7 +90,13 @@ async function expectExpandedNotesChildIndentation(page, ideaId, expectedInputRo + } + } + +-test("Idea Board uses DB-shaped accordion table ideas and notes", async ({ page }) => { ++async function expectProductionCopy(page) { ++ await expect(page.locator("main")).not.toContainText( ++ /\bDB-shaped\b|\bin-page data model\b|\buserId\b|\bideaId\b|\bnoteId\b|\bsystem flag\b|\bmetadata\b|\bseed\b|\bdebug\b|\bselected context\b|\bmock\b|\btest\b|\binternal implementation\b|\bplaceholder\b|\bproject records\b|\bmutating API\b|\bauth\b|\bAI\b|\bdatabase behavior\b/i, ++ ); ++} ++ ++test("Idea Board uses accordion table ideas and notes", async ({ page }) => { + const server = await startRepoServer(); + const previousApiUrl = process.env.GAMEFOUNDRY_API_URL; + const previousSiteUrl = process.env.GAMEFOUNDRY_SITE_URL; +@@ -121,6 +127,7 @@ test("Idea Board uses DB-shaped accordion table ideas and notes", async ({ page + try { + await page.goto(`${server.baseUrl}/toolbox/idea-board/index.html`, { waitUntil: "networkidle" }); + await expect(page.getByRole("heading", { level: 1, name: "Idea Board" })).toBeVisible(); ++ await expectProductionCopy(page); + await expect(page.locator("[data-idea-board-table] > thead th[scope='col']")).toHaveText([ + "Idea", + "Pitch", +@@ -160,6 +167,7 @@ test("Idea Board uses DB-shaped accordion table ideas and notes", async ({ page + await expect(page.locator("[data-idea-board-expanded-row]")).toHaveCount(0); + await page.locator("[data-idea-board-idea-cell='top-thoughts']").click(); + await expect(page.locator("[data-idea-board-expanded-row='top-thoughts']")).toBeVisible(); ++ await expectProductionCopy(page); + await expectIdeaChevron(page, "top-thoughts", "gfs-chevron-up.svg"); + await expect(page.locator("[data-idea-board-idea-row='top-thoughts'] + [data-idea-board-expanded-row='top-thoughts']")).toHaveCount(1); + await expect(page.locator("[data-idea-board-expanded-row='top-thoughts'] [data-idea-board-notes-header]")).toHaveCount(0); +@@ -179,9 +187,9 @@ test("Idea Board uses DB-shaped accordion table ideas and notes", async ({ page + await systemNote.locator("[data-idea-board-note-action='edit']").click(); + await expect(page.locator("[data-idea-board-note-input-row] [data-idea-board-note-action]")).toHaveText(["Save", "Cancel"]); + await expectExpandedNotesChildIndentation(page, "top-thoughts", 1); +- await page.locator("[data-idea-board-note-input]").fill("System note can be edited in-place."); ++ await page.locator("[data-idea-board-note-input]").fill("Starter note can be edited in place."); + await page.locator("[data-idea-board-note-action='save']").click(); +- await expect(page.locator("[data-idea-board-notes-table='top-thoughts']")).toContainText("System note can be edited in-place."); ++ await expect(page.locator("[data-idea-board-notes-table='top-thoughts']")).toContainText("Starter note can be edited in place."); + await expect(page.locator("[data-idea-board-system-note] [data-idea-board-note-action='delete']")).toHaveCount(0); + + await page.locator("[data-idea-board-add-note='top-thoughts']").click(); +diff --git a/tests/playwright/tools/ToolboxRoutePages.spec.mjs b/tests/playwright/tools/ToolboxRoutePages.spec.mjs +index 6a1f1ebe3..b3033e10d 100644 +--- a/tests/playwright/tools/ToolboxRoutePages.spec.mjs ++++ b/tests/playwright/tools/ToolboxRoutePages.spec.mjs +@@ -192,6 +192,12 @@ async function expectExpandedNotesChildIndentation(page, ideaId, expectedInputRo + } + } + ++async function expectIdeaBoardProductionCopy(page) { ++ await expect(page.locator("main")).not.toContainText( ++ /\bDB-shaped\b|\bin-page data model\b|\buserId\b|\bideaId\b|\bnoteId\b|\bsystem flag\b|\bmetadata\b|\bseed\b|\bdebug\b|\bselected context\b|\bmock\b|\btest\b|\binternal implementation\b|\bplaceholder\b|\bproject records\b|\bmutating API\b|\bauth\b|\bAI\b|\bdatabase behavior\b/i, ++ ); ++} ++ + test("tools route aliases render toolbox tool pages", async ({ page }) => { + const server = await startRepoServer(); + const failedRequests = []; +@@ -288,6 +294,7 @@ test("Idea Board launches from Toolbox with accordion table notes model", async + await page.waitForURL(/\/toolbox\/idea-board\/index\.html$/); + await page.waitForLoadState("networkidle"); + await expect(page.getByRole("heading", { level: 1, name: "Idea Board" })).toBeVisible(); ++ await expectIdeaBoardProductionCopy(page); + const ideaBoardSections = await page.locator("[data-idea-board-section]").evaluateAll((sections) => ( + sections.map((section) => section.getAttribute("data-idea-board-section")) + )); +@@ -310,11 +317,12 @@ test("Idea Board launches from Toolbox with accordion table notes model", async + await expect(page.locator("[data-idea-board-notes-count='sky-orchard']")).toHaveText("3 Notes"); + await expect(page.locator("[data-idea-board-notes-count='clockwork-courier']")).toHaveText("0 Notes"); + await expectIdeaChevron(page, "top-thoughts", "gfs-chevron-down.svg"); +- await expect(page.locator("[data-idea-board-status]")).toHaveText("Idea Board table edits are in-page only. No project records, auth, AI, or database behavior is connected."); ++ await expect(page.locator("[data-idea-board-status]")).toHaveText("Ready to shape ideas and notes."); + await page.locator("[data-idea-board-notes-count='top-thoughts']").click(); + await expect(page.locator("[data-idea-board-expanded-row]")).toHaveCount(0); + await page.locator("[data-idea-board-idea-cell='top-thoughts']").click(); + await expect(page.locator("[data-idea-board-expanded-row='top-thoughts']")).toBeVisible(); ++ await expectIdeaBoardProductionCopy(page); + await expectIdeaChevron(page, "top-thoughts", "gfs-chevron-up.svg"); + await expect(page.locator("[data-idea-board-idea-row='top-thoughts'] + [data-idea-board-expanded-row='top-thoughts']")).toHaveCount(1); + await expect(page.locator("[data-idea-board-expanded-row='top-thoughts'] [data-idea-board-notes-header]")).toHaveCount(0); +diff --git a/toolbox/idea-board/index.html b/toolbox/idea-board/index.html +index a74e747be..214a303fb 100644 +--- a/toolbox/idea-board/index.html ++++ b/toolbox/idea-board/index.html +@@ -6,7 +6,7 @@ + + + Idea Board - GameFoundryStudio +- ++ + + + +@@ -18,7 +18,7 @@ +
+
Toolbox
+

Idea Board

+-

Table-first creator notebook for ideas before a project exists.

++

Capture, compare, and shape game ideas in one table.

+
+ +
+@@ -32,21 +32,21 @@ +
+ Workflow +
+-

Review ideas in the work table, then expand an idea row to manage its notes in place.

++

Review ideas in the table, then expand an idea row to manage its notes.

+
+
+
+ Status +
+-

Statuses remain governance labels only: New, Exploring, Parked, Ready to Shape.

++

Use status to show where each idea stands: New, Exploring, Parked, or Ready to Shape.

+
+
+ + +
+
+-

Idea Work Surface

+-

The primary surface is a table so creators can scan, compare, and govern early ideas without a form-first workflow.

++

Ideas

++

Scan, compare, and update early ideas without leaving the table.

+
+ + +@@ -66,27 +66,27 @@ + +
-

Idea Work Surface

-

The primary surface is a table so creators can scan, compare, and govern early ideas without a form-first workflow.

+

Ideas

+

Scan, compare, and update early ideas without leaving the table.

Idea Board table with expandable notes rows
@@ -66,27 +66,27 @@

Idea Work Surface

Idea Board table with expandable notes rows