diff --git a/.gitignore b/.gitignore index 33803f22..fa5db7b3 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,8 @@ scripts/uploads/ *.tsbuildinfo .DS_Store .wrangler/ +# Disposable local Cloudflare/Miniflare state and Python bytecode. +packages/runtime-cloudflare/.bricks-local-state-*/ +packages/runtime-cloudflare/scripts/__pycache__/ +# Generated local native API credentials/config; export only compact receipts. +packages/runtime-cloudflare/outputs/native-api-prepared*/ diff --git a/outputs/bricks-native-api-local-rehearsal/README.md b/outputs/bricks-native-api-local-rehearsal/README.md new file mode 100644 index 00000000..22eb6577 --- /dev/null +++ b/outputs/bricks-native-api-local-rehearsal/README.md @@ -0,0 +1,11 @@ +# Native Bricks API local rehearsal + +Actual Build producer and writer at `db6717f419bfd848296db4eb193b77ff91db4e0a` called the local Cloudflare Worker, D1 and R2 emulator. The Worker ran PHP-WASM 8.5 and the original agency-provided Bricks 2.4-rc ZIP, SHA-256 `a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887`. Every Bricks vendor file in this allocation was extracted directly from that ZIP. The SQLite alias correction is a separate checked-in runtime materialization patch. + +The source allocation started with no native documents or uploads. Provision committed revision 2, revision committed 3, a stale base returned HTTP 409, and restore committed NEW revision 4 with the original native document hashes and design-system version. Each operation passed the real Build writer terminal-receipt validator, byte-equivalent idempotent replay, operation polling, and public heading observation. `receipt.json` contains the exact requests and receipts. `artifact.json` is the staged original native artifact. + +After stopping and restarting Wrangler, `cold-reopen.json` confirms the saved operation receipt, restored native heading, loaded images, and desktop/mobile rendering. Screenshots were inspected. This is a deliberately minimal API fixture with two one-pixel image instances, not a customer design or a visual parity acceptance result. The authored font-family CSS is present; the fixture does not bundle the requested webfont binaries. + +All native receipts remain `draft`, with null protected preview, false editor qualification, and all five client-acceptance steps `not_run`. No Bricks license activation or actual visual-editor acceptance occurred. Programmatic native save and rollback proof does not replace the licensed editor transaction. + +Validation: package TypeScript build, seven focused artifact/admission tests, actual local PHP integration, and existing canary Wrangler deployment dry run passed. No remote deployment or customer site mutation was performed for this local API proof. diff --git a/outputs/bricks-native-api-local-rehearsal/artifact.json b/outputs/bricks-native-api-local-rehearsal/artifact.json new file mode 100644 index 00000000..ae441ff0 --- /dev/null +++ b/outputs/bricks-native-api-local-rehearsal/artifact.json @@ -0,0 +1 @@ +{"assets":[{"alt_text":"Bright and Kind Cleaning","bytes":68,"content_base64":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=","filename":"bright-kind.png","logical_id":"brand-mark","mime_type":"image/png","sha256":"431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460"}],"design_system":{"global_classes":[{"id":"section-shell","name":"Section shell","settings":{"_padding":{"bottom":"clamp(4rem,8vw,9rem)","left":"2rem","right":"2rem","top":"clamp(4rem,8vw,9rem)"}},"sha256":"7cad43bd6e7652de1c992d4d34969f4d6d4e4e80196bead2a1af6e7cd2fd1029"}],"global_variables":[{"id":"space-l","name":"Space L","sha256":"f1737a9fed1c8662fc016baff35f6cad6fd4535da2b70ead09a28edf70a094ac","type":"string","value":"4rem"}],"palette":[{"id":"brand","name":"Kind Blue","value":"#2B6F8A"},{"id":"accent","name":"Warm Gold","value":"#F0B44D"}],"theme_style":{"settings":{},"sha256":"61600e5912f22f7566b4371b4d0e0b89747ffbde3853f6435b63a441c5655a1a"},"typography":{"body_font_family":"Inter","heading_font_family":"Fraunces","root_font_size":"62.5%"},"version":"design-system-1"},"documents":{"pages":[{"elements":[{"children":[{"children":[{"children":[],"id":"hero-heading","name":"heading","settings":{"tag":"h1","text":"A brighter home"}},{"children":[],"id":"hero-copy","name":"text-basic","settings":{"tag":"p","text":"A clean home, handled with care."}},{"children":[],"id":"hero-image","name":"image","settings":{"image":{"asset_ref":"brand-mark","size":"full"}}}],"id":"hero","name":"section","settings":{"_cssGlobalClasses":["section-shell"]}},{"children":[{"children":[],"id":"services-heading","name":"heading","settings":{"tag":"h2","text":"Cleaning services"}},{"children":[],"id":"services-copy","name":"text-basic","settings":{"tag":"p","text":"Recurring, deep, and move-out cleaning."}}],"id":"services","name":"section","settings":{"_cssGlobalClasses":["section-shell"]}},{"children":[{"children":[],"id":"trust-heading","name":"heading","settings":{"tag":"h2","text":"Kind people, careful work"}},{"children":[],"id":"trust-copy","name":"text-basic","settings":{"tag":"p","text":"Local professionals who respect your space."}}],"id":"trust","name":"section","settings":{"_cssGlobalClasses":["section-shell"]}},{"children":[{"children":[],"id":"contact-heading","name":"heading","settings":{"tag":"h2","text":"Request an estimate"}},{"children":[],"id":"contact-copy","name":"text-basic","settings":{"tag":"p","text":"Tell us what you need and we will prepare an estimate."}}],"id":"contact","name":"section","settings":{"_cssGlobalClasses":["section-shell"]}}],"id":"home-main","name":"container","settings":{"tag":"main"}}],"logical_id":"home","sha256":"1ee9a15f673e4952905db62eb8bd6c9d622507283668c9af2e3ccb01047b834e","slug":"home","status":"publish","title":"Bright and Kind Cleaning"}],"templates":[{"conditions":[{"main":"any"}],"elements":[{"children":[{"children":[],"id":"header-logo","name":"image","settings":{"image":{"asset_ref":"brand-mark","size":"full"}}},{"children":[],"id":"header-name","name":"text-basic","settings":{"tag":"span","text":"Bright and Kind Cleaning"}}],"id":"header-shell","name":"section","settings":{"tag":"header"}}],"logical_id":"site-header","sha256":"ce05a59acf2c231e9ec75e8ee9fac41ce32bde043765ea269449f2ccfafebc7b","status":"publish","title":"Site Header","type":"header"},{"conditions":[{"main":"any"}],"elements":[{"children":[{"children":[],"id":"footer-copy","name":"text-basic","settings":{"tag":"p","text":"Bright and Kind Cleaning"}}],"id":"footer-shell","name":"section","settings":{"tag":"footer"}}],"logical_id":"site-footer","sha256":"9e355a90b0b11ac633abae4116c291e59c3cff8776ebce15513197bcfac2758d","status":"publish","title":"Site Footer","type":"footer"}]},"editing":{"acceptance_sequence":["edit","publish","public_observation","restore","reopen"],"granularity":"native_bricks_elements","target_role":{"required_capabilities":["bricks_edit_content"],"role_slug":"editor"}},"evidence_inputs":{"authorized_asset_hashes":["431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460"],"creative_provenance":{"canonicalCommit":"db6717f419bfd848296db4eb193b77ff91db4e0a","catalogSha256":"3333333333333333333333333333333333333333333333333333333333333333","guideSha256":"2222222222222222222222222222222222222222222222222222222222222222","references":[{"id":"bright-kind-cleaning","sha256":"4444444444444444444444444444444444444444444444444444444444444444"}],"version":"2026-09-10-v1"},"dossier":{"revision":3,"sha256":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}},"runtime":{"sha256":"a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887","version":"2.4-rc"},"schema":"wp-codebox/bricks-site-artifact/v1","site":{"customer_id":"customer_417","site_id":"default","starter_id":"starter_native_service_v1","title":"Bright and Kind Cleaning"}} \ No newline at end of file diff --git a/outputs/bricks-native-api-local-rehearsal/cold-reopen.json b/outputs/bricks-native-api-local-rehearsal/cold-reopen.json new file mode 100644 index 00000000..fa155ed8 --- /dev/null +++ b/outputs/bricks-native-api-local-rehearsal/cold-reopen.json @@ -0,0 +1,62 @@ +{ + "status": "cold-native-receipt-and-public-render-passed", + "origin": "http://127.0.0.1:8812", + "restored_revision": { + "receipt_id": "native_034982672dcf4ec899496b92fc5c3da8", + "canonical_state_version": 4, + "canonical_state_revision": "d207bbb4-18f3-489b-820d-c1271fe14129", + "canonical_manifest_key": "sites/default/markdown/revisions/d207bbb4-18f3-489b-820d-c1271fe14129.json", + "canonical_persisted_at": "2026-09-10T18:50:09.925Z", + "artifact_sha256": "b916dfffb1a57060f939af43ba77069a0d33dbe584535fddd8de35596c2e33fb", + "native_document_hashes": [ + "cc42b781c2c2b32c78acd4e758a8c74fd955880cd84689c4a6f0c49edf970a01", + "85c48820d25bbe844b4e0dbc90b76b09bd891c48071169704b76748b8ec33c18", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "b93203b5ad218393a954a9f15a1829628d9a2f433ce060e9b1ad120a6ebd5776" + ], + "design_system_version": "design-system-1" + }, + "observations": [ + { + "viewport": "desktop", + "status": 200, + "heading": "A brighter home", + "nativeElements": 19, + "images": [ + { + "src": "http://127.0.0.1:8812/wp-content/uploads/2026/09/bright-kind.png", + "loaded": true, + "width": 1 + }, + { + "src": "http://127.0.0.1:8812/wp-content/uploads/2026/09/bright-kind.png", + "loaded": true, + "width": 1 + } + ], + "overflow": false, + "screenshot_sha256": "178aff9e141fedc73031db6afa9f86ae12abc62484a69364251276c85c42af7f" + }, + { + "viewport": "mobile", + "status": 200, + "heading": "A brighter home", + "nativeElements": 19, + "images": [ + { + "src": "http://127.0.0.1:8812/wp-content/uploads/2026/09/bright-kind.png", + "loaded": true, + "width": 1 + }, + { + "src": "http://127.0.0.1:8812/wp-content/uploads/2026/09/bright-kind.png", + "loaded": true, + "width": 1 + } + ], + "overflow": false, + "screenshot_sha256": "48ba45100bcf35061938707ad430093f425d506b5037ce637472ef0baff8ff4a" + } + ], + "qualification": "Programmatic native API proof only; licensed visual editor not run." +} diff --git a/outputs/bricks-native-api-local-rehearsal/desktop.png b/outputs/bricks-native-api-local-rehearsal/desktop.png new file mode 100644 index 00000000..e910548a Binary files /dev/null and b/outputs/bricks-native-api-local-rehearsal/desktop.png differ diff --git a/outputs/bricks-native-api-local-rehearsal/mobile.png b/outputs/bricks-native-api-local-rehearsal/mobile.png new file mode 100644 index 00000000..cb9f38c5 Binary files /dev/null and b/outputs/bricks-native-api-local-rehearsal/mobile.png differ diff --git a/outputs/bricks-native-api-local-rehearsal/receipt.json b/outputs/bricks-native-api-local-rehearsal/receipt.json new file mode 100644 index 00000000..394b0e0a --- /dev/null +++ b/outputs/bricks-native-api-local-rehearsal/receipt.json @@ -0,0 +1,772 @@ +{ + "status": "real-local-native-provision-revise-restore-passed", + "buildCommit": "db6717f419bfd848296db4eb193b77ff91db4e0a", + "origin": "http://127.0.0.1:8812", + "staleRejected": true, + "results": [ + { + "action": "provision", + "request": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "operation_id": "build_native_v3_provision", + "idempotency_key": "build_native_v3_provision", + "site_id": "default", + "customer_id": "customer_417", + "bricks_artifact": { + "version": "wp-codebox/bricks-site-artifact/v1", + "sha256": "b916dfffb1a57060f939af43ba77069a0d33dbe584535fddd8de35596c2e33fb" + }, + "runtime_artifact": { + "version": "2.4-rc", + "sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887" + }, + "dossier": { + "revision": 3, + "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + }, + "creative_provenance": { + "canonicalCommit": "db6717f419bfd848296db4eb193b77ff91db4e0a", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ], + "version": "2026-09-10-v1" + }, + "authorized_assets": [ + { + "sha256": "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460", + "usage_status": "approved" + } + ], + "starter_id": "starter_native_service_v1", + "editing": { + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "granularity": "native_bricks_elements", + "target_role": { + "required_capabilities": [ + "bricks_edit_content" + ], + "role_slug": "editor" + } + }, + "license_secret_ref": "BRICKS_LICENSE_KEY", + "revision_receipt": { + "receipt_id": null, + "canonical_state_version": null, + "canonical_state_revision": null, + "canonical_manifest_key": null, + "canonical_persisted_at": null, + "artifact_sha256": null, + "native_document_hashes": null, + "design_system_version": null + }, + "rollback_receipt": { + "required": true, + "receipt_id": null, + "canonical_state_version": null, + "canonical_state_revision": null, + "canonical_manifest_key": null, + "canonical_persisted_at": null, + "artifact_sha256": null, + "native_document_hashes": null, + "design_system_version": null + }, + "protected_preview": { + "state": "requested", + "access": "agency_managed", + "url": null + } + }, + "operation": { + "id": "build_native_v3_provision", + "siteId": "default", + "state": "succeeded", + "stage": "prepared-allocation-native-documents-committed", + "progress": 100, + "retryAt": null, + "error": null, + "receipt": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "action": "provision", + "operation_id": "build_native_v3_provision", + "target_request_sha256": "da5ac9204693475e2bb258c02c1d5385ae18aa256da6780002dd270ba9d998a3", + "site_id": "default", + "customer_id": "customer_417", + "state": "draft", + "site_allocation": { + "allocation_id": "default", + "canonical_state_revision": "5a401507-02c1-4e8c-872c-cc214b4076e8" + }, + "native_records": { + "page_ids": [ + 2 + ], + "template_ids": [ + 4, + 6 + ], + "media_ids": [ + 1 + ] + }, + "native_document_hashes": [ + "cc42b781c2c2b32c78acd4e758a8c74fd955880cd84689c4a6f0c49edf970a01", + "85c48820d25bbe844b4e0dbc90b76b09bd891c48071169704b76748b8ec33c18", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "b93203b5ad218393a954a9f15a1829628d9a2f433ce060e9b1ad120a6ebd5776" + ], + "design_system_version": "design-system-1", + "bricks_artifact_sha256": "b916dfffb1a57060f939af43ba77069a0d33dbe584535fddd8de35596c2e33fb", + "dossier_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + "creative_provenance": { + "version": "2026-09-10-v1", + "canonicalCommit": "db6717f419bfd848296db4eb193b77ff91db4e0a", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ] + }, + "authorized_asset_hashes": [ + "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460" + ], + "target_role": { + "role_slug": "editor", + "required_capabilities": [ + "bricks_edit_content" + ], + "editability_verified": false + }, + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "protected_preview": { + "state": "requested", + "url": null + }, + "acceptance_results": [ + { + "step": "edit", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "publish", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "public_observation", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "restore", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "reopen", + "status": "not_run", + "evidence_sha256": null + } + ], + "acceptance_transaction_sha256": null, + "deployment": { + "version": "local-native-api-rehearsal", + "runtime_artifact_version": "2.4-rc", + "runtime_artifact_sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "artifact_hashes": [ + "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "b916dfffb1a57060f939af43ba77069a0d33dbe584535fddd8de35596c2e33fb" + ] + }, + "evidence": { + "desktop_sha256": null, + "mobile_sha256": null, + "client_edit_transaction_sha256": null, + "resource_measurements_sha256": "50ef8322ff945c280aad077c4494389be26dd0a052f9941442cd1d67166f1d8f" + }, + "revision_receipt": { + "receipt_id": "native_28a13bbf3a9341de94f2a7c1a924e480", + "canonical_state_version": 2, + "canonical_state_revision": "5a401507-02c1-4e8c-872c-cc214b4076e8", + "canonical_manifest_key": "sites/default/markdown/revisions/5a401507-02c1-4e8c-872c-cc214b4076e8.json", + "canonical_persisted_at": "2026-09-10T18:50:04.108Z", + "artifact_sha256": "b916dfffb1a57060f939af43ba77069a0d33dbe584535fddd8de35596c2e33fb", + "native_document_hashes": [ + "cc42b781c2c2b32c78acd4e758a8c74fd955880cd84689c4a6f0c49edf970a01", + "85c48820d25bbe844b4e0dbc90b76b09bd891c48071169704b76748b8ec33c18", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "b93203b5ad218393a954a9f15a1829628d9a2f433ce060e9b1ad120a6ebd5776" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "receipt_id": null, + "canonical_state_version": null, + "canonical_state_revision": null, + "canonical_manifest_key": null, + "canonical_persisted_at": null, + "artifact_sha256": null, + "native_document_hashes": null, + "design_system_version": null + }, + "restoration": null + } + }, + "public_heading_observed": "A brighter home", + "idempotent_replay": true, + "poll_verified": true + }, + { + "action": "revise", + "request": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "operation_id": "build_native_v3_revise", + "idempotency_key": "build_native_v3_revise", + "site_id": "default", + "customer_id": "customer_417", + "bricks_artifact": { + "version": "wp-codebox/bricks-site-artifact/v1", + "sha256": "29982ab5624346955b0d935f9febee64429ee6ebd17f2905639a3ab0a41b05db" + }, + "runtime_artifact": { + "version": "2.4-rc", + "sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887" + }, + "dossier": { + "revision": 3, + "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + }, + "creative_provenance": { + "canonicalCommit": "db6717f419bfd848296db4eb193b77ff91db4e0a", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ], + "version": "2026-09-10-v1" + }, + "authorized_assets": [ + { + "sha256": "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460", + "usage_status": "approved" + } + ], + "starter_id": "starter_native_service_v1", + "editing": { + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "granularity": "native_bricks_elements", + "target_role": { + "required_capabilities": [ + "bricks_edit_content" + ], + "role_slug": "editor" + } + }, + "license_secret_ref": "BRICKS_LICENSE_KEY", + "revision_receipt": { + "receipt_id": "native_28a13bbf3a9341de94f2a7c1a924e480", + "canonical_state_version": 2, + "canonical_state_revision": "5a401507-02c1-4e8c-872c-cc214b4076e8", + "canonical_manifest_key": "sites/default/markdown/revisions/5a401507-02c1-4e8c-872c-cc214b4076e8.json", + "canonical_persisted_at": "2026-09-10T18:50:04.108Z", + "artifact_sha256": "b916dfffb1a57060f939af43ba77069a0d33dbe584535fddd8de35596c2e33fb", + "native_document_hashes": [ + "cc42b781c2c2b32c78acd4e758a8c74fd955880cd84689c4a6f0c49edf970a01", + "85c48820d25bbe844b4e0dbc90b76b09bd891c48071169704b76748b8ec33c18", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "b93203b5ad218393a954a9f15a1829628d9a2f433ce060e9b1ad120a6ebd5776" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "required": true, + "receipt_id": "native_28a13bbf3a9341de94f2a7c1a924e480", + "canonical_state_version": 2, + "canonical_state_revision": "5a401507-02c1-4e8c-872c-cc214b4076e8", + "canonical_manifest_key": "sites/default/markdown/revisions/5a401507-02c1-4e8c-872c-cc214b4076e8.json", + "canonical_persisted_at": "2026-09-10T18:50:04.108Z", + "artifact_sha256": "b916dfffb1a57060f939af43ba77069a0d33dbe584535fddd8de35596c2e33fb", + "native_document_hashes": [ + "cc42b781c2c2b32c78acd4e758a8c74fd955880cd84689c4a6f0c49edf970a01", + "85c48820d25bbe844b4e0dbc90b76b09bd891c48071169704b76748b8ec33c18", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "b93203b5ad218393a954a9f15a1829628d9a2f433ce060e9b1ad120a6ebd5776" + ], + "design_system_version": "design-system-1" + }, + "protected_preview": { + "state": "requested", + "access": "agency_managed", + "url": null + } + }, + "operation": { + "id": "build_native_v3_revise", + "siteId": "default", + "state": "succeeded", + "stage": "prepared-allocation-native-documents-committed", + "progress": 100, + "retryAt": null, + "error": null, + "receipt": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "action": "revise", + "operation_id": "build_native_v3_revise", + "target_request_sha256": "1cc213485fb80ff3649ab85a6dda4e02ef9bdc1070cc880000bdc4064d38f5a9", + "site_id": "default", + "customer_id": "customer_417", + "state": "draft", + "site_allocation": { + "allocation_id": "default", + "canonical_state_revision": "1f3f895f-9568-444d-8a8c-c2a820f08026" + }, + "native_records": { + "page_ids": [ + 2 + ], + "template_ids": [ + 4, + 6 + ], + "media_ids": [ + 1 + ] + }, + "native_document_hashes": [ + "f36333b5ab85e5bba08bc5732036c01d6fd06438b30245e15ca684de17664c82", + "85c48820d25bbe844b4e0dbc90b76b09bd891c48071169704b76748b8ec33c18", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "c88dab5d9acbb6be26773209f7b6a48b25bfde34e29bded1cd5d17d63eff1961" + ], + "design_system_version": "design-system-1", + "bricks_artifact_sha256": "29982ab5624346955b0d935f9febee64429ee6ebd17f2905639a3ab0a41b05db", + "dossier_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + "creative_provenance": { + "version": "2026-09-10-v1", + "canonicalCommit": "db6717f419bfd848296db4eb193b77ff91db4e0a", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ] + }, + "authorized_asset_hashes": [ + "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460" + ], + "target_role": { + "role_slug": "editor", + "required_capabilities": [ + "bricks_edit_content" + ], + "editability_verified": false + }, + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "protected_preview": { + "state": "requested", + "url": null + }, + "acceptance_results": [ + { + "step": "edit", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "publish", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "public_observation", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "restore", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "reopen", + "status": "not_run", + "evidence_sha256": null + } + ], + "acceptance_transaction_sha256": null, + "deployment": { + "version": "local-native-api-rehearsal", + "runtime_artifact_version": "2.4-rc", + "runtime_artifact_sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "artifact_hashes": [ + "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "29982ab5624346955b0d935f9febee64429ee6ebd17f2905639a3ab0a41b05db" + ] + }, + "evidence": { + "desktop_sha256": null, + "mobile_sha256": null, + "client_edit_transaction_sha256": null, + "resource_measurements_sha256": "5e5595172f152e2ef353741506cae0005fa0f17cf6655075e26c9cf0ca0f0dc6" + }, + "revision_receipt": { + "receipt_id": "native_6056be701de2437c976fbd1a7477b44b", + "canonical_state_version": 3, + "canonical_state_revision": "1f3f895f-9568-444d-8a8c-c2a820f08026", + "canonical_manifest_key": "sites/default/markdown/revisions/1f3f895f-9568-444d-8a8c-c2a820f08026.json", + "canonical_persisted_at": "2026-09-10T18:50:07.213Z", + "artifact_sha256": "29982ab5624346955b0d935f9febee64429ee6ebd17f2905639a3ab0a41b05db", + "native_document_hashes": [ + "f36333b5ab85e5bba08bc5732036c01d6fd06438b30245e15ca684de17664c82", + "85c48820d25bbe844b4e0dbc90b76b09bd891c48071169704b76748b8ec33c18", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "c88dab5d9acbb6be26773209f7b6a48b25bfde34e29bded1cd5d17d63eff1961" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "receipt_id": "native_28a13bbf3a9341de94f2a7c1a924e480", + "canonical_state_version": 2, + "canonical_state_revision": "5a401507-02c1-4e8c-872c-cc214b4076e8", + "canonical_manifest_key": "sites/default/markdown/revisions/5a401507-02c1-4e8c-872c-cc214b4076e8.json", + "canonical_persisted_at": "2026-09-10T18:50:04.108Z", + "artifact_sha256": "b916dfffb1a57060f939af43ba77069a0d33dbe584535fddd8de35596c2e33fb", + "native_document_hashes": [ + "cc42b781c2c2b32c78acd4e758a8c74fd955880cd84689c4a6f0c49edf970a01", + "85c48820d25bbe844b4e0dbc90b76b09bd891c48071169704b76748b8ec33c18", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "b93203b5ad218393a954a9f15a1829628d9a2f433ce060e9b1ad120a6ebd5776" + ], + "design_system_version": "design-system-1" + }, + "restoration": null + } + }, + "public_heading_observed": "Native API revised heading", + "idempotent_replay": true, + "poll_verified": true + }, + { + "action": "restore", + "request": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "operation_id": "build_native_v3_restore", + "idempotency_key": "build_native_v3_restore", + "site_id": "default", + "customer_id": "customer_417", + "bricks_artifact": { + "version": "wp-codebox/bricks-site-artifact/v1", + "sha256": "b916dfffb1a57060f939af43ba77069a0d33dbe584535fddd8de35596c2e33fb" + }, + "runtime_artifact": { + "version": "2.4-rc", + "sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887" + }, + "dossier": { + "revision": 3, + "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + }, + "creative_provenance": { + "canonicalCommit": "db6717f419bfd848296db4eb193b77ff91db4e0a", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ], + "version": "2026-09-10-v1" + }, + "authorized_assets": [ + { + "sha256": "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460", + "usage_status": "approved" + } + ], + "starter_id": "starter_native_service_v1", + "editing": { + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "granularity": "native_bricks_elements", + "target_role": { + "required_capabilities": [ + "bricks_edit_content" + ], + "role_slug": "editor" + } + }, + "license_secret_ref": "BRICKS_LICENSE_KEY", + "revision_receipt": { + "receipt_id": "native_6056be701de2437c976fbd1a7477b44b", + "canonical_state_version": 3, + "canonical_state_revision": "1f3f895f-9568-444d-8a8c-c2a820f08026", + "canonical_manifest_key": "sites/default/markdown/revisions/1f3f895f-9568-444d-8a8c-c2a820f08026.json", + "canonical_persisted_at": "2026-09-10T18:50:07.213Z", + "artifact_sha256": "29982ab5624346955b0d935f9febee64429ee6ebd17f2905639a3ab0a41b05db", + "native_document_hashes": [ + "f36333b5ab85e5bba08bc5732036c01d6fd06438b30245e15ca684de17664c82", + "85c48820d25bbe844b4e0dbc90b76b09bd891c48071169704b76748b8ec33c18", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "c88dab5d9acbb6be26773209f7b6a48b25bfde34e29bded1cd5d17d63eff1961" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "required": true, + "receipt_id": "native_28a13bbf3a9341de94f2a7c1a924e480", + "canonical_state_version": 2, + "canonical_state_revision": "5a401507-02c1-4e8c-872c-cc214b4076e8", + "canonical_manifest_key": "sites/default/markdown/revisions/5a401507-02c1-4e8c-872c-cc214b4076e8.json", + "canonical_persisted_at": "2026-09-10T18:50:04.108Z", + "artifact_sha256": "b916dfffb1a57060f939af43ba77069a0d33dbe584535fddd8de35596c2e33fb", + "native_document_hashes": [ + "cc42b781c2c2b32c78acd4e758a8c74fd955880cd84689c4a6f0c49edf970a01", + "85c48820d25bbe844b4e0dbc90b76b09bd891c48071169704b76748b8ec33c18", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "b93203b5ad218393a954a9f15a1829628d9a2f433ce060e9b1ad120a6ebd5776" + ], + "design_system_version": "design-system-1" + }, + "protected_preview": { + "state": "requested", + "access": "agency_managed", + "url": null + } + }, + "operation": { + "id": "build_native_v3_restore", + "siteId": "default", + "state": "succeeded", + "stage": "prepared-allocation-native-documents-committed", + "progress": 100, + "retryAt": null, + "error": null, + "receipt": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "action": "restore", + "operation_id": "build_native_v3_restore", + "target_request_sha256": "3b87260f155ba5874928718c6a32551be19d8cc57574c0d642ef5e714dd1e0aa", + "site_id": "default", + "customer_id": "customer_417", + "state": "draft", + "site_allocation": { + "allocation_id": "default", + "canonical_state_revision": "d207bbb4-18f3-489b-820d-c1271fe14129" + }, + "native_records": { + "page_ids": [ + 2 + ], + "template_ids": [ + 4, + 6 + ], + "media_ids": [ + 1 + ] + }, + "native_document_hashes": [ + "cc42b781c2c2b32c78acd4e758a8c74fd955880cd84689c4a6f0c49edf970a01", + "85c48820d25bbe844b4e0dbc90b76b09bd891c48071169704b76748b8ec33c18", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "b93203b5ad218393a954a9f15a1829628d9a2f433ce060e9b1ad120a6ebd5776" + ], + "design_system_version": "design-system-1", + "bricks_artifact_sha256": "b916dfffb1a57060f939af43ba77069a0d33dbe584535fddd8de35596c2e33fb", + "dossier_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + "creative_provenance": { + "version": "2026-09-10-v1", + "canonicalCommit": "db6717f419bfd848296db4eb193b77ff91db4e0a", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ] + }, + "authorized_asset_hashes": [ + "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460" + ], + "target_role": { + "role_slug": "editor", + "required_capabilities": [ + "bricks_edit_content" + ], + "editability_verified": false + }, + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "protected_preview": { + "state": "requested", + "url": null + }, + "acceptance_results": [ + { + "step": "edit", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "publish", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "public_observation", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "restore", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "reopen", + "status": "not_run", + "evidence_sha256": null + } + ], + "acceptance_transaction_sha256": null, + "deployment": { + "version": "local-native-api-rehearsal", + "runtime_artifact_version": "2.4-rc", + "runtime_artifact_sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "artifact_hashes": [ + "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "b916dfffb1a57060f939af43ba77069a0d33dbe584535fddd8de35596c2e33fb" + ] + }, + "evidence": { + "desktop_sha256": null, + "mobile_sha256": null, + "client_edit_transaction_sha256": null, + "resource_measurements_sha256": "7239c4b02419a5a6da0bb28e2c297ea8ce39ae5d554995a4883398e3ed8a2ed1" + }, + "revision_receipt": { + "receipt_id": "native_034982672dcf4ec899496b92fc5c3da8", + "canonical_state_version": 4, + "canonical_state_revision": "d207bbb4-18f3-489b-820d-c1271fe14129", + "canonical_manifest_key": "sites/default/markdown/revisions/d207bbb4-18f3-489b-820d-c1271fe14129.json", + "canonical_persisted_at": "2026-09-10T18:50:09.925Z", + "artifact_sha256": "b916dfffb1a57060f939af43ba77069a0d33dbe584535fddd8de35596c2e33fb", + "native_document_hashes": [ + "cc42b781c2c2b32c78acd4e758a8c74fd955880cd84689c4a6f0c49edf970a01", + "85c48820d25bbe844b4e0dbc90b76b09bd891c48071169704b76748b8ec33c18", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "b93203b5ad218393a954a9f15a1829628d9a2f433ce060e9b1ad120a6ebd5776" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "receipt_id": "native_6056be701de2437c976fbd1a7477b44b", + "canonical_state_version": 3, + "canonical_state_revision": "1f3f895f-9568-444d-8a8c-c2a820f08026", + "canonical_manifest_key": "sites/default/markdown/revisions/1f3f895f-9568-444d-8a8c-c2a820f08026.json", + "canonical_persisted_at": "2026-09-10T18:50:07.213Z", + "artifact_sha256": "29982ab5624346955b0d935f9febee64429ee6ebd17f2905639a3ab0a41b05db", + "native_document_hashes": [ + "f36333b5ab85e5bba08bc5732036c01d6fd06438b30245e15ca684de17664c82", + "85c48820d25bbe844b4e0dbc90b76b09bd891c48071169704b76748b8ec33c18", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "c88dab5d9acbb6be26773209f7b6a48b25bfde34e29bded1cd5d17d63eff1961" + ], + "design_system_version": "design-system-1" + }, + "restoration": { + "restore_receipt_id": "restore_b8943805263043a5acde7b9c4b729847", + "restored_from": { + "receipt_id": "native_28a13bbf3a9341de94f2a7c1a924e480", + "canonical_state_version": 2, + "canonical_state_revision": "5a401507-02c1-4e8c-872c-cc214b4076e8", + "canonical_manifest_key": "sites/default/markdown/revisions/5a401507-02c1-4e8c-872c-cc214b4076e8.json", + "canonical_persisted_at": "2026-09-10T18:50:04.108Z", + "artifact_sha256": "b916dfffb1a57060f939af43ba77069a0d33dbe584535fddd8de35596c2e33fb", + "native_document_hashes": [ + "cc42b781c2c2b32c78acd4e758a8c74fd955880cd84689c4a6f0c49edf970a01", + "85c48820d25bbe844b4e0dbc90b76b09bd891c48071169704b76748b8ec33c18", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "b93203b5ad218393a954a9f15a1829628d9a2f433ce060e9b1ad120a6ebd5776" + ], + "design_system_version": "design-system-1" + }, + "pre_restore_base": { + "receipt_id": "native_6056be701de2437c976fbd1a7477b44b", + "canonical_state_version": 3, + "canonical_state_revision": "1f3f895f-9568-444d-8a8c-c2a820f08026", + "canonical_manifest_key": "sites/default/markdown/revisions/1f3f895f-9568-444d-8a8c-c2a820f08026.json", + "canonical_persisted_at": "2026-09-10T18:50:07.213Z", + "artifact_sha256": "29982ab5624346955b0d935f9febee64429ee6ebd17f2905639a3ab0a41b05db", + "native_document_hashes": [ + "f36333b5ab85e5bba08bc5732036c01d6fd06438b30245e15ca684de17664c82", + "85c48820d25bbe844b4e0dbc90b76b09bd891c48071169704b76748b8ec33c18", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "c88dab5d9acbb6be26773209f7b6a48b25bfde34e29bded1cd5d17d63eff1961" + ], + "design_system_version": "design-system-1" + } + } + } + }, + "public_heading_observed": "A brighter home", + "idempotent_replay": true, + "poll_verified": true + } + ] +} diff --git a/outputs/bricks-native-api-remote-rehearsal/README.md b/outputs/bricks-native-api-remote-rehearsal/README.md new file mode 100644 index 00000000..a998ed7d --- /dev/null +++ b/outputs/bricks-native-api-remote-rehearsal/README.md @@ -0,0 +1,23 @@ +# Remote native Bricks API fixture rehearsal + +The real Build artifact producer and writer drove the existing isolated Cloudflare Worker, D1 and R2 through native provision, revision, stale-base rejection, restore, idempotent replay, operation polling and authenticated preview observation. This is a fixture API proof, not an AI-generated customer site or licensed editor acceptance. + +- Native source: `2f851aa1` on `codex/bricks-cloudflare-native`. +- Namespace: `native-api`, isolated from the original default canary and customer resources. +- Canonical versions: provision 3, revise 4, restore 5. Restore creates a new revision with the original native content hashes. +- Final preview Worker version: `5e5b9b92-3593-494b-83be-9fda4b7348cc`. +- A fresh Worker version reconstructed the restored content from D1/R2 and rendered desktop and mobile: 19 native elements, two loaded fixture images, no horizontal overflow. Screenshots were inspected. +- Unauthorized preview returns 401, stale preview 409, preview POST 405, and the raw native hostname 404. All use private/no-store responses. +- The original provision receipt remains an immutable historical draft. Later revision and restore receipts advertise the authenticated protected preview. No receipt claims accepted/published or verified client editing. + +The failures during remote qualification were resolved by preparing a verified restore pack outside Worker requests, preserving the immutable runtime package during native mutations, releasing PHP before packing changed canonical state, and disabling OPCache file caching for reconstructed native runtimes. The final source retains normal PHP rendering; no custom HTML substitute, stdout workaround, warning-assisted editor route or license bypass is used. + +`receipt.json` contains exact native operation receipts, source/artifact hashes, actual PHP peak memory and wall observations, access checks, state pointers and the original normal deployment check. Preview aliases do not expose Worker logs, so CPU, resident isolate peak and detailed operation counts remain unmeasured here. The final artifact producer provenance is retained separately from runtime source identity. + +The fixture intentionally uses placeholder pixel media and no bundled fonts. Its sparse screenshots demonstrate native rendering and reconstruction mechanics; they are not customer design evidence. A legitimate agency-owned Bricks license is still absent, so the real visual editor and Editor-role edit/publish/observe/restore/reopen transaction remain unqualified. + +The separate `native-engine` allocation was handed to the parent and BUILD/T for the actual generated-site product flow using final Worker preview version `a4c5d612-4d6a-4599-ad19-3bd7d80b45b3`. It was empty at handoff. Existing customer static preview and public default canonical state were not changed by this rehearsal. + +Validation: package TypeScript build, 144 runtime tests, two package boundary tests, and all 14 focused native/preview tests pass. The full package command was attempted; its canonical MDI seed-regeneration test cannot run because the host has no `php` executable. The 144-test run excludes that single host-PHP check. Actual local PHP-WASM and remote Worker rehearsals ran successfully. Desktop and mobile screenshots are byte-identical before and after the final Worker version upload. + +A second empty allocation, `native-sales-rehearsal`, was subsequently prepared for the actual sales-service rehearsal and handed to its session. Its preview version is `b9d0203a-c61c-45d6-ae05-fce04c87ed69`, with seed version 1/revision `8be31b29-8405-4649-b212-3ea77e4c0660`. Both follow-up namespaces share the disposable canary resources while retaining separate canonical state and credentials. diff --git a/outputs/bricks-native-api-remote-rehearsal/artifact.json b/outputs/bricks-native-api-remote-rehearsal/artifact.json new file mode 100644 index 00000000..c0692004 --- /dev/null +++ b/outputs/bricks-native-api-remote-rehearsal/artifact.json @@ -0,0 +1 @@ +{"assets":[{"alt_text":"Bright and Kind Cleaning","bytes":68,"content_base64":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=","filename":"bright-kind.png","logical_id":"brand-mark","mime_type":"image/png","sha256":"431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460"}],"design_system":{"global_classes":[{"id":"section-shell","name":"Section shell","settings":{"_padding":{"bottom":"clamp(4rem,8vw,9rem)","left":"2rem","right":"2rem","top":"clamp(4rem,8vw,9rem)"}},"sha256":"7cad43bd6e7652de1c992d4d34969f4d6d4e4e80196bead2a1af6e7cd2fd1029"}],"global_variables":[{"id":"space-l","name":"Space L","sha256":"f1737a9fed1c8662fc016baff35f6cad6fd4535da2b70ead09a28edf70a094ac","type":"string","value":"4rem"}],"palette":[{"id":"brand","name":"Kind Blue","value":"#2B6F8A"},{"id":"accent","name":"Warm Gold","value":"#F0B44D"}],"theme_style":{"settings":{},"sha256":"61600e5912f22f7566b4371b4d0e0b89747ffbde3853f6435b63a441c5655a1a"},"typography":{"body_font_family":"Inter","heading_font_family":"Fraunces","root_font_size":"62.5%"},"version":"design-system-1"},"documents":{"pages":[{"elements":[{"children":[{"children":[{"children":[],"id":"hero-heading","name":"heading","settings":{"tag":"h1","text":"A brighter home"}},{"children":[],"id":"hero-copy","name":"text-basic","settings":{"tag":"p","text":"A clean home, handled with care."}},{"children":[],"id":"hero-image","name":"image","settings":{"image":{"asset_ref":"brand-mark","size":"full"}}}],"id":"hero","name":"section","settings":{"_cssGlobalClasses":["section-shell"]}},{"children":[{"children":[],"id":"services-heading","name":"heading","settings":{"tag":"h2","text":"Cleaning services"}},{"children":[],"id":"services-copy","name":"text-basic","settings":{"tag":"p","text":"Recurring, deep, and move-out cleaning."}}],"id":"services","name":"section","settings":{"_cssGlobalClasses":["section-shell"]}},{"children":[{"children":[],"id":"trust-heading","name":"heading","settings":{"tag":"h2","text":"Kind people, careful work"}},{"children":[],"id":"trust-copy","name":"text-basic","settings":{"tag":"p","text":"Local professionals who respect your space."}}],"id":"trust","name":"section","settings":{"_cssGlobalClasses":["section-shell"]}},{"children":[{"children":[],"id":"contact-heading","name":"heading","settings":{"tag":"h2","text":"Request an estimate"}},{"children":[],"id":"contact-copy","name":"text-basic","settings":{"tag":"p","text":"Tell us what you need and we will prepare an estimate."}}],"id":"contact","name":"section","settings":{"_cssGlobalClasses":["section-shell"]}}],"id":"home-main","name":"container","settings":{"tag":"main"}}],"logical_id":"home","sha256":"1ee9a15f673e4952905db62eb8bd6c9d622507283668c9af2e3ccb01047b834e","slug":"home","status":"publish","title":"Bright and Kind Cleaning"}],"templates":[{"conditions":[{"main":"any"}],"elements":[{"children":[{"children":[],"id":"header-logo","name":"image","settings":{"image":{"asset_ref":"brand-mark","size":"full"}}},{"children":[],"id":"header-name","name":"text-basic","settings":{"tag":"span","text":"Bright and Kind Cleaning"}}],"id":"header-shell","name":"section","settings":{"tag":"header"}}],"logical_id":"site-header","sha256":"ce05a59acf2c231e9ec75e8ee9fac41ce32bde043765ea269449f2ccfafebc7b","status":"publish","title":"Site Header","type":"header"},{"conditions":[{"main":"any"}],"elements":[{"children":[{"children":[],"id":"footer-copy","name":"text-basic","settings":{"tag":"p","text":"Bright and Kind Cleaning"}}],"id":"footer-shell","name":"section","settings":{"tag":"footer"}}],"logical_id":"site-footer","sha256":"9e355a90b0b11ac633abae4116c291e59c3cff8776ebce15513197bcfac2758d","status":"publish","title":"Site Footer","type":"footer"}]},"editing":{"acceptance_sequence":["edit","publish","public_observation","restore","reopen"],"granularity":"native_bricks_elements","target_role":{"required_capabilities":["bricks_edit_content"],"role_slug":"editor"}},"evidence_inputs":{"authorized_asset_hashes":["431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460"],"creative_provenance":{"canonicalCommit":"4a70be1400cbf3e32e05a7cda6a4ca35d28f1c21","catalogSha256":"3333333333333333333333333333333333333333333333333333333333333333","guideSha256":"2222222222222222222222222222222222222222222222222222222222222222","references":[{"id":"bright-kind-cleaning","sha256":"4444444444444444444444444444444444444444444444444444444444444444"}],"version":"2026-09-10-v1"},"dossier":{"revision":3,"sha256":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}},"runtime":{"sha256":"a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887","version":"2.4-rc"},"schema":"wp-codebox/bricks-site-artifact/v1","site":{"customer_id":"customer_417","site_id":"native-api","starter_id":"starter_native_service_v1","title":"Bright and Kind Cleaning"}} \ No newline at end of file diff --git a/outputs/bricks-native-api-remote-rehearsal/cold-reopen.json b/outputs/bricks-native-api-remote-rehearsal/cold-reopen.json new file mode 100644 index 00000000..34173f96 --- /dev/null +++ b/outputs/bricks-native-api-remote-rehearsal/cold-reopen.json @@ -0,0 +1,62 @@ +{ + "status": "cold-native-receipt-and-public-render-passed", + "origin": "https://native-api-bricks24-native-canary-20260910.mavnewlife.workers.dev", + "restored_revision": { + "receipt_id": "native_1e35568c9f48487b87bbffeeeaf43b31", + "canonical_state_version": 5, + "canonical_state_revision": "fca9766e-bfcb-4f66-9566-9535c334ce61", + "canonical_manifest_key": "sites/native-api/markdown/revisions/fca9766e-bfcb-4f66-9566-9535c334ce61.json", + "canonical_persisted_at": "2026-09-10T19:50:26.550Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "observations": [ + { + "viewport": "desktop", + "status": 200, + "heading": "A brighter home", + "nativeElements": 19, + "images": [ + { + "src": "https://native-api-bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_1e35568c9f48487b87bbffeeeaf43b31/wp-content/uploads/2026/09/bright-kind.png", + "loaded": true, + "width": 1 + }, + { + "src": "https://native-api-bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_1e35568c9f48487b87bbffeeeaf43b31/wp-content/uploads/2026/09/bright-kind.png", + "loaded": true, + "width": 1 + } + ], + "overflow": false, + "screenshot_sha256": "178aff9e141fedc73031db6afa9f86ae12abc62484a69364251276c85c42af7f" + }, + { + "viewport": "mobile", + "status": 200, + "heading": "A brighter home", + "nativeElements": 19, + "images": [ + { + "src": "https://native-api-bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_1e35568c9f48487b87bbffeeeaf43b31/wp-content/uploads/2026/09/bright-kind.png", + "loaded": true, + "width": 1 + }, + { + "src": "https://native-api-bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_1e35568c9f48487b87bbffeeeaf43b31/wp-content/uploads/2026/09/bright-kind.png", + "loaded": true, + "width": 1 + } + ], + "overflow": false, + "screenshot_sha256": "48ba45100bcf35061938707ad430093f425d506b5037ce637472ef0baff8ff4a" + } + ], + "qualification": "Programmatic native API proof only; licensed visual editor not run." +} diff --git a/outputs/bricks-native-api-remote-rehearsal/desktop.png b/outputs/bricks-native-api-remote-rehearsal/desktop.png new file mode 100644 index 00000000..e910548a Binary files /dev/null and b/outputs/bricks-native-api-remote-rehearsal/desktop.png differ diff --git a/outputs/bricks-native-api-remote-rehearsal/mobile.png b/outputs/bricks-native-api-remote-rehearsal/mobile.png new file mode 100644 index 00000000..cb9f38c5 Binary files /dev/null and b/outputs/bricks-native-api-remote-rehearsal/mobile.png differ diff --git a/outputs/bricks-native-api-remote-rehearsal/receipt.json b/outputs/bricks-native-api-remote-rehearsal/receipt.json new file mode 100644 index 00000000..c2b46ac7 --- /dev/null +++ b/outputs/bricks-native-api-remote-rehearsal/receipt.json @@ -0,0 +1,930 @@ +{ + "schema": "wp-codebox/native-bricks-remote-api-fixture-proof/v1", + "status": "remote_api_fixture_passed", + "verified_at": "2026-09-10T19:55:24.998069+00:00", + "runtime_source_commit": "2f851aa1", + "artifact_fixture_provenance_commit": "4a70be1400cbf3e32e05a7cda6a4ca35d28f1c21", + "worker": "bricks24-native-canary-20260910", + "api_origin": "https://native-api-bricks24-native-canary-20260910.mavnewlife.workers.dev", + "final_preview_version": "5e5b9b92-3593-494b-83be-9fda4b7348cc", + "engine_preview_version": "a4c5d612-4d6a-4599-ad19-3bd7d80b45b3", + "qualification": "Actual PHP/D1/R2 API fixture rehearsal. Not generated-site design acceptance or licensed visual-editor qualification.", + "stale_base_rejected": true, + "operations": [ + { + "action": "provision", + "request": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "operation_id": "build_native_v3_provision", + "idempotency_key": "build_native_v3_provision", + "site_id": "native-api", + "customer_id": "customer_417", + "bricks_artifact": { + "version": "wp-codebox/bricks-site-artifact/v1", + "sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9" + }, + "runtime_artifact": { + "version": "2.4-rc", + "sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887" + }, + "dossier": { + "revision": 3, + "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + }, + "creative_provenance": { + "canonicalCommit": "4a70be1400cbf3e32e05a7cda6a4ca35d28f1c21", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ], + "version": "2026-09-10-v1" + }, + "authorized_assets": [ + { + "sha256": "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460", + "usage_status": "approved" + } + ], + "starter_id": "starter_native_service_v1", + "editing": { + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "granularity": "native_bricks_elements", + "target_role": { + "required_capabilities": [ + "bricks_edit_content" + ], + "role_slug": "editor" + } + }, + "license_secret_ref": "BRICKS_LICENSE_KEY", + "revision_receipt": { + "receipt_id": null, + "canonical_state_version": null, + "canonical_state_revision": null, + "canonical_manifest_key": null, + "canonical_persisted_at": null, + "artifact_sha256": null, + "native_document_hashes": null, + "design_system_version": null + }, + "rollback_receipt": { + "required": true, + "receipt_id": null, + "canonical_state_version": null, + "canonical_state_revision": null, + "canonical_manifest_key": null, + "canonical_persisted_at": null, + "artifact_sha256": null, + "native_document_hashes": null, + "design_system_version": null + }, + "protected_preview": { + "state": "requested", + "access": "agency_managed", + "url": null + } + }, + "operation": { + "id": "build_native_v3_provision", + "siteId": "native-api", + "state": "succeeded", + "stage": "prepared-allocation-native-documents-committed", + "progress": 100, + "retryAt": null, + "error": null, + "receipt": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "action": "provision", + "operation_id": "build_native_v3_provision", + "target_request_sha256": "5a9640af5eb9de5465b7e7ed319aee1a5e2aa33169f4fd6498f1e4d20304ec62", + "site_id": "native-api", + "customer_id": "customer_417", + "state": "draft", + "site_allocation": { + "allocation_id": "native-api", + "canonical_state_revision": "f31e5182-3f6c-425d-8e44-45e9c72582d8" + }, + "native_records": { + "page_ids": [ + 2 + ], + "template_ids": [ + 4, + 6 + ], + "media_ids": [ + 1 + ] + }, + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1", + "bricks_artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "dossier_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + "creative_provenance": { + "version": "2026-09-10-v1", + "canonicalCommit": "4a70be1400cbf3e32e05a7cda6a4ca35d28f1c21", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ] + }, + "authorized_asset_hashes": [ + "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460" + ], + "target_role": { + "role_slug": "editor", + "required_capabilities": [ + "bricks_edit_content" + ], + "editability_verified": false + }, + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "protected_preview": { + "state": "requested", + "url": null + }, + "acceptance_results": [ + { + "step": "edit", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "publish", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "public_observation", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "restore", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "reopen", + "status": "not_run", + "evidence_sha256": null + } + ], + "acceptance_transaction_sha256": null, + "deployment": { + "version": "25138cb2-b0d1-4bb1-9907-9377e6b1750a", + "runtime_artifact_version": "2.4-rc", + "runtime_artifact_sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "artifact_hashes": [ + "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9" + ] + }, + "evidence": { + "desktop_sha256": null, + "mobile_sha256": null, + "client_edit_transaction_sha256": null, + "resource_measurements_sha256": "1e78085f75cc56fa31b00183441ee8c5b7058a870abbd805a193f52b7c5ad916" + }, + "revision_receipt": { + "receipt_id": "native_6301627d54854736949b9426d3800b58", + "canonical_state_version": 3, + "canonical_state_revision": "f31e5182-3f6c-425d-8e44-45e9c72582d8", + "canonical_manifest_key": "sites/native-api/markdown/revisions/f31e5182-3f6c-425d-8e44-45e9c72582d8.json", + "canonical_persisted_at": "2026-09-10T19:23:17.479Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "receipt_id": null, + "canonical_state_version": null, + "canonical_state_revision": null, + "canonical_manifest_key": null, + "canonical_persisted_at": null, + "artifact_sha256": null, + "native_document_hashes": null, + "design_system_version": null + }, + "restoration": null + } + }, + "public_heading_observed": "A brighter home", + "preview_url": "https://native-api-bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_6301627d54854736949b9426d3800b58/", + "idempotent_replay": true, + "poll_verified": true + }, + { + "action": "revise", + "request": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "operation_id": "build_native_v3_revise", + "idempotency_key": "build_native_v3_revise", + "site_id": "native-api", + "customer_id": "customer_417", + "bricks_artifact": { + "version": "wp-codebox/bricks-site-artifact/v1", + "sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36" + }, + "runtime_artifact": { + "version": "2.4-rc", + "sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887" + }, + "dossier": { + "revision": 3, + "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + }, + "creative_provenance": { + "canonicalCommit": "4a70be1400cbf3e32e05a7cda6a4ca35d28f1c21", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ], + "version": "2026-09-10-v1" + }, + "authorized_assets": [ + { + "sha256": "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460", + "usage_status": "approved" + } + ], + "starter_id": "starter_native_service_v1", + "editing": { + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "granularity": "native_bricks_elements", + "target_role": { + "required_capabilities": [ + "bricks_edit_content" + ], + "role_slug": "editor" + } + }, + "license_secret_ref": "BRICKS_LICENSE_KEY", + "revision_receipt": { + "receipt_id": "native_6301627d54854736949b9426d3800b58", + "canonical_state_version": 3, + "canonical_state_revision": "f31e5182-3f6c-425d-8e44-45e9c72582d8", + "canonical_manifest_key": "sites/native-api/markdown/revisions/f31e5182-3f6c-425d-8e44-45e9c72582d8.json", + "canonical_persisted_at": "2026-09-10T19:23:17.479Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "required": true, + "receipt_id": "native_6301627d54854736949b9426d3800b58", + "canonical_state_version": 3, + "canonical_state_revision": "f31e5182-3f6c-425d-8e44-45e9c72582d8", + "canonical_manifest_key": "sites/native-api/markdown/revisions/f31e5182-3f6c-425d-8e44-45e9c72582d8.json", + "canonical_persisted_at": "2026-09-10T19:23:17.479Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "protected_preview": { + "state": "requested", + "access": "agency_managed", + "url": null + } + }, + "operation": { + "id": "build_native_v3_revise", + "siteId": "native-api", + "state": "succeeded", + "stage": "prepared-allocation-native-documents-committed", + "progress": 100, + "retryAt": null, + "error": null, + "receipt": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "action": "revise", + "operation_id": "build_native_v3_revise", + "target_request_sha256": "5d354f69d3c235824d253aee2a436aa729f390acccfe732d5d8e6340eae44d8d", + "site_id": "native-api", + "customer_id": "customer_417", + "state": "protected_preview", + "site_allocation": { + "allocation_id": "native-api", + "canonical_state_revision": "45ed8549-d275-4c5a-b5ca-1661df413ae4" + }, + "native_records": { + "page_ids": [ + 2 + ], + "template_ids": [ + 4, + 6 + ], + "media_ids": [ + 1 + ] + }, + "native_document_hashes": [ + "0d1d5858922606e8fecfe329cbebafd30f6411f8d7be69f3bec111ef2339c27d", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "ee89e54367301805a9c0a281882f72c7b828ab6a38b1c46c1f62370fb8b8e9cb" + ], + "design_system_version": "design-system-1", + "bricks_artifact_sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "dossier_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + "creative_provenance": { + "version": "2026-09-10-v1", + "canonicalCommit": "4a70be1400cbf3e32e05a7cda6a4ca35d28f1c21", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ] + }, + "authorized_asset_hashes": [ + "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460" + ], + "target_role": { + "role_slug": "editor", + "required_capabilities": [ + "bricks_edit_content" + ], + "editability_verified": false + }, + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "protected_preview": { + "state": "ready", + "url": "https://native-api-bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_29b34efaf058427bb6dfc741058da5b0/" + }, + "acceptance_results": [ + { + "step": "edit", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "publish", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "public_observation", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "restore", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "reopen", + "status": "not_run", + "evidence_sha256": null + } + ], + "acceptance_transaction_sha256": null, + "deployment": { + "version": "bcfbba11-fbc2-4e3e-9e92-e0e0cc2dce5d", + "runtime_artifact_version": "2.4-rc", + "runtime_artifact_sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "artifact_hashes": [ + "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36" + ] + }, + "evidence": { + "desktop_sha256": null, + "mobile_sha256": null, + "client_edit_transaction_sha256": null, + "resource_measurements_sha256": "8f998bb9181708f5c0691cdc66f64f9f4d7c1d6b18d9b9b79d42ddc2e0884c1a" + }, + "revision_receipt": { + "receipt_id": "native_29b34efaf058427bb6dfc741058da5b0", + "canonical_state_version": 4, + "canonical_state_revision": "45ed8549-d275-4c5a-b5ca-1661df413ae4", + "canonical_manifest_key": "sites/native-api/markdown/revisions/45ed8549-d275-4c5a-b5ca-1661df413ae4.json", + "canonical_persisted_at": "2026-09-10T19:50:00.238Z", + "artifact_sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "native_document_hashes": [ + "0d1d5858922606e8fecfe329cbebafd30f6411f8d7be69f3bec111ef2339c27d", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "ee89e54367301805a9c0a281882f72c7b828ab6a38b1c46c1f62370fb8b8e9cb" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "receipt_id": "native_6301627d54854736949b9426d3800b58", + "canonical_state_version": 3, + "canonical_state_revision": "f31e5182-3f6c-425d-8e44-45e9c72582d8", + "canonical_manifest_key": "sites/native-api/markdown/revisions/f31e5182-3f6c-425d-8e44-45e9c72582d8.json", + "canonical_persisted_at": "2026-09-10T19:23:17.479Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "restoration": null + } + }, + "public_heading_observed": "Native API revised heading", + "preview_url": "https://native-api-bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_29b34efaf058427bb6dfc741058da5b0/", + "idempotent_replay": true, + "poll_verified": true + }, + { + "action": "restore", + "request": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "operation_id": "build_native_v3_restore", + "idempotency_key": "build_native_v3_restore", + "site_id": "native-api", + "customer_id": "customer_417", + "bricks_artifact": { + "version": "wp-codebox/bricks-site-artifact/v1", + "sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9" + }, + "runtime_artifact": { + "version": "2.4-rc", + "sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887" + }, + "dossier": { + "revision": 3, + "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + }, + "creative_provenance": { + "canonicalCommit": "4a70be1400cbf3e32e05a7cda6a4ca35d28f1c21", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ], + "version": "2026-09-10-v1" + }, + "authorized_assets": [ + { + "sha256": "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460", + "usage_status": "approved" + } + ], + "starter_id": "starter_native_service_v1", + "editing": { + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "granularity": "native_bricks_elements", + "target_role": { + "required_capabilities": [ + "bricks_edit_content" + ], + "role_slug": "editor" + } + }, + "license_secret_ref": "BRICKS_LICENSE_KEY", + "revision_receipt": { + "receipt_id": "native_29b34efaf058427bb6dfc741058da5b0", + "canonical_state_version": 4, + "canonical_state_revision": "45ed8549-d275-4c5a-b5ca-1661df413ae4", + "canonical_manifest_key": "sites/native-api/markdown/revisions/45ed8549-d275-4c5a-b5ca-1661df413ae4.json", + "canonical_persisted_at": "2026-09-10T19:50:00.238Z", + "artifact_sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "native_document_hashes": [ + "0d1d5858922606e8fecfe329cbebafd30f6411f8d7be69f3bec111ef2339c27d", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "ee89e54367301805a9c0a281882f72c7b828ab6a38b1c46c1f62370fb8b8e9cb" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "required": true, + "receipt_id": "native_6301627d54854736949b9426d3800b58", + "canonical_state_version": 3, + "canonical_state_revision": "f31e5182-3f6c-425d-8e44-45e9c72582d8", + "canonical_manifest_key": "sites/native-api/markdown/revisions/f31e5182-3f6c-425d-8e44-45e9c72582d8.json", + "canonical_persisted_at": "2026-09-10T19:23:17.479Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "protected_preview": { + "state": "requested", + "access": "agency_managed", + "url": null + } + }, + "operation": { + "id": "build_native_v3_restore", + "siteId": "native-api", + "state": "succeeded", + "stage": "prepared-allocation-native-documents-committed", + "progress": 100, + "retryAt": null, + "error": null, + "receipt": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "action": "restore", + "operation_id": "build_native_v3_restore", + "target_request_sha256": "4c74609fd8f4a3c9481731e64c92f50adc9d06ab15bb5dd0d7eaa53fd9a6ef9f", + "site_id": "native-api", + "customer_id": "customer_417", + "state": "protected_preview", + "site_allocation": { + "allocation_id": "native-api", + "canonical_state_revision": "fca9766e-bfcb-4f66-9566-9535c334ce61" + }, + "native_records": { + "page_ids": [ + 2 + ], + "template_ids": [ + 4, + 6 + ], + "media_ids": [ + 1 + ] + }, + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1", + "bricks_artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "dossier_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + "creative_provenance": { + "version": "2026-09-10-v1", + "canonicalCommit": "4a70be1400cbf3e32e05a7cda6a4ca35d28f1c21", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ] + }, + "authorized_asset_hashes": [ + "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460" + ], + "target_role": { + "role_slug": "editor", + "required_capabilities": [ + "bricks_edit_content" + ], + "editability_verified": false + }, + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "protected_preview": { + "state": "ready", + "url": "https://native-api-bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_1e35568c9f48487b87bbffeeeaf43b31/" + }, + "acceptance_results": [ + { + "step": "edit", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "publish", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "public_observation", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "restore", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "reopen", + "status": "not_run", + "evidence_sha256": null + } + ], + "acceptance_transaction_sha256": null, + "deployment": { + "version": "bcfbba11-fbc2-4e3e-9e92-e0e0cc2dce5d", + "runtime_artifact_version": "2.4-rc", + "runtime_artifact_sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "artifact_hashes": [ + "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9" + ] + }, + "evidence": { + "desktop_sha256": null, + "mobile_sha256": null, + "client_edit_transaction_sha256": null, + "resource_measurements_sha256": "d48202f775f14c14bd3d69bdfedc1d55d4b5ef27633589473691d6aece9b3aa9" + }, + "revision_receipt": { + "receipt_id": "native_1e35568c9f48487b87bbffeeeaf43b31", + "canonical_state_version": 5, + "canonical_state_revision": "fca9766e-bfcb-4f66-9566-9535c334ce61", + "canonical_manifest_key": "sites/native-api/markdown/revisions/fca9766e-bfcb-4f66-9566-9535c334ce61.json", + "canonical_persisted_at": "2026-09-10T19:50:26.550Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "receipt_id": "native_29b34efaf058427bb6dfc741058da5b0", + "canonical_state_version": 4, + "canonical_state_revision": "45ed8549-d275-4c5a-b5ca-1661df413ae4", + "canonical_manifest_key": "sites/native-api/markdown/revisions/45ed8549-d275-4c5a-b5ca-1661df413ae4.json", + "canonical_persisted_at": "2026-09-10T19:50:00.238Z", + "artifact_sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "native_document_hashes": [ + "0d1d5858922606e8fecfe329cbebafd30f6411f8d7be69f3bec111ef2339c27d", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "ee89e54367301805a9c0a281882f72c7b828ab6a38b1c46c1f62370fb8b8e9cb" + ], + "design_system_version": "design-system-1" + }, + "restoration": { + "restore_receipt_id": "restore_4f453c3f21a44bada9a75e549636d6b5", + "restored_from": { + "receipt_id": "native_6301627d54854736949b9426d3800b58", + "canonical_state_version": 3, + "canonical_state_revision": "f31e5182-3f6c-425d-8e44-45e9c72582d8", + "canonical_manifest_key": "sites/native-api/markdown/revisions/f31e5182-3f6c-425d-8e44-45e9c72582d8.json", + "canonical_persisted_at": "2026-09-10T19:23:17.479Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "pre_restore_base": { + "receipt_id": "native_29b34efaf058427bb6dfc741058da5b0", + "canonical_state_version": 4, + "canonical_state_revision": "45ed8549-d275-4c5a-b5ca-1661df413ae4", + "canonical_manifest_key": "sites/native-api/markdown/revisions/45ed8549-d275-4c5a-b5ca-1661df413ae4.json", + "canonical_persisted_at": "2026-09-10T19:50:00.238Z", + "artifact_sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "native_document_hashes": [ + "0d1d5858922606e8fecfe329cbebafd30f6411f8d7be69f3bec111ef2339c27d", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "ee89e54367301805a9c0a281882f72c7b828ab6a38b1c46c1f62370fb8b8e9cb" + ], + "design_system_version": "design-system-1" + } + } + } + }, + "public_heading_observed": "A brighter home", + "preview_url": "https://native-api-bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_1e35568c9f48487b87bbffeeeaf43b31/", + "idempotent_replay": true, + "poll_verified": true + } + ], + "resource_measurements": [ + { + "action": "provision", + "sha256": "1e78085f75cc56fa31b00183441ee8c5b7058a870abbd805a193f52b7c5ad916", + "schema": "wp-codebox/native-bricks-resource-observation/v1", + "operation_id": "build_native_v3_provision", + "wall_ms": 15202, + "peak_php_bytes": 57147392, + "unmeasured": [ + "worker_cpu_ms", + "peak_isolate_bytes", + "d1_reads_writes", + "r2_operations", + "subrequests" + ] + }, + { + "action": "revise", + "sha256": "8f998bb9181708f5c0691cdc66f64f9f4d7c1d6b18d9b9b79d42ddc2e0884c1a", + "schema": "wp-codebox/native-bricks-resource-observation/v1", + "operation_id": "build_native_v3_revise", + "wall_ms": 15976, + "peak_php_bytes": 52953088, + "unmeasured": [ + "worker_cpu_ms", + "peak_isolate_bytes", + "d1_reads_writes", + "r2_operations", + "subrequests" + ] + }, + { + "action": "restore", + "sha256": "d48202f775f14c14bd3d69bdfedc1d55d4b5ef27633589473691d6aece9b3aa9", + "schema": "wp-codebox/native-bricks-resource-observation/v1", + "operation_id": "build_native_v3_restore", + "wall_ms": 7791, + "peak_php_bytes": 48758784, + "unmeasured": [ + "worker_cpu_ms", + "peak_isolate_bytes", + "d1_reads_writes", + "r2_operations", + "subrequests" + ] + } + ], + "preview_access": [ + { + "name": "raw-host", + "status": 404, + "cache_control": "private, no-store" + }, + { + "name": "no-credentials", + "status": 401, + "cache_control": "private, no-store" + }, + { + "name": "stale-preview", + "status": 409, + "cache_control": "private, no-store" + }, + { + "name": "write-preview", + "status": 405, + "cache_control": "private, no-store" + } + ], + "cold_preview_phase": { + "stage": "preview-disposed", + "revision": "fca9766e-bfcb-4f66-9566-9535c334ce61", + "deployment_version": "5e5b9b92-3593-494b-83be-9fda4b7348cc", + "wall_ms": 8693 + }, + "canonical_state": [ + { + "site_id": "default", + "revision": "11378c4e-5194-4f1a-ae87-a6c9f16087c9", + "manifest_key": "sites/default/markdown/revisions/11378c4e-5194-4f1a-ae87-a6c9f16087c9.json", + "persisted_at": "2026-09-10T07:35:35.441Z", + "version": 24 + }, + { + "site_id": "native-api", + "revision": "fca9766e-bfcb-4f66-9566-9535c334ce61", + "manifest_key": "sites/native-api/markdown/revisions/fca9766e-bfcb-4f66-9566-9535c334ce61.json", + "persisted_at": "2026-09-10T19:50:26.550Z", + "version": 5 + }, + { + "site_id": "native-engine", + "revision": "ee5555b1-c849-464e-83c5-064f7d359cce", + "manifest_key": "sites/native-engine/markdown/revisions/ee5555b1-c849-464e-83c5-064f7d359cce.json", + "persisted_at": "2026-09-10T19:08:39.332Z", + "version": 1 + } + ], + "normal_worker_deployment": { + "id": "9b2da5f5-53bc-4938-a294-38d0b1458f35", + "source": "wrangler", + "strategy": "percentage", + "author_email": "mavnewlife@gmail.com", + "annotations": { + "workers/triggered_by": "deployment" + }, + "versions": [ + { + "version_id": "a1e7ea0c-119f-490d-8112-f03aad1a050c", + "percentage": 100 + } + ], + "created_on": "2026-09-10T18:12:13.330467Z" + }, + "remaining": [ + "Agency Bricks license absent; actual licensed editor and Editor-role visual transaction not run.", + "Worker CPU, peak resident isolate bytes and operation counts unavailable on preview aliases; require logged canary deployment.", + "Fixture uses placeholder media and has no bundled fonts; screenshots prove native rendering mechanics, not customer design.", + "Actual product-engine generated-site flow is handed to BUILD/T using a separate empty native-engine allocation." + ], + "validation": { + "package_build": "passed", + "runtime_tests_passed": 144, + "package_boundary_tests_passed": 2, + "focused_native_preview_tests_passed": 14, + "not_run": [ + "Canonical MDI seed generator test requires unavailable host php executable." + ], + "screenshots_byte_identical_across_worker_versions": true + }, + "follow_up_allocations": [ + { + "site_id": "native-engine", + "worker_version": "a4c5d612-4d6a-4599-ad19-3bd7d80b45b3", + "empty_at_handoff": true, + "seed_version": 1, + "seed_revision": "ee5555b1-c849-464e-83c5-064f7d359cce", + "owner_after_handoff": "BUILD/T actual product engine rehearsal" + }, + { + "site_id": "native-sales-rehearsal", + "worker_version": "b9d0203a-c61c-45d6-ae05-fce04c87ed69", + "empty_at_handoff": true, + "seed_version": 1, + "seed_revision": "8be31b29-8405-4649-b212-3ea77e4c0660", + "owner_after_handoff": "OLE BLU sales-service rehearsal" + } + ] +} diff --git a/outputs/bricks-native-media-root-render/README.md b/outputs/bricks-native-media-root-render/README.md new file mode 100644 index 00000000..57a20196 --- /dev/null +++ b/outputs/bricks-native-media-root-render/README.md @@ -0,0 +1,11 @@ +# Native Bricks media rendering on Cloudflare + +The unmodified `packages/runtime-cloudflare/scripts/bricks-render-proof.mjs` passes against the normal canary root on desktop (1440px) and mobile (390px). Both render 42 native elements, four sections, and four loaded images with no horizontal overflow. Both screenshots were visually inspected. + +Commit `4f09dc8a` restores integrity-checked upload hydration, including revisions reconstructed from restore packs. Bricks checks actual file existence/readability/size; WordPress media operations and the mutation inventory also require those files. Browser image requests still stream R2 assets. A sampled original JPEG returned HTTP 200, `image/jpeg`, and `x-wp-codebox-static: r2-upload`. No health-filter override or placeholder file was used. + +Commit `0abe2512` advances the runtime page-cache namespace and applies it to both edge keys and persisted R2 render-cache keys. This prevents the unchanged canonical revision from serving the previous imageless render after a runtime upgrade. Explicit published artifacts and canonical state retain their original keys. + +Deployment: `a1e7ea0c-119f-490d-8112-f03aad1a050c`. The fresh desktop response reports `miss` / `render`; mobile reports `hit` / `edge`. The receipt records screenshot hashes, selected response headers, and test outcomes. + +This is native public-render evidence, not licensed-editor or customer-operability acceptance. The existing navy project section has dark body copy with poor contrast; it remains a native design correction. No authenticated native edit was available in this bounded repair, and no arbitrary canonical metadata change was made. The fixture's approximately 4.1 MB upload set passed; larger media inventories need separate memory qualification. diff --git a/outputs/bricks-native-media-root-render/desktop.png b/outputs/bricks-native-media-root-render/desktop.png new file mode 100644 index 00000000..8bdf081f Binary files /dev/null and b/outputs/bricks-native-media-root-render/desktop.png differ diff --git a/outputs/bricks-native-media-root-render/mobile.png b/outputs/bricks-native-media-root-render/mobile.png new file mode 100644 index 00000000..00677dbc Binary files /dev/null and b/outputs/bricks-native-media-root-render/mobile.png differ diff --git a/outputs/bricks-native-media-root-render/receipt.json b/outputs/bricks-native-media-root-render/receipt.json new file mode 100644 index 00000000..252e1c93 --- /dev/null +++ b/outputs/bricks-native-media-root-render/receipt.json @@ -0,0 +1,200 @@ +{ + "status": "rendered-desktop-and-mobile", + "origin": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev", + "results": [ + { + "name": "desktop", + "width": 1440, + "height": 1000, + "screenshot": "desktop.png", + "responseHeaders": { + "cache-control": "public, max-age=60, s-maxage=31536000", + "content-type": "text/html; charset=UTF-8", + "date": "Thu, 10 Sep 2026 18:12:30 GMT", + "x-powered-by": "PHP/8.5.8", + "x-wp-codebox-page-cache": "miss", + "x-wp-codebox-page-cache-source": "render" + }, + "evidence": { + "title": "Cloudflare WordPress Runtime \u2013 WordPress WebAssembly with canonical Markdown state", + "h1": "Restore the wood you love. Protect it for years.", + "nativeElementCount": 42, + "sections": 4, + "headerVisible": true, + "footerVisible": true, + "viewportWidth": 1440, + "scrollWidth": 1440, + "horizontalOverflow": false, + "heroColumns": "609.719px 518.281px", + "serviceColumns": "386.656px 386.672px 386.656px", + "hero": { + "x": 0, + "y": 145.328125, + "width": 1440, + "height": 827.078125 + }, + "heroCopy": { + "x": 120, + "y": 215.328125, + "width": 609.71875, + "height": 687.078125 + }, + "heroMedia": { + "x": 801.71875, + "y": 218.9375, + "width": 518.28125, + "height": 679.84375 + }, + "serviceGrid": { + "x": 120, + "y": 1313.453125, + "width": 1200, + "height": 225.390625 + }, + "cssVariables": { + "brandNavy": "#0B3A66", + "brandOrange": "#FF6A00", + "spaceM": "clamp(1.6rem, calc(0.0037037037 * (100vw - 36rem) + 1.6rem), 2rem)", + "textM": "clamp(1.6rem, calc(0.0037037037 * (100vw - 36rem) + 1.6rem), 2rem)" + }, + "images": [ + { + "alt": "Stain & Seal Pros", + "complete": true, + "naturalWidth": 1439, + "naturalHeight": 959, + "src": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/wp-content/uploads/2026/09/stain-seal-pros-logo-cfv2.png" + }, + { + "alt": "Freshly restored and stained residential deck", + "complete": true, + "naturalWidth": 1200, + "naturalHeight": 900, + "src": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/wp-content/uploads/2026/09/stain-seal-pros-deck-after-cfv2.jpg" + }, + { + "alt": "Freshly restored and stained residential deck", + "complete": true, + "naturalWidth": 1200, + "naturalHeight": 900, + "src": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/wp-content/uploads/2026/09/stain-seal-pros-deck-after-cfv2.jpg" + }, + { + "alt": "Stain & Seal Pros", + "complete": true, + "naturalWidth": 1439, + "naturalHeight": 959, + "src": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/wp-content/uploads/2026/09/stain-seal-pros-logo-cfv2.png" + } + ] + }, + "screenshotSha256": "33451581a83e43e0820e5c237e4a7ab8c094ac8c05a03bd3b4f5361465c47028" + }, + { + "name": "mobile", + "width": 390, + "height": 844, + "screenshot": "mobile.png", + "responseHeaders": { + "cache-control": "public, max-age=60, s-maxage=31536000", + "cf-cache-status": "HIT", + "content-type": "text/html; charset=UTF-8", + "date": "Thu, 10 Sep 2026 18:12:33 GMT", + "x-powered-by": "PHP/8.5.8", + "x-wp-codebox-page-cache": "hit", + "x-wp-codebox-page-cache-source": "edge" + }, + "evidence": { + "title": "Cloudflare WordPress Runtime \u2013 WordPress WebAssembly with canonical Markdown state", + "h1": "Restore the wood you love. Protect it for years.", + "nativeElementCount": 42, + "sections": 4, + "headerVisible": true, + "footerVisible": true, + "viewportWidth": 390, + "scrollWidth": 390, + "horizontalOverflow": false, + "heroColumns": "342px", + "serviceColumns": "342px", + "hero": { + "x": 0, + "y": 110.65625, + "width": 390, + "height": 859.40625 + }, + "heroCopy": { + "x": 24, + "y": 160.65625, + "width": 342, + "height": 437.640625 + }, + "heroMedia": { + "x": 24, + "y": 617.796875, + "width": 342, + "height": 282.265625 + }, + "serviceGrid": { + "x": 24, + "y": 1199.734375, + "width": 342, + "height": 579.140625 + }, + "cssVariables": { + "brandNavy": "#0B3A66", + "brandOrange": "#FF6A00", + "spaceM": "clamp(1.6rem, calc(0.0037037037 * (100vw - 36rem) + 1.6rem), 2rem)", + "textM": "clamp(1.6rem, calc(0.0037037037 * (100vw - 36rem) + 1.6rem), 2rem)" + }, + "images": [ + { + "alt": "Stain & Seal Pros", + "complete": true, + "naturalWidth": 390, + "naturalHeight": 260, + "src": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/wp-content/uploads/2026/09/stain-seal-pros-logo-cfv2-768x512.png" + }, + { + "alt": "Freshly restored and stained residential deck", + "complete": true, + "naturalWidth": 390, + "naturalHeight": 292, + "src": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/wp-content/uploads/2026/09/stain-seal-pros-deck-after-cfv2-768x576.jpg" + }, + { + "alt": "Freshly restored and stained residential deck", + "complete": true, + "naturalWidth": 390, + "naturalHeight": 292, + "src": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/wp-content/uploads/2026/09/stain-seal-pros-deck-after-cfv2-768x576.jpg" + }, + { + "alt": "Stain & Seal Pros", + "complete": true, + "naturalWidth": 390, + "naturalHeight": 260, + "src": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/wp-content/uploads/2026/09/stain-seal-pros-logo-cfv2-768x512.png" + } + ] + }, + "screenshotSha256": "865a607c8a77a79ef74154130779a244a63bc84b6fc1089a774c50ffa7755c8b" + } + ], + "generatedAt": "2026-09-10T18:12:35.302Z", + "sourceCommit": "0abe2512c43c7eca499ae71b3d689e9bc0e82931", + "deploymentVersion": "a1e7ea0c-119f-490d-8112-f03aad1a050c", + "checks": { + "packageBuild": "passed", + "canaryDryRun": "passed", + "focusedChecksPassed": 28, + "broaderChecksPassed": 37, + "broaderChecksFailed": 1, + "broaderFailure": "Existing seed reproducibility test: php executable unavailable (ENOENT)" + }, + "limits": [ + "Licensed visual editor and edit/publish/restore/reopen not tested by this proof.", + "Desktop is a fresh PHP render; mobile validates the same native HTML through the edge cache.", + "Navy project-section body text has inadequate contrast; no canonical content mutation was attempted.", + "The fixture contains approximately 4.1 MB uploads. The full 64 MB upload allowance is not qualified under Worker memory limits." + ] +} diff --git a/outputs/bricks-native-worker-telemetry/AccountWorkersInvocationsAdaptiveQuantiles.json b/outputs/bricks-native-worker-telemetry/AccountWorkersInvocationsAdaptiveQuantiles.json new file mode 100644 index 00000000..c301ecfc --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/AccountWorkersInvocationsAdaptiveQuantiles.json @@ -0,0 +1,207 @@ +{ + "data": { + "__type": { + "description": "", + "fields": [ + { + "description": "CPU time 25th percentile - microseconds", + "name": "cpuTimeP25" + }, + { + "description": "CPU time 50th percentile - microseconds", + "name": "cpuTimeP50" + }, + { + "description": "CPU time 75th percentile - microseconds", + "name": "cpuTimeP75" + }, + { + "description": "CPU time 90th percentile - microseconds", + "name": "cpuTimeP90" + }, + { + "description": "CPU time 95th percentile - microseconds", + "name": "cpuTimeP95" + }, + { + "description": "CPU time 99th percentile - microseconds", + "name": "cpuTimeP99" + }, + { + "description": "CPU time 99.9th percentile - microseconds", + "name": "cpuTimeP999" + }, + { + "description": "Duration 25th percentile - GB*s", + "name": "durationP25" + }, + { + "description": "Duration 50th percentile - GB*s", + "name": "durationP50" + }, + { + "description": "Duration 75th percentile - GB*s", + "name": "durationP75" + }, + { + "description": "Duration 90th percentile - GB*s", + "name": "durationP90" + }, + { + "description": "Duration 95th percentile - GB*s", + "name": "durationP95" + }, + { + "description": "Duration 99th percentile - GB*s", + "name": "durationP99" + }, + { + "description": "Duration 99.9th percentile - GB*s", + "name": "durationP999" + }, + { + "description": "V8 isolate memory usage 25th percentile across Worker invocations - bytes", + "name": "memoryUsageBytesP25" + }, + { + "description": "V8 isolate memory usage 50th percentile across Worker invocations - bytes", + "name": "memoryUsageBytesP50" + }, + { + "description": "V8 isolate memory usage 75th percentile across Worker invocations - bytes", + "name": "memoryUsageBytesP75" + }, + { + "description": "V8 isolate memory usage 90th percentile across Worker invocations - bytes", + "name": "memoryUsageBytesP90" + }, + { + "description": "V8 isolate memory usage 95th percentile across Worker invocations - bytes", + "name": "memoryUsageBytesP95" + }, + { + "description": "V8 isolate memory usage 99th percentile across Worker invocations - bytes", + "name": "memoryUsageBytesP99" + }, + { + "description": "V8 isolate memory usage 99.9th percentile across Worker invocations - bytes", + "name": "memoryUsageBytesP999" + }, + { + "description": "Request duration 25th percentile - microseconds", + "name": "requestDurationP25" + }, + { + "description": "Request duration 50th percentile - microseconds", + "name": "requestDurationP50" + }, + { + "description": "Request duration 75th percentile - microseconds", + "name": "requestDurationP75" + }, + { + "description": "Request duration 90th percentile - microseconds", + "name": "requestDurationP90" + }, + { + "description": "Request duration 95th percentile - microseconds", + "name": "requestDurationP95" + }, + { + "description": "Request duration 99th percentile - microseconds", + "name": "requestDurationP99" + }, + { + "description": "Request duration 99.9th percentile - microseconds", + "name": "requestDurationP999" + }, + { + "description": "Response body size 25th percentile - bytes", + "name": "responseBodySizeP25" + }, + { + "description": "Response body size 50th percentile - bytes", + "name": "responseBodySizeP50" + }, + { + "description": "Response body size 75th percentile - bytes", + "name": "responseBodySizeP75" + }, + { + "description": "Response body size 90th percentile - bytes", + "name": "responseBodySizeP90" + }, + { + "description": "Response body size 95th percentile - bytes", + "name": "responseBodySizeP95" + }, + { + "description": "Response body size 99th percentile - bytes", + "name": "responseBodySizeP99" + }, + { + "description": "Response body size 99.9th percentile - bytes", + "name": "responseBodySizeP999" + }, + { + "description": "Wall time 25th percentile - microseconds", + "name": "wallTimeP25" + }, + { + "description": "Wall time 50th percentile - microseconds", + "name": "wallTimeP50" + }, + { + "description": "Wall time 75th percentile - microseconds", + "name": "wallTimeP75" + }, + { + "description": "Wall time 90th percentile - microseconds", + "name": "wallTimeP90" + }, + { + "description": "Wall time 95th percentile - microseconds", + "name": "wallTimeP95" + }, + { + "description": "Wall time 99th percentile - microseconds", + "name": "wallTimeP99" + }, + { + "description": "Wall time 99.9th percentile - microseconds", + "name": "wallTimeP999" + }, + { + "description": "WebAssembly linear memory usage 25th percentile across Worker invocations - bytes", + "name": "wasmMemoryBytesP25" + }, + { + "description": "WebAssembly linear memory usage 50th percentile across Worker invocations - bytes", + "name": "wasmMemoryBytesP50" + }, + { + "description": "WebAssembly linear memory usage 75th percentile across Worker invocations - bytes", + "name": "wasmMemoryBytesP75" + }, + { + "description": "WebAssembly linear memory usage 90th percentile across Worker invocations - bytes", + "name": "wasmMemoryBytesP90" + }, + { + "description": "WebAssembly linear memory usage 95th percentile across Worker invocations - bytes", + "name": "wasmMemoryBytesP95" + }, + { + "description": "WebAssembly linear memory usage 99th percentile across Worker invocations - bytes", + "name": "wasmMemoryBytesP99" + }, + { + "description": "WebAssembly linear memory usage 99.9th percentile across Worker invocations - bytes", + "name": "wasmMemoryBytesP999" + } + ], + "name": "AccountWorkersInvocationsAdaptiveQuantiles" + } + }, + "errors": null +} \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/AccountWorkersInvocationsAdaptiveSum.json b/outputs/bricks-native-worker-telemetry/AccountWorkersInvocationsAdaptiveSum.json new file mode 100644 index 00000000..8bf77f3e --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/AccountWorkersInvocationsAdaptiveSum.json @@ -0,0 +1,47 @@ +{ + "data": { + "__type": { + "description": "", + "fields": [ + { + "description": "Sum of client disconnects", + "name": "clientDisconnects" + }, + { + "description": "Sum of cpu time in us", + "name": "cpuTimeUs" + }, + { + "description": "Sum of Duration - GB*s", + "name": "duration" + }, + { + "description": "Sum of Errors", + "name": "errors" + }, + { + "description": "Sum of Request Duration in microseconds", + "name": "requestDuration" + }, + { + "description": "Sum of Requests", + "name": "requests" + }, + { + "description": "Sum of Response Body Sizes", + "name": "responseBodySize" + }, + { + "description": "Sum of Subrequests", + "name": "subrequests" + }, + { + "description": "Sum of Wall Time", + "name": "wallTime" + } + ], + "name": "AccountWorkersInvocationsAdaptiveSum" + } + }, + "errors": null +} \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/README.md b/outputs/bricks-native-worker-telemetry/README.md new file mode 100644 index 00000000..2e2a97d7 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/README.md @@ -0,0 +1,50 @@ +# Native Bricks Worker telemetry + +The actual native revision, restoration, protected rendering, replay, and polling passed on the normally deployed disposable Cloudflare Worker. **The memory release gate failed.** Successful HTTP responses do not override the observed isolate memory above 128 MiB. A subsequent [system-allocator improvement](system-allocator/README.md) reduced measured memory and CPU, and passed another real revision/restore transaction; it still does not meet the memory limit. The tables below preserve the original baseline. + +Runtime source: `2f851aa136cb0a20a0bed1c456a6469c12767ba6`; deployed tree: `fd4775e974239de81092356223c78bb4836291db`; Worker version: `048eaf36-9226-4a86-860b-50e19cf558c6`. Only the completed `native-api` fixture was revised, from version 5 to 6 and restored as new monotonic version 7. Default canonical version 24 and the separate engine/sales allocations remained unchanged. Their version-preview deployments were not promoted or replaced. + +## Actual invocation measurements + +These are Cloudflare Wrangler tail CPU and wall measurements in milliseconds, not client stopwatch estimates. All ten captured invocations returned HTTP 200, outcome `ok`, no exceptions, and untruncated logs. + +| Request | Worker CPU ms | Worker wall ms | +| --- | ---: | ---: | +| Default public page, cache hit | 15 | 460 | +| Restored native preview, first measured render | 5,913 | 9,619 | +| Restored native preview, repeat | 5,067 | 8,810 | +| Existing immutable artifact staging | 29 | 976 | +| Actual native revision, version 6 | 9,525 | 20,340 | +| Revised preview with changed heading | 6,859 | 10,712 | +| Restore prior native content as version 7 | 5,840 | 9,989 | +| Restored preview with original heading | 5,440 | 8,675 | +| Idempotent restore replay | 27 | 624 | +| Terminal operation poll | 3 | 129 | + +The configured CPU limit is 300,000 ms. This bounded rehearsal stayed below that limit. Protected preview responses remained `private, no-store`, with exact canonical revision/receipt headers. Both expected headings were observed by the actual Build writer rehearsal. This is a native fixture qualification, not model-generated customer design acceptance or a licensed visual-editor transaction. + +## Memory failure + +Cloudflare GraphQL reported V8 isolate memory of **225,888,500–268,639,500 bytes** for the four native preview invocations. The corresponding WebAssembly linear memory series was **139,198,460 bytes** in every preview row. The restore invocation reported 245,154,200 bytes isolate memory and 115,998,720 bytes WASM memory. Do not add these series together or substitute the PHP allocator peak for either. + +The revision's separately persisted PHP allocator peak was 52,953,088 bytes; restore's was 48,758,784 bytes. The revision's post-execution GraphQL sample was 67,408,360 bytes with zero WASM memory. These samples are not a heap-retention profile or a complete within-request peak measurement. + +[Cloudflare's metric definition](https://developers.cloudflare.com/workers/observability/metrics-and-analytics/#memory-usage) describes whole-isolate memory. Its [memory-limit documentation](https://developers.cloudflare.com/workers/platform/limits/#memory) includes JavaScript and WebAssembly and allows in-flight requests to finish when an over-limit isolate is replaced. Therefore, HTTP 200 does not establish compliance. The exact GraphQL response and introspected metric descriptions are retained here. Resource acceptance remains failed pending a measured reduction; licensed Bricks editor acceptance remains unrun because no legitimate license is configured. + +## Other measured counts and their scope + +For `2026-09-10T20:13:00Z` through `20:18:00Z`, the shared disposable database reported 141 read queries, 10 write queries, 247 rows read, and 16 rows written. The shared bucket reported 46 GetObject and 48 PutObject operations. These are interval totals for the resources, including any operator/other-caller activity; they are not per-invocation attribution. The Worker analytics subrequest series returned zero; this does not mean there were zero D1/R2 calls. + +The restored manifest inventories 147 canonical files (38,450 bytes), 1,605 wp-content entries (76,474,629 bytes, including R2-only browser assets), and one 68-byte fixture image. Its canonical restore pack is 3,051,273 compressed bytes / 13,873,644 decoded bytes over 1,021 files. Logical inventory is not physical bucket usage or live isolate memory. + +## Evidence + +- [Receipt and before/after state](receipt.json) +- [Sanitized exact invocation measurements](invocations.json) +- [GraphQL Worker query](analytics-query.json) and [response](analytics-response.json) +- [GraphQL D1/R2 query](bindings-query.json) and [response](bindings-response.json) +- [Actual Build revision/restore requests and receipts](mutations.json) +- [PHP revision observation](revised-php-measurements.json) and [restore observation](restored-php-measurements.json) +- [Introspected memory field descriptions](AccountWorkersInvocationsAdaptiveQuantiles.json) + +The raw tail, deployment configuration, and credentials remain in the ignored private preparation directory. Only redacted invocation fields and non-secret proof inputs are exported. No customer resources were changed, and no active allocation was cleaned up. diff --git a/outputs/bricks-native-worker-telemetry/allocation-profile/README.md b/outputs/bricks-native-worker-telemetry/allocation-profile/README.md new file mode 100644 index 00000000..413c3697 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/allocation-profile/README.md @@ -0,0 +1,11 @@ +# Local allocation-stage profile + +These local PHP 8.5.8/Wrangler profiles explain the measured allocator change. Temporary diagnostic code inspected the Emscripten heap and filesystem nodes, paused at six explicit stages with the V8 debugger, and captured `Runtime.getHeapUsage`. A temporary MU plugin recorded PHP allocator counters across WordPress hooks. Both instrumentation mechanisms were removed before committing or deploying the runtime change. No remote instrumentation or license bypass was used. + +The original allocator held WASM at 67,108,864 bytes throughout archive extraction, canonical filesystem hydration, and boot. Rendering then requested heap growth to 69,210,112, 81,793,024, 98,570,240, and 119,541,760 bytes. The Emscripten loader's geometric growth yielded 139,198,464 bytes of linear memory. PHP's reported allocator peak was 50,855,936 bytes, illustrating why PHP counters alone did not describe the isolate requirement. + +The streamed JavaScript WordPress ZIP extraction experiment still ended at 139,198,464 WASM bytes and was reverted. It did not justify a production archive-path change. The filesystem figures enumerate accessible Emscripten filesystem nodes and backing buffers; they are not a heap snapshot or an attribution of all remote memory. + +Using PHP's supported `USE_ZEND_ALLOC=0` startup environment instead ended at 80,543,744 WASM bytes with the same native heading and HTTP 200. PHP's [allocator implementation](https://github.com/php/php-src/blob/master/Zend/zend_alloc.c) supports this system-malloc mode. It disables PHP's allocator accounting, so zero-valued PHP counters are reported as unavailable, not as zero consumption. The Worker continues to enforce its actual resource limits. + +The local V8 measurements and remote sampled metrics are different measurement surfaces. No arithmetic combination of these local fields is presented as a remote peak. The [subsequent real Worker evidence](../system-allocator/README.md) remains the resource decision basis. diff --git a/outputs/bricks-native-worker-telemetry/allocation-profile/php-hooks-and-growth.json b/outputs/bricks-native-worker-telemetry/allocation-profile/php-hooks-and-growth.json new file mode 100644 index 00000000..ab8bd250 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/allocation-profile/php-hooks-and-growth.json @@ -0,0 +1,38 @@ +[ + { + "schema": "native-wasm-grow-local", + "requested_bytes": 69210112 + }, + { + "schema": "native-wasm-grow-local", + "requested_bytes": 69210112 + }, + { + "schema": "native-wasm-grow-local", + "requested_bytes": 81793024 + }, + { + "schema": "native-wasm-grow-local", + "requested_bytes": 81793024 + }, + { + "schema": "native-wasm-grow-local", + "requested_bytes": 98570240 + }, + { + "schema": "native-wasm-grow-local", + "requested_bytes": 98570240 + }, + { + "schema": "native-wasm-grow-local", + "requested_bytes": 119541760 + }, + { + "schema": "native-wasm-grow-local", + "requested_bytes": 119541760 + }, + { + "schema": "native-php-profile", + "data": "{\"hook\":\"mu-plugin\",\"php_used\":30550600,\"php_allocated\":31457280,\"php_peak\":31457280}\n{\"hook\":\"plugins_loaded:-999999\",\"php_used\":31423008,\"php_allocated\":33554432,\"php_peak\":33554432}\n{\"hook\":\"plugins_loaded:999999\",\"php_used\":31962648,\"php_allocated\":33554432,\"php_peak\":33554432}\n{\"hook\":\"after_setup_theme:-999999\",\"php_used\":39647008,\"php_allocated\":42467328,\"php_peak\":42467328}\n{\"hook\":\"after_setup_theme:999999\",\"php_used\":39664728,\"php_allocated\":42467328,\"php_peak\":42467328}\n{\"hook\":\"init:-999999\",\"php_used\":39974352,\"php_allocated\":42467328,\"php_peak\":42467328}\n{\"hook\":\"init:999999\",\"php_used\":43933280,\"php_allocated\":46661632,\"php_peak\":46661632}\n{\"hook\":\"wp_loaded:-999999\",\"php_used\":43933312,\"php_allocated\":46661632,\"php_peak\":46661632}\n{\"hook\":\"wp_loaded:999999\",\"php_used\":43964064,\"php_allocated\":46661632,\"php_peak\":46661632}\n{\"hook\":\"wp:-999999\",\"php_used\":43959704,\"php_allocated\":46661632,\"php_peak\":46661632}\n{\"hook\":\"wp:999999\",\"php_used\":45782976,\"php_allocated\":46661632,\"php_peak\":46661632}\n{\"hook\":\"template_redirect:-999999\",\"php_used\":45795632,\"php_allocated\":46661632,\"php_peak\":46661632}\n{\"hook\":\"template_redirect:999999\",\"php_used\":45796288,\"php_allocated\":46661632,\"php_peak\":46661632}\n{\"hook\":\"get_header:-999999\",\"php_used\":45798784,\"php_allocated\":46661632,\"php_peak\":46661632}\n{\"hook\":\"get_header:999999\",\"php_used\":45799032,\"php_allocated\":46661632,\"php_peak\":46661632}\n{\"hook\":\"wp_head:-999999\",\"php_used\":45807592,\"php_allocated\":46661632,\"php_peak\":46661632}\n{\"hook\":\"wp_head:999999\",\"php_used\":48362184,\"php_allocated\":50855936,\"php_peak\":50855936}\n{\"hook\":\"wp_body_open:-999999\",\"php_used\":48357992,\"php_allocated\":50855936,\"php_peak\":50855936}\n{\"hook\":\"wp_body_open:999999\",\"php_used\":48358640,\"php_allocated\":50855936,\"php_peak\":50855936}\n{\"hook\":\"get_footer:-999999\",\"php_used\":48577816,\"php_allocated\":50855936,\"php_peak\":50855936}\n{\"hook\":\"get_footer:999999\",\"php_used\":48577984,\"php_allocated\":50855936,\"php_peak\":50855936}\n{\"hook\":\"wp_footer:-999999\",\"php_used\":48584184,\"php_allocated\":50855936,\"php_peak\":50855936}\n{\"hook\":\"wp_footer:999999\",\"php_used\":48603432,\"php_allocated\":50855936,\"php_peak\":50855936}\n{\"hook\":\"shutdown:-999999\",\"php_used\":48588928,\"php_allocated\":50855936,\"php_peak\":50855936}\n{\"hook\":\"shutdown:999999\",\"php_used\":48589176,\"php_allocated\":50855936,\"php_peak\":50855936}\n" + } +] diff --git a/outputs/bricks-native-worker-telemetry/allocation-profile/refined.json b/outputs/bricks-native-worker-telemetry/allocation-profile/refined.json new file mode 100644 index 00000000..16b782e4 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/allocation-profile/refined.json @@ -0,0 +1,92 @@ +[ + { + "schema": "native-memory-local", + "stage": "before-wordpress-archive", + "wasm_bytes": 67108864, + "memfs_logical_bytes": 18528, + "memfs_typed_backing_bytes": 18528, + "memfs_plain_array_elements": 0, + "files": 11, + "heap": { + "usedSize": 14704452, + "totalSize": 32800768, + "embedderHeapUsedSize": 130816, + "backingStorageSize": 15873999 + } + }, + { + "schema": "native-memory-local", + "stage": "after-wordpress-archive", + "wasm_bytes": 67108864, + "memfs_logical_bytes": 19655508, + "memfs_typed_backing_bytes": 28916123, + "memfs_plain_array_elements": 0, + "files": 521, + "heap": { + "usedSize": 25805512, + "totalSize": 57868288, + "embedderHeapUsedSize": 130816, + "backingStorageSize": 48166030 + } + }, + { + "schema": "native-memory-local", + "stage": "after-native-memfs-hydration", + "wasm_bytes": 67108864, + "memfs_logical_bytes": 34209580, + "memfs_typed_backing_bytes": 43381572, + "memfs_plain_array_elements": 0, + "files": 1586, + "heap": { + "usedSize": 24391236, + "totalSize": 61538304, + "embedderHeapUsedSize": 644896, + "backingStorageSize": 63243306 + } + }, + { + "schema": "native-memory-local", + "stage": "native-ready", + "wasm_bytes": 67108864, + "memfs_logical_bytes": 35039384, + "memfs_typed_backing_bytes": 44626963, + "memfs_plain_array_elements": 0, + "files": 1605, + "heap": { + "usedSize": 25436992, + "totalSize": 60702720, + "embedderHeapUsedSize": 131336, + "backingStorageSize": 64248401 + } + }, + { + "schema": "native-memory-local", + "stage": "before-frontend", + "wasm_bytes": 67108864, + "memfs_logical_bytes": 35040088, + "memfs_typed_backing_bytes": 44627667, + "memfs_plain_array_elements": 0, + "files": 1606, + "heap": { + "usedSize": 19510360, + "totalSize": 60702720, + "embedderHeapUsedSize": 131336, + "backingStorageSize": 64249105 + } + }, + { + "schema": "native-memory-local", + "stage": "after-frontend", + "wasm_bytes": 139198464, + "memfs_logical_bytes": 35079304, + "memfs_typed_backing_bytes": 44975827, + "memfs_plain_array_elements": 0, + "files": 1607, + "heap": { + "usedSize": 22754040, + "totalSize": 60964864, + "embedderHeapUsedSize": 131336, + "backingStorageSize": 64965122 + } + } +] \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/allocation-profile/stream.json b/outputs/bricks-native-worker-telemetry/allocation-profile/stream.json new file mode 100644 index 00000000..ef50cff6 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/allocation-profile/stream.json @@ -0,0 +1,86 @@ +[ + { + "schema": "native-memory-local", + "stage": "before-wordpress-archive", + "wasm_bytes": 67108864, + "memfs_logical_bytes": 18528, + "memfs_backing_bytes": 18528, + "files": 11, + "heap": { + "usedSize": 14619004, + "totalSize": 32538624, + "embedderHeapUsedSize": 130816, + "backingStorageSize": 15873999 + } + }, + { + "schema": "native-memory-local", + "stage": "after-wordpress-archive", + "wasm_bytes": 67108864, + "memfs_logical_bytes": 22978831, + "memfs_backing_bytes": 22978831, + "files": 2119, + "heap": { + "usedSize": 64086080, + "totalSize": 111296512, + "embedderHeapUsedSize": 7350816, + "backingStorageSize": 38871081 + } + }, + { + "schema": "native-memory-local", + "stage": "after-native-memfs-hydration", + "wasm_bytes": 67108864, + "memfs_logical_bytes": 37532903, + "memfs_backing_bytes": 37532903, + "files": 3184, + "heap": { + "usedSize": 28092108, + "totalSize": 110477312, + "embedderHeapUsedSize": 131376, + "backingStorageSize": 54582932 + } + }, + { + "schema": "native-memory-local", + "stage": "native-ready", + "wasm_bytes": 67108864, + "memfs_logical_bytes": 38506382, + "memfs_backing_bytes": 38921969, + "files": 3204, + "heap": { + "usedSize": 34819056, + "totalSize": 111984640, + "embedderHeapUsedSize": 131376, + "backingStorageSize": 58900655 + } + }, + { + "schema": "native-memory-local", + "stage": "before-frontend", + "wasm_bytes": 67108864, + "memfs_logical_bytes": 38507086, + "memfs_backing_bytes": 38922673, + "files": 3205, + "heap": { + "usedSize": 37826480, + "totalSize": 111984640, + "embedderHeapUsedSize": 131376, + "backingStorageSize": 58902063 + } + }, + { + "schema": "native-memory-local", + "stage": "after-frontend", + "wasm_bytes": 139198464, + "memfs_logical_bytes": 38546302, + "memfs_backing_bytes": 39270833, + "files": 3206, + "heap": { + "usedSize": 47902564, + "totalSize": 112771072, + "embedderHeapUsedSize": 131376, + "backingStorageSize": 60932957 + } + } +] \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/allocation-profile/system-alloc.json b/outputs/bricks-native-worker-telemetry/allocation-profile/system-alloc.json new file mode 100644 index 00000000..6777b9a2 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/allocation-profile/system-alloc.json @@ -0,0 +1,92 @@ +[ + { + "schema": "native-memory-local", + "stage": "before-wordpress-archive", + "wasm_bytes": 67108864, + "memfs_logical_bytes": 18528, + "memfs_typed_backing_bytes": 18528, + "memfs_plain_array_elements": 0, + "files": 11, + "heap": { + "usedSize": 14671300, + "totalSize": 32276480, + "embedderHeapUsedSize": 130816, + "backingStorageSize": 15873999 + } + }, + { + "schema": "native-memory-local", + "stage": "after-wordpress-archive", + "wasm_bytes": 67108864, + "memfs_logical_bytes": 19655508, + "memfs_typed_backing_bytes": 28916123, + "memfs_plain_array_elements": 0, + "files": 521, + "heap": { + "usedSize": 19910692, + "totalSize": 57868288, + "embedderHeapUsedSize": 130816, + "backingStorageSize": 48166030 + } + }, + { + "schema": "native-memory-local", + "stage": "after-native-memfs-hydration", + "wasm_bytes": 67108864, + "memfs_logical_bytes": 34209580, + "memfs_typed_backing_bytes": 43381572, + "memfs_plain_array_elements": 0, + "files": 1586, + "heap": { + "usedSize": 18709660, + "totalSize": 61538304, + "embedderHeapUsedSize": 644896, + "backingStorageSize": 63243306 + } + }, + { + "schema": "native-memory-local", + "stage": "native-ready", + "wasm_bytes": 67108864, + "memfs_logical_bytes": 35039384, + "memfs_typed_backing_bytes": 44626963, + "memfs_plain_array_elements": 0, + "files": 1605, + "heap": { + "usedSize": 24210056, + "totalSize": 60964864, + "embedderHeapUsedSize": 131336, + "backingStorageSize": 64249867 + } + }, + { + "schema": "native-memory-local", + "stage": "before-frontend", + "wasm_bytes": 67108864, + "memfs_logical_bytes": 35040088, + "memfs_typed_backing_bytes": 44627667, + "memfs_plain_array_elements": 0, + "files": 1606, + "heap": { + "usedSize": 18193768, + "totalSize": 60964864, + "embedderHeapUsedSize": 131336, + "backingStorageSize": 64250571 + } + }, + { + "schema": "native-memory-local", + "stage": "after-frontend", + "wasm_bytes": 80543744, + "memfs_logical_bytes": 35078779, + "memfs_typed_backing_bytes": 44973779, + "memfs_plain_array_elements": 0, + "files": 1607, + "heap": { + "usedSize": 21660856, + "totalSize": 60964864, + "embedderHeapUsedSize": 131336, + "backingStorageSize": 64964540 + } + } +] \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/analytics-query.json b/outputs/bricks-native-worker-telemetry/analytics-query.json new file mode 100644 index 00000000..013b91a9 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/analytics-query.json @@ -0,0 +1,3 @@ +{ + "query": "query {viewer { accounts(filter:{accountTag:\"c9a6d8fc0e01d908d3d399d12043b2fb\"}) {workersInvocationsAdaptive(limit:100,filter:{scriptName:\"bricks24-native-canary-20260910\",datetime_geq:\"2026-09-10T20:13:00Z\",datetime_leq:\"2026-09-10T20:18:00Z\"}) {sum {subrequests requests errors} quantiles {cpuTimeP50 cpuTimeP99 memoryUsageBytesP50 memoryUsageBytesP99 memoryUsageBytesP999 wasmMemoryBytesP50 wasmMemoryBytesP99 wasmMemoryBytesP999} dimensions {datetime scriptName status}} }}}" +} \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/analytics-response.json b/outputs/bricks-native-worker-telemetry/analytics-response.json new file mode 100644 index 00000000..b872c94b --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/analytics-response.json @@ -0,0 +1,233 @@ +{ + "data": { + "viewer": { + "accounts": [ + { + "workersInvocationsAdaptive": [ + { + "dimensions": { + "datetime": "2026-09-10T20:13:31Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 5913274, + "cpuTimeP99": 5913274, + "memoryUsageBytesP50": 234798560, + "memoryUsageBytesP99": 234798560, + "memoryUsageBytesP999": 234798560, + "wasmMemoryBytesP50": 139198460, + "wasmMemoryBytesP99": 139198460, + "wasmMemoryBytesP999": 139198460 + }, + "sum": { + "errors": 0, + "requests": 1, + "subrequests": 0 + } + }, + { + "dimensions": { + "datetime": "2026-09-10T20:15:45Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 5440020, + "cpuTimeP99": 5440020, + "memoryUsageBytesP50": 268639500, + "memoryUsageBytesP99": 268639500, + "memoryUsageBytesP999": 268639500, + "wasmMemoryBytesP50": 139198460, + "wasmMemoryBytesP99": 139198460, + "wasmMemoryBytesP999": 139198460 + }, + "sum": { + "errors": 0, + "requests": 1, + "subrequests": 0 + } + }, + { + "dimensions": { + "datetime": "2026-09-10T20:13:18Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 15540, + "cpuTimeP99": 15540, + "memoryUsageBytesP50": 18987184, + "memoryUsageBytesP99": 18987184, + "memoryUsageBytesP999": 18987184, + "wasmMemoryBytesP50": 0, + "wasmMemoryBytesP99": 0, + "wasmMemoryBytesP999": 0 + }, + "sum": { + "errors": 0, + "requests": 1, + "subrequests": 0 + } + }, + { + "dimensions": { + "datetime": "2026-09-10T20:15:24Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 6859056, + "cpuTimeP99": 6859056, + "memoryUsageBytesP50": 225888500, + "memoryUsageBytesP99": 225888500, + "memoryUsageBytesP999": 225888500, + "wasmMemoryBytesP50": 139198460, + "wasmMemoryBytesP99": 139198460, + "wasmMemoryBytesP999": 139198460 + }, + "sum": { + "errors": 0, + "requests": 1, + "subrequests": 0 + } + }, + { + "dimensions": { + "datetime": "2026-09-10T20:15:56Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 3740, + "cpuTimeP99": 3740, + "memoryUsageBytesP50": 37322056, + "memoryUsageBytesP99": 37322056, + "memoryUsageBytesP999": 37322056, + "wasmMemoryBytesP50": 0, + "wasmMemoryBytesP99": 0, + "wasmMemoryBytesP999": 0 + }, + "sum": { + "errors": 0, + "requests": 1, + "subrequests": 0 + } + }, + { + "dimensions": { + "datetime": "2026-09-10T20:15:35Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 5840581, + "cpuTimeP99": 5840581, + "memoryUsageBytesP50": 245154200, + "memoryUsageBytesP99": 245154200, + "memoryUsageBytesP999": 245154200, + "wasmMemoryBytesP50": 115998720, + "wasmMemoryBytesP99": 115998720, + "wasmMemoryBytesP999": 115998720 + }, + "sum": { + "errors": 0, + "requests": 1, + "subrequests": 0 + } + }, + { + "dimensions": { + "datetime": "2026-09-10T20:15:02Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 29415, + "cpuTimeP99": 29415, + "memoryUsageBytesP50": 15858428, + "memoryUsageBytesP99": 15858428, + "memoryUsageBytesP999": 15858428, + "wasmMemoryBytesP50": 0, + "wasmMemoryBytesP99": 0, + "wasmMemoryBytesP999": 0 + }, + "sum": { + "errors": 0, + "requests": 1, + "subrequests": 0 + } + }, + { + "dimensions": { + "datetime": "2026-09-10T20:15:03Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 9525801, + "cpuTimeP99": 9525801, + "memoryUsageBytesP50": 67408360, + "memoryUsageBytesP99": 67408360, + "memoryUsageBytesP999": 67408360, + "wasmMemoryBytesP50": 0, + "wasmMemoryBytesP99": 0, + "wasmMemoryBytesP999": 0 + }, + "sum": { + "errors": 0, + "requests": 1, + "subrequests": 0 + } + }, + { + "dimensions": { + "datetime": "2026-09-10T20:15:55Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 27277, + "cpuTimeP99": 27277, + "memoryUsageBytesP50": 37321980, + "memoryUsageBytesP99": 37321980, + "memoryUsageBytesP999": 37321980, + "wasmMemoryBytesP50": 0, + "wasmMemoryBytesP99": 0, + "wasmMemoryBytesP999": 0 + }, + "sum": { + "errors": 0, + "requests": 1, + "subrequests": 0 + } + }, + { + "dimensions": { + "datetime": "2026-09-10T20:13:41Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 5067888, + "cpuTimeP99": 5067888, + "memoryUsageBytesP50": 268057860, + "memoryUsageBytesP99": 268057860, + "memoryUsageBytesP999": 268057860, + "wasmMemoryBytesP50": 139198460, + "wasmMemoryBytesP99": 139198460, + "wasmMemoryBytesP999": 139198460 + }, + "sum": { + "errors": 0, + "requests": 1, + "subrequests": 0 + } + } + ] + } + ] + } + }, + "errors": null +} \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/bindings-query.json b/outputs/bricks-native-worker-telemetry/bindings-query.json new file mode 100644 index 00000000..286522b8 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/bindings-query.json @@ -0,0 +1,3 @@ +{ + "query": "query {viewer { accounts(filter:{accountTag:\"c9a6d8fc0e01d908d3d399d12043b2fb\"}) {d1AnalyticsAdaptiveGroups(limit:100,filter:{databaseId:\"fe4d6486-6cd6-4a2e-9542-4f2dd8af7d8a\",datetime_geq:\"2026-09-10T20:13:00Z\",datetime_leq:\"2026-09-10T20:18:00Z\"}) {sum {readQueries writeQueries rowsRead rowsWritten} dimensions {databaseId}} r2OperationsAdaptiveGroups(limit:100,filter:{bucketName:\"bricks24-native-canary-20260910\",datetime_geq:\"2026-09-10T20:13:00Z\",datetime_leq:\"2026-09-10T20:18:00Z\"}) {sum {requests} dimensions {actionType}} }}}" +} \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/bindings-response.json b/outputs/bricks-native-worker-telemetry/bindings-response.json new file mode 100644 index 00000000..d297c8fc --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/bindings-response.json @@ -0,0 +1,42 @@ +{ + "data": { + "viewer": { + "accounts": [ + { + "d1AnalyticsAdaptiveGroups": [ + { + "dimensions": { + "databaseId": "fe4d6486-6cd6-4a2e-9542-4f2dd8af7d8a" + }, + "sum": { + "readQueries": 191, + "rowsRead": 257, + "rowsWritten": 18, + "writeQueries": 12 + } + } + ], + "r2OperationsAdaptiveGroups": [ + { + "dimensions": { + "actionType": "PutObject" + }, + "sum": { + "requests": 48 + } + }, + { + "dimensions": { + "actionType": "GetObject" + }, + "sum": { + "requests": 46 + } + } + ] + } + ] + } + }, + "errors": null +} \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/invocations.json b/outputs/bricks-native-worker-telemetry/invocations.json new file mode 100644 index 00000000..01539187 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/invocations.json @@ -0,0 +1,162 @@ +[ + { + "eventTimestamp": 1789071198011, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/", + "method": "GET", + "status": 200, + "cpu_ms": 15, + "wall_ms": 460, + "outcome": "ok", + "scriptVersion": { + "id": "048eaf36-9226-4a86-860b-50e19cf558c6" + }, + "exceptions": [], + "truncated": false, + "phase_logs": [ + [ + "{\"schema\":\"wp-codebox/cloudflare-runtime-phase-progress/v1\",\"name\":\"page-cache.state.read\",\"durationMs\":124}" + ], + [ + "{\"schema\":\"wp-codebox/cloudflare-runtime-phase-progress/v1\",\"name\":\"page-cache.lookup\",\"durationMs\":9}" + ], + [ + "{\"schema\":\"wp-codebox/cloudflare-runtime-phase-trace/v1\",\"operation\":\"read\",\"runtime\":\"not-used\",\"pageCache\":\"hit\",\"completed\":true,\"totalMs\":133,\"phases\":[{\"name\":\"page-cache.state.read\",\"durationMs\":124},{\"name\":\"page-cache.lookup\",\"durationMs\":9}]}" + ] + ] + }, + { + "eventTimestamp": 1789071211832, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_1e35568c9f48487b87bbffeeeaf43b31/", + "method": "GET", + "status": 200, + "cpu_ms": 5913, + "wall_ms": 9619, + "outcome": "ok", + "scriptVersion": { + "id": "048eaf36-9226-4a86-860b-50e19cf558c6" + }, + "exceptions": [], + "truncated": false, + "phase_logs": [] + }, + { + "eventTimestamp": 1789071221509, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_1e35568c9f48487b87bbffeeeaf43b31/", + "method": "GET", + "status": 200, + "cpu_ms": 5067, + "wall_ms": 8810, + "outcome": "ok", + "scriptVersion": { + "id": "048eaf36-9226-4a86-860b-50e19cf558c6" + }, + "exceptions": [], + "truncated": false, + "phase_logs": [] + }, + { + "eventTimestamp": 1789071302936, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/artifacts/REDACTED", + "method": "PUT", + "status": 200, + "cpu_ms": 29, + "wall_ms": 976, + "outcome": "ok", + "scriptVersion": { + "id": "048eaf36-9226-4a86-860b-50e19cf558c6" + }, + "exceptions": [], + "truncated": false, + "phase_logs": [] + }, + { + "eventTimestamp": 1789071303994, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/revisions", + "method": "POST", + "status": 200, + "cpu_ms": 9525, + "wall_ms": 20340, + "outcome": "ok", + "scriptVersion": { + "id": "048eaf36-9226-4a86-860b-50e19cf558c6" + }, + "exceptions": [], + "truncated": false, + "phase_logs": [] + }, + { + "eventTimestamp": 1789071324396, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_f269f86d0666432180b993e609b09a04/", + "method": "GET", + "status": 200, + "cpu_ms": 6859, + "wall_ms": 10712, + "outcome": "ok", + "scriptVersion": { + "id": "048eaf36-9226-4a86-860b-50e19cf558c6" + }, + "exceptions": [], + "truncated": false, + "phase_logs": [] + }, + { + "eventTimestamp": 1789071335557, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/restores", + "method": "POST", + "status": 200, + "cpu_ms": 5840, + "wall_ms": 9989, + "outcome": "ok", + "scriptVersion": { + "id": "048eaf36-9226-4a86-860b-50e19cf558c6" + }, + "exceptions": [], + "truncated": false, + "phase_logs": [] + }, + { + "eventTimestamp": 1789071345988, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_8a3c03c11ba24262a40041c7d29a6c84/", + "method": "GET", + "status": 200, + "cpu_ms": 5440, + "wall_ms": 8675, + "outcome": "ok", + "scriptVersion": { + "id": "048eaf36-9226-4a86-860b-50e19cf558c6" + }, + "exceptions": [], + "truncated": false, + "phase_logs": [] + }, + { + "eventTimestamp": 1789071355130, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/restores", + "method": "POST", + "status": 200, + "cpu_ms": 27, + "wall_ms": 624, + "outcome": "ok", + "scriptVersion": { + "id": "048eaf36-9226-4a86-860b-50e19cf558c6" + }, + "exceptions": [], + "truncated": false, + "phase_logs": [] + }, + { + "eventTimestamp": 1789071356249, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/sites/native-api/operations/native_telemetry_20260910_restore", + "method": "GET", + "status": 200, + "cpu_ms": 3, + "wall_ms": 129, + "outcome": "ok", + "scriptVersion": { + "id": "048eaf36-9226-4a86-860b-50e19cf558c6" + }, + "exceptions": [], + "truncated": false, + "phase_logs": [] + } +] diff --git a/outputs/bricks-native-worker-telemetry/mutations.json b/outputs/bricks-native-worker-telemetry/mutations.json new file mode 100644 index 00000000..b11dff72 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/mutations.json @@ -0,0 +1,592 @@ +{ + "origin": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev", + "base": { + "receipt_id": "native_1e35568c9f48487b87bbffeeeaf43b31", + "canonical_state_version": 5, + "canonical_state_revision": "fca9766e-bfcb-4f66-9566-9535c334ce61", + "canonical_manifest_key": "sites/native-api/markdown/revisions/fca9766e-bfcb-4f66-9566-9535c334ce61.json", + "canonical_persisted_at": "2026-09-10T19:50:26.550Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "revise": { + "request": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "operation_id": "native_telemetry_20260910_revise", + "idempotency_key": "native_telemetry_20260910_revise", + "site_id": "native-api", + "customer_id": "customer_417", + "bricks_artifact": { + "version": "wp-codebox/bricks-site-artifact/v1", + "sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36" + }, + "runtime_artifact": { + "version": "2.4-rc", + "sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887" + }, + "dossier": { + "revision": 3, + "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + }, + "creative_provenance": { + "canonicalCommit": "4a70be1400cbf3e32e05a7cda6a4ca35d28f1c21", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ], + "version": "2026-09-10-v1" + }, + "authorized_assets": [ + { + "sha256": "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460", + "usage_status": "approved" + } + ], + "starter_id": "starter_native_service_v1", + "editing": { + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "granularity": "native_bricks_elements", + "target_role": { + "required_capabilities": [ + "bricks_edit_content" + ], + "role_slug": "editor" + } + }, + "license_secret_ref": "BRICKS_LICENSE_KEY", + "revision_receipt": { + "receipt_id": "native_1e35568c9f48487b87bbffeeeaf43b31", + "canonical_state_version": 5, + "canonical_state_revision": "fca9766e-bfcb-4f66-9566-9535c334ce61", + "canonical_manifest_key": "sites/native-api/markdown/revisions/fca9766e-bfcb-4f66-9566-9535c334ce61.json", + "canonical_persisted_at": "2026-09-10T19:50:26.550Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "required": true, + "receipt_id": "native_1e35568c9f48487b87bbffeeeaf43b31", + "canonical_state_version": 5, + "canonical_state_revision": "fca9766e-bfcb-4f66-9566-9535c334ce61", + "canonical_manifest_key": "sites/native-api/markdown/revisions/fca9766e-bfcb-4f66-9566-9535c334ce61.json", + "canonical_persisted_at": "2026-09-10T19:50:26.550Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "protected_preview": { + "state": "requested", + "access": "agency_managed", + "url": null + } + }, + "result": { + "schema": "wp-codebox/provisioning-api/v1", + "operation": { + "id": "native_telemetry_20260910_revise", + "siteId": "native-api", + "state": "succeeded", + "stage": "prepared-allocation-native-documents-committed", + "progress": 100, + "retryAt": null, + "error": null, + "receipt": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "action": "revise", + "operation_id": "native_telemetry_20260910_revise", + "target_request_sha256": "045dce4154c038d2fac9ae821cdc967a35eaf90c1e3b8bdbf48942d7a4bb8986", + "site_id": "native-api", + "customer_id": "customer_417", + "state": "protected_preview", + "site_allocation": { + "allocation_id": "native-api", + "canonical_state_revision": "581090cd-2b48-4547-b642-0d7675d3d237" + }, + "native_records": { + "page_ids": [ + 2 + ], + "template_ids": [ + 4, + 6 + ], + "media_ids": [ + 1 + ] + }, + "native_document_hashes": [ + "0d1d5858922606e8fecfe329cbebafd30f6411f8d7be69f3bec111ef2339c27d", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "dc3f2eb30b731194bf4dbb5b02d1efb590e5d28fc788d54ebfdbf41ef7263bc9" + ], + "design_system_version": "design-system-1", + "bricks_artifact_sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "dossier_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + "creative_provenance": { + "version": "2026-09-10-v1", + "canonicalCommit": "4a70be1400cbf3e32e05a7cda6a4ca35d28f1c21", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ] + }, + "authorized_asset_hashes": [ + "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460" + ], + "target_role": { + "role_slug": "editor", + "required_capabilities": [ + "bricks_edit_content" + ], + "editability_verified": false + }, + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "protected_preview": { + "state": "ready", + "url": "https://native-api-bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_f269f86d0666432180b993e609b09a04/" + }, + "acceptance_results": [ + { + "step": "edit", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "publish", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "public_observation", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "restore", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "reopen", + "status": "not_run", + "evidence_sha256": null + } + ], + "acceptance_transaction_sha256": null, + "deployment": { + "version": "048eaf36-9226-4a86-860b-50e19cf558c6", + "runtime_artifact_version": "2.4-rc", + "runtime_artifact_sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "artifact_hashes": [ + "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36" + ] + }, + "evidence": { + "desktop_sha256": null, + "mobile_sha256": null, + "client_edit_transaction_sha256": null, + "resource_measurements_sha256": "3e53626d9e2e3a3a66093dccb5dffc37a82cce3644fc579554dcdadc66d7a8ae" + }, + "revision_receipt": { + "receipt_id": "native_f269f86d0666432180b993e609b09a04", + "canonical_state_version": 6, + "canonical_state_revision": "581090cd-2b48-4547-b642-0d7675d3d237", + "canonical_manifest_key": "sites/native-api/markdown/revisions/581090cd-2b48-4547-b642-0d7675d3d237.json", + "canonical_persisted_at": "2026-09-10T20:15:20.307Z", + "artifact_sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "native_document_hashes": [ + "0d1d5858922606e8fecfe329cbebafd30f6411f8d7be69f3bec111ef2339c27d", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "dc3f2eb30b731194bf4dbb5b02d1efb590e5d28fc788d54ebfdbf41ef7263bc9" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "receipt_id": "native_1e35568c9f48487b87bbffeeeaf43b31", + "canonical_state_version": 5, + "canonical_state_revision": "fca9766e-bfcb-4f66-9566-9535c334ce61", + "canonical_manifest_key": "sites/native-api/markdown/revisions/fca9766e-bfcb-4f66-9566-9535c334ce61.json", + "canonical_persisted_at": "2026-09-10T19:50:26.550Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "restoration": null + } + } + }, + "observation": { + "path": "/v1/bricks/sites/native-api/previews/native_f269f86d0666432180b993e609b09a04/", + "status": 200, + "wall_ms": 11153, + "heading_observed": true + } + }, + "restore": { + "request": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "operation_id": "native_telemetry_20260910_restore", + "idempotency_key": "native_telemetry_20260910_restore", + "site_id": "native-api", + "customer_id": "customer_417", + "bricks_artifact": { + "version": "wp-codebox/bricks-site-artifact/v1", + "sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9" + }, + "runtime_artifact": { + "version": "2.4-rc", + "sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887" + }, + "dossier": { + "revision": 3, + "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + }, + "creative_provenance": { + "canonicalCommit": "4a70be1400cbf3e32e05a7cda6a4ca35d28f1c21", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ], + "version": "2026-09-10-v1" + }, + "authorized_assets": [ + { + "sha256": "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460", + "usage_status": "approved" + } + ], + "starter_id": "starter_native_service_v1", + "editing": { + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "granularity": "native_bricks_elements", + "target_role": { + "required_capabilities": [ + "bricks_edit_content" + ], + "role_slug": "editor" + } + }, + "license_secret_ref": "BRICKS_LICENSE_KEY", + "revision_receipt": { + "receipt_id": "native_f269f86d0666432180b993e609b09a04", + "canonical_state_version": 6, + "canonical_state_revision": "581090cd-2b48-4547-b642-0d7675d3d237", + "canonical_manifest_key": "sites/native-api/markdown/revisions/581090cd-2b48-4547-b642-0d7675d3d237.json", + "canonical_persisted_at": "2026-09-10T20:15:20.307Z", + "artifact_sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "native_document_hashes": [ + "0d1d5858922606e8fecfe329cbebafd30f6411f8d7be69f3bec111ef2339c27d", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "dc3f2eb30b731194bf4dbb5b02d1efb590e5d28fc788d54ebfdbf41ef7263bc9" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "required": true, + "receipt_id": "native_1e35568c9f48487b87bbffeeeaf43b31", + "canonical_state_version": 5, + "canonical_state_revision": "fca9766e-bfcb-4f66-9566-9535c334ce61", + "canonical_manifest_key": "sites/native-api/markdown/revisions/fca9766e-bfcb-4f66-9566-9535c334ce61.json", + "canonical_persisted_at": "2026-09-10T19:50:26.550Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "protected_preview": { + "state": "requested", + "access": "agency_managed", + "url": null + } + }, + "result": { + "schema": "wp-codebox/provisioning-api/v1", + "operation": { + "id": "native_telemetry_20260910_restore", + "siteId": "native-api", + "state": "succeeded", + "stage": "prepared-allocation-native-documents-committed", + "progress": 100, + "retryAt": null, + "error": null, + "receipt": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "action": "restore", + "operation_id": "native_telemetry_20260910_restore", + "target_request_sha256": "bdcf32a13846280d302579f3857ffc524c7965b17ffd77531b494ca1b2028f8a", + "site_id": "native-api", + "customer_id": "customer_417", + "state": "protected_preview", + "site_allocation": { + "allocation_id": "native-api", + "canonical_state_revision": "3255b220-cff9-465d-b58e-73859918764c" + }, + "native_records": { + "page_ids": [ + 2 + ], + "template_ids": [ + 4, + 6 + ], + "media_ids": [ + 1 + ] + }, + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1", + "bricks_artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "dossier_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + "creative_provenance": { + "version": "2026-09-10-v1", + "canonicalCommit": "4a70be1400cbf3e32e05a7cda6a4ca35d28f1c21", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ] + }, + "authorized_asset_hashes": [ + "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460" + ], + "target_role": { + "role_slug": "editor", + "required_capabilities": [ + "bricks_edit_content" + ], + "editability_verified": false + }, + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "protected_preview": { + "state": "ready", + "url": "https://native-api-bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_8a3c03c11ba24262a40041c7d29a6c84/" + }, + "acceptance_results": [ + { + "step": "edit", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "publish", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "public_observation", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "restore", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "reopen", + "status": "not_run", + "evidence_sha256": null + } + ], + "acceptance_transaction_sha256": null, + "deployment": { + "version": "048eaf36-9226-4a86-860b-50e19cf558c6", + "runtime_artifact_version": "2.4-rc", + "runtime_artifact_sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "artifact_hashes": [ + "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9" + ] + }, + "evidence": { + "desktop_sha256": null, + "mobile_sha256": null, + "client_edit_transaction_sha256": null, + "resource_measurements_sha256": "4af7c90a9b1f82f5ba2d431e66e0ac70ae64d2a606f4db49167e7a2edb4a6adb" + }, + "revision_receipt": { + "receipt_id": "native_8a3c03c11ba24262a40041c7d29a6c84", + "canonical_state_version": 7, + "canonical_state_revision": "3255b220-cff9-465d-b58e-73859918764c", + "canonical_manifest_key": "sites/native-api/markdown/revisions/3255b220-cff9-465d-b58e-73859918764c.json", + "canonical_persisted_at": "2026-09-10T20:15:44.801Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "receipt_id": "native_f269f86d0666432180b993e609b09a04", + "canonical_state_version": 6, + "canonical_state_revision": "581090cd-2b48-4547-b642-0d7675d3d237", + "canonical_manifest_key": "sites/native-api/markdown/revisions/581090cd-2b48-4547-b642-0d7675d3d237.json", + "canonical_persisted_at": "2026-09-10T20:15:20.307Z", + "artifact_sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "native_document_hashes": [ + "0d1d5858922606e8fecfe329cbebafd30f6411f8d7be69f3bec111ef2339c27d", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "dc3f2eb30b731194bf4dbb5b02d1efb590e5d28fc788d54ebfdbf41ef7263bc9" + ], + "design_system_version": "design-system-1" + }, + "restoration": { + "restore_receipt_id": "restore_763a9d72cc534c4f90fea34d3e217e4c", + "restored_from": { + "receipt_id": "native_1e35568c9f48487b87bbffeeeaf43b31", + "canonical_state_version": 5, + "canonical_state_revision": "fca9766e-bfcb-4f66-9566-9535c334ce61", + "canonical_manifest_key": "sites/native-api/markdown/revisions/fca9766e-bfcb-4f66-9566-9535c334ce61.json", + "canonical_persisted_at": "2026-09-10T19:50:26.550Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "pre_restore_base": { + "receipt_id": "native_f269f86d0666432180b993e609b09a04", + "canonical_state_version": 6, + "canonical_state_revision": "581090cd-2b48-4547-b642-0d7675d3d237", + "canonical_manifest_key": "sites/native-api/markdown/revisions/581090cd-2b48-4547-b642-0d7675d3d237.json", + "canonical_persisted_at": "2026-09-10T20:15:20.307Z", + "artifact_sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "native_document_hashes": [ + "0d1d5858922606e8fecfe329cbebafd30f6411f8d7be69f3bec111ef2339c27d", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "dc3f2eb30b731194bf4dbb5b02d1efb590e5d28fc788d54ebfdbf41ef7263bc9" + ], + "design_system_version": "design-system-1" + } + } + } + } + }, + "observation": { + "path": "/v1/bricks/sites/native-api/previews/native_8a3c03c11ba24262a40041c7d29a6c84/", + "status": 200, + "wall_ms": 9142, + "heading_observed": true + } + }, + "replay_verified": true, + "poll_verified": true, + "exchanges": [ + { + "path": "/v1/bricks/artifacts/b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "method": "PUT", + "status": 200, + "wall_ms": 1189 + }, + { + "path": "/v1/bricks/sites/native-api/revisions", + "method": "POST", + "status": 200, + "wall_ms": 20406 + }, + { + "path": "/v1/bricks/sites/native-api/restores", + "method": "POST", + "status": 200, + "wall_ms": 10434 + }, + { + "path": "/v1/bricks/sites/native-api/restores", + "method": "POST", + "status": 200, + "wall_ms": 1108 + }, + { + "path": "/v1/sites/native-api/operations/native_telemetry_20260910_restore", + "method": "GET", + "status": 200, + "wall_ms": 171 + } + ] +} \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/receipt.json b/outputs/bricks-native-worker-telemetry/receipt.json new file mode 100644 index 00000000..54c1f7ba --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/receipt.json @@ -0,0 +1,136 @@ +{ + "schema": "wp-codebox/native-worker-telemetry-rehearsal/v1", + "observed_at": "2026-09-10T20:20:44.832231+00:00", + "source_commit": "fd4775e974239de81092356223c78bb4836291db", + "runtime_source_commit": "2f851aa136cb0a20a0bed1c456a6469c12767ba6", + "worker": "bricks24-native-canary-20260910", + "deployment_version": "048eaf36-9226-4a86-860b-50e19cf558c6", + "window": { + "start": "2026-09-10T20:13:00Z", + "end": "2026-09-10T20:18:00Z" + }, + "result": { + "functional_rehearsal": "passed", + "cpu_configured_limit_ms": 300000, + "memory_limit_bytes": 134217728, + "memory_qualification": "failed", + "licensed_editor_qualification": "not_run_missing_legitimate_license", + "production_release_qualification": "not_passed" + }, + "state_before": [ + { + "site_id": "default", + "revision": "11378c4e-5194-4f1a-ae87-a6c9f16087c9", + "manifest_key": "sites/default/markdown/revisions/11378c4e-5194-4f1a-ae87-a6c9f16087c9.json", + "persisted_at": "2026-09-10T07:35:35.441Z", + "version": 24, + "lease_token": null + }, + { + "site_id": "native-api", + "revision": "fca9766e-bfcb-4f66-9566-9535c334ce61", + "manifest_key": "sites/native-api/markdown/revisions/fca9766e-bfcb-4f66-9566-9535c334ce61.json", + "persisted_at": "2026-09-10T19:50:26.550Z", + "version": 5, + "lease_token": null + }, + { + "site_id": "native-engine", + "revision": "ee5555b1-c849-464e-83c5-064f7d359cce", + "manifest_key": "sites/native-engine/markdown/revisions/ee5555b1-c849-464e-83c5-064f7d359cce.json", + "persisted_at": "2026-09-10T19:08:39.332Z", + "version": 1, + "lease_token": null + }, + { + "site_id": "native-sales-rehearsal", + "revision": "8be31b29-8405-4649-b212-3ea77e4c0660", + "manifest_key": "sites/native-sales-rehearsal/markdown/revisions/8be31b29-8405-4649-b212-3ea77e4c0660.json", + "persisted_at": "2026-09-10T19:56:30.650Z", + "version": 1, + "lease_token": null + } + ], + "state_after": [ + { + "site_id": "default", + "revision": "11378c4e-5194-4f1a-ae87-a6c9f16087c9", + "manifest_key": "sites/default/markdown/revisions/11378c4e-5194-4f1a-ae87-a6c9f16087c9.json", + "persisted_at": "2026-09-10T07:35:35.441Z", + "version": 24, + "lease_token": null + }, + { + "site_id": "native-api", + "revision": "3255b220-cff9-465d-b58e-73859918764c", + "manifest_key": "sites/native-api/markdown/revisions/3255b220-cff9-465d-b58e-73859918764c.json", + "persisted_at": "2026-09-10T20:15:44.801Z", + "version": 7, + "lease_token": null + }, + { + "site_id": "native-engine", + "revision": "ee5555b1-c849-464e-83c5-064f7d359cce", + "manifest_key": "sites/native-engine/markdown/revisions/ee5555b1-c849-464e-83c5-064f7d359cce.json", + "persisted_at": "2026-09-10T19:08:39.332Z", + "version": 1, + "lease_token": null + }, + { + "site_id": "native-sales-rehearsal", + "revision": "8be31b29-8405-4649-b212-3ea77e4c0660", + "manifest_key": "sites/native-sales-rehearsal/markdown/revisions/8be31b29-8405-4649-b212-3ea77e4c0660.json", + "persisted_at": "2026-09-10T19:56:30.650Z", + "version": 1, + "lease_token": null + } + ], + "preserved_namespaces": [ + "default", + "native-engine", + "native-sales-rehearsal" + ], + "canonical_inventory": { + "files": { + "files": 147, + "bytes": 38450 + }, + "wpContent": { + "files": 1605, + "bytes": 76474629 + }, + "uploads": { + "files": 1, + "bytes": 68 + } + }, + "restore_pack": { + "schema": "wp-codebox/cloudflare-canonical-restore-pack/v1", + "objectKey": "sites/native-api/restore-packs/d1c5bf85422fca6a04c65e1bb11cb3b54e813aa9ece6c99970ed2ec0bbe35e23.zip", + "sha256": "d1c5bf85422fca6a04c65e1bb11cb3b54e813aa9ece6c99970ed2ec0bbe35e23", + "size": 3051273, + "fileCount": 1021, + "decodedBytes": 13873644 + }, + "measurement_notes": [ + "Wrangler tail cpuTime/wallTime are milliseconds per invocation. GraphQL cpuTime quantiles are microseconds.", + "GraphQL memoryUsageBytes is V8 isolate memory; wasmMemoryBytes is WebAssembly linear memory. Neither is PHP allocator peak. The two memory series must not be added.", + "Memory is sampled for the whole isolate, not a per-request retained-heap snapshot; successful HTTP status does not pass the memory requirement.", + "D1/R2 analytics cover the shared disposable database/bucket during the stated window, including operator activity and any other callers; they are not attributed counts for an individual native invocation.", + "GraphQL subrequests=0 is recorded as returned; it is not proof of zero D1/R2 calls.", + "Stored canonical inventory is logical manifest byte accounting, not total physical bucket storage or live isolate retention.", + "No new customer resource, licensed-editor bypass, or cleanup of active allocations occurred." + ], + "files_sha256": { + "revised-php-measurements.json": "98b91ef07269db1e2ea4768c1c3351871469493a77c5c5afadc8c7792a95ca42", + "invocations.json": "236b39e36622d74df699db8e2562907be33dfda7f212de21af0ab677cfec509f", + "AccountWorkersInvocationsAdaptiveSum.json": "61fcfab00a1afebc3d377de118da1903c6e6694be55886a0a99748d2f6ca378c", + "mutations.json": "4fc235bb36a357f0ab96a63e211d5546993c5b3471c5ac94a707c76217261f3d", + "analytics-query.json": "1aa9dad4efbff3e0c1c8b31ca2b7d7d1a085070515ea5f73a8a3346b75b3776b", + "restored-php-measurements.json": "87fb0cb8e6c855793941ef0f3a774eadac41bf72bf30c675eef523a5eaf5821a", + "bindings-query.json": "ddd9474810d829b18d31ef01183fdb8abca82d9b71ee13e18e08068bc396e7a1", + "bindings-response.json": "30c4391d44ea604192c2d1747fd014ca1f04ada14768de4c79322815db947429", + "AccountWorkersInvocationsAdaptiveQuantiles.json": "d1fccdca7a7a2a3075977aba9f414e389e5c2f0e3c4025e670e77cf1a1cd01b4", + "analytics-response.json": "c88e4059e163cdc4def434f5bfa81c1a96754dd3778b0b1ca0b5506f7c8eb184" + } +} diff --git a/outputs/bricks-native-worker-telemetry/restored-php-measurements.json b/outputs/bricks-native-worker-telemetry/restored-php-measurements.json new file mode 100644 index 00000000..f9252453 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/restored-php-measurements.json @@ -0,0 +1,13 @@ +{ + "schema": "wp-codebox/native-bricks-resource-observation/v1", + "operation_id": "native_telemetry_20260910_restore", + "wall_ms": 8317, + "peak_php_bytes": 48758784, + "unmeasured": [ + "worker_cpu_ms", + "peak_isolate_bytes", + "d1_reads_writes", + "r2_operations", + "subrequests" + ] +} \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/revised-php-measurements.json b/outputs/bricks-native-worker-telemetry/revised-php-measurements.json new file mode 100644 index 00000000..8d9f4664 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/revised-php-measurements.json @@ -0,0 +1,13 @@ +{ + "schema": "wp-codebox/native-bricks-resource-observation/v1", + "operation_id": "native_telemetry_20260910_revise", + "wall_ms": 18975, + "peak_php_bytes": 52953088, + "unmeasured": [ + "worker_cpu_ms", + "peak_isolate_bytes", + "d1_reads_writes", + "r2_operations", + "subrequests" + ] +} \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/system-allocator/README.md b/outputs/bricks-native-worker-telemetry/system-allocator/README.md new file mode 100644 index 00000000..50e9b65a --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/system-allocator/README.md @@ -0,0 +1,33 @@ +# Native system-allocator follow-up + +Source `0bd5103e`, normal disposable Worker version `7657aa45-c5f2-4ac5-ab0c-783544bc3452`. The native PHP startup uses `USE_ZEND_ALLOC=0`; the default WordPress runtime keeps its original allocator. No vendor ZIP or WASM binary changed. Package build and 14 focused native API/artifact/preview tests passed. + +The actual Build writer repeated a native revision and restore, rendered both expected headings, verified replay and terminal polling, and restored the previous content as **new canonical version 9**. All ten captured invocations returned HTTP 200, outcome `ok`, and no exceptions. Default canonical version 24 and the engine/sales allocations remained unchanged. The public default page still returned 200. Active version-preview aliases were not upgraded. + +| Request | Worker CPU ms | Worker wall ms | +| --- | ---: | ---: | +| Protected preview, first render | 3,307 | 6,337 | +| Protected preview, repeat | 3,037 | 4,918 | +| Immutable artifact staging | 6 | 202 | +| Actual native revision, version 8 | 4,458 | 12,921 | +| Revised protected preview | 3,065 | 5,478 | +| Restore native content as version 9 | 3,118 | 6,269 | +| Restored protected preview | 3,134 | 5,622 | +| Restore replay | 5 | 157 | +| Operation poll | 2 | 104 | +| Default public cache hit | 10 | 375 | + +**Memory qualification still fails.** The four rendered previews report 184,273,280–192,740,510 bytes of V8 isolate memory, including 80,543,740 bytes of WebAssembly linear memory. The original allocator's corresponding preview ranges were 225,888,500–268,639,500 bytes total and 139,198,460 bytes WASM. This is a measured improvement, not compliance with the 134,217,728-byte limit. GraphQL may group multiple invocations into a timestamp row; exact per-request CPU/wall comes from the retained tail events. Its samples are not a full execution-peak or retained-object profile. + +The PHP resource receipts now explicitly identify the system allocator and record `peak_php_bytes: null`. PHP's internal counter is unavailable in this mode. Remote Worker CPU, wall, and memory are preserved separately rather than being attributed to those PHP receipts retroactively. + +The query interval's shared-resource totals are 100 D1 read queries, 12 write queries, 270 rows read, 18 rows written, 35 R2 GetObject operations and 39 PutObject operations. They include operator/other-caller activity and are not exact attribution to a single request. The GraphQL subrequest series returned zero; the positive binding counts must not be replaced by that field. The exported query contains the exact observation window. + +- [Receipt and exact before/after pointers](receipt.json) +- [Actual Build requests, operation receipts, and observations](mutations.json) +- [Ten sanitized invocation events](invocations.json) +- [GraphQL memory/CPU response](analytics-response.json) and [query](analytics-query.json) +- [Shared D1/R2 response](bindings-response.json) and [query](bindings-query.json) +- [Revision PHP observation](revised-php-measurements.json) and [restore PHP observation](restored-php-measurements.json) + +All local profiler and tail processes were stopped. Further memory reduction and the licensed visual-editor transaction remain outstanding. This native fixture rehearsal is not proof of a generated customer site or production readiness. diff --git a/outputs/bricks-native-worker-telemetry/system-allocator/analytics-query.json b/outputs/bricks-native-worker-telemetry/system-allocator/analytics-query.json new file mode 100644 index 00000000..ae73f668 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/system-allocator/analytics-query.json @@ -0,0 +1,3 @@ +{ + "query": "query {viewer { accounts(filter:{accountTag:\"c9a6d8fc0e01d908d3d399d12043b2fb\"}) {workersInvocationsAdaptive(limit:100,filter:{scriptName:\"bricks24-native-canary-20260910\",datetime_geq:\"2026-09-10T20:32:00Z\",datetime_leq:\"2026-09-10T20:35:54.289808Z\"}) {sum {subrequests requests errors} quantiles {cpuTimeP50 cpuTimeP99 memoryUsageBytesP50 memoryUsageBytesP99 memoryUsageBytesP999 wasmMemoryBytesP50 wasmMemoryBytesP99 wasmMemoryBytesP999} dimensions {datetime scriptName status}} }}}" +} \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/system-allocator/analytics-response.json b/outputs/bricks-native-worker-telemetry/system-allocator/analytics-response.json new file mode 100644 index 00000000..5913ab67 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/system-allocator/analytics-response.json @@ -0,0 +1,167 @@ +{ + "data": { + "viewer": { + "accounts": [ + { + "workersInvocationsAdaptive": [ + { + "dimensions": { + "datetime": "2026-09-10T20:33:34Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 3065659, + "cpuTimeP99": 3065659, + "memoryUsageBytesP50": 184273280, + "memoryUsageBytesP99": 184273280, + "memoryUsageBytesP999": 184273280, + "wasmMemoryBytesP50": 80543740, + "wasmMemoryBytesP99": 80543740, + "wasmMemoryBytesP999": 80543740 + }, + "sum": { + "errors": 0, + "requests": 1, + "subrequests": 0 + } + }, + { + "dimensions": { + "datetime": "2026-09-10T20:33:21Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 6599, + "cpuTimeP99": 4458251, + "memoryUsageBytesP50": 16907004, + "memoryUsageBytesP99": 64425904, + "memoryUsageBytesP999": 64425904, + "wasmMemoryBytesP50": 0, + "wasmMemoryBytesP99": 0, + "wasmMemoryBytesP999": 0 + }, + "sum": { + "errors": 0, + "requests": 2, + "subrequests": 0 + } + }, + { + "dimensions": { + "datetime": "2026-09-10T20:33:46Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 3134844, + "cpuTimeP99": 3134844, + "memoryUsageBytesP50": 186556240, + "memoryUsageBytesP99": 186556240, + "memoryUsageBytesP999": 186556240, + "wasmMemoryBytesP50": 80543740, + "wasmMemoryBytesP99": 80543740, + "wasmMemoryBytesP999": 80543740 + }, + "sum": { + "errors": 0, + "requests": 1, + "subrequests": 0 + } + }, + { + "dimensions": { + "datetime": "2026-09-10T20:34:43Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 10424, + "cpuTimeP99": 10424, + "memoryUsageBytesP50": 18987184, + "memoryUsageBytesP99": 18987184, + "memoryUsageBytesP999": 18987184, + "wasmMemoryBytesP50": 0, + "wasmMemoryBytesP99": 0, + "wasmMemoryBytesP999": 0 + }, + "sum": { + "errors": 0, + "requests": 1, + "subrequests": 0 + } + }, + { + "dimensions": { + "datetime": "2026-09-10T20:33:52Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 2053, + "cpuTimeP99": 5313, + "memoryUsageBytesP50": 186586000, + "memoryUsageBytesP99": 186586080, + "memoryUsageBytesP999": 186586080, + "wasmMemoryBytesP50": 80543740, + "wasmMemoryBytesP99": 80543740, + "wasmMemoryBytesP999": 80543740 + }, + "sum": { + "errors": 0, + "requests": 2, + "subrequests": 0 + } + }, + { + "dimensions": { + "datetime": "2026-09-10T20:32:06Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 3307978, + "cpuTimeP99": 3307978, + "memoryUsageBytesP50": 192740510, + "memoryUsageBytesP99": 192740510, + "memoryUsageBytesP999": 192740510, + "wasmMemoryBytesP50": 80543740, + "wasmMemoryBytesP99": 80543740, + "wasmMemoryBytesP999": 80543740 + }, + "sum": { + "errors": 0, + "requests": 1, + "subrequests": 0 + } + }, + { + "dimensions": { + "datetime": "2026-09-10T20:32:13Z", + "scriptName": "bricks24-native-canary-20260910", + "status": "success" + }, + "quantiles": { + "cpuTimeP50": 3037437, + "cpuTimeP99": 3037437, + "memoryUsageBytesP50": 192734060, + "memoryUsageBytesP99": 192734060, + "memoryUsageBytesP999": 192734060, + "wasmMemoryBytesP50": 80543740, + "wasmMemoryBytesP99": 80543740, + "wasmMemoryBytesP999": 80543740 + }, + "sum": { + "errors": 0, + "requests": 1, + "subrequests": 0 + } + } + ] + } + ] + } + }, + "errors": null +} \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/system-allocator/bindings-query.json b/outputs/bricks-native-worker-telemetry/system-allocator/bindings-query.json new file mode 100644 index 00000000..afd9aa79 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/system-allocator/bindings-query.json @@ -0,0 +1,3 @@ +{ + "query": "query {viewer { accounts(filter:{accountTag:\"c9a6d8fc0e01d908d3d399d12043b2fb\"}) {d1AnalyticsAdaptiveGroups(limit:100,filter:{databaseId:\"fe4d6486-6cd6-4a2e-9542-4f2dd8af7d8a\",datetime_geq:\"2026-09-10T20:32:00Z\",datetime_leq:\"2026-09-10T20:35:54.289808Z\"}) {sum {readQueries writeQueries rowsRead rowsWritten} dimensions {databaseId}} r2OperationsAdaptiveGroups(limit:100,filter:{bucketName:\"bricks24-native-canary-20260910\",datetime_geq:\"2026-09-10T20:32:00Z\",datetime_leq:\"2026-09-10T20:35:54.289808Z\"}) {sum {requests} dimensions {actionType}} }}}" +} \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/system-allocator/bindings-response.json b/outputs/bricks-native-worker-telemetry/system-allocator/bindings-response.json new file mode 100644 index 00000000..f827dd1d --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/system-allocator/bindings-response.json @@ -0,0 +1,42 @@ +{ + "data": { + "viewer": { + "accounts": [ + { + "d1AnalyticsAdaptiveGroups": [ + { + "dimensions": { + "databaseId": "fe4d6486-6cd6-4a2e-9542-4f2dd8af7d8a" + }, + "sum": { + "readQueries": 100, + "rowsRead": 270, + "rowsWritten": 18, + "writeQueries": 12 + } + } + ], + "r2OperationsAdaptiveGroups": [ + { + "dimensions": { + "actionType": "PutObject" + }, + "sum": { + "requests": 39 + } + }, + { + "dimensions": { + "actionType": "GetObject" + }, + "sum": { + "requests": 35 + } + } + ] + } + ] + } + }, + "errors": null +} \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/system-allocator/invocations.json b/outputs/bricks-native-worker-telemetry/system-allocator/invocations.json new file mode 100644 index 00000000..ead9bcc0 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/system-allocator/invocations.json @@ -0,0 +1,142 @@ +[ + { + "eventTimestamp": 1789072326389, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_8a3c03c11ba24262a40041c7d29a6c84/", + "method": "GET", + "status": 200, + "cpu_ms": 3307, + "wall_ms": 6337, + "outcome": "ok", + "scriptVersion": { + "id": "7657aa45-c5f2-4ac5-ab0c-783544bc3452" + }, + "exceptions": [], + "truncated": false + }, + { + "eventTimestamp": 1789072333069, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_8a3c03c11ba24262a40041c7d29a6c84/", + "method": "GET", + "status": 200, + "cpu_ms": 3037, + "wall_ms": 4918, + "outcome": "ok", + "scriptVersion": { + "id": "7657aa45-c5f2-4ac5-ab0c-783544bc3452" + }, + "exceptions": [], + "truncated": false + }, + { + "eventTimestamp": 1789072401523, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/artifacts/REDACTED", + "method": "PUT", + "status": 200, + "cpu_ms": 6, + "wall_ms": 202, + "outcome": "ok", + "scriptVersion": { + "id": "7657aa45-c5f2-4ac5-ab0c-783544bc3452" + }, + "exceptions": [], + "truncated": false + }, + { + "eventTimestamp": 1789072401770, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/revisions", + "method": "POST", + "status": 200, + "cpu_ms": 4458, + "wall_ms": 12921, + "outcome": "ok", + "scriptVersion": { + "id": "7657aa45-c5f2-4ac5-ab0c-783544bc3452" + }, + "exceptions": [], + "truncated": false + }, + { + "eventTimestamp": 1789072414744, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_f5ffc62fb8b244bc9586a8d762dbdfaa/", + "method": "GET", + "status": 200, + "cpu_ms": 3065, + "wall_ms": 5478, + "outcome": "ok", + "scriptVersion": { + "id": "7657aa45-c5f2-4ac5-ab0c-783544bc3452" + }, + "exceptions": [], + "truncated": false + }, + { + "eventTimestamp": 1789072420284, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/restores", + "method": "POST", + "status": 200, + "cpu_ms": 3118, + "wall_ms": 6269, + "outcome": "ok", + "scriptVersion": { + "id": "7657aa45-c5f2-4ac5-ab0c-783544bc3452" + }, + "exceptions": [], + "truncated": false + }, + { + "eventTimestamp": 1789072426593, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_f0efac00d6e14f78aa657bb3fae5ec94/", + "method": "GET", + "status": 200, + "cpu_ms": 3134, + "wall_ms": 5622, + "outcome": "ok", + "scriptVersion": { + "id": "7657aa45-c5f2-4ac5-ab0c-783544bc3452" + }, + "exceptions": [], + "truncated": false + }, + { + "eventTimestamp": 1789072432260, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/restores", + "method": "POST", + "status": 200, + "cpu_ms": 5, + "wall_ms": 157, + "outcome": "ok", + "scriptVersion": { + "id": "7657aa45-c5f2-4ac5-ab0c-783544bc3452" + }, + "exceptions": [], + "truncated": false + }, + { + "eventTimestamp": 1789072432451, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/sites/native-api/operations/native_allocator_20260910_restore", + "method": "GET", + "status": 200, + "cpu_ms": 2, + "wall_ms": 104, + "outcome": "ok", + "scriptVersion": { + "id": "7657aa45-c5f2-4ac5-ab0c-783544bc3452" + }, + "exceptions": [], + "truncated": false + }, + { + "eventTimestamp": 1789072483709, + "url": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev/", + "method": "GET", + "status": 200, + "cpu_ms": 10, + "wall_ms": 375, + "outcome": "ok", + "scriptVersion": { + "id": "7657aa45-c5f2-4ac5-ab0c-783544bc3452" + }, + "exceptions": [], + "truncated": false + } +] diff --git a/outputs/bricks-native-worker-telemetry/system-allocator/mutations.json b/outputs/bricks-native-worker-telemetry/system-allocator/mutations.json new file mode 100644 index 00000000..10c23289 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/system-allocator/mutations.json @@ -0,0 +1,592 @@ +{ + "origin": "https://bricks24-native-canary-20260910.mavnewlife.workers.dev", + "base": { + "receipt_id": "native_8a3c03c11ba24262a40041c7d29a6c84", + "canonical_state_version": 7, + "canonical_state_revision": "3255b220-cff9-465d-b58e-73859918764c", + "canonical_manifest_key": "sites/native-api/markdown/revisions/3255b220-cff9-465d-b58e-73859918764c.json", + "canonical_persisted_at": "2026-09-10T20:15:44.801Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "revise": { + "request": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "operation_id": "native_allocator_20260910_revise", + "idempotency_key": "native_allocator_20260910_revise", + "site_id": "native-api", + "customer_id": "customer_417", + "bricks_artifact": { + "version": "wp-codebox/bricks-site-artifact/v1", + "sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36" + }, + "runtime_artifact": { + "version": "2.4-rc", + "sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887" + }, + "dossier": { + "revision": 3, + "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + }, + "creative_provenance": { + "canonicalCommit": "4a70be1400cbf3e32e05a7cda6a4ca35d28f1c21", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ], + "version": "2026-09-10-v1" + }, + "authorized_assets": [ + { + "sha256": "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460", + "usage_status": "approved" + } + ], + "starter_id": "starter_native_service_v1", + "editing": { + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "granularity": "native_bricks_elements", + "target_role": { + "required_capabilities": [ + "bricks_edit_content" + ], + "role_slug": "editor" + } + }, + "license_secret_ref": "BRICKS_LICENSE_KEY", + "revision_receipt": { + "receipt_id": "native_8a3c03c11ba24262a40041c7d29a6c84", + "canonical_state_version": 7, + "canonical_state_revision": "3255b220-cff9-465d-b58e-73859918764c", + "canonical_manifest_key": "sites/native-api/markdown/revisions/3255b220-cff9-465d-b58e-73859918764c.json", + "canonical_persisted_at": "2026-09-10T20:15:44.801Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "required": true, + "receipt_id": "native_8a3c03c11ba24262a40041c7d29a6c84", + "canonical_state_version": 7, + "canonical_state_revision": "3255b220-cff9-465d-b58e-73859918764c", + "canonical_manifest_key": "sites/native-api/markdown/revisions/3255b220-cff9-465d-b58e-73859918764c.json", + "canonical_persisted_at": "2026-09-10T20:15:44.801Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "protected_preview": { + "state": "requested", + "access": "agency_managed", + "url": null + } + }, + "result": { + "schema": "wp-codebox/provisioning-api/v1", + "operation": { + "id": "native_allocator_20260910_revise", + "siteId": "native-api", + "state": "succeeded", + "stage": "prepared-allocation-native-documents-committed", + "progress": 100, + "retryAt": null, + "error": null, + "receipt": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "action": "revise", + "operation_id": "native_allocator_20260910_revise", + "target_request_sha256": "98354f783b6fe881d0115ab75dd9d37f8ab2994f521704116bad8538fe5cea86", + "site_id": "native-api", + "customer_id": "customer_417", + "state": "protected_preview", + "site_allocation": { + "allocation_id": "native-api", + "canonical_state_revision": "868780d7-4e8e-41e2-b6f2-d9f62b1e157b" + }, + "native_records": { + "page_ids": [ + 2 + ], + "template_ids": [ + 4, + 6 + ], + "media_ids": [ + 1 + ] + }, + "native_document_hashes": [ + "0d1d5858922606e8fecfe329cbebafd30f6411f8d7be69f3bec111ef2339c27d", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "6420605d3072252306cbe529de1a3817adc01991f83ff31d69b24108139d44d8" + ], + "design_system_version": "design-system-1", + "bricks_artifact_sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "dossier_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + "creative_provenance": { + "version": "2026-09-10-v1", + "canonicalCommit": "4a70be1400cbf3e32e05a7cda6a4ca35d28f1c21", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ] + }, + "authorized_asset_hashes": [ + "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460" + ], + "target_role": { + "role_slug": "editor", + "required_capabilities": [ + "bricks_edit_content" + ], + "editability_verified": false + }, + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "protected_preview": { + "state": "ready", + "url": "https://native-api-bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_f5ffc62fb8b244bc9586a8d762dbdfaa/" + }, + "acceptance_results": [ + { + "step": "edit", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "publish", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "public_observation", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "restore", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "reopen", + "status": "not_run", + "evidence_sha256": null + } + ], + "acceptance_transaction_sha256": null, + "deployment": { + "version": "7657aa45-c5f2-4ac5-ab0c-783544bc3452", + "runtime_artifact_version": "2.4-rc", + "runtime_artifact_sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "artifact_hashes": [ + "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36" + ] + }, + "evidence": { + "desktop_sha256": null, + "mobile_sha256": null, + "client_edit_transaction_sha256": null, + "resource_measurements_sha256": "2e11396bc30b238df89c99bf0620d15373a49822788e56095136588555b5f4bc" + }, + "revision_receipt": { + "receipt_id": "native_f5ffc62fb8b244bc9586a8d762dbdfaa", + "canonical_state_version": 8, + "canonical_state_revision": "868780d7-4e8e-41e2-b6f2-d9f62b1e157b", + "canonical_manifest_key": "sites/native-api/markdown/revisions/868780d7-4e8e-41e2-b6f2-d9f62b1e157b.json", + "canonical_persisted_at": "2026-09-10T20:33:32.015Z", + "artifact_sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "native_document_hashes": [ + "0d1d5858922606e8fecfe329cbebafd30f6411f8d7be69f3bec111ef2339c27d", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "6420605d3072252306cbe529de1a3817adc01991f83ff31d69b24108139d44d8" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "receipt_id": "native_8a3c03c11ba24262a40041c7d29a6c84", + "canonical_state_version": 7, + "canonical_state_revision": "3255b220-cff9-465d-b58e-73859918764c", + "canonical_manifest_key": "sites/native-api/markdown/revisions/3255b220-cff9-465d-b58e-73859918764c.json", + "canonical_persisted_at": "2026-09-10T20:15:44.801Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "restoration": null + } + } + }, + "observation": { + "path": "/v1/bricks/sites/native-api/previews/native_f5ffc62fb8b244bc9586a8d762dbdfaa/", + "status": 200, + "wall_ms": 5524, + "heading_observed": true + } + }, + "restore": { + "request": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "operation_id": "native_allocator_20260910_restore", + "idempotency_key": "native_allocator_20260910_restore", + "site_id": "native-api", + "customer_id": "customer_417", + "bricks_artifact": { + "version": "wp-codebox/bricks-site-artifact/v1", + "sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9" + }, + "runtime_artifact": { + "version": "2.4-rc", + "sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887" + }, + "dossier": { + "revision": 3, + "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + }, + "creative_provenance": { + "canonicalCommit": "4a70be1400cbf3e32e05a7cda6a4ca35d28f1c21", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ], + "version": "2026-09-10-v1" + }, + "authorized_assets": [ + { + "sha256": "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460", + "usage_status": "approved" + } + ], + "starter_id": "starter_native_service_v1", + "editing": { + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "granularity": "native_bricks_elements", + "target_role": { + "required_capabilities": [ + "bricks_edit_content" + ], + "role_slug": "editor" + } + }, + "license_secret_ref": "BRICKS_LICENSE_KEY", + "revision_receipt": { + "receipt_id": "native_f5ffc62fb8b244bc9586a8d762dbdfaa", + "canonical_state_version": 8, + "canonical_state_revision": "868780d7-4e8e-41e2-b6f2-d9f62b1e157b", + "canonical_manifest_key": "sites/native-api/markdown/revisions/868780d7-4e8e-41e2-b6f2-d9f62b1e157b.json", + "canonical_persisted_at": "2026-09-10T20:33:32.015Z", + "artifact_sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "native_document_hashes": [ + "0d1d5858922606e8fecfe329cbebafd30f6411f8d7be69f3bec111ef2339c27d", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "6420605d3072252306cbe529de1a3817adc01991f83ff31d69b24108139d44d8" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "required": true, + "receipt_id": "native_8a3c03c11ba24262a40041c7d29a6c84", + "canonical_state_version": 7, + "canonical_state_revision": "3255b220-cff9-465d-b58e-73859918764c", + "canonical_manifest_key": "sites/native-api/markdown/revisions/3255b220-cff9-465d-b58e-73859918764c.json", + "canonical_persisted_at": "2026-09-10T20:15:44.801Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "protected_preview": { + "state": "requested", + "access": "agency_managed", + "url": null + } + }, + "result": { + "schema": "wp-codebox/provisioning-api/v1", + "operation": { + "id": "native_allocator_20260910_restore", + "siteId": "native-api", + "state": "succeeded", + "stage": "prepared-allocation-native-documents-committed", + "progress": 100, + "retryAt": null, + "error": null, + "receipt": { + "schema_version": 1, + "target_runtime": "wordpress_bricks_cloudflare_v1", + "action": "restore", + "operation_id": "native_allocator_20260910_restore", + "target_request_sha256": "a2dab61b54ac1d137797a835c5545702a606f175f877b2ab183583a39e847eaf", + "site_id": "native-api", + "customer_id": "customer_417", + "state": "protected_preview", + "site_allocation": { + "allocation_id": "native-api", + "canonical_state_revision": "be767628-161b-4f22-b93c-094aaf79b1d0" + }, + "native_records": { + "page_ids": [ + 2 + ], + "template_ids": [ + 4, + 6 + ], + "media_ids": [ + 1 + ] + }, + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1", + "bricks_artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "dossier_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + "creative_provenance": { + "version": "2026-09-10-v1", + "canonicalCommit": "4a70be1400cbf3e32e05a7cda6a4ca35d28f1c21", + "guideSha256": "2222222222222222222222222222222222222222222222222222222222222222", + "catalogSha256": "3333333333333333333333333333333333333333333333333333333333333333", + "references": [ + { + "id": "bright-kind-cleaning", + "sha256": "4444444444444444444444444444444444444444444444444444444444444444" + } + ] + }, + "authorized_asset_hashes": [ + "431ced6916a2a21a156e38701afe55bbd7f88969fbbfc56d7fe099d47f265460" + ], + "target_role": { + "role_slug": "editor", + "required_capabilities": [ + "bricks_edit_content" + ], + "editability_verified": false + }, + "acceptance_sequence": [ + "edit", + "publish", + "public_observation", + "restore", + "reopen" + ], + "protected_preview": { + "state": "ready", + "url": "https://native-api-bricks24-native-canary-20260910.mavnewlife.workers.dev/v1/bricks/sites/native-api/previews/native_f0efac00d6e14f78aa657bb3fae5ec94/" + }, + "acceptance_results": [ + { + "step": "edit", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "publish", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "public_observation", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "restore", + "status": "not_run", + "evidence_sha256": null + }, + { + "step": "reopen", + "status": "not_run", + "evidence_sha256": null + } + ], + "acceptance_transaction_sha256": null, + "deployment": { + "version": "7657aa45-c5f2-4ac5-ab0c-783544bc3452", + "runtime_artifact_version": "2.4-rc", + "runtime_artifact_sha256": "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "artifact_hashes": [ + "a97171e889ff82a92949dff994f10ceeb38cc70d46d7df3d97d3522562c2e887", + "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9" + ] + }, + "evidence": { + "desktop_sha256": null, + "mobile_sha256": null, + "client_edit_transaction_sha256": null, + "resource_measurements_sha256": "dc5b4c9242c36c41deffdb5db4586e49407c1c570656c25cfc4ccb10bbaea25c" + }, + "revision_receipt": { + "receipt_id": "native_f0efac00d6e14f78aa657bb3fae5ec94", + "canonical_state_version": 9, + "canonical_state_revision": "be767628-161b-4f22-b93c-094aaf79b1d0", + "canonical_manifest_key": "sites/native-api/markdown/revisions/be767628-161b-4f22-b93c-094aaf79b1d0.json", + "canonical_persisted_at": "2026-09-10T20:33:44.683Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "rollback_receipt": { + "receipt_id": "native_f5ffc62fb8b244bc9586a8d762dbdfaa", + "canonical_state_version": 8, + "canonical_state_revision": "868780d7-4e8e-41e2-b6f2-d9f62b1e157b", + "canonical_manifest_key": "sites/native-api/markdown/revisions/868780d7-4e8e-41e2-b6f2-d9f62b1e157b.json", + "canonical_persisted_at": "2026-09-10T20:33:32.015Z", + "artifact_sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "native_document_hashes": [ + "0d1d5858922606e8fecfe329cbebafd30f6411f8d7be69f3bec111ef2339c27d", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "6420605d3072252306cbe529de1a3817adc01991f83ff31d69b24108139d44d8" + ], + "design_system_version": "design-system-1" + }, + "restoration": { + "restore_receipt_id": "restore_f7e5405a4d484bd0aae616b011652154", + "restored_from": { + "receipt_id": "native_8a3c03c11ba24262a40041c7d29a6c84", + "canonical_state_version": 7, + "canonical_state_revision": "3255b220-cff9-465d-b58e-73859918764c", + "canonical_manifest_key": "sites/native-api/markdown/revisions/3255b220-cff9-465d-b58e-73859918764c.json", + "canonical_persisted_at": "2026-09-10T20:15:44.801Z", + "artifact_sha256": "e5544bd61426809a13ee5f6af8e99652fa5f58019d2ed55aaa305931733debd9", + "native_document_hashes": [ + "de4a6efd1bc3347cfcef1a74f3533c973e9820a9b704a92acba9837f7139ae67", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "15608f7028a1d7865c1128f80a100b4b299316e21f0e555f81b3bdd061c15930" + ], + "design_system_version": "design-system-1" + }, + "pre_restore_base": { + "receipt_id": "native_f5ffc62fb8b244bc9586a8d762dbdfaa", + "canonical_state_version": 8, + "canonical_state_revision": "868780d7-4e8e-41e2-b6f2-d9f62b1e157b", + "canonical_manifest_key": "sites/native-api/markdown/revisions/868780d7-4e8e-41e2-b6f2-d9f62b1e157b.json", + "canonical_persisted_at": "2026-09-10T20:33:32.015Z", + "artifact_sha256": "b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "native_document_hashes": [ + "0d1d5858922606e8fecfe329cbebafd30f6411f8d7be69f3bec111ef2339c27d", + "0de2fd2af8bd4b4dc97dfba98f36bcb07ebeb596801c50cadec083eac2df17b2", + "0fdaf3d80ddab36110aa06e58707728bf64305b019baa143f33a75f7bb192bb0", + "6420605d3072252306cbe529de1a3817adc01991f83ff31d69b24108139d44d8" + ], + "design_system_version": "design-system-1" + } + } + } + } + }, + "observation": { + "path": "/v1/bricks/sites/native-api/previews/native_f0efac00d6e14f78aa657bb3fae5ec94/", + "status": 200, + "wall_ms": 5656, + "heading_observed": true + } + }, + "replay_verified": true, + "poll_verified": true, + "exchanges": [ + { + "path": "/v1/bricks/artifacts/b084e18fb8010bd8d5ff23b937f42491e3d5fa7a803860c47be59028663d5c36", + "method": "PUT", + "status": 200, + "wall_ms": 321 + }, + { + "path": "/v1/bricks/sites/native-api/revisions", + "method": "POST", + "status": 200, + "wall_ms": 12970 + }, + { + "path": "/v1/bricks/sites/native-api/restores", + "method": "POST", + "status": 200, + "wall_ms": 6323 + }, + { + "path": "/v1/bricks/sites/native-api/restores", + "method": "POST", + "status": 200, + "wall_ms": 195 + }, + { + "path": "/v1/sites/native-api/operations/native_allocator_20260910_restore", + "method": "GET", + "status": 200, + "wall_ms": 137 + } + ] +} \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/system-allocator/receipt.json b/outputs/bricks-native-worker-telemetry/system-allocator/receipt.json new file mode 100644 index 00000000..0543181d --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/system-allocator/receipt.json @@ -0,0 +1,94 @@ +{ + "schema": "wp-codebox/native-worker-system-allocator-rehearsal/v1", + "source_commit": "0bd5103e", + "worker_version": "7657aa45-c5f2-4ac5-ab0c-783544bc3452", + "observed_at": "2026-09-10T20:36:30.540168+00:00", + "functional_result": "passed", + "memory_qualification": "failed", + "memory_limit_bytes": 134217728, + "php_allocator": "system", + "php_memory_counter": "unavailable", + "state_before": [ + { + "site_id": "default", + "revision": "11378c4e-5194-4f1a-ae87-a6c9f16087c9", + "manifest_key": "sites/default/markdown/revisions/11378c4e-5194-4f1a-ae87-a6c9f16087c9.json", + "persisted_at": "2026-09-10T07:35:35.441Z", + "version": 24, + "lease_token": null + }, + { + "site_id": "native-api", + "revision": "3255b220-cff9-465d-b58e-73859918764c", + "manifest_key": "sites/native-api/markdown/revisions/3255b220-cff9-465d-b58e-73859918764c.json", + "persisted_at": "2026-09-10T20:15:44.801Z", + "version": 7, + "lease_token": null + }, + { + "site_id": "native-engine", + "revision": "ee5555b1-c849-464e-83c5-064f7d359cce", + "manifest_key": "sites/native-engine/markdown/revisions/ee5555b1-c849-464e-83c5-064f7d359cce.json", + "persisted_at": "2026-09-10T19:08:39.332Z", + "version": 1, + "lease_token": null + }, + { + "site_id": "native-sales-rehearsal", + "revision": "8be31b29-8405-4649-b212-3ea77e4c0660", + "manifest_key": "sites/native-sales-rehearsal/markdown/revisions/8be31b29-8405-4649-b212-3ea77e4c0660.json", + "persisted_at": "2026-09-10T19:56:30.650Z", + "version": 1, + "lease_token": null + } + ], + "state_after": [ + { + "site_id": "default", + "revision": "11378c4e-5194-4f1a-ae87-a6c9f16087c9", + "manifest_key": "sites/default/markdown/revisions/11378c4e-5194-4f1a-ae87-a6c9f16087c9.json", + "persisted_at": "2026-09-10T07:35:35.441Z", + "version": 24, + "lease_token": null + }, + { + "site_id": "native-api", + "revision": "be767628-161b-4f22-b93c-094aaf79b1d0", + "manifest_key": "sites/native-api/markdown/revisions/be767628-161b-4f22-b93c-094aaf79b1d0.json", + "persisted_at": "2026-09-10T20:33:44.683Z", + "version": 9, + "lease_token": null + }, + { + "site_id": "native-engine", + "revision": "ee5555b1-c849-464e-83c5-064f7d359cce", + "manifest_key": "sites/native-engine/markdown/revisions/ee5555b1-c849-464e-83c5-064f7d359cce.json", + "persisted_at": "2026-09-10T19:08:39.332Z", + "version": 1, + "lease_token": null + }, + { + "site_id": "native-sales-rehearsal", + "revision": "8be31b29-8405-4649-b212-3ea77e4c0660", + "manifest_key": "sites/native-sales-rehearsal/markdown/revisions/8be31b29-8405-4649-b212-3ea77e4c0660.json", + "persisted_at": "2026-09-10T19:56:30.650Z", + "version": 1, + "lease_token": null + } + ], + "validation": { + "package_build": "passed", + "focused_tests_passed": 14, + "actual_native_revision_restore_render_replay_poll": "passed" + }, + "files_sha256": { + "revised-php-measurements.json": "39dc17a89e0c21f609cd74e016ec8e328615dc9a862d9e16c065f1aa0d254300", + "invocations.json": "36474ab4c0e2895ca5cea4984985cae29753e3c2ca8389d1b68938b5359850c6", + "mutations.json": "75fc720bbeeeb60768fcdffb9f3302c9c4b412fac77bc98f6edde0eaab2b5fbc", + "analytics-query.json": "f8323f9589a3273297def191551e13732de859eb7aa9e5d994981e33c819b078", + "restored-php-measurements.json": "d62eaca3866bdbe78c277b571b7a6a39c9518163b317c5837b7487f5da79aff6", + "bindings-query.json": "ab6ba954572f2f790937cf4c493938dbed872475a0e8f5b8c816483d875eba04", + "bindings-response.json": "96a5e8872232475e57518639c3755902210ede0b6f7a8e422326afba86dfbfe0", + "analytics-response.json": "2d2a0d2af88e57493757c51c84bb05749e4a85c807d9cee62c1200b41d22cc05" + } +} diff --git a/outputs/bricks-native-worker-telemetry/system-allocator/restored-php-measurements.json b/outputs/bricks-native-worker-telemetry/system-allocator/restored-php-measurements.json new file mode 100644 index 00000000..d8b17b32 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/system-allocator/restored-php-measurements.json @@ -0,0 +1,15 @@ +{ + "schema": "wp-codebox/native-bricks-resource-observation/v1", + "operation_id": "native_allocator_20260910_restore", + "wall_ms": 4794, + "peak_php_bytes": null, + "php_allocator": "system", + "unmeasured": [ + "peak_php_bytes", + "worker_cpu_ms", + "peak_isolate_bytes", + "d1_reads_writes", + "r2_operations", + "subrequests" + ] +} \ No newline at end of file diff --git a/outputs/bricks-native-worker-telemetry/system-allocator/revised-php-measurements.json b/outputs/bricks-native-worker-telemetry/system-allocator/revised-php-measurements.json new file mode 100644 index 00000000..77341f24 --- /dev/null +++ b/outputs/bricks-native-worker-telemetry/system-allocator/revised-php-measurements.json @@ -0,0 +1,15 @@ +{ + "schema": "wp-codebox/native-bricks-resource-observation/v1", + "operation_id": "native_allocator_20260910_revise", + "wall_ms": 11774, + "peak_php_bytes": null, + "php_allocator": "system", + "unmeasured": [ + "peak_php_bytes", + "worker_cpu_ms", + "peak_isolate_bytes", + "d1_reads_writes", + "r2_operations", + "subrequests" + ] +} \ No newline at end of file diff --git a/packages/runtime-cloudflare/README.md b/packages/runtime-cloudflare/README.md index b125f874..262adc27 100644 --- a/packages/runtime-cloudflare/README.md +++ b/packages/runtime-cloudflare/README.md @@ -86,3 +86,39 @@ For explicitly authorized remote transport evidence, run `npm run remote-gate:pr 5. Run `npm run local-gate` and `npm run local-gate:d1` for the isolated workerd workflow through both coordinator implementations. Each gate generates and provisions all artifacts, verifies the selected backend through the state envelope, injects stable test-only admin-password, auth-secret, and operator-token values, uploads and activates a real plugin ZIP, establishes an anonymous homepage and canonical-permalink publication, and updates a published post through authenticated REST without immediate rendering. The D1 profile proves queue-driven publication before restarting the local process, then proves the immutable R2 result survives restart; local Wrangler queues themselves are process-local rather than a durability substitute for deployed Cloudflare Queues. Wrangler's scheduled-test facade suppresses local queue consumers, so the D1 gate temporarily restarts against the same persisted state for scheduled WordPress cron assertions and returns to normal queue mode for import execution. The coordinator-only Durable Object profile proves the updated canonical state through authenticated REST while preserving its previous immutable publication. Both prove bounded scheduled WordPress cron, coordinator-free R2 reads, and canonical state across restart. A final two-host phase proves isolated mutations, coordinator versions, REST collections, credentials, publications, and caches plus fail-closed unknown-host routing. The remaining coverage includes login, concurrent canonical writes, media, representative frontend/admin/editor assets, PHP diagnostics, session recovery, and a fresh login after restart. This document describes local candidate verification only. It does not claim remote deployment. + + +## Native Bricks API proof of concept + +The authenticated native routes are `PUT /v1/bricks/artifacts/{sha256}`, `POST /v1/bricks/sites`, and `POST /v1/bricks/sites/{siteId}/revisions|restores`. Poll through `GET /v1/sites/{siteId}/operations/{operationId}`. They accept the Build native contract, preserve source/artifact hashes, serialize mutations through the existing D1 lease/CAS, reject stale exact bases, and return immutable operation receipts. Restore creates a new monotonic canonical revision containing the retained target content. + +Provision initializes native documents on an **operator-prepared empty allocation** declared in `WORDPRESS_BRICKS_PREPARED_ALLOCATIONS` and `WORDPRESS_SITE_CONTEXTS`. It does not allocate Cloudflare resources or install Bricks inside a Worker request. Missing preparation returns `native_allocation_unprepared`. The route uses real Bricks vendor authoring and ownership APIs for native pages, templates, classes, variables, palettes and Theme Styles, plus WordPress media APIs. Stable external IDs are mapped consistently to Bricks six-character IDs. A template type change requires a new logical document ID. + +Prepare a fresh local state from a retained Miniflare runtime fixture and the authorized Bricks ZIP: + +```sh +python3 scripts/prepare-native-bricks-allocation.py \ + --source-state .bricks-local-state-SOURCE \ + --destination-state .bricks-local-state-native-api-NEW \ + --output outputs/native-api-prepared-NEW \ + --runtime-zip /absolute/path/bricks.zip --runtime-version 2.4-rc --port 8812 +npx wrangler dev --config outputs/native-api-prepared-NEW/wrangler.jsonc \ + --persist-to .bricks-local-state-native-api-NEW --port 8812 --local +``` + +The preparation script copies generic runtime objects, extracts all Bricks files from the supplied ZIP, seeds fresh WordPress credentials, omits prior customer documents/media/design, and creates only local files. Generated `.dev.vars`, `secrets.json`, and `credentials.json` remain private and ignored. `--site-id` and `--origin` prepare a separate namespace for an operator-controlled remote export; the script never deploys or writes remote state. + +In a second terminal, run the actual Build producer/writer against the runtime: + +```sh +NATIVE_API_ORIGIN=http://127.0.0.1:8812 npx tsx scripts/native-bricks-build-interop.mts \ + outputs/native-api-prepared-NEW /absolute/path/to/Build/source +``` + +Stop and restart Wrangler against the retained state, then capture cold receipt/render evidence: + +```sh +node scripts/native-bricks-cold-reopen.mjs outputs/native-api-prepared-NEW /absolute/evidence/directory +``` + +Local evidence is retained in `../../outputs/bricks-native-api-local-rehearsal`; the real Worker/D1/R2 API fixture proof is in `../../outputs/bricks-native-api-remote-rehearsal`. Non-default native allocations return a ready protected preview at `/v1/bricks/sites/{siteId}/previews/{receiptId}/`. It requires the owning bearer principal, current lifecycle/generation and exact current canonical revision; raw native hosts return 404 and stale previews return 409. Revision and restore retain monotonic canonical versions. Preview readiness does not imply licensed visual-editor or client-role acceptance. Native runtimes disable OPCache file caching to avoid Worker memory failures during rendering. The native target must remain disabled for customer production until the separate licensed remote canary and Build release gates pass. diff --git a/packages/runtime-cloudflare/assets/markdown-database-integration-runtime-bricks.zip b/packages/runtime-cloudflare/assets/markdown-database-integration-runtime-bricks.zip new file mode 100644 index 00000000..b4133a68 Binary files /dev/null and b/packages/runtime-cloudflare/assets/markdown-database-integration-runtime-bricks.zip differ diff --git a/packages/runtime-cloudflare/assets/markdown-database-integration-runtime.zip b/packages/runtime-cloudflare/assets/markdown-database-integration-runtime.zip index 40a5035b..e29fa553 100644 Binary files a/packages/runtime-cloudflare/assets/markdown-database-integration-runtime.zip and b/packages/runtime-cloudflare/assets/markdown-database-integration-runtime.zip differ diff --git a/packages/runtime-cloudflare/assets/mcp-adapter-0.6.1.zip b/packages/runtime-cloudflare/assets/mcp-adapter-0.6.1.zip new file mode 100644 index 00000000..c853a695 Binary files /dev/null and b/packages/runtime-cloudflare/assets/mcp-adapter-0.6.1.zip differ diff --git a/packages/runtime-cloudflare/assets/website-importer-artifact.json b/packages/runtime-cloudflare/assets/website-importer-artifact.json index cbd13bec..d096dc79 100644 --- a/packages/runtime-cloudflare/assets/website-importer-artifact.json +++ b/packages/runtime-cloudflare/assets/website-importer-artifact.json @@ -28,7 +28,7 @@ "version_constant": "STATIC_SITE_IMPORTER_VERSION" }, "abilities": { - "website-artifact-import": "static-site-importer/import" + "website-artifact-import": "static-site-importer/import-website-artifact" }, "limits": { "files": 10000, diff --git a/packages/runtime-cloudflare/assets/wordpress-runtime-artifact.json b/packages/runtime-cloudflare/assets/wordpress-runtime-artifact.json index 7d6bcc83..33e3d7ff 100644 --- a/packages/runtime-cloudflare/assets/wordpress-runtime-artifact.json +++ b/packages/runtime-cloudflare/assets/wordpress-runtime-artifact.json @@ -1,9 +1,9 @@ { "schema": "wp-codebox/wordpress-runtime-artifact/v1", - "key": "runtime/wordpress/279477d490700affba70acc43055045878083358096249314fae4e163dc37502.zip", + "key": "runtime/wordpress/3c3b69a77f2663f4c52a55762a300207158be81e032c46b9e3a9210d3ab8efc8.zip", "archive": { - "sha256": "279477d490700affba70acc43055045878083358096249314fae4e163dc37502", - "size": 5798703 + "sha256": "3c3b69a77f2663f4c52a55762a300207158be81e032c46b9e3a9210d3ab8efc8", + "size": 5810263 }, "source": { "url": "https://downloads.wordpress.org/release/wordpress-7.0.2.zip", diff --git a/packages/runtime-cloudflare/components/website-importer.json b/packages/runtime-cloudflare/components/website-importer.json index 361fd9c1..28164366 100644 --- a/packages/runtime-cloudflare/components/website-importer.json +++ b/packages/runtime-cloudflare/components/website-importer.json @@ -23,7 +23,7 @@ "version_constant": "STATIC_SITE_IMPORTER_VERSION" }, "abilities": { - "website-artifact-import": "static-site-importer/import" + "website-artifact-import": "static-site-importer/import-website-artifact" }, "limits": { "files": 10000, diff --git a/packages/runtime-cloudflare/npm-shrinkwrap.json b/packages/runtime-cloudflare/npm-shrinkwrap.json index 62b0a9d9..441da7e6 100644 --- a/packages/runtime-cloudflare/npm-shrinkwrap.json +++ b/packages/runtime-cloudflare/npm-shrinkwrap.json @@ -11,7 +11,6 @@ "@automattic/wp-codebox-core", "@php-wasm/stream-compression", "@php-wasm/universal", - "@php-wasm/web-8-5", "@wp-playground/wordpress", "patch-package" ], @@ -1267,7 +1266,6 @@ "version": "3.1.46", "resolved": "https://registry.npmjs.org/@php-wasm/web-8-5/-/web-8-5-3.1.46.tgz", "integrity": "sha512-j9wwlY6aNXuKBr4JPJzqE+vkM3Onk+byJsxLqaJs4U0gYDUBLr8CuKuVr+p13apSTUosConePYTAs0214aNxYA==", - "inBundle": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/universal": "3.1.46", @@ -2407,7 +2405,6 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/wasm-feature-detect/-/wasm-feature-detect-1.8.0.tgz", "integrity": "sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ==", - "inBundle": true, "license": "Apache-2.0" }, "node_modules/which": { diff --git a/packages/runtime-cloudflare/package.json b/packages/runtime-cloudflare/package.json index f37064a3..785152ac 100644 --- a/packages/runtime-cloudflare/package.json +++ b/packages/runtime-cloudflare/package.json @@ -62,7 +62,6 @@ "@automattic/wp-codebox-core", "@php-wasm/stream-compression", "@php-wasm/universal", - "@php-wasm/web-8-5", "@wp-playground/wordpress", "patch-package" ], diff --git a/packages/runtime-cloudflare/scripts/bricks-builder-response-debug.mjs b/packages/runtime-cloudflare/scripts/bricks-builder-response-debug.mjs new file mode 100644 index 00000000..b619fec9 --- /dev/null +++ b/packages/runtime-cloudflare/scripts/bricks-builder-response-debug.mjs @@ -0,0 +1,63 @@ +import { mkdir, writeFile } from "node:fs/promises" + +const origin = process.env.BRICKS_PROBE_ORIGIN ?? "http://127.0.0.1:8795" +const password = process.env.BRICKS_PROBE_PASSWORD ?? "bricks-cloudflare-test-password" +const existingPageId = Number.parseInt(process.env.BRICKS_BUILDER_PAGE_ID ?? "", 10) +const outputPath = process.env.BRICKS_BUILDER_OUTPUT +const cookies = [] + +function remember(response) { + for (const raw of response.headers.getSetCookie?.() ?? []) { + const [pair] = raw.split(";", 1) + const [name, value] = pair.split("=", 2) + const index = cookies.findIndex((cookie) => cookie.name === name) + if (index >= 0) cookies[index] = { name, value } + else cookies.push({ name, value }) + } +} + +async function request(path, init = {}) { + const headers = new Headers(init.headers) + if (cookies.length) headers.set("cookie", cookies.map(({ name, value }) => `${name}=${value}`).join("; ")) + const response = await fetch(new URL(path, origin), { ...init, headers, redirect: "manual" }) + remember(response) + return response +} + +await request("/wp-login.php") +await request("/wp-login.php", { + method: "POST", + headers: { "content-type": "application/x-www-form-urlencoded" }, + body: new URLSearchParams({ log: "admin", pwd: password, redirect_to: `${origin}/wp-admin/`, testcookie: "1", "wp-submit": "Log In" }), +}) +const dashboard = await request("/wp-admin/") +const dashboardHtml = await dashboard.text() +const restNonce = dashboardHtml.match(/"nonce":"([^"]+)"/)?.[1] +if (!restNonce) throw new Error("Missing REST nonce.") +let page +if (Number.isInteger(existingPageId) && existingPageId > 0) { + const fetched = await request(`/wp-json/wp/v2/pages/${existingPageId}?context=edit`, { headers: { "x-wp-nonce": restNonce } }) + page = await fetched.json() + if (!fetched.ok || !Number.isInteger(page.id)) throw new Error(`Could not read page: ${fetched.status} ${JSON.stringify(page).slice(0, 1000)}`) +} else { + const created = await request("/wp-json/wp/v2/pages", { + method: "POST", + headers: { "content-type": "application/json", "x-wp-nonce": restNonce }, + body: JSON.stringify({ title: "Bricks response diagnostic", status: "draft" }), + }) + page = await created.json() + if (!created.ok || !Number.isInteger(page.id)) throw new Error(`Could not create page: ${created.status} ${JSON.stringify(page).slice(0, 1000)}`) +} +let response = await request(`/?page_id=${page.id}&bricks=run`) +const redirectChain = [] +for (let hop = 0; hop < 5 && response.status >= 300 && response.status < 400 && response.headers.get("location"); hop += 1) { + redirectChain.push({ status: response.status, location: response.headers.get("location"), headers: Object.fromEntries(response.headers) }) + response = await request(response.headers.get("location")) +} +const body = await response.text() +const report = { status: response.status, headers: Object.fromEntries(response.headers), redirectChain, page: { id: page.id, title: page.title?.rendered }, body: body.slice(0, 8000) } +if (outputPath) { + await mkdir(outputPath.slice(0, outputPath.lastIndexOf("/")), { recursive: true }) + await writeFile(outputPath, `${JSON.stringify(report, null, 2)}\n`) +} +console.log(JSON.stringify(report)) diff --git a/packages/runtime-cloudflare/scripts/bricks-client-transaction-proof.mjs b/packages/runtime-cloudflare/scripts/bricks-client-transaction-proof.mjs new file mode 100644 index 00000000..45eebabd --- /dev/null +++ b/packages/runtime-cloudflare/scripts/bricks-client-transaction-proof.mjs @@ -0,0 +1,211 @@ +import { mkdir, writeFile } from "node:fs/promises" + +const origin = process.env.BRICKS_PROBE_ORIGIN ?? "http://127.0.0.1:8798" +const adminPassword = process.env.BRICKS_PROBE_PASSWORD ?? "bricks-cloudflare-test-password" +const clientPassword = process.env.BRICKS_CLIENT_PASSWORD ?? "bricks-client-content-editor-password" +const outputPath = process.env.BRICKS_CLIENT_OUTPUT ?? "outputs/bricks-client-transaction.json" +const pageId = Number(process.env.BRICKS_HOME_PAGE_ID ?? 13) +const username = process.env.BRICKS_CLIENT_USERNAME ?? "client_content_editor" +const changedText = process.env.BRICKS_CLIENT_CHANGED_TEXT ?? "Professional cleaning, staining, sealing, and repair for outdoor wood surfaces across Southwest Missouri. Client edit proof." +const originalText = "Professional cleaning, staining, sealing, and repair for outdoor wood surfaces across Southwest Missouri." + +class Session { + constructor(login, password) { + this.login = login + this.password = password + this.cookies = [] + } + + cookieHeader() { return this.cookies.map(({ name, value }) => `${name}=${value}`).join("; ") } + + remember(response) { + for (const raw of response.headers.getSetCookie?.() ?? []) { + const pair = raw.split(";", 1)[0] + const equals = pair.indexOf("=") + if (equals < 1) continue + const next = { name: pair.slice(0, equals), value: pair.slice(equals + 1) } + const index = this.cookies.findIndex((item) => item.name === next.name) + if (index >= 0) this.cookies[index] = next + else this.cookies.push(next) + } + } + + async request(path, init = {}) { + const headers = new Headers(init.headers) + if (this.cookies.length) headers.set("cookie", this.cookieHeader()) + const response = await fetch(new URL(path, origin), { ...init, headers, redirect: "manual" }) + this.remember(response) + return response + } + + async loginWordPress() { + const initial = await this.request("/wp-login.php") + if (!initial.ok || !/id=["']loginform["']/i.test(await initial.text())) throw new Error(`${this.login} login form failed`) + const response = await this.request("/wp-login.php", { + method: "POST", + headers: { "content-type": "application/x-www-form-urlencoded" }, + body: new URLSearchParams({ log: this.login, pwd: this.password, redirect_to: `${origin}/wp-admin/`, testcookie: "1", "wp-submit": "Log In" }), + }) + if (![301, 302].includes(response.status)) throw new Error(`${this.login} login failed: ${response.status}`) + const dashboard = await this.request("/wp-admin/") + const html = await dashboard.text() + if (!dashboard.ok || !/Dashboard/i.test(html)) throw new Error(`${this.login} dashboard failed: ${dashboard.status}`) + const nonceResponse = await this.request("/wp-admin/admin-ajax.php?action=rest-nonce") + const nonce = (await nonceResponse.text()).trim() + if (!nonceResponse.ok || !/^[a-f0-9]{10}$/i.test(nonce)) throw new Error(`${this.login} REST nonce endpoint failed`) + return nonce + } + + async rest(path, nonce, init = {}) { + const headers = new Headers(init.headers) + headers.set("x-wp-nonce", nonce) + const response = await this.request(path, { ...init, headers }) + const text = await response.text() + let body + try { body = JSON.parse(text) } catch { body = text } + if (!response.ok) throw new Error(`${init.method ?? "GET"} ${path} failed: ${response.status}; ${text.slice(0, 1600)}`) + return body + } + + async mcpRequest(nonce, sessionId, payload) { + const headers = { "content-type": "application/json", accept: "application/json, text/event-stream", "x-wp-nonce": nonce } + if (sessionId) headers["mcp-session-id"] = sessionId + const response = await this.request("/wp-json/mcp/mcp-adapter-default-server", { method: "POST", headers, body: JSON.stringify(payload) }) + const text = await response.text() + const body = text.trim() ? JSON.parse(text) : null + if (!response.ok || body?.error) throw new Error(`MCP request failed for ${this.login}: ${response.status}; ${text.slice(0, 1800)}`) + return { response, body } + } + + async openMcp(nonce) { + const initialized = await this.mcpRequest(nonce, null, { + jsonrpc: "2.0", id: 1, method: "initialize", + params: { protocolVersion: "2025-11-25", capabilities: {}, clientInfo: { name: "bricks-client-transaction-proof", version: "1.0.0" } }, + }) + const sessionId = initialized.response.headers.get("mcp-session-id") + if (!sessionId) throw new Error("MCP initialize omitted session ID") + await this.mcpRequest(nonce, sessionId, { jsonrpc: "2.0", method: "notifications/initialized" }) + return sessionId + } + + async ability(nonce, sessionId, name, parameters, id) { + const called = await this.mcpRequest(nonce, sessionId, { + jsonrpc: "2.0", id, method: "tools/call", + params: { name: "mcp-adapter-execute-ability", arguments: { ability_name: name, parameters } }, + }) + const result = called.body?.result + if (result?.isError) throw new Error(`${this.login} ability ${name} failed: ${JSON.stringify(result).slice(0, 2200)}`) + const structured = result?.structuredContent + if (structured && typeof structured === "object") return structured + for (const item of result?.content ?? []) { + if (item?.type !== "text") continue + try { return JSON.parse(item.text) } catch {} + } + throw new Error(`${name} returned no structured result`) + } +} + +async function publicBody(marker) { + const response = await fetch(`${origin}/?${marker}=${Date.now()}`, { redirect: "manual" }) + const body = await response.text() + if (!response.ok) throw new Error(`Public observation failed: ${response.status}`) + return { body, headers: Object.fromEntries(response.headers.entries()) } +} + +async function enableAdminAbility(session, abilityName) { + const response = await session.request("/wp-admin/admin.php?page=bricks-ai") + const html = await response.text() + if (!response.ok) throw new Error(`Bricks AI settings failed: ${response.status}`) + const values = [] + let targetExists = false + for (const tag of html.match(/]*>/gi) ?? []) { + if (!/name=["']bricksMcpEnabledAbilities\[\]["']/i.test(tag)) continue + const value = tag.match(/value=["']([^"']+)["']/i)?.[1]?.replaceAll("&", "&") + if (!value) continue + if (value === abilityName) targetExists = true + if (/\bchecked\b/i.test(tag)) values.push(value) + } + if (!targetExists) throw new Error(`Bricks AI settings did not offer ${abilityName}`) + if (!values.includes(abilityName)) values.push(abilityName) + const marker = html.indexOf("var bricksData =") + const nonce = marker >= 0 ? html.slice(marker).match(/"nonce":"([^"]+)"/)?.[1] : null + if (!nonce) throw new Error("Bricks AI settings omitted its admin nonce") + const settings = new URLSearchParams({ abilitiesApi: "on" }) + for (const value of values) settings.append("bricksMcpEnabledAbilities[]", value) + const saved = await session.request("/wp-admin/admin-ajax.php", { + method: "POST", + headers: { "content-type": "application/x-www-form-urlencoded" }, + body: new URLSearchParams({ action: "bricks_save_ai_settings", formData: settings.toString(), nonce }), + }) + const body = await saved.json() + if (!saved.ok || !body.success) throw new Error(`Bricks rejected ${abilityName} activation: ${JSON.stringify(body).slice(0, 1200)}`) + return { abilityName, enabled: true, totalEnabled: values.length } +} + +const admin = new Session("admin", adminPassword) +const adminNonce = await admin.loginWordPress() +const permissionAbility = await enableAdminAbility(admin, "bricks/set-builder-role-access") +let users = await admin.rest(`/wp-json/wp/v2/users?search=${encodeURIComponent(username)}&context=edit`, adminNonce) +let clientUser = Array.isArray(users) ? users.find((user) => user.username === username) : null +if (!clientUser) { + clientUser = await admin.rest("/wp-json/wp/v2/users", adminNonce, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ username, name: "Client Content Editor", email: `${username}@417agency.test`, password: clientPassword, roles: ["editor"] }), + }) +} + +const adminMcp = await admin.openMcp(adminNonce) +const roleGrant = await admin.ability(adminNonce, adminMcp, "bricks/set-builder-role-access", { roleAccess: { editor: "bricks_edit_content" } }, 2) +if (!roleGrant.success) throw new Error(`Editor role grant failed: ${JSON.stringify(roleGrant)}`) + +const client = new Session(username, clientPassword) +const clientNonce = await client.loginWordPress() +const clientMcp = await client.openMcp(clientNonce) +const before = await client.ability(clientNonce, clientMcp, "bricks/get-page-elements", { postId: pageId, responseFormat: "detailed" }, 3) +if (!before.success) throw new Error(`Client page read failed: ${JSON.stringify(before)}`) +const elements = before.data?.elements ?? [] +const target = elements.find((element) => element?.name === "text-basic" && element?.settings?.text === originalText) +if (!target?.id) throw new Error("Client transaction could not locate the exact native lede element") + +const updated = await client.ability(clientNonce, clientMcp, "bricks/update-element", { + postId: pageId, + elementId: target.id, + settings: { text: changedText }, + returnElement: true, +}, 4) +if (!updated.success || !updated.data?.changed || !Number.isInteger(updated.data?.revisionId)) throw new Error(`Client native edit did not commit with revision: ${JSON.stringify(updated)}`) + +const publishAfterEdit = await client.rest(`/wp-json/wp/v2/pages/${pageId}`, clientNonce, { + method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ status: "publish" }), +}) +const observedEdit = await publicBody("client-edit") +if (!observedEdit.body.includes(changedText)) throw new Error("Published page did not expose the client edit") + +const restored = await client.ability(clientNonce, clientMcp, "bricks/restore-revision", { revisionId: updated.data.revisionId, postId: pageId }, 5) +if (!restored.success || !restored.data?.restored) throw new Error(`Client restore failed: ${JSON.stringify(restored)}`) +const publishAfterRestore = await client.rest(`/wp-json/wp/v2/pages/${pageId}`, clientNonce, { + method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ status: "publish" }), +}) +const observedRestore = await publicBody("client-restore") +if (!observedRestore.body.includes(originalText) || observedRestore.body.includes(changedText)) throw new Error("Published page did not expose the restored native Bricks content") + +const reopened = await client.ability(clientNonce, clientMcp, "bricks/get-page-elements", { postId: pageId, responseFormat: "detailed" }, 6) +const reopenedTarget = reopened.data?.elements?.find((element) => element?.id === target.id) +if (reopenedTarget?.settings?.text !== originalText) throw new Error("Client reopen did not return the restored element text") + +const report = { + status: "client-edit-publish-observe-restore-passed", + origin, + client: { id: clientUser.id, username, roles: clientUser.roles }, + roleGrant: roleGrant.data, + permissionAbility, + target: { postId: pageId, elementId: target.id, elementName: target.name }, + edit: { revisionId: updated.data.revisionId, changed: updated.data.changed, publishedStatus: publishAfterEdit.status, publicObserved: true }, + restore: { restored: restored.data.restored, fromRevisionId: restored.data.fromRevisionId, newRevisionId: restored.data.newRevisionId, publishedStatus: publishAfterRestore.status, publicObserved: true, reopened: true }, + publicHeaders: { edit: observedEdit.headers, restore: observedRestore.headers }, + generatedAt: new Date().toISOString(), +} +await mkdir(outputPath.slice(0, outputPath.lastIndexOf("/")), { recursive: true }) +await writeFile(outputPath, `${JSON.stringify(report, null, 2)}\n`) +console.log(JSON.stringify(report)) diff --git a/packages/runtime-cloudflare/scripts/bricks-cloudflare-probe.mjs b/packages/runtime-cloudflare/scripts/bricks-cloudflare-probe.mjs new file mode 100644 index 00000000..b5f31df6 --- /dev/null +++ b/packages/runtime-cloudflare/scripts/bricks-cloudflare-probe.mjs @@ -0,0 +1,174 @@ +import { readFile } from "node:fs/promises" +import { chromium } from "playwright" + +const origin = process.env.BRICKS_PROBE_ORIGIN ?? "http://127.0.0.1:8793" +const password = process.env.BRICKS_PROBE_PASSWORD ?? "bricks-cloudflare-test-password" +const themePath = process.env.BRICKS_THEME_ZIP +const trace = (stage) => { + if (process.env.BRICKS_PROBE_TRACE === "1") console.error(`[bricks-probe] ${stage}`) +} + +if (!themePath) throw new Error("BRICKS_THEME_ZIP is required.") + +const cookies = [] + +function cookieHeader() { + return cookies.map(({ name, value }) => `${name}=${value}`).join("; ") +} + +function rememberCookies(response) { + for (const raw of response.headers.getSetCookie?.() ?? []) { + const [pair] = raw.split(";", 1) + const [name, value] = pair.split("=", 2) + const index = cookies.findIndex((entry) => entry.name === name) + if (index >= 0) cookies[index] = { name, value } + else cookies.push({ name, value }) + } +} + +async function request(path, init = {}) { + const headers = new Headers(init.headers) + if (cookies.length) headers.set("cookie", cookieHeader()) + const response = await fetch(new URL(path, origin), { ...init, headers, redirect: "manual" }) + rememberCookies(response) + return response +} + +function nonce(html, name = "_wpnonce") { + return html.match(new RegExp(`name=["']${name}["'][^>]*value=["']([^"']+)["']`, "i"))?.[1] +} + +function restNonce(html) { + const value = html.match(/"nonce":"([^"]+)"/)?.[1] + if (!value) throw new Error("wp-admin did not expose a REST nonce.") + return value +} + +function bricksThemeContext(html) { + const marker = html.indexOf('id="bricks-action"') + if (marker < 0) return "" + const start = Math.max(html.lastIndexOf('