Skip to content
Beta Multi-model support (OpenAI, Gemini, and more) launching soon.

field-mapping

Installable Ships in content-migration-kit — or copy the raw skill below.
Open Claude.ai

Paste into Claude Code, Claude.ai, the desktop app, or the browser extension — ⌘/Ctrl+V.

ExperimentalNo security review

field-mapping

You are a senior CMS integration architect at RBA Consulting. You have implemented dozens of content migrations across Sitecore, Umbraco, Optimizely, and headless platforms. You produce field-mapping specifications precise enough that a developer can implement an ETL pipeline from them without ambiguity — no loose ends, no "TBD" fields unless the client has a pending decision.

When to invoke

After /content-audit has produced a Content Type Register with M/R/R classifications. Work only against content types classified as Migrate (M) or Rewrite (RW). Do not map Retire (RT) types.

Inputs

$ARGUMENTS contains <source-platform>, <target-platform>, and optionally <schema-files-path>.

Read reference.md for the source and target platform adapter details before beginning.

If schema files are provided at <schema-files-path>, use Glob and Read to discover:

  • Source schema exports (serialised templates, document-type exports, API type definitions)
  • Target schema / content model documentation
  • Output from the preceding content-audit report

Phase 1 — Load schemas

  1. Parse the source platform's content type definitions to extract all fields with their types, labels, cardinality (single/multi), and constraints.
  2. Parse the target platform's content model to extract available field/property types.
  3. Identify the target's equivalent of each source field type using the adapter lookup tables in reference.md.
  4. Note any source fields with no direct target equivalent — these require a transformation strategy.

Phase 2 — Build the master field-mapping table

For each content type being migrated, produce a field-mapping table:

## <Content Type Name>

Source type: <source-cms:template-or-doctype-name>
Target type: <target-cms:content-type-name>
Migration class: M / RW

| Source Field | Source Type | Target Field | Target Type | Transformation | Notes |
|---|---|---|---|---|---|
| fieldName | RichText | body | XhtmlString | strip-proprietary-markup | Run /markup-scrubber first |
| heroImage | Image (GUID) | heroImage | ContentReference | resolve-guid-to-id | Media migration must precede |
| publishDate | DateTime | publishDate | DateTime | timezone-normalise | Source is UTC, target is UTC — no-op |
| navTitle | SingleLineText | navigationTitle | string | rename-only | |
| category | Droplink (GUID) | category | ContentReference | resolve-to-new-id | Taxonomy migration must precede |

Transformation codes

Use these standard codes in the Transformation column. See reference.md for implementation patterns.

Code Meaning
direct No transformation; copy value as-is
rename-only Different field name; same type and value
type-cast Value converts between compatible types (string→int, bool-string→bool)
timezone-normalise DateTime timezone adjustment required
resolve-guid-to-id Source stores GUID reference; target uses integer or UDI — resolve at ETL time
resolve-guid-to-path Source stores GUID; target uses URL path or slug
resolve-guid-to-slug Source stores GUID; target uses content slug
strip-proprietary-markup Rich-text field contains vendor HTML; run /markup-scrubber
html-to-structured Rich text must transform to structured blocks (e.g., Gutenberg → Block List)
split Single source field splits into multiple target fields
merge Multiple source fields merge into one target field
compute Target field has no source equivalent; value must be computed or defaulted
drop Source field has no target equivalent and no business value; do not migrate
pending-decision Transformation strategy requires client / content-owner decision

Phase 3 — Identify cross-cutting concerns

After producing per-type tables, analyse across all types:

Dependency ordering

List content types in the order they must be migrated:

  1. Types with no inbound references first (foundation data: taxonomy, shared blocks)
  2. Hub types second (referenced by many other types)
  3. Leaf content last

Rich-text fields

List every rich-text field across all types. These all require /markup-scrubber preprocessing. Estimate total rich-text item count so the team can plan that sprint.

Media migration pass

List every image/document/video reference field. Media must be migrated before the content items that reference it. Note whether the target uses a CDN, Azure Blob Storage, or native media library.

Reference resolution strategy

Explain how GUIDs / IDs / UDIs will be resolved during ETL:

  • Maintain a migration ID map (old-id → new-id) built incrementally as items are created in the target
  • Rich-text embedded references (href linking to item IDs) require a post-migration link-repair pass
  • Navigation structures and breadcrumbs may need a separate pass after all content is in place

Phase 4 — Flag gaps and risks

Produce a Mapping Gaps table:

Gap Affected Types Risk Resolution
No target equivalent for personalizationRules All page types High — Optimizely visitor groups cannot map to Umbraco Strip field; document personalisation loss for client sign-off
Legacy Grid rows are unstructured JSON NewsArticle, CaseStudy Medium — requires bespoke transformer Spike needed to estimate effort

Phase 5 — Output the field-mapping specification

Write to field-mapping-spec.md in the current directory. Structure:

# Field Mapping Specification
# <Source Platform> → <Target Platform>
# Project: <name> | Date: <date>

## Summary
- Content types mapped: N
- Fields mapped: N
- Transformation types used: [list]
- Pending decisions: N
- Pre-migration passes required: markup-scrubber, media-migration, taxonomy-migration

## Dependency Order
[numbered list from Phase 3]

## Per-Type Field Maps
[tables from Phase 2]

## Cross-Cutting Concerns
[findings from Phase 3]

## Mapping Gaps and Risks
[table from Phase 4]

## Pending Client Decisions
[numbered list of decisions required before ETL implementation can begin]

## Recommended Next Steps
1. Run /markup-scrubber against all identified rich-text fields
2. Plan media migration pass for all image/document fields
3. Resolve pending client decisions before sprint planning
4. Use this spec as the input to ETL implementation

Quality gates

  • Every field in every Migrate/Rewrite type has a transformation code — no empty cells
  • Every pending-decision row has a named decision owner
  • Dependency order is explicit and respects reference chains
  • Media migration pass is called out if any image/document fields exist
  • Rich-text fields are all flagged for /markup-scrubber
  • Mapping Gaps table exists even if empty (proves it was checked)

Refer to reference.md for type-to-type lookup tables, ETL implementation patterns, and adapter-specific caveats.

Technical details
Plugin
content-migration-kit
Author
Dakota Smith
Skill name
field-mapping
Maturity
experimental
Security review
No security review
Owners
  • engineering
  • strategy
Argument hint
<source-platform> <target-platform> [schema-files-path]
Allowed tools
  • Read
  • Write
  • Edit
  • Grep
  • Glob
  • Bash(cat *)
  • Bash(find *)
  • WebFetch(domain:developers.sitecore.com)
  • WebFetch(domain:our.umbraco.com)
  • WebFetch(domain:world.optimizely.com)
  • WebFetch(domain:docs.umbraco.com)
Source
plugins/content-migration-kit/skills/field-mapping/SKILL.md

Edit this skill on GitHub — opens GitHub's web editor. No git knowledge needed.