BibliotekSammanhängande läsvyEPUB
Del II — Den levande modellen · Kapitel 7

Adaptrar, kontrakt och datagränser

xECM rapporterar att dokument 142 har status REJECTED_METADATA. Matrix vill säga att dokumentet är belagt avvisat och att ett processteg påverkas. Mellan dessa två utsagor finns en adapter.

Det är frestande att beskriva adaptern som kod som byter namn på ett fält. Men den gör minst sex saker:

  • ansluter med ett bestämt mandat,
  • avgränsar tenant, miljö och dataklass,
  • hämtar en mängd med känd eller okänd täckning,
  • tolkar en leverantörsspecifik status,
  • skapar Matrix-identitet, tid och källreferens,
  • vägrar eller föreslår handling när förutsättningarna inte håller.

Adaptern är därför både översättare och gränsvakt.

1. Varför gränsen måste vara explicit

Parnas klassiska argument för informationsdöljande är att moduler bör kapsla designbeslut som sannolikt förändras (parnas1972criteria). För en Matrix-adapter är sådana beslut exempelvis:

  • vendorobjektets ID-format,
  • pagination och rate limits,
  • autentiseringsmetod,
  • statusvokabulär,
  • tidsstämplar och precision,
  • fel- och retrysemantik,
  • API-version och deprecation,
  • vilka fält som innehåller kunddata.

Om dessa detaljer sprids till graf, UI, agenter och regler blir varje vendoruppgradering en systemomfattande migration. Enterprise Integration Patterns beskriver närliggande roller som channel adapters, translators och canonical data models (hohpe2003eip). Matrix behöver samma disciplin, men med extra krav på evidens och handlingsmandat (CLAIM-ADAPTER-001).

En adapter ska alltså exponera en liten Matrix-semantik och hålla det rörliga leverantörskontraktet bakom sig.

2. Sju steg från källa till kunskap

Figur FIG-07-01 visar en säkrare ingestkedja:

Adaptergränsen från extern källa till beslutbar Matrix-artefakt
Visa diagramdefinition
flowchart LR
    X[Externt system<br/>vendor- och kundmodell] --> A[Förvärv<br/>minsta read-scope]
    A --> R[Rått, versionsbundet<br/>underlag]
    R --> N[Versionsbunden<br/>normalisering]
    N --> V{Schema + domän +<br/>tenant/data boundary}
    V -- vägra/quarantine --> F[Synlig refusal<br/>med orsak]
    V -- godkänd --> P[Matrix bundle/event<br/>med sourceRefs]
    P --> C{Coverage gate}
    C -- lucka --> F
    C -- komplett enligt kontrakt --> K[Kunskapslager]
    K --> D[Förklaring och beslut]
    D -. action proposal .-> G[Mänsklig/policygrind]
    G -. separat exekveringsväg .-> W[Write-endpoint i externt system]
  1. Förvärv: anropa källan med minsta nödvändiga read-scope.
  2. Rå artefakt: bevara versionsbundet svar, cursor och källtid där policyn tillåter det.
  3. Normalisering: översätt genom en namngiven adapter- och regelversion.
  4. Validering: kontrollera struktur, domäninvariants och identitet.
  5. Boundary: verifiera tenant, miljö, zon, klassificering och retention.
  6. Publicering: emittera Matrix bundle/event med source refs.
  7. Coverage: redovisa vad som sågs, accepterades, vägrades och saknas.

Stegen får gärna köras i samma process, men deras verdicts bör vara separata. Ett HTTP 200 säger bara att förvärvet svarade. Det säger inte att paginationen är komplett, mappningen entydig eller publiceringen tillåten.

3. Rått och normaliserat underlag

Normalisering skapar ett nytt påstående. När REJECTED_METADATA → acceptedByXecm=false måste Matrix kunna visa:

rawSourceRef + revision/digest
vendorSchemaVersion
adapterId + adapterVersion
mappingRuleId + version
normalizedSubjectId
normalizedClaim/event
warnings/refusals
transformedAt

Det råa underlaget behöver inte kopieras in i Matrix. Non-goals förbjuder Matrix som kunddatalager. En source ref kan peka på kundens auktoritativa system eller en skyddad evidensartefakt. Kravet är reproducerbar härledning, inte central datainsamling (CLAIM-ADAPTER-002).

Om källformatet förändras ska gammal normalisering kunna förstås med gammal regelversion. En tyst uppdaterad mapping gör historiska beslut oreproducerbara.

