feat(demo): beat 06 through the PluginManager, Rev 3 bundle one stream across a restart, streams read path checks the head - #509
Merged
Conversation
…m across a restart, streams read path checks the head
Teryl's bd39d2c/64c8eba on cpex feat/audit-seam made the audit stream
identity host-settable: plugin_settings.audit_stream_namespace (YAML)
prefixes the executor's per-type labels (gw-1:decision / gw-1:effect) and
a code-only plugin_settings.audit_epoch lets the host supply the epoch,
both bridged into ExecutorConfig so the YAML and direct paths stamp alike.
- examples/panic_drive.rs now takes the production path: parses an
operator config declaring the panicking plugin and kind: audit/ocsf
with no hooks, registers both factories, sets the epoch in code, and
runs load_config -> initialize -> invoke_named -> shutdown. First thing
in the tree to exercise load_config end to end. The real panic lands on
gw-1:decision in the demo's second epoch at stream_seq 0, and the
driver asserts the stamped stream id and epoch.
- demo/run-demo.sh (Rev 3): EPOCH_2 restored, beats 01-05 on the same
gw-1:decision id, one stream across two epochs asserted (each dense
from 0), SHA256SUMS.txt + PROVENANCE.txt written beside the loose files.
Runner: PASS, 6 records, 0 errors, 0 warnings.
- CI seam pin -> 64c8eba; re-verified: warning-free --locked build, 33
tests green, emit_sample byte-identical. SAMPLE-OUTPUT.md,
SEAM-PORT-RESULTS.md and the README wiring record it.
- Edge streams read path: GET /edges/{id}/streams scored dense from
records == last-first+1, so an epoch opening at 1 read as dense while
its row carried the head-gap anomaly (#507). Dense now requires
first_seq == 0. The continuity panel counts expected records from 0 and
names a lost head. One API test and one component test pin the red case.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FnVdSstGAoYJEoEVqzUXbq
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Picks up Teryl's
bd39d2c/64c8ebaon cpexfeat/audit-seam(host-settable audit stream identity:plugin_settings.audit_stream_namespacein YAML, code-onlyplugin_settings.audit_epoch, both bridged intoExecutorConfig; non-CloneEffectEmitterSlot) and closes the three commitments from the 2026-09-02 thread.PluginManager.examples/panic_drive.rsparses an operator config declaring the panicking plugin andkind: audit/ocsfwith nohooks:, registers both factories, sets the epoch in code, and runsload_config→initialize→invoke_named→shutdown. First thing in the tree to exerciseload_configend to end. The real panic lands ongw-1:decisionin the demo's second epoch atstream_seq0, and the driver asserts the stream id and epoch the executor stamped, so an upstream change fails on the driver, not on stage.demo/run-demo.shrestoresEPOCH_2, drives beats 01–05 on the samegw-1:decisionid, asserts one stream across two epochs each dense from 0, and writesSHA256SUMS.txt+PROVENANCE.txtbeside the loose files (no archive). Runner output:PASS: 6 records — 0 errors, 0 warnings.64c8eba. Re-verified the way the workflow runs it: warning-free--lockedbuild, 33 tests green,emit_samplebyte-identical toSAMPLE-OUTPUT.md. The README wiring,SAMPLE-OUTPUT.md, andSEAM-PORT-RESULTS.mdrecord it.GET /api/v1/edges/{id}/streamsscoreddensefromrecords == last_seq - first_seq + 1, so an epoch opening at 1 with a dense interior read as dense while its row carried thestream_seq head gapanomaly. Dense now also requiresfirst_seq == 0; the Case File continuity panel counts expected records from 0 and names a lost head (2 of 3 · head lost · 1 anomaly).The ledger-adapter half of the same rule (GapDetector head-of-epoch + epoch regression, are-immutable-ledger#13) is prepared as a patch for Jeff to post from his terminal; it is not in this PR.
Verification
cargo +1.96.1 check --locked --all-targetswith-D warnings: clean.cargo +1.96.1 test --locked:33 passed; 0 failed.cargo run --example emit_sample: byte-identical toSAMPLE-OUTPUT.mdon64c8eba../demo/run-demo.shagainst cpex64c8eba: exit 0, one streamgw-1:decisionacross epochs1755648000000000000→1755649000000000000, validatorPASS: 6 records — 0 errors, 0 warnings.pytest(api + gateway + common + mandate, CI's SQLite env):1181 passed, 21 skipped, 6 warnings in 50.53s.cd dashboard && npm test:89 passed (89).🤖 Generated with Claude Code
https://claude.ai/code/session_01FnVdSstGAoYJEoEVqzUXbq