Lesson 271: Blender Diligence Hero GLB rclone Mirror Receipt on BUILD_RECEIPT (2026)

Direct answer: Before Q4 2026 partner diligence mirror week, promote blender_glb_mirror_receipt_v1.json with M1–M6 gates—pin gltf_export_preset_v1.json, export hero_diligence.glb once, sha256sum GLB + hero_glb_mirror_manifest.json, archive rclone copy --dry-run log, crosswalk team_drive_id to cousin diligence_mirror_receipt_v1, and fail-close blender_glb_mirror_ok on BUILD_RECEIPT before live mirror or partner zip. Pair diligence mirror preflight (Guide #33), Blender hero glTF diligence evening, and cousin Lesson 249 (playtest identity—not diligence mirror).

Lesson hero for Blender diligence hero GLB rclone mirror receipt

Why this matters now (Q4 diligence mirror week)

Q4 2026 funds audit release-evidence/diligence/03-art/hero/—not a WIP .blend or informal Dropbox link. Teams pass Lesson 264 archive_handoff_ok on Resolve bundles but still mirror a re-exported GLB whose checksum differs from the partner README. Nightly rclone copy multiplies whatever is on disk—garbage-in equals partner confusion-out.

Lesson 270 wires GameMaker setlive on BUILD_RECEIPT; 271 wires Blender diligence hero mirror so Thursday row review diffs a real 03-art/hero/ story beside 02-trailer/.

Beginner path (export → hash → dry-run → receipt)

Step Action Success check
1 Pin export preset + freeze note M1 EXPORT_FREEZE.md signed
2 Export hero_diligence.glb once File under 03-art/hero/
3 Write manifest + sha256sum M2/M3 lines logged
4 rclone copy --dry-run M4 log shows planned transfers
5 jq team_drive_id crosswalk M5 matches mirror config
6 File receipt + BUILD_RECEIPT blender_glb_mirror_ok: true

Time: ~55 minutes first diligence sprint; ~15 minutes when preset and remote are pinned.

Developer path (gates M1–M6)

Gate Check Fail when
M1 Export preset + modifier freeze Ad-hoc glTF settings per export
M2 sha256 on hero_diligence.glb Hash missing or .blend hashed
M3 hero_glb_mirror_manifest.json vertex_count / glb_bytes absent
M4 rclone copy --dry-run Zero transfers when GLB exists
M5 team_drive_id crosswalk Drift vs diligence_mirror_config_v1
M6 Receipt + BUILD_RECEIPT Promote before M5 GREEN

Align with Guide #33 preflight—guide = ninety-second gate; 271 = BUILD_RECEIPT milestone with promotion jq.

Cousin receipt crosswalk

Field Cousin (playtest Lesson 249) Cousin (evening tutorial) Cousin (Resolve 264) This lesson (271)
Schema gltf_export_hash_receipt_v1 blocks A–D evening resolve_archive_rclone_receipt_v1 blender_glb_mirror_receipt_v1
Scope fest_public / playtest First-evening diligence 02-trailer archive 03-art/hero BUILD_RECEIPT
Path release-evidence/art/ release-evidence/diligence/03-art/hero/ release-evidence/diligence/02-trailer/ release-evidence/diligence/03-art/hero/

Do not merge schemas—reference paths in cousin_receipts only.

M1 — Pin export preset

Archive tools/blender/gltf_export_preset_v1.json (cousin fields from Lesson 249):

{
  "format": "glb",
  "export_apply": true,
  "export_texcoords": true,
  "export_normals": true,
  "export_tangents": true,
  "export_materials": "EXPORT",
  "export_image_format": "AUTO",
  "export_draco_mesh_compression": false,
  "export_animations": true,
  "export_nla_strips": true,
  "export_def_bones": false
}

Freeze checklist (release-evidence/diligence/03-art/hero/EXPORT_FREEZE.md):

Check Pass
hero_diligence collection is sole export root Yes
Modifiers applied consistently Yes
Fab textures use proxy_2k only Yes
Draco policy matches manifest (false for diligence) Yes

M2–M3 — Export + sha256 bundle

Blender File → Export → glTF 2.0 (.glb)release-evidence/diligence/03-art/hero/hero_diligence.glb.

hero_glb_mirror_manifest.json:

{
  "schema": "hero_glb_mirror_manifest_v1",
  "character_id": "hero_combat",
  "build_label": "q4-diligence-2026-rc1",
  "gltf_path": "release-evidence/diligence/03-art/hero/hero_diligence.glb",
  "export_preset": "tools/blender/gltf_export_preset_v1.json",
  "vertex_count": 18432,
  "glb_bytes": 15728640,
  "draco": false,
  "cousin_receipts": {
    "gltf_export_hash_playtest": "release-evidence/art/GLTF_EXPORT_HASH_RECEIPT.json",
    "resolve_archive": "release-evidence/diligence/RESOLVE_ARCHIVE_RCLONE_RECEIPT.json",
    "diligence_mirror": "release-evidence/diligence/DILIGENCE_MIRROR_RECEIPT.json"
  }
}
cd release-evidence/diligence/03-art/hero
sha256sum hero_diligence.glb hero_glb_mirror_manifest.json | tee hero_glb_sha256.txt

M3 pass when manifest vertex_count matches Blender outliner after export.

M4 — rclone dry-run

DATE_TAG="$(date -u +%Y-%m-%d)"
rclone copy release-evidence/diligence/03-art/hero/ \
  "diligence_team:partner_mirror/${DATE_TAG}/03-art/hero/" \
  --dry-run --checksum \
  --include "hero_diligence.glb" --include "hero_glb_mirror_manifest.json" \
  -v 2>&1 | tee "logs/rclone_hero_glb_mirror_dry_run_${DATE_TAG}.log"

Fail-closed: no live copy until dry-run log archived and M4 GREEN.

M5 — Team Drive ID crosswalk

jq -e --arg id "$(jq -r .team_drive_id release-evidence/diligence/diligence_mirror_config_v1.json)" \
  '.team_drive_id == $id' release-evidence/diligence/DILIGENCE_MIRROR_RECEIPT.json

Pair jq rclone Team Drive ID sanity when cousin mirror receipt is stale.

M6 — blender_glb_mirror_receipt_v1.json

{
  "schema": "blender_glb_mirror_receipt_v1",
  "build_label": "q4-diligence-2026-rc1",
  "hero_glb_path": "release-evidence/diligence/03-art/hero/hero_diligence.glb",
  "manifest_path": "release-evidence/diligence/03-art/hero/hero_glb_mirror_manifest.json",
  "sha256_log": "release-evidence/diligence/03-art/hero/hero_glb_sha256.txt",
  "dry_run_log": "logs/rclone_hero_glb_mirror_dry_run_2026-11-04.log",
  "team_drive_id": "0ABC…xyz",
  "rclone_remote": "diligence_team",
  "cousin_receipts": {
    "diligence_mirror": "release-evidence/diligence/DILIGENCE_MIRROR_RECEIPT.json",
    "resolve_archive": "release-evidence/diligence/RESOLVE_ARCHIVE_RCLONE_RECEIPT.json",
    "gltf_export_hash_playtest": "release-evidence/art/GLTF_EXPORT_HASH_RECEIPT.json"
  },
  "gates": {
    "M1_export_preset": "pass",
    "M2_sha256_glb": "pass",
    "M3_manifest": "pass",
    "M4_dry_run": "pass",
    "M5_team_drive_crosswalk": "pass",
    "M6_receipt": "pass"
  },
  "blender_glb_mirror_ok": true,
  "mirror_job_allowed": false
}

Pin as release-evidence/diligence/BLENDER_GLB_MIRROR_RECEIPT.json. mirror_job_allowed on cousin diligence mirror receipt stays false until hero + Resolve cousins GREEN.

BUILD_RECEIPT columns (Q4 diligence lane)

Column Source Pass when
archive_handoff_ok Lesson 264 cousin true when trailer ships same packet
blender_glb_mirror_ok M6 jq true
mirror_job_allowed Cousin diligence mirror true only after hero + Resolve GREEN
gltf_export_hash_ok Lesson 249 Separate live-ops lane

Fail-closed jq (CI tail)

jq -e '.blender_glb_mirror_ok == true' release-evidence/diligence/BLENDER_GLB_MIRROR_RECEIPT.json
jq -e '.gates.M4_dry_run == "pass"' release-evidence/diligence/BLENDER_GLB_MIRROR_RECEIPT.json

Block live rclone copy on 03-art/hero/ unless both exit 0.

Key takeaways

  1. Partners checksum 03-art/hero/—not trust-me email attachments.
  2. Hash .glb + manifest, not .blend (M2/M3).
  3. Dry-run before live mirror (M4)—pair evening tutorial blocks A–D for first path.
  4. Guide #33 preflight owns ninety-second gate; 271 owns BUILD_RECEIPT promotion.
  5. 12-free Blender hero GLB tools bookmark rclone + hash utilities.
  6. Help #32 forward owns hash mismatch after live copy—271 stops bad bytes before copy.
  7. Playtest hero drift is Lesson 249—do not substitute for diligence mirror.

Common mistakes

  • Re-export after manifest without updating sha256 log.
  • Live rclone copy without M4 dry-run log.
  • Merging blender_glb_mirror_receipt_v1 into gltf_export_hash_receipt_v1.
  • Hashing .blend instead of exported .glb.
  • Wrong team_drive_id—hero on My Drive, Resolve on Team Drive (M5).
  • Partner zip before archive_handoff_ok cousin when trailer ships same week.

Troubleshooting

Symptom Lane
Partner hash mismatch Re-run M2; check optimization pass after manifest
Dry-run zero files Wrong --include glob or empty 03-art/hero/
team_drive_id jq fail jq mirror blog M1
Resolve OK, hero missing Lesson 264 cousin path drift
Playtest mesh OK, diligence wrong Different build_label on playtest vs diligence paths

Mini exercise (55 minutes)

  1. Export without freeze note—observe hash drift (M1 fail).
  2. Pass M2–M3 sha256 bundle.
  3. Archive M4 dry-run log; verify M5 jq crosswalk.
  4. File M6 receipt; BUILD_RECEIPT GREEN for blender_glb_mirror_ok.
  5. Confirm cousin mirror_job_allowed still false until Resolve cousin GREEN.

Continuity — November 2026 fest close-out + playtest triage (266–276)

Lesson Receipt focus
270 GameMaker setlive dry-run
271 (this) Blender diligence hero mirror
272 Ren'Py SteamPipe wall-clock (forward)

Previous: Lesson 270 — GameMaker Steam setlive branch dry-run receipt
Next: Lesson 272 — Ren'Py SteamPipe upload wall-clock receipt

FAQ

Same as evening tutorial?
Evening owns blocks A–D first path; 271 owns blender_glb_mirror_receipt_v1 BUILD_RECEIPT column + fail-closed jq.

Same as Guide #33?
Guide = ninety-second preflight; 271 = course milestone with cousin crosswalk + promotion jq.

Same as Lesson 249?
249 = playtest gltf_export_hash_receipt_v1; 271 = diligence blender_glb_mirror_receipt_v1 under 03-art/hero/.

Same as Lesson 264?
264 = Resolve archive archive_handoff_ok; 271 = hero GLB beside trailer in diligence tree.

Does this enable live mirror alone?
No—cousin mirror_job_allowed on diligence mirror receipt requires hero + Resolve cousins GREEN.

Does this replace jq mirror blog?
No—blog owns whole-tree diligence_mirror_receipt_v1; 271 owns hero subtree BUILD_RECEIPT column.


Partners audit checksums in 03-art/hero/—pin export, hash GLB + manifest, dry-run mirror, crosswalk Team Drive ID, then file receipt before live copy.