g8e v1.6.7
Immutable
release. Only release title and notes can be modified.
[1.6.7] - 2026-07-30
Overview
Security hardening and demo realism release. Removes the mock L3 notary bypass (G8E_L3_MOCK), making the gateway always require real WebAuthn proof for L3 notary approval. Introduces per-member consensus seeds so BFT quorum is cryptographically meaningful — each member signs with its own distinct Ed25519 key, and a single compromised key can no longer forge enough votes to satisfy quorum. Demo scenarios now use MCPToolsCall (Path A) with human browser approval via WaitForHumanApproval instead of mock cryptographic actors. Adds Devin CLI as a supported agent and introduces command-scoped credential flags for g8e mcp stdio IDE integration.
Security
G8E_L3_MOCKremoved — The gateway always requires real WebAuthn proof for L3 notary approval. ThedemoL3Notary/NewDemoL3Notaryauto-approve bypass has been deleted.G8E_L3_MOCK=trueenv var is no longer respected. A fail-closed regression test (TestGatewayModeService_GetGovernanceDeps_AlwaysUsesRealNotary) verifies the gateway never instantiates a mock notary. Affected files:internal/services/gateway/gateway_service.go,internal/services/governance/l3_notary.go,internal/services/governance/l3_notary_test.go(deleted).- Per-member consensus keys — Consensus bootstrap now supports
member_seedsin the config file, a map of member app IDs to individual hex-encoded Ed25519 seeds. Each member gets its own derived key pair, makingRequireDistinctand quorum cryptographically meaningful. A single compromised key cannot forge enough votes to satisfy a multi-member quorum. The regression testTestL4Warden_SingleKeyCannotSatisfyQuorumproves this at the warden level. Affected files:internal/cli/serve/gateway.go,internal/tools/agent_harness/client/envelope.go,internal/services/governance/l4_warden_consensus_edge_test.go. - MCP stdio credential pair validation — Cert and key must be supplied as pairs per tier (app or client). Supplying only one half (e.g.
--app-certwithout--app-key) fails closed withErrIncompleteCredentialPairinstead of silently mixing tiers.--gateway-urlvalidateshttpsscheme and non-empty host. Affected files:internal/cli/cmd/mcp.go,internal/constants/errors.go.
Added
- Devin CLI agent support —
g8e mcp agent run devinlaunches Devin CLI with g8e as the only MCP server in~/.config/devin/config.json. Governance is enforced by making g8e the only MCP server (Devin does not support CLI flags to disable native tools).verifyDevinInterceptionverifies the g8e MCP server entry exists. New constants:AgentBinaryDevin,AgentConfigDirDevin,AgentConfigFileMCPDevin. New paths inAgentConfigPaths:DevinConfigDir,DevinConfigPath. Affected files:internal/constants/agents.go,internal/constants/paths.go,internal/paths/paths.go,internal/cli/cmd/mcp.go. - MCP stdio credential flags —
g8e mcp stdioaccepts--client-cert,--client-key,--ca-bundle,--gateway-url,--app-cert,--app-keyflags for direct IDE MCP config integration. Credentials resolve in order: flag →G8E_*env var → enrolled CLI credential on disk. Flags are command-scoped tomcp stdio, not root-persistent. Affected files:internal/cli/cmd/mcp.go,internal/constants/errors.go. member_seedsbootstrap config field — New optional field inconsensus-bootstrap.json. Takes precedence overseed_hex. When present, each member gets its own derived Ed25519 key pair. Affected files:internal/cli/serve/gateway.go,internal/cli/serve/consensus_bootstrap_test.go.commitment_ledgertable — New SQLite table in the audit store schema for commitment ledger entries with hash uniqueness and a committed-at index. Affected files:internal/services/storage/audit_store.go.approvals_verify_actionAPI path — New/verifypath constant inAPIPathsandprotocol/constants/api_paths.json. Affected files:internal/constants/api_paths.go,protocol/constants/api_paths.json.WaitForHumanApprovalclient method — Drives the real out-of-band L3 notary flow: prints the approval URL to stderr, subscribes to the gateway's SSE stream forapproval.completedevents matching the transaction hash, blocks until a human completes the WebAuthn passkey ceremony in their browser, then verifies the approval status via the mTLS status endpoint. Affected files:internal/tools/agent_harness/client/client.go.NewEnsembleFromMemberSeedsconstructor — Creates an ensemble with distinct per-member Ed25519 keys from a map of member seeds.HasPerMemberKeys()method reports whether per-member keys are in use. Affected files:internal/tools/agent_harness/client/envelope.go.shellCommandMaphelper — Map-based args forMCPToolsCall(parallel to existingshellCommandArgsJSON helper). Affected files:internal/tools/agent_harness/scenarios/shell_command.go.fs_listscenario file — Newfs_list.goin scenarios package. Affected files:internal/tools/agent_harness/scenarios/fs_list.go.
Changed
- Demo scenarios use
MCPToolsCall(Path A) — All governance scenarios now call the MCPtools/callendpoint instead ofSubmitMaximal. The gateway builds theGovernanceEnvelopeinternally, runs L2 consensus deliberation viaLocalDeliberator, and suspends transactions requiring L3 notary approval. The harness waits for human browser approval viaWaitForHumanApproval.SubmitMaximal/Ensembleremain as conformance testing infrastructure only. Affected files:internal/tools/agent_harness/scenarios/governance.go,dhs_sovereign.go,fedramp_governance.go. setupGovKitsimplified — No longer creates ensemble/principal or registers signers. SetsGovKitwith{OperatorID, OperatorSessionID}only. Signer registration is handled by the gateway's consensus bootstrap. Affected files:internal/cli/cmd/scenarios_run.go.- Harness config fields removed —
EnsembleSize,ConsensusKeyID,ConsensusSeed,ConsensusID,PrincipalKeyID,L3Moderemoved fromconfig.Config. CLI flags--l3-mode,--ensemble,--consensus-seed,--consensus-idremoved fromdemos scenarios run. Affected files:internal/tools/agent_harness/config/config.go,internal/cli/cmd/scenarios_run.go. agentMCPConfig.ExcludeToolsmoved to per-agent —omitemptyadded to JSON tag.ExcludeToolsis now only set for Claude/Codex (which use--disallowed-tools), not for Gemini/Devin. Affected files:internal/cli/cmd/mcp.go.verifyMCPServerEntryshared helper — Extracted common MCP server entry verification for Gemini and Devin configs.verifyGeminiInterceptionnow calls it first. Affected files:internal/cli/cmd/mcp.go.- Demo compose files updated —
G8E_L3_MOCK=trueenv var removed.--public-base-urlflag added.ensemble-seed.hexvolume mount removed. Affected files:demos/dhs/compose.yml,demos/fedramp/compose.yml. - Demo bootstrap configs switched to
member_seeds— Both DHS and FedRAMPconsensus-bootstrap.jsonfiles now usemember_seedsinstead ofseed_hex. Affected files:demos/dhs/config/consensus-bootstrap.json,demos/fedramp/config/consensus-bootstrap.json.
Removed
demoL3Notary/NewDemoL3Notary— Demo L3 notary that auto-approved all proofs. Deleted frominternal/services/governance/l3_notary.go.Principaltype — Mock L3 principal (Ed25519 signature) removed from harness client.SubmitMaximalno longer attaches L3 proof. Deleted frominternal/tools/agent_harness/client/envelope.go.l3_notary_test.go— Tests for removed demo L3 notary. Deleted.--l3-mode,--ensemble,--consensus-seed,--consensus-idCLI flags — Removed fromdemos scenarios run.G8E_L3_MOCKenv var — Removed from gateway and demo compose files.ensemble-seed.hexvolume mount — No longer mounted in demo compose files.dhs-cue-vetoscenario — Removed from DHS demo (veto testing is now covered by the L4 Warden regression test).
Fixed
- Vacuous quorum bug — Under the old single-key ensemble pattern, one Ed25519 key was registered as the trusted signer for every member, so a single compromised key could sign all votes and satisfy a multi-member quorum. Per-member consensus keys fix this at the configuration level by registering a distinct public key per member. The L4 Warden regression test proves forged votes fail signature verification against distinct public keys.
ExcludeToolsserialization —omitemptyadded toagentMCPConfig.ExcludeToolsJSON tag so agents that don't use--disallowed-tools(Gemini, Devin) don't get an emptyexcludeToolsarray in their config.
Tests
TestL4Warden_SingleKeyCannotSatisfyQuorum— Regression test proving per-member keys prevent vacuous quorum. Tests forged votes with one key fail, correct distinct-key votes pass, and 2-of-3 quorum works. (internal/services/governance/l4_warden_consensus_edge_test.go)TestGatewayModeService_GetGovernanceDeps_AlwaysUsesRealNotary— Fail-closed regression test verifying the gateway always usesNewGatewayL3Notary, never a mock. (internal/services/gateway/gateway_service_governance_test.go)- Consensus bootstrap test — New test for
consensusPolicyBootstrapwith per-member seeds, covering per-member key derivation, single-key fallback, and idempotency. (internal/cli/serve/consensus_bootstrap_test.go) - MCP prepare launch test — New test file for MCP agent launch preparation. (
internal/cli/cmd/mcp_prepare_launch_test.go) - MCP run error paths test — Expanded from 7 to 240 lines covering error paths in MCP stdio run. (
internal/cli/cmd/mcp_run_error_paths_test.go) - MCP tool interception test — Expanded coverage for tool interception verification. (
internal/cli/cmd/mcp_tool_interception_test.go) - PKI authority test — Refactored and simplified. (
internal/services/gateway/pki_authority_test.go) - Harness client/envelope tests — Refactored for per-member keys and removed mock L3. (
internal/tools/agent_harness/client/client_test.go,envelope_test.go) - Scenario tests — New
scenario_test.goandshell_command_test.goadded. Governance and DHS sovereign tests refactored forMCPToolsCallpath. (internal/tools/agent_harness/scenarios/)
Documentation
- Architecture docs —
docs/architecture/agents.md(MCP stdio credential resolution),docs/architecture/auth.md(human browser approval flow),docs/architecture/consensus.md(per-member seeds, gateway-internal deliberation, human browser approval),docs/architecture/network.md(MCP stdio credential flags table). - Guide docs —
docs/guides/docker_gateway.md(consensus bootstrap files updated formember_seeds). - Developer docs —
docs/devs/codemap.md(updated for refactored code),docs/devs/tests.md(governance testing description updated). - Demo docs —
demos/README.md,demos/dhs/README.md,demos/fedramp/README.mdupdated forMCPToolsCallpath, per-member seeds, and removed mock L3.