Skip to content

Composer silently drops fragments when a field name contains '.' (naive dot-path split) #1019

Description

@bjagg

Describe the bug

The composer builds/navigates LIF records using dotted fragment paths (person.0.EmploymentPreferences.0.fieldName) and splits them naively on .. A field name that itself contains a . splits into spurious path segments, so the navigation fails and the fragment is silently dropped.

Verified in code:

  • components/lif/composer/core.py:60keys = dot_map_path.split("."). The loop (:61-83) walks the segments; when a segment isn't found in the current dict and isn't a digit index, it logs "key in lif record has unexpected type" and returns without adding the fragment (no error raised).

Severity: silent data loss / mis-nesting — the affected data never makes it into the composed LIF record, with no failure surfaced to the caller.

Trigger: any MDR field name containing a . (e.g. a source/CEDS-style version.1).

Fix direction: durable fix is MDR write-time validation (#1014) so a .-bearing name can't enter the model — paths can then safely use . as the separator (consistent with ADR composer/0002). Defense-in-depth: use a structured path representation instead of split(".").

Related: #1014 (boundary validation — the systemic fix), #1011/#1012, #1016, ADR composer/0002, docs/specs/data-model-rules.md.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

Status
Backlog

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions