From afe02ed2f04bb8cf7beb3531aa6f289844dabb63 Mon Sep 17 00:00:00 2001 From: "Leon Acosta @ Dandelion Labs" Date: Tue, 13 Oct 2026 15:28:02 +0200 Subject: [PATCH] Prepare the current individual draft revision 03 --- .github/workflows/verify-v2.yml | 8 ++++---- CONTRIBUTING.md | 4 ++-- README.md | 4 ++-- docs/ietf-readiness.md | 2 +- ...t-02.md => draft-acosta-crypto-agility-manifest-03.md} | 2 +- ...02.txt => draft-acosta-crypto-agility-manifest-03.txt} | 2 +- ...02.xml => draft-acosta-crypto-agility-manifest-03.xml} | 4 ++-- tests/test_contract.py | 8 ++++---- tools/render_draft.py | 2 +- 9 files changed, 18 insertions(+), 18 deletions(-) rename draft/{draft-acosta-crypto-agility-manifest-02.md => draft-acosta-crypto-agility-manifest-03.md} (99%) rename draft/{draft-acosta-crypto-agility-manifest-02.txt => draft-acosta-crypto-agility-manifest-03.txt} (99%) rename draft/{draft-acosta-crypto-agility-manifest-02.xml => draft-acosta-crypto-agility-manifest-03.xml} (99%) diff --git a/.github/workflows/verify-v2.yml b/.github/workflows/verify-v2.yml index 6dc2858..326b99f 100644 --- a/.github/workflows/verify-v2.yml +++ b/.github/workflows/verify-v2.yml @@ -59,10 +59,10 @@ jobs: - name: Render IETF XML without network references run: | python -m tools.render_draft --check - xml2rfc --no-network --text draft/draft-acosta-crypto-agility-manifest-02.xml --out build/results/draft-acosta-crypto-agility-manifest-02.txt - cmp build/results/draft-acosta-crypto-agility-manifest-02.txt draft/draft-acosta-crypto-agility-manifest-02.txt - xml2rfc --no-network --html draft/draft-acosta-crypto-agility-manifest-02.xml --out build/results/draft-acosta-crypto-agility-manifest-02.html - node_modules/.bin/idnits --mode submission --offline --output json draft/draft-acosta-crypto-agility-manifest-02.xml > build/results/idnits.json + xml2rfc --no-network --text draft/draft-acosta-crypto-agility-manifest-03.xml --out build/results/draft-acosta-crypto-agility-manifest-03.txt + cmp build/results/draft-acosta-crypto-agility-manifest-03.txt draft/draft-acosta-crypto-agility-manifest-03.txt + xml2rfc --no-network --html draft/draft-acosta-crypto-agility-manifest-03.xml --out build/results/draft-acosta-crypto-agility-manifest-03.html + node_modules/.bin/idnits --mode submission --offline --output json draft/draft-acosta-crypto-agility-manifest-03.xml > build/results/idnits.json python -c 'import json; d=json.load(open("build/results/idnits.json")); assert d["result"]=="pass" and not any(d["nitsBySeverity"].values())' - name: Retain exact-commit validation evidence if: always() diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aa4b7a1..7f99dbf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # Contributing -This is an individual proposal, not an IETF standard. Preserve supported input compatibility and reject unsupported contract versions explicitly. The authoritative specification is `draft/draft-acosta-crypto-agility-manifest-02.xml`; its embedded normative schema must equal `schema/crypto-agility-v2.schema.json`. Update both in the same PR. Generate the Markdown rendering with `python -m tools.render_draft`. +This is an individual proposal, not an IETF standard. Preserve supported input compatibility and reject unsupported contract versions explicitly. The authoritative specification is `draft/draft-acosta-crypto-agility-manifest-03.xml`; its embedded normative schema must equal `schema/crypto-agility-v2.schema.json`. Update both in the same PR. Generate the Markdown rendering with `python -m tools.render_draft`. Keep the core to discovery and evidence references. Reuse existing cryptographic protocols. Distinguish declarations, authenticated assertions and independently verified runtime behavior. Cite primary sources and separate normative dependencies from background. Do not use em dashes or claim validation without evidence. @@ -11,7 +11,7 @@ Install the pinned dependencies from `requirements.txt`, then run: ```sh python -m unittest discover -s tests -v python -m tools.render_draft --check -xml2rfc --text draft/draft-acosta-crypto-agility-manifest-02.xml --out /tmp/crypto-agility-02.txt +xml2rfc --text draft/draft-acosta-crypto-agility-manifest-03.xml --out /tmp/crypto-agility-03.txt ``` Run the independent consumer and live TLS checks required by CI. Required tests must fail when their dependency or capability is absent, not silently skip. Submission also requires review of current IETF author guidance, author contact, revision availability, idnits output and any active submission deadline. Submission status must reflect an observed Datatracker result. Authorize the submission explicitly, complete the current checks, and preserve the submission receipt; never infer publication from local rendering or upload preparation. diff --git a/README.md b/README.md index 5c3e957..bb64e09 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ A discoverable JSON contract for declared cryptographic capabilities, migration ## Current contract -The [authoritative RFCXML](draft/draft-acosta-crypto-agility-manifest-02.xml), [readable specification](draft/draft-acosta-crypto-agility-manifest-02.md), [JSON Schema](schema/crypto-agility-v2.schema.json), [minimal example](examples/minimal-v2.json) and [complete example](examples/crypto-agility-v2.json) define the contract with `version: 2`. The Internet-Draft revision suffix and the JSON contract version are separate identifiers. Consumers reject unsupported versions; the [qScan adapter](docs/qscan-integration.md) explicitly handles supported input with `version: 1` without treating source declarations as runtime evidence. +The [authoritative RFCXML](draft/draft-acosta-crypto-agility-manifest-03.xml), [readable specification](draft/draft-acosta-crypto-agility-manifest-03.md), [JSON Schema](schema/crypto-agility-v2.schema.json), [minimal example](examples/minimal-v2.json) and [complete example](examples/crypto-agility-v2.json) define the contract with `version: 2`. The Internet-Draft revision suffix and the JSON contract version are separate identifiers. Consumers reject unsupported versions; the [qScan adapter](docs/qscan-integration.md) explicitly handles supported input with `version: 1` without treating source declarations as runtime evidence. A manifest identifies one independently authorized subject. It contains generation and expiry timestamps, declared endpoint profiles, observations and migration records, with optional evidence, policies and exceptions. Evidence is bound to its exact bytes and subject. Declarations, authenticated collector statements and independent measurements are distinct assurance levels. Key establishment and authentication are assessed separately. The contract grants no authority to change a system. @@ -32,7 +32,7 @@ Install `requirements.txt` and `npm ci --ignore-scripts`, then follow [implement ```sh python -m tools.verifier examples/crypto-agility-v2.json --now 2026-10-12T00:00:00Z python -m tools.render_draft --check -xml2rfc --no-network --text draft/draft-acosta-crypto-agility-manifest-02.xml +xml2rfc --no-network --text draft/draft-acosta-crypto-agility-manifest-03.xml ``` The example intentionally reports fallback risks and exits 1. Read [runtime evidence](docs/runtime-evidence.md), [signed observations](docs/signed-observations.md), [collector integration](docs/observatory-integration.md), [consumer deployment](docs/consumer-deployment.md) and the [security review](docs/security-review.md) before relying on evidence. Production acceptance and its limits are in [implementation status](docs/implementation-status.md); submission status and requirements are in [IETF readiness](docs/ietf-readiness.md). diff --git a/docs/ietf-readiness.md b/docs/ietf-readiness.md index 3190b9a..94a13d7 100644 --- a/docs/ietf-readiness.md +++ b/docs/ietf-readiness.md @@ -1,6 +1,6 @@ # Internet-Draft publication and readiness -The complete proposal is `draft-acosta-crypto-agility-manifest-02`. Consult the [Datatracker publication record](https://datatracker.ietf.org/doc/draft-acosta-crypto-agility-manifest/) for the accepted revision and submission state. Local source files, an upload or passing checks do not establish publication. This is an individual Informational proposal, not an IETF standard or endorsement. +The complete proposal is `draft-acosta-crypto-agility-manifest-03`. Consult the [Datatracker publication record](https://datatracker.ietf.org/doc/draft-acosta-crypto-agility-manifest/) for the accepted revision and submission state. Local source files, an upload or passing checks do not establish publication. This is an individual Informational proposal, not an IETF standard or endorsement. ## Submission materials diff --git a/draft/draft-acosta-crypto-agility-manifest-02.md b/draft/draft-acosta-crypto-agility-manifest-03.md similarity index 99% rename from draft/draft-acosta-crypto-agility-manifest-02.md rename to draft/draft-acosta-crypto-agility-manifest-03.md index ae3b27d..647de43 100644 --- a/draft/draft-acosta-crypto-agility-manifest-02.md +++ b/draft/draft-acosta-crypto-agility-manifest-03.md @@ -1,6 +1,6 @@ # A Well-Known Crypto-Agility Manifest -`draft-acosta-crypto-agility-manifest-02` | individual Informational proposal | [publication status](https://datatracker.ietf.org/doc/draft-acosta-crypto-agility-manifest/) +`draft-acosta-crypto-agility-manifest-03` | individual Informational proposal | [publication status](https://datatracker.ietf.org/doc/draft-acosta-crypto-agility-manifest/) Author: Leon Acosta, QuantaKrypto, leon@quantakrypto.com diff --git a/draft/draft-acosta-crypto-agility-manifest-02.txt b/draft/draft-acosta-crypto-agility-manifest-03.txt similarity index 99% rename from draft/draft-acosta-crypto-agility-manifest-02.txt rename to draft/draft-acosta-crypto-agility-manifest-03.txt index d82cfc9..183672e 100644 --- a/draft/draft-acosta-crypto-agility-manifest-02.txt +++ b/draft/draft-acosta-crypto-agility-manifest-03.txt @@ -9,7 +9,7 @@ Expires: 16 April 2027 A Well-Known Crypto-Agility Manifest - draft-acosta-crypto-agility-manifest-02 + draft-acosta-crypto-agility-manifest-03 Abstract diff --git a/draft/draft-acosta-crypto-agility-manifest-02.xml b/draft/draft-acosta-crypto-agility-manifest-03.xml similarity index 99% rename from draft/draft-acosta-crypto-agility-manifest-02.xml rename to draft/draft-acosta-crypto-agility-manifest-03.xml index 023ac48..18cd87f 100644 --- a/draft/draft-acosta-crypto-agility-manifest-02.xml +++ b/draft/draft-acosta-crypto-agility-manifest-03.xml @@ -1,8 +1,8 @@ - + A Well-Known Crypto-Agility Manifest - + QuantaKrypto
diff --git a/tests/test_contract.py b/tests/test_contract.py index de45e21..b890d17 100644 --- a/tests/test_contract.py +++ b/tests/test_contract.py @@ -9,8 +9,8 @@ ROOT=Path(__file__).resolve().parents[1] SCHEMA=ROOT/"schema/crypto-agility-v2.schema.json" EXAMPLE=ROOT/"examples/crypto-agility-v2.json" -XML=ROOT/"draft/draft-acosta-crypto-agility-manifest-02.xml" -MD=ROOT/"draft/draft-acosta-crypto-agility-manifest-02.md" +XML=ROOT/"draft/draft-acosta-crypto-agility-manifest-03.xml" +MD=ROOT/"draft/draft-acosta-crypto-agility-manifest-03.md" class ContractTests(unittest.TestCase): @classmethod @@ -34,10 +34,10 @@ def test_rejects_invalid_digest(self): self.assertTrue(list(self.validator.iter_errors(d))) def test_xml_well_formed_and_named(self): root=ET.parse(XML).getroot() - self.assertEqual(root.attrib["docName"],"draft-acosta-crypto-agility-manifest-02") + self.assertEqual(root.attrib["docName"],"draft-acosta-crypto-agility-manifest-03") self.assertEqual(root.attrib["version"],"3") def test_draft_markdown_mentions_same_revision(self): - self.assertIn("draft-acosta-crypto-agility-manifest-02",MD.read_text()) + self.assertIn("draft-acosta-crypto-agility-manifest-03",MD.read_text()) def test_normative_schema_matches_standalone(self): root=ET.parse(XML).getroot() self.assertEqual(json.loads(root.find("back/section[@anchor='schema']/sourcecode").text),self.schema) diff --git a/tools/render_draft.py b/tools/render_draft.py index c90fc32..4816dac 100644 --- a/tools/render_draft.py +++ b/tools/render_draft.py @@ -4,7 +4,7 @@ import xml.etree.ElementTree as ET ROOT = Path(__file__).resolve().parents[1] -XML = ROOT / 'draft/draft-acosta-crypto-agility-manifest-02.xml' +XML = ROOT / 'draft/draft-acosta-crypto-agility-manifest-03.xml' MARKDOWN = XML.with_suffix('.md')