All OOXML through structured models; raw SDK access banned.

Office Models ({Slides,Docs,Sheets}Model)

Intent — Route all remediation of a format family through one structured model, with raw library access (and raw string-matching into the serialized form) banned by lint. The same construction+ban-lint pattern as pdf-model, on a second object model (our instance: {Slides,Docs,Sheets}Model over DocumentFormat.OpenXml).

SummaryAll OOXML through structured models; raw SDK access banned.
TargetProduct · Canonical models & seams
Formtyped-ir
Movepackage — a constraint shipped with its sensors
Modelis-a-model — a structured model you check a system property against
EnforcementHard (deterministic) · blocking — the two lints fail the build on raw OpenXml / raw-XML string-match; the structured models are construction, the lints are the counted sensors
Derivationmodel-from-code — induced from the code, reconciled at build

Its place in the environment — a variant / known-use of One Door Enforced, under CONSTRAIN · Constrain where and how agents act. Preserved here for its technical texture; the construction kit shows how it folds.

Motivation — the failure it kills

Raw OpenXML SDK access, and the sneakier path of regexing into the XML, are the Office equivalent of the raw-PDF-library minefield: brittle, corruption-prone, and with no single point to enforce structural invariants. Left ad hoc, the same raw-library corruption class recurs across three separate document formats.

Why it's not just "PdfModel already solves this" (or "handle Office ad hoc")

Office is a different object model (the OpenXML SDK), so PdfModel cannot cover it, but the same defect class (raw-library corruption) applies. The Office Models are the parallel typed seam, and routing all three formats through the same structured-model + ban-lint pattern is defect-class consolidation: a fix to the pattern benefits all four formats at once, which is sufficient justification on its own: capability parity, not new capability. Applying one construction + ban-lint pattern per object-model keeps the corruption class killed everywhere; per-format ad hoc handling lets it recur three more times. A second ban-lint on raw-XML string-matching closes the sneaky regex-into-serialized-form escape that a plain "no raw SDK" rule would miss.

Mechanism

Route through SlidesModel / DocsModel / SheetsModel and the shared OpenXmlCommon; the Checking layer routes through RuleWalkers/. openxml-direct-access bans raw DocumentFormat.OpenXml.*; no-raw-xml-string-match bans regexing the serialized XML.

Prerequisites

Consequences & costs

Known uses

Related mechanisms

Governed by

The mechanisms that hold this model true — inverted from their Governs edges at build time, never hand-written. A direct governor names this model; a trunk mechanism governs every model.