Skip to content

Commit e7732c1

Browse files
committed
Merge remote-tracking branch 'origin/main' into pr/26171-063-codex-instruction-enforcement-hardening
# Conflicts: # docs_build/dev/reports/codex_changed_files.txt # docs_build/dev/reports/codex_review.diff
2 parents 8f53ad4 + 9aea9f8 commit e7732c1

9 files changed

Lines changed: 78 additions & 61 deletions

File tree

docs_build/dev/reports/codex_changed_files.txt

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,9 @@
11
# Codex Changed Files - PR_26171_063-codex-instruction-enforcement-hardening
22

3-
## Git Status Short
4-
```text
5-
M docs_build/dev/PROJECT_INSTRUCTIONS.md
6-
M docs_build/dev/PROJECT_MULTI_PC.txt
7-
A docs_build/dev/reports/PR_26171_063-codex-instruction-enforcement-hardening.md
8-
A docs_build/dev/reports/PR_26171_063-instruction-compliance-checklist.md
9-
A docs_build/dev/reports/PR_26171_063-manual-validation-notes.md
10-
A docs_build/dev/reports/PR_26171_063-validation.md
11-
M docs_build/dev/reports/codex_changed_files.txt
12-
M docs_build/dev/reports/codex_review.diff
13-
```
14-
15-
## Git Diff Stat
16-
```text
17-
docs_build/dev/PROJECT_INSTRUCTIONS.md | 47 +++
18-
docs_build/dev/PROJECT_MULTI_PC.txt | 58 +++
19-
..._063-codex-instruction-enforcement-hardening.md | 48 +++
20-
...R_26171_063-instruction-compliance-checklist.md | 37 ++
21-
.../PR_26171_063-manual-validation-notes.md | 19 +
22-
docs_build/dev/reports/PR_26171_063-validation.md | 32 ++
23-
docs_build/dev/reports/codex_changed_files.txt | 65 ++--
24-
docs_build/dev/reports/codex_review.diff | 395 +++++++++++++--------
25-
8 files changed, 531 insertions(+), 170 deletions(-)
26-
```
3+
## Conflict Resolution Note
4+
- Merged latest `origin/main` into the PR branch after GitHub reported merge conflicts.
5+
- Regenerated Codex artifacts from the PR_063 delta against updated `origin/main`.
6+
- No implementation scope was changed while resolving conflicts.
277

288
## Changed Files
299
- docs_build/dev/PROJECT_INSTRUCTIONS.md
@@ -35,9 +15,22 @@
3515
- docs_build/dev/reports/codex_review.diff
3616
- docs_build/dev/reports/codex_changed_files.txt
3717

18+
## Git Diff Stat Against Updated origin/main
19+
```text
20+
docs_build/dev/PROJECT_INSTRUCTIONS.md | 47 ++
21+
docs_build/dev/PROJECT_MULTI_PC.txt | 58 ++
22+
..._063-codex-instruction-enforcement-hardening.md | 48 ++
23+
...R_26171_063-instruction-compliance-checklist.md | 37 ++
24+
.../PR_26171_063-manual-validation-notes.md | 19 +
25+
docs_build/dev/reports/PR_26171_063-validation.md | 32 +
26+
docs_build/dev/reports/codex_changed_files.txt | 48 ++
27+
docs_build/dev/reports/codex_review.diff | 699 +++++++++------------
28+
8 files changed, 569 insertions(+), 419 deletions(-)
29+
```
30+
3831
## Validation
39-
- PASS: `git diff --check` after artifact whitespace normalization.
40-
- PASS: targeted required-text validation for instruction hardening anchors.
32+
- PASS: `git diff --check` after conflict resolution.
33+
- PASS: targeted required instruction-anchor validation after conflict resolution.
4134
- SKIP: Playwright, because the PR explicitly requires no Playwright and changes docs/workflow only.
4235

4336
## ZIP

docs_build/dev/reports/coverage_changed_js_guardrail.txt

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

