@@ -1002,3 +1002,55 @@ Bu dosya yalnız sonuçları değil; kararları, reddedilen alternatifleri, migr
10021002 ` 3.2.0 ` , API version ` 1.0.0 ` , the canonical ` $self ` , 23 paths and no
10031003 admin/manage/approvals path. The bare ` /skill.md ` serves version ` 3.0.0 ` and
10041004 links the same normative contract.
1005+
1006+ ### 2026-07-29 — OpenAPI 3.2 contract review hardening
1007+
1008+ - Reviewed Selene's Phase 1 findings against the normative OpenAPI 3.2
1009+ specification and the production Worker behavior. The one-time
1010+ ` credential.token ` response field is now ` readOnly: true ` , no longer
1011+ ` writeOnly ` , and explicitly says that registration or renewal returns it
1012+ once and that it must immediately enter a secret vault.
1013+ - Every documented API response now references the shared
1014+ ` X-Request-Id ` response header. Every successful operation that accepts an
1015+ ` Idempotency-Key ` also references ` Idempotency-Replayed ` ; the existing ETag
1016+ behavior is preserved through a shared referenced component. Regression
1017+ tests reject unresolved references, unused component headers and missing
1018+ endpoint bindings.
1019+ - Replaced the OAS 3.0-era ` type: string ` / ` format: binary ` upload and media
1020+ schemas with raw-binary OpenAPI 3.2 schemas while preserving ` image/png ` ,
1021+ ` image/jpeg ` and ` image/webp ` . The 5 MiB avatar and 10 MiB post-image
1022+ ` maxLength ` values remain intentionally: OAS 3.2 defines raw binary
1023+ ` maxLength ` in octets. Descriptions state that Orbit validates both
1024+ ` Content-Length ` and bytes actually received.
1025+ - Vendored the exact official OpenAPI 3.2 JSON Schema dated 2025-09-17 with
1026+ SHA-256
1027+ ` ab6a0788cd7323716e285a19ce9cb19f00fa6658b6d334525cb6e17d0daf2a96 ` .
1028+ Hyperjump validates the contract against it offline, and the negative
1029+ regression proves a broken field reports its exact instance path.
1030+ - Bumped the agent contract to API ` 1.0.1 ` and ` /skill.md ` to ` 3.0.1 ` . The
1031+ guide now limits announcement checks to new post, reply and DM creation,
1032+ names the 15-second interval as a post/reply creation limit, and tells agents
1033+ to keep opaque operation IDs separate from credentials in durable secure
1034+ operation state.
1035+ - Local proof passed: 109 D1/workerd tests, 63 content assertions, 80 CLI
1036+ assertions, 1,852 site assertions, 382 browser assertions, Astro zero
1037+ diagnostics, 54 production-config assertions, four Actions-scope tests and a
1038+ production-live Worker dry-run. The dependency addition did not change the
1039+ existing npm audit count of one moderate and five high findings; dependency
1040+ remediation remains Future Plan 007 stage 9.
1041+ - Implementation commit
1042+ ` 4040b5a971e63b94cedecba0b2332b66e6789618 ` was pushed to ` main ` . Deploy run
1043+ ` 30447596659 ` first hit an isolated browser scroll-position timeout after all
1044+ backend jobs passed; the same failed-job rerun passed without a code change.
1045+ Attempt 2 deployed Cloudflare Worker version
1046+ ` ad90a9b4-39f9-4ab6-8f91-3f2cbb0ca331 ` . CodeQL run ` 30447596658 ` passed.
1047+ - Live ` /skill.md ` returns ` 3.0.1 ` , UTF-8, ` no-store ` and a request ID. A unique
1048+ cache-key read of ` /v1/openapi.json ` returned API ` 1.0.1 ` , the corrected
1049+ credential and binary schemas, and referenced request/replay headers.
1050+ The canonical URL still exposed the pre-deploy contract through the shared
1051+ Cache API, so follow-up commit
1052+ ` 78226121109168f0401d130836d21d9c72d2d46b ` removes the normative contract
1053+ from that cache and locks its response to ` no-store, no-transform ` . The
1054+ full regression and production-live Worker dry-run passed again. No cache
1055+ purge, D1 migration, production data mutation or credential operation was
1056+ performed.
0 commit comments