feat(go): port FIM/pkgdb/rootcheck integrity engines and add go-sidecar dashboard consumer

Adds sidecar-only, --state-dir-gated FIM, package-DB-anchor, and rootcheck
engines to the Go migration sidecar, wired into agent.Sweep/Initialize
behind the existing baseline lifecycle. Adds a read-only, schema-checked
Python dashboard consumer (go_sidecar_state_dir, /api/go-sidecar/*, Sidecar
tab) that never starts, stops, or mutates the Go sidecar's state.

Also fixes drift found while reconciling this work: enodia_sentinel/web.py
had reinvented local schema constants instead of using the canonical
enodia_sentinel/schemas.py catalog (now registers enodia.go.sidecar.v1
there and reuses ALERT_SNAPSHOT_V1/INCIDENT_V1); docs/RULES.md had drifted
from what `rules docs` actually generates for SIDs 100069-100078 (ruleops.py
was missing metadata for four SIDs and had stale drill text for four more),
now back in sync with a regression test pinning them together.

Updates CLAUDE.md, README.md, go-agent/README.md, and docs/{ROADMAP,
GO_PORT_HANDOFF,SURICATA_ASSIMILATION,THREAT_MODEL,OPERATIONS,SCHEMAS,
COMMAND_REFERENCE}.md to reflect the landed work.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NQivSKBqQJsayz1xcYqWzZ
This commit is contained in:
Luna 2026-07-24 09:59:09 -07:00
parent 1d1dee7f6e
commit d835386381
No known key found for this signature in database
43 changed files with 3419 additions and 72 deletions

View file

@ -300,9 +300,23 @@ Exit criteria:
now provide truthful retained counts and basic process context. A private,
atomic `enodia.incident.v1` index now applies the shared lineage-first/time-
window grouping, assigns real snapshot `incident_id` values, and persists
correlation SID `100080`. The Python service remains the production default
until rich enrichment/assurance, management-console consumers, and broader
subsystem parity land.
correlation SID `100080`. Hot-path enrichment adds bounded process/parent
context, lineage, remote-IP classification, and candidate paths synchronously,
while a 16-job asynchronous worker adds streamed executable hashes, file
metadata, and package-owner strings under a query bound. The sidecar now also
has sidecar-only, `--state-dir`-gated FIM (`fim-baseline.json`, SIDs
`100017``100020`, optional `pacman -Qkk` verification), package-DB anchor
(`pkgdb_verify`, SID `100021`), and rootcheck (procfs/sysfs/`ps`/socket/
module-taint/kernel-taint/promiscuous-mode cross-view checks) engines that
run asynchronously off the sweep loop and return alerts through the same
cooldown/snapshot/incident pipeline. Python's dashboard gained a first,
explicitly read-only management-console consumer for this migration
evidence: an opt-in `go_sidecar_state_dir` setting exposes `/api/go-sidecar/*`
endpoints and a Sidecar dashboard tab that display the Go sidecar's retained
heartbeat, alert snapshots, incidents, and event log without starting,
stopping, or otherwise controlling the Go process. The Python service remains
the production default until notification fan-out and broader subsystem
parity land.
## Backlog