acct-missing
The endpoint answered 404. The account was never created, or it was merged. HIGH, and it cannot be accepted.
Stellar account posture / read-only
Gauge reads an account's signers, thresholds and flags, compares them with what you declared, and exits nonzero when they disagree. It never holds a key, never builds a transaction, and treats every downloaded value as hostile.
$ stellar-gauge check --network testnet \ --fail-on warn \ --endpoint \ https://horizon-testnet.stellar.org \ GDSX2WUF…UVBEVGaccount GDSX2WUF…UVBEVG findings: 1 (0 accepted) [warn] flag-undeclared-clawback clawback is enabled and the policy does not declare it evidence: clawback observed true, and no clawback expectation is declaredresult: 1 findings (0 high, 1 warn, 0 info), 0 acceptedexit code: 1Exit 1
The run completed and every rule it evaluated agreed with the policy.
At least one finding reached the --fail-on threshold.
A bad flag, a rejected policy, an unknown key or a secret seed.
Unreachable endpoint, oversized body, malformed response or a rule panic.
The comparison
Gauge is a state comparison, not a scanner. It needs something to compare against, and it says so when that something is missing.
Your gauge.toml: the account's role, expected signers, thresholds, flags and home domain.
A snapshot fetched through Horizon, decoded strictly and sanitized before it reaches any output.
A disagreement becomes a finding with a stable rule ID, a severity, an evidence line and a fingerprint. An accepted risk matches on rule and account; the fingerprint is a stable identifier for the finding.
Scope
Public ledger state, through one Horizon endpoint. Nothing else is downloaded, and no response body is ever logged.
stellar.toml is parsed, and an identity Gauge could not verify is a warning rather than a pass.Shipped today
The account, flag and identity families work now. Role-based severities and the signer and threshold rules are still open.
acct-missingThe endpoint answered 404. The account was never created, or it was merged. HIGH, and it cannot be accepted.
acct-network-mismatchThe endpoint's passphrase differs from the requested network. No account is read. HIGH, and it cannot be accepted.
flag-driftA declared flag disagrees with the chain. Only declared flags are compared. WARN baseline, HIGH for an issuer once role profiles land.
flag-undeclared-clawbackClawback is enabled and the policy does not declare it. WARN baseline, HIGH for an issuer once role profiles land.
id-no-home-domainThe policy declares a home domain and the account publishes none. WARN. The role table that would widen this trigger is task 3.4.
id-toml-unreachableThe published stellar.toml could not be fetched or parsed under the guard, or was observed and never fetched. WARN. The evidence names the step and quotes no body.
id-toml-account-unlistedA readable stellar.toml does not name this account in ACCOUNTS. WARN. Entries that are not account addresses are counted, never echoed.
The boundary
A clean report is a posture result, not proof that the account cannot be compromised. Every report footer
Gauge cannot see who holds a key, whether signers are separate people, or what happens off-chain. It does not audit transactions, balances, offers, claimable balances, liquidity pools or Soroban contracts. It never describes an account as secure or safe.
Start here
There is no tagged release yet. The repository is the install path.
git clone https://github.com/posture-sec/guage cd guage go run ./cmd/stellar-gauge check \ --network testnet \ --endpoint https://horizon-testnet.stellar.org \ G...
Requires Go 1.27.3. The first command reads one account and exits 0, 1, 2 or 3. Guides for check, audit and CI.