RFC 9880 model assessment inventory
The immutable fine-grained inventory rfc9880.model/1 contains 54 finite model obligations. It covers RFC 9880, including normative Appendices A and C. Appendix B is informative; Appendix D contains examples and Appendix E historical changes. Imported definitions apply only where a clause uses them. Each obligation counts once across the requested model scope, regardless of how many occurrences or supporting citations it has.
The Full request retains assessment and baseline identity rfc9880/base-1. Its area inventory esdieff.full-model/1 has 13 members. Initial retains its eight narrower areas and existing exclusions. Successful Initial assessment always discloses broader partial coverage. These identities follow ADR 0011: Machine-readable report contracts and ADR 0013: Shared workflow and report guarantees.
Completion and applicability
An obligation is assessed only when all applicable occurrences and subdimensions have been assessed, including definite invalidity. Established absence is not applicable. Missing implementation is unassessed; unknown needed meaning, context, knowledge or traversal is undetermined. Joining repeated observations uses undetermined before unassessed, then assessed, then not applicable. One finished occurrence cannot hide an unfinished sibling. Errors, warnings and notices remain independent of completion and of optional detail retention.
Full broader completion describes these54 model obligations. Requested outcome completion describes all13 selected areas, including the separate advisory area. All model work may therefore finish while advice remains incomplete. Assessed errors still constitute completed work; neither completion value certifies validity or universal capability. Full does not emit an optional omitted-areas list whose absence could be mistaken for completion.
Full establishes capability and meaning for the supplied model. Sample admission is a separate operation; a successful sample never completes a model obligation. Device behavior, protocol bindings, conversion, registry administration, operator duties and general satisfiability are outside this model denominator. Unknown extensions are retained without guessing their meaning or universally rejecting them.
Each subclause has one counting owner. The clause ownership table names supporting dependencies separately. The clause-family trace preserves all132 body/grammar/characteristic/process families and the explicit comment obligation with their model owners or excluded roles. These are traceability rows, not another denominator. For example, nullable belongs to M029, special-type selector admission to M025 and Property flags to M031; they do not also earn M022 credit. M022 owns only unit and content-format string shape. Direct-item container shape belongs to M040; Full properties and Choice descendants retain M038 and M030. Grammar family G013 therefore supports M039 for pattern/format/uniqueness shape and M040 for the restricted items container.
Obligations
IDs below expand to rfc9880.model.M001/1 through rfc9880.model.M054/1. The capability column describes current checking and limitations. Runtime status comes from the report, not this table.
The model coverage boundaries collect retained gaps with their current outcomes, reasons and conditions for reconsideration.
| ID | RFC 9880 citation | Finite meaning and applicability | Full area | Check and limitation |
|---|---|---|---|---|
| M001 | 1.2.3;3;7.1;A sdf-syntax | Every assessed source: one UTF-8 JSON text, root map, JSON structure; supplied serialization only | full.document-syntax/1 | Decode complete supplied JSON while retaining acquisition failures; transport delivery duties are outside model assessment. |
| M002 | 2.2;2.3.1;3.3-3.4;5.1-5.5;6.3;A named/paedataqualities/thing/object/action/event | All six group/map/class roles; text named keys, map definitions; Object excludes grouping roles, Thing permits them; Action full input/output and Data, Event full output and Data; root reuse definitions; zero entries permitted | full.document-syntax/1 | Traverse named definitions and all admitted data-description containers in their actual roles. |
| M003 | 1.2.3;2.2.2;2.2.5;3.3;4.5 | Definitions versus declarations and directly containing scope; Data reusable definition, Property state description, root affordance does not instantiate itself | full.model-roles/1 | Establish declaration classes in the resolved model, including copied declarations at their importing coordinates. |
| M004 | 2.3.2-2.3.3 | Given Names are case-sensitive and contain no colon; arbitrary other text retained | full.document-syntax/1 | Check case-sensitive definition names and reserved colon use. |
| M005 | 2.3.3;A quality-name | Unqualified ASCII quality pattern and optional ASCII qualified-prefix pattern; case-sensitive names; registered prefix meaning is M028, registration process excluded | full.document-syntax/1 | Check ASCII unqualified and qualified spelling in actual Quality Name positions; preserve admitted unfamiliar vocabulary and opaque extension values. |
| M006 | 2.3.2;4.1-4.3 | Definition-selecting JSON Pointer and tilde escaping before URI-fragment percent encoding | full.namespace-reference/1 | Resolve encoded reference names through the established namespace and pointer context. |
| M007 | 3 | Absent and empty optional nested blocks equivalent | full.document-syntax/1 | Check the document envelope and supported top-level definition groups. |
| M008 | 3.3 versus A sdf-syntax | Document group-presence obligation: body one-or-more versus all-optional formal groups | full.document-syntax/1 | Establish a populated definition group; empty documents retain the unresolved prose and CDDL distinction. |
| M009 | 3.1;A sdfinfo | info map and title/version/copyright/license text shapes | full.metadata/1 | Check the Information Block and its general string-valued metadata. |
| M010 | 3.1;4.6 | Ordinary info/common fields optional, no inserted defaults; last pointer token only optional display convention | full.metadata/1 | Expose absent Information metadata through the domain defaults without imposing lifecycle advice. |
| M011 | 2.3.3;4.6 Table3;A optional-comment | At every admitted $comment position, presence/absence has no model meaning | full.metadata/1 | Preserve the descriptive comment as metadata without treating its text as a semantic command. |
| M012 | 3.1;A modified-date-time/rfc3339z | modified text ABNF, calendar/date/time/fraction/T/Z and leap-second knowledge | full.metadata/1 | Check modified dates against the supported calendar, clock and recorded temporal knowledge. |
| M013 | 3.1;A features | Feature-list syntax includes framework arbitrary entries; declared critical feature understanding needed by requested semantics, no closed-empty grammar | full.critical-extensions/1 | Establish the required feature declaration before interpreting model qualities. |
| M014 | 3.2;A sdf-syntax | namespace map of text short names to URI text | full.namespace-reference/1 | Check namespace map shape and URI-valued bindings. |
| M015 | 3.2;4 | defaultNamespace selects existing namespace; absent default gives no contribution only under established context | full.namespace-reference/1 | Check that the declared default namespace has an established binding. |
| M016 | 1.2.4;3.2;4.1-4.2;6.1 | Complete namespace URI plus pointer by concatenation, distinct definitions may share namespace across supplied contributors, no first/last precedence | full.namespace-reference/1 | Resolve local and cross-document references while retaining missing, ambiguous and unavailable contributors. |
| M017 | 4.3 | CURIE resolution/global versus same-document #pointer meaning; outside reference uses declared prefix, no safe-CURIE/direct URI-scheme bypass | full.namespace-reference/1 | Establish the target role of each model reference. |
| M018 | 4.3;4.6;A sdf-pointer/pointer-list/referenceable-name | All sdfRef/sdfRequired occurrences: formal global/short/true union, short-name colon/hash exclusion, list shape including empty; short/true sdfRef meaning unresolved | full.namespace-reference/1 | Check reference syntax and referenceable positions in Full and Direct data contexts. |
| M019 | 4.4-4.4.1;6.2.1 | Target-root refs processed, copy qualities/children, remove sdfRef, RFC7396 merge/delete/replace, consumer-role result assessed, order-independent; internal copied references relocate; needed cycles scoped | full.composition-requiredness/1 | Compose inherited qualities and local overrides, relocating internal copied references to the importing definition. |
| M020 | 4.5;4.6 | Mandatory grouping/affordance declaration selection: full,short all-matching classes,true carrier; copied pointers relocate by coordinate; data-only meaning unknown explicitly | full.composition-requiredness/1 | Resolve grouping-required declarations in the resolved model, relocating copied pointers by coordinate under the existing requiredness policy. |
| M021 | 3.1;4.6;A sdfinfo/commonqualities/jso-items/optional-comment | description/label/$comment string shapes at their admitted positions: info description/comment, common all three, Direct description/comment | full.metadata/1 | Check descriptive metadata string shape in each admitted Full or Direct position. |
| M022 | 4.7 Table4;A dataqualities | Full unit and contentFormat string shapes only | full.data-grammar/1 | Check common data-quality admission in its actual data-description role. |
| M023 | 4.7 note1;7.3-7.4 | Unit direct-name/URI distinction, forbidden unit URN except colon-name exception; SHOULD registry convention or unit-definition URI; absent dated record not proof unregistered | full.special-type-unit/1 | Check unit spelling and recorded registry guidance under the selected knowledge policy. |
| M024 | 4.7 note2;RFC9193 §6 | contentFormat text means Content-Format-Spec: code/media type/parameters/coding syntax and available recorded meaning | full.pattern-format/1 | Establish recorded numeric tuples and supported JSON/CBOR/plain-text parameters with ordered codings; other meaning and missing evidence remain scoped. |
| M025 | 4.7.1;A sdftype-name | Base byte-string/unix-time or admissible registered/extension [a-z][-a-z0-9]* name | full.critical-extensions/1 | Recognize the two base special-type selectors; extended-name admission remains unfinished without a closed extension vocabulary. |
| M026 | 4.7.1 Table5 | byte-string denotes bytes, conventional JSON unpadded base64url; establish modeled meaning when present | full.special-type-unit/1 | Establish the known byte-sequence model interpretation without a value; decoded-byte length remains separately unfinished. |
| M027 | 4.7.1 Table5 | unix-time denotes POSIX numerical civil time with leap-instant limitation | full.special-type-unit/1 | Establish the known POSIX-time model interpretation without assigning an actual value or leap-instant meaning. |
| M028 | 2.3.3;4.7.1;7.5.2-7.5.3;A extension sockets | Applicable registered prefix/type/format/quality description meaning, conventional type/JSON representation consistency where specified | full.critical-extensions/1 | Retain unknown extension meanings as unavailable rather than inferring universal invalidity. |
| M029 | 4.7 Table4;A dataqualities | Nullable bool shape and default true meaning,distinct presence; constraint interaction uses recorded ADR0005 interpretation | full.scalar-meaning/1 | Check nullable shape and expose its established domain default. |
| M030 | 4.7.2;A optional-choice/jsonschema/jso-items | Choice map and Full branch shapes in Full and Direct positions,shared override semantics; nonempty string enum shape/expansion preserving occurrences; exclusive enum versus choice | full.composition-requiredness/1 | Check choice and enumeration syntax and establish inherited alternative scope. |
| M031 | 5.2;A propertyqualities | readable,writable,observable booleans and specified true defaults, distinct documentary default | full.model-roles/1 | Check Property flags and expose their established domain defaults. |
| M032 | 2.2.1;6.3 | Grouping repetition if minItems/maxItems present; inclusive count meaning only | full.formal-numbers/1 | Establish inclusive base count meaning for admitted uint values; framework fallback retains unavailable extension repetition meaning. |
| M033 | A EXTENSION-POINT and $$ quality sockets | Additional quality content admits any JSON at top/info/group/data/items quality sockets,without closed-grammar substitution | full.document-syntax/1 | Check admitted extension sockets without claiming unsupported extension meaning. |
| M034 | A jsonschema/compound-type/jso-items | Type selector admission: Full six base selectors or extension; Direct base subset including explicit object or extension; type:null not base | full.data-grammar/1 | Check base-type selector shape separately from model-level type capability. |
| M035 | A allowed-types;RFC8610 3.3/D/E | const/default base number,text,bool,null, homogeneous scalar arrays,text-key maps plus allowed-ext | full.data-grammar/1 | Establish base or framework-extension literal admission; extension semantics and needed const meaning remain separately unfinished. |
| M036 | A jsonschema/jso-items number;RFC8610 3.3/D/E | Formal number admission for all Full numeric parameters and Direct min/max: every JSON number, read as an exact decimal | full.formal-numbers/1 | Establish formal CDDL number membership for bound parameters from their decoded JSON numbers. |
| M037 | A jsonschema/jso-items/arraydefinitionqualities uint;RFC8610 3.3/D/E | Formal uint admission for all Full length/item counts,Direct lengths,and Object/Thing repetition counts | full.formal-numbers/1 | Establish formal CDDL uint membership for counts; exact nonnegative integer decoding alone is insufficient. |
| M038 | A compound-type | Explicit object required nonempty string array and properties named Full map; applicability in non-object/wider roles not guessed | full.data-grammar/1 | Check map-data properties and required syntax in the compound-type context. |
| M039 | A jsonschema/jso-items | Full pattern text,Full six format literals or extension text,Direct format text,Full uniqueItems bool shapes | full.data-grammar/1 | Check pattern, format and uniqueness parameter shapes in Full and Direct items. |
| M040 | A jsonschema items/jso-items | items value must be a map in the restricted Direct role | full.data-grammar/1 | Check the Direct items container and traverse its admitted Full descendants. |
| M041 | A jso-items/items-ext/itemtype-ext;4.4;C.4 | Wider Direct array/nested items/nullable/default/full import and role-dependent admitted content do not inherit Full meaning solely by spelling | full.critical-extensions/1 | Establish Direct-item extension meaning; preserved unsupported qualities remain unavailable. |
| M042 | C intro;C.1-5 | Base description type meaning: mathematical integer including10.0, number,Unicode-scalar string,true/false Boolean,array,string-key map; model establishes interpretation/role, not a supplied-value verdict | full.scalar-meaning/1 | Establish ordinary scalar, array and map type meaning in final effective contexts; unavailable extended meanings remain scoped. |
| M043 | C intro | const fixes one value under exact adopted equality; applicable literal/type/alternatives meaning must be established; general satisfiability not required | full.scalar-meaning/1 | Establish scalar and compound const meaning under exact contextual equality for the actual final value; unavailable abstract denotation and extension meanings remain scoped. |
| M044 | C intro | default is documentary data for absence with no insertion process; permitted literal domain M035; consistency warning optional | full.scalar-meaning/1 | Expose default values as optional descriptive metadata without executing them as required characteristics. |
| M045 | C.1 | Inclusive/exclusive mathematical numeric bounds and positive exact integer-multiple step; legacy Boolean exclusive endpoint not base | full.scalar-meaning/1 | Establish exact inclusive/exclusive bounds and positive-step meaning in an available ordinary effective context. |
| M046 | C.2 | String length constraints count Unicode scalars with inclusive bounds | full.scalar-meaning/1 | Establish inclusive Unicode-scalar text-length meaning in an available ordinary effective context. |
| M047 | C.2 | pattern syntax is ECMA262 Unicode; suggested portable subset not entire grammar | full.pattern-format/1 | Check effective pattern syntax within the supported bounded ECMAScript capability. |
| M048 | C.2 | pattern modeled matching meaning is unanchored Unicode substring unless anchors | full.pattern-format/1 | Establish bounded Unicode unanchored model matching capability by compilation without a sample or satisfying witness. |
| M049 | C.2 | Base formats date/date-time/time RFC3339, uri/uri-reference RFC3986, uuid RFC9562; recorded representation conventions and external knowledge distinguished | full.pattern-format/1 | Establish known civil, URI, URI-reference and UUID model interpretations independently of actual value denotation. |
| M050 | C.4 | When items is present,its established description constrains every array element | full.compound-meaning/1 | Establish every final item description recursively in its actual role, independently of samples. |
| M051 | C.4 | Array element-count limits inclusive | full.compound-meaning/1 | Establish inclusive exact mathematical counts separately from formal uint membership and satisfiability. |
| M052 | C.4 | uniqueItems true uses adopted exact value equality over all elements | full.compound-meaning/1 | Establish ordinary contextual equality capability recursively across final alternatives; abstract gaps remain scoped. |
| M053 | C.5 | object properties names identify allowable entries, values use Full description semantics | full.compound-meaning/1 | Establish every final property description, including optional entries, under open map semantics. |
| M054 | C.5 | Map entries optional unless required key-name array, independent of affordance requiredness/nullability | full.compound-meaning/1 | Establish decoded mandatory map-entry names independently of property descriptions and grouping declarations. |
Formal CDDL number membership is separate from mathematical decimal decoding. Appendix A imports the RFC 8610 domains: uint 0 through 2^64−1, nint −2^64 through −1, their int union, and binary16/32/64 floating-point values. Full admits every JSON number as number, following RFC 8610 Appendix E’s description of JSON numbers as decimal and RFC 9880’s own Figure 5, which uses 5e-2. Full checks uint as integral values from 0 through 2^64−1, without rounding. Numeric literals, bound parameters and count parameters have distinct owners M035, M036 and M037. Exact lexemes such as 0.1, 10.0, 18446744073709551616 and 1e400 remain inspectable. Colon entries reject established out-of-domain counts. Grouping counts use no-cut fallback and known literal extension alternatives remain framework-admitted, with their unavailable semantics scoped separately. Initial, expanded and selected-sample contracts remain unchanged. See ADR 0032: Formal model admission and the formal admission contract.
Full area membership
The fixed areas are document syntax, model roles, metadata, namespace/reference, composition/requiredness, critical extensions, data grammar, formal numbers, scalar meaning, pattern/format, compound meaning, special type/unit, and the four advisory classes. Their exact IDs are the distinct area entries in the table above plus advisory-four/1. The advisory area counts once in the 13 areas and contributes no extra RFC obligation to the 54 denominator.
Both unit subareas join once into M023. Both content-format subareas join once into M024. Modified metadata joins into M012 and pattern syntax into M047. Each resulting obligation joins once into its Full area. Producing condition IDs remain modified-date-time/1, unit-spelling/1, unit-registry-guidance/1, content-format-syntax/1, content-format-registry/1, pattern-syntax/1, inspection for required relationships, or advisory-four/1. Optional coverage_owner identifies their requested Full area without changing the producing assessment_unit. Generic findings use actual field and role context.
Roles outside model assessment
The following audit identities do not enter model counts. They distinguish standards duties from the model obligations above.
| Identity | Role, citation and finite duties | Model boundary |
|---|---|---|
| S001-S010 | Sample C intro/C.1-5/4.7.1: actual type, const equality, numeric bounds/step,Unicode lengths,pattern matching,formats,array elements/count/equality,map entries/required,special-type representation,nullable membership | M026-029,M042-043,M045-046,M048-054 establish modeled meaning; these S duties produce actual supplied-value outcomes only |
| CV001 | Converter C.6: legacy draft4 Boolean exclusivity import/export | No current conversion request |
| CV002 | Translator7.3-7.4: unit-URN pchar percent encoding and registry nonoverlap | M023 checks supplied unit meaning, does not translate/register |
| PR001 | Processor3.1: normally SHOULD NOT dereference feature URI | Supplied-only API; no network acquisition assertion |
| PR002 | Processor4.7 note1: normally SHOULD NOT dereference unit URI | Supplied-only API |
| PR003 | Processor8: robust bounded input/output processing, avoid unpredictable generated JSON | Original public budgets/encoding; operational safety, not54 semantic duties |
| PR004 | Protocol/media7.1-7.2: application/sdf+json, no media parameters,CoAP434/delivery fragments | M001 supplied UTF-8 JSON only; no device/protocol conformance |
| RG001 | Registry7.5.1: quality-name pattern,immutable reviewed reference,frugal allocations | Registrant/expert duties |
| RG002 | Registry7.5.2: prefix pattern,contact,stability/transparency,Expert Review | M005/M028 supplied usage separate |
| RG003 | Registry7.5.3: type pattern,meaningful specification,consistent conventional type/JSON representation | M025/M028 relevant modeled meaning separate |
| RG004 | Registry7.5.4: feature-name syntax,immutable reviewed reference,frugality | M013 critical understanding separate |
| OP001 | Operator8: authenticity,integrity,applicability of each component/module/upgrade | SourceId/digest does not authenticate |
| OP002 | Operator8: dynamic ecosystem acquisition,confidentiality,access control | No fabricated trust or mechanism |
| AD001 | Author advice2.2.1 Object granularity | Optional |
| AD002 | Author advice2.3.2-3 simple ASCII names | Mandatory colon/name syntax M004 separate |
| AD003 | Validator RECOMMENDED3.1 warning absent info | metadata.info_absent Advice,not RFC error |
| AD004 | Lifecycle RECOMMENDED3.1 lexicographic version increase | Prior version absent is external context,not model syntax failure |
| AD005 | Author advice3.1 unambiguous license URI/SPDX | Optional |
| AD006 | URI guidance3.2/4.1 no namespace fragment,https path,no query | Optional,not general URI syntax |
| AD007 | Author RECOMMENDED4.7.1 conventional type with sdfType | Optional advice; M028 consistency meaning remains |
| AD008 | Optional6 refinement convention restrict reused set | No universal subset solver duty |
| AD009 | C.2 portable regex subset suggestion | No prohibition of broader ECMA syntax |
| AUTH001 | 1.2.4 I-Regexp textual pattern convention and9.1 dependency imports | Supporting M005/M017/M025/etc; no standalone conformance count |
| AUTH002 | A/C normative,B informative,D example,E historical authority | Supporting whole ledger; A001/A002 acceptance not RFC obligations |
Consumer contract
The mandatory existing request.inventory identifies the immutable area membership. esdieff.full-model/1 also binds the 54-member rfc9880.model/1 inventory, even when every new optional section is absent. Historical Full reports with null inventory and coverage.inventory_unavailable mean unknown membership, never an empty inventory.
The borrowed descriptor and typed status accessors do not render or allocate a report. Full returns all 54 known descriptors and authoritative statuses; an unfamiliar requirement ID is absent. Other operations do not request this inventory. Optional wire aliases, summaries, rows and ownership detail may be omitted under presentation limits. Consumers preserve mandatory aggregates and surviving diagnostic facts, accept unknown additive fields and human wording changes, and validate unique retained identities and linked omission counts. See the report contract.