stylized-town/awning-01@0.1.0

Quality report: Awning part

The result of the publisher's automated checks on the exact file named below. It is not an independent certification.

Status

Automated checks
Passed
Overall
Passed
Review by a person
APPROVED
Eligible for release
Yes

See the asset

The files this report describes

GLB file
awning-01.glb · 44 KB
GLB sha256
f779b205f652f1e6b79fe9acf6a524a78d4b142d645ec10ba0ff567053fb38da
Manifest sha256
d50b79f50a56ab4ec9e83974f78fe4ea7165598e3d8616150c5166d605f04a5b
Package sha256
c71cb12e03f8ad083b47185131917d2907ac9314dcc058313db5570639d3f00f
Published report sha256
42f7249a9d967836897f57cef277b0cdf6beeb6b30959f18eb0621199e159764
Release policy
kitnevo-production-1

Check your copy

Compute the sha256 of the installed file and compare it with the GLB sha256 above. If they match, your file is the file that was tested. The same report is available as JSON.

Terminalcopy as is
shasum -a 256 awning-01.glb

Gates

Each gate groups the checks of one topic. Open a gate to read its checks and their messages.

G0Passed
G1Passed
G2Passed
G3Passed
G4Passed
G5Passed
G6Passed
G7Passed
G8Not applicable
G9Not applicable
G10Passed
G11Passed
G12Passed
G13Passed
G14Not applicable
G15Not applicable
G16Not applicable
G17Not applicable
G0 Provenance / licensePassed 12 checks
  • recipe-schema — recipe matches schemas/recipe.schema.json
  • generator-allowlisted — town2m-awning@1.0.0 is allowlisted
  • source-inputs-schema — source-inputs.json is schema-valid
  • recipe-hash-bound — recorded recipe hash matches recipe.json
  • palette-hash-bound — recorded palette hash matches the palette file
  • generator-sources-bound — recorded generator source hash matches current generator code
  • input-rights — original-generated: no third-party inputs
  • ai-models — no AI model contributed to this asset
  • glb-built-from-recipe — build-info records the current recipe hash
  • blender-pinned — built with Blender 5.2.2 LTS
  • exporter-pinned — glTF exporter 5.2.40
  • generated-input:textures/awning-stripes-basecolor.png — textures/awning-stripes-basecolor.png hash matches provenance record
G1 Build reproducibilityPassed 7 checks
  • regenerate — recipe regenerated in a fresh headless Blender process
  • fingerprint-geometry — geometry fingerprint matches
  • fingerprint-materials — materials fingerprint matches
  • fingerprint-nodes — nodes fingerprint matches
  • fingerprint-textures — textures fingerprint matches
  • fingerprint-animations — animations fingerprint matches
  • byte-identical — regenerated GLB is byte-identical
G2 Portable authoring source (.blend)Passed 7 checks
  • blend-opens — opened in a fresh --factory-startup process
  • no-linked-libraries — 0 linked libraries
  • no-missing-external-files — 0 of 0 external file references are missing
  • no-absolute-paths — 0 absolute file references
  • images-packed — 0 unpacked file images
  • expected-collections — missing collections: []
  • embedded-recipe — root carries the canonical recipe hash
G3 glTF compliance (Khronos validator)Passed 6 checks
  • glb-container — GLB v2, 45092 bytes
  • gltf-version — asset.version 2.0
  • khronos-validator — 0 errors, 0 warnings, 2 infos (validator 2.0.0-dev.3.10)
  • no-required-extensions — no required extensions (baseline loader needs no decoders)
  • extension-allowlist — extensionsUsed ⊆ allowlist (0 used)
  • self-contained — all buffers and images embedded
