ADR: hackmoded is the long-lived Hackmode host; StarLang owns actor semantics #28
Labels
No labels
bug
documentation
duplicate
enhancement
feature
good first issue
help wanted
invalid
question
refactor
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
nsaspy/hackmode#28
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Status
Accepted architecture direction from operator discussion on 2026-08-31. This issue is the Hackmode-side decision record and implementation authority for the actor-service migration.
Current Hackmode
masterinspected:40389abcc10ad561be76219a4e665bc873fcc2de.Decision
Hackmode will run as a continuously available local service, provisionally named
hackmoded.hackmodedhosts one long-lived StarLang runtime instance and loads the Hackmode actor topology into that runtime. StarLang becomes the semantic actor/runtime boundary for Hackmode. Sento/cl-gserver may remain the concrete backend during migration, but Hackmode product code must not depend directly on Sento semantics once the StarLang boundary is available.The intended ownership is:
Authority boundaries
StarLang owns
Hackmode owns
Tek9 / canonical Hackmode storage owns
Actor-local state is live coordination state, not a replacement operation database.
Why
Hackmode already has a direct Sento actor system and provider supervisor, while StarLang is explicitly becoming a Common Lisp durable actor runtime with mailbox, supervision, capability, process-port, journal and lease systems. Making Hackmode a serious StarLang consumer avoids building a second Hackmode-only scheduler/runtime and creates a real production workload that hardens StarLang.
The migration also gives Hackmode one service lifetime instead of CLI-owned actor lifetimes. LISH, Emacs, Nyxt and other clients become clients of the same runtime rather than starting independent actor systems.
Service lifecycle
hackmodedmust:Systemd/NixOS may keep the process alive with normal service supervision. StarLang still owns the internal actor supervision tree; systemd is not the per-actor scheduler.
Message/API direction
Actor messages must be typed and operation/run scoped. Examples include:
ProviderRequest/ProviderResult;CaptureStarted/CaptureStopped;HttpExchangeObserved;ObjectiveChanged;ExpertActionProposed/ExpertActionAdmitted/ExpertActionRejected;RunStopped.Messages carry stable IDs/correlation/provenance, not raw database handles, browser processes, Sento actor objects or secret-bearing ambient state.
Hackpert invariant
A continuously running Hackpert actor gains no implicit authority.
Passive mode remains reasoning-only. Active mode still emits explicit typed actions that Common Lisp validates and routes through canonical capability/provider/Tek9 boundaries. Direct and symbolic reasoning converge on the same effect boundary. No Prolog shell escape or second executor is introduced.
Migration rule
Do not big-bang rewrite the runtime.
Non-goals
Acceptance decision
The migration is architecturally complete when Hackmode clients can reconnect to a long-lived
hackmoded, all product actor semantics flow through StarLang/final runtime boundaries, external tools are supervised through typed process/provider ports, operation state survives daemon restart through canonical storage/recovery, and direct Sento construction is no longer Hackmode product authority.