Skip to content

v1.5.0

Choose a tag to compare

@Badoot Badoot released this 13 Jul 14:27
Immutable release. Only release title and notes can be modified.
08ff388

[1.5.0] - 2026-07-13

Overview

Merges the separate github.com/g8e-ai/g8e/protocol Go sub-module into the root github.com/g8e-ai/g8e Go module. This simplifies dependency management and versioning for external consumers — a single go get github.com/g8e-ai/g8e@vX.Y.Z now provides both the platform and protocol packages. Import paths remain unchanged (github.com/g8e-ai/g8e/protocol/...).

Breaking Changes

  • Event constant renamesOperatorIntent* events renamed to OperatorNotary* to align with the L3 Notary governance layer. Removed: OperatorIntentRequested, OperatorIntentGranted, OperatorIntentDenied, OperatorIntentRevokeRequested, OperatorIntentRevoked, OperatorIntentApprovalRequested, OperatorIntentApprovalGranted, OperatorIntentApprovalRejected. Added: OperatorNotaryApprovalRequested, OperatorNotaryTransactionExpired. Consumers subscribing to operator.intent.* channels must update to operator.notary.*.
  • PlatformSentinelModeChangedPlatformVaultModeChanged — Event renamed to reflect the vault-based architecture. Consumers subscribed to the old event name must update.
  • Timestamp format precision — Changed from RFC3339Nano (variable fractional seconds) to fixed microsecond precision (2006-01-02T15:04:05.000000Z07:00). This guarantees lexicographic ordering for SQLite indices. The internal/timesvc package is now the single source of truth; internal/constants/timestamp.go re-exports from it. Transaction hash computation uses the new format for expires_at.
  • MCP gateway tool discovery — Changed from merged tool lists (native + downstream deduplicated) to proxied passthrough. When a downstream MCP server is configured, tools/list, resources/list, and prompts/list are proxied to the downstream server and the raw response is returned. Native tool fallback on downstream failure is removed — errors propagate to the client.
  • MCP endpoint accessibility — The /mcp endpoint is now accessible on both the HTTP port (8080, no mTLS, loopback origin protection) and the HTTPS port (8443, mTLS). Previously it was HTTPS/mTLS only. Production deployments should use HTTPS; HTTP is for local loopback.
  • Terminology: "g8e Node" → "g8e binary file" — Documentation and glossary updated to use "g8e binary file" instead of "g8e Node" throughout. No code API impact.

Added

  • New CLI flags and env vars:
    • --tribunal-bootstrap <path> / G8E_TRIBUNAL_BOOTSTRAP — Path to a JSON file that seeds a TribunalPolicy and trusted signers at startup
    • --public-base-url <url> / G8E_PUBLIC_BASE_URL — Public base URL for approval links and host validation
    • --cors-origin <origin> / G8E_ALLOWED_ORIGINS — Allowed CORS origin for cross-origin browser access (repeatable)
    • --passkey-rp-id <id> / G8E_PASSKEY_RP_ID — RP ID for passkey operations
    • --passkey-rp-name <name> / G8E_PASSKEY_RP_NAME — RP Name for passkey operations
    • --passkey-rp-origin <origin> / G8E_PASSKEY_RP_ORIGINS — Additional RP origins for passkey operations (repeatable)
  • New event constantsOperatorAuditMcpCallRecorded, OperatorPortCheckRequested, AppCaseDeleted, AppInvestigationDeleted, AppMemoryCreated, AppMemoryUpdated, and AI Tribunal session/voting events (AiTribunalSessionStarted, AiTribunalSessionCompleted, AiTribunalVotingConsensusReached, etc.)
  • New protocol model JSONprotocol/models/webauthn_response.json documenting WebAuthnAttestationResponse and WebAuthnAssertionResponse wire shapes
  • Runtime config model expansionprotocol/models/runtime_config.json updated with generic LLM provider fields (llm_primary_provider, llm_assistant_provider, llm_lite_provider replacing provider-specific keys), command_validation settings (whitelist/blacklist), and batch_execution settings (max concurrency, fail-fast)
  • Proto field documentationPubSubMessage and PubSubEvent fields in pubsub.proto now have inline comments documenting action types, channel conventions, and event types
  • internal/timesvc package — New package as the single source of truth for timestamp formatting, replacing scattered sqliteutil.NowTimestamp/FormatTimestamp calls

