Skip to content

[reporting] Provide built-in manifest and resource inspection #2744

Description

@bokelley

Summary

reconcileReporting() implements the reporting ledger/receipt loop, but requires every adopter to implement options.inspect(context). The callback must perform the most security-sensitive and interoperability-sensitive part of the workflow: retrieving and validating the actual delivered resource.

That leaves the SDK short of the intended “SDK-managed polling, deduplication, file retrieval, validation, and retries” product contract and makes two JavaScript adopters likely to implement incompatible S3/manifest behavior.

What is missing from the built-in path

  • manifest/resource retrieval with destination credentials;
  • manifest SHA-256 and per-object size/checksum verification;
  • manifest-last completeness checks;
  • declared format/compression parsing;
  • pinned row-schema and report-definition validation;
  • row-count, control-total, and RFC 8785 canonical-content-digest recomputation;
  • safe contract fetching and local-only reference resolution;
  • typed retryable versus permanent integrity failures.

Proposed SDK surface

  • Keep inspect as an advanced override.
  • Provide a default manifest/file inspector backed by a pluggable ReportingResourceReader/credential provider.
  • Reuse the SDK's canonical-reference resolver security controls rather than introducing raw fetches.
  • Add ordinary HTTPS/object-store readers first; expose warehouse/native-commit adapters as interfaces or optional packages.
  • Add a shared conformance fixture used by both JS and Python SDKs: valid manifest, missing file, checksum mismatch, row/control-total mismatch, canonical digest mismatch, retry, checkpoint, and accepted/rejected receipt.

Discovered while validating adcontextprotocol/adcp#6953 in #2726.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions