diff --git a/docs_build/dev/PROJECT_INSTRUCTIONS.md b/docs_build/dev/PROJECT_INSTRUCTIONS.md
index 6a2014f2f..528312412 100644
--- a/docs_build/dev/PROJECT_INSTRUCTIONS.md
+++ b/docs_build/dev/PROJECT_INSTRUCTIONS.md
@@ -2008,3 +2008,50 @@ Required Git workflow report fields:
- PR URL
- merge result
- final main commit
+
+## CODEX INSTRUCTION ENFORCEMENT START GATE
+
+Codex must run this gate before every PR execution and before any file changes.
+
+Required instruction reads:
+- Read `docs_build/dev/PROJECT_INSTRUCTIONS.md`.
+- Read `docs_build/dev/PROJECT_MULTI_PC.txt`.
+- Treat the newest applicable section in `PROJECT_INSTRUCTIONS.md` as authoritative when rules overlap.
+- Treat the current owner/parity section in `PROJECT_MULTI_PC.txt` as authoritative for PC/Laptop routing.
+
+Required pre-change report:
+- Codex must report instruction compliance as `PASS` or `FAIL` before making file changes.
+- The report must include branch, clean status, PR owner, PR parity, implementation path, validation scope, required report list, and ZIP requirement.
+- Any `FAIL` is a hard stop unless the PR explicitly scopes branch audit or recovery documentation without implementation.
+
+Hard stops before changes:
+- If the current branch is not `main`, HARD STOP.
+- If the repository is not clean before the PR branch is created, HARD STOP.
+- If the PR owner does not match the PC/Laptop ownership map in `PROJECT_MULTI_PC.txt`, HARD STOP.
+- If the PR number parity does not match the assigned machine in `PROJECT_MULTI_PC.txt`, HARD STOP.
+- If the PR asks for implementation and the implementation path is wrong, HARD STOP.
+- If a PR asks for functional parity and only placeholder-only work is possible, HARD STOP and report the missing source or blocker.
+- If scoped validation is skipped without a documented reason, HARD STOP.
+
+Path enforcement:
+- Use the active path named by the PR and verified in the repository.
+- Do not create wrong replacement paths.
+- For Text To Speech work, the active toolbox path is `toolbox/text-to-speech/`.
+- Do not create `tools/text2speech/` for new work.
+- If a PR names archived tools, games, or samples as a functionality sample, treat the archive as a read-only reference sample, not as a reason to skip implementation.
+
+Completion hard stops:
+- If the required repo ZIP is missing, HARD STOP.
+- If the required repo ZIP is empty or not under `tmp/`, HARD STOP.
+- If required reports are missing, HARD STOP.
+- If `docs_build/dev/reports/codex_review.diff` is missing, HARD STOP.
+- If `docs_build/dev/reports/codex_changed_files.txt` is missing, HARD STOP.
+- If manual validation notes are missing, HARD STOP.
+- If the PR-specific report is missing, HARD STOP.
+- If an instruction compliance checklist is required and missing, HARD STOP.
+- If requested scoped validation did not run and no explicit skip reason is recorded, HARD STOP.
+
+Functional parity rule:
+- A PR that asks to restore or rebuild working functionality must produce functional parity with the approved sample or source.
+- Placeholder shells, dead controls, static mockups, and nonfunctional UI are not acceptable completion states for functional parity PRs.
+- If functional parity cannot be reached in scope, Codex must stop and report the exact blocker instead of packaging placeholder-only work.
diff --git a/docs_build/dev/PROJECT_MULTI_PC.txt b/docs_build/dev/PROJECT_MULTI_PC.txt
index 3be408469..60ef4881a 100644
--- a/docs_build/dev/PROJECT_MULTI_PC.txt
+++ b/docs_build/dev/PROJECT_MULTI_PC.txt
@@ -448,3 +448,61 @@ Queue next PR
```
That is probably the fastest path to doubling throughput without creating chaos.
+
+----------------------------------------------------------------------------------------
+
+Current Authoritative Multi-PC Gate
+
+Codex must read this file before every PR execution.
+
+Machine parity:
+
+PC / Environment 1:
+- Uses even-numbered PR sequence values.
+- Example: `PR_26171_064-*`.
+
+Laptop / Environment 2:
+- Uses odd-numbered PR sequence values.
+- Example: `PR_26171_063-*`.
+
+Owner map:
+
+PC / Environment 1 owns Creator Journey work:
+- Game Journey
+- Game Hub
+- Idea
+- Design
+- Objects
+- Worlds
+- Interface
+- Controls
+- Rules
+- Progression
+- Play Test
+- Progress Tracking
+- Game Design
+- Game Crew
+
+Laptop / Environment 2 owns Content Creation and asset/publishing work:
+- Graphics
+- Toolbox images
+- Audio
+- MIDI
+- Messages
+- Text To Speech
+- TTS
+- Publishing
+- Marketplace
+- Community
+- Arcade
+
+Governance, recovery, diagnostics, and instruction-hardening PRs:
+- Follow PR number parity unless Master Control explicitly assigns an owner.
+- Must not implement tool/runtime work from the opposite owner.
+- Must document owner/parity compliance in the PR report.
+
+Hard stop rules:
+- If the PR number parity does not match the current machine, stop before changes.
+- If the PR scope belongs to the other machine owner, stop before changes.
+- If the PR crosses PC and Laptop ownership, stop and require Master Control to split or assign the work.
+- If the requested implementation path conflicts with the active owner path, stop before changes.
diff --git a/docs_build/dev/reports/PR_26171_063-codex-instruction-enforcement-hardening.md b/docs_build/dev/reports/PR_26171_063-codex-instruction-enforcement-hardening.md
new file mode 100644
index 000000000..30bcba263
--- /dev/null
+++ b/docs_build/dev/reports/PR_26171_063-codex-instruction-enforcement-hardening.md
@@ -0,0 +1,48 @@
+# PR_26171_063 Codex Instruction Enforcement Hardening
+
+## Purpose
+
+Make Codex explicitly obey `docs_build/dev/PROJECT_INSTRUCTIONS.md` and `docs_build/dev/PROJECT_MULTI_PC.txt` before every PR.
+
+## Scope
+
+- Added a Codex instruction enforcement start gate to `docs_build/dev/PROJECT_INSTRUCTIONS.md`.
+- Added current authoritative PC/Laptop owner and PR parity rules to `docs_build/dev/PROJECT_MULTI_PC.txt`.
+- Documented hard stops for branch state, clean status, owner mismatch, parity mismatch, wrong implementation paths, missing reports, missing ZIPs, skipped validation, and placeholder-only functional parity work.
+
+## Requirement Checklist
+
+- PASS: Codex must read `docs_build/dev/PROJECT_INSTRUCTIONS.md` before execution.
+- PASS: Codex must read `docs_build/dev/PROJECT_MULTI_PC.txt` before execution.
+- PASS: Codex must report instruction compliance PASS/FAIL before changes.
+- PASS: Codex must hard stop when not on `main` before starting.
+- PASS: Codex must hard stop when the repo is not clean before starting.
+- PASS: Codex must hard stop when PR owner does not match PC/Laptop ownership.
+- PASS: Codex must hard stop when PR number parity does not match assigned machine.
+- PASS: Codex must hard stop when required ZIP is missing.
+- PASS: Codex must hard stop when required reports are missing.
+- PASS: Codex must hard stop when implementation path is wrong.
+- PASS: Codex must hard stop when scoped validation was skipped without reason.
+- PASS: Codex must not continue with placeholder-only work when the PR asks for functional parity.
+- PASS: Codex must not create wrong paths such as `tools/text2speech` when active path is `toolbox/text-to-speech`.
+- PASS: Codex must not treat archived tools as "do not implement" when the PR says they are the functionality sample.
+
+## Owner And Parity Evidence
+
+- Current PR: `PR_26171_063-codex-instruction-enforcement-hardening`.
+- Sequence: `063`.
+- Sequence parity: odd.
+- Assigned machine under the new authoritative gate: Laptop / Environment 2.
+- Scope type: governance, recovery, diagnostics, and instruction-hardening.
+- Result: PASS because governance/instruction-hardening PRs follow PR number parity unless Master Control explicitly assigns another owner.
+
+## Validation Scope
+
+- Playwright impacted: No.
+- No Playwright impact. This PR is docs/workflow only.
+- Validation is docs/static only.
+- Runtime, tool, engine, samples, and Game Hub validation are skipped because no runtime, UI, toolState, engine, or sample behavior changed.
+
+## ZIP
+
+- Required ZIP path: `tmp/PR_26171_063-codex-instruction-enforcement-hardening_delta.zip`.
diff --git a/docs_build/dev/reports/PR_26171_063-instruction-compliance-checklist.md b/docs_build/dev/reports/PR_26171_063-instruction-compliance-checklist.md
new file mode 100644
index 000000000..9d2277ab5
--- /dev/null
+++ b/docs_build/dev/reports/PR_26171_063-instruction-compliance-checklist.md
@@ -0,0 +1,37 @@
+# PR_26171_063 Instruction Compliance Checklist
+
+## Pre-Change Gate
+
+- PASS: Read `docs_build/dev/PROJECT_INSTRUCTIONS.md` before file changes.
+- PASS: Read `docs_build/dev/PROJECT_MULTI_PC.txt` before file changes.
+- PASS: Reported instruction compliance PASS/FAIL before file changes.
+- PASS: Starting branch was `main`.
+- PASS: Starting repository status was clean.
+- PASS: Created scoped branch `pr/26171-063-codex-instruction-enforcement-hardening` after the clean `main` check.
+
+## Current PR Routing
+
+- PASS: PR number `063` is odd.
+- PASS: Odd PR parity maps to Laptop / Environment 2 under the new authoritative Multi-PC gate.
+- PASS: PR scope is instruction/governance hardening and follows parity because no Master Control owner override was provided.
+- PASS: No PC-owned tool implementation was changed.
+- PASS: No Laptop-owned tool implementation was changed.
+
+## Path And Functional Parity Gate
+
+- PASS: No implementation path was changed by this docs-only PR.
+- PASS: `toolbox/text-to-speech/` is documented as the active Text To Speech path.
+- PASS: `tools/text2speech/` is documented as a wrong new-work path.
+- PASS: Placeholder-only functional parity work is prohibited.
+- PASS: Archived functionality samples are documented as read-only reference samples when explicitly named by a PR.
+
+## Completion Gate
+
+- PASS: Required PR-specific report exists.
+- PASS: Required instruction compliance checklist exists.
+- PASS: Required manual validation notes exist.
+- PASS: Required `docs_build/dev/reports/codex_review.diff` exists after artifact generation.
+- PASS: Required `docs_build/dev/reports/codex_changed_files.txt` exists after artifact generation.
+- PASS: Required ZIP exists after packaging.
+- PASS: Scoped validation was not skipped; docs/static validation was run.
+- PASS: Playwright was not run because the PR explicitly requires no Playwright.
diff --git a/docs_build/dev/reports/PR_26171_063-manual-validation-notes.md b/docs_build/dev/reports/PR_26171_063-manual-validation-notes.md
new file mode 100644
index 000000000..43af53cc8
--- /dev/null
+++ b/docs_build/dev/reports/PR_26171_063-manual-validation-notes.md
@@ -0,0 +1,19 @@
+# PR_26171_063 Manual Validation Notes
+
+## Manual Review
+
+- Confirmed the new start gate requires reading `PROJECT_INSTRUCTIONS.md` and `PROJECT_MULTI_PC.txt` before every PR.
+- Confirmed the new gate requires visible PASS/FAIL instruction compliance before file changes.
+- Confirmed the hard stop list covers branch, clean status, owner, parity, required ZIP, required reports, wrong paths, skipped validation, and placeholder-only functional parity work.
+- Confirmed Text To Speech path enforcement names `toolbox/text-to-speech/` as active and rejects new `tools/text2speech/` work.
+- Confirmed archived tools can be used as read-only functionality samples when a PR explicitly names them.
+
+## Manual Runtime Checks
+
+- No Playwright was run.
+- No browser runtime checks were performed.
+- No Project Workspace/Game Hub runtime checks were performed.
+- No Local API checks were performed.
+- No Text To Speech runtime checks were performed.
+
+These checks are out of scope because this PR only changes documentation and governance reports.
diff --git a/docs_build/dev/reports/PR_26171_063-validation.md b/docs_build/dev/reports/PR_26171_063-validation.md
new file mode 100644
index 000000000..cedb0134a
--- /dev/null
+++ b/docs_build/dev/reports/PR_26171_063-validation.md
@@ -0,0 +1,32 @@
+# PR_26171_063 Validation
+
+## Scope
+
+Docs/static validation only.
+
+No Playwright was run because the PR explicitly says "No Playwright" and the changed files are governance docs and reports only.
+
+## Commands
+
+- `git diff --check`
+ - PASS: no whitespace errors.
+- Targeted required-text validation for `docs_build/dev/PROJECT_INSTRUCTIONS.md`, `docs_build/dev/PROJECT_MULTI_PC.txt`, and PR_26171_063 reports.
+ - PASS: all required hardening anchors were found.
+ - Note: the first targeted text check found missing exact `No Playwright` wording in manual notes; the note was corrected and the validation was rerun successfully.
+
+## Skipped
+
+- `npm run test:workspace-v2`
+ - SKIP: legacy command name for Project Workspace/Game Hub validation; no workspace or toolState behavior changed.
+- `npm run test:playwright:static`
+ - SKIP: command name is Playwright-scoped and this PR explicitly says no Playwright.
+- Runtime, tool, engine, samples, and browser validation
+ - SKIP: docs/workflow-only change.
+
+## Artifact Verification
+
+- PASS: `docs_build/dev/reports/codex_review.diff` exists.
+- PASS: `docs_build/dev/reports/codex_changed_files.txt` exists.
+- PASS: `tmp/PR_26171_063-codex-instruction-enforcement-hardening_delta.zip` exists.
+- PASS: ZIP size is greater than zero.
+- PASS: ZIP contents preserve repo-relative paths.
diff --git a/docs_build/dev/reports/codex_changed_files.txt b/docs_build/dev/reports/codex_changed_files.txt
index 8249c3ff9..4b9b70b93 100644
--- a/docs_build/dev/reports/codex_changed_files.txt
+++ b/docs_build/dev/reports/codex_changed_files.txt
@@ -1,62 +1,37 @@
-# Codex Changed Files - PR_26171_040-idea-board-production-copy-cleanup
+# Codex Changed Files - PR_26171_063-codex-instruction-enforcement-hardening
-## Git Workflow
-- 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.
+## Conflict Resolution Note
+- Merged latest `origin/main` into the PR branch after GitHub reported merge conflicts.
+- Regenerated Codex artifacts from the PR_063 delta against updated `origin/main`.
+- No implementation scope was changed while resolving conflicts.
## Changed Files
-- docs_build/dev/reports/codex_changed_files.txt
+- docs_build/dev/PROJECT_INSTRUCTIONS.md
+- docs_build/dev/PROJECT_MULTI_PC.txt
+- docs_build/dev/reports/PR_26171_063-codex-instruction-enforcement-hardening.md
+- docs_build/dev/reports/PR_26171_063-instruction-compliance-checklist.md
+- docs_build/dev/reports/PR_26171_063-validation.md
+- docs_build/dev/reports/PR_26171_063-manual-validation-notes.md
- 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
+- docs_build/dev/reports/codex_changed_files.txt
-## Requirement Evidence
-- 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.
+## Git Diff Stat Against Updated origin/main
+```text
+ docs_build/dev/PROJECT_INSTRUCTIONS.md | 47 ++
+ docs_build/dev/PROJECT_MULTI_PC.txt | 58 ++
+ ..._063-codex-instruction-enforcement-hardening.md | 48 ++
+ ...R_26171_063-instruction-compliance-checklist.md | 37 ++
+ .../PR_26171_063-manual-validation-notes.md | 19 +
+ docs_build/dev/reports/PR_26171_063-validation.md | 32 +
+ docs_build/dev/reports/codex_changed_files.txt | 48 ++
+ docs_build/dev/reports/codex_review.diff | 699 +++++++++------------
+ 8 files changed, 569 insertions(+), 419 deletions(-)
+```
## 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`.
-- 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.
+- PASS: `git diff --check` after conflict resolution.
+- PASS: targeted required instruction-anchor validation after conflict resolution.
+- SKIP: Playwright, because the PR explicitly requires no Playwright and changes docs/workflow only.
## ZIP
-- 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
+- Path: `tmp/PR_26171_063-codex-instruction-enforcement-hardening_delta.zip`.
diff --git a/docs_build/dev/reports/codex_review.diff b/docs_build/dev/reports/codex_review.diff
index 0e5fe9981..ef70a97af 100644
--- a/docs_build/dev/reports/codex_review.diff
+++ b/docs_build/dev/reports/codex_review.diff
@@ -1,420 +1,281 @@
-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.
-