4. Connector-typ, instans och hemlighet

Matrix connector-manifest beskriver en typ: exempelvis vilka förmågor en Unifi- eller xECM-connector kan ha, transport, riktning, riskklass och grind. Den bör kunna ligga i en delad katalog.

En aktiverad instans beskriver däremot:

  • tenant och miljö,
  • faktisk endpoint eller resource audience,
  • aktiverade capabilities,
  • ägare och ändringsbeslut,
  • lokala freshness- och rate-limit-policyer.

Hemligheter—tokens, client secrets, certifikatnycklar—hör varken hemma i typkatalogen eller kunskapsgrafen. Emittern uttrycker samma princip: target system class delas, medan endpoints och credentials stannar lokalt (MATRIX-INTEGRATION-MAP-EMITTER, CLAIM-ADAPTER-006).

Separationen gör det möjligt att säga "typen stödjer delete" utan att säga "den här instansen får radera".

5. Declare, observe och act

Matrix integrationskarta skiljer tre relationer:

  • EMITS: en producer eller läsande capability skapar representation,
  • OBSERVES: monitoring/probe observerar systemet,
  • ACTS_ON: en action capability kan påverka systemet via grind.

Connector-kontraktet låser producer-capabilities till riskklassen read och actions till reversible eller physical-irreversible. En fysisk irreversibel handling ska alltid ha mänsklig grind (MATRIX-CONNECTOR-CONTRACT).

Detta är mer än taxonomi. Read-token, monitoringidentitet och action-token bör vara olika credentials eller åtminstone olika scopes och code paths. Om en adapter komprometteras ska en läsande ingest inte automatiskt kunna skriva. Matrix non-goals kräver dessutom att ingen extern handling passerar utanför ActionGateway-mönstret (CLAIM-ADAPTER-003).

6. En verklig kontraktslucka

Den aktuella integration-map-emittern sätter explicit ActionGateway (ADR-J001) på alla normaliserade Jake-connectors och skriver grinden på ACTS_ON-kanter. Kända artefakter följer alltså regeln.

Det generella JSON-schemat beskriver samtidigt activationGate som valfritt. Det innehåller ingen root-invariant som kräver fältet när capabilities-arrayen innehåller kind: action. Validatorn schemaslagar de normaliserade manifesterna men lägger i den granskade vägen inte till denna semantiska regel.

Det är en viktig skillnad mellan baslinjen är grön och alla framtida giltiga inputs är säkra. Ett hermetiskt mutationstest 2026-08-11 skickade en reversibel action utan gate genom det levande Draft 2020-12-schemat och fick noll valideringsfel: ACCEPTED_WITHOUT_ACTIVATION_GATE. RESEARCH-016 är därför en rekommenderad, avgränsad backlogkandidat: action ska kräva icke-tom gate medan read-only utan gate fortsatt kan vara giltigt. Runtime ActionGateway ska ändå vara kvar; manifestvalidering och verkställighet är defense in depth.

7. Strukturkontraktets räckvidd

JSON Schema Draft 2020-12 kan uttrycka typer, obligatoriska fält, conditional schemas och arrayvillkor. Specifikationen påpekar samtidigt att strukturell validering kan vara otillräcklig och att format kan fungera som annotation om inte assertionvokabulären verkligen används (jsonschema202012).

Ett schema kan exempelvis bevisa att endpoint är en URI-formad sträng. Det bevisar inte:

  • att endpointen tillhör rätt tenant,
  • att den går till production i stället för test,
  • att credential har rätt scope,
  • att API:t faktiskt följer sin dokumentation,
  • att alla sidor hämtades,
  • att normaliseringen är semantiskt korrekt,
  • att en side effect blev rätt utförd.

Schema är en grind, inte hela gränsen (CLAIM-ADAPTER-005).

8. Coverage vid discovery och pagination

En adapter som hämtar sida 1 av 20 kan returnera perfekt giltiga objekt och ändå skapa en falsk helhetsbild. Matrix täckningskontrakt kräver att en mängdoperation skiljer:

expected
observed/covered
skipped with reason
missing
unexpected
refused by validation or boundary

Den rena coverage-primitiven räknar och rapporterar; anroparen definierar vad "verkligheten" är och verkställer domen separat (MATRIX-COVERAGE-CONTRACT).

