Refactor Melissa into Sento actor subsystem #26
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!26
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "agent/melissa-sento-subsystem"
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
Moves Melissa ownership into a dedicated Common Lisp/Sento subsystem in the monorepo instead of browser-owned workflow logic.
PR #3 is merged. This branch has been rebuilt as one clean commit directly on current
main(24e4627386406db1e6972f2767a7f21ffc484c8c), with headeed1f1688f588f8c12b3bc1f1fbbfb8a4a906780.person/targetentitiesrequest-idvalues while using request-specific reply actors so duplicate caller IDs cannot steal each other's callbacksmelissa.requestand synchronousmelissa.statuscontrol-plane commands onquasar.control.v1QUASAR_MELISSA_LICENSE_KEYand Melissa configuration on the backendBrowser boundary
The monorepo frontend no longer owns Melissa execution or privileged actor configuration.
Removed:
context.configurationinjection into browser actorsA migration-only bridge deletes obsolete browser storage keys, strips persisted
quasar.actor.melissa-*actors, and resets the old pack flags. It performs no Melissa lookup or network work.A static regression test fails if browser actor configuration injection or the retired actor-configuration module returns.
Actor topology
Lifecycle regression
Adds an explicit immediate restart regression that repeatedly performs:
The test also verifies capability registration/unregistration on each cycle. Melissa subsystem actors now use unique per-instance names so restart correctness does not rely on asynchronous
:stopmessages completing before actor names are reused.Validation
GitHub Actions is green on the exact current head
eed1f1688f588f8c12b3bc1f1fbbfb8a4a906780(CI run 389 /31462061608) across the complete product pipeline:quasar-websystem loadMerge status
PR #26 is now directly based on current
main, one commit ahead and zero commits behind. GitHub reports the PR mergeable and the exact current head is green.Current review: not merge-ready yet.
The Sento ownership split is the right architectural direction, and the current PR is mergeable with a green CI run, but there are correctness/lifecycle issues to fix first.
The HTTP bridge makes command
request-idglobally unique across the entire Melissa subsystem.pendingis keyed only byrequest-id, andmelissa.requestforwards the control-plane command id directly into that table. The control plane only requires a non-empty command id; it does not namespace or globally deduplicate ids across clients. Two concurrent clients can therefore both legally send id1, and the second request gets a synthetic duplicate-id failure. Use an internal correlation id or key pending state by requestor/session + external request id while preserving the external id in the reply.stop-melissa-integrationstops actors but leavesmelissa.requestandmelissa.statusregistered in the control plane and does not fail outstanding bridge callbacks. If integration is stopped while the plane stays alive, capabilities still advertise stale handlers; a latermelissa.requestcan target the stopped bridge and never reply. Unregister/disable the handlers during stop and deterministically fail every pending request. Also cover stop/restart and stop-with-in-flight-request in tests.An all-error Melissa record set is normalized as success.
first-usable-recordreturns the entire raw result when every returned record satisfiesresult-code-error-p;normalize-melissa-resultthen emits a canonical entity and the forwarder sendsmelissa-completed. If no usable record exists, propagate amelissa-errorinstead of converting the response into a successful enrichment. Add a test with Records containing only error result codes.Merge ordering needs resolution with #3. This PR is based on the current submodule-era layout (
src/...plus thefrontendgitlink), while #3 replaces that layout with the monorepo (control-plane/src/...plus an in-tree frontend). The branches diverged at the same older base. If #3 remains the intended foundation, merge/fix #3 first and port this actor subsystem onto that layout rather than merging two incompatible structural histories.Please fix the correlation/lifecycle/error-result cases and then rebase/port against the chosen post-#3 architecture before the final merge gate.
Merge-readiness re-review: the blockers from my earlier review are resolved on the exact current HEAD.
melissa.request/melissa.status, and stops the supervised subsystemquasar.control.v1command boundarycontext.configuration2d2395fa05f3c42d9581425578ba1f55de929e0apassed the full CI pipeline: frontend, Lisp/Sento, realquasar-web, live stack smoke, Playwright, and packaged production/security smokeVerdict: merge-ready after PR #3. The GitHub base-retarget endpoint is returning upstream 502s, so the PR metadata still says
main; the branch ancestry itself is correctly stacked on #3. GitHub also does not allow me to approve a PR owned by the authenticated account, so this is recorded as a COMMENT review.Re-review after #3 landed: not merge-ready yet.
The earlier Melissa correctness blockers look addressed on the isolated one-commit delta, and CI run 351 is green on
2d2395fa05f3c42d9581425578ba1f55de929e0a. However, #3 has now landed onmainas24e4627386406db1e6972f2767a7f21ffc484c8c, and the current #26 branch was not rewritten onto that commit.Current graph evidence:
f69242e5... -> 2d2395fa...is exactly 1 commit ahead / 0 behind, so the Melissa change itself is still cleanly isolated from the old #3 head.main -> agent/melissa-sento-subsystemis now diverged: 63 ahead / 1 behind, with merge basebd685c91..., not the merged #3 state.mergeable: false.So the previous green run does not validate the actual post-#3 merge result. Rewrite the branch so only the Melissa commit sits on current
main(for example, rebase2d2395fa...onto24e4627.../ currentorigin/main), then rerun the full pipeline and re-check mergeability.One additional lifecycle validation gap worth closing while touching the branch: add an explicit stop -> immediate start Melissa integration test. The subsystem uses fixed actor names (
melissa-supervisor,melissa-http-bridge, etc.) while teardown sends several actor:stopmessages asynchronously; the current tests cover stop-with-in-flight requests but not immediate restart/name reuse. I would not call this a proven defect from static review alone, but it is exactly the kind of actor-lifecycle race that should be regression-tested before landing.Gate: rebase/rewire onto current
main-> green CI on the new head -> mergeable=true -> then this is ready for final merge.Post-#3 merge repair complete.
main(24e4627386406db1e6972f2767a7f21ffc484c8c)eed1f1688f588f8c12b3bc1f1fbbfb8a4a90678031462061608) is fully green: static/frontend/build, Common Lisp + Melissa regressions, real quasar-web load, dev-stack smoke, Playwright real-stack paths, packaged production/PWA/security smokemainand zero behindVerdict: merge-ready.