88
Changed runtime JS files considered:
9-
(70%) toolbox/idea-board/index.js - executed lines 481/481; executed functions 23/33
9+
(0%) src/dev-runtime/server/local-api-router.mjs - WARNING: changed runtime JS file was not collected by Playwright V8 coverage; advisory only
10+
(0%) src/shared/toolbox/tool-metadata-inventory.js - WARNING: changed runtime JS file was not collected by Playwright V8 coverage; advisory only
11+
(70%) toolbox/idea-board/index.js - executed lines 480/480; executed functions 23/33
1012

1113
Guardrail warnings:
12-
(100%) none - no changed runtime JS coverage warnings
14+
(0%) src/dev-runtime/server/local-api-router.mjs - WARNING: changed runtime JS file missing from coverage; advisory only
15+
(0%) src/shared/toolbox/tool-metadata-inventory.js - WARNING: changed runtime JS file missing from coverage; advisory only

docs_build/dev/reports/playwright_v8_coverage_report.txt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ Exercised tool entry points detected:
1717
(63%) Theme V2 Shared JS - exercised 2 runtime JS files
1818

1919
Changed runtime JS files covered:
20-
(70%) toolbox/idea-board/index.js - executed lines 481/481; executed functions 23/33
20+
(0%) src/dev-runtime/server/local-api-router.mjs - WARNING: changed runtime JS file was not collected by Playwright V8 coverage; advisory only
21+
(0%) src/shared/toolbox/tool-metadata-inventory.js - WARNING: changed runtime JS file was not collected by Playwright V8 coverage; advisory only
22+
(70%) toolbox/idea-board/index.js - executed lines 480/480; executed functions 23/33
2123