För ett paginerat xECM-anrop kan nämnaren komma från total count, ett batchmanifest, ett slutcursorbevis eller en uppräkning av partitioner. Om API:t inte erbjuder någon sådan gräns ska adaptern säga täckning okänd, inte komplett (CLAIM-ADAPTER-004).

En robust discovery report bör bära:

  • request scope och filter,
  • sidor/cursors sedda,
  • total enligt källan när den finns,
  • unika objekt accepterade,
  • dubbletter,
  • bortfiltrerade och vägrade per orsak,
  • rate-limit eller permission truncation,
  • nästa cursor om körningen avbröts.

9. Tenant- och kunskapsgränser

En adaptergräns är samtidigt en säkerhetsgräns. NIST SP 800-207 betonar att tillit inte ska följa enbart av nätverksplats eller ägande; autentisering och auktorisering ska gälla den resurs som nås (nist800207). För Matrix betyder det att "kör på kundens nät" inte är tillräckligt tenantbevis.

Matrix kunskapszoner använder separata collections för öppna och rollbundna zoner, server-side routing och fail-closed refusal när zon saknas eller en frontmatteretikett försöker bredda en restriktiv zon (MATRIX-KNOWLEDGE-ZONES). Detta minskar blast radius jämfört med ett rent metadatafilter.

Indexvakten vägrar kända customers-sökvägar, kundmarkörer och customer: i frontmatter (MATRIX-INDEX-GUARD). Det är värdefullt men inte en komplett innehållsklassificerare. Ett nytt kundnamn eller känsligt innehåll under en tillåten sökväg kan passera. RESEARCH-018 använder endast syntetisk data för att pröva explicit source classification, quarantine och kompletterande DLP-regler (CLAIM-BOUNDARY-001).

10. Kontraktsstandarder som profiler

OpenAPI 3.1.2 kan beskriva HTTP-operationer, schemas, webhooks och security schemes (openapi312). AsyncAPI 3.0 kan beskriva channels, send/receive- operationer, messages, correlation och protokollbindings (asyncapi300). De kan ge Matrix:

  • diffbar leverantörsyta,
  • genererade klienter och testfixtures,
  • kontraktsdrift mellan versioner,
  • tydligare scopes och message headers,
  • återanvändbar dokumentation.

Men de bör vara profiler runt transportytan, inte ersätta Matrix connector-manifest, riskklass, source refs, coverage eller actiongrind. En OpenAPI-operation som deklarerar DELETE avgör inte om en Matrix-instans får anropa den.

RESEARCH-017 beskriver samma xECM HTTP-operation och JetStream/webhook-flöde i Matrix, OpenAPI och AsyncAPI för att mäta faktisk duplicering och round-trip innan fler format införs.

11. Felmodell och refusal

Adaptern bör klassificera fel efter gräns:

Felklass Exempel Korrekt reaktion
Transport timeout, DNS, 503 retry enligt policy; ingen ny sanning
Authn/authz 401, 403, fel tenant vägra; visa scope/identity-problem
Contract okänt obligatoriskt fält quarantine; versionsfinding
Semantic två vendor-ID:n mappar till samma subjekt unresolved; ingen merge
Coverage cursor loop, saknad partition ofullständigt; ingen helhetsclaim
Boundary okänd zon eller kunddata i öppet intag vägra före indexering
Action approval saknas, read-back avviker ingen/avbruten effect; audit

Att fånga allt som "adapter error" förstör nästa handling. Refusal ska bära källa, steg, orsak, retryability, owner och påverkat kunskapsscope.

12. Nordic-adaptern

För Nordic bör xECM-integrationen delas i minst två kapabiliteter:

Läsande receipt producer

  • endast read-scope,
  • hämtar terminalstatus mot batchmanifest,
  • bevarar cursor och rå source ref,
  • mappar vendorstatus med versionsbunden regel,
  • emitterar observations-/evidensartefakter,
  • redovisar 141 accepted, 1 rejected, 0 unknown.

Grindad retry action

  • separat action-scope och credential,
  • tar dokument-ID, förväntad tidigare status och idempotency key,
  • producerar plan/dry-run,
  • kräver rätt approval enligt riskklass,
  • läser tillbaka xECM-resultatet,
  • emitterar action event och verifiering.

Att samma kodpaket kan innehålla båda förmågorna innebär inte att samma runtimeidentitet ska ha båda mandaten.

13. Konsekvenser för gränssnittet

