Skip to content

feat: gate structured captain decisions through Lavish - #64

Merged
ruby-dlee merged 1 commit into
mainfrom
fm/fm-lavish-decision-gate
Aug 1, 2026
Merged

feat: gate structured captain decisions through Lavish#64
ruby-dlee merged 1 commit into
mainfrom
fm/fm-lavish-decision-gate

Conversation

@ruby-dlee

Copy link
Copy Markdown
Owner

Intent

Ship a durable, tracked gate in the firstmate repo that makes Lavish the only path for captain-facing structured decisions, replacing the session-local Claude AskUserQuestion stopgap. Deny exact structured-question tool identities unconditionally, with no payload scanning, option thresholds, bypass flags, environment escapes, or agent opt-outs; plain chat remains the route for yes/no and lavish-axi create remains the route for multi-option decisions. Fail open on malformed transport or missing dependencies, fail closed only on a confident tool-identity match, and teach both legitimate routes plus Run: lavish answer . Register the gate in tracked harness configuration for every empirically verified primary harness that exposes such a tool, document bounded evidence for harnesses that do not, retain one documentation owner, and add pure stdin/stdout behavioral tests for deny, allow, fail-open, and tracked registration without touching live agent, herdr, tmux, or worktree lifecycle state. Keep all deliverables in tracked repo files so deleting operational-home scripts and settings.local.json leaves the gate functional.

What Changed

  • Add an exact tool-identity gate that blocks built-in structured-question tools and routes multi-option decisions through Lavish while preserving plain-chat yes/no questions.
  • Register native adapters for Claude, Codex, Grok, and OpenCode, with fail-open handling for malformed transport and missing dependencies.
  • Document the gate contract and harness evidence, and add pure stdin/stdout tests covering deny, allow, fail-open, guidance, and tracked registration behavior.

Risk Assessment

✅ Low: Captain, the change is well-bounded and satisfies the exact-identity, fail-open transport, tracked-registration, durable guidance, and documentation ownership requirements without a source-verifiable defect.

Testing

Completed 1 recorded test check.

  • Outcome: ⏭️ skipped across 1 run (1h55m37s)

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

✅ **Review** - passed

✅ No issues found.

⏭️ **Test** - skipped
  • 🚨 tests failed with exit code 1
  • command -v tmux >/dev/null || { echo "tmux is required for e2e tests" >&2; exit 1; }; tmux -V; rc=0; for t in tests/*.test.sh; do echo "== $t =="; bash "$t" || rc=1; done; uv run --directory tools/agent-fleet --locked pytest || rc=1; uv run --directory tools/agent-fleet --locked python -m compileall -q src || rc=1; exit "$rc"
✅ **Document** - passed

✅ No issues found.

✅ **Lint** - passed

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

@ruby-dlee
ruby-dlee merged commit d355964 into main Aug 1, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant