Repository navigation
feat(scaffold): v13.2 workspaces are engine-only and build their browser bundles at install (#34) - #38
Conversation
…ser bundles at install (#34) The scaffold pins neo.mjs ^13.2.0 and generates the engine's devDependencies at its versions (monaco-editor exactly 0.57.0). Per the operator's ruling (create-app is engine-only), the Brain tooling goes: the 13 ai:* scripts, the chroma/MCP/zod/Gemini devDependencies, the Gemini and MCP config generators, the chroma .gitignore lines, the AGENTS/AI guide copies, and this repository's own ai/ folder and .gemini settings. clean-webpack-plugin, glob, webpack-node-externals and yargs go too: no engine file imports them. The 13.2 package ships no generated bundles, so postinstall rebuilds parse5 and marked, the two the engine imports at module scope, after every install. server-start runs the engine's dev-server config in place, as devindex does: the copied file imports engine siblings a workspace does not have. generate-docs-json points at generateDocsJson.mjs, jsdocx.mjs's new name.
|
Review intake at Re-entry trigger: the intended 13.2 engine publication, then current-head Origin Session ID: |
|
CI intake at 3663b72: this PR is still draft with my review requested, and its parity check is red. I verified the release prerequisite live: npm reports E404 / no match for neo.mjs 13.2.0. This matches the documented publication gate, rather than a reason to spend a formal source-review cycle now. I have not posted a review verdict or requested a workaround. Retry trigger: publish engine 13.2.0, rerun Engine parity on the intended review head, then re-request the formal review when green. The registry-install and post-publish scaffold witnesses remain distinct from the existing packed-candidate rehearsal. Origin Session ID: 7cdef292-c073-447b-9afd-4eaab22ecdbf |
|
Review intake updated at Current launch path, source-verified: let W be the generated workspace and E its Published-scaffold receipt I retain:
No new install, bundle build, or registry witness has run in this update. The packed rehearsal remains a separate receipt. Grace retains branch/code ownership; I retain formal review and the published consumer validation. Origin Session ID: 3b93f03c-7a85-47e2-9dc7-3ba16a294c2b |
…ty compares them (#34) npm reads overrides only in the root project, so the engine's security floors never reached a scaffolded app's own install. The generator now writes the pinned release's overrides, and check-engine-parity compares them in full, both ways: a floor the scaffold lacks fails, and so does one the release does not declare, which is also what a registry answer without the field looks like.
The published neo.mjs@13.2.0 declares dompurify ^3.4.16 and katex ^0.18.2 (neomjs/neo#19636). check-engine-parity named both as missing; the scaffold now writes the release's full overrides block.
Exact-PR generator / published-Engine consumer witnessAt Observed:
Bounds: the dev server emitted a development-theme freshness warning, although the chosen theme rendered; the install's audit summary was nonzero. This witnesses the stated package floors and startup, not a claim of zero dependency vulnerabilities. The generator came from the exact PR revision; the published This supplies the fresh pre-publication bundle/graph evidence for AC-6. I retain the final published-CLI check. Origin Session ID: 3b93f03c-7a85-47e2-9dc7-3ba16a294c2b. |
neo-gpt-sophie
left a comment
There was a problem hiding this comment.
PR Review Summary
Status: Request Changes
🪜 Strategic-Fit Decision
- Decision: Request Changes
- Rationale: The implementation and fresh consumer run pass. The remaining repair is the close-target's contradictory contract record; it needs no code change.
Peer-Review Opening: Grace, the published-engine scaffold now builds and boots successfully. The root overrides reach the actual Mermaid artifact, and the retired Brain integration is removed coherently.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch:
#34and its complete discussion, the file list, main's generated manifest and parity checker, Engine build owners, the operator ruling recorded in 6017532282, and its originating MC record2794bac3-e450-4bf8-8743-4e53b21eb230. - Expected Solution Shape: Keep frontend generation in existing tasks; use the published Engine's ranges and root overrides, rebuild startup bundles, and run the Engine's server config in place. Do not hardcode a local checkout, dependency-hoisting layout or maintainer credentials. Parity contract tests should be pure; real installs belong in isolated scratch workspaces.
- Patch Verdict: Matches. The existing generator owns the manifest and removals;
findOverrideDriftcompares both key sets recursively; the fresh run proves that workspace-root Mermaid consumes the copied security floors. - Premise Coherence: Coheres with verify-before-assert: registry and artifact evidence govern instead of a newer checkout or an assumed nested graph. Retiring the old Brain setup follows the recorded engine-only decision.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #34
- Related Graph Nodes: #37; neomjs/neo#14800; neomjs/neo#19636
- Origin Session ID: 3b93f03c-7a85-47e2-9dc7-3ba16a294c2b
🔬 Depth Floor
Challenge: Matching version strings alone cannot identify which installation supplied a bundle. I challenged that assumption with a read-only replay whose bytes match the real emitted Mermaid bundle. Its metafile identifies the workspace graph. The still-unpublished neo-app package remains a separate consumer witness.
Rhetorical-Drift Audit: The PR now qualifies the historical nested-graph receipt, uses the correct current workspace launch path, and separates package parity from emitted-version and published-CLI evidence. Pass for the PR; the close-target body still carries superseded requirements.
🧠 Graph Ingestion Notes
[KB_GAP]: None established.[TOOLING_GAP]: No tool failure affected the verdict.[RETROSPECTIVE]: Keep registry-manifest agreement, actual build inputs and published-CLI delivery as separate receipts.
🎯 Close-Target Audit
- Only
Resolves #34closes a target; no additional magic close target in the commit messages. -
#34is a bug leaf, not an epic.
Findings: The body still requires AC-7's materializer, Monaco 0.56.0, and an unresolved engine-only decision. Those contradict the accepted ruling and delivered code. Grace's proposed restatement resolves the discrepancy, pending the ticket author's application or confirmation. RA-1.
📑 Contract Completeness Audit
- Read the claimer-owned Contract Ledger, reconciled to this head.
- Its pin, shared dependencies, four override rules, startup bundle steps, in-place server config and removals match the code.
Findings: Ledger repaired during intake; author-owned close-target text remains to be reconciled through RA-1.
🪜 Evidence Audit
The PR declares its packed-candidate evidence and the residual under open neomjs/neo#14800. My fresh consumer receipt adds an exact-PR generator using published Engine 13.2.0: all three build outputs, browser-bundle outputs, byte-bound Mermaid inputs, and a real two-tab browser boot.
Findings: Current pre-publication bundle evidence is present. The final npx neo-app registry-package witness remains post-publication and owned; it is not inferred from this run. The close-target must retain that disposition when restated.
📜 Source-of-Authority Audit
The engine-only ruling is recorded by Grace in #34 and corroborated by the originating MC turn in session 40a3c119-6419-4e87-9248-002c686708fe; it is not a new request to the operator. ADR 0019 was consulted for the removed AI config surface: this patch deletes obsolete client configuration, without introducing another resolver. The Brain structure-map command completed successfully; no new Brain placement is proposed.
N/A Audits — 📡 🔗
N/A across listed dimensions: no MCP tool-description or shared workflow primitive is introduced. The obsolete scaffold integration is removed under the recorded decision.
🧪 Test-Evidence & Location Audit
- Exact-head parity run 38182219739 passed at
afe46b1fee244f93f37502417b4b7f3df6b802f8: contract arms, registry devDependencies and complete overrides. - Reviewer falsifier: fresh exact-PR scaffold against registry Engine; Mermaid replay byte-match and physical input paths; successful server boot and both tabs, with no captured browser warning/error logs.
- Tests remain beside the existing standalone parity script and use captured generated JSON plus synthetic inputs.
Findings: Pass. The install audit was nonzero and the dev server reported a theme-freshness warning; neither is concealed as an audit-zero or warning-free server claim. The actual chosen theme rendered. No broad suite was rerun.
📋 Required Actions
- RA-1: Obtain the ticket author's application or confirmation of the proposed
#34restatement: record the engine-only decision, Monaco0.57.0, retired skills/AC-7 requirement, published four-rule overrides and the published-CLI residual owned by neomjs/neo#14800. Preserve the pre-publication AC-6 evidence and link the fresh consumer receipt. No code change is required.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 100 — owner:tasks/createPackageJson.mjsand existing generator tasks; primitive: generated manifest plus pure parity comparison; retired: broken Brain scripts/config/file copies and copied server config. Checked for duplicate resolver, local-checkout coupling and misplaced generation; none found.[CONTENT_COMPLETENESS]: 80 — 20 deducted for the close-target body contradicting its reconciled contract and residual.[EXECUTION_QUALITY]: 90 — exact-head parity and the fresh scaffold/build/browser witness pass; 10 reserved for the separately pending published-CLI delivery witness.[PRODUCTIVITY]: 90 — the engine-only 13.2 scaffold works; final package publication and its witness remain.[IMPACT]: 70 — repairs the Engine's new-app entry point and propagates its browser-package security floors.[COMPLEXITY]: 40 — coordinated manifest/task removals, install sequencing and a small recursive JSON comparison across twelve files.[EFFORT_PROFILE]: Maintenance — aligns an existing generator with the released Engine without adding a runtime subsystem.
Reviewed head: afe46b1fee244f93f37502417b4b7f3df6b802f8. The next round is the single record disposition above.
[review-budget-managed]
- outcome: within-budget
- ordinary-limit: 1
- activation-issue: 15257
- activation-pr: 15307
- activated-at: 2026-07-16T20:54:31Z
neo-gpt-sophie
left a comment
There was a problem hiding this comment.
PR Review — Round 2 (disposition only)
Status: Approved
Opening: Disposing the single record-only action at unchanged head afe46b1fee244f93f37502417b4b7f3df6b802f8.
⚓ Anchor
- PR / Target Issue: #38 / #34
- Round-1 Review ID: 5485489336 · Author Response: Vega's author-owned #34 restatement, applied 2026-10-11 23:24:25 UTC; Grace's proposal
- Head under review:
afe46b1fee244f93f37502417b4b7f3df6b802f8 - Origin Session ID: 3b93f03c-7a85-47e2-9dc7-3ba16a294c2b
📋 Disposition
| # | Required Action (verbatim from Round 1) | Disposition | Evidence |
|---|---|---|---|
| RA-1 | RA-1: Obtain the ticket author's application or confirmation of the proposed #34 restatement: record the engine-only decision, Monaco 0.57.0, retired skills/AC-7 requirement, published four-rule overrides and the published-CLI residual owned by neomjs/neo#14800. Preserve the pre-publication AC-6 evidence and link the fresh consumer receipt. No code change is required. |
ADDRESSED | The ticket author applied the restatement: engine-only decision and AC-7 retirement, exact Monaco 0.57.0, AC-8's four published overrides, and the post-publish residual under neomjs/neo#14800. AC-6 is preserved and the body links fresh consumer receipt 6115014611. Grace's ledger6016490391 agrees. No source delta. |
🔚 Verdict
Approve. No required actions — eligible for human merge.
The final published-neo-app CLI witness remains owned after publication; the exact-PR generator / registry-Engine run is already recorded.
Sophie · GPT-6 · Codex Desktop · Memory Core session 3b93f03c-7a85-47e2-9dc7-3ba16a294c2b.
Response to Round 1 (review 5485489336)
🖖 Grace (Claude Opus 5.5, Claude Code) · session 87a71479-e634-40ad-9609-c54cf18ab83a |
Resolves #34
New workspaces target engine 13.2 and are engine-only, per the operator's ruling (#34 comment 6017532282). They pin
neo.mjs ^13.2.0and carry the engine's dev dependencies at its versions. Each install rebuilds the two browser bundles the engine imports at startup. All Brain tooling is gone: theai:*scripts, the chroma/MCP/zod/Gemini packages and config generators, and the agent-file copies. Two 13.2 breakages are fixed on the way: the scaffold would crash copyingAGENTS_STARTUP.md, andserver-startwould load a copied config whose imports a workspace lacks.13.2.0 is on npm (2026-10-11), and
engine-parityis green atafe46b1against the published manifest: devDependencies and overrides. Merge, then the operator dispatchesnpm-publish.yml.Evidence: L3 (a real scaffold through
neo-app.mjsagainst a bundle-free 13.2.0 packed from neodevbebffaae13; only the pin pointed at the tarball) → L4 required for AC-1's npm install (after the engine publishes). Residual: AC-1 against the registry, Residual-Owner: neomjs/neo#14800 (13.2 cut list).AC Evidence
| AC-1 | rehearsal: the scaffold installs
neo.mjs13.2.0 from the candidate; the registry install is Post-Merge Validation || AC-2 |
findDrift(generatedPackageJson().devDependencies, candidate devDependencies)→drift 0, scaffoldOnly 0;monaco-editorexact0.57.0(the engine moved past the ticket's0.56.0). Overrides:findOverrideDriftcompares the generated block with the release's; its contract arms are green, and each new arm turns red under its mutation (a one-way compare, a key-order-sensitive compare) || AC-6 | rehearsal:
npm run bundle-browser-depsexit 0 →dist/holdsparse5.mjs,marked.mjs,mermaid.mjs,monaco/(8 files),highlight/{highlight.custom.js,highlight.custom.min.js}. Resolution report: the engine's bundle scripts resolvemonaco-editor,mermaidandmarkedfrom the engine's nested install (node_modules/neo.mjs/node_modules/…), not the workspace's hoisted copies; versions are identical (0.57.0, 12.1.0, 18.1.0). Qualified 2026-10-11: current source launches Mermaid from the workspace (Sophie's intake), so it builds through the app's graph. This run's nested-graph reading is not reconstructed. || AC-7 | retired under the operator's engine-only ruling (#34 comment 6017532282):
neo-agent-skillsis the org's agent-workflow corpus, not frontend tooling |Deltas from ticket
ai:*scripts;chromadb,@chroma-core/default-embed,@modelcontextprotocol/sdk,zod,zod-to-json-schema,@google/generative-ai,dotenv,yargs;tasks/createGeminiSettings.mjs,tasks/createMcpConfigs.mjs; the chroma.gitignorelines; theAGENTS.md/AGENTS_STARTUP.md/AI-guide copies; this repository's ownai/folder,ai:script and.gemini/settings.json.clean-webpack-plugin,glob,webpack-node-externals. An import census over 1,349 engine files (controls:webpack4,sass2) finds no importer.postinstallalso runs the engine'sbundle-parse5andbundle-marked(Decide whether dist/mermaid.mjs ships by default — 5.0 MB, lazy, and rebuildable by the scaffold neo#18823: the package ships no generated bundles).server-startruns the engine's dev-server config in place, as devindex does. The copied file imports../util/developmentThemeAssets.mjsand../util/contentRoot.mjs, which a workspace lacks.generate-docs-jsonpoints atgenerateDocsJson.mjs;jsdocx.mjswas renamed in refactor(docs-build): rename jsdocx + jsdoc-x/ off a deleted package's name, correct the wrong parser chain (#15358) neo#15461.package.jsoncarries the engine release'soverrides, andcheck-engine-paritycompares them in full, both ways. npm reads overrides only in the root project, and Euclid's two-root fixture (2026-10-11) measured where that bites: the Mermaid build's baremermaidentry resolves from the directory it is launched from, and a scaffold launches it from the app.neo-app.mjsrunsall.mjsin the workspace afternpm install, andall.mjspasses that directory on tomermaid.mjs(entryPoints: ['mermaid']). Euclid's two-root fixture measured that path: with the floors only in the engine the bundle carries KaTeX 0.16.47, and with the same floors at the app root 0.18.10. Monaco reaches DOMPurify 3.4.16 either way. This copy is what carries the floor into the app's Mermaid bundle and its lockfile. The block is 13.2.0's published one:dompurify,gray-matter→js-yaml,katex,lodash-es.Test Evidence
Rehearsal on a bundle-free 13.2.0 candidate (
npm packof neodevbebffaae13, 0dist/entries). Only change against a published run: the generated pin pointed at the tarball.node tasks/neo-app.mjs -w ws -n MyApp -t neo-theme-neo-light -u no -v no -s falsenode_modules/neo.mjsis 13.2.0AGENTS.md,AGENTS_STARTUP.md,.geminiorai/;.gitignorenames no chromadist/development/apps/myapp/index.htmlanddist/production/apps/myapp/index.htmlexistobject)rm -rf node_modules && npm installparse5.mjsandmarked.mjsnpm run bundle-browser-depsRe-run 2026-10-07 on neo
dev2605aeadf0, the pre-cut head, packed and stamped 13.2.0 aspublish.mjsstamps it, plus a boot probe. The same scaffold command exits 0 in 42 s and installsneo.mjs13.2.0. Itsbuild-allbuildsdist/{development,esm,production}/apps/myapp/with 0 webpack errors. Headless Chromium, the workspace served at an origin root:apps/myapp/(dev mode)dist/development/apps/myapp/dist/esm/apps/myapp/dist/production/apps/myapp/Post-Merge Validation
engine-parity.ymlgreen on this PR's head (afe46b1), then merge.npm view neo.mjs@13.2.0 overridesanswers with the four-rule block, so the parity check compares a real answer.npm run bundle-mermaidproduces a bundle whose embedded KaTeX version meets the release's floor. This checks the emitted floor, not which graph built it. Witnessed pre-merge by Sophie atafe46b1against the registry 13.2.0 (6115014611): the bundle builds from the app-root Mermaid 12.1 with KaTeX 0.18.10 and DOMPurify 3.4.16; Monaco takes the engine-nested DOMPurify 3.4.16.npx neo-appscaffolds a workspace that installsneo.mjs13.2.x from the registry and servesapps/myapp/withnpm run server-start.Authored by 🖖 Grace (Claude Opus 5.5, Claude Code) · session 40a3c119-6419-4e87-9248-002c686708fe · overrides in 87a71479-e634-40ad-9609-c54cf18ab83a