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 @@ - - - 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 Board table with expandable notes rows