{
  "$schema": "https://ndcodex.com/schemas/object/v1.json",
  "id": "codex://object/codex-archive-system-v3-10-media-handoff-notes",
  "archive_id": "codex-archive-system-v3-10-media-handoff-notes",
  "slug": "codex-archive-system-v3-10-media-handoff-notes",
  "url": "https://ndcodex.com/objects/codex-archive-system-v3-10-media-handoff-notes/",
  "type": "codex",
  "object_form": null,
  "title": "Codex Archive System V3.10 Media Handoff Notes",
  "summary": "v3.10 hardens image delivery at the publish handoff so HEIC-heavy fieldlogs arrive in cards, galleries, and object pages without manual rescue.",
  "content_text": "v3.10 extends Codex Archive System v3.9 Orientation Clarity Notes.\n\nUse v3.9 for public-facing clarity and v3.10 for current media handoff reliability across intake, publish, and gallery delivery.\n\nv3.10 is the media-handoff release.\n\nOperator value prop:\n\nA fieldlog with phone-native HEIC source can now move from inbox/drop to local publish without the operator having to manually diagnose broken cards, broken lightboxes, or mislabeled camera exports.\n\nWork chunks and wins:\n\nFinalize now owns the media handoff\n\nValue prop: Approval can trigger one reliable publish lane instead of a markdown handoff plus a separate image side quest.\n\nAdded a publish-time media step that reads source-to-public mappings directly from the ready draft.\n\nWired scripts/finalize-approved-ready.mjs to prepare mapped assets before promotion, reconciliation, cleanup, validation, and build.\n\nKept the operator boundary narrow: review, confirm, and let the pipeline finish the rest.\n\nHEIC and HEIF are treated as first-class intake reality\n\nValue prop: Camera-native stills no longer arrive as browser-broken ghosts just because the source filename lied.\n\nDetect actual media format from file signatures instead of trusting the extension.\n\nNormalize HEIC and HEIF delivery to .jpg assets for the public web path.\n\nRemove stale sibling files with the same basename but the wrong extension so old broken targets stop lingering in astro/public.\n\nFieldlog intake now plans the real delivery artifact\n\nValue prop: The draft itself carries a truthful handoff map, which makes later publish automation possible.\n\nMoved media-format detection into shared utilities so intake and publish agree about what a file actually is.\n\nFieldlog ready drafts now plan /media/... targets from actual bytes, not optimistic suffixes.\n\nIntake notes remain the handoff contract until promotion strips them from canonical publish state.\n\nImage handling and object delivery now agree about trust\n\nValue prop: The same object can survive card preview, object page, and gallery expansion without separate repair steps.\n\nHEIC-heavy fieldlogs now arrive in a browser-safe format before Astro computes image metadata and preview framing.\n\nPublish delivery is less fragile when a drop item mixes real JPGs with mislabeled phone exports.\n\nThe proving specimen for this pass was return-of-the-joker, where broken card previews exposed the handoff gap.\n\nNo schema migration is required for v3.10.\n\nNo new object type is introduced in v3.10.\n\nImplementation note:\n\nv3.10 is a trust-widening release. The point is not just better image conversion; it is that the approval handoff now owns the boring but critical work that used to fall between draft planning and public delivery.",
  "content_markdown": "v3.10 extends [Codex Archive System v3.9 Orientation Clarity Notes](/objects/codex-archive-system-v3-9-orientation-clarity-notes).\nUse v3.9 for public-facing clarity and v3.10 for current media handoff reliability across intake, publish, and gallery delivery.\n\nv3.10 is the media-handoff release.\n\nOperator value prop:\n- A fieldlog with phone-native HEIC source can now move from `inbox/drop` to local publish without the operator having to manually diagnose broken cards, broken lightboxes, or mislabeled camera exports.\n\nWork chunks and wins:\n\n1. Finalize now owns the media handoff\n   Value prop: Approval can trigger one reliable publish lane instead of a markdown handoff plus a separate image side quest.\n   - Added a publish-time media step that reads source-to-public mappings directly from the ready draft.\n   - Wired `scripts/finalize-approved-ready.mjs` to prepare mapped assets before promotion, reconciliation, cleanup, validation, and build.\n   - Kept the operator boundary narrow: review, confirm, and let the pipeline finish the rest.\n\n2. HEIC and HEIF are treated as first-class intake reality\n   Value prop: Camera-native stills no longer arrive as browser-broken ghosts just because the source filename lied.\n   - Detect actual media format from file signatures instead of trusting the extension.\n   - Normalize HEIC and HEIF delivery to `.jpg` assets for the public web path.\n   - Remove stale sibling files with the same basename but the wrong extension so old broken targets stop lingering in `astro/public`.\n\n3. Fieldlog intake now plans the real delivery artifact\n   Value prop: The draft itself carries a truthful handoff map, which makes later publish automation possible.\n   - Moved media-format detection into shared utilities so intake and publish agree about what a file actually is.\n   - Fieldlog ready drafts now plan `/media/...` targets from actual bytes, not optimistic suffixes.\n   - Intake notes remain the handoff contract until promotion strips them from canonical publish state.\n\n4. Image handling and object delivery now agree about trust\n   Value prop: The same object can survive card preview, object page, and gallery expansion without separate repair steps.\n   - HEIC-heavy fieldlogs now arrive in a browser-safe format before Astro computes image metadata and preview framing.\n   - Publish delivery is less fragile when a drop item mixes real JPGs with mislabeled phone exports.\n   - The proving specimen for this pass was `return-of-the-joker`, where broken card previews exposed the handoff gap.\n\nNo schema migration is required for v3.10.\nNo new object type is introduced in v3.10.\n\nImplementation note:\n- v3.10 is a trust-widening release. The point is not just better image conversion; it is that the approval handoff now owns the boring but critical work that used to fall between draft planning and public delivery.",
  "author": {
    "id": "nathan-davis",
    "name": "Nathan Davis",
    "designation": "Archive Operator",
    "role": "Archive Operator",
    "handle": "@nathandavis",
    "avatar": "/media/people/nathan-davis.jpg",
    "bio": "Designer, builder, and curator of the Codex Archive."
  },
  "contributors": [
    {
      "id": "nathan-davis",
      "name": "Nathan Davis",
      "designation": "Archive Operator",
      "role": "Archive Operator",
      "handle": "@nathandavis",
      "avatar": "/media/people/nathan-davis.jpg",
      "bio": "Designer, builder, and curator of the Codex Archive."
    }
  ],
  "date_published": "2026-03-13T19:15:00.000Z",
  "date_modified": "2026-03-13T19:15:00.000Z",
  "status": "published",
  "visibility": "public",
  "language": "en-US",
  "axes": {
    "scale": null,
    "depth": null,
    "focus": null,
    "function": null
  },
  "themes": [
    "systems",
    "methodology",
    "observation",
    "transmission",
    "architecture"
  ],
  "constellations": [
    "Cascade Psalms",
    "Maintenance Psalms"
  ],
  "tags": [
    "systems",
    "methodology",
    "observation",
    "transmission",
    "architecture"
  ],
  "keywords": [
    "Codex",
    "systems",
    "methodology",
    "observation",
    "transmission",
    "architecture",
    "Cascade Psalms",
    "Maintenance Psalms"
  ],
  "relations": [
    {
      "kind": "related",
      "target": "codex://object/codex-archive-system-v3-9-orientation-clarity-notes",
      "slug": "codex-archive-system-v3-9-orientation-clarity-notes",
      "url": "https://ndcodex.com/objects/codex-archive-system-v3-9-orientation-clarity-notes/"
    },
    {
      "kind": "related",
      "target": "codex://object/codex-archive-system-v3-8-specimen-surface-notes",
      "slug": "codex-archive-system-v3-8-specimen-surface-notes",
      "url": "https://ndcodex.com/objects/codex-archive-system-v3-8-specimen-surface-notes/"
    },
    {
      "kind": "related",
      "target": "codex://object/codex-archive-system-v3-4-image-experience-notes",
      "slug": "codex-archive-system-v3-4-image-experience-notes",
      "url": "https://ndcodex.com/objects/codex-archive-system-v3-4-image-experience-notes/"
    },
    {
      "kind": "related",
      "target": "codex://object/return-of-the-joker",
      "slug": "return-of-the-joker",
      "url": "https://ndcodex.com/objects/return-of-the-joker/"
    },
    {
      "kind": "dependency",
      "target": "codex://object/codex-archive-system-v3-9-orientation-clarity-notes",
      "slug": "codex-archive-system-v3-9-orientation-clarity-notes",
      "url": "https://ndcodex.com/objects/codex-archive-system-v3-9-orientation-clarity-notes/"
    },
    {
      "kind": "dependency",
      "target": "codex://object/codex-archive-system-v3-8-specimen-surface-notes",
      "slug": "codex-archive-system-v3-8-specimen-surface-notes",
      "url": "https://ndcodex.com/objects/codex-archive-system-v3-8-specimen-surface-notes/"
    },
    {
      "kind": "dependency",
      "target": "codex://object/codex-archive-system-v3-4-image-experience-notes",
      "slug": "codex-archive-system-v3-4-image-experience-notes",
      "url": "https://ndcodex.com/objects/codex-archive-system-v3-4-image-experience-notes/"
    },
    {
      "kind": "connection",
      "target": "codex://object/codex-archive-system-v3-9-orientation-clarity-notes",
      "slug": "codex-archive-system-v3-9-orientation-clarity-notes",
      "url": "https://ndcodex.com/objects/codex-archive-system-v3-9-orientation-clarity-notes/",
      "role": "previous version",
      "display": "feature"
    },
    {
      "kind": "connection",
      "target": "codex://object/codex-archive-system-v3-8-specimen-surface-notes",
      "slug": "codex-archive-system-v3-8-specimen-surface-notes",
      "url": "https://ndcodex.com/objects/codex-archive-system-v3-8-specimen-surface-notes/",
      "role": "delivery image precedent",
      "display": "inline"
    },
    {
      "kind": "connection",
      "target": "codex://object/return-of-the-joker",
      "slug": "return-of-the-joker",
      "url": "https://ndcodex.com/objects/return-of-the-joker/",
      "role": "proving specimen",
      "display": "feature"
    }
  ],
  "media": [],
  "capture": null
}