{"asset":"stylized-town/tree-01@0.2.0","id":"tree-01","version":"0.2.0","title":"Street tree","schema":"agent-ready-assets public QA report v1 (sanitized subset of qa/report.json)","published_sha256":"81204c1539d3de382f9f0251b35d473ff742abd9d0a165f68a4ca204cf56d451","artifact":{"path":"tree-01.glb","sha256":"1227cd02ca3d146a2bd7af927784f26223abe85817a020354c324e25fdd23aa6","size_bytes":50080},"package_sha256":"d466ca9be88c1e75a4b8c4c90cead1d1edec0c7a976bda3691ddbadc5bde4d77","manifest_sha256":"1ffe351fdc3286f0b75463cb8cfe09ce4dcb11d41cb8af441ad2d2b6fbe07f57","release_policy":"kitnevo-production-1","environment":{"blender_build":"5.2.2 LTS","gltf_exporter":"5.2.40","node":"v22.21.1","three":"186","chromium":"156.0.8078.4","playwright":"1.64.1","webgl_renderer":"ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (LLVM 10.0.0) (0x0000C0DE)), SwiftShader driver)","renderer_policy":"swiftshader","gltf_validator":"2.0.0-dev.3.10","gltf_transform":"4.5.1"},"automated_status":"PASSED","overall_status":"PASSED","release_eligible":true,"release_blockers":[],"visual_approval":{"status":"APPROVED"},"gates":[{"id":"G0","name":"Provenance / license","status":"PASSED","checks":[{"id":"recipe-schema","status":"PASSED","message":"recipe matches schemas/recipe.schema.json"},{"id":"generator-allowlisted","status":"PASSED","message":"town2m-tree@1.1.0 is allowlisted"},{"id":"source-inputs-schema","status":"PASSED","message":"source-inputs.json is schema-valid"},{"id":"recipe-hash-bound","status":"PASSED","message":"recorded recipe hash matches recipe.json"},{"id":"palette-hash-bound","status":"PASSED","message":"recorded palette hash matches the palette file"},{"id":"generator-sources-bound","status":"PASSED","message":"recorded generator source hash matches current generator code"},{"id":"input-rights","status":"PASSED","message":"original-generated: no third-party inputs"},{"id":"ai-models","status":"PASSED","message":"no AI model contributed to this asset"},{"id":"glb-built-from-recipe","status":"PASSED","message":"build-info records the current recipe hash"},{"id":"blender-pinned","status":"PASSED","message":"built with Blender 5.2.2 LTS"},{"id":"exporter-pinned","status":"PASSED","message":"glTF exporter 5.2.40"}]},{"id":"G1","name":"Build reproducibility","status":"PASSED","checks":[{"id":"regenerate","status":"PASSED","message":"recipe regenerated in a fresh headless Blender process"},{"id":"fingerprint-geometry","status":"PASSED","message":"geometry fingerprint matches"},{"id":"fingerprint-materials","status":"PASSED","message":"materials fingerprint matches"},{"id":"fingerprint-nodes","status":"PASSED","message":"nodes fingerprint matches"},{"id":"fingerprint-textures","status":"PASSED","message":"textures fingerprint matches"},{"id":"fingerprint-animations","status":"PASSED","message":"animations fingerprint matches"},{"id":"byte-identical","status":"PASSED","message":"regenerated GLB is byte-identical"}]},{"id":"G2","name":"Portable authoring source (.blend)","status":"PASSED","checks":[{"id":"blend-opens","status":"PASSED","message":"opened in a fresh --factory-startup process"},{"id":"no-linked-libraries","status":"PASSED","message":"0 linked libraries"},{"id":"no-missing-external-files","status":"PASSED","message":"0 of 0 external file references are missing"},{"id":"no-absolute-paths","status":"PASSED","message":"0 absolute file references"},{"id":"images-packed","status":"PASSED","message":"0 unpacked file images"},{"id":"expected-collections","status":"PASSED","message":"missing collections: []"},{"id":"embedded-recipe","status":"PASSED","message":"root carries the canonical recipe hash"}]},{"id":"G3","name":"glTF compliance (Khronos validator)","status":"PASSED","checks":[{"id":"glb-container","status":"PASSED","message":"GLB v2, 50080 bytes"},{"id":"gltf-version","status":"PASSED","message":"asset.version 2.0"},{"id":"khronos-validator","status":"PASSED","message":"0 errors, 0 warnings, 2 infos (validator 2.0.0-dev.3.10)"},{"id":"no-required-extensions","status":"PASSED","message":"no required extensions (baseline loader needs no decoders)"},{"id":"extension-allowlist","status":"PASSED","message":"extensionsUsed ⊆ allowlist (0 used)"},{"id":"self-contained","status":"PASSED","message":"all buffers and images embedded"}]},{"id":"G4","name":"Shape / units / transforms","status":"PASSED","checks":[{"id":"has-geometry","status":"PASSED","message":"672 triangles in 3 primitives"},{"id":"finite-attributes","status":"PASSED","message":"0 non-finite attribute values"},{"id":"single-root","status":"PASSED","message":"scene roots: root"},{"id":"root-transform","status":"PASSED","message":"root T[0, 0, 0] R[0, 0, 0, 1] S[1, 1, 1]"},{"id":"unique-node-names","status":"PASSED","message":"node names unique"},{"id":"declared-nodes-present","status":"PASSED","message":"all 6 declared nodes present"},{"id":"no-undeclared-nodes","status":"PASSED","message":"no undeclared nodes"},{"id":"node-kinds","status":"PASSED","message":"node kinds and materials match the contract"},{"id":"valid-indices","status":"PASSED","message":"0 triangles with out-of-range indices"},{"id":"degenerate-faces","status":"PASSED","message":"0 zero-area triangles (0%, limit 1%)"},{"id":"outward-winding","status":"PASSED","message":"3 closed primitives wound outward"},{"id":"normals","status":"PASSED","message":"normals: missing on [], 0 triangles disagree with winding, 0 non-unit"},{"id":"finite-bounds","status":"PASSED","message":"world bounds [-1.3852, 0, -1.4206] .. [1.3852, 4.4473, 1.4206]"},{"id":"nonzero-bounds","status":"PASSED","message":"world size [2.7705, 4.4473, 2.8412] m"},{"id":"dimensions","status":"PASSED","message":"measured [2.7705, 4.4473, 2.8412] m vs target [2.8, 4.45, 2.85] (allowed ±[0.14, 0.2225, 0.1425])"},{"id":"base-on-ground","status":"PASSED","message":"min.y = 0 m (limit ±0.02)"},{"id":"horizontal-pivot","status":"PASSED","message":"bounds center x=0, z=0"},{"id":"world-scale","status":"PASSED","message":"root world scale [1, 1, 1]"},{"id":"measurement-agreement","status":"PASSED","message":"Node (glTF-Transform) and browser (GLTFLoader) bounds differ by 0 m"},{"id":"basis-fixture","status":"PASSED","message":"Blender +X/-Y/+Z arrows load as Three.js +X/+Z/+Y (Y-up, +Z front)"},{"id":"basis-exporter-match","status":"PASSED","message":"basis fixture exported by 5.2.40, asset by 5.2.40"}]},{"id":"G5","name":"Facing and modular alignment","status":"PASSED","checks":[{"id":"front-marker-direction","status":"PASSED","message":"marker +Z axis [0, 0, 1] · declared front [0, 0, 1] = 1 (min 0.99)"},{"id":"front-marker-side","status":"PASSED","message":"marker sits on the declared front side (alignment 1)"},{"id":"anchor:anchor-base","status":"PASSED","message":"at [0, 0, 0] (error 0 m), outward dot 1, up dot 1"},{"id":"multi-view","status":"PASSED","message":"6 of 6 contact-sheet views rendered"}]},{"id":"G6","name":"Materials / texture correctness","status":"PASSED","checks":[{"id":"declared-materials","status":"PASSED","message":"3 declared materials present"},{"id":"no-undeclared-materials","status":"PASSED","message":"no undeclared or duplicate materials"},{"id":"material-factors","status":"PASSED","message":"metallic-roughness factors match the declared palette materials"},{"id":"pbr-runtime-material","status":"PASSED","message":"GLTFLoader created metallic-roughness PBR materials"},{"id":"rendered-material-colors","status":"PASSED","message":"rendered material colors within ±16/255 of the palette"},{"id":"no-placeholder-render","status":"PASSED","message":"no placeholder-magenta in rendered views"}]},{"id":"G7","name":"Web load and render (Chromium + Three.js)","status":"PASSED","checks":[{"id":"loader-ready","status":"PASSED","message":"GLTFLoader parsed the GLB and the scene rendered"},{"id":"tested-bytes","status":"PASSED","message":"browser hashed the exact published bytes"},{"id":"console-errors","status":"PASSED","message":"no console errors"},{"id":"page-errors","status":"PASSED","message":"no uncaught page errors"},{"id":"network","status":"PASSED","message":"no failed or missing resource requests"},{"id":"no-external-requests","status":"PASSED","message":"no requests outside the local origin"},{"id":"webgl-context","status":"PASSED","message":"WebGL context stable"},{"id":"gl-errors","status":"PASSED","message":"gl.getError() == NO_ERROR after every render"},{"id":"draw-calls","status":"PASSED","message":"3 draw calls (ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (LLVM 10.0.0) (0x0000C0DE)), SwiftShader driver))"},{"id":"render-coverage","status":"PASSED","message":"coverage per view: front 22.1%, back 22.1%, left 22.2%, right 22.2%, top 60.1%, iso 15%"},{"id":"not-black","status":"PASSED","message":"max mean luminance of visible pixels 0.1727 (min 0.02)"}]},{"id":"G8","name":"Animation / skin","status":"NOT_APPLICABLE","checks":[{"id":"animations","status":"NOT_APPLICABLE","message":"no animations declared or present (static asset)"}]},{"id":"G9","name":"Optimized variant parity","status":"NOT_APPLICABLE","checks":[{"id":"optimized-variant","status":"NOT_APPLICABLE","message":"no optimized GLB variant in this package (baseline only)"}]},{"id":"G10","name":"Performance budgets","status":"PASSED","checks":[{"id":"glb-size","status":"PASSED","message":"50080 bytes (budget 1048576)"},{"id":"triangles","status":"PASSED","message":"672 triangles (budget 5000)"},{"id":"materials","status":"PASSED","message":"3 materials (budget 4)"},{"id":"texture-size","status":"PASSED","message":"largest texture 0px (budget 1024)"},{"id":"draw-calls","status":"PASSED","message":"3 draw calls in the iso view (budget 8)"},{"id":"load-timing","status":"PASSED","message":"browser timings recorded in browser.json; advisory only (software renderer, not a device benchmark)"}]},{"id":"G11","name":"Visual consistency + human approval","status":"PASSED","checks":[{"id":"contact-sheet","status":"PASSED","message":"6/6 views in the contact sheet"},{"id":"visual-qa","status":"PASSED","message":"V1-V13 PASSED (V1 PASSED, V2 PASSED, V3 PASSED, V4 PASSED, V5 PASSED, V6 PASSED, V7 PASSED, V8 PASSED, V9 NOT_APPLICABLE, V10 PASSED, V11 PASSED, V12 PASSED, V13 PASSED; technical baseline MATCHED); qa/visual/index.html. Objective checks only: counts_as_approval=false"},{"id":"human-approval","status":"PASSED","message":"approved by Ricardo Carvalho"},{"id":"golden-diff","status":"PASSED","message":"fresh renders vs approved screenshots: front 0%, back 0%, left 0%, right 0%, top 0%, iso 0% (limit 0.2%)"}]},{"id":"G12","name":"Download / install","status":"PASSED","checks":[{"id":"evidence-binding","status":"PASSED","message":"clean-room run bound to GLB 1227cd02ca3d, manifest 3a4ff4995a84, distribution sources 59d6a893dddf"},{"id":"network-isolation","status":"PASSED","message":"online phase: internal docker network (catalog + hostile registries only, no internet); offline phase: --network none"},{"id":"no-blender-environment","status":"PASSED","message":"customer container: blender absent (command -v blender fails); python3 absent; node v22.21.1; three 0.186.1; SDK 0.5.1"},{"id":"clean-room-steps","status":"PASSED","message":"step exit codes {\"transcript_online\":0,\"offline_cli\":0,\"typecheck\":0,\"build\":0,\"browser_tests\":0,\"verify_project\":0,\"starters_online\":0,\"starters_offline\":0}"},{"id":"bench-guide","status":"PASSED","message":"bench page (MCP asset guide: original + tested preset): ready; 6.3% of the canvas drawn; GLBs served from the project (28 distinct); console errors 0, page errors 0, failed 0, external 0"},{"id":"customization-isolation","status":"PASSED","message":"customized bench wood #5A3A22 (own material true), original/source #AE855E/#AE855E, height ratio 1.2"},{"id":"guide-modular-host-written","status":"PASSED","message":"entry file of get_integration_guide stylized-town/house-01@0.2.0 (three) written unchanged: src/host.ts 4c553ff2aae4"},{"id":"guides-written-verbatim","status":"PASSED","message":"entry files from get_integration_guide written unchanged (html entry paths renamed for the r3f and bench pages): src/main.ts 014d359257ed, src/r3f.tsx e86f723d879b, src/bench.ts ab13d2c09b45"},{"id":"host-guide","status":"PASSED","message":"modular host page (MCP asset guide: original + swapped part): ready; 24.2% of the canvas drawn; GLBs served from the project (29 distinct); console errors 0, page errors 0, failed 0, external 0"},{"id":"host-install-pulls-parts","status":"PASSED","message":"add stylized-town/house-01@0.2.0 in a fresh project: exit 0 installed; lockfile 7 packages (6 pinned parts, all present); verify exit 0"},{"id":"install-idempotent","status":"PASSED","message":"add stylized-town/bench-01@0.4.0 (registry from the lockfile, public): installed; kit add again: unchanged"},{"id":"install-via-mcp-url","status":"PASSED","message":"get_download_url (entitlement ent-customer) -> agent-ready-assets kit add --url: installed; lockfile package sha256 17fd2f57c7c6339f == MCP == catalog"},{"id":"installed-files-verified","status":"PASSED","message":"verify: stylized-town/bench-01@0.4.0 PASS (13 files); stylized-town@0.4.0 PASS (256 files)"},{"id":"installed-pins-match-catalog","status":"PASSED","message":"for every kit asset: installed GLB + manifest sha256 (CLI inspect) == MCP get_asset pins"},{"id":"modular-swap-isolation","status":"PASSED","message":"stylized-town/cafe-01@0.1.0 front-door=door-01: mounted anchor-door-main:stylized-town/door-01@0.1.0 (declared anchor-door-main:stylized-town/door-01@0.1.0); an unmodified instance mounts 0 parts (baked default); shared source unchanged"},{"id":"offline-customize-modular","status":"PASSED","message":"customize stylized-town/house-01@0.2.0 (swap + colour + toggle) --dry-run: exit 0, config sha256 0c8e79f33ca0"},{"id":"offline-customize","status":"PASSED","message":"customize --dry-run: config sha256 491b148ab9e3"},{"id":"offline-inspect","status":"PASSED","message":"inspect stylized-town/bench-01@0.4.0: wood-color, size-scale, armrests"},{"id":"offline-network-disabled","status":"PASSED","message":"<internal https origin> unreachable (container runs with --network none)"},{"id":"offline-reinstall-noop","status":"PASSED","message":"kit add stylized-town@0.4.0 with no network: unchanged (lockfile fast path)"},{"id":"offline-scene-snaps","status":"PASSED","message":"scene validate --resolve offline: exit 0, 77 attach_to snaps resolved"},{"id":"offline-scene-validate","status":"PASSED","message":"scene validate: PASS"},{"id":"offline-tamper-detected","status":"PASSED","message":"one flipped byte in bench-01.glb -> verify exit 1 INTEGRITY_FAILED; restored -> exit 0"},{"id":"offline-verify","status":"PASSED","message":"verify against assets.lock.json: exit 0"},{"id":"r3f-town","status":"PASSED","message":"React Three Fiber town (MCP kit guide, r3f): ready; 99.7% of the canvas drawn; GLBs served from the project (28 distinct); console errors 0, page errors 0, failed 0, external 0"},{"id":"scene-snaps-resolved","status":"PASSED","message":"scene validate --resolve: 77 attach_to snaps resolved (recommend_scene said 77), 0 outside 1 mm / opposed / aligned"},{"id":"scene-validate","status":"PASSED","message":"recommend_scene -> src/scenes/town.scene.json: PASS, 161 instances"},{"id":"starter-starter-r3f:build","status":"PASSED","message":"vite build: exit 0"},{"id":"starter-starter-r3f:kit-add","status":"PASSED","message":"pnpm run kit:add (agent-ready-assets kit add stylized-town@0.4.0 --to public/assets, the kit src/scenes/starter.scene.json pins: stylized-town@0.4.0): exit 0 installed"},{"id":"starter-starter-r3f:no-credential-in-project","status":"PASSED","message":"no project file contains the token (the lockfile records the entitlement id only)"},{"id":"starter-starter-r3f:reinstall-offline-noop","status":"PASSED","message":"kit add stylized-town@0.4.0 with no network, registry or token: unchanged (lockfile fast path)"},{"id":"starter-starter-r3f:renders","status":"PASSED","message":"starter-r3f: data-ready true; 7 instances (6 snapped); 93.8% of the canvas drawn; 6 distinct GLBs served from the project; console errors 0, page errors 0, failed 0, external 0"},{"id":"starter-starter-r3f:scene-validate","status":"PASSED","message":"scene validate src/scenes/starter.scene.json --resolve: exit 0, scene 1.1.0, 7 instances, 6 snapped (max mate distance 0.0e+0 m)"},{"id":"starter-starter-r3f:typecheck","status":"PASSED","message":"tsc --noEmit: exit 0"},{"id":"starter-starter-r3f:verify-project-locally-validated","status":"PASSED","message":"verify-project --browser chromium: exit 0, LOCALLY_VALIDATED; 0 configs + 1 scenes"},{"id":"starter-starter-r3f:verify","status":"PASSED","message":"agent-ready-assets verify: exit 0 stylized-town@0.4.0 PASS"},{"id":"starter-starter-vanilla:build","status":"PASSED","message":"vite build: exit 0"},{"id":"starter-starter-vanilla:kit-add","status":"PASSED","message":"pnpm run kit:add (agent-ready-assets kit add stylized-town@0.4.0 --to public/assets, the kit src/scenes/starter.scene.json pins: stylized-town@0.4.0): exit 0 installed"},{"id":"starter-starter-vanilla:no-credential-in-project","status":"PASSED","message":"no project file contains the token (the lockfile records the entitlement id only)"},{"id":"starter-starter-vanilla:reinstall-offline-noop","status":"PASSED","message":"kit add stylized-town@0.4.0 with no network, registry or token: unchanged (lockfile fast path)"},{"id":"starter-starter-vanilla:renders","status":"PASSED","message":"starter-vanilla: data-ready true; 7 instances (6 snapped); 96.1% of the canvas drawn; 6 distinct GLBs served from the project; console errors 0, page errors 0, failed 0, external 0"},{"id":"starter-starter-vanilla:scene-validate","status":"PASSED","message":"scene validate src/scenes/starter.scene.json --resolve: exit 0, scene 1.1.0, 7 instances, 6 snapped (max mate distance 0.0e+0 m)"},{"id":"starter-starter-vanilla:typecheck","status":"PASSED","message":"tsc --noEmit: exit 0"},{"id":"starter-starter-vanilla:verify-project-locally-validated","status":"PASSED","message":"verify-project --browser chromium: exit 0, LOCALLY_VALIDATED; 0 configs + 1 scenes"},{"id":"starter-starter-vanilla:verify","status":"PASSED","message":"agent-ready-assets verify: exit 0 stylized-town@0.4.0 PASS"},{"id":"vanilla-town","status":"PASSED","message":"plain Three.js town (MCP kit guide, three): ready; 36.1% of the canvas drawn; GLBs served from the project (28 distinct); console errors 0, page errors 0, failed 0, external 0"},{"id":"dimensions-match-manifest","status":"PASSED","message":"stylized-town/tree-01@0.2.0: measured 2.7705 x 4.4473 x 2.8412 m vs manifest 2.77047 x 4.44728 x 2.84123 m (tolerance 5% or 2 cm); GLB sha256 1227cd02ca3d146a..."},{"id":"installed-bytes-pinned","status":"PASSED","message":"installed public/assets/stylized-town/assets/tree-01/0.2.0/tree-01.glb sha256 1227cd02ca3d146a / manifest 3a4ff4995a84e4fb vs catalog pins 1227cd02ca3d146a / 3a4ff4995a84e4fb"}]},{"id":"G13","name":"Source / package security","status":"PASSED","checks":[{"id":"security-suite","status":"PASSED","message":"110/110 hostile/auth/ticket/server/MCP/metadata/credential cases refused exactly as expected with no side effects (hostile-registry 33, origin 3, entitlement 5, install 7, offline 3, project-safety 12, server 12, mcp 19, metadata 6, modular 8, credentials 2)"},{"id":"credential-hygiene","status":"PASSED","message":"the catalog server log of the clean-room run contains no token and no download ticket (tickets are redacted)"},{"id":"auth-expired-token","status":"PASSED","message":"kit add stylized-town@0.4.0 -> exit 3 ENTITLEMENT_EXPIRED/ENTITLEMENT_EXPIRED; project unchanged"},{"id":"auth-no-token","status":"PASSED","message":"kit add stylized-town@0.4.0 -> exit 3 ENTITLEMENT_REQUIRED/ENTITLEMENT_REQUIRED; project unchanged"},{"id":"auth-wrong-scope","status":"PASSED","message":"kit add stylized-town@0.4.0 -> exit 3 ENTITLEMENT_REQUIRED/ENTITLEMENT_REQUIRED; project unchanged"},{"id":"hostile-archive-symlink","status":"PASSED","message":"add evil/archive-symlink@1.0.0 -> exit 1 INTEGRITY_FAILED/SYMLINK_ENTRY; project unchanged"},{"id":"hostile-archive-traversal","status":"PASSED","message":"add evil/archive-traversal@1.0.0 -> exit 1 INTEGRITY_FAILED/PATH_TRAVERSAL; project unchanged"},{"id":"hostile-corrupt-bytes","status":"PASSED","message":"add evil/corrupt-bytes@1.0.0 -> exit 1 INTEGRITY_FAILED/PACKAGE_HASH_MISMATCH; project unchanged"},{"id":"hostile-cross-origin-ticket","status":"PASSED","message":"add evil/cross-origin-ticket@1.0.0 -> exit 1 UNSAFE_ORIGIN/CROSS_ORIGIN; project unchanged"},{"id":"hostile-gzip-bomb","status":"PASSED","message":"add evil/gzip-bomb@1.0.0 -> exit 1 INTEGRITY_FAILED/ARCHIVE_TOO_LARGE; project unchanged"},{"id":"hostile-manifest-path-escape","status":"PASSED","message":"add evil/manifest-path-escape@1.0.0 -> exit 1 INTEGRITY_FAILED/MANIFEST_INVALID; project unchanged"},{"id":"hostile-phantom-capability","status":"PASSED","message":"add evil/phantom-capability@1.0.0 -> exit 1 INTEGRITY_FAILED/CONTRACT_INVALID; project unchanged"},{"id":"hostile-redirect","status":"PASSED","message":"add evil/redirect@1.0.0 -> exit 1 UNSAFE_ORIGIN/REDIRECT; project unchanged"},{"id":"insecure-scheme","status":"PASSED","message":"add stylized-town/bench-01@0.4.0 --registry <internal http origin> -> exit 1 UNSAFE_ORIGIN/INSECURE_SCHEME; project unchanged"},{"id":"mcp-download-requires-entitlement","status":"PASSED","message":"anonymous: ENTITLEMENT_REQUIRED; expired token: ENTITLEMENT_EXPIRED"},{"id":"no-credential-in-project","status":"PASSED","message":"no token in any project file (lockfile records the entitlement id only)"},{"id":"tls-untrusted-certificate","status":"PASSED","message":"add stylized-town/bench-01@0.4.0 -> exit 1 UNSAFE_ORIGIN/TLS_UNTRUSTED; project unchanged"}]},{"id":"G14","name":"Capability contract","status":"NOT_APPLICABLE","checks":[{"id":"l2-l3","status":"NOT_APPLICABLE","message":"L1-only asset: no L2/L3 customization capabilities advertised"}]},{"id":"G15","name":"Variation correctness","status":"NOT_APPLICABLE","checks":[{"id":"l2-l3","status":"NOT_APPLICABLE","message":"L1-only asset: no L2/L3 customization capabilities advertised"}]},{"id":"G16","name":"Clean-room consumer E2E (no Blender)","status":"NOT_APPLICABLE","checks":[{"id":"l2-l3","status":"NOT_APPLICABLE","message":"L1-only asset: no L2/L3 customization capabilities advertised"}]},{"id":"G17","name":"Agent / CLI contract","status":"NOT_APPLICABLE","checks":[{"id":"l2-l3","status":"NOT_APPLICABLE","message":"L1-only asset: no L2/L3 customization capabilities advertised"}]}],"customization":null,"sanitization":{"redactions":0,"rules":[],"dropped_fields":[]}}
