From 0dc1ccb6c1b7f495b2be111684562eebf9df12eb Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 29 Oct 2026 18:18:57 -0700 Subject: [PATCH 1/2] Remove statement_hash, locator digest and clause-set digest from outputs Co-Authored-By: Claude Sonnet 5.5 --- CHANGELOG.md | 2 ++ plan/plan.md | 2 +- src/commands/clauses.rs | 5 ++--- src/commands/properties.rs | 1 - tests/fixtures/assurance/v1.json | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13e6dc5..6d0e77b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ output schemas (see `spec/non-functional/NFR-006-cli-stability.md`). ## [Unreleased] +- **Breaking: digests and hashes removed from outputs.** `quire properties --json` no longer emits `statement_hash` on a criterion obligation. The `quire assurance` v1 export locator is `{path, line}` only (no `digest`), obligations carry no `statement_hash`, and symbol ids are JSON-array identity parts rather than SHA-256 hex. `quire clauses` human binding output no longer prints a clause-set digest. Follows quire-rs assurance-v1 edited in place. + ## [0.37.1] - 2026-10-28 - Update to quire-rs 0.50.3, which honors optional trace targets whose archetype is absent from the corpus. diff --git a/plan/plan.md b/plan/plan.md index cc2ae65..55cf6ae 100644 --- a/plan/plan.md +++ b/plan/plan.md @@ -29,7 +29,7 @@ preimplementation specification and scope review are committed at `2502617`. reuse the existing scope/module path guards. Construct the bounded `Spec`, scoped symbol extraction, and binding through quire-rs, then call `build_assurance_export` and `read_assurance_export`. Parse - `NAME@VERSION`/`MODULE/ARCHETYPE@SHA256` only as CLI premises; compare the + `NAME@VERSION`/`MODULE/ARCHETYPE` only as CLI premises; compare the complete expected and emitted premise sets before writing stdout. 3. **T-023 — Prove the process boundary (complete).** Add a non-vacuous fixture and golden plus IT-136..144/TC-814: complete records and all availability states, diff --git a/src/commands/clauses.rs b/src/commands/clauses.rs index 0dbdb56..3927b1b 100644 --- a/src/commands/clauses.rs +++ b/src/commands/clauses.rs @@ -209,11 +209,10 @@ fn write_json(ctx: &Ctx, value: &T) -> anyhow::Result<()> { fn render_binding_human(report: &ClauseBindingReport) -> String { let mut out = format!( - "Clause set {}/{}/{} ({})\n", + "Clause set {}/{}/{}\n", report.clause_set.authority, report.clause_set.id, - report.clause_set.version, - report.clause_set_digest + report.clause_set.version ); for clause in &report.clauses { out.push_str(&format!( diff --git a/src/commands/properties.rs b/src/commands/properties.rs index 8ae40df..8151e5a 100644 --- a/src/commands/properties.rs +++ b/src/commands/properties.rs @@ -247,7 +247,6 @@ fn obligation_json(obligation: Option<&quire_rs::obligation::CriterionObligation Some(o) => { let mut out = json!({ "source": o.source, - "statement_hash": o.statement_hash, "method": o.method, "criticality": o.criticality, }); diff --git a/tests/fixtures/assurance/v1.json b/tests/fixtures/assurance/v1.json index af87834..f3488ec 100644 --- a/tests/fixtures/assurance/v1.json +++ b/tests/fixtures/assurance/v1.json @@ -1 +1 @@ -{"format":"quire-assurance","format_version":1,"source":{"repository":"agent-ix/fixture","revision":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"modules":[{"name":"assurance-fixture","version":"1.2.3","schemas":[{"archetype":"FR"},{"archetype":"NFR"},{"archetype":"StR"}]}],"artifacts":[{"id":"FR-001","artifact_type":"FR","locator":{"path":"FR-001.md","line":1,"digest":"e259c3984b8dfc274bfa2193ae13e85a9984f206d4e068e7a661586966cdfaf9"}},{"id":"FR-002","artifact_type":"FR","locator":{"path":"FR-002.md","line":1,"digest":"fe8e946507723461bfcca93d879d8de1c05f7a45497e7de8a3d32aa7b33c30ae"}},{"id":"StR-001","artifact_type":"StR","locator":{"path":"StR-001.md","line":1,"digest":"4a0ed76beebb5241e8d7a550d38bd1f494849cde1e44337e5187f606e378080a"}}],"obligations":[{"source":"acceptance-criterion","id":"FR-001-AC-1","document":"FR-001.md","statement":"The assurance export preserves the linked requirement.","statement_hash":"1217cc0166b54ec1f45471fc7ee48dba4e894630e52db760b6266f47b706393f","method":"Test","target_ids":["TC-136"],"locator":{"path":"FR-001.md","line":18,"digest":"1217cc0166b54ec1f45471fc7ee48dba4e894630e52db760b6266f47b706393f"}},{"source":"acceptance-criterion","id":"FR-002-AC-1","document":"FR-002.md","statement":"The assurance export preserves the missing relation state.","statement_hash":"ba722332b02d721c29ff432336c87c0b5dc5523045436f7809ec549165924a2f","method":"Inspection","target_ids":[],"locator":{"path":"FR-002.md","line":13,"digest":"ba722332b02d721c29ff432336c87c0b5dc5523045436f7809ec549165924a2f"}}],"symbols":[{"id":"0ebc7940c7d308a4e705773d389b3e9a386b173132faa2ae19c4248dc7f9ba76","language":"rust","kind":"test_function","qualified_name":"evidence_binding","container":null,"capabilities":["verifies"],"locator":{"path":"src/lib.rs","line":6,"digest":"90fc8a88c45a81ebc2c5f6c63bd7c0f00a642757b0d6380b2143dd6bd5c43e04"}},{"id":"a6912a41c300742ae2b687af3ad18dd589940ee5a6a5e4fb7395090ae4c805e4","language":"rust","kind":"function","qualified_name":"production_binding","container":null,"capabilities":["implements"],"locator":{"path":"src/lib.rs","line":2,"digest":"90fc8a88c45a81ebc2c5f6c63bd7c0f00a642757b0d6380b2143dd6bd5c43e04"}}],"relation_kinds":[{"kind":"implements","availability":"available","sources":["trace_binding","observed"]},{"kind":"owned_by","availability":"available","sources":["required_relation"]},{"kind":"references","availability":"available","sources":["observed"]},{"kind":"satisfies","availability":"available","sources":["required_relation","observed"]},{"kind":"verifies","availability":"available","sources":["trace_binding","observed"]}],"relations":[{"kind":"corpus","source":"FR-001","target":"StR-001","edge_type":"references","resolution":"resolved","locator":{"path":"FR-001.md","line":6,"digest":"e259c3984b8dfc274bfa2193ae13e85a9984f206d4e068e7a661586966cdfaf9"},"freshness":"not_applicable"},{"kind":"corpus","source":"FR-001","target":"StR-001","edge_type":"satisfies","resolution":"resolved","locator":{"path":"FR-001.md","line":6,"digest":"e259c3984b8dfc274bfa2193ae13e85a9984f206d4e068e7a661586966cdfaf9"},"freshness":"not_applicable"},{"kind":"corpus","source":"FR-001","target":"StR-999","edge_type":"references","resolution":"dangling","locator":{"path":"FR-001.md","line":8,"digest":"e259c3984b8dfc274bfa2193ae13e85a9984f206d4e068e7a661586966cdfaf9"},"freshness":"not_applicable"},{"kind":"verifies","source":"0ebc7940c7d308a4e705773d389b3e9a386b173132faa2ae19c4248dc7f9ba76","target":"FR-001-AC-1","form":"rust-trace-attribute","provenance":"canonical","locator":{"path":"src/lib.rs","line":6,"digest":"90fc8a88c45a81ebc2c5f6c63bd7c0f00a642757b0d6380b2143dd6bd5c43e04"},"freshness":"unknown"},{"kind":"verifies","source":"0ebc7940c7d308a4e705773d389b3e9a386b173132faa2ae19c4248dc7f9ba76","target":"TC-136","form":"rust-trace-attribute","provenance":"canonical","locator":{"path":"src/lib.rs","line":6,"digest":"90fc8a88c45a81ebc2c5f6c63bd7c0f00a642757b0d6380b2143dd6bd5c43e04"},"freshness":"unknown"},{"kind":"implements","source":"a6912a41c300742ae2b687af3ad18dd589940ee5a6a5e4fb7395090ae4c805e4","target":"FR-001","form":"rust-implements-attribute","locator":{"path":"src/lib.rs","line":2,"digest":"90fc8a88c45a81ebc2c5f6c63bd7c0f00a642757b0d6380b2143dd6bd5c43e04"},"freshness":"not_applicable"}],"relation_observations":[{"declaration":"fr-has-need","subject":"FR-001","availability":"available","freshness":"not_applicable"},{"declaration":"fr-has-need","subject":"FR-002","availability":"missing","freshness":"not_applicable"},{"declaration":"fr-has-need","subject":"unreadable.md","availability":"unknown","freshness":"unknown","reason":"stream did not contain valid UTF-8"},{"declaration":"nfr-has-owner","availability":"not_applicable","freshness":"not_applicable"},{"declaration":"nfr-has-owner","subject":"unreadable.md","availability":"unknown","freshness":"unknown","reason":"stream did not contain valid UTF-8"}]} +{"format":"quire-assurance","format_version":1,"source":{"repository":"agent-ix/fixture","revision":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"modules":[{"name":"assurance-fixture","version":"1.2.3","schemas":[{"archetype":"FR"},{"archetype":"NFR"},{"archetype":"StR"}]}],"artifacts":[{"id":"FR-001","artifact_type":"FR","locator":{"path":"FR-001.md","line":1}},{"id":"FR-002","artifact_type":"FR","locator":{"path":"FR-002.md","line":1}},{"id":"StR-001","artifact_type":"StR","locator":{"path":"StR-001.md","line":1}}],"obligations":[{"source":"acceptance-criterion","id":"FR-001-AC-1","document":"FR-001.md","statement":"The assurance export preserves the linked requirement.","method":"Test","target_ids":["TC-136"],"locator":{"path":"FR-001.md","line":18}},{"source":"acceptance-criterion","id":"FR-002-AC-1","document":"FR-002.md","statement":"The assurance export preserves the missing relation state.","method":"Inspection","target_ids":[],"locator":{"path":"FR-002.md","line":13}}],"symbols":[{"id":"0ebc7940c7d308a4e705773d389b3e9a386b173132faa2ae19c4248dc7f9ba76","language":"rust","kind":"test_function","qualified_name":"evidence_binding","container":null,"capabilities":["verifies"],"locator":{"path":"src/lib.rs","line":6}},{"id":"a6912a41c300742ae2b687af3ad18dd589940ee5a6a5e4fb7395090ae4c805e4","language":"rust","kind":"function","qualified_name":"production_binding","container":null,"capabilities":["implements"],"locator":{"path":"src/lib.rs","line":2}}],"relation_kinds":[{"kind":"implements","availability":"available","sources":["trace_binding","observed"]},{"kind":"owned_by","availability":"available","sources":["required_relation"]},{"kind":"references","availability":"available","sources":["observed"]},{"kind":"satisfies","availability":"available","sources":["required_relation","observed"]},{"kind":"verifies","availability":"available","sources":["trace_binding","observed"]}],"relations":[{"kind":"corpus","source":"FR-001","target":"StR-001","edge_type":"references","resolution":"resolved","locator":{"path":"FR-001.md","line":6},"freshness":"not_applicable"},{"kind":"corpus","source":"FR-001","target":"StR-001","edge_type":"satisfies","resolution":"resolved","locator":{"path":"FR-001.md","line":6},"freshness":"not_applicable"},{"kind":"corpus","source":"FR-001","target":"StR-999","edge_type":"references","resolution":"dangling","locator":{"path":"FR-001.md","line":8},"freshness":"not_applicable"},{"kind":"verifies","source":"0ebc7940c7d308a4e705773d389b3e9a386b173132faa2ae19c4248dc7f9ba76","target":"FR-001-AC-1","form":"rust-trace-attribute","provenance":"canonical","locator":{"path":"src/lib.rs","line":6},"freshness":"unknown"},{"kind":"verifies","source":"0ebc7940c7d308a4e705773d389b3e9a386b173132faa2ae19c4248dc7f9ba76","target":"TC-136","form":"rust-trace-attribute","provenance":"canonical","locator":{"path":"src/lib.rs","line":6},"freshness":"unknown"},{"kind":"implements","source":"a6912a41c300742ae2b687af3ad18dd589940ee5a6a5e4fb7395090ae4c805e4","target":"FR-001","form":"rust-implements-attribute","locator":{"path":"src/lib.rs","line":2},"freshness":"not_applicable"}],"relation_observations":[{"declaration":"fr-has-need","subject":"FR-001","availability":"available","freshness":"not_applicable"},{"declaration":"fr-has-need","subject":"FR-002","availability":"missing","freshness":"not_applicable"},{"declaration":"fr-has-need","subject":"unreadable.md","availability":"unknown","freshness":"unknown","reason":"stream did not contain valid UTF-8"},{"declaration":"nfr-has-owner","availability":"not_applicable","freshness":"not_applicable"},{"declaration":"nfr-has-owner","subject":"unreadable.md","availability":"unknown","freshness":"unknown","reason":"stream did not contain valid UTF-8"}]} From 053281240faea17e2be0ab0a135cb11e4beb4b7f Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 29 Oct 2026 19:11:53 -0700 Subject: [PATCH 2/2] Bump quire-rs to digest-free rev and regenerate assurance golden Co-Authored-By: Claude Sonnet 5.5 --- Cargo.lock | 97 +------------------------------- Cargo.toml | 2 +- src/commands/clauses.rs | 4 +- tests/fixtures/assurance/v1.json | 2 +- 4 files changed, 6 insertions(+), 99 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 65664fd..e4307a2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,7 +5,7 @@ version = 4 [[package]] name = "agent-ix-semantic-schema" version = "0.3.0" -source = "git+https://github.com/agent-ix/filament-core-data?rev=fd261ca1549f79cd8512312ab759895540e9a159#fd261ca1549f79cd8512312ab759895540e9a159" +source = "git+https://github.com/agent-ix/filament-core-data?branch=main#895f6de10df9520e9ae3af2637269d8590812ffc" [[package]] name = "ahash" @@ -134,15 +134,6 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - [[package]] name = "bstr" version = "1.12.1" @@ -228,15 +219,6 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -262,16 +244,6 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" -[[package]] -name = "crypto-common" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" -dependencies = [ - "generic-array", - "typenum", -] - [[package]] name = "deranged" version = "0.5.8" @@ -287,16 +259,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - [[package]] name = "displaydoc" version = "0.2.6" @@ -426,16 +388,6 @@ dependencies = [ "windows-result", ] -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - [[package]] name = "getrandom" version = "0.2.17" @@ -1090,7 +1042,7 @@ dependencies = [ [[package]] name = "quire-rs" version = "0.50.3" -source = "git+https://github.com/agent-ix/quire-rs?rev=a48e65033deb233d7575507b193d60f3b00174ff#a48e65033deb233d7575507b193d60f3b00174ff" +source = "git+https://github.com/agent-ix/quire-rs?rev=19202147290b654c13eb7f8eed19dc3e2958f8f8#19202147290b654c13eb7f8eed19dc3e2958f8f8" dependencies = [ "agent-ix-semantic-schema", "globset", @@ -1103,9 +1055,7 @@ dependencies = [ "regex", "serde", "serde_json", - "sha2", "thiserror", - "unicode-normalization", "uuid", "yaml_serde", ] @@ -1113,7 +1063,7 @@ dependencies = [ [[package]] name = "quire-rust-extraction" version = "0.1.0" -source = "git+https://github.com/agent-ix/quire-rs?rev=a48e65033deb233d7575507b193d60f3b00174ff#a48e65033deb233d7575507b193d60f3b00174ff" +source = "git+https://github.com/agent-ix/quire-rs?rev=19202147290b654c13eb7f8eed19dc3e2958f8f8#19202147290b654c13eb7f8eed19dc3e2958f8f8" dependencies = [ "quire-code-parse", ] @@ -1313,17 +1263,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - [[package]] name = "sharded-slab" version = "0.1.7" @@ -1490,21 +1429,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "tinyvec" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - [[package]] name = "toml" version = "1.1.6+spec-1.1.0" @@ -1656,27 +1580,12 @@ dependencies = [ "tree-sitter-language", ] -[[package]] -name = "typenum" -version = "1.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" - [[package]] name = "unicode-ident" version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" -[[package]] -name = "unicode-normalization" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" -dependencies = [ - "tinyvec", -] - [[package]] name = "unicode-xid" version = "0.2.6" diff --git a/Cargo.toml b/Cargo.toml index 3dee425..ffcfb41 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ path = "src/main.rs" [dependencies] ix-cli-kit = { git = "https://github.com/agent-ix/ix-cli-kit", branch = "main", features = ["self-update"] } -quire-rs = { version = "=0.50.3", git = "https://github.com/agent-ix/quire-rs", rev = "a48e65033deb233d7575507b193d60f3b00174ff" } +quire-rs = { version = "=0.50.3", git = "https://github.com/agent-ix/quire-rs", rev = "19202147290b654c13eb7f8eed19dc3e2958f8f8" } clap = { version = "4", features = ["derive"] } serde = { version = "1", features = ["derive"] } serde_json = "1" diff --git a/src/commands/clauses.rs b/src/commands/clauses.rs index 3927b1b..4a865a2 100644 --- a/src/commands/clauses.rs +++ b/src/commands/clauses.rs @@ -210,9 +210,7 @@ fn write_json(ctx: &Ctx, value: &T) -> anyhow::Result<()> { fn render_binding_human(report: &ClauseBindingReport) -> String { let mut out = format!( "Clause set {}/{}/{}\n", - report.clause_set.authority, - report.clause_set.id, - report.clause_set.version + report.clause_set.authority, report.clause_set.id, report.clause_set.version ); for clause in &report.clauses { out.push_str(&format!( diff --git a/tests/fixtures/assurance/v1.json b/tests/fixtures/assurance/v1.json index f3488ec..9c23044 100644 --- a/tests/fixtures/assurance/v1.json +++ b/tests/fixtures/assurance/v1.json @@ -1 +1 @@ -{"format":"quire-assurance","format_version":1,"source":{"repository":"agent-ix/fixture","revision":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"modules":[{"name":"assurance-fixture","version":"1.2.3","schemas":[{"archetype":"FR"},{"archetype":"NFR"},{"archetype":"StR"}]}],"artifacts":[{"id":"FR-001","artifact_type":"FR","locator":{"path":"FR-001.md","line":1}},{"id":"FR-002","artifact_type":"FR","locator":{"path":"FR-002.md","line":1}},{"id":"StR-001","artifact_type":"StR","locator":{"path":"StR-001.md","line":1}}],"obligations":[{"source":"acceptance-criterion","id":"FR-001-AC-1","document":"FR-001.md","statement":"The assurance export preserves the linked requirement.","method":"Test","target_ids":["TC-136"],"locator":{"path":"FR-001.md","line":18}},{"source":"acceptance-criterion","id":"FR-002-AC-1","document":"FR-002.md","statement":"The assurance export preserves the missing relation state.","method":"Inspection","target_ids":[],"locator":{"path":"FR-002.md","line":13}}],"symbols":[{"id":"0ebc7940c7d308a4e705773d389b3e9a386b173132faa2ae19c4248dc7f9ba76","language":"rust","kind":"test_function","qualified_name":"evidence_binding","container":null,"capabilities":["verifies"],"locator":{"path":"src/lib.rs","line":6}},{"id":"a6912a41c300742ae2b687af3ad18dd589940ee5a6a5e4fb7395090ae4c805e4","language":"rust","kind":"function","qualified_name":"production_binding","container":null,"capabilities":["implements"],"locator":{"path":"src/lib.rs","line":2}}],"relation_kinds":[{"kind":"implements","availability":"available","sources":["trace_binding","observed"]},{"kind":"owned_by","availability":"available","sources":["required_relation"]},{"kind":"references","availability":"available","sources":["observed"]},{"kind":"satisfies","availability":"available","sources":["required_relation","observed"]},{"kind":"verifies","availability":"available","sources":["trace_binding","observed"]}],"relations":[{"kind":"corpus","source":"FR-001","target":"StR-001","edge_type":"references","resolution":"resolved","locator":{"path":"FR-001.md","line":6},"freshness":"not_applicable"},{"kind":"corpus","source":"FR-001","target":"StR-001","edge_type":"satisfies","resolution":"resolved","locator":{"path":"FR-001.md","line":6},"freshness":"not_applicable"},{"kind":"corpus","source":"FR-001","target":"StR-999","edge_type":"references","resolution":"dangling","locator":{"path":"FR-001.md","line":8},"freshness":"not_applicable"},{"kind":"verifies","source":"0ebc7940c7d308a4e705773d389b3e9a386b173132faa2ae19c4248dc7f9ba76","target":"FR-001-AC-1","form":"rust-trace-attribute","provenance":"canonical","locator":{"path":"src/lib.rs","line":6},"freshness":"unknown"},{"kind":"verifies","source":"0ebc7940c7d308a4e705773d389b3e9a386b173132faa2ae19c4248dc7f9ba76","target":"TC-136","form":"rust-trace-attribute","provenance":"canonical","locator":{"path":"src/lib.rs","line":6},"freshness":"unknown"},{"kind":"implements","source":"a6912a41c300742ae2b687af3ad18dd589940ee5a6a5e4fb7395090ae4c805e4","target":"FR-001","form":"rust-implements-attribute","locator":{"path":"src/lib.rs","line":2},"freshness":"not_applicable"}],"relation_observations":[{"declaration":"fr-has-need","subject":"FR-001","availability":"available","freshness":"not_applicable"},{"declaration":"fr-has-need","subject":"FR-002","availability":"missing","freshness":"not_applicable"},{"declaration":"fr-has-need","subject":"unreadable.md","availability":"unknown","freshness":"unknown","reason":"stream did not contain valid UTF-8"},{"declaration":"nfr-has-owner","availability":"not_applicable","freshness":"not_applicable"},{"declaration":"nfr-has-owner","subject":"unreadable.md","availability":"unknown","freshness":"unknown","reason":"stream did not contain valid UTF-8"}]} +{"format":"quire-assurance","format_version":1,"source":{"repository":"agent-ix/fixture","revision":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"modules":[{"name":"assurance-fixture","version":"1.2.3","schemas":[{"archetype":"FR"},{"archetype":"NFR"},{"archetype":"StR"}]}],"artifacts":[{"id":"FR-001","artifact_type":"FR","locator":{"path":"FR-001.md","line":1}},{"id":"FR-002","artifact_type":"FR","locator":{"path":"FR-002.md","line":1}},{"id":"StR-001","artifact_type":"StR","locator":{"path":"StR-001.md","line":1}}],"obligations":[{"source":"acceptance-criterion","id":"FR-001-AC-1","document":"FR-001.md","statement":"The assurance export preserves the linked requirement.","method":"Test","target_ids":["TC-136"],"locator":{"path":"FR-001.md","line":18}},{"source":"acceptance-criterion","id":"FR-002-AC-1","document":"FR-002.md","statement":"The assurance export preserves the missing relation state.","method":"Inspection","target_ids":[],"locator":{"path":"FR-002.md","line":13}}],"symbols":[{"id":"[\"rust\",\"src/lib.rs\",\"evidence_binding\",\"test_function\"]","language":"rust","kind":"test_function","qualified_name":"evidence_binding","container":null,"capabilities":["verifies"],"locator":{"path":"src/lib.rs","line":6}},{"id":"[\"rust\",\"src/lib.rs\",\"production_binding\",\"function\"]","language":"rust","kind":"function","qualified_name":"production_binding","container":null,"capabilities":["implements"],"locator":{"path":"src/lib.rs","line":2}}],"relation_kinds":[{"kind":"implements","availability":"available","sources":["trace_binding","observed"]},{"kind":"owned_by","availability":"available","sources":["required_relation"]},{"kind":"references","availability":"available","sources":["observed"]},{"kind":"satisfies","availability":"available","sources":["required_relation","observed"]},{"kind":"verifies","availability":"available","sources":["trace_binding","observed"]}],"relations":[{"kind":"corpus","source":"FR-001","target":"StR-001","edge_type":"references","resolution":"resolved","locator":{"path":"FR-001.md","line":6},"freshness":"not_applicable"},{"kind":"corpus","source":"FR-001","target":"StR-001","edge_type":"satisfies","resolution":"resolved","locator":{"path":"FR-001.md","line":6},"freshness":"not_applicable"},{"kind":"corpus","source":"FR-001","target":"StR-999","edge_type":"references","resolution":"dangling","locator":{"path":"FR-001.md","line":8},"freshness":"not_applicable"},{"kind":"verifies","source":"[\"rust\",\"src/lib.rs\",\"evidence_binding\",\"test_function\"]","target":"FR-001-AC-1","form":"rust-trace-attribute","provenance":"canonical","locator":{"path":"src/lib.rs","line":6},"freshness":"unknown"},{"kind":"verifies","source":"[\"rust\",\"src/lib.rs\",\"evidence_binding\",\"test_function\"]","target":"TC-136","form":"rust-trace-attribute","provenance":"canonical","locator":{"path":"src/lib.rs","line":6},"freshness":"unknown"},{"kind":"implements","source":"[\"rust\",\"src/lib.rs\",\"production_binding\",\"function\"]","target":"FR-001","form":"rust-implements-attribute","locator":{"path":"src/lib.rs","line":2},"freshness":"not_applicable"}],"relation_observations":[{"declaration":"fr-has-need","subject":"FR-001","availability":"available","freshness":"not_applicable"},{"declaration":"fr-has-need","subject":"FR-002","availability":"missing","freshness":"not_applicable"},{"declaration":"fr-has-need","subject":"unreadable.md","availability":"unknown","freshness":"unknown","reason":"stream did not contain valid UTF-8"},{"declaration":"nfr-has-owner","availability":"not_applicable","freshness":"not_applicable"},{"declaration":"nfr-has-owner","subject":"unreadable.md","availability":"unknown","freshness":"unknown","reason":"stream did not contain valid UTF-8"}]}