En integrationsvy bör visa mer än "Connected":

  1. connector-typ och kontraktsversion,
  2. aktiverad instans, tenant och miljö,
  3. capabilities uppdelade i read/observe/action,
  4. credential-status och scopes utan secretvärden,
  5. senaste fullständiga discovery och nästa cursor,
  6. accepterat, hoppat, vägrat och okänt,
  7. adapter-/mappingversion och källrevision,
  8. action gate, riskklass och senaste verifierade handling,
  9. datazon, retention och indexeringsförbud,
  10. påverkade Matrix-frågor när adaptern är degraderad.

"Connected" utan scope, coverage och senaste verifierade läsning är bara ett transportpåstående.

12. Kontraktsstyrning är en kontrollplansförmåga

Matrix har nu en versionsbunden governanceväg för API-kontrakt. Den sparar baselinehash, klassificerar breaking changes, deprecation och berörda konsumenter och kan vägra en inkompatibel förändring. Det gör ett kontrakt granskningsbart över tid i stället för att bara validera dagens fil (MATRIX-API-CONTRACT-GOVERNANCE).

Avgränsningen är lika viktig: Matrix styr metadata och evidens om kontraktet, inte kundens runtime-API och inte dess payload. Kunddata är fortsatt förbjuden i Matrix index. En grön baseline betyder dessutom att den deklarerade förändringsregeln passerade; den bevisar inte att implementation, deployment eller alla verkliga konsumenter följer kontraktet (CLAIM-ADAPTER-007).

Praktisk granskningslista

  1. Kapsla leverantörens identitet och vokabulär bakom adaptern.
  2. Separera typ, instans, config och secrets.
  3. Ge read, observe och action skilda capabilities och scopes.
  4. Bevara rå source ref, adapterversion och mappingregel.
  5. Validera struktur och domäninvariants separat.
  6. Verifiera tenant, miljö, zon och dataklass server-side.
  7. Redovisa pagination, expected set och refusals.
  8. Väg in kontrakts-/vendorversion och deprecation.
  9. Baselinehasha kontrakt, klassificera breaking changes och namnge konsumenter.
  10. Låt action gå via plan, approval, effect och read-back.
  11. Mutationstesta saknad gate, fel tenant, cursorloop och okänd status.

Sammanfattning

Adaptern skyddar åt båda håll. Den hindrar leverantörsdetaljer från att bli Matrix kärnsemantik och hindrar Matrix från att läsa, lagra eller påverka mer än den aktiverade instansen tillåter.

Matrix har starka byggstenar: producerregister, connector-riskklasser, EMITS/OBSERVES/ACTS_ON, coveragegrind och server-side kunskapszoner. Reviewen visar samtidigt att action→activationGate ännu är en dokumenterad konvention i generalschemat, inte en full invariant, och att kundmarkörsvakten behöver defense in depth.

Standarder som OpenAPI och AsyncAPI kan beskriva transportytor, men Matrix måste fortsatt äga domain mapping, source refs, coverage, tenantgräns och handlingsmandat. Ett korrekt schemaformat är början på en säker adapter, inte slutet.

Läranderesultat

Efter kapitlet ska studenten kunna:

  • beskriva adaptern som semantisk och säkerhetsmässig gräns,
  • modellera reproducerbar rå→normaliserad transformation,
  • separera connector-typ, instans, hemligheter och capabilities,
  • skapa coverage- och refusalrapport för discovery,
  • granska tenant-, zon- och kunddatagränser,
  • avgränsa OpenAPI/AsyncAPI från Matrix domän- och actionkontrakt.

Fördjupningsmaterial

Övningar och laboration

Övningar och laboration

Övning 1: hitta läckaget

Granska ett hypotetiskt xECM-svar med vendor-ID, kundnamn, dokumenttitel, status, intern endpoint och access token. Klassificera varje fält som:

  • Matrix kärndata,
  • source ref/evidens,
  • lokal instanskonfiguration,
  • secret,
  • kundpayload som inte får indexeras.

Motivera minsta normaliserade representation för dokument 142.

Övning 2: tre capabilities

Dela en "xECM connector" i read, observe och action. Ange för varje:

  • identity och scope,
  • input/output-kontrakt,
  • freshness/coverage,
  • riskklass,
  • felmodell,
  • om mänsklig grind krävs.

Övning 3: schema kontra verklighet

