diff --git a/FORJAMIE.md b/FORJAMIE.md index 697faf819..648c9ef63 100644 --- a/FORJAMIE.md +++ b/FORJAMIE.md @@ -16,7 +16,7 @@ ## Status -**Last updated:** 2026-05-05 +**Last updated:** 2026-05-07 **Production status:** IN_PROGRESS overall; Agent Design Prepare north-star plan is REVIEW_GREEN **Overall health:** Yellow overall; Green for the Agent Design Prepare plan lane @@ -99,7 +99,7 @@ flowchart LR | Quality debt radar | Warn-first baseline active | `pnpm quality-debt:check` validates the category/source contract, `pnpm quality-debt:report` generates weekly burn-down snapshots, and CI/release workflows run the radar as warn-first evidence | | Protected settings migration | In progress | The initial settings wave is migrated onto shared shell/composition patterns, with explicit state stories and jsdom exemplar tests for the protected settings slice; broader app/storybook warn backlog remains intentionally non-blocking | | Visual regression workflow | In progress | Root visual scripts now route through `scripts/run-playwright-suite.mjs` and `packages/ui build:visual`, and the exemplar gate now covers both the template browser shell and an isolated template-widget shell route | -| Current dependency hygiene | In progress | This change-set pins `vitest-axe` back to `1.0.0-pre.3` for deterministic installs | +| Current dependency hygiene | In progress | Security dependency PRs must update direct dependencies and transitive override/lockfile paths; the Hono remediation now forces SDK consumers to `>=4.12.16` | | Long-term debt cleanup | In progress | Lint, icon a11y, and docs maintenance remain ongoing work | ## How to run locally @@ -176,6 +176,7 @@ See also: `~/.codex/instructions/Learnings.md` - `DESIGN.md` section line numbers must stay anchored to the original file, including YAML frontmatter. Lint findings use those lines as agent remediation evidence. - `astudio design init` validates the starter contract before writing, but it must still enforce the write gate first so a missing `--write` remains a policy error instead of a provenance error. - Package-level Biome scripts need to use the same pinned Biome 2.x command as the root scripts. The workspace still contains older Biome 1.x dependencies for other packages, and those cannot parse the current `biome.json` schema. +- Security upgrades that touch `platforms/mcp` need lockfile verification for both direct dependencies and SDK transitive runtime paths. A direct Hono bump is incomplete if `@modelcontextprotocol/sdk` still resolves its embedded Hono copy to the vulnerable version. - Browser-backed Playwright gates need a provisioned Chromium cache and a macOS launch path that is not blocked by the Codex sandbox. If every browser test fails at launch with `bootstrap_check_in ... Permission denied (1100)`, treat it as an environment permission issue and rerun the browser gate through the approved unsandboxed path before debugging UI code. - Package manifests can point at `dist` in `main`, `types`, `exports`, `bin`, or `files`, but those generated outputs are no longer committed source. Build before pack, publish, or direct `node packages/*/dist/...` execution. - `pnpm generated-source:check` is the canonical freshness gate for tracked generated runtime inputs. It regenerates the web template registry, widget JavaScript manifest, and Cloudflare worker manifest, formats the tracked generated source with Biome 2.3.11, and fails if the committed snapshot is stale. @@ -215,6 +216,10 @@ See also: `~/.codex/instructions/Learnings.md` ## Recent changes +### 2026-05-07 + +- **Hono security override completion**: tightened the root pnpm override from `hono@<4.12.7` to `hono@<4.12.16` and regenerated `pnpm-lock.yaml` so `@modelcontextprotocol/sdk@1.26.0` and `@hono/node-server@1.19.11` resolve Hono through `4.12.16`, closing the MCP runtime path left open by the direct Dependabot bump. + ### 2026-05-05 - **Framer Motion widget manifest refresh**: refreshed the tracked widget runtime manifests on the Dependabot `framer-motion` update branch after installing from the branch lockfile. The dependency update changes the built `pizzaz-shop` and `solar-system` widget bundle hashes, so `packages/widgets/src/sdk/generated/widget-manifest.js` and `packages/cloudflare-template/src/worker/widget-manifest.generated.ts` now match the generated-source freshness gate used by CI. diff --git a/package.json b/package.json index dd5f6fa43..57370cbc3 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "ajv": "^8.18.0", "concurrently": "^9.2.1", "fast-check": "^4.7.0", - "hono": "^4.12.14", + "hono": "^4.12.16", "playwright": "^1.58.2", "sharp": "^0.34.5", "tsx": "^4.21.0", @@ -174,7 +174,7 @@ "react-router@>=7.0.0 <7.12.0": ">=7.12.0", "react-router@>=7.0.0 <7.9.6": ">=7.9.6", "react-router@>=7.0.0 <=7.8.2": ">=7.9.0", - "hono@<4.12.7": ">=4.12.7", + "hono@<4.12.16": ">=4.12.16", "@hono/node-server@<1.19.10": ">=1.19.10", "basic-ftp@<5.2.0": ">=5.2.0", "diff@<8.0.3": ">=8.0.3", diff --git a/platforms/mcp/package.json b/platforms/mcp/package.json index 1b308d2af..c373db7ad 100644 --- a/platforms/mcp/package.json +++ b/platforms/mcp/package.json @@ -17,7 +17,7 @@ }, "dependencies": { "@modelcontextprotocol/sdk": "^1.26.0", - "hono": "^4.12.14", + "hono": "^4.12.16", "zod": "^4.3.5", "zod-to-json-schema": "^3.25.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e2e8e35ad..0940fcfc2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ overrides: react-router@>=7.0.0 <7.12.0: '>=7.12.0' react-router@>=7.0.0 <7.9.6: '>=7.9.6' react-router@>=7.0.0 <=7.8.2: '>=7.9.0' - hono@<4.12.7: '>=4.12.7' + hono@<4.12.16: '>=4.12.16' '@hono/node-server@<1.19.10': '>=1.19.10' basic-ftp@<5.2.0: '>=5.2.0' diff@<8.0.3: '>=8.0.3' @@ -89,8 +89,8 @@ importers: specifier: ^4.7.0 version: 4.7.0 hono: - specifier: ^4.12.14 - version: 4.12.14 + specifier: ^4.12.16 + version: 4.12.16 playwright: specifier: 1.58.2 version: 1.58.2 @@ -736,8 +736,8 @@ importers: specifier: ^1.26.0 version: 1.26.0(@cfworker/json-schema@4.1.1)(zod@4.3.5) hono: - specifier: ^4.12.14 - version: 4.12.14 + specifier: ^4.12.16 + version: 4.12.16 zod: specifier: ^4.3.5 version: 4.3.5 @@ -1700,13 +1700,13 @@ packages: resolution: {integrity: sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==} engines: {node: '>=18.14.1'} peerDependencies: - hono: '>=4.12.7' + hono: '>=4.12.16' '@hono/node-server@2.0.0': resolution: {integrity: sha512-n3GfHwwCvHCkGmOwKfxUPOlbfzuO64Sbc5XC4NGPIXxkuOnJrdgExdRKmHfF924r914WRJPT397GdqLvdYTeyQ==} engines: {node: '>=20'} peerDependencies: - hono: '>=4.12.7' + hono: '>=4.12.16' '@img/colour@1.0.0': resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} @@ -3728,6 +3728,7 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + deprecated: Potential CWE-502 - Update to 1.3.1 or higher '@use-gesture/core@10.3.1': resolution: {integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==} @@ -5135,12 +5136,8 @@ packages: hls.js@1.6.15: resolution: {integrity: sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==} - hono@4.12.14: - resolution: {integrity: sha512-am5zfg3yu6sqn5yjKBNqhnTX7Cv+m00ox+7jbaKkrLMRJ4rAdldd1xPd/JzbBWspqaQv6RSTrgFN95EsfhC+7w==} - engines: {node: '>=16.9.0'} - - hono@4.12.7: - resolution: {integrity: sha512-jq9l1DM0zVIvsm3lv9Nw9nlJnMNPOcAtsbsgiUhWcFzPE99Gvo6yRTlszSLLYacMeQ6quHD6hMfId8crVHvexw==} + hono@4.12.16: + resolution: {integrity: sha512-jN0ZewiNAWSe5khM3EyCmBb250+b40wWbwNILNfEvq84VREWwOIkuUsFONk/3i3nqkz7Oe1PcpM2mwQEK2L9Kg==} engines: {node: '>=16.9.0'} html-encoding-sniffer@6.0.0: @@ -8405,13 +8402,13 @@ snapshots: '@floating-ui/utils@0.2.10': {} - '@hono/node-server@1.19.11(hono@4.12.7)': + '@hono/node-server@1.19.11(hono@4.12.16)': dependencies: - hono: 4.12.7 + hono: 4.12.16 - '@hono/node-server@2.0.0(hono@4.12.14)': + '@hono/node-server@2.0.0(hono@4.12.16)': dependencies: - hono: 4.12.14 + hono: 4.12.16 '@img/colour@1.0.0': {} @@ -8786,7 +8783,7 @@ snapshots: '@modelcontextprotocol/sdk@1.26.0(@cfworker/json-schema@4.1.1)(zod@3.25.76)': dependencies: - '@hono/node-server': 1.19.11(hono@4.12.7) + '@hono/node-server': 1.19.11(hono@4.12.16) ajv: 8.18.0 ajv-formats: 3.0.1 content-type: 1.0.5 @@ -8796,7 +8793,7 @@ snapshots: eventsource-parser: 3.0.6 express: 5.2.1 express-rate-limit: 8.2.2(express@5.2.1) - hono: 4.12.7 + hono: 4.12.16 jose: 6.1.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -8810,7 +8807,7 @@ snapshots: '@modelcontextprotocol/sdk@1.26.0(@cfworker/json-schema@4.1.1)(zod@4.3.5)': dependencies: - '@hono/node-server': 1.19.11(hono@4.12.7) + '@hono/node-server': 1.19.11(hono@4.12.16) ajv: 8.18.0 ajv-formats: 3.0.1 content-type: 1.0.5 @@ -8820,7 +8817,7 @@ snapshots: eventsource-parser: 3.0.6 express: 5.2.1 express-rate-limit: 8.2.2(express@5.2.1) - hono: 4.12.7 + hono: 4.12.16 jose: 6.1.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -8834,7 +8831,7 @@ snapshots: '@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@3.25.76)': dependencies: - '@hono/node-server': 2.0.0(hono@4.12.14) + '@hono/node-server': 2.0.0(hono@4.12.16) ajv: 8.20.0 ajv-formats: 3.0.1 content-type: 1.0.5 @@ -8844,7 +8841,7 @@ snapshots: eventsource-parser: 3.0.8 express: 5.2.1 express-rate-limit: 8.2.2(express@5.2.1) - hono: 4.12.14 + hono: 4.12.16 jose: 6.2.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -12017,9 +12014,7 @@ snapshots: hls.js@1.6.15: {} - hono@4.12.14: {} - - hono@4.12.7: {} + hono@4.12.16: {} html-encoding-sniffer@6.0.0: dependencies: