The limit
SectorAccessPolicy matches a field by its normalized leaf name, at any depth. That is deliberate — it closes casing and nesting drift, so a policy key disassemblyInstructions also covers a payload key disassembly_instructions.
The cost is that a leaf name carries one class across the whole document, and two things now push against that.
Within a schema. name and casNumber appear under both a restricted materialComposition and a public criticalRawMaterials. Restricting either name restricts both.
Across the document. A sector policy is applied to the whole passport, not just sectorData. So a schema restricting countryOfOrigin would also redact materials[].countryOfOrigin from the passport envelope — Annex III content that is public. Over-redaction is not the safe direction here: it makes the public passport omit content the regulation requires it to carry.
Current state
Enforcement is intact. Where a name is shared, the enclosing object carries the restriction and the filter removes the whole subtree before ever reaching the leaf. Nothing is under-disclosed today.
What is missing is expressiveness: a nested field whose leaf name is shared cannot be restricted on its own terms. A build-time gate now rejects a schema that declares one name in two classes, so the limit fails loudly rather than silently — but it is still a limit.
What would remove it
Path-aware matching. The policy map would key on a path suffix rather than a bare leaf, and filter_by_audience would pass the segment stack rather than a single key. Most-specific match wins, falling back to the bare leaf so existing policies keep working.
This is a change to the core of the disclosure layer, which is why it is an issue rather than a patch. Worth doing while there are no published passports whose disclosure sets it would alter.
Where this was found
Reviewing the disclosure layer after x-disclosure was made recursive. The committed AAS environment fixtures caught the envelope half — a first attempt restricted countryOfOrigin and the fixtures failed with the field vanishing from the public electronics projection. A schema-only check had not noticed.
The limit
SectorAccessPolicymatches a field by its normalized leaf name, at any depth. That is deliberate — it closes casing and nesting drift, so a policy keydisassemblyInstructionsalso covers a payload keydisassembly_instructions.The cost is that a leaf name carries one class across the whole document, and two things now push against that.
Within a schema.
nameandcasNumberappear under both a restrictedmaterialCompositionand a publiccriticalRawMaterials. Restricting either name restricts both.Across the document. A sector policy is applied to the whole passport, not just
sectorData. So a schema restrictingcountryOfOriginwould also redactmaterials[].countryOfOriginfrom the passport envelope — Annex III content that is public. Over-redaction is not the safe direction here: it makes the public passport omit content the regulation requires it to carry.Current state
Enforcement is intact. Where a name is shared, the enclosing object carries the restriction and the filter removes the whole subtree before ever reaching the leaf. Nothing is under-disclosed today.
What is missing is expressiveness: a nested field whose leaf name is shared cannot be restricted on its own terms. A build-time gate now rejects a schema that declares one name in two classes, so the limit fails loudly rather than silently — but it is still a limit.
What would remove it
Path-aware matching. The policy map would key on a path suffix rather than a bare leaf, and
filter_by_audiencewould pass the segment stack rather than a single key. Most-specific match wins, falling back to the bare leaf so existing policies keep working.This is a change to the core of the disclosure layer, which is why it is an issue rather than a patch. Worth doing while there are no published passports whose disclosure sets it would alter.
Where this was found
Reviewing the disclosure layer after
x-disclosurewas made recursive. The committed AAS environment fixtures caught the envelope half — a first attempt restrictedcountryOfOriginand the fixtures failed with the field vanishing from the public electronics projection. A schema-only check had not noticed.