Prune demo GIFs to three, and fix the hard-cap demo to prove the cap fires#98
Merged
Conversation
Keep only the three demos a GIF earns over prose - agent (hero), npm supply-chain, and hard-cap - and cut the other six, whose payload is copy-pasteable text a fenced block conveys better and a test can verify. - delete fleet-audit, learn, lock, onboard, overlay, policy-refusal GIFs - docs/policy.md: replace the policy-refusal GIF with the real pre-build refusal output (captured from a run), naming the overlapping deny-ip - drop the now-orphaned embeds from README, examples, operations, supply-chain, and hardening (overlay) No security tool in the surveyed cohort ships more than one demo GIF; this brings the asset set from 1.96 MB toward that norm.
The old demo asserted nothing. Its workload printed "killed mid-flight by the cap" as a literal string next to an interpolated "$?", so a 503 from the upstream, a server-truncated upload, and curl exiting 0 all still rendered as the cap working - and that is exactly what the shipped GIF showed: 131 KB uploaded (a tenth of the cap), curl exit 0, receipt 0 blocked. The cap never fired; the caption said it did. - split the workload into assets/demos/hard-cap-demo.workload.sh: every verdict is now DERIVED. It loops until the wire dies, then re-runs the warm GET that just succeeded - since curl's exit 28 is a timeout a slow upstream also produces, only a box-wide egress death distinguishes the cap. Reports INCONCLUSIVE and exits non-zero when it cannot show the cap. - config now runs `sh demo.sh`, so `cat sluice.config.sh` shows posture (the allowlist + the cap), not 500 characters of curl. - regenerate the GIF from a real capped run; rewrite the alt text from the frames, not the tape's intent. - add "hardcap: the cap FIRES" to verify-security-hardcap.bats: drive >1 MiB through squid and assert packets land on the DROP counter. Verified it fails (cap raised to 100 MiB -> red at the assertion) before trusting the pass. The suite header also claimed `iptables -S` prints the remaining quota; it prints the configured value - enforcement is only visible via `-L -v` counters. Corrected. The cap itself was never broken - 596 pkts accepted, then 64 dropped once exhausted. Only the evidence was.
Source for a laundering beat: a real agent posture (the claude preset must allow api.anthropic.com, a POST-capable host) shows the run succeed with a yellow note, then SLUICE_STRICT_LAUNDERING=1 refuses the same command, exit 1. The refusal text is warn_laundering's own, with a working engine present, so it cannot pass for a die() elsewhere - both exit codes were verified against real runs. No rendered GIF and no doc embed yet: this is reel source, kept in-repo alongside the other tapes rather than shipped as a docs asset.
Pyronewbic
enabled auto-merge (rebase)
July 22, 2026 10:31
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.
Three logical commits (rebase-merge preserves them individually).
docs:prune demo GIFs from nine to threeKeep only the demos a GIF earns over prose — agent (hero), npm supply-chain, hard-cap — and cut the other six.
docs/policy.mdgets the real pre-build refusal output (captured from a run) in place of its GIF. Assets: 1.96 MB → 664 KB. No surveyed security tool ships more than one demo GIF.fix(demo):make the hard-cap demo prove the cap fires, and test itThe old demo asserted nothing — its workload printed "killed mid-flight by the cap" as a literal string, so the shipped GIF showed 131 KB uploaded (a tenth of the cap), curl exit 0, receipt 0 blocked, captioned as the cap working. The cap never fired in that recording.
hard-cap-demo.workload.sh; every verdict now derived. It re-runs the warm GET that just succeeded to distinguish the cap (box-wide egress death) from a slow upstream (curl's exit 28 is a timeout either way).sh demo.sh, socat sluice.config.shshows posture, not 500 chars of curl.hardcap: the cap FIREStest drives >1 MiB through squid and asserts packets land on the DROP counter — verified it fails (cap → 100 MiB → red at the assertion) before trusting the pass. Also corrects a false header claim:iptables -Sprints the configured quota, not the remaining.The cap itself was never broken (596 pkts accepted, 64 dropped once exhausted) — only the evidence was.
chore(demo):add the laundering-cover tape and fixtureReel source (no GIF, no doc embed). Real agent posture; both
SLUICE_STRICT_LAUNDERINGexit codes verified against real runs.Validation:
test-unit419/419,lintclean,build-checkin sync (nosrc/change),verify-security-hardcap.bats7/7 with a negative control. Linux VM not run — the new test's iptables/awk parsing is validated by CI's requiredsecurity escape-hatches (Docker)lane on real Linux (the test skips, not fails, wherext_quotais absent).🤖 Generated with Claude Code