2224
Files with executed line/function counts where available:
2325
(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:
2830
(65%) src/api/public-config-client.js - executed lines 209/209; executed functions 17/26
2931
(67%) src/api/game-journey-completion-api-client.js - executed lines 15/15; executed functions 2/3
3032
(67%) toolbox/game-workspace/game-workspace-api-client.js - executed lines 20/20; executed functions 2/3
31-
(70%) toolbox/idea-board/index.js - executed lines 481/481; executed functions 23/33
33+
(70%) toolbox/idea-board/index.js - executed lines 480/480; executed functions 23/33
3234
(78%) toolbox/tools-page-accordions.js - executed lines 1156/1156; executed functions 87/111
3335
(86%) toolbox/tool-registry-api-client.js - executed lines 155/155; executed functions 25/29
3436

3537
Uncovered or low-coverage changed JS files:
36-
(100%) none - no low-coverage changed runtime JS files
38+
(0%) src/dev-runtime/server/local-api-router.mjs - WARNING: uncovered changed runtime JS file; advisory only
39+
(0%) src/shared/toolbox/tool-metadata-inventory.js - WARNING: uncovered changed runtime JS file; advisory only
3740

3841
Changed JS files considered:
42+
(0%) src/dev-runtime/server/local-api-router.mjs - changed JS file not collected as browser runtime coverage
43+
(0%) src/shared/toolbox/tool-metadata-inventory.js - changed JS file not collected as browser runtime coverage
3944
(0%) tests/playwright/tools/IdeaBoardTableNotes.spec.mjs - changed JS file not collected as browser runtime coverage
4045
(0%) tests/playwright/tools/ToolboxRoutePages.spec.mjs - changed JS file not collected as browser runtime coverage
4146
(70%) toolbox/idea-board/index.js - changed JS file with browser V8 coverage

src/dev-runtime/server/local-api-router.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1427,7 +1427,7 @@ function normalizedToolKey(row) {
14271427
return String(row?.toolKey || row?.toolId || row?.id || "").trim();
14281428
}
14291429

1430-
const SOURCE_CONTROLLED_TOOLBOX_TOOL_IDS = new Set(["game-workspace", "messages", "tags", "text-to-speech", "users"]);
1430+
const SOURCE_CONTROLLED_TOOLBOX_TOOL_IDS = new Set(["game-workspace", "idea-board", "messages", "tags", "text-to-speech", "users"]);
14311431
const SOURCE_CONTROLLED_TOOLBOX_METADATA_FIELDS = Object.freeze([
14321432
"active",
14331433
"adminOnly",

src/shared/toolbox/tool-metadata-inventory.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,14 @@ export const TOOL_REGISTRY = Object.freeze([
7272
"id": "idea-board",
7373
"name": "Idea Board",
7474
"displayName": "Idea Board",
75-
"shortDescription": "Capture creator notebook cards before a project exists.",
75+
"shortDescription": "Capture, compare, and shape game ideas in a table.",
7676
"shortLabel": "Idea Board",
7777
"path": "idea-board",
7878
"folderName": "idea-board",
7979
"entryPoint": "idea-board/index.html",
8080
"badge": "/assets/theme-v2/images/badges/game-design.png",
8181
"tool": "/assets/theme-v2/images/tools/game-design.png",
82-
"description": "Capture creator notebook cards, board views, lists, notes, tags, and placeholder project creation before a project exists.",
82+
"description": "Capture, compare, and shape game ideas with notes under each idea row.",
8383
"category": "Idea",
8484
"colorGroup": "tool-group-idea",
8585
"active": true,
@@ -91,9 +91,9 @@ export const TOOL_REGISTRY = Object.freeze([
9191
"status": "Wireframe",
9292
"releaseChannel": "wireframe",
9393
"progressChecklist": [
94-
"Wireframe notebook sections visible",
95-
"Create Project placeholder remains disabled",
96-
"No persistence or project record creation"
94+
"Idea table workflow visible",
95+
"Add Idea and Add Note actions remain inline",
96+
"Create Project remains unavailable until an idea is ready"
9797
],
9898
"deferred": false,
9999
"hidden": false,

tests/playwright/tools/IdeaBoardTableNotes.spec.mjs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,13 @@ async function expectExpandedNotesChildIndentation(page, ideaId, expectedInputRo
9090
}
9191
}
9292

93-
test("Idea Board uses DB-shaped accordion table ideas and notes", async ({ page }) => {
93+
async function expectProductionCopy(page) {
94+
await expect(page.locator("main")).not.toContainText(
95+
/\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,
96+
);
97+
}
98+
99+
test("Idea Board uses accordion table ideas and notes", async ({ page }) => {
94100
const server = await startRepoServer();
95101
const previousApiUrl = process.env.GAMEFOUNDRY_API_URL;
96102
const previousSiteUrl = process.env.GAMEFOUNDRY_SITE_URL;
@@ -121,6 +127,7 @@ test("Idea Board uses DB-shaped accordion table ideas and notes", async ({ page
121127
try {
122128
await page.goto(`${server.baseUrl}/toolbox/idea-board/index.html`, { waitUntil: "networkidle" });
123129
await expect(page.getByRole("heading", { level: 1, name: "Idea Board" })).toBeVisible();
130+
await expectProductionCopy(page);
124131
await expect(page.locator("[data-idea-board-table] > thead th[scope='col']")).toHaveText([
125132
"Idea",
126133
"Pitch",
@@ -160,6 +167,7 @@ test("Idea Board uses DB-shaped accordion table ideas and notes", async ({ page
160167
await expect(page.locator("[data-idea-board-expanded-row]")).toHaveCount(0);
161168
await page.locator("[data-idea-board-idea-cell='top-thoughts']").click();
162169
await expect(page.locator("[data-idea-board-expanded-row='top-thoughts']")).toBeVisible();
170+
await expectProductionCopy(page);
163171
await expectIdeaChevron(page, "top-thoughts", "gfs-chevron-up.svg");
164172
await expect(page.locator("[data-idea-board-idea-row='top-thoughts'] + [data-idea-board-expanded-row='top-thoughts']")).toHaveCount(1);
165173
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
179187
await systemNote.locator("[data-idea-board-note-action='edit']").click();
180188
await expect(page.locator("[data-idea-board-note-input-row] [data-idea-board-note-action]")).toHaveText(["Save", "Cancel"]);
181189
await expectExpandedNotesChildIndentation(page, "top-thoughts", 1);
182-
await page.locator("[data-idea-board-note-input]").fill("System note can be edited in-place.");
190+
await page.locator("[data-idea-board-note-input]").fill("Starter note can be edited in place.");
183191
await page.locator("[data-idea-board-note-action='save']").click();
184-
await expect(page.locator("[data-idea-board-notes-table='top-thoughts']")).toContainText("System note can be edited in-place.");
192+
await expect(page.locator("[data-idea-board-notes-table='top-thoughts']")).toContainText("Starter note can be edited in place.");
185193
await expect(page.locator("[data-idea-board-system-note] [data-idea-board-note-action='delete']")).toHaveCount(0);
186194

187195
await page.locator("[data-idea-board-add-note='top-thoughts']").click();

tests/playwright/tools/ToolboxRoutePages.spec.mjs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,12 @@ async function expectExpandedNotesChildIndentation(page, ideaId, expectedInputRo
192192
}
193193
}
194194

195+
async function expectIdeaBoardProductionCopy(page) {
196+
await expect(page.locator("main")).not.toContainText(
197+
/\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,
198+
);
199+
}
200+
195201
test("tools route aliases render toolbox tool pages", async ({ page }) => {
196202
const server = await startRepoServer();
197203
const failedRequests = [];
@@ -288,6 +294,7 @@ test("Idea Board launches from Toolbox with accordion table notes model", async
288294
await page.waitForURL(/\/toolbox\/idea-board\/index\.html$/);
289295
await page.waitForLoadState("networkidle");
290296
await expect(page.getByRole("heading", { level: 1, name: "Idea Board" })).toBeVisible();
297+
await expectIdeaBoardProductionCopy(page);
291298
const ideaBoardSections = await page.locator("[data-idea-board-section]").evaluateAll((sections) => (
292299
sections.map((section) => section.getAttribute("data-idea-board-section"))
293300
));
@@ -310,11 +317,12 @@ test("Idea Board launches from Toolbox with accordion table notes model", async
310317
await expect(page.locator("[data-idea-board-notes-count='sky-orchard']")).toHaveText("3 Notes");
311318
await expect(page.locator("[data-idea-board-notes-count='clockwork-courier']")).toHaveText("0 Notes");
312319
await expectIdeaChevron(page, "top-thoughts", "gfs-chevron-down.svg");
313-
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.");
320+
await expect(page.locator("[data-idea-board-status]")).toHaveText("Ready to shape ideas and notes.");
314321
await page.locator("[data-idea-board-notes-count='top-thoughts']").click();
315322
await expect(page.locator("[data-idea-board-expanded-row]")).toHaveCount(0);
316323
await page.locator("[data-idea-board-idea-cell='top-thoughts']").click();
317324
await expect(page.locator("[data-idea-board-expanded-row='top-thoughts']")).toBeVisible();
325+
await expectIdeaBoardProductionCopy(page);
318326
await expectIdeaChevron(page, "top-thoughts", "gfs-chevron-up.svg");
319327
await expect(page.locator("[data-idea-board-idea-row='top-thoughts'] + [data-idea-board-expanded-row='top-thoughts']")).toHaveCount(1);
320328
await expect(page.locator("[data-idea-board-expanded-row='top-thoughts'] [data-idea-board-notes-header]")).toHaveCount(0);

toolbox/idea-board/index.html

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<base href="/">
77
<meta name="viewport" content="width=device-width, initial-scale=1">
88
<title>Idea Board - GameFoundryStudio</title>
9-
<meta name="description" content="Table-first creator notebook for game ideas before a project exists.">
9+
<meta name="description" content="Capture, compare, and shape game ideas in a table.">
1010
<link rel="icon" href="/favicon.svg">
1111
<link rel="stylesheet" href="assets/theme-v2/css/theme.css">
1212
</head>
@@ -18,7 +18,7 @@
1818
<div class="container">
1919
<div class="kicker">Toolbox</div>
2020
<h1>Idea Board</h1>
21-
<p class="lede">Table-first creator notebook for ideas before a project exists.</p>
21+
<p class="lede">Capture, compare, and shape game ideas in one table.</p>
2222
</div>
2323
</section>
2424
<section class="section">
@@ -32,21 +32,21 @@ <h2>Idea Filters</h2>
3232
<details class="vertical-accordion" open data-idea-board-section="Workflow">
3333
<summary>Workflow</summary>
3434
<div class="accordion-body content-stack">
35-
<p>Review ideas in the work table, then expand an idea row to manage its notes in place.</p>
35+
<p>Review ideas in the table, then expand an idea row to manage its notes.</p>
3636
</div>
3737
</details>
3838
<details class="vertical-accordion" data-idea-board-section="Status">
3939
<summary>Status</summary>
4040
<div class="accordion-body content-stack">
41-
<p>Statuses remain governance labels only: New, Exploring, Parked, Ready to Shape.</p>
41+
<p>Use status to show where each idea stands: New, Exploring, Parked, or Ready to Shape.</p>
4242
</div>
4343
</details>
4444
</div>
4545
</aside>
4646
<div data-tool-display-mode data-asset-root="assets/theme-v2/images" data-tool-slug="idea-board" data-tool-icon-src="assets/theme-v2/images/badges/game-design.png" data-tool-character-src="assets/theme-v2/images/tools/game-design.png"></div>
4747
<section class="tool-center-panel" aria-labelledby="idea-board-work-surface-title">
48-
<h2 id="idea-board-work-surface-title">Idea Work Surface</h2>
49-
<p>The primary surface is a table so creators can scan, compare, and govern early ideas without a form-first workflow.</p>
48+
<h2 id="idea-board-work-surface-title">Ideas</h2>
49+
<p>Scan, compare, and update early ideas without leaving the table.</p>
5050
<div class="table-wrapper" data-idea-board-section="Idea Table">
5151
<table class="data-table data-table--fixed" data-idea-board-table>
5252
<caption>Idea Board table with expandable notes rows</caption>
@@ -66,27 +66,27 @@ <h2 id="idea-board-work-surface-title">Idea Work Surface</h2>
6666
</section>
6767
<aside class="tool-column tool-group-idea">
6868
<div class="tool-column-header forge-gold">
69-
<h2>Governance</h2>
69+
<h2>Next Steps</h2>
7070
</div>
7171
<div class="accordion-stack">
7272
<details class="vertical-accordion" open data-idea-board-section="Create Project">
7373
<summary>Create Project</summary>
7474
<div class="accordion-body content-stack">
75-
<p>Create Project is a visible placeholder only. This work surface does not create project records.</p>
76-
<button class="btn primary" type="button" disabled data-idea-board-create-project>Create Project Placeholder</button>
75+
<p>Create Project will be available after an idea is ready.</p>
76+
<button class="btn primary" type="button" disabled data-idea-board-create-project>Create Project</button>
7777
</div>
7878
</details>
7979
<details class="vertical-accordion" data-idea-board-section="Notes Governance">
80-
<summary>Notes Governance</summary>
80+
<summary>Notes</summary>
8181
<div class="accordion-body content-stack">
82-
<p>Add Note inserts an inline row inside the expanded idea notes area. Creator notes can be edited or deleted. System notes can be edited but not deleted.</p>
82+
<p>Add Note opens a new note row under the expanded idea. Notes can be edited, and removable notes can be deleted.</p>
8383
</div>
8484
</details>
8585
<details class="vertical-accordion" data-idea-board-section="Diagnostics">
86-
<summary>Diagnostics</summary>
86+
<summary>Board Status</summary>
8787
<div class="accordion-body content-stack">
88-
<p>No project records or mutating API requests are created by this tool surface.</p>
89-
<p class="status" role="status" data-idea-board-status>Idea Board table edits are in-page only. No project records, auth, AI, or database behavior is connected.</p>
88+
<p>Use this board to shape ideas and notes before creating a project.</p>
89+
<p class="status" role="status" data-idea-board-status>Ready to shape ideas and notes.</p>
9090
</div>
9191
</details>
9292
</div>

0 commit comments

Comments
 (0)