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 @@
+
Table-first creator notebook for ideas before a project exists.
++Capture, compare, and shape game ideas in one table.
+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.
+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.
+The primary surface is a table so creators can scan, compare, and govern early ideas without a form-first workflow.
++Scan, compare, and update early ideas without leaving the table.
+