G4 Shape / units / transformsPassed 19 checks
  • has-geometry — 372 triangles in 2 primitives
  • finite-attributes — 0 non-finite attribute values
  • single-root — scene roots: root
  • root-transform — root T[0, 0, 0] R[0, 0, 0, 1] S[1, 1, 1]
  • unique-node-names — node names unique
  • declared-nodes-present — all 5 declared nodes present
  • no-undeclared-nodes — no undeclared nodes
  • node-kinds — node kinds and materials match the contract
  • valid-indices — 0 triangles with out-of-range indices
  • degenerate-faces — 0 zero-area triangles (0%, limit 1%)
  • outward-winding — 2 closed primitives wound outward
  • normals — normals: missing on [], 0 triangles disagree with winding, 0 non-unit
  • finite-bounds — world bounds [-1.73, -0.6, 0] .. [1.73, 0.07, 0.98]
  • nonzero-bounds — world size [3.46, 0.67, 0.98] m
  • dimensions — measured [3.46, 0.67, 0.98] m vs target [3.46, 0.67, 0.98] (allowed ±[0.173, 0.0335, 0.049])
  • world-scale — root world scale [1, 1, 1]
  • measurement-agreement — Node (glTF-Transform) and browser (GLTFLoader) bounds differ by 0 m
  • basis-fixture — Blender +X/-Y/+Z arrows load as Three.js +X/+Z/+Y (Y-up, +Z front)
  • basis-exporter-match — basis fixture exported by 5.2.40, asset by 5.2.40
G5 Facing and modular alignmentPassed 4 checks
  • front-marker-direction — marker +Z axis [0, 0, 1] · declared front [0, 0, 1] = 1 (min 0.99)
  • front-marker-side — marker sits on the declared front side (alignment 1)
  • anchor:anchor-plug — at [0, 0, 0] (error 0 m), outward dot 1, up dot 1
  • multi-view — 6 of 6 contact-sheet views rendered
G6 Materials / texture correctnessPassed 14 checks
  • declared-materials — 2 declared materials present
  • no-undeclared-materials — no undeclared or duplicate materials
  • material-factors — metallic-roughness factors match the declared palette materials
  • texture-decode:awning-stripes-basecolor — image/png decodes (1024x1024)
  • texture-size:awning-stripes-basecolor — size 1024x1024 vs declared 1024x1024
  • texture-mime:awning-stripes-basecolor — mime image/png
  • texture-uv:awning-stripes-basecolor — textured primitives carry TEXCOORD_0
  • texture-swatches:awning-stripes-basecolor — 2 declared sRGB swatches match the embedded image
  • texture-placeholder:awning-stripes-basecolor — 0% placeholder-magenta texels
  • pbr-runtime-material — GLTFLoader created metallic-roughness PBR materials
  • runtime-colorspace — color textures sRGB, data textures linear, all decoded by the browser
  • rendered-swatches — rendered texture swatches within ±16/255 of declared sRGB
  • rendered-material-colors — rendered material colors within ±16/255 of the palette
  • no-placeholder-render — no placeholder-magenta in rendered views
G7 Web load and render (Chromium + Three.js)Passed 11 checks
  • loader-ready — GLTFLoader parsed the GLB and the scene rendered
  • tested-bytes — browser hashed the exact published bytes
  • console-errors — no console errors
  • page-errors — no uncaught page errors
  • network — no failed or missing resource requests
  • no-external-requests — no requests outside the local origin
  • webgl-context — WebGL context stable
  • gl-errors — gl.getError() == NO_ERROR after every render
  • draw-calls — 2 draw calls (ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (LLVM 10.0.0) (0x0000C0DE)), SwiftShader driver))
  • render-coverage — coverage per view: front 16.2%, back 16.2%, left 18.1%, right 18.1%, top 23.4%, iso 23.2%
  • not-black — max mean luminance of visible pixels 0.292 (min 0.02)
G8 Animation / skinNot applicable 1 check
  • animations — no animations declared or present (static asset)
G9 Optimized variant parityNot applicable 1 check
  • optimized-variant — no optimized GLB variant in this package (baseline only)
G10 Performance budgetsPassed 6 checks
  • glb-size — 45092 bytes (budget 524288)
  • triangles — 372 triangles (budget 3000)
  • materials — 2 materials (budget 4)
  • texture-size — largest texture 1024px (budget 1024)
  • draw-calls — 2 draw calls in the iso view (budget 6)
  • load-timing — browser timings recorded in browser.json; advisory only (software renderer, not a device benchmark)
G11 Visual consistency + human approvalPassed 4 checks
  • contact-sheet — 6/6 views in the contact sheet
  • visual-qa — V1-V13 PASSED (V1 PASSED, V2 PASSED, V3 PASSED, V4 PASSED, V5 PASSED, V6 PASSED, V7 PASSED, V8 PASSED, V9 PASSED, V10 PASSED, V11 PASSED, V12 PASSED, V13 PASSED; technical baseline MATCHED); qa/visual/index.html. Objective checks only: counts_as_approval=false
  • human-approval — approved by Ricardo Carvalho
  • golden-diff — fresh renders vs approved screenshots: front 0%, back 0%, left 0%, right 0%, top 0%, iso 0% (limit 0.2%)