Skriv fem inputs som är JSON-schema-giltiga men operativt ogiltiga: exempelvis rätt formad URI till fel tenant. Ange vilken domängrind som ska vägra varje input.

Övning 4: kontraktsprofil

Beskriv en xECM receipt-operation i OpenAPI och ett delivery-event i AsyncAPI. Markera vilka Matrix-fält som inte uttrycks naturligt: source authority, coverage, riskklass, action approval och evidence grade.

Laboration: bygg en fail-closed adaptergräns

Scenario

Implementera eller specificera en adapter som hämtar Nordics 142 dokumentutfall via ett paginerat vendor-API och kan föreslå retry för avvisade dokument.

Leverabler

  1. connector-typ med separata read/action-capabilities,
  2. lokal instansprofil utan secretvärden,
  3. rå fixture med två API-versioner,
  4. versionsbundna mappingregler,
  5. normalized Matrix events/claims med source refs,
  6. coverage report över pages och dokumentpopulation,
  7. quarantine/refusal report,
  8. action plan med idempotency key, approval och read-back.

Obligatoriska mutationer

  • action capability utan activationGate,
  • okänd vendorstatus,
  • två vendor-ID:n till samma Matrix-subjekt,
  • response från fel tenant,
  • page 2 returnerar page 1:s cursor,
  • total count 142 men endast 141 unika objekt,
  • kundpayload under en annars tillåten indexsökväg,
  • action credential används i read-processen,
  • approval gäller annan miljö än target,
  • read-back skiljer sig från planerad effekt.

Varje mutation ska ge ett namngivet boundary-, contract-, coverage- eller actionverdict. Ingen får reduceras till generiskt "adapter error".

Bedömning, 20 poäng

Del Poäng
Semantisk mapping och proveniens 4
Typ/instans/secret- och capabilityseparation 4
Coverage, pagination och refusal 4
Tenant/data boundary och fail-closed-beteende 4
Actionplan, approval och verifiering 4

Godkänt kräver minst 12 poäng samt att saknad actiongrind, fel tenant och partiell pagination vägras.

Källor och begränsningar

Kapitelkällor

Cite-key/käll-ID Funktion Begränsning
parnas1972criteria Informationsdöljande och modulgränser runt föränderliga designbeslut. Föregår moderna integrationsplattformar men principen är stabil.
hohpe2003eip Meddelande-, kanal-, transformer- och adaptermönster. Mönsterkatalog, inte säkerhets- eller dataskyddsstandard.
nist800207 Resurscentrerad, explicit autentisering/auktorisering utan nätverksimplicit tillit. Föreskriver inte Matrix datamodell.
jsonschema202012 Strukturell JSON-validering och dess semantiska begränsningar. Draftens format kan vara annotation beroende på implementation.
openapi312 HTTP-kontrakt, operationer och security schemes. Bevisar inte att servern beter sig enligt beskrivningen.
asyncapi300 Channels, operations, messages, correlation och bindings. Löser inte Matrix provenance eller coverage.
MATRIX-CONNECTOR-CONTRACT Read/action, riskklass och activation gate-vokabulär. activationGate är i nuläget valfritt även när actions finns.
MATRIX-INTEGRATION-MAP-EMITTER Faktisk legacy-normalisering och EMITS/OBSERVES/ACTS_ON. Kända Jake-manifest får alltid gate; generaliserar inte automatiskt.
MATRIX-COVERAGE-CONTRACT Förväntat, täckt, hoppat, saknat och oväntat. Anroparen måste själv definiera verkligheten.
MATRIX-KNOWLEDGE-ZONES / MATRIX-INDEX-GUARD Server-side zonering och kunddatarefusal. Markörvakten är avsiktligt begränsad, inte generell innehållsklassificering.
MATRIX-API-CONTRACT-GOVERNANCE Baselinehash, breaking-change-, deprecation- och consumer-impact-styrning. Styr kontraktsmetadata, inte kundens runtime-API eller faktisk konsumentefterlevnad.
Argumentkarta

Argumentkarta: adaptrar, kontrakt och datagränser

Huvudtes

En Matrix-adapter är inte en tunn transportklient. Den är en explicit gräns som översätter betydelse, begränsar mandat, bevarar rått underlag, redovisar täckning och vägrar data vars tenant, zon eller semantik inte kan fastställas.

