{
  "tool_id": "art-558-record-fund-positions",
  "note": "golden_hash filled by `node golden-parity.test.mjs --update`. Vectors cover: a standard fully-populated positions snapshot, a snapshot with one missing security_id (soft-flag, not a structural error), and the structural-error path (empty holdings array).",
  "vectors": [
    {
      "name": "standard-positions-snapshot",
      "description": "Three-holding snapshot with all fields populated, shares_outstanding declared.",
      "policy_parameters": {
        "fund_id": "FUND-DEMO-01",
        "valuation_date": "2026-08-05",
        "holdings": [
          {
            "security_id": "SEC-A",
            "quantity": 1000,
            "currency": "USD"
          },
          {
            "security_id": "SEC-B",
            "quantity": 2500,
            "currency": "GBP"
          },
          {
            "security_id": "SEC-C",
            "quantity": 750,
            "currency": "EUR"
          }
        ],
        "shares_outstanding": 100000
      },
      "output_payload": {
        "fund_id": "FUND-DEMO-01",
        "valuation_date": "2026-08-05",
        "structural_error": null,
        "holdings": [
          {
            "security_id": "SEC-A",
            "quantity": 1000,
            "currency": "USD"
          },
          {
            "security_id": "SEC-B",
            "quantity": 2500,
            "currency": "GBP"
          },
          {
            "security_id": "SEC-C",
            "quantity": 750,
            "currency": "EUR"
          }
        ],
        "holding_count": 3,
        "shares_outstanding": 100000,
        "not_proven": [
          {
            "item": "Custodian-record match",
            "detail": "This kernel attests that a declared positions snapshot exists exactly as stated for the given fund and valuation date. It does not itself verify the snapshot against any custodian, prime broker, or fund-administrator record."
          },
          {
            "item": "Holdings-data accuracy",
            "detail": "Every security_id, quantity, and currency is caller-supplied and asserted. This kernel performs no custodian or market-data lookups (zero-egress) and does not verify these values against any external source."
          },
          {
            "item": "Live position feed",
            "detail": "All inputs are point-in-time as supplied by the caller for the stated valuation_date; this kernel makes no claim about a live or real-time position feed and makes none of its own calls."
          },
          {
            "item": "NAV or pricing computation",
            "detail": "This kernel records a positions snapshot only. It performs no pricing, valuation, or NAV-per-share arithmetic -- that is art-373-recompute-fund-nav, which may cite this artifact's execution_hash via a positions_ref rather than re-declaring holdings."
          }
        ],
        "fence": "fund_id, valuation_date, every holding row, and shares_outstanding are SUPPLIED, asserted, and digested into this receipt. This kernel attests THAT a declared positions snapshot exists exactly as stated for the given fund and date -- never a verification against a custodian or fund-administrator record, never a live position feed (zero-egress by contract).",
        "disclosure_note": "Holdings are echoed here in cleartext by design (SPEC.md section 25 ruled not applicable, stated explicitly): this artifact's own execution_hash IS the positions_digest downstream lineage cites, never a second canonicalization or a salted commitment over the holdings. A caller who needs the snapshot itself kept out of a public artifact should not call this node, or should supply a redacted/aggregated snapshot -- that choice belongs to the caller."
      },
      "golden_hash": "e44ffb323393bf2d4fe2a01f159279d0245b543b987147dbb2c36a9d59d289d1"
    },
    {
      "name": "missing-security-id-soft-flag",
      "description": "One holding missing security_id -- recorded normally with a soft flag, not a structural error.",
      "policy_parameters": {
        "fund_id": "FUND-DEMO-02",
        "valuation_date": "2026-08-05",
        "holdings": [
          {
            "security_id": "SEC-A",
            "quantity": 500,
            "currency": "USD"
          },
          {
            "quantity": 300,
            "currency": "USD"
          }
        ],
        "shares_outstanding": 50000
      },
      "output_payload": {
        "fund_id": "FUND-DEMO-02",
        "valuation_date": "2026-08-05",
        "structural_error": null,
        "holdings": [
          {
            "security_id": "SEC-A",
            "quantity": 500,
            "currency": "USD"
          },
          {
            "security_id": null,
            "quantity": 300,
            "currency": "USD"
          }
        ],
        "holding_count": 2,
        "shares_outstanding": 50000,
        "not_proven": [
          {
            "item": "Custodian-record match",
            "detail": "This kernel attests that a declared positions snapshot exists exactly as stated for the given fund and valuation date. It does not itself verify the snapshot against any custodian, prime broker, or fund-administrator record."
          },
          {
            "item": "Holdings-data accuracy",
            "detail": "Every security_id, quantity, and currency is caller-supplied and asserted. This kernel performs no custodian or market-data lookups (zero-egress) and does not verify these values against any external source."
          },
          {
            "item": "Live position feed",
            "detail": "All inputs are point-in-time as supplied by the caller for the stated valuation_date; this kernel makes no claim about a live or real-time position feed and makes none of its own calls."
          },
          {
            "item": "NAV or pricing computation",
            "detail": "This kernel records a positions snapshot only. It performs no pricing, valuation, or NAV-per-share arithmetic -- that is art-373-recompute-fund-nav, which may cite this artifact's execution_hash via a positions_ref rather than re-declaring holdings."
          }
        ],
        "fence": "fund_id, valuation_date, every holding row, and shares_outstanding are SUPPLIED, asserted, and digested into this receipt. This kernel attests THAT a declared positions snapshot exists exactly as stated for the given fund and date -- never a verification against a custodian or fund-administrator record, never a live position feed (zero-egress by contract).",
        "disclosure_note": "Holdings are echoed here in cleartext by design (SPEC.md section 25 ruled not applicable, stated explicitly): this artifact's own execution_hash IS the positions_digest downstream lineage cites, never a second canonicalization or a salted commitment over the holdings. A caller who needs the snapshot itself kept out of a public artifact should not call this node, or should supply a redacted/aggregated snapshot -- that choice belongs to the caller."
      },
      "golden_hash": "b4b70d914597f0a1e7339928a09a1e1e75d9c33f21ab772b2f982f3fbf876844"
    },
    {
      "name": "structural-error-empty-holdings",
      "description": "Structural-error path: holdings array is empty.",
      "policy_parameters": {
        "fund_id": "FUND-DEMO-03",
        "valuation_date": "2026-08-05",
        "holdings": [],
        "shares_outstanding": 50000
      },
      "output_payload": {
        "fund_id": "FUND-DEMO-03",
        "valuation_date": "2026-08-05",
        "structural_error": "holdings must be a non-empty array.",
        "holdings": [],
        "holding_count": 0,
        "shares_outstanding": 50000,
        "not_proven": [
          {
            "item": "Custodian-record match",
            "detail": "This kernel attests that a declared positions snapshot exists exactly as stated for the given fund and valuation date. It does not itself verify the snapshot against any custodian, prime broker, or fund-administrator record."
          },
          {
            "item": "Holdings-data accuracy",
            "detail": "Every security_id, quantity, and currency is caller-supplied and asserted. This kernel performs no custodian or market-data lookups (zero-egress) and does not verify these values against any external source."
          },
          {
            "item": "Live position feed",
            "detail": "All inputs are point-in-time as supplied by the caller for the stated valuation_date; this kernel makes no claim about a live or real-time position feed and makes none of its own calls."
          },
          {
            "item": "NAV or pricing computation",
            "detail": "This kernel records a positions snapshot only. It performs no pricing, valuation, or NAV-per-share arithmetic -- that is art-373-recompute-fund-nav, which may cite this artifact's execution_hash via a positions_ref rather than re-declaring holdings."
          }
        ],
        "fence": "fund_id, valuation_date, every holding row, and shares_outstanding are SUPPLIED, asserted, and digested into this receipt. This kernel attests THAT a declared positions snapshot exists exactly as stated for the given fund and date -- never a verification against a custodian or fund-administrator record, never a live position feed (zero-egress by contract).",
        "disclosure_note": "Holdings are echoed here in cleartext by design (SPEC.md section 25 ruled not applicable, stated explicitly): this artifact's own execution_hash IS the positions_digest downstream lineage cites, never a second canonicalization or a salted commitment over the holdings. A caller who needs the snapshot itself kept out of a public artifact should not call this node, or should supply a redacted/aggregated snapshot -- that choice belongs to the caller."
      },
      "golden_hash": "2115caac4cc02082de791241e147f62fe85dea64606034721b5e880a05c9f5e9"
    }
  ]
}