G12 Download / installPassed 48 checks
  • evidence-binding — clean-room run bound to GLB f779b205f652, manifest 78e0085dd968, distribution sources 59d6a893dddf
  • network-isolation — online phase: internal docker network (catalog + hostile registries only, no internet); offline phase: --network none
  • no-blender-environment — customer container: blender absent (command -v blender fails); python3 absent; node v22.21.1; three 0.186.1; SDK 0.5.1
  • clean-room-steps — 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}
  • bench-guide — 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
  • customization-isolation — customized bench wood #5A3A22 (own material true), original/source #AE855E/#AE855E, height ratio 1.2
  • guide-modular-host-written — entry file of get_integration_guide stylized-town/house-01@0.2.0 (three) written unchanged: src/host.ts 4c553ff2aae4
  • guides-written-verbatim — 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
  • host-guide — 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
  • host-install-pulls-parts — 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
  • install-idempotent — add stylized-town/bench-01@0.4.0 (registry from the lockfile, public): installed; kit add again: unchanged
  • install-via-mcp-url — get_download_url (entitlement ent-customer) -> agent-ready-assets kit add --url: installed; lockfile package sha256 17fd2f57c7c6339f == MCP == catalog
  • installed-files-verified — verify: stylized-town/bench-01@0.4.0 PASS (13 files); stylized-town@0.4.0 PASS (256 files)
  • installed-pins-match-catalog — for every kit asset: installed GLB + manifest sha256 (CLI inspect) == MCP get_asset pins
  • modular-swap-isolation — 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
  • offline-customize-modular — customize stylized-town/house-01@0.2.0 (swap + colour + toggle) --dry-run: exit 0, config sha256 0c8e79f33ca0
  • offline-customize — customize --dry-run: config sha256 491b148ab9e3
  • offline-inspect — inspect stylized-town/bench-01@0.4.0: wood-color, size-scale, armrests
  • offline-network-disabled — <internal https origin> unreachable (container runs with --network none)
  • offline-reinstall-noop — kit add stylized-town@0.4.0 with no network: unchanged (lockfile fast path)
  • offline-scene-snaps — scene validate --resolve offline: exit 0, 77 attach_to snaps resolved
  • offline-scene-validate — scene validate: PASS
  • offline-tamper-detected — one flipped byte in bench-01.glb -> verify exit 1 INTEGRITY_FAILED; restored -> exit 0
  • offline-verify — verify against assets.lock.json: exit 0
  • r3f-town — 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
  • scene-snaps-resolved — scene validate --resolve: 77 attach_to snaps resolved (recommend_scene said 77), 0 outside 1 mm / opposed / aligned
  • scene-validate — recommend_scene -> src/scenes/town.scene.json: PASS, 161 instances
  • starter-starter-r3f:build — vite build: exit 0
  • starter-starter-r3f:kit-add — 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
  • starter-starter-r3f:no-credential-in-project — no project file contains the token (the lockfile records the entitlement id only)
  • starter-starter-r3f:reinstall-offline-noop — kit add stylized-town@0.4.0 with no network, registry or token: unchanged (lockfile fast path)
  • starter-starter-r3f:renders — 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
  • starter-starter-r3f:scene-validate — 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)
  • starter-starter-r3f:typecheck — tsc --noEmit: exit 0
  • starter-starter-r3f:verify-project-locally-validated — verify-project --browser chromium: exit 0, LOCALLY_VALIDATED; 0 configs + 1 scenes
  • starter-starter-r3f:verify — agent-ready-assets verify: exit 0 stylized-town@0.4.0 PASS
  • starter-starter-vanilla:build — vite build: exit 0
  • starter-starter-vanilla:kit-add — 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
  • starter-starter-vanilla:no-credential-in-project — no project file contains the token (the lockfile records the entitlement id only)
  • starter-starter-vanilla:reinstall-offline-noop — kit add stylized-town@0.4.0 with no network, registry or token: unchanged (lockfile fast path)
  • starter-starter-vanilla:renders — 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
  • starter-starter-vanilla:scene-validate — 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)
  • starter-starter-vanilla:typecheck — tsc --noEmit: exit 0
  • starter-starter-vanilla:verify-project-locally-validated — verify-project --browser chromium: exit 0, LOCALLY_VALIDATED; 0 configs + 1 scenes
  • starter-starter-vanilla:verify — agent-ready-assets verify: exit 0 stylized-town@0.4.0 PASS
  • vanilla-town — 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
  • dimensions-match-manifest — stylized-town/awning-01@0.1.0: measured 3.46 x 0.67 x 0.98 m vs manifest 3.46 x 0.67 x 0.98 m (tolerance 5% or 2 cm); GLB sha256 f779b205f652f1e6...
  • installed-bytes-pinned — installed public/assets/stylized-town/assets/awning-01/0.1.0/awning-01.glb sha256 f779b205f652f1e6 / manifest 78e0085dd968f275 vs catalog pins f779b205f652f1e6 / 78e0085dd968f275
