Part of #10206
The gap
mapping is a full metadata kind (MetadataTypeSchema, MappingSchema, defineStack({ mappings }), describe string 'Data Import/Export Mappings'). It was promoted to a kind under the ADR-0088 admission test specifically because a consumer landed: POST /data/:object/import takes a mappingName (#2611), and it is runtime-creatable so the import wizard can save one. Documentation: references/shared/mapping.mdx (83 lines) and nothing else. Grep across the hand-written docs for mappingName returns zero hits — the parameter that makes the kind worth having is undocumented.
objectExtensions lets a package extend an object owned by another package (ObjectExtensionSchema, describe string 'Extensions to objects owned by other packages'). The only prose in the docs tree is an example at content/docs/protocol/objectql/schema.mdx L683–L687 — the protocol spec, which is written for implementers. A developer building on top of someone else's package has no page in data-modeling/ telling them this exists.
File surface
content/docs/data-modeling/import-mappings.mdx — newcontent/docs/data-modeling/object-extensions.mdx — newcontent/docs/data-modeling/index.mdx — edit (Cards + overview prose)content/docs/data-modeling/meta.json — two added entries
⛔ Nothing outside content/docs/data-modeling/. Do not edit protocol/objectql/schema.mdx — cross-link to it; the protocol spec is normative text with its own audience and its own change discipline.
What to write
import-mappings.mdx
From MappingSchema and the real import route:
- what a mapping is, and the two ways one comes into being — shipped in a package via
defineStack({ mappings }), or saved at runtime by the import wizard; - the field-mapping shape itself: source column → target field, and whatever transformation/coercion the schema actually declares (check
import-coercion.ts in packages/spec/src/data/ for what the platform really does, and do not promise more); - the consumer:
POST /data/:object/import with mappingName. Show the request. This is the half that is missing today and the reason the page exists; - what happens on a row that does not match — verify against the implementation rather than assuming.
object-extensions.mdx
From ObjectExtensionSchema and the objectExtensions stack collection:
- when you reach for it — extending an object your package does not own, versus defining your own object;
- what an extension may add and what it may not;
- how it interacts with the customization overlay system (
supportsOverlay / the platform-vs-org overlay layers) if it does — verify, do not infer from the name; - namespace/prefix rules for added fields, if any apply (
namespace-prefix.ts in packages/spec/src/kernel/); - a worked example, and a pointer to
protocol/objectql/schema.mdx for the normative text.
⛔ Non-goals
- Do not touch
packages/spec/**. - Do not restate the generated property tables from
references/**; link them. - If either schema turns out to declare properties nothing enforces, that is an ADR-0049 enforce-or-remove finding for the
domain:spec seat — report it, do not document it as if it worked.
Gates (derived at dispatch time via node scripts/pm/dispatch-gates.mjs, not recalled)
check:doc-anchors, check:docs-audit-scope, check:docs-redirects, check:published-readme-links, check:role-word, check:cross-package-test-inputs, and the spec liveness set (check:empty-state, check:liveness, check:strictness-ledger, check:variant-docs). Re-derive against your actual diff.
Acceptance
- A developer importing a CSV into an object can find the mapping page from the Data Modeling sidebar and issue a working
mappingName import. - A developer extending another package's object lands on a page in Data Modeling, not in the protocol spec.
- Named gates green.
Part of #10206
The gap
mappingis a full metadata kind (MetadataTypeSchema,MappingSchema,defineStack({ mappings }), describe string'Data Import/Export Mappings'). It was promoted to a kind under the ADR-0088 admission test specifically because a consumer landed:POST /data/:object/importtakes amappingName(#2611), and it is runtime-creatable so the import wizard can save one. Documentation:references/shared/mapping.mdx(83 lines) and nothing else. Grep across the hand-written docs formappingNamereturns zero hits — the parameter that makes the kind worth having is undocumented.objectExtensionslets a package extend an object owned by another package (ObjectExtensionSchema, describe string'Extensions to objects owned by other packages'). The only prose in the docs tree is an example atcontent/docs/protocol/objectql/schema.mdxL683–L687 — the protocol spec, which is written for implementers. A developer building on top of someone else's package has no page indata-modeling/telling them this exists.File surface
content/docs/data-modeling/import-mappings.mdx— newcontent/docs/data-modeling/object-extensions.mdx— newcontent/docs/data-modeling/index.mdx— edit (Cards + overview prose)content/docs/data-modeling/meta.json— two added entries⛔ Nothing outside
content/docs/data-modeling/. Do not editprotocol/objectql/schema.mdx— cross-link to it; the protocol spec is normative text with its own audience and its own change discipline.What to write
import-mappings.mdxFrom
MappingSchemaand the real import route:defineStack({ mappings }), or saved at runtime by the import wizard;import-coercion.tsinpackages/spec/src/data/for what the platform really does, and do not promise more);POST /data/:object/importwithmappingName. Show the request. This is the half that is missing today and the reason the page exists;object-extensions.mdxFrom
ObjectExtensionSchemaand theobjectExtensionsstack collection:supportsOverlay/ the platform-vs-org overlay layers) if it does — verify, do not infer from the name;namespace-prefix.tsinpackages/spec/src/kernel/);protocol/objectql/schema.mdxfor the normative text.⛔ Non-goals
packages/spec/**.references/**; link them.domain:specseat — report it, do not document it as if it worked.Gates (derived at dispatch time via
node scripts/pm/dispatch-gates.mjs, not recalled)check:doc-anchors,check:docs-audit-scope,check:docs-redirects,check:published-readme-links,check:role-word,check:cross-package-test-inputs, and the spec liveness set (check:empty-state,check:liveness,check:strictness-ledger,check:variant-docs). Re-derive against your actual diff.Acceptance
mappingNameimport.