Monorepo UI + Common Lisp control plane (document & graph CRUD) #3
No reviewers
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
priority:P1
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
nsaspy/quasar!3
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "agent/monorepo-ui-control-plane"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Advances #2 and resolves the review blockers in #4–#14.
Closes #4
Closes #5
Closes #6
Closes #7
Closes #8
Closes #9
Closes #10
Closes #11
Closes #12
Closes #13
Closes #14
all-documentsnull-safe, and rejects relation-document retyping while graph edges still reference the relation.mainwithout restoring the obsolete frontend gitlink.Verification
GitHub Actions is green on current head
f69242e5bce8a38a8d96710e44011136e31d3cb6with the complete product pipeline:quasar-websystem loadEarlier manual corpus validation also imported and reloaded
/home/unseen/Downloads/starintel-complete-corpus.jsonlwith 4,613 candidates and 4,613 saved, zero invalid/write/parse errors, no browser error or disconnect, on the default SBCL heap.Genuinely deferred work
The store boundary is atomic and restart-tested with a reused store instance, but the development memory store is not process-durable. A process-durable store remains follow-up work. Actor/research lifecycle, settings, and external integration migration listed in
docs/UI-MIGRATION.mdalso remain later #2 slices; their existing visible UI behavior is preserved in this PR.Source UI import
lost-rob0t/quasar-ui6998da47eec49bf8a78c4829b38c032ebc4ddb36Integrated UI follow-up
The current mobile navigation, Black & Gold styling, persistent redacted diagnostics, icons, PWA metadata/install flow, service-worker registration, capability-boundary docs, and adaptive large-graph behavior are retained.
maintainer her, hard fail
ϟ npm run dev
Starting Quasar development stack...
repository: /home/unseen/Documents/Projects/starintelV4/quasar/
control-plane: ws://127.0.0.1:8081 (WebSocket)
control-plane: http://127.0.0.1:8080 (CLOG host)
vite: http://127.0.0.1:5173 (React UI)
[control-plane] This is SBCL 2.6.4, an implementation of ANSI Common Lisp.
More information about SBCL is available at http://www.sbcl.org/.
SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
[vite] npm warn exec The following package was not found and will be installed: vite@8.1.5
[vite] vite.config.ts (2:24) [UNRESOLVED_IMPORT] Could not resolve 'vite' in vite.config.ts
╭─[ vite.config.ts:2:25 ]
│
2 │ import { loadEnv } from "vite";
│ ───┬──
│ ╰──── Module not found, treating it as an external dependency
───╯
[vite] vite.config.ts (3:45) [UNRESOLVED_IMPORT] Could not resolve 'vitest/config' in vite.config.ts
╭─[ vite.config.ts:3:46 ]
│
3 │ import { configDefaults, defineConfig } from "vitest/config";
│ ───────┬───────
│ ╰───────── Module not found, treating it as an external dependency
───╯
[vite] vite.config.ts (4:18) [UNRESOLVED_IMPORT] Could not resolve '@vitejs/plugin-react' in vite.config.ts
╭─[ vite.config.ts:4:19 ]
│
4 │ import react from "@vitejs/plugin-react";
│ ───────────┬──────────
│ ╰──────────── Module not found, treating it as an external dependency
───╯
[vite] failed to load config from /home/unseen/Documents/Projects/starintelV4/quasar/frontend/vite.config.ts
[vite] error when starting dev server:
Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'vite' imported from /home/unseen/Documents/Projects/starintelV4/quasar/frontend/node_modules/.vite-temp/vite.config.ts.timestamp-1785383124492-fb9eafa7a2e1c.mjs
at Object.getPackageJSONURL (node:internal/modules/package_json_reader:314:9)
at packageResolve (node:internal/modules/esm/resolve:768:81)
at moduleResolve (node:internal/modules/esm/resolve:855:18)
at defaultResolve (node:internal/modules/esm/resolve:985:11)
at #cachedDefaultResolve (node:internal/modules/esm/loader:747:20)
at ModuleLoader.resolve (node:internal/modules/esm/loader:724:38)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:320:38)
at ModuleJob._link (node:internal/modules/esm/module_job:182:49) {
code: 'ERR_MODULE_NOT_FOUND'
}
[vite] exited with code 1
Shutting down all services...
terminating control-plane (pid 3322885)
terminating vite (pid 3322891)
Deep review verdict: changes required before merge
The monorepo import is useful, but this PR is not yet a completed document/graph control-plane migration. The green CI run validates only a reduced surface and misses confirmed runtime and correctness failures.
Confirmed blockers
The documented development startup is broken.
frontendas an npm workspace.npm installat the repository root, which does not installfrontend/devDependencies.scripts/dev.mjslaunchesnpx vite, causing Vite alone to be downloaded whilevitest/configand@vitejs/plugin-reactremain unavailable.vite.config.ts.The real UI mutation paths are not connected to Common Lisp.
main.tsxinitializes the client, butstore.jsxstill loads and watches PouchDB, callsapplyOperation, and saves workspaces locally.store.jsxadapter wiring as remaining work.The Lisp web startup path contains an undefined function.
quasar.app:startcallsattach-subscriber.ATTACH-SUBSCRIBERis private toquasar.ws, not exported and not imported intoquasar.app.quasar-webor starts the application, so this is not exercised.Graph transaction rollback is not isolated.
copy-workspace-stateshallow-copies graph JSOWN objects.Multi-operation transaction events are dropped by the frontend.
operationIdand revision.<= lastRevision.The store and operation journal are not used.
workspace-fordoes not callload-workspace.save-workspaceorappend-operation.Reconnect behavior is incomplete.
Production CLOG hosting is broken.
systems/quasar-web.asd, producingsystems/frontend/dist/instead offrontend/dist/./, while CLOG attempts to serve under/frontend/.The authoritative payload contract is insufficient.
{ "created": "person:1" }, not canonical created/updated objects.Validation and referential integrity are incomplete.
_id; object type and required StarIntel fields are not validated.The graph model is unresolved.
WebSocket workspace isolation and security are absent.
starlang.loadaccepting client-supplied source.CI gaps
The successful workflow:
frontend, unlike the documented root setup;src/control-plane;quasar-web;npm run devpath.This explains why CI is green while the actual development command fails.
Required fix order
npm run devwork from a fresh clone.attach-subscriber; load and startquasar-webin CI.QuasarProviderand remove browser authority for migrated state.Keep this PR draft until those blockers are fixed. The structural foundation is valid, but the slice is not operational or authoritative yet.
Deep review blockers were split into focused issues for this PR:
npm run devquasar-webstartup and add a real stack smoke testPR #3 should remain draft until the blocking runtime and correctness issues are resolved. The immediate execution order is #4, #6, #7, #8, #9, #5, #10, #11, #12, #13, then #14 as the final merge gate.
Merge-readiness pass completed at
2813208. The implementation was re-audited against current HEAD, issues #2 and #4–#14, the architecture/migration docs, local runtime behavior, and fresh Actions logs. Both push and pull-request CI runs now pass the full real-product pipeline; the branch is cleanly mergeable. The PR body has been replaced with the verified scope, checks, and genuinely deferred #2 follow-up work.Follow-up startup/debugging validation on
d818af7:npm run devnow enters the pinned Nix shell when available, fixing the reproduced missing SQLite failure without implicit package downloads.?debug=1tracing records WebSocket lifecycle, command IDs, revisions, reconnect attempts, and pending counts without payloads or credentials.Large StarIntel corpus import fix on
ea6dc91:RangeError: Maximum call stack size exceededat 150,000 documents.Real-corpus runtime fix completed at
19a7595.false,null, andtruedistinctly through JSOWN so authoritative reload does not turn valid StarIntel booleans into invalid nulls.settings === nullActorManager crash.starintel-complete-corpus.jsonl: 4,613/4,613 saved, zero invalid/write/parse errors, clean reload, no browser errors, no control-plane disconnect, approximately 399 MiB Lisp RSS on the normal heap.Final large-corpus/browser pass completed at
5bb7ade. The Brave freeze was frontend memory amplification, not another Lisp heap failure: full StarIntel documents were copied into every Cytoscape element, authoritative snapshots were synchronously duplicated into PouchDB, and import completion immediately fetched a second full snapshot. The UI now projects only graph fields, keeps Pouch staging exclusive to explicit Couch sync, reuses validated committed import data, and blocks unsafe graph sizes. The exact 4,613-document corpus previously imported and reloaded on the default SBCL heap; the real-stack 2,001-document import/reload/graph-guard regression passes. PWA serving removed by a concurrent UI slice was restored. Currentmainis merged with its offline-status visual retained. Both push and PR CI runs are green, including 379 unit tests, Lisp transaction/persistence tests, realquasar-web, dev-stack smoke, 23 Playwright paths, and packaged production routing/PWA/security smoke. GitHub reports the PR mergeable with no unresolved review threads.Current review: not merge-ready yet.
The earlier #4–#14 blockers appear to have been substantially addressed, but current HEAD still has correctness issues and the branch has diverged from
main.apply-node-deletebreaks on the canonicalall-documentsgraph when the deleted node has adocumentId.all-documents.documentIdsis represented as:null; the delete path tests only truthiness and then calls(rest document-ids). Since:nullis non-NIL, this attempts(rest :null)and signals instead of deleting the node. The create path already special-cases:null; delete needs the same contract plus a regression test.apply-node-updatecan leave graph membership inconsistent. Updating a node'sdocumentIdreplaces the node but never reconciles the graph'sdocumentIds. A node moved from document A to B can leave A in membership and omit B. Either forbid changingdocumentIdthrough node update or update membership atomically, with tests for both old/new references.apply-document-updatecan violate an existing edge invariant. Edge validation requires an edgedocumentIdto reference adtype = relationdocument, but document update allows that referenced document's dtype to be changed to any non-empty dtype without checking graph references. That can leave an already-persisted edge invalid. Block incompatible dtype changes while referenced, or revalidate affected graph edges transactionally.The branch is currently behind
mainand GitHub reports it non-mergeable.mainhas moved three commits past this PR's merge base, including frontend pin/navigation/large-graph changes, while this PR replaces the frontend gitlink with the in-tree monorepo frontend. Reconcile currentmainbefore the merge gate and rerun the full real-stack suite.Please add focused regressions for the three state-integrity cases above, reconcile current
main, and rerun the existing real-stack/Playwright/production gates.Merge-readiness re-review: the blockers from my earlier review are resolved on current HEAD.
all-documentsnull-membership contract safemainwithout restoring the obsolete frontend gitlinkquasar-web, live dev-stack smoke, Playwright, and packaged production/security smokeVerdict: merge-ready. GitHub does not allow me to approve a PR owned by the authenticated account, so this is recorded as a COMMENT review.