G13 Source / package securityPassed 17 checks
  • security-suite — 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)
  • credential-hygiene — the catalog server log of the clean-room run contains no token and no download ticket (tickets are redacted)
  • auth-expired-token — kit add stylized-town@0.4.0 -> exit 3 ENTITLEMENT_EXPIRED/ENTITLEMENT_EXPIRED; project unchanged
  • auth-no-token — kit add stylized-town@0.4.0 -> exit 3 ENTITLEMENT_REQUIRED/ENTITLEMENT_REQUIRED; project unchanged
  • auth-wrong-scope — kit add stylized-town@0.4.0 -> exit 3 ENTITLEMENT_REQUIRED/ENTITLEMENT_REQUIRED; project unchanged
  • hostile-archive-symlink — add evil/archive-symlink@1.0.0 -> exit 1 INTEGRITY_FAILED/SYMLINK_ENTRY; project unchanged
  • hostile-archive-traversal — add evil/archive-traversal@1.0.0 -> exit 1 INTEGRITY_FAILED/PATH_TRAVERSAL; project unchanged
  • hostile-corrupt-bytes — add evil/corrupt-bytes@1.0.0 -> exit 1 INTEGRITY_FAILED/PACKAGE_HASH_MISMATCH; project unchanged
  • hostile-cross-origin-ticket — add evil/cross-origin-ticket@1.0.0 -> exit 1 UNSAFE_ORIGIN/CROSS_ORIGIN; project unchanged
  • hostile-gzip-bomb — add evil/gzip-bomb@1.0.0 -> exit 1 INTEGRITY_FAILED/ARCHIVE_TOO_LARGE; project unchanged
  • hostile-manifest-path-escape — add evil/manifest-path-escape@1.0.0 -> exit 1 INTEGRITY_FAILED/MANIFEST_INVALID; project unchanged
  • hostile-phantom-capability — add evil/phantom-capability@1.0.0 -> exit 1 INTEGRITY_FAILED/CONTRACT_INVALID; project unchanged
  • hostile-redirect — add evil/redirect@1.0.0 -> exit 1 UNSAFE_ORIGIN/REDIRECT; project unchanged
  • insecure-scheme — add stylized-town/bench-01@0.4.0 --registry <internal http origin> -> exit 1 UNSAFE_ORIGIN/INSECURE_SCHEME; project unchanged
  • mcp-download-requires-entitlement — anonymous: ENTITLEMENT_REQUIRED; expired token: ENTITLEMENT_EXPIRED
  • no-credential-in-project — no token in any project file (lockfile records the entitlement id only)
  • tls-untrusted-certificate — add stylized-town/bench-01@0.4.0 -> exit 1 UNSAFE_ORIGIN/TLS_UNTRUSTED; project unchanged
G14 Capability contractNot applicable 1 check
  • l2-l3 — L1-only asset: no L2/L3 customization capabilities advertised
G15 Variation correctnessNot applicable 1 check
  • l2-l3 — L1-only asset: no L2/L3 customization capabilities advertised
G16 Clean-room consumer E2E (no Blender)Not applicable 1 check
  • l2-l3 — L1-only asset: no L2/L3 customization capabilities advertised
G17 Agent / CLI contractNot applicable 1 check
  • l2-l3 — L1-only asset: no L2/L3 customization capabilities advertised

Test 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

Prepared for publication: 0 fragments that identified test machines or networks were redacted. Fields not shown: none.