Changed

  • Go module consolidation — Removed protocol/go.mod, protocol/go.sum, and protocol/vendor/. The root go.mod now directly requires google.golang.org/grpc and google.golang.org/protobuf (previously indirect via the protocol sub-module). The replace directive for github.com/g8e-ai/g8e/protocol has been removed.
  • Makefile test/coverage separation — Split EXCLUDE_PKGS into TEST_EXCLUDE_PKGS (packages excluded from test runs) and COVERAGE_EXCLUDE_PKGS (packages additionally excluded from coverage profile). Protocol generated code and example programs are now coverage-only exclusions.
  • Makefile release targetmake release now runs the full test suite (make test) instead of protocol-only tests. make release-tag renames PROTO_TAG to PYTHON_TAG and updates all messages to reflect that protocol/v* tags trigger only the Python PyPI release.
  • Dockerfile — Removed the COPY protocol/go.mod protocol/go.sum protocol/vendor/ line; the root vendor/ directory now contains all dependencies.
  • Binary release workflow.github/workflows/release-binary.yml now includes go get github.com/g8e-ai/g8e@vX.Y.Z installation instructions in the GitHub release body.
  • Port flag defaults--http-port and --https-port flag defaults changed from hardcoded values (8080/8443) to 0 (auto-resolved from constants.Ports); effective defaults remain 8080 and 8443.
  • --follow flag — Description updated from "Follow log output after starting" to "Run gateway in foreground (Ctrl+C stops gateway)".
  • Gateway entry pointgatewayServeCmd consolidated into gatewayCmd/gatewayStartCmd.
  • WriteAgentConfig home directory resolution — Now uses os.UserHomeDir() as primary with HOME env fallback (previously HOME first, os.UserHomeDir() fallback). Improves cross-platform behavior.
  • system_utils.go platform split — Split into platform-specific files (system_utils_linux.go, system_utils_darwin.go, system_utils_windows.go, system_utils_unix.go) for cross-OS compatibility.
  • G8eoService.SetKeystore — New method for injecting a test keystore, bypassing OS keychain dependencies in cross-platform CI.

Removed

  • protocol/go.mod — Deleted; protocol code is part of the root module.
  • protocol/go.sum — Deleted; dependencies tracked by root go.sum.
  • protocol/vendor/ — Deleted; dependencies vendored in root vendor/.
  • .github/workflows/release-go-protocol.yml — Deleted; Go module releases are now handled by the v* tag via the binary release workflow. The protocol/v* tag continues to trigger only the Python PyPI release.
  • ErrTimestampParseEmpty / ErrTimestampParseInvalidFormat — Removed from internal/constants/errors.go; timestamp parsing now handled by internal/timesvc.

Migration Guide for External Consumers

Before (v1.4.x):

go get github.com/g8e-ai/g8e/protocol@vX.Y.Z

After (v1.5.0):

go get github.com/g8e-ai/g8e@vX.Y.Z

Import paths in Go source code remain unchanged:

import (
    "github.com/g8e-ai/g8e/protocol"
    "github.com/g8e-ai/g8e/protocol/proto/g8e/common/v1"
)

Only the require line in go.mod changes from github.com/g8e-ai/g8e/protocol vX.Y.Z to github.com/g8e-ai/g8e vX.Y.Z.

CI Modernization

This release introduces comprehensive CI pipeline modernization across Go, Python, and release workflows.

Cross-OS CI Matrix — The core ci job now runs on ubuntu, macOS, and Windows with fail-fast: false. OS-specific protoc installation steps handle Linux x86_64, macOS aarch_64, and Windows win64. Cross-compile is gated to Linux only. Timeout increased to 20 minutes for slower runners.

Python Package Tests — 94 pytest tests in protocol/python/tests/ covering constants loading, enum generation, model validation/serialization, and version consistency. CI runs on a Python 3.10-3.14 matrix with example script smoke tests.

Protocol Conformance Suite — 151 tests in protocol/conformance/ enforcing parity between Go constants, Python runtime values, and canonical JSON schemas. Covers JSON file structure, _go_const/_python_const presence, value uniqueness, naming conventions, and model serialization round-trips.

Performance Benchmarks — 13 Go benchmarks across 3 packages: sqliteutil (gzip compress/decompress, SHA-256 hashing), constants (ActionType.IsMutation), and mcp (JSON-RPC marshal/unmarshal, tool call parsing).

Smoke Testsscripts/smoke-test-python.sh and scripts/smoke-test-go.sh verify clean-environment installs from README quickstart instructions. CI runs both on every PR.

Secret Scanning — gitleaks full-history secret scanning via gitleaks-action@v2.

License Compliance — go-licenses report generation with forbidden copyleft license detection (GPL, AGPL, LGPL, SSPL, BUSL).

Artifact Signing — cosign/sigstore keyless binary signing in release-binary.yml. Each binary gets a .sig file uploaded alongside the release with cosign verify-blob instructions.

Fresh-Install Verification — Post-publish verify-install jobs in both release workflows. Binary releases verify go install on ubuntu/macOS/Windows. Python releases verify pip install g8e==<version> from PyPI with import checks.

Python Package Hardeningpy.typed PEP 561 marker for type checker support. Package metadata validation step checks required pyproject.toml fields before build. pip-audit --strict CI job for dependency vulnerability scanning.

Cross-Platform Test Compatibility — Fixed test failures on macOS and Windows to ensure the cross-OS CI matrix passes cleanly. Platform-specific fixes include: macOS Statfs.Bsize type mismatch (uint32 vs int64), filepath.EvalSymlinks for /var/private/var symlink resolution, skip guards for /proc-dependent tests on non-Linux, Windows 8.3 short name path handling, Unix file mode test skips, and broadened SSH error assertions for platform-specific auth failures.