{
 "schema": "cain42.defect_ledger.v1",
 "defects": [
  {
   "component": "evaluation fabric",
   "defect": "Contamination scan never awaited its HTTP calls: the model was never queried and every scan passed.",
   "regression_test": "test_contaminated_model_is_detected"
  },
  {
   "component": "evaluation fabric",
   "defect": "Evaluation report crashed on a missing import; contaminated or mostly-ERROR agents could still pass.",
   "regression_test": "test_contaminated_benchmark_cannot_yield_pass"
  },
  {
   "component": "evaluation fabric",
   "defect": "The contamination endpoint fetched caller-supplied URLs (SSRF); now public http(s) only.",
   "regression_test": "test_api_rejects_ssrf_targets"
  },
  {
   "component": "benchmark suite",
   "defect": "Hard-coded 'sustained load completed, 0.0% errors' result; 0 ms latency reported for no samples; wrong percentiles.",
   "regression_test": "test_no_duration_test_claims_completed_unless_it_ran_that_long"
  },
  {
   "component": "predictive trust envelope",
   "defect": "Envelope bypass via NaN, empty entry or bare prefix; expiry ignored; hard-coded 'actual' risk; no envelope treated as in-bounds.",
   "regression_test": "test_non_finite_measurements_are_outside_envelope"
  },
  {
   "component": "daily synchronizer",
   "defect": "DNS check reported 'points here' when both lookups failed (empty string equals empty string).",
   "regression_test": "test_dns_points_here_fails_closed"
  },
  {
   "component": "execution boundary",
   "defect": "A parameter-tampered attempt burned the token's nonce; the legitimate call was then rejected as a replay.",
   "regression_test": "test_tampered_attempt_does_not_burn_the_nonce"
  },
  {
   "component": "temporal trust",
   "defect": "Trust recovery was unpaced: 100 positive events in 100 s took every dimension from 0.20 to 0.91.",
   "regression_test": "test_rapid_positive_events_cannot_rebuild_trust"
  },
  {
   "component": "MCP proxy",
   "defect": "A principal could self-sign a capability for any tool its identity was never granted.",
   "regression_test": "test_self_issued_capability_for_ungranted_tool_is_denied"
  },
  {
   "component": "security-context verifier",
   "defect": "Fail-open: only 6 named checks could deny, so a read/report context was allowed for delete/payroll_db under a different intent.",
   "regression_test": "test_the_exact_bypass_read_report_vs_delete_payroll"
  },
  {
   "component": "security-context verifier",
   "defect": "The audience field was stored but never verified.",
   "regression_test": "test_wrong_audience_denies"
  },
  {
   "component": "adversarial worker",
   "defect": "Reported RESILIENT while attack types had no handler; now INCOMPLETE unless every attack is conclusive.",
   "regression_test": "test_10_adversarial_worker_status_and_trigger"
  },
  {
   "component": "attack handlers",
   "defect": "Context handlers verified a test-local stand-in that could not fail, and a replay branch recorded the nonce before checking it. Rebuilt against the production verifier, which exposed the two verifier bugs above.",
   "regression_test": "test_production_verifier_blocks_every_context_attack"
  },
  {
   "component": "security-context API",
   "defect": "Module failed to import and was never mounted, so its routes were dead code. Import fixed; deliberately not mounted pending an authentication review.",
   "regression_test": "test_api_models_carry_expected_audience"
  },
  {
   "component": "signup fallback",
   "defect": "The billing-outage fallback response implied a working key; it now states registered:false / provisional:true.",
   "regression_test": "test_fallback_key_is_marked_unregistered"
  },
  {
   "component": "attack engine",
   "defect": "19 of 114 attacks had been counted BLOCKED because their verifier raised an error (missing table or module, a dict-iteration bug) or had no target: a crash is not a defence. Errored attacks are now INCONCLUSIVE; the honest result is 97 blocked, 17 inconclusive, 0 succeeded. The two tool/MCP substitution attacks now run against a real control.",
   "regression_test": "test_errored_verifier_is_inconclusive_not_blocked"
  },
  {
   "component": "MCP tool metadata",
   "defect": "No control existed for tool-poisoning or rug-pull changes in tools/list replies. Added and wired in (implementation not published).",
   "regression_test": "test_rug_pull_after_pin_is_quarantined_even_if_new_text_looks_benign"
  }
 ]
}
