Skip to content

conformance: OCI VCN verdict vectors from the common fixture + integration contract - #62

Merged
sinkog merged 1 commit into
mainfrom
feat/vcn-integration-contract
Oct 21, 2026
Merged

sinkog merged 1 commit into
mainfrom
feat/vcn-integration-contract

Conversation

@sinkog

@sinkog sinkog commented Oct 21, 2026

Copy link
Copy Markdown
Member

Stage 5 of the Intent -> Observed -> Conformance -> Evidence VCN slice. No crate code changed.

  • Vendors cic-factory fixtures/vcn-v1 (commit e5978f50, PR cic-factory#37) unchanged into fixtures/vcn-v1 with its MANIFEST; fixtures/make_vcn_vectors.py --check verifies the manifest, the derived inputs and that each pinned verdict equals the fixture's per-path/object verdict.
  • Nine differential vectors conformance/differential/verdict/vcn_* (same format as oci_*), run by both the Rust and Go harnesses: per-path and object verdicts equal the fixture's; digests and canonical bytes are the engine's, Rust and Go agree byte for byte.
  • docs/INTEGRATION-CONTRACT.md: what the environment supplies, what the engine returns, how absent/unobserved/unknown are treated, the pinned digests, a 'not exercised' list, status per statement.

Findings recorded in the contract (not fixed here): (1) a path that is in the plan but not declared by the intent gives NOT_COMPARABLE (object DRIFT) when a value is observed, while the OCI module treats absent-in-desired as unmanaged; (2) element identities are the union of intent and observed, so an observed-only tag is a path of its own and is UNOBSERVED unless its coverage is listed; (3) unknown and unobserved give the same verdict (only the observation digest differs).

Local: cargo +stable fmt/clippy -D warnings, cargo test --workspace, go vet, go test -race ./... all pass; the vectors fail when a pinned verdict is edited. The receipt verifier is already on main (#61); the contract describes it as such.

… integration contract

Nine differential vectors (conformant, drift, field-absent, desired-absent, desired-absent-observed-present, partial-read,
malformed-cidr, not-found, transport-error) derived from the vendored cic-factory fixtures/vcn-v1; per-path and object verdicts equal
the fixture's, digests and canonical bytes are the engine's and Rust and Go agree byte for byte. docs/INTEGRATION-CONTRACT.md states
what the environment supplies and what the engine returns, with the open question about planned-but-undeclared paths. No crate code
changed.

---
[signing-metadata]
key = cic-my-sign-key
signature = vault:v1:MEUCIQDYQkuEkilEZ/NqB9hJSqDXpwzoNu4BOZZNWUSB+hbSoQIgFgI0fVCNIUMFiS6/dYNxo7FszPGAXpITcOzwyT+5+T8=
hash-algorithm = sha256
digest = I780svv+V6cQuSWoIKegxf+uOPWVyQGxPeaa86rnWoY=

[certificate]
-----BEGIN CERTIFICATE-----
MIICBjCCAaygAwIBAgIUSnRMR6RPnEbg296XWPOqq/u5PCwwCgYIKoZIzj0EAwIw
QzELMAkGA1UEBhMCSFUxGTAXBgNVBAoMEENlbnRyYWxJbmZyYUNvcmUxGTAXBgNV
BAMMEENJQyBEZXZlbG9wZXIgQ0EwHhcNMjYwMzIwMTMyMjU5WhcNMjYxMjMxMTMy
MjU5WjBFMQswCQYDVQQGEwJIVTEZMBcGA1UECgwQQ2VudHJhbEluZnJhQ29yZTEb
MBkGA1UEAwwSR2Fib3IgWm9sdGFuIFNpbmtvMFkwEwYHKoZIzj0CAQYIKoZIzj0D
AQcDQgAEIG2CVmTfmLB9pLLclj7YmP2eedAjklpy4LGrU2ijoiy6Xqpuybv7OgJe
i+ez31s65NEV8+X/ByeX1cstR988z6N8MHowCQYDVR0TBAIwADAdBgNVHQ4EFgQU
yZN6AIX/TNnIJ9GwAa/NRN3ujHAwHwYDVR0jBBgwFoAUXn6CHYzPUqU4JVP8g+OS
WeDYjhcwDgYDVR0PAQH/BAQDAgeAMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEF
BQcDBDAKBggqhkjOPQQDAgNIADBFAiEA+bFzXRoJ4PCQbhAAtpkcMjt0vNj5rEW0
lOMBGDNyaWkCIB1vmM7PcZzv/c9bIrxF5kqv6QXomouhByUfeNUTbpKW
-----END CERTIFICATE-----
@sinkog
sinkog merged commit d0e6aa0 into main Oct 21, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant