Skip to content

execute production-correctness (OCI version prefix + async) + semantic effective_config (P0.4) - #11

Merged
sinkog merged 2 commits into
mainfrom
devel
Jul 19, 2026
Merged

execute production-correctness (OCI version prefix + async) + semantic effective_config (P0.4)#11
sinkog merged 2 commits into
mainfrom
devel

Conversation

@sinkog

@sinkog sinkog commented Jul 19, 2026

Copy link
Copy Markdown
Member
  • base_path + async — execBinding.base_path prepends the OCI API version prefix (e.g. /20160918) to every op path; a 202 / opc-work-request-id yields an "accepted" result carrying work_request_id to poll (not a false success).
  • semantic effective_config — observe completes effective_config with hand-authored correspondences (module/correspondence/*.json): input-only→output derivations like isIpv6Enabled ← non-empty ipv6CidrBlocks, kept separate from the generated schema so oci.generate stays idempotent. name↔ID resolution and host-side satisfies remain out (documented).

Full CI green (36 tests, including the real crypto relay-integration).

Gábor Z Sinkó added 2 commits July 19, 2026 19:27
… + async Work Requests

Two fixes that make execute/observe/destroy/invoke usable against real OCI:

- execBinding.base_path: the OCI API version prefix (e.g. /20160918 for core) is
  prepended to every operation path via opPath(). Without it the URL was
  https://host/vcns instead of https://host/20160918/vcns. The canonical string
  and the wire path both use the full path, so signing stays consistent.
- Async Work Requests: a 202 (or an opc-work-request-id header) is not a
  completion — execute surfaces work_request_id on the step and marks the overall
  result "accepted" (not "succeeded"), so the caller polls the Work Request to a
  terminal state instead of assuming done. poll already GETs a work-request path.

Backward compatible: an empty base_path prepends nothing. Test
TestExecuteAsyncAndBasePath covers both (URL prefixing + accepted/work_request_id).

Full local CI green (golang.quality, wasm.build/integrity/test full suite, check,
verify-release, manifest, pytest).

---
[signing-metadata]
key = cic-my-sign-key
signature = vault:v1:MEUCIEKSbIS7nr1o7ENwe6yUJwm66ClqszxDMMggNNPg5EQSAiEA26Kc8mb39tm6tS1lQaGniG2DJGzxqSArSbGPjAjuzts=
hash-algorithm = sha256
digest = WW5P/rreiC1gT639lpe4s7Hdq19LXC7UGmPfzcG25FA=

[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-----
…ns (P0.4)

observe now completes effective_config with hand-authored semantic
correspondences the SDK tags cannot express, so it is truly comparable to intent.

- module/correspondence/vcn.json: derivations {field, from, rule}. First real
  rule: isIpv6Enabled (input-only) is derived from a non-empty ipv6CidrBlocks
  (output-only) — enabled iff the list is non-empty. Without it a reconciler sees
  false drift against an intent that sets isIpv6Enabled.
- correspondence.go: embeds the contracts (lazy-parsed, //go:embed), applies
  derivations in observe after the structural projection. Rules: bool-from-nonempty,
  bool-invert, rename. Hand-authored + reviewed as code, separate from the
  generated schema so `make oci.generate` stays idempotent.
- Honest scope: name↔ID resolution (intent name → observed OCID) needs a provider
  lookup and stays out; host-side satisfies() is P4.1.

TestObserve asserts the derived isIpv6Enabled. Roadmap P0.4 → mostly done. Full
local CI green.

---
[signing-metadata]
key = cic-my-sign-key
signature = vault:v1:MEUCIQDgRW/OUwZAW1h/VbM5ebbvc8wIHp0ZC3ocL5iv317UaQIgeqssTn+OAOozAHLfTxF/mi0hgQGRRKT6jxGME5teR3c=
hash-algorithm = sha256
digest = QNwVbwLheoomYp0ggGmLWBfVn1AbaR65mLu1vd2jD5Q=

[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 870c24e into main Jul 19, 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