Browser evidence actor system for bounded screenshot/DOM acquisition #56
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
nsaspy/star-lang#56
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?
Goal
Build a reusable StarLang actor system that provides the useful parts of gowitness-style web evidence collection without making an external Go scanner the semantic authority.
Primary consumer: StarIntel.
Operator direction received 2026-08-31: prefer a custom StarLang actor system over wrapping gowitness as the product model.
Current
maininspected:0472ed8f4472252038b62bb19a17aa09d2ddf1b4.Boundary
StarLang owns the actor/message/supervision semantics. A browser/CDP implementation is a typed host capability/adapter.
The StarLang program must never contain:
StarIntel remains responsible for canonical ingest, artifact custody/persistence, authz/scope and deployment policy.
This work does not require implementing the generic proposed scraper IR (#50) or generic playbook/fan-out IR (#51). Reuse final runtime/capability/artifact boundaries that already exist; do not broaden those pending proposals merely to ship screenshots.
Initial actor tree
Semantics:
BrowserEvidenceSupervisor
CaptureCoordinator
BrowserCaptureWorker
browser.capturecapability from the host;ArtifactProjection
CaptureResultProjection
Request contract
At minimum:
Result contract
Terminal result should preserve:
captured,navigationFailed,timedOut,blocked,cancelled,artifactFailed, etc.);Secret-bearing cookies/tokens/headers are not normal result fields.
Browser adapter direction
Do not rebuild Chromium. Use a supervised Chromium/Chrome-family process through a typed browser/CDP adapter, with explicit process ownership and bounded contexts/pages.
A later host may choose:
That transport choice is an explicit host capability/profile input and survives result provenance.
RED-first implementation slices
Slice 1 — semantic contract + deterministic actor topology
Add typed request/result/outcome values and a fake
browser.capturecapability. Prove a small real StarLang runtime actor topology:Untouched current tree has no browser-evidence actor system, so this acceptance fixture is the RED. Do not obtain GREEN with host-language calls that bypass the actor runtime.
Slice 2 — artifact contract
Use
star-artifactfor immutable screenshot/DOM references and provenance. Bytes remain outside portable actor messages.Slice 3 — real browser adapter
Add a closed Chromium/CDP adapter behind the capability boundary. Browser process lifecycle is supervised, bounded, deadline-aware and unconditionally reaped.
Slice 4 — StarIntel integration proof
A fake StarIntel ingest port receives the normalized capture result/document. No direct CouchDB/Rabbit calls from StarLang/browser actors.
Slice 5 — production StarIntel binding
After the required embedding/runtime seam is ready, bind the released semantic artifact into StarIntel deployment/runtime composition without adding a second server-local actor DSL.
Required invariants
.starsource;Relationship to embedding readiness
#53 remains the production embedding readiness gate. This issue can build/test the semantic actor system in StarLang now, while the final StarIntel production binding waits for the final embedding surface rather than importing prototype internals.