Skip to content

v3.32.17 β€” PlanFlip + MemPoison gates (#2752 dream-cycle)

Choose a tag to compare

@ruvnet ruvnet released this 27 Jul 02:45

Two more dream-cycle security gates, reusing ChannelGuard's detector.

Added

PlanFlip gate β€” ruflo security scan-plan
Scans agent-emitted plans (inline -p or --plan-file <path>) for injected steps that would shift the plan's authority. Gate FIRES on high-severity findings (default) or ANY finding (--strict). Exit 2 signals fire so callers can gate distribution.

MemPoison gate β€” ruflo memory store --scan-content
Runs the scanner on the value BEFORE persistence and refuses the write with exit 2 on any finding. Also activates globally via RUFLO_MEMORY_SCAN_ON_WRITE=1 for safety-critical flows. Refusal is authoritative β€” does not fall through to the sql.js path.

Both gates reuse ChannelGuard's scanChannelMessage from the shared security/injection-catalog + channel-guard modules β€” adding a phrase to the catalog now strengthens all four surfaces at once (composition-scan, channel-scan, scan-plan, memory-store).

Verification

  • Regression tests: 6/6 for #2752 (detector + 3 CLI wire E2E via real execFileSync)
  • Total security tests (#2752 + #2783): 21/21
  • E2E on shipped CLI: memory store with injected value β†’ exit 2, plan file with injected step β†’ exit 2 with FIRE verdict

Upgrade

npx ruflo@latest --version   # β†’ 3.32.17

Refs: dream-cycle #2752 (2026-07-21).