Skip to main content

Capability → example map

This is the single table the docs promise: every capability, the code that implements it, the command/target that demonstrates it, and the stable outcomes you should observe. Use it as a checklist when validating a build.

Master map

CapabilityImplemented inRun / try itObservable outcomes (reason codes)
Passport issue/verifypkg/authcore, cmd/trustplane-cli, cmd/trustplane-issuertrustplane issue / trustplane verify; make demoValid passport verifies; wrong --audience/--trust-domain/--issuer → deny
Request binding (transcript-v1)pkg/proofmake demo-provider-gateway; trustplane sign --curl; make transcript-conformanceValid binding allows; tamper → request_binding_mismatch; bad proof → invalid_request_proof; Go/JS/Py identical transcript
Replay protectionpkg/authcore (memory.go, redis.go)make demo-provider-gateway (duplicate); make test (concurrency)2nd presentation → jti_replay; 1-of-N concurrent succeeds; Redis fail-closed
Bundle policy & freshnesspkg/bundle, pkg/middleware/httptrustplane bundle build; make demo-provider-gatewayMissing policy → bundle_policy_missing; unknown route → bundle_route_missing; stale → stale_bundle_fail_closed; bad class → bundle_freshness_unknown
Trust anchors & allowed_sourcespkg/bundle (multi-anchor), pkg/middleware/httpmulti-anchor fixture acme-demo.config.jsonsource_issuer_mismatch / source_trust_domain_mismatch / source_subject_mismatch / insufficient_key_binding; provenance/context: missing_provenance, provenance_mismatch, missing_context, context_mismatch
Non-destructive mergepkg/bundle/merge.go, cmd/trustplane-clitrustplane bundle merge-sourceAppend preserves existing; duplicate rejected unless --replace-existing; new client allowed after publish
Brownfield adaptercmd/trustplane-adapter, pkg/middleware/httpmake demo-adapterValid allows; missing → 401; wrong audience → 403; adds X-TrustPlane-* headers
Broker & attested_workloadcmd/trustplane-broker, internal/broker (+ spiffe_workload_api.go)trustplane broker issue; trustplane up; SPIRE M2M smokeSoftware issue works; abuse/wrong-peer/stale-nonce/replay deny; SPIFFE SVID gates attested_workload
Signer taxonomypkg/authcore/signer.goroute required_key_binding checkssoftware<remote_kms<hardware_local<attested_workload; below min → insufficient_key_binding
Audit eventspkg/auditemitted by broker/verifier/adapterStable trustplane-auth-audit-event-v0.1 JSON with reason_code, route_id, transcript_sha256
Local orchestrationcmd/trustplane-cli (up.go)trustplane up; make v01-acceptanceFull local broker+adapter+bundle pipeline; acceptance gate green

Demonstration targets at a glance

make targetDemonstrates
make demoPassport issue/verify + protected-service example
make demo-bundleIssuer key resolution from a local trust bundle
make demo-adapterBrownfield adapter: allow / 401 / 403
make demo-provider-gatewayBroker + transcript-v1 + replay + bundle policy + deny reasons
make transcript-conformanceCross-language transcript equality
make v01-acceptanceThe whole local readiness gate (see below)

Deploy-side demonstrations (trustplane-auth-deploy)

Script / workflowDemonstrates
scripts/render-chart.shHelm chart renders with no cluster; no broker Service
scripts/acme-demo-software-smoke.shSoftware/JWKS caller → GET /orders allow + deny matrix
scripts/acme-demo-key-lifecycle-smoke.shAdd a client (merge + refresh) on a live adapter, no image rebuild
scripts/acme-demo-multi-route-mockapi-smoke.shOne adapter protecting /orders, /invoices, /customers
scripts/example-spire-m2m-smoke.shSame-cluster broker sidecar + SPIRE attested_workload
deploy-auth-adapter-example.ymlManual example deployment via reviewed chart apply
refresh-auth-bundles-example.ymlBundle-only refresh + adapter refresh signal

Full reason-code reference

Reason codeLayerTrigger
bundle_policy_missingbundle/adapterNo policy bundle loaded
bundle_route_missingbundle/adapterNo route matches method/path
bundle_freshness_unknownbundleUnknown/invalid freshness class
stale_bundle_fail_closedbundle/adapterBundle too stale for the route
source_issuer_mismatchsource policyIssuer not allowed
source_trust_domain_mismatchsource policyTrust domain not allowed
source_subject_mismatchsource policySubject not allowed
insufficient_key_bindingsigner taxonomyKey class below route minimum
missing_provenance / provenance_mismatchprovenance policyRequired provenance absent/wrong
missing_context / context_mismatchcontext policyRequired context absent/wrong
invalid_request_proofproofProof signature malformed / fails verify
request_binding_mismatchproofRequest doesn't match signed transcript
jti_replayreplayPassport jti already consumed
401 / 403adapter HTTPMissing passport / wrong audience
reserved_rls_denyaudit (reserved)Reserved future shape only — not implemented

All policy-level denials (route, source, freshness, provenance/context) occur before replay consume, so they never burn a victim's jti.