<?xml version="1.0" encoding="UTF-8"?>
<rfc version="3" category="info" docName="draft-watts-protocol-test-evidence-profile-00" ipr="trust200902">
 <front>
  <title abbrev="Protocol Test Evidence Profile">Protocol Conformance Test Evidence Records: A Reproducibility Profile</title><seriesInfo name="Internet-Draft" value="draft-watts-protocol-test-evidence-profile-00"/>
  <author fullname="Deonté O’dell Watts"><organization>GoodShyt Group Inc.</organization><address><email>deonte@goodshyt.fun</email><uri>https://orcid.org/0009-0005-8586-3650</uri></address></author>
  <date year="2026" month="October" day="21"/><area>Security</area>
  <keyword>conformance testing</keyword><keyword>test evidence</keyword><keyword>provenance</keyword>
  <abstract><t>This document proposes a narrow record profile for describing software protocol-conformance test runs, including the tested artifact, test suite, implementation, execution environment, individual case outcomes, digests, and known limitations. It does not define a new signature scheme, attestation architecture, transparency service, or general-purpose test-output language. Implementations are encouraged to reuse existing mechanisms such as SCITT statements, RATS terminology, COSE, JSON canonicalization, and existing test-report formats where suitable. This individual draft candidate has not been submitted to or endorsed by the IETF.</t></abstract>
 </front>
 <middle>
  <section anchor="intro"><name>Introduction</name>
   <t>Software protocol implementations are evaluated by test harnesses, continuous-integration jobs, conformance suites, and interoperability labs. Reports can be difficult to compare when they omit artifact digests, test-suite versions, runtime environments, case-level status, or provenance linking results to source inputs.</t>
   <t>This document defines a small, extensible JSON record profile for protocol-conformance test evidence. A record states what its producer asserts happened during a run. It is not proof that the harness was trustworthy, the test suite complete, or the implementation secure.</t>
   <t>Existing work covers substantial adjacent requirements. SCITT defines transparency for signed statements; RATS defines evidence-appraisal roles and terminology; COSE and JSON Canonicalization Scheme provide existing security/canonicalization building blocks; and in-toto supports authenticated metadata with type-specific predicates. Implementers SHOULD first evaluate whether existing formats meet their needs.</t>
  </section>
  <section anchor="conventions"><name>Conventions and Terminology</name>
   <t>The key words MUST, MUST NOT, REQUIRED, SHOULD, SHOULD NOT, RECOMMENDED, NOT RECOMMENDED, MAY, and OPTIONAL are to be interpreted as described in BCP 14 (RFC 2119 and RFC 8174) when, and only when, they appear in all capitals.</t>
   <dl><dt>Evidence record</dt><dd><t>A structured statement describing a test run and its reported outcomes.</t></dd><dt>Subject artifact</dt><dd><t>The implementation, binary, source snapshot, endpoint, or object evaluated by the test run.</t></dd><dt>Test suite</dt><dd><t>The named and versioned collection of cases executed by a harness.</t></dd><dt>Producer</dt><dd><t>The system that creates the record.</t></dd><dt>Consumer</dt><dd><t>A system or person that parses and evaluates the record.</t></dd></dl>
  </section>
  <section anchor="scope"><name>Scope and Non-Goals</name>
   <t>The profile describes test-run inputs, environment, case-level outcomes, artifact digests, provenance, and limitations.</t>
   <t>This document does not specify test design, pass/fail computation, key provisioning, signing, transparency receipts, or trust decisions. Those functions SHOULD use established mechanisms.</t>
   <t>This document does not establish a new evidence ledger. Deployments requiring transparency SHOULD evaluate SCITT (RFC 9943); deployments requiring remote-attestation semantics SHOULD evaluate RATS (RFC 9334) where applicable.</t>
  </section>
  <section anchor="record"><name>Evidence Record Model</name>
   <t>A record is a UTF-8 JSON object. Producers MUST include schema_version, record_id, subject, test_suite, implementation, environment, run, cases, result_summary, and provenance. Consumers SHOULD preserve unknown extension members when transforming or re-emitting records.</t>
   <section anchor="subject"><name>Subject and Test Suite</name><t>The subject SHOULD identify the artifact by stable name and cryptographic digest. The test_suite SHOULD identify suite name, version, and digest. Digests MUST identify exact bytes or a clearly specified canonical representation; a label alone is not a stable artifact identifier.</t></section>
   <section anchor="environment"><name>Environment and Run</name><t>The environment SHOULD identify relevant runtime, operating system, architecture, dependencies, and hardware. The run MUST include status and SHOULD include timestamps, exit code, case count, and assertion count when available. Missing values MUST NOT be fabricated.</t></section>
   <section anchor="cases"><name>Case-Level Outcomes</name><t>Each case MUST have a stable case_id and status of pass, fail, skip, error, or not-run. Expected and observed values MAY be included. Logs SHOULD be referenced by digest or controlled URI rather than embedded when they may contain secrets or personal data.</t></section>
   <section anchor="provenance"><name>Provenance and Limitations</name><t>The provenance member SHOULD link source revisions, test-harness digests, build identifiers, and producer identity. A limitations array is RECOMMENDED and SHOULD describe untested platforms, incomplete coverage, simulated inputs, and other material constraints.</t></section>
  </section>
  <section anchor="integrity"><name>Canonicalization and Integrity</name>
   <t>JSON does not inherently provide a unique byte representation for semantically equivalent objects. If JSON is signed or hashed, implementations SHOULD use an established canonicalization procedure such as RFC 8785 and MUST document which bytes are covered.</t>
   <t>This profile defines no signature format. Signed statements SHOULD reuse an established mechanism such as COSE (RFC 9052) or an existing attestation envelope. Where transparency is required, deployments SHOULD evaluate SCITT (RFC 9943). A signature authenticates an assertion under the selected trust model; it does not prove the assertion true.</t>
  </section>
  <section anchor="example"><name>Example</name><t>The following example is illustrative, unsigned, and has no transparency receipt.</t>
   <sourcecode type="json" name="ptem-example.json"><![CDATA[
{
  "schema_version": "0.1.0-draft",
  "record_id": "RUN-EXAMPLE-001",
  "subject": {"name": "example-implementation", "digest_algorithm": "sha-256", "digest": "<artifact-digest>"},
  "test_suite": {"name": "example-suite", "version": "1.0", "digest_algorithm": "sha-256", "digest": "<suite-digest>"},
  "implementation": {"name": "example-implementation", "version": "1.0"},
  "environment": {"runtime": "example-runtime", "platform": "example-platform"},
  "run": {"status": "passed", "case_count": 2, "assertion_count": 4, "exit_code": 0},
  "cases": [{"case_id": "CASE-001", "status": "pass"}, {"case_id": "CASE-002", "status": "pass"}],
  "result_summary": {"passed": 2, "failed": 0, "skipped": 0},
  "provenance": {"producer": "example-harness", "source_revision": "<revision-id>"},
  "limitations": ["Illustrative example; not a measurement"]
}
   ]]></sourcecode>
  </section>
  <section anchor="interop"><name>Interoperability Considerations</name>
   <t>Producers and consumers SHOULD test this profile against existing test-report formats and attestation predicates before adoption. Consumers MUST distinguish an unknown extension from a verified security property. Conformance vectors SHOULD cover pass, fail, skip, error, not-run, missing digest, and incomplete provenance.</t>
   <t>Before standardization, compare the proposed field set with in-toto predicates, TAP, JUnit-style reports, and SCITT statement payloads. If an existing format expresses the required information without ambiguity, reusing it is preferred.</t>
  </section>
  <section anchor="security"><name>Security Considerations</name>
   <t>An evidence record is an assertion by its producer. A compromised or dishonest producer can report false results, omit failures, or associate results with the wrong artifact. Consumers SHOULD verify digests independently, authenticate the producer where needed, and apply local trust policy.</t>
   <t>Records can be replayed or presented out of context. Deployments SHOULD use unique run identifiers, trustworthy timestamps where available, immutable source revisions, and transparency/attestation mechanisms where justified. A digest alone does not establish freshness, authorship, correctness, or completeness.</t>
   <t>Logs and environment metadata can reveal secrets, hostnames, tokens, identifiers, vulnerabilities, or confidential details. Producers MUST NOT include secrets in public records and SHOULD minimize sensitive fields. This profile does not guarantee post-quantum security.</t>
  </section>
  <section anchor="privacy"><name>Privacy Considerations</name><t>Environment metadata may include personal or indirectly identifying information. Producers SHOULD collect only what is necessary, redact direct identifiers, and review log references before publication. Hashing a low-entropy identifier does not necessarily anonymize it.</t></section>
  <section anchor="iana"><name>IANA Considerations</name><t>This document requests no IANA actions.</t></section>
  <section anchor="status"><name>Status and Standards-Track Caveat</name><t>This individual draft candidate has not been submitted to the IETF, has no assigned Datatracker identifier, and represents no IETF consensus or endorsement. The prior-art review is preliminary. SCITT (RFC 9943), RATS (RFC 9334), in-toto attestations, and existing test-report formats overlap with parts of this proposal. Community feedback and an interoperability prototype are prerequisites for deciding whether a separate profile is useful.</t></section>
 </middle>
 <back>
  <references><name>Normative References</name>
   <reference anchor="RFC2119" target="https://www.rfc-editor.org/rfc/rfc2119.html"><front><title>Key words for use in RFCs to Indicate Requirement Levels</title><author fullname="Scott Bradner"/><date year="1997" month="March"/></front><seriesInfo name="RFC" value="2119"/></reference>
   <reference anchor="RFC8174" target="https://www.rfc-editor.org/rfc/rfc8174.html"><front><title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title><author fullname="Barry Leiba"/><date year="2017" month="May"/></front><seriesInfo name="RFC" value="8174"/></reference>
   <reference anchor="RFC8259" target="https://www.rfc-editor.org/rfc/rfc8259.html"><front><title>The JavaScript Object Notation (JSON) Data Interchange Format</title><author fullname="Tim Bray"/><date year="2017" month="December"/></front><seriesInfo name="RFC" value="8259"/></reference>
   <reference anchor="RFC8785" target="https://www.rfc-editor.org/rfc/rfc8785.html"><front><title>JSON Canonicalization Scheme (JCS)</title><author fullname="Anders Rundgren"/><author fullname="Brock Jordan"/><author fullname="Samuel Erdtman"/><date year="2020" month="June"/></front><seriesInfo name="RFC" value="8785"/></reference>
  </references>
  <references><name>Informative References</name>
   <reference anchor="RFC9334" target="https://www.rfc-editor.org/rfc/rfc9334.html"><front><title>Remote ATtestation procedureS (RATS) Architecture</title><author fullname="Henk Birkholz"/><author fullname="Dave Thaler"/><author fullname="Michael Richardson"/><author fullname="Ned Smith"/><author fullname="Wei Pan"/><date year="2023" month="January"/></front><seriesInfo name="RFC" value="9334"/></reference>
   <reference anchor="RFC9943" target="https://www.rfc-editor.org/rfc/rfc9943.html"><front><title>An Architecture for Trustworthy and Transparent Digital Supply Chains</title><author fullname="Henk Birkholz"/><author fullname="Antoine Delignat-Lavaud"/><author fullname="Cédric Fournet"/><author fullname="Yogesh Deshpande"/><author fullname="Steve Lasker"/><date year="2026" month="June"/></front><seriesInfo name="RFC" value="9943"/></reference>
   <reference anchor="RFC9052" target="https://www.rfc-editor.org/rfc/rfc9052.html"><front><title>CBOR Object Signing and Encryption (COSE): Structures and Process</title><author fullname="Jim Schaad"/><date year="2022" month="August"/></front><seriesInfo name="RFC" value="9052"/></reference>
   <reference anchor="INTOTO" target="https://github.com/in-toto/attestation/blob/main/spec/README.md"><front><title>in-toto Attestation Framework Specification</title><author fullname="in-toto Maintainers"/></front><format type="HTML" target="https://github.com/in-toto/attestation/blob/main/spec/README.md"/></reference>
   <reference anchor="TAP14" target="https://testanything.org/tap-version-14-specification.html"><front><title>Test Anything Protocol Version 14 Specification</title><author fullname="Isaac Z. Schlueter"/></front><format type="HTML" target="https://testanything.org/tap-version-14-specification.html"/></reference>
   <reference anchor="XML2RFC" target="https://www.rfc-editor.org/rfc/rfc7991.html"><front><title>The xml2rfc Version 3 Vocabulary</title><author fullname="Paul Hoffman"/><date year="2016" month="December"/></front><seriesInfo name="RFC" value="7991"/></reference>
  </references>
 </back>
</rfc>
