Scores reflect evidence, not the requested target
Provisional engineering judgment. Six equally weighted categories and equally weighted repositories; joint mean is a planning indicator, not a deployability gate. Historical SDK 9.3 had narrower scope. New SDK reassessment includes the selected provider boundary. No point changes imply statistical precision.
12 P1 blockers and 6 P2 findings remain open. P1 includes implementation defects and explicitly identified release-qualification gaps. No P0 was identified; this is not proof none exists. P1 blocks the declared production-ready claim; P2 must be resolved or explicitly bounded before a 9.8 acceptance review.
Arithmetic: SDK 53.1 / 6 = 8.85; SaaS 42.5 / 6 = 7.0833; joint 95.6 / 12 = 7.9667. Display uses one-decimal half-up rounding. Earlier SDK 9.3 is preserved as a narrower historical assessment, not silently rewritten.
Acceptance rule: Zero open P0/P1; both repository means >9.7 unrounded; critical category floors >=9.7; immutable pair and actual declared deployment/custody/recovery gates pass. A high average cannot waive a blocker.
Rubric: 9.8–10 requires qualified declared production behavior and independent operational evidence; 9.0–9.7 has strong engineering with remaining qualification limits; 7.0–8.9 has material implementation/assurance gaps; below 7 has core reliability or release blockers. These are review judgments, not statistical measurements.
Full score record
Architecture and trust boundaries
Browser / public protocols
React UI, claims, token exchange and verification. JWT, capability and proof boundaries must stay distinct.
SaaS application
Spring security, tenant authorization, issuance, database transactions, scheduled workers and usage outbox.
External dependencies
PostgreSQL, Keycloak, Accountly and SDK-backed KMS/DID/status-list operations. Each needs its own failure and recovery contract.
The modular SDK and SaaS service separation are useful. The main risks lie where boundaries meet: proxy transactions versus scheduled calls, a local database commit versus a remote billing effect, a driver’s wire representation versus Kotlin types, and a profile name versus actual durable custody.
Controls worth retaining
The reviewed code includes issuer/audience validation, default-deny route rules, tenant ownership checks, atomic token consumption, unique webhook deduplication, failed-webhook recovery storage, bounded local rate-limit state and bulk credential expiry. SDK configuration parsing, ledger audits, hosted test manifests and host telemetry provide substantial prior evidence. None substitutes for the missing integration acceptance tests.
Performance and data priorities
Measure remote calls inside broad transactions, sequential usage batches, scheduler lease expiry, shared-limiter hot rows/key churn and user-sync pagination first. Do not infer production throughput from the earlier one-minute component load test. Recovery must include external billing effects, consumed authorizations and key bindings before admission resumes.
Ordered path to a defensible 9.8
All 46 tasks are open. S = usually less than one engineer-day; M = roughly 1–3 days; L = multi-day/integration work. These are planning estimates, not delivery commitments. Resource access and soak duration can dominate elapsed time. A task closes only when its acceptance evidence passes on the candidate pair.
Wave 0 · Scope and candidate identity
T01 · Declare the initial production support envelope
Joint · Tech lead · effort S · depends on none · findings R16, R17Done when: Record supported provider, algorithms, wallet flows, deployment platform, PostgreSQL version, tenant scale and excluded experimental operations.
T02 · Select and bind an immutable candidate pair
Joint · Release engineering · effort M · depends on T01 · findings R11Done when: Both clean candidate SHAs, reviewed source manifest and source verifier agree; preserve existing local work.
Wave 1 · Fix release-blocking behavior
T03 · Correct Vault structured response parsing
SDK · KMS maintainers · effort M · depends on T01 · findings R15Done when: Faithful nested driver fixtures cover create/get, missing keys, version selection and malformed types.
T04 · Qualify the selected Vault lifecycle
SDK · KMS maintainers · effort L · depends on T03 · findings R15, R16Done when: Isolated provider create/sign/independent verification/restart/rotation passes; no orphaned retry keys.
T05 · Reject incompatible production KMS profiles
SaaS · Platform backend · effort S · depends on none · findings R06Done when: Truth table and actual Spring startup reject prod+local, staging+local and unintended ephemeral configurations.
T06 · Make KMS options effective and validated
SaaS · Platform backend · effort M · depends on T05 · findings R07Done when: Non-default endpoint/namespace is used; unknown/unconsumed options fail startup; diagnostics redact secrets.
T07 · Establish real outbox transaction boundaries
SaaS · Billing backend · effort M · depends on none · findings R01, R03Done when: Spring-managed scheduler/proxy tests demonstrate short atomic claim/finalize transactions.
T08 · Implement durable bounded delivery leases
SaaS · Billing backend · effort L · depends on T07 · findings R02Done when: Two-worker, expired-lease and worker-crash tests preserve claim ownership with fencing tokens and bounded batch runtime.
T09 · Separate transient retries from poison events
SaaS · Billing backend · effort M · depends on T08 · findings R02Done when: Connection outage beyond ten ticks recovers; permanent rejection enters an audited terminal queue; retry delay and Retry-After are bounded.
T10 · Prove remote idempotency and authenticated redrive
SaaS · Billing backend · effort M · depends on T09 · findings R02Done when: Provider commit/response-loss and operator redrive produce exactly one remote charge/effect per event key.
T11 · Enforce endpoint-specific limiter failure policy
SaaS · Security backend · effort M · depends on none · findings R04Done when: Counter-only outage causes sensitive mutation rejection and bounded approved read fallback; no blanket allow path.
T12 · Use authoritative time and bounded shared counters
SaaS · Security backend · effort M · depends on T11 · findings R05Done when: Skewed caller clocks cannot reset budgets; counters saturate and TTL/pool limits survive hot-key and churn load.
T13 · Remove capability values from telemetry
SaaS · Observability · effort M · depends on none · findings R08Done when: Canary path tokens are absent from logs, spans, access logs and error cases while correlation remains intact.
T14 · Make readiness verify dependency function
SaaS · Platform backend · effort S · depends on none · findings R09Done when: 401/404/429/500, malformed discovery and issuer mismatch are not UP; liveness remains independent.
T15 · Repair and test the chosen deployment recipe
SaaS · Deployment engineering · effort M · depends on T01, T46 · findings R10Done when: One port/JDBC/issuer contract builds and boots through its actual proxy; missing secrets fail safely.
T16 · Replace stale outbox mocks with contract coverage
SaaS · Test engineering · effort M · depends on T07, T08 · findings R03Done when: Current unit cases pass and a regression removing scheduler transaction/lease correctness is detected.
T46 · Remove the Spring request-context bean collision
SaaS · Platform backend · effort S · depends on none · findings R18Done when: Explicitly named telemetry filter coexists with Spring MVC, overriding stays disabled, smoke startup and affected integration cases pass.
Wave 2 · Data, custody and isolation
T17 · Page and checkpoint user synchronization
SaaS · Identity backend · effort M · depends on none · findings R14Done when: Multi-page provider fixtures plus a failed page and restart demonstrate complete, idempotent recovery.
T18 · Bound synchronization transactions
SaaS · Identity backend · effort M · depends on T17 · findings R14Done when: Slow identity HTTP does not hold a DB transaction; one failed persistence unit does not roll back unrelated successful units.
T19 · Enforce provider policy at host startup
Joint · Security architecture · effort M · depends on T01, T04, T06 · findings R16Done when: The declared profile rejects unknown/stub/disallowed experimental providers before opening resources; no LEGACY bypass in production entry points.
T20 · Exercise signing denial and outage boundaries
Joint · Custody operations · effort L · depends on T19 · findings R16Done when: Wrong tenant/key/algorithm, expired and replayed proofs fail before provider signing; outage does not select a fallback key.
T21 · Exercise authorized recovery and replacement
Joint · Custody operations · effort L · depends on T20 · findings R16Done when: Restart/access recovery preserve identity; replacement has independent authorization, revoked old binding and durable audit. Physical-device tests apply only if included in T01.
T22 · Persist independently trusted recovery checkpoints
Joint · Data engineering · effort M · depends on T01 · findings R17Done when: Checkpoint authenticity and freshness survive DB compromise/restore; application DB alone cannot rewrite the trust anchor.
T23 · Fence admission during restore and reconciliation
Joint · Data engineering · effort L · depends on T22 · findings R17Done when: No new authorization is admitted until ledger/checkpoint/external journal verification completes; failure remains fenced.
T24 · Reconcile external effects after restore
Joint · Billing and data · effort L · depends on T10, T23 · findings R17Done when: Authenticated journal and local outbox reconcile commit/ack-loss and stale restore without duplicate effects or reused authorization.
T25 · Qualify production-shaped backup and recovery
Joint · SRE · effort L · depends on T21, T24 · findings R17Done when: Record agreed RPO/RTO, dataset size and timings; missing WAL/corrupt backup/stale checkpoint fail closed; recovered service resumes safely.
T26 · Qualify schema upgrades and rollback compatibility
SaaS · Data engineering · effort M · depends on T15 · findings R10, R12Done when: Upgrade from two declared supported schema versions under writes; old/new application compatibility and interrupted migration recovery are explicit.
T27 · Complete cross-tenant negative authorization matrix
Joint · Security test engineering · effort L · depends on T01 · findings R16Done when: Every declared public/admin/tenant mutation has wrong-tenant, wrong-role, expired, replay and identifier-substitution outcomes tied to source and tests.
T28 · Qualify outbound network restrictions
Joint · Security engineering · effort M · depends on T01 · findings qualificationDone when: Declared DID, webhook and provider clients reject disallowed destinations/redirects and bound size/time; tests use actual host integration.
Wave 3 · Operational and release qualification
T29 · Verify distributed traces through billing and SDK calls
SaaS · Observability · effort M · depends on T07, T13, T46 · findings qualificationDone when: A real incoming request produces correlated outgoing provider spans with trace propagation and authenticated export; prove manual RestClient construction receives instrumentation.
T30 · Add queue, limiter and recovery signals
SaaS · Observability · effort M · depends on T09, T11, T23 · findings R02, R04, R17Done when: Oldest outbox age, leased/failed rows, limiter degradation, recovery fence and reconciliation failures have bounded labels and verified alerts.
T31 · Define measurable service objectives and alert ownership
Joint · SRE · effort M · depends on T01, T30 · findings qualificationDone when: Availability, latency, signing and delivery objectives have error budgets, accountable owners and tested notification acknowledgement.
T32 · Qualify telemetry privacy and retention
Joint · SRE and security · effort M · depends on T13, T29 · findings R08Done when: Access controls and retention are enforced in the selected backend; sensitive canaries never reach storage; cardinality/load limits are measured.
T33 · Run representative multi-node soak and overload tests
Joint · Performance engineering · effort L · depends on T08, T12, T18, T31 · findings R02, R05, R14Done when: Agree workload first; run proposed 72-hour steady/peak soak and burst/fault phases, tracking p99, saturation, queue age, DB growth and recovery. This is a target, not a completed measurement.
T34 · Record scale ceilings and backpressure policy
Joint · Performance engineering · effort M · depends on T33 · findings qualificationDone when: Document tested tenant/data/request limits, capacity headroom and bounded degradation, including KMS/IdP/billing outages.
T35 · Define risk-based coverage and mutation gates
Joint · Test engineering · effort M · depends on T16, T20, T24, T27 · findings R13Done when: Critical auth/custody/claim/recovery branches have explicit agreed floors (proposed 90% line, 85% branch) and meaningful mutation checks; exceptions are reviewed, not hidden.
T36 · Make browser tests deterministic and enforce coverage
SaaS · Frontend engineering · effort M · depends on none · findings R13Done when: Classify current network warnings, add missing fixtures and fail unexpected requests without the prior worker serialization problem; CI runs coverage with agreed floors.
T37 · Bind test discovery and skips to release evidence
Joint · Test engineering · effort M · depends on T02, T35, T36 · findings R11, R13Done when: Test IDs/counts, failures, documented optional skips and required provider profiles are archived and checked against the immutable candidate pair.
T38 · Build the runtime image in CI
SaaS · Release engineering · effort M · depends on T02, T15 · findings R12Done when: bootJar, frontend assets and OCI image are built from the candidate pair; production-profile startup and smoke tests run against that image.
T39 · Pin inputs and generate SBOM/provenance
SaaS · Supply-chain security · effort M · depends on T38 · findings R12Done when: Actions/base image are immutable; dependency/image scans enforce a defined policy; SBOM and provenance identify both repository commits.
T40 · Verify artifact identity during promotion
Joint · Release engineering · effort M · depends on T39 · findings R11, R12Done when: A modified image, wrong source pair or untrusted attestation is rejected; the tested digest is the promoted digest.
T41 · Exercise canary rollout and rollback
SaaS · Release engineering · effort L · depends on T26, T31, T40 · findings R12Done when: Promote a qualified digest with explicit health/error-budget gates and demonstrate rollback with the supported schema compatibility window.
Wave 4 · Independent acceptance and rescore
T42 · Publish one production support and operations contract
Joint · Documentation owners · effort M · depends on T25, T34, T41 · findings R16, R17Done when: Setup, configuration precedence, limits, provider scope, backup, rotation, incident and rollback instructions match tested commands and evidence.
T43 · Run an operator drill from the documentation
Joint · SRE · effort M · depends on T42 · findings qualificationDone when: An operator other than the author executes restore, custody outage, stuck-delivery redrive and rollback using only published runbooks; gaps are fixed.
T44 · Re-review closure evidence and remaining risks
Joint · Independent reviewer · effort M · depends on T37, T43 · findings qualificationDone when: All P1 findings are closed by behavior tests, scope exclusions are explicit, and evidence is tied to the exact released candidate pair.
T45 · Recalculate scores only after acceptance
Joint · Review owner · effort S · depends on T44 · findings qualificationDone when: Each repository is above 9.7 unrounded, every critical category is at least 9.7, and production acceptance gates pass. Target 9.8; no points are awarded simply for adding documentation/tests.