Skip to content

I1307 — The ChatGPT shape is mapped from evidence and never becomes the canonical model

Map what a ChatGPT Project actually exposes — the project, its conversations, the message graph, content parts, attachment metadata, project instructions — onto the canonical record model, mapping only what an observation supports.

BLOCKED wave 4 · p1 · deep-work profile · parallel safe

Part of external-workspaces — An external workspace is read the way this repository reads anything else, and its content never becomes public by accident.

Blocked. This issue cannot start until I1302, I1305 are done. The status is derived from that, not declared.

Objective

Map what a ChatGPT Project actually exposes — the project, its conversations, the message graph, content parts, attachment metadata, project instructions — onto the canonical record model, mapping only what an observation supports.

Why

The vendor's own shape is a transport detail with a fingerprint (I1305). If it reaches the store or a capability, then the day the vendor reorganises its message graph the repository's model changes with it, and every consumer breaks for a reason none of them can see.

Current state

Nothing exists. No observation has been taken.

Desired state

One mapper turns observed vendor records into the canonical model of I1302. A message graph with branches is preserved as a graph rather than flattened into a list. Content parts keep their type. Attachment metadata is mapped; content is downloaded only where the declaration says downloading is authorised. Anything the evidence does not support is absent, not guessed.

Scope

  • scripts/lib
  • test/cases

Out of scope

  • Any canonical field invented to match a vendor field with no consumer
  • Downloading attachment content where the declaration does not authorise it

Dependencies

Acceptance criteria

  • No vendor DTO field reaches the store or a capability without passing through the mapper
  • A branched conversation keeps its graph; no branch is silently dropped or linearised
  • Content parts keep a typed discriminator rather than being concatenated into text
  • A field the evidence does not support is absent rather than defaulted
  • The mapper is proven against sanitised fixtures with no live account

Validation

  • bash test/run.sh

Evidence required

  • mapper_boundary
  • graph_preserved
  • parts_typed
  • fixtures_prove_it

Evidence

None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.

Risk

Mapping ahead of evidence. Every field here must point at an observation that was actually taken, or it is a guess with a schema around it.

Timeline

started
verified
completed

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I1307.yaml. Read it back with majordomus plan show I1307.