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:
| FIG-07-01 — 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]
- Förvärv: anropa källan med minsta nödvändiga read-scope.
- Rå artefakt: bevara versionsbundet svar, cursor och källtid där policyn tillåter det.
- Normalisering: översätt genom en namngiven adapter- och regelversion.
- Validering: kontrollera struktur, domäninvariants och identitet.
- Boundary: verifiera tenant, miljö, zon, klassificering och retention.
- Publicering: emittera Matrix bundle/event med source refs.
- 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":
- connector-typ och kontraktsversion,
- aktiverad instans, tenant och miljö,
- capabilities uppdelade i read/observe/action,
- credential-status och scopes utan secretvärden,
- senaste fullständiga discovery och nästa cursor,
- accepterat, hoppat, vägrat och okänt,
- adapter-/mappingversion och källrevision,
- action gate, riskklass och senaste verifierade handling,
- datazon, retention och indexeringsförbud,
- 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
- Kapsla leverantörens identitet och vokabulär bakom adaptern.
- Separera typ, instans, config och secrets.
- Ge read, observe och action skilda capabilities och scopes.
- Bevara rå source ref, adapterversion och mappingregel.
- Validera struktur och domäninvariants separat.
- Verifiera tenant, miljö, zon och dataklass server-side.
- Redovisa pagination, expected set och refusals.
- Väg in kontrakts-/vendorversion och deprecation.
- Baselinehasha kontrakt, klassificera breaking changes och namnge konsumenter.
- Låt action gå via plan, approval, effect och read-back.
- 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
- connector-typ med separata read/action-capabilities,
- lokal instansprofil utan secretvärden,
- rå fixture med två API-versioner,
- versionsbundna mappingregler,
- normalized Matrix events/claims med source refs,
- coverage report över pages och dokumentpopulation,
- quarantine/refusal report,
- 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
- Informationsdöljande minskar hur mycket leverantörsförändring som sprids
till kärnan (
CLAIM-ADAPTER-001). - Översättning är en ny claim och behöver proveniens samt version
(
CLAIM-ADAPTER-002). - Read/observe/action har olika mandat och ska inte dela en implicit
kapabilitet (
CLAIM-ADAPTER-003). - Discovery och pagination blir trovärdiga först när hela den förväntade
mängden redovisas (
CLAIM-ADAPTER-004). - Data- och tenantgränser verkställs server-side och fail-closed
(
CLAIM-BOUNDARY-001). - Strukturstandarder verifierar en yta men inte hela domänens sanning
(
CLAIM-ADAPTER-005). - 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.
activationGatefinns 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
activationGateaccepteras 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-018anvä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
- Ska action→gate uttryckas i JSON Schema eller delad semantisk validator?
- Vilket system äger activation-instance-registret?
- Vilken quarantineyta får innehålla syntetiska respektive verkliga payloads?
- 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.