Problem
v0.9.1 (#158) widened top-level Response fields to `.nullish()` but missed nested helpers. Re-running prisma-airs-cli PR #78 DLP list commands against live `api.dlp.paloaltonetworks.com` shows 2 of 4 list commands still fail Zod:
- `data-patterns list` — `DataPatternMatchingRulesSchema` rejects null on nested rule fields
- `data-profiles list` — `ExpressionTreeNodeSchema` (recursive) rejects null on `operator_type` / `rule_item` / `sub_expressions`
Scope
Defensive sweep across all dlp-*.ts nested helpers; widen `.optional()` → `.nullish()`:
- `dlp-data-pattern.ts`: `DataPatternMatchingRules`, `MetadataCriterion`, `DataPatternDetectionConfig.supported_confidence_levels`, `DataPatternTags`
- `dlp-data-profile.ts`: `ExpressionTreeNode` (recursive), `DetectionRuleItem` (23 fields), `MultiProfileDataNode`, both `DetectionRule` variants. Widen `ExpressionTreeNode` TS interface to allow null.
- `dlp-data-filtering-profile.ts`: 8 exclusion / exception / rule helpers
- `dlp-dictionary.ts`: `DictionaryMetaDataDTO`, `DictionaryTags`, `ResourceModelExtension`
Acceptance
- All 4 DLP list commands pass Zod against live tenant
- 1255+ tests pass
- Hotfix released as v0.9.2 patch
Problem
v0.9.1 (#158) widened top-level Response fields to `.nullish()` but missed nested helpers. Re-running prisma-airs-cli PR #78 DLP list commands against live `api.dlp.paloaltonetworks.com` shows 2 of 4 list commands still fail Zod:
Scope
Defensive sweep across all dlp-*.ts nested helpers; widen `.optional()` → `.nullish()`:
Acceptance