Demo · Schema Mapper

    Source → Target schema mapper

    Two schema trees rendered with d3-hierarchy. Threads show predicted field mappings with confidence scores. Click an entity to collapse/expand. Hover a thread to highlight its endpoints. Every proposal still requires named SME approval before publish.

    hr_v3.2.0  →  workforce_v1.4.0

    SOURCETARGEThr_v3.2.0−Employee−employee_idstringfirst_namestringlast_namestringhire_datedatejob_titlestringdepartment_codestringsalary_amountdecimalDepartment−codestringnamestringworkforce_v1.4.0−Staff−staffIdentifierulidgivenNamestringfamilyNamestringstartDatedatepositionTitlestringdivisionCodestringCompensation−basedecimalcurrencystringDivision−divisionCodestringdivisionNamestring
    Predicted mapping thread
    Attribute node
    Entity / schema node

    Transformation debt

    Every undocumented mapping is a payment you have not made yet

    Technical debt usually means old code. In data work it means something narrower and more expensive: transformation logic that exists only as a script and a memory. It does not show up in a dependency report. It shows up the day a source schema changes and nobody can say which of the last four mappings was the right one — or who decided.

    The re-mapping tax

    Every new target system re-opens every past mapping decision. A source schema that has been remapped four times is four sets of choices nobody can reconstruct, and the fifth target pays for all of them. Mappings pin the exact source and target schema versions they were built against, so a decision made once stays valid — and a decision that has to change is recorded as a change, not a silent edit.

    Logic you cannot find

    Transformation logic normally lives in scripts, stored procedures, and the memory of whoever wrote it. When that person leaves, the only way to learn what a field means is to reverse-engineer it from output. In Magellan the mapping is the artifact: versioned, diffable, and readable without running anything.

    Drift nobody noticed

    A column changes meaning, a code set gains a value, a unit shifts from pounds to kilograms. Nothing fails loudly, so the mapping quietly keeps producing plausible numbers. Because every version carries a ULID and a recorded decision, drift becomes something you can ask a question about instead of something you discover in an incident review.

    What it turns into

    Debt is the cost. A trustworthy history is the return.

    Stopping the accumulation is only half of it. The other half is that the decisions you already made become evidence — attributable to a named person, pinned to the exact schema versions in force, and reproducible years later after both schemas have moved on. Each entry is ULID-keyed and SHA-256 hash-chained, so altering a past record breaks the chain. That is what makes the record usable to somebody who has to sign something: HIPAA §164.312(b), 21 CFR Part 11 §11.10(e), or the CMMC L2 §3.3 AU-family controls.

    Without a governed record

    • Mapping logic in scripts and spreadsheets, owned by whoever wrote it
    • Approval asserted in an email thread or a wiki page
    • Rejections and overrides discarded, so the record shows only the winner
    • History stored in a table your own team can edit
    • Proving a past decision takes weeks of forensic work

    With a versioned, hash-chained record

    • Mapping is a versioned artifact, pinned to the exact schema versions it used
    • Approval is an entry in the ledger, signed under a named role
    • Rejections are kept with their reasons, so judgment is visible
    • History is hash-chained and sealed to WORM storage with fixed retention
    • Proving a past decision is running one verifier script

    The order is not decorative. Every schema version a mapping pins must be Approved & Published before that mapping version can enter approval — so the sequence itself is part of the evidence, not a process someone promises to follow.

    Hold the thing itself

    A sample evidence pack, with nothing held back

    Eleven ledger entries covering one mapping version from spreadsheet import to published and sealed record: both schema approvals, the Semantic Match Engine's suggestions, the three rejected links with their reasons, the release signature, and the WORM seal. The tenants, people, and identifiers are synthetic. The cryptography is not — every hash was computed from the payloads printed in the pack, and the verifier re-derives them without Magellan running.

    Run it yourself

    $ python3 verify_chain.py \
        magellan_sample_evidence_pack.json
    
    [PASS] #01 SchemaIngested ... [PASS] #11 WormHeadFlushed
    [PASS] partition last_hash == final entry
    [PASS] WORM head == recomputed chain head
    
    RESULT: CHAIN INTACT

    Standard library only — no API keys, no network, no database. Run it with --tamper and it changes one character inside one payload, then reports the chain broken from that entry onward.