Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/gunnar

crates/gunnar-proto/Cargo.toml

[package]
name = "gunnar-proto"
description = "The .proto files for gunnar's gRPC control-plane surface, and their tonic-build output."
readme = "README.md"
# 2.0.0 (2026-10-26, lane GUN-INSTALL / G-BOTH, the R5C publish): master differs from crates.io, so
# it gets its own version; a major: cargo-semver-checks names breaking changes against crates.io 1.5.0.
version = "3.0.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
# On the `cargo install gunnar` chain (owner order 2026-10-22).
publish = true
authors.workspace = true
repository.workspace = true

[features]
# `Entitlement` (`proto/gunnar/v1/entitlement.proto`): the paid-state service
# of the METERED appliance. Off, the file is not compiled — see `build.rs`.
# `gunnar-server/metered` forwards here; so does the metered FRONT (`gunnar-front/metered`),
# which calls the primary's `Sealed` slot (2026-10-09).
metered = []

[dependencies]
tonic = { workspace = true }
# tonic 0.14 split the prost codec out of `tonic`; the generated code needs it.
tonic-prost = { workspace = true }
prost = { workspace = true }
# `PushAttestation` is written as ONE JSON LINE to gunnar's own
# attestation log, so the attestation types derive serde and nothing else does.
serde = { workspace = true }

[build-dependencies]
# 0.14: the prost codegen lives in `tonic-prost-build`, not tonic-build.
tonic-prost-build = { workspace = true }
protoc-bin-vendored = { workspace = true }

[dev-dependencies]
serde_json = { workspace = true }
# TESTS ONLY, and deliberately not a normal dependency.
#
# `RepoPath` and `gunnar_core::sandbox` both state the same rule, what a legal
# `<namespace>/<repo>` is, and the divergence above is what two copies of a rule
# produce: the sandbox served `team/sub/repo.git` over SSH while `RepoPath`
# rejected it, so such repositories were invisible to every gRPC consumer. They
# cannot share one implementation, because this crate is a leaf that dwarves and
# korp link for the control-plane types alone, and `gunnar-core` drags the whole
# storage stack in behind it. So the sharing is a *test* that reads the sandbox's
# own corpus and asserts the two agree: `tests/nested_namespace.rs`. A
# dev-dependency is invisible to `cargo tree -e normal`, which is what
# `gunnar-cli/tests/feature_split.rs` guards the appliance graph with.
# PATH-ONLY, no version. Same reason as gunnar-http's gunnar-store entry, and
# this is the one that actually fired: Gate B REFUSED the whole cascade on
# 2026-08-05 with `no matching package named gunnar-core` while rehearsing
# gunnar-proto, because dwarves puts gunnar-proto in wave 0 and gunnar-core in
# wave 3 -- correct for the normal-dependency graph, which is the only graph it
# reads, and impossible for this dev edge. Dropping the version removes the
# ordering constraint rather than restating it somewhere the tooling has to
# agree with.
gunnar-core = { path = "../gunnar-core", features = ["conformance"] }

# NOTE on `prost-types`: deliberately NOT a dependency. Nothing in these protos
# imports a google.protobuf well-known type, since timestamps are explicit
# `int64 *_unix_ms` fields, so linking prost-types would put a dead crate in
# every appliance image (the dependency budget).