Skip to content
  • P1.2 — preserve KeyBackendError variant identity in load/sync
  • correct HTTP status codes for operator-fixable + caller-fault errors
  • P2.1 — replace std HashSet with ahash AHashSet in unauthenticated policy
  • P2.2/P2.3/P2.4 — eliminate inline crate paths and function-local use aliases
  • restore SDK error logging and thread shared master-key cell through boot
  • add concurrency, drop duplicate gen-docs check, cache build-linux
  • enable npm manager for website dependencies
  • Phase F — verification + ADR-0011 + AGENTS.md updates
  • fix three stale rustdoc references (P3.3, P3.5, P3.7)
  • forbid —no-verify pre-commit bypass
  • refresh AGENTS.md structure trees + LOC counts (audit §2.3, §2.4)
  • fix Helm chart bug + sweep stale config-schema/path references
  • fix stale paths and broken doc links after ceremony refactor
  • align with current code surface
  • trim contributor folder to non-duplicated content
  • trim root AGENTS.md, remove duplicate CLAUDE.md
  • re-add working principles to AGENTS.md, refresh CONTEXT.md
  • audit every AGENTS.md, strip drift-prone facts
  • document dependency-update workflow
  • raise vite chunk-size warning to 1500 kB
  • migrate contributor docs from docs/ to website/
  • audit against current code
  • fix 10 drift items against current code
  • collapse 4 API tables into a 5-bullet summary
  • fix diagram drift, register /healthcheck, declare 503 on sealed-state endpoints
  • rewrite Key Sources section for accuracy
  • align config layout with chamber.keys.* migration
  • fix chart and dockerfile
  • fix chart
  • Phase F — signer-state CLI flags + canary tests + docs
  • Phase A — define KeyBackend + MutableKeyBackend traits
  • Phase B — implement KeyBackend + MutableKeyBackend traits
  • Phase C — add key-source factory + supervised refresh task
  • Phase D — rename key_refresh_interval_minutes → refresh_interval_seconds
  • Phase E — atomic migration to KeyBackend trait
  • require Noop antislashing in stateless deployments
  • list fallback for stateless deployments
  • add chamber.keys.{write,generate}.enabled with backward-compat shim
  • support import/delete/patch in stateless deployments
  • thread Option through sqlite/postgres/dynamodb backends
  • gate keygen on unsealed chamber state (P3.11)
  • reject unknown fields in policy/token/seal/keys bodies
  • typed MasterKeyRow trait surface + drop DynamoMode
  • typed constructors + drop Debug derive on MasterKeyRow
  • drop inline crate paths + retype reconstruct doc
  • drop pre-existing inline crate paths + delete dead init_signer
  • split SignerStateConfig into common fields + backend enum
  • move factory to state_backend module
  • P1.1 — delete dead MasterKeyVault wrapper
  • P2.5 — abstract storage errors via StateBackendError
  • P2.7 — separate domain outcomes from errors
  • rename chamber/import to chamber/keys; move keygen into chamber/keys/generate
  • make AntiSlashingError engine-agnostic via Infrastructure/Internal
  • construct at boot via antislashing::build factory; thread Arc through
  • relax SQL hmac NOT NULL + add Option-aware HMAC helpers
  • drop deprecated-alias migration shim — pre-release hard cutover
  • align verb (insert) and collapse outcome enums to InsertOutcome
  • merge DynamoDbKeyBackend into DynamoDbKeyStore
  • move dynamodb under key_source, collapse to single file
  • tighten visibility and trait shapes (P3.1, P3.8, P3.9)
  • consolidate two top-level use blocks into one (P3.4)
  • MutableKeyBackend takes &PubkeyHex instead of &str (P3.2)
  • tighten internal pubkey types to PubkeyHex
  • mechanical visibility + dedup wins
  • rename AppState->SignerContext + InitState->ChamberContext
  • embed Arc in ChamberContext via Deref (DUP-8) + rate_limiter -> operator_rate_limiter
  • unify master-key access through MasterKeyAccessor (FN-6) + opaque sealed-state error bodies
  • promote 6 free fns to impl methods (FN-1..FN-5 + FN-7)
  • move unix_now from http::auth to crate::util (BL-1)
  • drop cross-subsystem error coupling (BL-5)
  • extract epoch_to_i64 helper (DUP-3)
  • extract parse_gvr_bytes helper (DUP-4)
  • extract gvr_mismatch helper (DUP-1)
  • extract keygen_validation_err + keygen_crypto_err helpers (DUP-7)
  • move BackupEncryptor from DDB-impl to crypto.rs (BL-3)
  • move Policy/Token domain types to auth_types (BL-4)
  • clean up BL-4 commit per idiom review
  • share ImportProgress between sqlite + postgres (DUP-2)
  • unify process_key_results + fix cache-lag (DUP-5)
  • drop over-broad pub on deserialize_token (FN-8)
  • promote extract_encrypted_blob to EncryptedBlsSk::from_dynamodb_row (FN-12)
  • introduce DynamoRow newtype for DDB attribute parsing (FN-13)
  • drop residual DynamoDB-specific naming from generic helpers (audit §2.6, §2.7, §2.9)
  • drop dead ChamberContext.dynamodb_client field + cascade
  • replace last two DDB-presence-as-mode-check anti-patterns (audit §2.7)
  • promote key/antislashing-backend construction into Bootstrap (audit §2.1)
  • fold signer_init into signer_state/init alongside watcher
  • collapse MasterKeyAccessor trait into MasterKeyHolder newtype (audit §2.10)
  • collapse TaggedBackend tag duplication + iteration-2 of audit §2.11
  • replace test-mod std::collections::HashSet with ahash::AHashSet (audit §3.x)
  • deepen seal/unseal ceremony into chamber::Ceremony
  • extract OperatorClient module from main.rs
  • DRY server-error printing + use infallible to_string fallback
  • consolidate validation into Config::validate()
  • centralize scope+metric prologue in record_chamber_keys_request
  • extract eth-signer error mapping into errors/eth_signer.rs
  • extract prepare_atls_state helper from serve_*atls fns
  • extract cipher envelope into sibling module
  • tighten visibility + drop dead Serde variant from final review
  • strip internal annotations + apply audit findings
  • move ceremony primitives into chamber::ceremony::quorum_share
  • consolidate TEE-blob unseal in chamber::signer_load
  • extract validator-key domain to signer::ethereum::keygen + add batch parallelism
  • typed StateRow parser + fix aws::dynamodb layering
  • one outcome classifier for metrics + audit log
  • fold kms_attested.rs into kms.rs
  • move harden_process from server.rs to security.rs
  • unify section validators on Result<(), ConfigError>
  • table-driven IntoResponse for ApiError
  • share CBOR primitives + drop vestigial cose parsers
  • pre-release canonical naming sweep
  • decouple chamber HTTP config from key_sources storage
  • merge test-fast-argon2 into test-utils
  • cover deprecated-alias migration shim
  • mirror chamber.keys deprecated-alias migration in test_config_with_dynamodb
  • cover stateless mode for sqlite/postgres/dynamodb
  • route fixtures through Arc
  • unit-cover tee_auto_unseal_and_finalize via MockTeeAutoUnseal
  • live HTTP API compliance suite
  • drop spurious top-level status field
  • add ci-full recipe matching GitHub Actions test-coverage gate
  • enable test-fast-argon2 in pre-push gate
  • make version check podman-rootless compatible
  • hoist crate paths + drop let _ bandaid + must_use on test helper
  • hoist MasterKeyAccessor + AntiSlashingConfig imports (self-review followup)
  • drop stale check_row_hmac_presence intra-doc link
  • replace let _ = with explicit expect() in write_temp_yaml
  • tighten visibility and hoist Config import (self-review)
  • use ? for error coercion and dedup keypair conversion
  • destructure ValidatorInfo to avoid unnecessary clone + fix indent drift
  • build_dynamodb_routes -> build_chamber_routes
  • update age digest to d28f10e (#78)
  • add #[must_use] to TeeConfig::is_active, map_or→is_some_and
  • use strong-consistent read in get_secret_key
  • HMAC-verify master key recovered from TEE auto-unseal
  • constrain TEE-blob shares[].arn to configured KMS ARN set
  • defer auto_unseal swap until after blob persist
  • tighten KMS attestation classification + cap auto-unseal blob size
  • tighten body.version + integer-only PCR keys + post-rename docstrings
  • update TEE config section from enclave.* to tee.nitro.*
  • fix stale config.enclave.* reference in values.yaml/README
  • regenerate config reference + fix stale enclave.log_vsock_port ref
  • update config-and-cli-modernization completion summary
  • align flag references with dotted-path convention + ServerCommand layout
  • add AWS KMS policy runbook for TEE auto-unseal
  • add architectural refactor plan with 17 deepening opportunities
  • add ADR-0001 — build_dynamodb_routes is pub for route-assembly tests
  • add ADR-0002 — client-IP helpers split by extraction layer
  • add ADR-0003 + module-layering docstring for verifier.rs (REFACTOR_PLAN.md #16)
  • add ADR-0004 — DynamoDB CAS retry is GVR-specific (REFACTOR_PLAN.md #2)
  • add ADR-0005 — auth wrapping and models.rs are correct (REFACTOR_PLAN.md #14 + #15)
  • add ADR-0006 + fix auth_types.rs docstring (REFACTOR_PLAN.md #5)
  • add ADR-0008 + fix TeePlatform docstring (REFACTOR_PLAN.md #7)
  • add ADR-0009 — KeySource enum correctly models asymmetry (REFACTOR_PLAN.md #12)
  • implement Shamir-over-multi-KMS for TEE auto-unseal
  • rename Unseal mode -> Quorum + DDB strong reads + KMS rotation re-seal
  • wire MASTER_KEY row schema_version through typed enum
  • wire BLS-key cipher_version through typed enum
  • centralize token prefix conventions + prefix all secrets
  • add typed schema-version field to known_enclaves.toml
  • migrate BLS key KEK to HKDF-derived K_bls (Phase 3)
  • update deps
  • ct equal
  • update website
  • cache expected_gvr_hex on EthereumSigner
  • simplify nitro cfg gates and migrate sealed-storage to auto-unseal
  • split TEE attestation into two narrow traits
  • rename NitroKmsState to NitroKmsAttestation
  • replace TlsAttestationBackend enum with trait dispatch
  • replace EthAntiSlashingBackend enum with AntiSlashing trait
  • replace SignerStateBackend enum with trait dispatch
  • concentrate TEE code under src/tee/, rename tee_attestation to tee
  • extract KmsClient trait, split KmsPool via composition
  • rename StreamAccept -> StreamAcceptor, move vsock impl to tee/nitro
  • introduce TeePlatform trait, collapse boot-time cfg gates
  • fold auto_unseal into tee module, eliminate runtime cfg branches
  • narrow TeePlatform — drop is_active and spawn_extra_metrics_listener
  • extract ServerCommand; add Config/Docs subcommands; rename tee_bootstrap_from_vsock
  • update Dockerfile and Helm chart for tee.nitro config rename
  • remove unapproved DocsCommand stub
  • move config + bootstrap into ServerCommand, require subcommand
  • inject ‘server’ subcommand into Dockerfile entrypoints
  • rename server flags to mirror YAML config dotted paths
  • track F
  • shamir magic number and PCR
  • rename “TEE seal” → “TEE auto-unseal” — docs + identifiers + wire format
  • extract decrypt_kms_shares helper; surface attestation classification in MasterKeyError
  • tighten auto-unseal vocabulary in type/var/field names
  • DRY split-and-encrypt + registration-token loops
  • introduce MasterKeyAccessor trait and factor AuthManager
  • centralize master-key subkey derivation via HKDF + MasterKeyPurpose enum
  • centralize master-key subkey derivation via HKDF + MasterKeyPurpose enum
  • inline Subkey::hmac() method, remove free hmac_with_subkey
  • thread pubkey_bytes through internal methods + Option<&[u8]>
  • replace Backend(String) catch-all with typed variants
  • replace CryptoError String-payloads with typed variants
  • replace anyhow with typed NitroVerifyError + strum convention
  • spell out abbreviated local names for readability
  • mark growth-prone public enums #[non_exhaustive]
  • use PubkeyHex instead of String in HTTP response types
  • move zxcvbn off the tokio runtime (REFACTOR_PLAN.md #6)
  • rename MasterKeyProvider to MasterKeyVault (REFACTOR_PLAN.md #13)
  • extract signer_init module from boot (REFACTOR_PLAN.md #9)
  • extract init choreography to seal/init.rs (REFACTOR_PLAN.md #1, partial)
  • consolidate policy+token handlers to use api_call (REFACTOR_PLAN.md #3, partial)
  • fix mode-name docstring + delete dead Minimal functions (REFACTOR_PLAN.md #4, partial)
  • add deny_unknown_fields + ADR-0010 deferring CLI/config infra (REFACTOR_PLAN.md #10 + #11)
  • flatten util/ and http/cidr_guard/ single-file folders
  • rename master-key modes to KmsAuto + OperatorQuorum
  • split 610-line run() into RuntimeBootstrap + phase helpers
  • replace metric_definitions slice with CaptureRecorder
  • extract seccomp syscall arrays to const slices
  • update integration-test assertions to match quorum rename
  • hmac column in PG schema + valid hex unique_pubkey
  • restrict pinned PCR set to image-identity measurements
  • handle BER constructed [0] IMPLICIT for CMS encryptedContent
  • log KMS CiphertextForRecipient + CMS field preview (TEMP)
  • render vsock-proxy specs as JSON env var, parse with jq
  • pass bare rustls::ClientConfig to reqwest use_preconfigured_tls
  • parse BER-encoded KMS CMS EnvelopedData (CiphertextForRecipient)
  • mount enclave entrypoint as ConfigMap, render vsock-proxy lines via Helm
  • rustfmt + clippy pedantic/nursery fixes for src/enclave/cms.rs
  • pin DynamoDB to regional endpoint (disable account-scoped routing)
  • share rust-builder layer between enclave and pod builds
  • bake AWS_CONTAINER_CREDENTIALS_FULL_URI into enclave-image stage
  • cap body at MAX_CREDS_BYTES regardless of Content-Length
  • merge Dockerfile.enclave + Dockerfile.pod, share rust-builder stage
  • unified multi-endpoint egress plane
  • add credentials wire-protocol constants
  • AWS credentials via Pod Identity transparent vsock proxy
  • bring loopback up via SIOCSIFFLAGS ioctl, not the ip binary
  • pin region based on CLI flag, not config flag
  • source /etc/hosts region from config, not env
  • pin AWS region from config, bypass IMDS
  • update deps
  • length-prefix framing for vsock config bootstrap
  • chart and docs
  • provide vsock-proxy allowlist via ConfigMap
  • early-init tracing so bootstrap failures reach kubectl logs
  • chart
  • append —enclave-bootstrap-from-vsock to ENTRYPOINT
  • bump to 2.1.0 for SPEC-ENCLAVE-CFG-001
  • wire enclave vsock bootstrap into startup
  • introduce src/enclave/vsock.rs wire-protocol constants
  • add config_bootstrap module (vsock YAML fetcher)
  • bootstrap observability + operator digest tool + pod wiring
  • satisfy pedantic+nursery clippy on bootstrap path
  • add vsock-config subcommand for bootstrap delivery
  • align CONFIG_PATH default with existing chart mount
  • emit merged_config_digest in server_started event
  • previous fixes
  • collapse parallel .Values.tls.* tree into .Values.config.tls.*
  • reuse TCP listen_port keys for vsock ingress ports
  • add tls.listen_address + fix chart metrics default typo
  • delete serve_tls_tcp_with_listener; tests go through serve_tls_stream
  • MDX-escape generated tables and regenerate d2 SVGs
  • previous fixes
  • update default-values assertion for health=9000 + signing=9443
  • vsock dual listener + aTLS unification + chart plumbing
  • metrics init
  • remove dead update_process_metrics tests left by previous cleanup
  • preserve Zeroizing wrapper in AttestedKmsClient::decrypt
  • zeroize auth credential intermediates in extract_credentials
  • use transition_signer_state for kms_only auto-unseal path
  • cache signer state load in metrics loop and record attestation failure metric
  • include DynamoDB anti-slashing in needs_dynamodb check and fix minor issues
  • run clippy on both default and nitro feature sets
  • fix lint expectations and mark auth enforcement tests
  • address P0-P2 audit findings
  • config field, token extraction dedup, DynamoDB client dedup
  • clear auth state on re-seal (G4)
  • delete obsolete config-driven auth tests
  • extract derive_auth_hmac_secret, delete dead code, fix &*
  • address all audit findings H5, M1-M8, L2-L3
  • tighten visibility on PutAuthPolicyError and conditional put
  • M7 integration tests + correct key-restricted signing semantics
  • don’t leak bearer tokens via tracing spans
  • serialize background refresh with mutation_lock
  • make generated root token immediately usable
  • seal preserves unauth policy; remove auth-disabled grace period (deny-by-default)
  • keep master key inside Zeroizing, never bitwise-copy onto the stack
  • unify SharedMasterKey ownership; allow Sealed→Unsealed for TEE auto-unseal
  • SQL backends fail closed on corrupt signing_root
  • decrypt_keystores preserves input order
  • create_token validates policies under mutation_lock (TOCTOU)
  • clear root_token_shares on seal and rotation
  • SQLite uses sqlite3_interrupt, not JoinHandle::abort
  • import_keys uses InsertOutcome, no has_key+insert race
  • preserve Zeroizing on Shamir share through spawn_blocking (Z1)
  • fail closed on unverified COSE_Sign1 attestation documents (SEC1 P0)
  • close 6 Zeroize-wrapper leaks (Z-1..Z-6)
  • SEC2 gate list_credentials + SEC3 ASCII-only validate_identifier
  • SEC4-6 log injection, seal docstring, kms_only/unseal semantic split
  • add Handler Panics panel to dashboards + auth config in values.yaml
  • remove 5 surviving stale auth references missed by subagents
  • resolve Zeroizing AsRef ambiguity after dep update
  • initialize AuthManager HMAC secret on operator-driven unseal
  • add missing IAM permissions for auth API and anti-slashing
  • remove stale gen_docs entries + add 8 missing config fields
  • resolve 5 docs-vs-code discrepancies from codebase audit
  • add 16 missing TLS + enclave config fields to gen_docs
  • 3 AGENTS.md line drifts + terraform README table/key count
  • CID 2→3, CMS zeroize + OID validation, nsm-hwrng check
  • DynamoDB import_interchange fail-open → fail-closed
  • DynamoDB import_interchange consistent hard-fail + target-before-source ordering
  • runtime watermark invariant check in check_attestation_hybrid
  • comprehensive audit remediation — P1 security + P2 defense-in-depth
  • 5 defense-in-depth improvements from Nitro audit
  • cfg-gate skip_attestation, attestation freshness, port validation, cert hash reload
  • unify AtlsServerCertVerifier::new() signature and update all callsites
  • cfg-gate skip_attestation CLI flag and harden verifier API
  • upgrade CORS wildcard log to warn with security context
  • sanitize NetworkMismatch response to avoid GVR disclosure
  • rename source_ip to x_forwarded_for and document spoofability
  • use saturating arithmetic in retry_with_backoff
  • restrict share passphrase fns to crate-internal
  • pre-check key existence before anti-slashing to avoid phantom records
  • atomic claim-then-verify rate limit eliminates TOCTOU burst
  • pass just lint (clippy pedantic + nursery)
  • post-audit cleanup from external review
  • log stderr write failure in emit_changed_warning
  • rate-limit credential-management passphrase proofs
  • validate enclave_cid and fix PROXY v2 encoder gating
  • supervise per-connection tasks inside the enclave binary
  • apply securityContext in enclave mode
  • wire METRICS_VSOCK_PORT to defined values entry
  • update AGENTS.md and ARCHITECTURE.md after KmsPool migration
  • rewrite auth documentation for API-driven policy and token management
  • add Web3Signer-compatible unauthenticated_policy example
  • update all references for signing config migration to nested struct
  • complete config.example.yaml with every config field
  • document HTTP Basic auth as supported alternative to Bearer
  • correct apply_load_shed_stack doc comment
  • document read-only directory requirement
  • clarify age crate git-pin rationale
  • document operator label access-control requirement
  • fix step numbering in check_attestation_hybrid
  • refresh stale comments and module references after refactoring
  • clarify basic-auth transport-shim exception
  • @MX:WARN covers both PEM intermediate buffers
  • HANDOFF.md with status + process norms + pending findings
  • update HANDOFF.md — H5 fully closed
  • HANDOFF update — all H-tier closed, M-tier next
  • close M10 as working-as-intended + document skipped findings
  • HANDOFF update — M-tier progress + full finding inventory
  • HANDOFF update — M-tier near-complete, M18 next
  • clarify seed_entropy covers the rand::rng() thread-local path (audit M4)
  • HANDOFF roll-forward — M-tier now fully closed (M18 + M4 + M3)
  • module headers + rustdoc for types.rs and dynamodb/error.rs (audit L2 pt.1)
  • module headers for signing.rs + keystore_decrypt.rs + dynamodb.rs + key_source.rs (audit L2 pt.2)
  • module header + EthereumSigner error class docs + sign/remove_key docs (audit L2 pt.3)
  • HANDOFF roll-forward — L2 shipped, L-tier triage complete
  • trim narration and tombstone comments flagged by simplify review
  • HANDOFF final roll-forward — audit fully closed
  • SPEC-OPREG-001 v1.0.0 — operator passphrase entropy enforcement + server-generated flag (draft)
  • tighten leak-detection guarantee scope
  • fix stale audit_capture reference in server_tests
  • bump rust 1.95, sync AGENTS.md tree to code, document enclave log forwarding
  • add signer_state, startup_duration, key_refresh_duration metrics and dashboard panels
  • crit findings
  • centralize KMS operations in KmsPool with Nitro Enclave attestation
  • add domain types, DynamoDB backend, evaluator
  • add AuthManager, policy/token HTTP handlers
  • bootstrap integration, server migration, config cleanup
  • CLI auth commands, OpenAPI spec, generate-root-token
  • generate-root-token endpoint + CLI command
  • generate-root-token via operator quorum, delete obsolete tests
  • API-driven auth policy management
  • install CatchPanicLayer for clean 500 on handler panics
  • full COSE_Sign1 attestation verification against pinned Nitro root CA (SEC1 P0 follow-up)
  • update deps
  • EIP-3076 interchange types + export/import for all backends
  • wire interchange into delete and import handlers
  • register interchange types in OpenAPI + regenerate spec
  • add PrometheusRule with 16 alerting rules
  • priority signing queues with configurable dual semaphore
  • supervise background tasks with panic counter
  • verify client IP for audit log via trusted-proxy CIDRs
  • unified CIDR-based access control for ceremony and token-gated routes
  • wire SSH-style TOFU attestation for operator aTLS client
  • enforce attestation document freshness in operator CLI
  • constant-time dummy decrypt to eliminate operator-existence oracle
  • split /upcheck (liveness) from /healthcheck (readiness)
  • point readinessProbe at /healthcheck + wire probes for enclave mode
  • audit findings
  • audit findings
  • passphrase entropy + generate flag (SPEC-OPREG-001)
  • cap passphrase at MAX_PASSPHRASE_BYTES before zxcvbn
  • update deps
  • add vsock log-forwarder writer + telemetry wiring
  • activate vsock log forwarder in entrypoint + chart
  • expose log-forward dropped-events metric always
  • eliminate hot-path policy cloning in evaluator
  • wrap unauthenticated_policy in Arc for zero-cost clones
  • single-allocation parse via direct byte iteration
  • parallelize KMS Shamir decrypts at boot
  • eliminate 1 alloc and 1 DashMap lookup per sign() request
  • downgrade EthereumSigner::sign span to debug level
  • drop redundant passphrase clone before encrypt_share_blocking
  • extract create_and_load_signer shared helper
  • extract try_tee_unseal from boot_full_dynamodb
  • delegate initialize_signer_with_dynamodb to create_and_load_signer
  • extract resolve_boot_state unifying Full and StateOnly dispatch
  • unify boot sequence into single boot() dispatcher
  • extract KmsError and collapse crypto mirrors in DynamoDbKeystoreError
  • remove InvalidKeygenRequest from DynamoDbKeystoreError
  • extract is_enclave_enabled and create_kms_pool to reduce cfg gate noise in run()
  • move KeygenFailed and BackupEncryptionFailed out of DynamoDbKeystoreError
  • share DynamoDB client with anti-slashing backend and deduplicate scan-delete loops
  • extract GVR CAS retry constants and fix #![allow] convention
  • delete legacy.rs and mod.rs, clean break
  • deduplicate management token generation
  • consolidate test helpers into common/mod.rs (M6)
  • extract apply_load_shed_stack; wrap auth routes in backpressure
  • dedupe dynamo_unavailable, share rows, MASTER_KEY reads
  • single source of truth for SealStatus → &str
  • merge router states + extract build_token helper
  • extract ceremony helpers shared by unseal + generate-root-token
  • checked TTL arithmetic + drop redundant CryptoError wrap
  • consolidate default_* helpers into defaults.rs
  • unify rule matchers via MatchContext enum
  • dedupe dynamo helpers (C2+C3+C4/C5)
  • fail-closed parity for sqlite gvr cache + dynamodb cancel handlers
  • rename try_advance_from_kms_unsealed (S2)
  • wrap instance_secret in Zeroizing (S2)
  • centralize random_alphanumeric + random_32_bytes (D2)
  • shared validate_identifier + close 7 validation gaps (D3)
  • unify token accessor generation + bump management entropy
  • shared unix_now + dynamodb keystore clock-skew alignment (D4)
  • make remove_key best-effort semantics explicit (D5)
  • replace inline crate:: paths with use imports (ST1 Category B)
  • resolve metrics crate name clash via selective macro imports (ST1 Category A)
  • add module-root re-exports + close test-file inline paths (ST3)
  • dedupe TCP and vsock accept loops via spawn_tls_connection helper
  • dedupe master-key guard lookup across three crypto sites (DUP2)
  • close DUP3-6 audit findings (signer extractors, require_store, spawn_blocking, blob extraction)
  • delete PolicyFields shim — unauthenticated_policy uses PolicyRule directly
  • normalize default function naming + poll→refresh rename
  • normalize all 18 default function names to match config paths
  • extract mutation lock helper to eliminate 8-site duplication
  • extract StateWatcher into signer_state::watcher module
  • extract router construction into http::router module
  • rename signer init helpers for clarity
  • extract boot sequence into dedicated module
  • switch DynamoDB GVR cache to OnceLock
  • compute key counts from DashMap instead of separate atomics
  • AppState.trusted_proxy_cidrs uses Arc<[IpNet]>
  • zero-alloc ceremony layer + remove Clone from AuthContext
  • migrate from rustls-pemfile to rustls-pki-types PemObject
  • single-copy HMAC secret with type-level seal guard
  • supervise TLS rotation, enclave egress, and metrics tasks
  • typed EgressService enum for supervised task labels
  • async file I/O in reload task, eliminate double-read
  • share parse_cert_config between startup + reload, parallel reads
  • align operator attestation max-age default with server config
  • decouple share-row not-found from auth-failed
  • version Argon2 parameters per share row
  • reject test-utils feature in release builds
  • align admission cap with concurrency + bump defaults for 10k validators
  • configurable pool sizes for Postgres + DynamoDB backends
  • promote retry_with_backoff to src/util/retry.rs
  • extract build_graceful_shutdown helper (audit M16)
  • MasterKeyRow.mode becomes a typed MasterKeyMode enum (M12)
  • extract require_* state-gate helpers + close state-variant leak (M17)
  • split http/chamber/import.rs into focused submodules (audit M18)
  • delete 7 vestigial typed transition helpers, centralize on validate_transition_to (audit L9 pt.2)
  • remove last 4 typed transition helpers; single-source state machine via validate_transition_to (audit L9 pt.3)
  • gate Category-A test-only pub fns behind cfg(test-utils) (audit L9 pt.4a)
  • delete compute_spki_hash + is_priority_operation; inline callers (audit L9 pt.4b)
  • delete parse_v2_preamble pub fn; move logic into a test-mod helper (audit L9 pt.4c)
  • wire validate_interchange into prod + gate remaining test fixtures (audit L9 pt.4d)
  • extract test_read/write_state fixtures + validate_and_import_json helper (simplify)
  • decrypt_share_blocking takes &EncryptedShare
  • migrate 8 enums to strum derives
  • model passphrase as Option in register/add-credential
  • extract shared integration-test harness base
  • drop misread clippy::redundant_pub_crate suppressions
  • drop legacy-share compat wrapper + test scenario
  • move passphrase-policy constants to validation
  • split into tcp-vsock / vsock-stdout subcommands
  • fix test compilation after auth migration
  • add auth API integration tests with LocalStack
  • add 27 unit tests for coverage gaps (errors, config, lib)
  • add 3 integration tests for interchange export/import wiring
  • add priority semaphore routing integration tests
  • require cargo nextest for env-mutating tests
  • close help-text drift; cover all top-level CLI defaults
  • fix silent coverage erosion in Scenario N
  • production integration tests + just recipe
  • direct tests for every CmsError variant
  • drop duplicate Score::Four fixture pre-flight
  • fail loudly on subscriber conflict
  • drop redundant install() call
  • drop stale block_on pitfall comment
  • pin identifier-before-passphrase validation order
  • add TRACE-level canary for leak-detection coverage
  • add auth evaluation, keystore decryption, and AES-GCM benchmarks
  • add raw key decode benchmark (hex → BLS keypair, no KDF)
  • raise bench_concurrent_signing cap to 3000 (audit M15)
  • lower auth_refresh_interval_seconds default from 30s to 5s
  • extend histogram buckets to 2.5s for tail visibility
  • add reason strings to #[expect(clippy::redundant_clone)] in tests
  • replace inline crate:: paths with use imports (AGENTS.md §230)
  • use imported Duration instead of inline std::time path
  • critical findings
  • remaining findings
  • document PostgreSQL egress configuration
  • clarify hostname matching requirement between Helm and connection string
  • add postgres egress port to EnclaveEgressPorts
  • add PG hostname extraction from antislashing config
  • add enclave+postgres startup validation
  • refactor spawn_forwarder for decoupled TCP/VSOCK ports
  • wire PG egress in server init block
  • add postgres egress port to enclave deployment
  • add conditional PG vsock-proxy to enclave-entrypoint
  • update deps
  • update docs
  • build main
  • build main
  • add DynamoDB table and KMS encryption outputs to examples
  • more decoupling
  • add missing IAM permissions
  • state transition and various bugs
  • signer mutex hotpath
  • audit moai
  • move aTLS docs to security section, update ARCHITECTURE.md
  • security review fixes — structured SPKI binding, TOCTOU, atomic save
  • security review fixes + test cleanup
  • exclude NSM hardware test from coverage-full
  • improve get_n error message to distinguish missing vs unparsable
  • use alternate Display format for error chain preservation
  • rename metric to containment_dynamodb_keystore_errors_total
  • gen docs feature flag
  • add tokio-rustls, arc-swap, rcgen, x509-parser for aTLS
  • add aTLS configuration reference, operator guide, architecture
  • split state backend
  • add self-signed cert generation with attestation ext
  • add TLS listener module with aTLS cert generation and tokio-rustls accept loop
  • wire TLS listener into server (file + disabled modes)
  • add attestation-bound cert generation for aTLS mode
  • wire aTLS mode into server with mock attestation
  • add custom ServerCertVerifier for attestation verification
  • add TOFU measurement pinning for aTLS enclaves
  • add cert rotation background task (aTLS + file modes)
  • wire TLS client into operator CLI
  • add NitroTlsAttestation implementation
  • wire TLS metrics into server
  • add TLS mode to Helm chart
  • implement COSE_Sign1 attestation document parsing
  • add configurable max_connections with semaphore (default 512)
  • parallelize GSI queries across all status+shard pairs
  • upgrade rcgen 0.14 + x509-parser 0.18, fix audit issues
  • consolidate OID constant, replace inline metric paths
  • extract run_dual_listener, move scoped imports to top
  • move MASTER_KEY_PK constants to signer state module
  • move master key reconstruction from aws_keystore to top-level module
  • split AwsKeystoreError — extract seal-specific variants to MasterKeyError
  • DynamoDbKeyStore receives key bytes instead of MasterKeyProvider
  • flip validation — key source requires signer state, not reverse
  • fix integration tests for decouple-signer-state error types
  • break circular dependency between master_key and aws_keystore
  • add DynamoDB attribute extraction helpers (get_s/get_b/get_n)
  • move ApiScope + SigningOperation to domain-level auth_types module
  • move dynamo ops + MasterKeyRow to state_backend module
  • extract sealed storage builders + setup token from server.rs
  • replace ActiveMasterKey Mutex with SharedMasterKey ArcSwap
  • rename aws_keystore module to dynamodb + consolidate config
  • add AccumulatedShares type alias for readability
  • add TLS test infrastructure and integration tests
  • add aTLS end-to-end integration tests
  • add 27 integration tests for seal/unseal error paths
  • complete lifecycle test and strengthen rotation assertion
  • trigger release
  • trigger release
  • trigger release
  • enclave and unseal bug
  • confirm password for operator
  • cli and refactor
  • auto advance state
  • capabilities and logging
  • fix cli async reqwest
  • transition to kms unseal without restart and use master key hmac
  • trigger release
  • use stored threshold from DynamoDB during reconstruction (#57)
  • enable registration during rotation + multi-credential rotation
  • move Argon2id encryption to spawn_blocking in register_handler
  • convert remaining allow(clippy) to expect(clippy)
  • fix AES-GCM AAD mismatch in master key encrypt/decrypt
  • correct PCR_LEN from 32 to 48 bytes (SHA-384)
  • use EthereumSigner re-export instead of redundant signer::signer path
  • add operator name validation to prevent partition key injection
  • add YubiKey setup guide
  • update seal/unseal docs for multi-credential support
  • regenerate AGENTS.md files after refactors
  • replace built-in hyper metrics server with Axum and add HTTP request metrics
  • add AWS Nitro Enclave support (#56)
  • deep review (#58)
  • vault-style unseal, API-first key management & security hardening (#59)
  • pre-release consolidation (#62)
  • add credential_id field to RegisterRequest and RegisterResponse
  • add challenge_response dependency and yubikey module
  • extend DynamoDB ops for multi-credential storage
  • add —yubikey and —yubikey-slot flags to operator commands
  • support multi-credential registration
  • add credential management endpoints
  • implement YubiKey HMAC-SHA1 challenge-response module
  • update unseal_handler to try all credentials
  • wire YubiKey module into operator passphrase flow
  • YubiKey HMAC-SHA1 + multi-credential operator support
  • migrate #[allow(clippy::…)] to #[expect(clippy::…)]
  • remove duplicate encrypt_master_key, use canonical master_key::encrypt_master_key
  • return Zeroizing<Vec> from AES-GCM encrypt/decrypt
  • centralize crypto functions in crypto.rs
  • deduplicate Shamir/HMAC into crypto.rs and fix zeroization gaps
  • split seal.rs into submodules (models, dynamo, register, unseal, rotate)
  • replace use super::* with explicit imports in seal submodules
  • move sealed_storage_nitro into sealed_storage/nitro submodule
  • rename seal.rs to signer_state.rs for clarity
  • move Shamir tests from master_key.rs to crypto.rs
  • extract scan_credential_ids_by_prefix to deduplicate DynamoDB scan logic
  • replace inline crate::sealed_storage::nitro path with use import
  • replace inline EthereumSigner paths with use import in import.rs
  • extract dynamo_unavailable helper to deduplicate 20 error mappings
  • fix remaining inline crate paths and use AHashMap for application data
  • replace inline crate:: paths with use imports in production code
  • replace inline crate::config paths with use imports in auth.rs
  • add multi-credential seal/unseal integration tests
  • add credential management integration tests
  • run cargo +nightly fmt to fix import grouping across 22 files
  • rename val to value in shamir_combine_bytes
  • move per-function test imports to module level in import.rs
  • fmt
  • use per-variant log levels in error handler
  • set health check TraceLayer to TRACE level
  • migrate to vergen 9 API with vergen-git2
  • migrate to OpenTelemetry 0.31 API
  • resolve lighthouse_types and rusqlite 0.38 breaking changes
  • use cast_signed/cast_unsigned for clippy compliance
  • pre-release hardening — constant-time auth, error mapping, graceful shutdown
  • deny unsafe_code, disable test retries, apply nightly fmt
  • harden security, fix metrics port, add terminationGracePeriodSeconds
  • flatten containmentChamber wrapper from values.yaml
  • wire fork_schema and signing request oneOf into spec
  • add servers field and clean handler summaries
  • correct signing_auth format in README and remove stale screenshots
  • remove handler doc leaks and orphaned schemas
  • remove incorrect .trim() from base64 Authorization header decode
  • preserve error chain in From implementations
  • add 5s timeout to health check handler
  • sanitize error responses + standardize JSON format
  • upgrade OTLP failure log from warn to error
  • update classic dashboard metric names to containment_ prefix and add missing panels
  • update kubernetes dashboard metric names to containment_ prefix and add missing panels
  • use correct error variant for semaphore closure and missing config
  • add debug logging to noop backend
  • validate stored GVR length in Postgres and name advisory lock constants
  • make SQLite permission failure fatal and validate stored GVR length
  • add jitter to DynamoDB GVR retry backoff
  • validate stored GVR length in Postgres and name advisory lock constants
  • validate allowed/denied operations mutual exclusivity and document CLI flag semantics
  • convert list_yaml_files to sync and follow symlinks
  • use NonZeroUsize for concurrency fields to prevent zero-value bugs
  • make TokenHash pub(crate) to satisfy clippy visibility lint
  • update test to reflect PubkeyHex accepting pubkeys without 0x prefix
  • replace string-based ConditionalCheckFailed detection with SDK error types
  • make create_isolated_table idempotent for re-runs (#22)
  • harden DynamoDB backend against data corruption and non-atomic reads (#24)
  • comprehensive security remediation (#28)
  • flaky test
  • remove cache and deadcode
  • remove dead code
  • remove more dead code
  • better postgres URL parsing
  • exhaustive match
  • hash comparison
  • flaky test
  • better error chain on AWS SDK
  • better logging
  • make dynamodb reload more efficient
  • decrease startup delay
  • add warning when no backup encryptor
  • dashboard should not sum
  • aggregate and proof based on lighthouse types
  • update lighthouse to v8.1.2 (#48)
  • action for crane
  • conditional cpu flag for different arch
  • add hmac and sha2, move rand to dependencies
  • use nightly rustfmt in fmt and ci recipes
  • add cargo-deny supply chain audit job
  • simplify and align workflows with justfile (#16)
  • add doc comments and #[must_use] to public functions
  • scaffold Astro Starlight documentation site
  • add website project foundation
  • add Docker and nginx preview server
  • add site assets, styles and content config
  • migrate existing documentation to Starlight
  • add getting started guides
  • add feature guides, configuration reference and deployment guides
  • add dormant GitHub Pages workflow and update README
  • add hierarchical AGENTS.md knowledge base
  • fix outdated recipe names, CLI flags, and config format
  • remove developer-only pages from documentation site
  • clean Rust-specific language and fix accuracy issues in operator pages
  • add operator guides for key formats, security, troubleshooting, upgrade, and validator clients
  • remove signing behavior matrix, add metrics reference, unify deployment section, fix Helm values
  • add advisory lock safety comment and sign() architecture note
  • update metric references to containment_ prefix
  • update AppState references to remove stale generic parameter
  • documentation overhaul — restructure, fix, and automate (#39)
  • refactor pg errors
  • aurora tls
  • aurora tls
  • aurora tls
  • add force_ipv4 flag to gate IPv4 DNS resolution
  • add truncate_pubkey utility and Key Manager API startup log
  • add auth rejection logging
  • add DynamoDB anti-slashing init logging
  • verify antislashing backend health and fix test
  • comprehensive metrics audit — new metrics, operation labels, backend instrumentation, build info
  • add classic Grafana dashboard with instance selector
  • add Kubernetes Grafana dashboard with namespace/pod selectors
  • prepare release
  • prepare release
  • prepare release
  • prepare release
  • prepare release
  • prepare release
  • add unauthenticated_policy and update keystore import return type
  • signing auth hardening — HMAC hashing, unauthenticated_policy, validation, and exhaustive matrix tests
  • remove multi protocol support
  • refactor to use ahash
  • security review
  • security review
  • add utoipa dependency and gen-openapi bin target
  • add ToSchema derives to project-owned types
  • add manual schemas for external Lighthouse types
  • annotate HTTP handlers with utoipa::path
  • add ApiDoc and gen-openapi binary
  • add gen-openapi justfile recipe
  • add Scalar API reference page to docs site
  • remove hand-written API reference, update links
  • add named variant schemas with discriminator mapping and examples
  • add custom histogram buckets for signing + antislashing
  • add W3C Trace Context propagator + extraction middleware
  • add containment_keys_load_errors gauge for startup failures
  • add metrics and update dashboard
  • small fixes
  • small fixes
  • use zeroize string for auth token
  • add HexSignature type safety
  • create PubkeyHex newtype and update KeyStore key type
  • update EthereumSigner to use PubkeyHex
  • update HTTP layer to use PubkeyHex
  • complete PubkeyHex newtype integration across all call sites
  • add new tests
  • add new tests
  • update cargo
  • DynamoDB + KMS key management with Shamir secret sharing (#20)
  • upgrade DynamoDB backend to Hybrid mode (#23)
  • various fixes (#27)
  • make --network flag functional (Eth2Network enum, GVR guard, network-aware keygen) (#30)
  • unified auth policy engine with scope-based access control (#31)
  • release readiness — config defaults, API redesign, AWS docs, Helm docs (#32)
  • chamber API redesign — State+FromRef, /chamber/keys namespace, KeySource, writable config (#33)
  • enhance config parsing
  • rework tracelayer
  • simplify policy handling
  • test auth fallback
  • more tests
  • more sensible and safe defaults
  • holistic Prometheus metrics overhaul — label-based unification + full error path coverage (#37)
  • add more integration tests
  • cleanup test
  • cleanup test
  • cleanup test
  • update chart netpol
  • better response format for import
  • update grafana dashboard
  • rework dynamodb antislashing logic
  • rework dynamodb antislashing logic
  • update logging config
  • website visual overhaul + docs restructure (#44)
  • Chamber API superset — KeySource::Memory, KeyStatus, type unification, PATCH endpoint (#45)
  • add cors support
  • align naming across the project (#47)
  • add reproducible build (#50)
  • eliminate double-allocation in signature hex encoding
  • eliminate double-allocation in signature hex encoding
  • cache list_keys result to avoid per-request DashMap iteration
  • replace RwLock cache with ArcSwap for lock-free list_keys reads
  • skip cache rebuild during bulk key loading, rebuild once at end
  • borrow static slashing protection instead of cloning
  • use into_iter() instead of iter().clone() in import handler
  • remove unnecessary PublicKey clone in keygen deposit data
  • audit log messages, levels, and pubkey truncation
  • revert pubkey truncation and delete utility
  • rename sign_owned to sign
  • remove dead Deposit variant and unused PublicKeyBytes import
  • rename project from vortessence/remote-signer-rs to containment-chamber
  • remove AppState generic, use concrete Arc
  • merge KeyStore dual DashMaps into single map
  • eliminate provider clone, deduplicate subscriber init, improve OTLP error message
  • extract helper functions to reduce main() complexity
  • remove unused AntiSlashing trait and NoopAntiSlashing
  • introduce TokenHash newtype for HMAC policy map keys
  • remove phantom EthSpec generic from SigningRequestOwned
  • replace SlashingViolation(String) with typed SlashingViolationType enum
  • encapsulate hex encoding in HexSignature::from_bytes()
  • split DynamoDbUnavailable into specific error variants
  • move EncryptedBlsSk to keys.rs as private implementation detail
  • replace DynRecipient trait object with concrete x25519::Recipient
  • add Display impl for ValidatorStatus, remove status_to_str()
  • use NonZeroUsize/NonZeroU64 for config fields that must be positive
  • replace stringly-typed import status with ImportStatus enum
  • use anyhow::Context instead of anyhow::anyhow! in backup.rs
  • code cleanup — design pattern consolidation & deduplication (#25)
  • migrate CLI to Figment Provider pattern with 37 structured flags (#29)
  • standardize on ahash::AHashSet across codebase for consistency (#34)
  • standardize error handling on thiserror across library code (#35)
  • idiomatic Rust quality improvements (#36)
  • idiomatic repository structure cleanup (#38)
  • post-Chamber API code quality cleanup (#46)
  • add error-path loading tests
  • add HTTP-level slashing edge case tests
  • add graceful shutdown drain test
  • update sign tests to reflect PubkeyHex format validation (400 vs 404)
  • replace committed keystore fixtures with runtime generation (#17)
  • improve test coverage from 79% to 82% (#21)
  • add backpressure and load shedding integration tests (#26)
  • add isolated BLS, concurrent, and scaling benchmarks
  • zeroize imported keystore passwords
  • zeroize Key Manager API token in memory
  • sanitize import error messages in API responses
  • zeroize FileRaw private_key field
  • fix zizmor findings (#41)
  • add tls to postgres
  • rename chart to vortessence and restructure values
  • adapt templates for vortessence binary
  • remove migration hook, update README, finalize chart
  • Vortessence v0.1.0-rc.0 — Ethereum remote signer
  • initial release
  • fix naming in logs
  • initial release