Kedja

  1. Informationsdöljande minskar hur mycket leverantörsförändring som sprids till kärnan (CLAIM-ADAPTER-001).
  2. Översättning är en ny claim och behöver proveniens samt version (CLAIM-ADAPTER-002).
  3. Read/observe/action har olika mandat och ska inte dela en implicit kapabilitet (CLAIM-ADAPTER-003).
  4. Discovery och pagination blir trovärdiga först när hela den förväntade mängden redovisas (CLAIM-ADAPTER-004).
  5. Data- och tenantgränser verkställs server-side och fail-closed (CLAIM-BOUNDARY-001).
  6. Strukturstandarder verifierar en yta men inte hela domänens sanning (CLAIM-ADAPTER-005).
  7. Delbar connector-typ måste skiljas från lokala instansvärden och secrets (CLAIM-ADAPTER-006).

Motbevisande test

Om en direkt vendor→Matrix-mappning överlever versionsskifte, partiell pagination, fel tenant, saknad klassificering och action-retry utan att dölja data eller utöka mandat behövs ingen rik adaptergräns. Laborationen provar samtliga fall.

Faktagranskning och öppna beslut

Kapitelgranskning

Status: första manusutkast 2026-08-11. Intern implementations-, standard-, säkerhets- och pedagogisk granskning gjord. Extern integrations-/privacyreview och körbar adapterlaboration återstår.

Faktagranskning

  • Connector-kontraktet skiljer producer/read från action och låser deras riskklasser.
  • activationGate finns men är inte obligatoriskt eller conditionally required i det granskade schemat.
  • Ett hermetiskt Draft 2020-12-test 2026-08-11 bekräftade att en reversibel action utan activationGate accepteras med noll valideringsfel.
  • Integration-map-emittern sätter alltid ActionGateway för de normaliserade Jake-manifesterna och annoterar ACTS_ON-kanter med gate.
  • Coverage-kontraktet skiljer covered, skipped-with-reason, missing och unexpected; anroparen verkställer domen.
  • Kunskapszoner routas server-side till separata collections och omärkt intag vägras.
  • Indexvakten är path-, frontmatter- och känd-markörbaserad; den är inte en generell innehållsklassificerare.

Akademisk och standardmässig granskning

  • Parnas används för informationsdöljande, inte som integrationsspecifikation.
  • EIP används som mönsterspråk, inte som säkerhetsbevis.
  • NIST SP 800-207 stödjer explicit resursåtkomst, inte ett produktpåstående om att Matrix är full zero-trust-implementation.
  • OpenAPI/AsyncAPI behandlas som profiler, inte ersättning för domänkontrakt.
  • JSON Schema-begränsningar och format-semantik anges explicit.

Arkitektur- och säkerhetsgranskning

  • RESEARCH-016 är bekräftad och rekommenderad efter mutation; ingen Matrix-fil ändras av boken.
  • RESEARCH-018 använder endast syntetisk testdata; ingen verklig kunddata ska flyttas eller indexeras.
  • Runtime ActionGateway får inte ersättas av schema.
  • Öppet: var råa adapterartefakter får lagras per kund och retention.
  • Öppet: gemensam identitet för source, connector type och activation instance.

Pedagogisk granskning

  • Nordic binder mapping, pagination, tenant och action till samma fall.
  • Laborationen skiljer fyra verdictklasser i stället för generiskt fel.
  • Mutation med schema-giltig men operativt fel input visar kontraktsgränsen.

Öppna beslut

  1. Ska action→gate uttryckas i JSON Schema eller delad semantisk validator?
  2. Vilket system äger activation-instance-registret?
  3. Vilken quarantineyta får innehålla syntetiska respektive verkliga payloads?
  4. Vilka OpenAPI/AsyncAPI-profiler har en faktisk konsument?
Kapitelkontrakt

Syfte

Visa hur adaptrar skyddar Matrix kärnmodell från leverantörsformat och samtidigt skyddar källsystem, kunddata och handlingar från Matrix. Kapitlet förenar normalisering, proveniens, coverage, kontraktsversionering och säkerhetsgränser.

Lärandemål

Studenten ska kunna designa en adapter som semantisk brandvägg, separera typ från aktiverad instans och hemligheter, definiera fail-closed boundary- och coveragegrindar samt välja kontraktsstandard utan att övertolka dess garanti.

Fallstudiehändelse

Nordics xECM-adapter läser dokumentutfall, normaliserar vendorstatus och kan föreslå retry. Studenten måste hålla read, observation och action separata och bevisa att inget kundpayload når Matrix kunskapsindex.