@wildo-ai/saas-models 1.1.6 → 1.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/__tests__/setup.d.ts.map +1 -1
- package/dist/esm/__tests__/setup.js.map +1 -1
- package/dist/esm/_inspect.d.ts.map +1 -1
- package/dist/esm/_inspect.js.map +1 -1
- package/dist/esm/applications/application-metadata.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/applications/application-metadata.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/applications/application-subject.shared.schemas.d.ts.map +1 -1
- package/dist/esm/applications/application-subject.shared.schemas.js.map +1 -1
- package/dist/esm/applications/application-versions.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/applications/application-versions.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/applications/applications-context.schemas.d.ts.map +1 -1
- package/dist/esm/applications/applications-context.schemas.js.map +1 -1
- package/dist/esm/applications/applications.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/applications/applications.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/applications/applications.shared.schemas.d.ts.map +1 -1
- package/dist/esm/applications/applications.shared.schemas.js.map +1 -1
- package/dist/esm/billing/billing-account.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-account.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/billing-account.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-account.shared.schemas.js.map +1 -1
- package/dist/esm/billing/billing-configuration.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-configuration.shared.schemas.js.map +1 -1
- package/dist/esm/billing/billing-enums.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-enums.shared.schemas.js.map +1 -1
- package/dist/esm/billing/billing-types.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-types.shared.schemas.js.map +1 -1
- package/dist/esm/billing/credit-pool.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/credit-pool.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/credit-pool.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/credit-pool.shared.schemas.js.map +1 -1
- package/dist/esm/billing/invoice-ref.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/invoice-ref.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/invoice-ref.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/invoice-ref.shared.schemas.js.map +1 -1
- package/dist/esm/billing/price.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/price.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/price.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/price.shared.schemas.js.map +1 -1
- package/dist/esm/billing/product-behavior-policy.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product-behavior-policy.shared.schemas.js.map +1 -1
- package/dist/esm/billing/product-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product-definition.shared.schemas.js.map +1 -1
- package/dist/esm/billing/product.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/product.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product.shared.schemas.js.map +1 -1
- package/dist/esm/billing/promotions.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/promotions.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/promotions.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/promotions.shared.schemas.js.map +1 -1
- package/dist/esm/billing/public-pricing-catalog.shared.atoms.d.ts.map +1 -1
- package/dist/esm/billing/public-pricing-catalog.shared.atoms.js.map +1 -1
- package/dist/esm/billing/public-pricing-catalog.shared.d.ts.map +1 -1
- package/dist/esm/billing/public-pricing-catalog.shared.js.map +1 -1
- package/dist/esm/billing/referral-reward.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/referral-reward.shared.schemas.js.map +1 -1
- package/dist/esm/billing/referral.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/referral.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/referral.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/referral.shared.schemas.js.map +1 -1
- package/dist/esm/billing/subscription.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/subscription.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/subscription.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/subscription.shared.schemas.js.map +1 -1
- package/dist/esm/billing/usage-flush-evidence.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/usage-flush-evidence.shared.schemas.js.map +1 -1
- package/dist/esm/billing/usage-record.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/usage-record.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/usage-record.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/usage-record.shared.schemas.js.map +1 -1
- package/dist/esm/charts/aggregation-query.shared.schemas.d.ts.map +1 -1
- package/dist/esm/charts/aggregation-query.shared.schemas.js.map +1 -1
- package/dist/esm/charts/aggregation.shared.definitions.d.ts.map +1 -1
- package/dist/esm/charts/aggregation.shared.definitions.js.map +1 -1
- package/dist/esm/charts/chart-definition-builder.shared.d.ts.map +1 -1
- package/dist/esm/charts/chart-definition-builder.shared.js.map +1 -1
- package/dist/esm/companion/artifact-placement.shared.definitions.d.ts.map +1 -1
- package/dist/esm/companion/artifact-placement.shared.definitions.js.map +1 -1
- package/dist/esm/companion/provider-discovery.shared.schemas.d.ts.map +1 -1
- package/dist/esm/companion/provider-discovery.shared.schemas.js.map +1 -1
- package/dist/esm/companion/shared-library-companion.shared.definitions.d.ts.map +1 -1
- package/dist/esm/companion/shared-library-companion.shared.definitions.js.map +1 -1
- package/dist/esm/companion-exports.d.ts.map +1 -1
- package/dist/esm/companion-exports.js.map +1 -1
- package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-actor.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-actor.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-export-projection.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-export-projection.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-log-sink.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-log-sink.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-logs.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-logs.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/audit-trails/auditable-events.shared.schema.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/auditable-events.shared.schema.js.map +1 -1
- package/dist/esm/compliance/audit-trails/security-audit-event-envelope.shared.schema.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/security-audit-event-envelope.shared.schema.js.map +1 -1
- package/dist/esm/compliance/data-classification/data-classification.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/data-classification/data-classification.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/documents/governed-document-interactions.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/documents/governed-document-interactions.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/documents/governed-documents.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/documents/governed-documents.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/capability-consent-purposes.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/capability-consent-purposes.shared.utils.js.map +1 -1
- package/dist/esm/compliance/privacy/client-storage.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/client-storage.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/consent-gate-vocabulary.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/consent-gate-vocabulary.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/consent-purposes.shared.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/consent-purposes.shared.js.map +1 -1
- package/dist/esm/compliance/privacy/data-subject-rights.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/data-subject-rights.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/impersonalization-scrub.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/impersonalization-scrub.shared.utils.js.map +1 -1
- package/dist/esm/compliance/privacy/impersonalization.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/impersonalization.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/legal-hold-subject-attribution.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/legal-hold-subject-attribution.shared.utils.js.map +1 -1
- package/dist/esm/compliance/privacy/legal-holds.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/legal-holds.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/legal-holds.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/legal-holds.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/personal-data-category.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/personal-data-category.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/personal-data-declaration.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/personal-data-declaration.shared.utils.js.map +1 -1
- package/dist/esm/compliance/privacy/privacy.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/privacy.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/provider-capability-disclosure.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/provider-capability-disclosure.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/purpose-ref.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/purpose-ref.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/redaction.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/redaction.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/retention-binding.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/retention-binding.shared.utils.js.map +1 -1
- package/dist/esm/compliance/privacy/retention-enforcement-records.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/retention-enforcement-records.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/retention-enforcement-records.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/retention-enforcement-records.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/retention-schedule.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/retention-schedule.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/retention-scope-deleted.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/retention-scope-deleted.shared.utils.js.map +1 -1
- package/dist/esm/compliance/privacy/sharing.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/sharing.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/subject-data-recipients.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/subject-data-recipients.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/subject-erasure-lane-evidence.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/subject-erasure-lane-evidence.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/subject-export-render.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/subject-export-render.shared.utils.js.map +1 -1
- package/dist/esm/compliance/privacy/subject-export.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/subject-export.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/review-cadence.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/review-cadence.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/risk-posture.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/risk-posture.shared.schemas.js.map +1 -1
- package/dist/esm/config/analytics-value-moments.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/analytics-value-moments.shared.schemas.js.map +1 -1
- package/dist/esm/config/app-configuration-shared.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/app-configuration-shared.shared.schemas.js.map +1 -1
- package/dist/esm/config/app-frontend-type.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/app-frontend-type.shared.schemas.js.map +1 -1
- package/dist/esm/config/auth-config-resolution.shared.utils.d.ts.map +1 -1
- package/dist/esm/config/auth-config-resolution.shared.utils.js.map +1 -1
- package/dist/esm/config/brand-assets.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/brand-assets.shared.schemas.js.map +1 -1
- package/dist/esm/config/configuration-validation.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/configuration-validation.shared.schemas.js.map +1 -1
- package/dist/esm/config/entity-identity-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/entity-identity-config.shared.schemas.js.map +1 -1
- package/dist/esm/config/frontend/chart-definition.shared.schemas.d.ts +22 -22
- package/dist/esm/config/frontend/chart-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/frontend/chart-definition.shared.schemas.js.map +1 -1
- package/dist/esm/config/frontend/chart-registration-alignment.shared.d.ts.map +1 -1
- package/dist/esm/config/frontend/chart-registration-alignment.shared.js.map +1 -1
- package/dist/esm/config/frontend/navigation.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/frontend/navigation.shared.schemas.js.map +1 -1
- package/dist/esm/config/frontend/onboarding.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/frontend/onboarding.shared.schemas.js.map +1 -1
- package/dist/esm/config/postgresql.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/postgresql.shared.schemas.js.map +1 -1
- package/dist/esm/config/registration-acquisition-policy.shared.utils.d.ts.map +1 -1
- package/dist/esm/config/registration-acquisition-policy.shared.utils.js.map +1 -1
- package/dist/esm/config-authoring.entry.d.ts.map +1 -1
- package/dist/esm/config-authoring.entry.js.map +1 -1
- package/dist/esm/crdt/crdt-merge.shared.utils.d.ts.map +1 -1
- package/dist/esm/crdt/crdt-merge.shared.utils.js.map +1 -1
- package/dist/esm/data-seeding/data-seeding-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/data-seeding/data-seeding-config.shared.schemas.js.map +1 -1
- package/dist/esm/errors/caught-error-description.shared.utils.d.ts.map +1 -1
- package/dist/esm/errors/caught-error-description.shared.utils.js.map +1 -1
- package/dist/esm/errors/errors.custom-message-ref.shared.definitions.d.ts.map +1 -1
- package/dist/esm/errors/errors.custom-message-ref.shared.definitions.js.map +1 -1
- package/dist/esm/errors/errors.shared.definitions.d.ts.map +1 -1
- package/dist/esm/errors/errors.shared.definitions.js.map +1 -1
- package/dist/esm/errors/errors.shared.schemas.d.ts.map +1 -1
- package/dist/esm/errors/errors.shared.schemas.js.map +1 -1
- package/dist/esm/errors/errors.shared.utils.d.ts.map +1 -1
- package/dist/esm/errors/errors.shared.utils.js.map +1 -1
- package/dist/esm/errors/resource-access-forbidden.shared.error.d.ts.map +1 -1
- package/dist/esm/errors/resource-access-forbidden.shared.error.js.map +1 -1
- package/dist/esm/errors/thrown-value-description.shared.utils.d.ts.map +1 -1
- package/dist/esm/errors/thrown-value-description.shared.utils.js.map +1 -1
- package/dist/esm/errors/zod-issue-formatting.shared.utils.d.ts.map +1 -1
- package/dist/esm/errors/zod-issue-formatting.shared.utils.js.map +1 -1
- package/dist/esm/exports/tabular-csv.shared.utils.d.ts.map +1 -1
- package/dist/esm/exports/tabular-csv.shared.utils.js.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-description.shared.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-description.shared.js.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-pass-mode.shared.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-pass-mode.shared.js.map +1 -1
- package/dist/esm/external-data/external-data-pipeline.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline.shared.schemas.js.map +1 -1
- package/dist/esm/external-data/external-data-provenance.shared.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-provenance.shared.js.map +1 -1
- package/dist/esm/external-data.exports.d.ts.map +1 -1
- package/dist/esm/external-data.exports.js.map +1 -1
- package/dist/esm/external-providers/compose-provider-registry.shared.d.ts.map +1 -1
- package/dist/esm/external-providers/compose-provider-registry.shared.js.map +1 -1
- package/dist/esm/external-providers/engine-capabilities.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/engine-capabilities.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/engine-capability-resolution-mode.shared.d.ts.map +1 -1
- package/dist/esm/external-providers/engine-capability-resolution-mode.shared.js.map +1 -1
- package/dist/esm/external-providers/engine-capability-surface.shared.d.ts.map +1 -1
- package/dist/esm/external-providers/engine-capability-surface.shared.js.map +1 -1
- package/dist/esm/external-providers/external-providers.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/external-providers.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/frontend-bootstrap.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/frontend-bootstrap.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/frontend-capability-public-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/frontend-capability-public-config.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/frontend-capability-runtime.shared.types.d.ts.map +1 -1
- package/dist/esm/external-providers/frontend-capability-runtime.shared.types.js.map +1 -1
- package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/frontend-provider-public-config.shared.d.ts.map +1 -1
- package/dist/esm/external-providers/frontend-provider-public-config.shared.js.map +1 -1
- package/dist/esm/external-providers/model-cost-accounting-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/model-cost-accounting-config.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-address-lookup-contract.shared.types.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-address-lookup-contract.shared.types.js.map +1 -1
- package/dist/esm/external-providers/provider-augmentation-opt-ins.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-augmentation-opt-ins.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-authentication-assurance.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-authentication-assurance.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-browser-operations.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-browser-operations.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-capability.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-capability.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-compliance-profile.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-compliance-profile.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-frontend-component-contract.shared.types.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-frontend-component-contract.shared.types.js.map +1 -1
- package/dist/esm/external-providers/provider-frontend-surface.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-frontend-surface.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-metadata.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-metadata.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-package-allow-list.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-package-allow-list.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-protocol.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-protocol.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-scope-reauthorization.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-scope-reauthorization.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-shared-connections.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-shared-connections.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-tier-rule.shared.utils.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-tier-rule.shared.utils.js.map +1 -1
- package/dist/esm/external-providers/provider-usage-cost.shared.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-usage-cost.shared.js.map +1 -1
- package/dist/esm/external-providers/provider-usage-pricing.example.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-usage-pricing.example.js.map +1 -1
- package/dist/esm/external-providers/provider-usage-pricing.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-usage-pricing.shared.schemas.js.map +1 -1
- package/dist/esm/features/application-features.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/features/application-features.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/features/connected-feature.example.d.ts.map +1 -1
- package/dist/esm/features/connected-feature.example.js.map +1 -1
- package/dist/esm/features/core-feature-definitions.shared.d.ts.map +1 -1
- package/dist/esm/features/core-feature-definitions.shared.js.map +1 -1
- package/dist/esm/features/feature-builders.shared.d.ts.map +1 -1
- package/dist/esm/features/feature-builders.shared.js.map +1 -1
- package/dist/esm/features/feature-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/features/feature-definition.shared.schemas.js.map +1 -1
- package/dist/esm/features/feature-registry.shared.d.ts.map +1 -1
- package/dist/esm/features/feature-registry.shared.js.map +1 -1
- package/dist/esm/features/feature-resolution.shared.schemas.d.ts.map +1 -1
- package/dist/esm/features/feature-resolution.shared.schemas.js.map +1 -1
- package/dist/esm/features/scope-features.shared.schemas.d.ts.map +1 -1
- package/dist/esm/features/scope-features.shared.schemas.js.map +1 -1
- package/dist/esm/features/user-features.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/features/user-features.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/files/file-remote-reference-link.shared.schemas.d.ts.map +1 -1
- package/dist/esm/files/file-remote-reference-link.shared.schemas.js.map +1 -1
- package/dist/esm/files/file-upload-grant.shared.schemas.d.ts.map +1 -1
- package/dist/esm/files/file-upload-grant.shared.schemas.js.map +1 -1
- package/dist/esm/files/files.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/files/files.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/files/files.shared.schemas.d.ts.map +1 -1
- package/dist/esm/files/files.shared.schemas.js.map +1 -1
- package/dist/esm/files/files.shared.utils.d.ts.map +1 -1
- package/dist/esm/files/files.shared.utils.js.map +1 -1
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/actors.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/actors.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/agent-traceability.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/agent-traceability.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/agent-work-decisions.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/agent-work-decisions.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/agent-work-decisions.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/agent-work-decisions.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/agents.shared.schemas.d.ts +2 -2
- package/dist/esm/flows-actors/agents.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/agents.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/autonomous-agents.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/autonomous-agents.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/deliberation.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/deliberation.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/execution-plan-readiness.shared.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/execution-plan-readiness.shared.utils.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors-execution.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors-execution.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors-task.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors-task.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors-task.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors-task.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.commons.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.commons.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.configuration.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.configuration.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.frontend.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.frontend.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.io.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.io.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.system.shared.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.system.shared.definitions.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.system.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.system.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/human-decision.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/human-decision.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/mcp-servers.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/mcp-servers.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/model-call-attributions.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/model-call-attributions.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/model-call-attributions.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/model-call-attributions.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/model-cost-period-aggregates.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/model-cost-period-aggregates.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/model-cost-period-aggregates.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/model-cost-period-aggregates.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/model-cost-summary.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/model-cost-summary.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/prompt-ir.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/prompt-ir.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/provider-call-records.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/provider-call-records.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/provider-call-records.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/provider-call-records.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/review-deadlines.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/review-deadlines.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/tasks.actors.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/tasks.actors.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/work-attribution.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/work-attribution.shared.schemas.js.map +1 -1
- package/dist/esm/frontend-definitions/frontend-notification-custom-message-ref.definitions.d.ts.map +1 -1
- package/dist/esm/frontend-definitions/frontend-notification-custom-message-ref.definitions.js.map +1 -1
- package/dist/esm/frontend-definitions/settings-destination-ref.definitions.d.ts.map +1 -1
- package/dist/esm/frontend-definitions/settings-destination-ref.definitions.js.map +1 -1
- package/dist/esm/guidance/guidance-flow.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/guidance-flow.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.utils.d.ts.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.utils.js.map +1 -1
- package/dist/esm/guidance/lifecycle-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/lifecycle-config.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/lifecycle-state.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/lifecycle-state.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/guidance/lifecycle-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/lifecycle-state.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/milestone-builders.shared.d.ts.map +1 -1
- package/dist/esm/guidance/milestone-builders.shared.js.map +1 -1
- package/dist/esm/guidance/milestone-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/milestone-definition.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/progression-presentation.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/progression-presentation.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/progression-state.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/progression-state.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/guidance/progression-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/progression-state.shared.schemas.js.map +1 -1
- package/dist/esm/http-api-binding/http-api-binding-id.shared.utils.d.ts.map +1 -1
- package/dist/esm/http-api-binding/http-api-binding-id.shared.utils.js.map +1 -1
- package/dist/esm/http-api-binding/http-api-binding.shared.schemas.d.ts.map +1 -1
- package/dist/esm/http-api-binding/http-api-binding.shared.schemas.js.map +1 -1
- package/dist/esm/http-api-binding/http-api-erasure-stance.shared.d.ts.map +1 -1
- package/dist/esm/http-api-binding/http-api-erasure-stance.shared.js.map +1 -1
- package/dist/esm/http-api-binding/http-api-rest-write-operations.shared.schemas.d.ts.map +1 -1
- package/dist/esm/http-api-binding/http-api-rest-write-operations.shared.schemas.js.map +1 -1
- package/dist/esm/http-api-binding/http-api-transport-dialect.shared.d.ts.map +1 -1
- package/dist/esm/http-api-binding/http-api-transport-dialect.shared.js.map +1 -1
- package/dist/esm/http-api-binding/read-through-engine-anchors.shared.d.ts.map +1 -1
- package/dist/esm/http-api-binding/read-through-engine-anchors.shared.js.map +1 -1
- package/dist/esm/i18n/application-config-vocabulary.shared.d.ts.map +1 -1
- package/dist/esm/i18n/application-config-vocabulary.shared.js.map +1 -1
- package/dist/esm/i18n/engine-open-vocabulary-values.shared.d.ts.map +1 -1
- package/dist/esm/i18n/engine-open-vocabulary-values.shared.js.map +1 -1
- package/dist/esm/i18n/engine-open-vocabulary.shared.d.ts.map +1 -1
- package/dist/esm/i18n/engine-open-vocabulary.shared.js.map +1 -1
- package/dist/esm/i18n/interpolate-label-params.shared.utils.d.ts.map +1 -1
- package/dist/esm/i18n/interpolate-label-params.shared.utils.js.map +1 -1
- package/dist/esm/i18n/labelling.dto.shared.schemas.d.ts.map +1 -1
- package/dist/esm/i18n/labelling.dto.shared.schemas.js.map +1 -1
- package/dist/esm/inbound/conversation-threads.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/inbound/conversation-threads.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/inbound/conversation-threads.shared.schemas.d.ts.map +1 -1
- package/dist/esm/inbound/conversation-threads.shared.schemas.js.map +1 -1
- package/dist/esm/inbound/inbound-channels.shared.schemas.d.ts.map +1 -1
- package/dist/esm/inbound/inbound-channels.shared.schemas.js.map +1 -1
- package/dist/esm/inbound/inbound-delivery.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/inbound/inbound-delivery.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/inbound/inbound-delivery.shared.schemas.d.ts.map +1 -1
- package/dist/esm/inbound/inbound-delivery.shared.schemas.js.map +1 -1
- package/dist/esm/inbound/inbound-endpoint-env.shared.d.ts.map +1 -1
- package/dist/esm/inbound/inbound-endpoint-env.shared.js.map +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/meta-workflows/actions.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/meta-workflows/actions.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/meta-workflows/catalog.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/meta-workflows/catalog.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/meta-workflows/coding-tasks.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/meta-workflows/coding-tasks.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/meta-workflows/context-selection.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/meta-workflows/context-selection.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/meta-workflows/decisions.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/meta-workflows/decisions.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/meta-workflows/orchestration.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/meta-workflows/orchestration.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/meta-workflows/portable-primitives.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/meta-workflows/portable-primitives.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/meta-workflows.exports.d.ts.map +1 -1
- package/dist/esm/meta-workflows.exports.js.map +1 -1
- package/dist/esm/monitoring/monitoring.shared.schemas.d.ts.map +1 -1
- package/dist/esm/monitoring/monitoring.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/email/email-context.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/email/email-context.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/email/email-submission.shared.enums.d.ts.map +1 -1
- package/dist/esm/notifications/email/email-submission.shared.enums.js.map +1 -1
- package/dist/esm/notifications/email/email-template-registry.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/email/email-template-registry.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/email/email-template.shared.enums.d.ts.map +1 -1
- package/dist/esm/notifications/email/email-template.shared.enums.js.map +1 -1
- package/dist/esm/notifications/inbound-email/inbound-email.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/inbound-email/inbound-email.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/notifications/inbound-email/inbound-email.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/inbound-email/inbound-email.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-contract.shared.d.ts.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-contract.shared.js.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/notifications/m2m/webhook-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/m2m/webhook-config.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/notification-badges.core.definitions.d.ts.map +1 -1
- package/dist/esm/notifications/notification-badges.core.definitions.js.map +1 -1
- package/dist/esm/notifications/notification-badges.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/notification-badges.schemas.js.map +1 -1
- package/dist/esm/notifications/notification-badges.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/notification-badges.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/notifications/notifications.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/notifications.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/application-owner-organization.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/application-owner-organization.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-features.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-features.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-features.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-features.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-members.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-members.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-members.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-members.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-notifications.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-notifications.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-notifications.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-notifications.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-unit-inheritance.shared.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-inheritance.shared.js.map +1 -1
- package/dist/esm/organizations/organization-unit-members.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-members.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-unit-members.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-members.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing-decision.shared.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing-decision.shared.js.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing.example.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing.example.js.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing.shared.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing.shared.js.map +1 -1
- package/dist/esm/organizations/organization-units.shared.path.d.ts.map +1 -1
- package/dist/esm/organizations/organization-units.shared.path.js.map +1 -1
- package/dist/esm/organizations/organization-units.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-units.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-units.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-units.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organizations.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organizations.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organizations.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organizations.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/service-provider-activity-feed.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/service-provider-activity-feed.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/service-provider-activity-feed.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/service-provider-activity-feed.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/service-provider-capability-grants.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/service-provider-capability-grants.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/service-provider-capability-grants.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/service-provider-capability-grants.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/service-provider-client-controls.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/service-provider-client-controls.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/service-provider-relationships.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/service-provider-relationships.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/service-provider-relationships.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/service-provider-relationships.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/tenant-teardown-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/tenant-teardown-config.shared.schemas.js.map +1 -1
- package/dist/esm/provider-registration-runtime.exports.d.ts.map +1 -1
- package/dist/esm/provider-registration-runtime.exports.js.map +1 -1
- package/dist/esm/public-runtime/index.d.ts.map +1 -1
- package/dist/esm/public-runtime/index.js.map +1 -1
- package/dist/esm/queue/jobs.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/queue/jobs.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/queue/jobs.shared.schemas.d.ts +8 -8
- package/dist/esm/queue/jobs.shared.schemas.d.ts.map +1 -1
- package/dist/esm/queue/jobs.shared.schemas.js.map +1 -1
- package/dist/esm/queue/jobs.shared.utils.d.ts.map +1 -1
- package/dist/esm/queue/jobs.shared.utils.js.map +1 -1
- package/dist/esm/queue/queues.shared.schemas.d.ts.map +1 -1
- package/dist/esm/queue/queues.shared.schemas.js.map +1 -1
- package/dist/esm/queue/queues.shared.utils.d.ts.map +1 -1
- package/dist/esm/queue/queues.shared.utils.js.map +1 -1
- package/dist/esm/queue/rabbitmq-queue-args.shared.d.ts.map +1 -1
- package/dist/esm/queue/rabbitmq-queue-args.shared.js.map +1 -1
- package/dist/esm/rag/rag-retrieval-health.shared.d.ts.map +1 -1
- package/dist/esm/rag/rag-retrieval-health.shared.js.map +1 -1
- package/dist/esm/requests/header-keys.shared.d.ts.map +1 -1
- package/dist/esm/requests/header-keys.shared.js.map +1 -1
- package/dist/esm/requests/http-requests.shared.d.ts.map +1 -1
- package/dist/esm/requests/http-requests.shared.js.map +1 -1
- package/dist/esm/requests/idempotency-key.shared.d.ts.map +1 -1
- package/dist/esm/requests/idempotency-key.shared.js.map +1 -1
- package/dist/esm/requests/manual-controllers-routes-documentation.d.ts.map +1 -1
- package/dist/esm/requests/manual-controllers-routes-documentation.js.map +1 -1
- package/dist/esm/requests/manual-controllers-routes-urls.d.ts.map +1 -1
- package/dist/esm/requests/manual-controllers-routes-urls.js.map +1 -1
- package/dist/esm/requests/rate-limits.shared.schemas.d.ts.map +1 -1
- package/dist/esm/requests/rate-limits.shared.schemas.js.map +1 -1
- package/dist/esm/requests/websocket.shared.schemas.d.ts.map +1 -1
- package/dist/esm/requests/websocket.shared.schemas.js.map +1 -1
- package/dist/esm/resources/child-operations.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/child-operations.shared.schemas.js.map +1 -1
- package/dist/esm/resources/collection-query-parameters.shared.d.ts.map +1 -1
- package/dist/esm/resources/collection-query-parameters.shared.js.map +1 -1
- package/dist/esm/resources/context-policy.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/context-policy.shared.schemas.js.map +1 -1
- package/dist/esm/resources/embedded-resource-mark.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/embedded-resource-mark.shared.utils.js.map +1 -1
- package/dist/esm/resources/relationship-display.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/relationship-display.shared.schemas.js.map +1 -1
- package/dist/esm/resources/resources-config.shared.factory.d.ts.map +1 -1
- package/dist/esm/resources/resources-config.shared.factory.js.map +1 -1
- package/dist/esm/resources/resources-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/resources-config.shared.schemas.js.map +1 -1
- package/dist/esm/resources/resources-registry.shared.core.definitions.d.ts.map +1 -1
- package/dist/esm/resources/resources-registry.shared.core.definitions.js +18 -2
- package/dist/esm/resources/resources-registry.shared.core.definitions.js.map +1 -1
- package/dist/esm/resources/resources-relationships.shared.factory.d.ts.map +1 -1
- package/dist/esm/resources/resources-relationships.shared.factory.js.map +1 -1
- package/dist/esm/resources/resources-serialization.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/resources-serialization.shared.schemas.js.map +1 -1
- package/dist/esm/resources/resources.shared.core.definitions.d.ts.map +1 -1
- package/dist/esm/resources/resources.shared.core.definitions.js.map +1 -1
- package/dist/esm/resources/resources.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/resources.shared.schemas.js.map +1 -1
- package/dist/esm/resources/resources.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/resources.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/collection-export.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/collection-export.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/composition-cascade-deletability.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/composition-cascade-deletability.validation.js.map +1 -1
- package/dist/esm/resources/utils/composition-seedability.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/composition-seedability.validation.js.map +1 -1
- package/dist/esm/resources/utils/context-addressed-composition-singleton.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/context-addressed-composition-singleton.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/dependent-lifecycle-classification.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/dependent-lifecycle-classification.validation.js.map +1 -1
- package/dist/esm/resources/utils/duplicate-relationship-registration.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/duplicate-relationship-registration.validation.js.map +1 -1
- package/dist/esm/resources/utils/field-value-disclosure.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/field-value-disclosure.utils.js.map +1 -1
- package/dist/esm/resources/utils/http-api-write-declaration.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/http-api-write-declaration.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/initiator-stamped-field-satisfiability.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/initiator-stamped-field-satisfiability.validation.js.map +1 -1
- package/dist/esm/resources/utils/no-subject-data-stance-coherence.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/no-subject-data-stance-coherence.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/persistence-adapter-discrimination.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/persistence-adapter-discrimination.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/populated-file-fields.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/populated-file-fields.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/repository-dto-builder.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/repository-dto-builder.utils.js.map +1 -1
- package/dist/esm/resources/utils/request-schema-field-carriage.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/request-schema-field-carriage.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/required-fk-fillability.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/required-fk-fillability.validation.js.map +1 -1
- package/dist/esm/resources/utils/resource-operation-type-guards.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-operation-type-guards.utils.js.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.factory.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.factory.js.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.relationships.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.relationships.js.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.schemas.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.schemas.js.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.utils.js.map +1 -1
- package/dist/esm/resources/utils/resource-subtree.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-subtree.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-context-needs.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-context-needs.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-naming.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-naming.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.dtos-builder.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.dtos-builder.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.path.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.path.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.urls-builder.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.urls-builder.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-serialization.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-serialization.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-summary.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-summary.utils.js.map +1 -1
- package/dist/esm/resources/utils/schema-family-builder.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/schema-family-builder.utils.js.map +1 -1
- package/dist/esm/resources/utils/schema-type-inference.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/schema-type-inference.utils.js.map +1 -1
- package/dist/esm/resources/utils/schema-type-utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/schema-type-utils.js.map +1 -1
- package/dist/esm/resources/utils/schema-variant-resolver.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/schema-variant-resolver.utils.js.map +1 -1
- package/dist/esm/resources/utils/shared-persistence-collection.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/shared-persistence-collection.utils.js.map +1 -1
- package/dist/esm/resources/utils/templatable-file-fields.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/templatable-file-fields.shared.utils.js.map +1 -1
- package/dist/esm/resources/work-unit.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/work-unit.shared.schemas.js.map +1 -1
- package/dist/esm/runtime/domain-module.shared.definitions.d.ts.map +1 -1
- package/dist/esm/runtime/domain-module.shared.definitions.js.map +1 -1
- package/dist/esm/runtime/execution-context.shared.schemas.d.ts.map +1 -1
- package/dist/esm/runtime/execution-context.shared.schemas.js.map +1 -1
- package/dist/esm/runtime/runtime.shared.schemas.d.ts.map +1 -1
- package/dist/esm/runtime/runtime.shared.schemas.js.map +1 -1
- package/dist/esm/security/api-keys/api-keys-application.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys-application.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/api-keys/api-keys-organization.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys-organization.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/api-keys/api-keys.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/anonymous-session/anonymous-session.shared.contract.d.ts.map +1 -1
- package/dist/esm/security/authentications/anonymous-session/anonymous-session.shared.contract.js.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.dto.schemas.js.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.utils.js.map +1 -1
- package/dist/esm/security/authentications/consumable-token.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/consumable-token.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/cross-frontend-handoff.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/cross-frontend-handoff.shared.dto.schemas.js.map +1 -1
- package/dist/esm/security/authentications/mfa-backup-code-contract.shared.d.ts.map +1 -1
- package/dist/esm/security/authentications/mfa-backup-code-contract.shared.js.map +1 -1
- package/dist/esm/security/authentications/password-blocklist.shared.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/password-blocklist.shared.utils.js.map +1 -1
- package/dist/esm/security/authentications/password-reset.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/password-reset.shared.dto.schemas.js.map +1 -1
- package/dist/esm/security/authentications/registration.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/registration.shared.dto.schemas.js.map +1 -1
- package/dist/esm/security/authentications/same-origin-redirect-path.shared.d.ts.map +1 -1
- package/dist/esm/security/authentications/same-origin-redirect-path.shared.js.map +1 -1
- package/dist/esm/security/authentications/scim/scim-organization-unit-mapping.shared.d.ts.map +1 -1
- package/dist/esm/security/authentications/scim/scim-organization-unit-mapping.shared.js.map +1 -1
- package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/scim/scim-tokens.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/scim/scim-tokens.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/scim/scim-tokens.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/scim/scim-tokens.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/service-provider-client-authentication.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/service-provider-client-authentication.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-reliability-contract.shared.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-reliability-contract.shared.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-export-config.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-export-config.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-export-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-export-config.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/sso/sso-config.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/sso/sso-config.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/sso/sso-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/sso/sso-config.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/sso/sso-connection.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/sso/sso-connection.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/sso/sso-connection.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/sso/sso-connection.shared.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/application-access-grants.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/application-access-grants.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/application-access-grants.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/application-access-grants.shared.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grants.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grants.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.defaults.d.ts.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.defaults.js.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.utils.js.map +1 -1
- package/dist/esm/security/connected-accounts/provider-connection-listing.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/provider-connection-listing.shared.schemas.js.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials-organization.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials-organization.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials-user.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials-user.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials.shared.schemas.js.map +1 -1
- package/dist/esm/security/credential-rotation-grace.shared.utils.d.ts.map +1 -1
- package/dist/esm/security/credential-rotation-grace.shared.utils.js.map +1 -1
- package/dist/esm/security/crypto-keys/crypto-keys.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/crypto-keys/crypto-keys.shared.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.shared.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-resource-server.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-resource-server.shared.schemas.js.map +1 -1
- package/dist/esm/security/outbound-target-control.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/outbound-target-control.shared.schemas.js.map +1 -1
- package/dist/esm/security/submission-challenge/submission-challenge.shared.d.ts.map +1 -1
- package/dist/esm/security/submission-challenge/submission-challenge.shared.js.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-actions.shared.schemas.d.ts.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-actions.shared.schemas.js.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-credential-kind.shared.d.ts.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-credential-kind.shared.js.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-declaration.shared.schemas.d.ts.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-declaration.shared.schemas.js.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-env.shared.d.ts.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-env.shared.js.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-error-codes.shared.d.ts.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-error-codes.shared.js.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-facet.shared.schemas.d.ts.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-facet.shared.schemas.js.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.schemas.d.ts.map +1 -1
- package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.schemas.js.map +1 -1
- package/dist/esm/testing/resource-config-builders.d.ts.map +1 -1
- package/dist/esm/testing/resource-config-builders.js.map +1 -1
- package/dist/esm/testing.d.ts.map +1 -1
- package/dist/esm/testing.js.map +1 -1
- package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.js.map +1 -1
- package/dist/esm/users/anonymous-users.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/anonymous-users.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/anonymous-users.shared.schema.d.ts.map +1 -1
- package/dist/esm/users/anonymous-users.shared.schema.js.map +1 -1
- package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/inbound-contacts.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/inbound-contacts.shared.schemas.js.map +1 -1
- package/dist/esm/users/user-consent-decision.shared.utils.d.ts.map +1 -1
- package/dist/esm/users/user-consent-decision.shared.utils.js.map +1 -1
- package/dist/esm/users/user-credentials.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-credentials.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-credentials.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-credentials.shared.schemas.js.map +1 -1
- package/dist/esm/users/user-identity-links.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-identity-links.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-identity-links.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-identity-links.shared.schemas.js.map +1 -1
- package/dist/esm/users/user-preferences-reset.shared.utils.d.ts.map +1 -1
- package/dist/esm/users/user-preferences-reset.shared.utils.js.map +1 -1
- package/dist/esm/users/user-preferences.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-preferences.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-profiles.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-profiles.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-self-preferences.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-self-preferences.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-self-profiles.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-self-profiles.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-self.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-self.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/users.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/users.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/users.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/users.shared.schemas.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +4 -4
- package/dist/esm/compliance/privacy/data-retention.shared.schemas.d.ts +0 -0
- package/dist/esm/compliance/privacy/data-retention.shared.schemas.d.ts.map +0 -0
- package/dist/esm/compliance/privacy/data-retention.shared.schemas.js.map +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-registration-alignment.shared.js","sourceRoot":"","sources":["../../../../../src/config/frontend/chart-registration-alignment.shared.ts"],"names":[],"mappings":"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","sourcesContent":["/** ──────────────────────────────────────────────────────────────\n * Chart registration alignment (drift guard)\n *\n * A resource-owned chart must be wired on BOTH sides:\n * - FRONTEND: authored in `ResourceUIBehaviorConfig.chartViews[].chartDefinition`\n * (frontend-only — the backend cannot import it), and\n * - BACKEND: registered via `BackendDomainModule.chartDefinitions`, which feeds\n * the backend `ChartRegistry` so `POST /charts/:ref/data` can execute.\n *\n * A frontend chartView whose `chartDefinition.ref` has NO backend registration\n * produces a runtime 404 (`chart_not_found`) — the host renders but the data\n * fetch fails. This module is the pure, framework-general comparator that a\n * build-time / CLI guard uses to catch that drift before it ships.\n *\n * ## The failure is LOUD but LATE, and the distinction decides what this guard is for\n * Earlier revisions of this file, the CLI verb and the CI workflow all called that 404\n * \"silent\". Measured on the runtime path, it is not: `ChartView` renders `ChartErrorState`\n * (an error card with a retry action), a standalone chart page also raises the global error\n * toast (`localErrorOnly` is only set by EMBEDDED hosts), and the backend answers a NOT_FOUND\n * whose context names the resolved ref.\n *\n * So this guard does not exist to make an invisible failure visible. It exists because the\n * failure is only visible to whoever OPENS the chart — a chart on a rarely-visited surface\n * ships broken and is discovered by a user. Everything here moves that discovery to authoring\n * time. Do not restate \"silent\"; it overstates the defect and misdescribes what is being fixed.\n *\n * ## Why this is a comparator and not a boot refusal\n * Neither runtime process can perform this join, so there is no boot to refuse at:\n * - the BACKEND cannot see `chartViews` — it lives on `ResourceUIBehaviorConfig` in `.tsx`\n * ui-behavior modules the backend cannot import, which is why the dev companion needs a\n * dedicated introspection SUBPROCESS to materialize it (and why the backend module slot\n * exists as a second wiring in the first place);\n * - the FRONTEND has `chartViews` but never receives the backend's registered set — nothing\n * serializes `ChartRegistry.getRegisteredChartRefs()` into any boot payload.\n * The only process that sees both is the companion, which is where every channel that runs\n * this comparator lives: `POST /api/companion/charts/audit`, `wildo charts audit`, and the CI\n * gate. The BACKEND-visible half of chart wiring — a chart naming a resource type that does\n * not exist — is refused at boot by `ChartRegistryBackendService.registerChart`.\n *\n * ## The backend set has TWO possible sources, and only ONE of them is the answer\n * `ApplicationInitializationConfig.chartDefinitions` — the array `StartApplicationBackendService`\n * actually registers — is assembled as\n * `overrides.chartDefinitions ?? input.backendRegistry.chartDefinitions`\n * (`buildApplicationInitializationConfigFromModules`). That is a REPLACE, not a merge. So an\n * application supplying `overrides.chartDefinitions` makes the module DECLARATIONS an arbitrary set\n * with no relation to what registers: it may drop a declared chart (a comparison built on the\n * declarations then reports ALIGNED while the chart 404s) and it may add one that is not declared\n * (the same comparison then reports a false FAIL).\n *\n * Hence {@link ChartRegistrationBackendRefsProvenance}. A caller must say WHICH set it brought, and\n * a comparison built on the declarations yields\n * {@link ChartRegistrationAlignmentVerdict.CANNOT_VOUCH} — never `ALIGNED`. A guard that says \"I\n * cannot answer\" beats one that answers about a different population; that is the same class as a\n * green report read off a stale artifact\n * (`.claude/rules/staleness-presents-as-a-logic-defect.md`).\n *\n * ## The effective set IS reachable — no contract change is needed\n * An earlier note on `ChartRegistryBackendService.getRegisteredChartRefs` said closing this \"needs\n * the overrides to reach the companion, which the `companion-exports` contract does not currently\n * carry\". **That was wrong, and the contract had already answered it**:\n * `BackendCompanionExports.buildApplicationInitializationConfig()` is REQUIRED, is the same pure\n * builder backend startup uses, starts nothing, and its JSDoc says in as many words that \"tooling\n * must not reconstruct selected runtime capabilities from lower-level registries\". Composing the\n * backend side from `mergeBackendDomainModules(...)` was exactly that reconstruction.\n *\n * Residual, stated rather than hidden: the companion calls the builder with NO host overrides, so it\n * sees the set the APPLICATION declares. A HOST that passed `chartDefinitions` in its own overrides\n * would diverge — neither dogfood host does (both pass only `customControllers`, `container`,\n * `serviceIdentifier`, `providerRuntime`), and a host-level chart override has no use case today.\n *\n * ## Join key\n * The comparison key is `chartView.chartDefinition.ref` (the execution ref the\n * frontend runtime sends), NOT the outer `chartView.ref` (the view identity).\n *\n * This module is import-safe (pure functions + types, no frontend-lib /\n * backend-lib deps) so it can run from the companion subprocess, a CLI audit,\n * and unit tests alike.\n * ────────────────────────────────────────────────────────────── */\n\n/**\n * Normalize a chart execution reference to its canonical registry key. This is\n * the SINGLE source of truth for ref normalization, shared by the backend\n * `ChartRegistry` (registration + lookup) and this alignment guard, so the two\n * can never diverge on whitespace and silently disagree about whether a chart is\n * registered.\n */\nexport function normalizeChartExecutionRef(rawRef: string): string {\n return rawRef.trim();\n}\n\n/** One frontend chartView's registration identity (the drift-guard input). */\nexport interface FrontendChartRegistrationRef {\n /** `chartView.chartDefinition.ref` — the execution/registry join key. */\n chartDefinitionRef: string;\n /** The resource type whose ui-behavior authored this chartView. */\n resourceType: string;\n /** `chartView.ref` — the view identity (for a precise, locatable error). */\n chartViewRef: string;\n}\n\n/**\n * WHERE a caller's `backendRegisteredRefs` came from — the input that decides whether this\n * comparison is about the population that actually registers.\n *\n * A closed vocabulary with a named home rather than a boolean, because the two members are not\n * \"good/bad\": each names a concrete assembly step, and the reason one of them cannot be vouched for\n * is a specific line of code (`overrides.chartDefinitions ?? input.backendRegistry.chartDefinitions`)\n * that a `trusted: false` flag could never carry.\n */\nexport enum ChartRegistrationBackendRefsProvenance {\n /**\n * From `BackendCompanionExports.buildApplicationInitializationConfig().chartDefinitions` — the\n * exact array `StartApplicationBackendService` registers, with any\n * `ApplicationInitializationOverrides.chartDefinitions` already applied. The only provenance that\n * supports a vouched verdict.\n */\n EFFECTIVE_INITIALIZATION_CONFIG = 'effective-initialization-config',\n /**\n * From `mergeBackendDomainModules(...).chartDefinitions` — what the modules DECLARE. Equal to the\n * effective set only while no application supplies `overrides.chartDefinitions`; nothing in this\n * set records whether one does, which is why a caller supplying it gets `CANNOT_VOUCH` rather\n * than a verdict.\n *\n * This is also what an ABSENT provenance means. The permissive reading was deliberately NOT\n * chosen for the default: a caller that has not thought about which set it brought has, by\n * definition, brought the one it could reach without asking.\n */\n MODULE_DECLARATIONS = 'module-declarations',\n}\n\n/** What the comparison is entitled to conclude, given where its backend set came from. */\nexport enum ChartRegistrationAlignmentVerdict {\n /** Every frontend chartView resolves against the set that actually registers. */\n ALIGNED = 'aligned',\n /** At least one frontend chartView has no registration in the set that actually registers. */\n MISALIGNED = 'misaligned',\n /**\n * The comparison ran and its channels are populated, but the backend set was not the effective\n * one — so NEITHER a clean nor a dirty result may be reported as fact. Report the channels as\n * evidence; do not report alignment.\n */\n CANNOT_VOUCH = 'cannot-vouch',\n}\n\n/** The two-channel drift report. */\nexport interface ChartRegistrationAlignmentReport {\n /** Echoed so a consumer renders, logs or gates on the same answer the comparison used. */\n backendRefsProvenance: ChartRegistrationBackendRefsProvenance;\n /** What this comparison is entitled to conclude. See {@link ChartRegistrationAlignmentVerdict}. */\n verdict: ChartRegistrationAlignmentVerdict;\n /**\n * Frontend chartViews whose `chartDefinition.ref` has NO backend registration.\n * FAIL channel — each one is a guaranteed runtime 404.\n */\n unregisteredFrontendCharts: FrontendChartRegistrationRef[];\n /**\n * Backend-registered chart refs referenced by NO frontend chartView. WARN\n * channel — a backend-only chart is valid (e.g. a programmatic/API-only chart\n * consumed directly via `/charts/:ref/data`), so this is never a hard failure.\n */\n orphanBackendCharts: string[];\n}\n\n/**\n * Compare the set of frontend chartView refs against the set of backend-registered\n * chart refs. Both sides are normalized via {@link normalizeChartExecutionRef}\n * before comparison so whitespace never causes a phantom mismatch.\n */\nexport function computeChartRegistrationAlignment(params: {\n frontendChartRefs: FrontendChartRegistrationRef[];\n backendRegisteredRefs: string[];\n /**\n * WHERE `backendRegisteredRefs` came from. Optional so that adding it did not red-line an\n * existing caller this change could not reach — absence is read as\n * {@link ChartRegistrationBackendRefsProvenance.MODULE_DECLARATIONS}, i.e. the answer that\n * yields `CANNOT_VOUCH`, never the permissive one.\n */\n backendRefsProvenance?: ChartRegistrationBackendRefsProvenance;\n}): ChartRegistrationAlignmentReport {\n const normalizedBackend = params.backendRegisteredRefs.map(normalizeChartExecutionRef);\n const backendSet = new Set(normalizedBackend);\n const frontendSet = new Set(\n params.frontendChartRefs.map((r) => normalizeChartExecutionRef(r.chartDefinitionRef)),\n );\n\n const unregisteredFrontendCharts = params.frontendChartRefs.filter(\n (r) => !backendSet.has(normalizeChartExecutionRef(r.chartDefinitionRef)),\n );\n\n const orphanBackendCharts = [\n ...new Set(normalizedBackend.filter((ref) => !frontendSet.has(ref))),\n ];\n\n const backendRefsProvenance =\n params.backendRefsProvenance ?? ChartRegistrationBackendRefsProvenance.MODULE_DECLARATIONS;\n\n const verdict =\n backendRefsProvenance !== ChartRegistrationBackendRefsProvenance.EFFECTIVE_INITIALIZATION_CONFIG\n ? ChartRegistrationAlignmentVerdict.CANNOT_VOUCH\n : unregisteredFrontendCharts.length > 0\n ? ChartRegistrationAlignmentVerdict.MISALIGNED\n : ChartRegistrationAlignmentVerdict.ALIGNED;\n\n return { backendRefsProvenance, verdict, unregisteredFrontendCharts, orphanBackendCharts };\n}\n\n/**\n * Render the provenance caveat, or `undefined` when the report may be taken at face value.\n *\n * Exists so the two surfaces a person reads — the CLI's summary line and the thrown gate message —\n * cannot word this differently, or one of them forget it. A caveat that appears on one surface is\n * the state this whole change is repairing.\n */\nexport function describeChartRegistrationVerdictCaveat(\n report: ChartRegistrationAlignmentReport,\n): string | undefined {\n if (report.verdict !== ChartRegistrationAlignmentVerdict.CANNOT_VOUCH) return undefined;\n return (\n 'This comparison used the module DECLARATIONS '\n + `(provenance: ${report.backendRefsProvenance}), not the set the backend registers. `\n + 'An application supplying `ApplicationInitializationOverrides.chartDefinitions` REPLACES the '\n + 'declared array, so a dropped chart would read as aligned here and 404 at runtime. '\n + 'Fix: take the backend refs from '\n + '`backendCompanionExports.buildApplicationInitializationConfig().chartDefinitions` and pass '\n + `backendRefsProvenance: ${ChartRegistrationBackendRefsProvenance.EFFECTIVE_INITIALIZATION_CONFIG}.`\n );\n}\n\n/**\n * Throw a verbose, locatable error if any frontend chartView is unregistered\n * backend-side. Only the FAIL channel throws; `orphanBackendCharts` (WARN) never\n * throws. Use in the `--strict` path of the CLI audit / a CI gate.\n *\n * ## `requireVouchedVerdict` defaults to `true`, and that is the point of the parameter\n *\n * A clean FAIL channel is only evidence of alignment when the backend set was the EFFECTIVE one — a\n * chart dropped by an `ApplicationInitializationOverrides.chartDefinitions` override is registered\n * nowhere and declared everywhere, so a comparison against the DECLARATIONS reports ALIGNED about a\n * population the application does not run. So this refuses a\n * {@link ChartRegistrationAlignmentVerdict.CANNOT_VOUCH} report rather than returning quietly, and a\n * caller has to say deliberately that it does not want that.\n *\n * It shipped defaulting to `false` (2026-09-09) for one turn, because the companion's own CI-gate\n * test still composed its backend set from `mergeBackendDomainModules(...)` and defaulting to `true`\n * would have turned a green gate red with no hand able to repair it. That caller was fixed the same\n * day and the default flipped with it. The permissive default is gone deliberately: it protected one\n * known caller and would have silently absolved every future one.\n *\n * Pass `false` only where the verdict is being REPORTED rather than gated — a summary line that\n * prints {@link describeChartRegistrationVerdictCaveat} beside it is honest; a gate that returns\n * quietly is not.\n */\nexport function assertChartRegistrationAligned(\n report: ChartRegistrationAlignmentReport,\n errorPrefix = 'ChartRegistrationAlignment',\n requireVouchedVerdict = true,\n): void {\n if (requireVouchedVerdict && report.verdict === ChartRegistrationAlignmentVerdict.CANNOT_VOUCH) {\n throw new Error(\n `${errorPrefix}: refusing to report alignment. `\n + describeChartRegistrationVerdictCaveat(report),\n );\n }\n if (report.unregisteredFrontendCharts.length === 0) return;\n const lines = report.unregisteredFrontendCharts.map(\n (r) =>\n ` - ${r.resourceType}.${r.chartViewRef} → chartDefinition.ref '${r.chartDefinitionRef}' has no backend chartDefinitions registration`,\n );\n throw new Error(\n `${errorPrefix}: ${report.unregisteredFrontendCharts.length} chart view(s) reference a chart that is NOT registered backend-side (each would 404 with chart_not_found at runtime):\\n` +\n `${lines.join('\\n')}\\n` +\n `Fix: add the shared ChartDefinition to the owning backend module's \\`chartDefinitions\\` array.`,\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"chart-registration-alignment.shared.js","sourceRoot":"","sources":["../../../../src/config/frontend/chart-registration-alignment.shared.ts"],"names":[],"mappings":"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","sourcesContent":["/** ──────────────────────────────────────────────────────────────\n * Chart registration alignment (drift guard)\n *\n * A resource-owned chart must be wired on BOTH sides:\n * - FRONTEND: authored in `ResourceUIBehaviorConfig.chartViews[].chartDefinition`\n * (frontend-only — the backend cannot import it), and\n * - BACKEND: registered via `BackendDomainModule.chartDefinitions`, which feeds\n * the backend `ChartRegistry` so `POST /charts/:ref/data` can execute.\n *\n * A frontend chartView whose `chartDefinition.ref` has NO backend registration\n * produces a runtime 404 (`chart_not_found`) — the host renders but the data\n * fetch fails. This module is the pure, framework-general comparator that a\n * build-time / CLI guard uses to catch that drift before it ships.\n *\n * ## The failure is LOUD but LATE, and the distinction decides what this guard is for\n * Earlier revisions of this file, the CLI verb and the CI workflow all called that 404\n * \"silent\". Measured on the runtime path, it is not: `ChartView` renders `ChartErrorState`\n * (an error card with a retry action), a standalone chart page also raises the global error\n * toast (`localErrorOnly` is only set by EMBEDDED hosts), and the backend answers a NOT_FOUND\n * whose context names the resolved ref.\n *\n * So this guard does not exist to make an invisible failure visible. It exists because the\n * failure is only visible to whoever OPENS the chart — a chart on a rarely-visited surface\n * ships broken and is discovered by a user. Everything here moves that discovery to authoring\n * time. Do not restate \"silent\"; it overstates the defect and misdescribes what is being fixed.\n *\n * ## Why this is a comparator and not a boot refusal\n * Neither runtime process can perform this join, so there is no boot to refuse at:\n * - the BACKEND cannot see `chartViews` — it lives on `ResourceUIBehaviorConfig` in `.tsx`\n * ui-behavior modules the backend cannot import, which is why the dev companion needs a\n * dedicated introspection SUBPROCESS to materialize it (and why the backend module slot\n * exists as a second wiring in the first place);\n * - the FRONTEND has `chartViews` but never receives the backend's registered set — nothing\n * serializes `ChartRegistry.getRegisteredChartRefs()` into any boot payload.\n * The only process that sees both is the companion, which is where every channel that runs\n * this comparator lives: `POST /api/companion/charts/audit`, `wildo charts audit`, and the CI\n * gate. The BACKEND-visible half of chart wiring — a chart naming a resource type that does\n * not exist — is refused at boot by `ChartRegistryBackendService.registerChart`.\n *\n * ## The backend set has TWO possible sources, and only ONE of them is the answer\n * `ApplicationInitializationConfig.chartDefinitions` — the array `StartApplicationBackendService`\n * actually registers — is assembled as\n * `overrides.chartDefinitions ?? input.backendRegistry.chartDefinitions`\n * (`buildApplicationInitializationConfigFromModules`). That is a REPLACE, not a merge. So an\n * application supplying `overrides.chartDefinitions` makes the module DECLARATIONS an arbitrary set\n * with no relation to what registers: it may drop a declared chart (a comparison built on the\n * declarations then reports ALIGNED while the chart 404s) and it may add one that is not declared\n * (the same comparison then reports a false FAIL).\n *\n * Hence {@link ChartRegistrationBackendRefsProvenance}. A caller must say WHICH set it brought, and\n * a comparison built on the declarations yields\n * {@link ChartRegistrationAlignmentVerdict.CANNOT_VOUCH} — never `ALIGNED`. A guard that says \"I\n * cannot answer\" beats one that answers about a different population; that is the same class as a\n * green report read off a stale artifact\n * (`.claude/rules/staleness-presents-as-a-logic-defect.md`).\n *\n * ## The effective set IS reachable — no contract change is needed\n * An earlier note on `ChartRegistryBackendService.getRegisteredChartRefs` said closing this \"needs\n * the overrides to reach the companion, which the `companion-exports` contract does not currently\n * carry\". **That was wrong, and the contract had already answered it**:\n * `BackendCompanionExports.buildApplicationInitializationConfig()` is REQUIRED, is the same pure\n * builder backend startup uses, starts nothing, and its JSDoc says in as many words that \"tooling\n * must not reconstruct selected runtime capabilities from lower-level registries\". Composing the\n * backend side from `mergeBackendDomainModules(...)` was exactly that reconstruction.\n *\n * Residual, stated rather than hidden: the companion calls the builder with NO host overrides, so it\n * sees the set the APPLICATION declares. A HOST that passed `chartDefinitions` in its own overrides\n * would diverge — neither dogfood host does (both pass only `customControllers`, `container`,\n * `serviceIdentifier`, `providerRuntime`), and a host-level chart override has no use case today.\n *\n * ## Join key\n * The comparison key is `chartView.chartDefinition.ref` (the execution ref the\n * frontend runtime sends), NOT the outer `chartView.ref` (the view identity).\n *\n * This module is import-safe (pure functions + types, no frontend-lib /\n * backend-lib deps) so it can run from the companion subprocess, a CLI audit,\n * and unit tests alike.\n * ────────────────────────────────────────────────────────────── */\n\n/**\n * Normalize a chart execution reference to its canonical registry key. This is\n * the SINGLE source of truth for ref normalization, shared by the backend\n * `ChartRegistry` (registration + lookup) and this alignment guard, so the two\n * can never diverge on whitespace and silently disagree about whether a chart is\n * registered.\n */\nexport function normalizeChartExecutionRef(rawRef: string): string {\n return rawRef.trim();\n}\n\n/** One frontend chartView's registration identity (the drift-guard input). */\nexport interface FrontendChartRegistrationRef {\n /** `chartView.chartDefinition.ref` — the execution/registry join key. */\n chartDefinitionRef: string;\n /** The resource type whose ui-behavior authored this chartView. */\n resourceType: string;\n /** `chartView.ref` — the view identity (for a precise, locatable error). */\n chartViewRef: string;\n}\n\n/**\n * WHERE a caller's `backendRegisteredRefs` came from — the input that decides whether this\n * comparison is about the population that actually registers.\n *\n * A closed vocabulary with a named home rather than a boolean, because the two members are not\n * \"good/bad\": each names a concrete assembly step, and the reason one of them cannot be vouched for\n * is a specific line of code (`overrides.chartDefinitions ?? input.backendRegistry.chartDefinitions`)\n * that a `trusted: false` flag could never carry.\n */\nexport enum ChartRegistrationBackendRefsProvenance {\n /**\n * From `BackendCompanionExports.buildApplicationInitializationConfig().chartDefinitions` — the\n * exact array `StartApplicationBackendService` registers, with any\n * `ApplicationInitializationOverrides.chartDefinitions` already applied. The only provenance that\n * supports a vouched verdict.\n */\n EFFECTIVE_INITIALIZATION_CONFIG = 'effective-initialization-config',\n /**\n * From `mergeBackendDomainModules(...).chartDefinitions` — what the modules DECLARE. Equal to the\n * effective set only while no application supplies `overrides.chartDefinitions`; nothing in this\n * set records whether one does, which is why a caller supplying it gets `CANNOT_VOUCH` rather\n * than a verdict.\n *\n * This is also what an ABSENT provenance means. The permissive reading was deliberately NOT\n * chosen for the default: a caller that has not thought about which set it brought has, by\n * definition, brought the one it could reach without asking.\n */\n MODULE_DECLARATIONS = 'module-declarations',\n}\n\n/** What the comparison is entitled to conclude, given where its backend set came from. */\nexport enum ChartRegistrationAlignmentVerdict {\n /** Every frontend chartView resolves against the set that actually registers. */\n ALIGNED = 'aligned',\n /** At least one frontend chartView has no registration in the set that actually registers. */\n MISALIGNED = 'misaligned',\n /**\n * The comparison ran and its channels are populated, but the backend set was not the effective\n * one — so NEITHER a clean nor a dirty result may be reported as fact. Report the channels as\n * evidence; do not report alignment.\n */\n CANNOT_VOUCH = 'cannot-vouch',\n}\n\n/** The two-channel drift report. */\nexport interface ChartRegistrationAlignmentReport {\n /** Echoed so a consumer renders, logs or gates on the same answer the comparison used. */\n backendRefsProvenance: ChartRegistrationBackendRefsProvenance;\n /** What this comparison is entitled to conclude. See {@link ChartRegistrationAlignmentVerdict}. */\n verdict: ChartRegistrationAlignmentVerdict;\n /**\n * Frontend chartViews whose `chartDefinition.ref` has NO backend registration.\n * FAIL channel — each one is a guaranteed runtime 404.\n */\n unregisteredFrontendCharts: FrontendChartRegistrationRef[];\n /**\n * Backend-registered chart refs referenced by NO frontend chartView. WARN\n * channel — a backend-only chart is valid (e.g. a programmatic/API-only chart\n * consumed directly via `/charts/:ref/data`), so this is never a hard failure.\n */\n orphanBackendCharts: string[];\n}\n\n/**\n * Compare the set of frontend chartView refs against the set of backend-registered\n * chart refs. Both sides are normalized via {@link normalizeChartExecutionRef}\n * before comparison so whitespace never causes a phantom mismatch.\n */\nexport function computeChartRegistrationAlignment(params: {\n frontendChartRefs: FrontendChartRegistrationRef[];\n backendRegisteredRefs: string[];\n /**\n * WHERE `backendRegisteredRefs` came from. Optional so that adding it did not red-line an\n * existing caller this change could not reach — absence is read as\n * {@link ChartRegistrationBackendRefsProvenance.MODULE_DECLARATIONS}, i.e. the answer that\n * yields `CANNOT_VOUCH`, never the permissive one.\n */\n backendRefsProvenance?: ChartRegistrationBackendRefsProvenance;\n}): ChartRegistrationAlignmentReport {\n const normalizedBackend = params.backendRegisteredRefs.map(normalizeChartExecutionRef);\n const backendSet = new Set(normalizedBackend);\n const frontendSet = new Set(\n params.frontendChartRefs.map((r) => normalizeChartExecutionRef(r.chartDefinitionRef)),\n );\n\n const unregisteredFrontendCharts = params.frontendChartRefs.filter(\n (r) => !backendSet.has(normalizeChartExecutionRef(r.chartDefinitionRef)),\n );\n\n const orphanBackendCharts = [\n ...new Set(normalizedBackend.filter((ref) => !frontendSet.has(ref))),\n ];\n\n const backendRefsProvenance =\n params.backendRefsProvenance ?? ChartRegistrationBackendRefsProvenance.MODULE_DECLARATIONS;\n\n const verdict =\n backendRefsProvenance !== ChartRegistrationBackendRefsProvenance.EFFECTIVE_INITIALIZATION_CONFIG\n ? ChartRegistrationAlignmentVerdict.CANNOT_VOUCH\n : unregisteredFrontendCharts.length > 0\n ? ChartRegistrationAlignmentVerdict.MISALIGNED\n : ChartRegistrationAlignmentVerdict.ALIGNED;\n\n return { backendRefsProvenance, verdict, unregisteredFrontendCharts, orphanBackendCharts };\n}\n\n/**\n * Render the provenance caveat, or `undefined` when the report may be taken at face value.\n *\n * Exists so the two surfaces a person reads — the CLI's summary line and the thrown gate message —\n * cannot word this differently, or one of them forget it. A caveat that appears on one surface is\n * the state this whole change is repairing.\n */\nexport function describeChartRegistrationVerdictCaveat(\n report: ChartRegistrationAlignmentReport,\n): string | undefined {\n if (report.verdict !== ChartRegistrationAlignmentVerdict.CANNOT_VOUCH) return undefined;\n return (\n 'This comparison used the module DECLARATIONS '\n + `(provenance: ${report.backendRefsProvenance}), not the set the backend registers. `\n + 'An application supplying `ApplicationInitializationOverrides.chartDefinitions` REPLACES the '\n + 'declared array, so a dropped chart would read as aligned here and 404 at runtime. '\n + 'Fix: take the backend refs from '\n + '`backendCompanionExports.buildApplicationInitializationConfig().chartDefinitions` and pass '\n + `backendRefsProvenance: ${ChartRegistrationBackendRefsProvenance.EFFECTIVE_INITIALIZATION_CONFIG}.`\n );\n}\n\n/**\n * Throw a verbose, locatable error if any frontend chartView is unregistered\n * backend-side. Only the FAIL channel throws; `orphanBackendCharts` (WARN) never\n * throws. Use in the `--strict` path of the CLI audit / a CI gate.\n *\n * ## `requireVouchedVerdict` defaults to `true`, and that is the point of the parameter\n *\n * A clean FAIL channel is only evidence of alignment when the backend set was the EFFECTIVE one — a\n * chart dropped by an `ApplicationInitializationOverrides.chartDefinitions` override is registered\n * nowhere and declared everywhere, so a comparison against the DECLARATIONS reports ALIGNED about a\n * population the application does not run. So this refuses a\n * {@link ChartRegistrationAlignmentVerdict.CANNOT_VOUCH} report rather than returning quietly, and a\n * caller has to say deliberately that it does not want that.\n *\n * It shipped defaulting to `false` (2026-09-09) for one turn, because the companion's own CI-gate\n * test still composed its backend set from `mergeBackendDomainModules(...)` and defaulting to `true`\n * would have turned a green gate red with no hand able to repair it. That caller was fixed the same\n * day and the default flipped with it. The permissive default is gone deliberately: it protected one\n * known caller and would have silently absolved every future one.\n *\n * Pass `false` only where the verdict is being REPORTED rather than gated — a summary line that\n * prints {@link describeChartRegistrationVerdictCaveat} beside it is honest; a gate that returns\n * quietly is not.\n */\nexport function assertChartRegistrationAligned(\n report: ChartRegistrationAlignmentReport,\n errorPrefix = 'ChartRegistrationAlignment',\n requireVouchedVerdict = true,\n): void {\n if (requireVouchedVerdict && report.verdict === ChartRegistrationAlignmentVerdict.CANNOT_VOUCH) {\n throw new Error(\n `${errorPrefix}: refusing to report alignment. `\n + describeChartRegistrationVerdictCaveat(report),\n );\n }\n if (report.unregisteredFrontendCharts.length === 0) return;\n const lines = report.unregisteredFrontendCharts.map(\n (r) =>\n ` - ${r.resourceType}.${r.chartViewRef} → chartDefinition.ref '${r.chartDefinitionRef}' has no backend chartDefinitions registration`,\n );\n throw new Error(\n `${errorPrefix}: ${report.unregisteredFrontendCharts.length} chart view(s) reference a chart that is NOT registered backend-side (each would 404 with chart_not_found at runtime):\\n` +\n `${lines.join('\\n')}\\n` +\n `Fix: add the shared ChartDefinition to the owning backend module's \\`chartDefinitions\\` array.`,\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.shared.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"navigation.shared.schemas.d.ts","sourceRoot":"","sources":["../../../../src/config/frontend/navigation.shared.schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.shared.schemas.js","sourceRoot":"","sources":["../../../../../src/config/frontend/navigation.shared.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Navigation — Configuration Schemas\n *\n * Zone-first, operation-driven navigation configuration model.\n * Decomposes navigation into four independent axes:\n *\n * 1. **Meaning** (input signals) — contextual facts at navigation time (source zone, operation,\n * cardinality, viewport, depth). NOT configured — these are inputs to resolution.\n * 2. **Transition** (verb) — HOW content arrives: push, replace, split, overlay, inplace, promote.\n * This is the primary thing that gets configured per zone.\n * 3. **Placement** (zones) — WHERE content lives: primary, secondary, companion, overlay.\n * Zones are structural layout areas AND source context for resolution.\n * 4. **Appearance** (visual) — HOW content renders in its slot: panel, drawer, dialog, sheet.\n * Only meaningful for split and overlay transitions.\n *\n * Key design decisions:\n * - Zones own their complete behavior (no global defaults + override pattern)\n * - Operations are transition keys; cardinality drives appearance only\n * - Embedding (tabs/sections within a parent) is view composition, not navigation\n * - `contentModel` (single/tabbed) is orthogonal to transitions\n *\n * @see _code_archive/docs-archive/navigation/navigation-v3-reflection.md\n */\n\nimport { z } from 'zod';\nimport { ViewportBreakpoint, DisplayDirection } from '@wildo-ai/zod-decorators';\nimport { CoreResourceOperation } from '../../resources/resources.shared.core.definitions';\n\n\n// ════════════════════════════════════════════════════════════════\n// Enums\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Navigation transition verbs — HOW content arrives at its destination.\n *\n * These are the six fundamental navigation actions. Every user-triggered\n * navigation event resolves to exactly one of these verbs. The source zone's\n * `transitions` map determines which verb fires for each operation.\n *\n * Four zone-level transitions: `push`, `replace`, `split`, `overlay`\n * Two cross-context transitions: `inplace` (element-level), `promote` (escape to primary)\n *\n * `push` behavior depends on the zone's `contentModel`:\n * - In `single` zones: stack-based (new content on top, back pops)\n * - In `tabbed` zones: opens a new tab and makes it active (an already-open record is NOT\n * de-duplicated — it opens again)\n *\n * @wildo_source:part:start saas.models.navigation.transition-vocabulary facet:layer:shared facet:family:navigation-config\n */\nexport enum NavigationTransition {\n /**\n * Content added to the zone's stack (single) or as a new tab (tabbed).\n * Back navigation pops the stack or switches to the previous tab.\n * URL adds a new path segment.\n */\n PUSH = 'push',\n /**\n * Content replaces the current content in the zone. No stack entry — the previous\n * content is gone from the zone's state (but remains in browser history).\n * URL replaces the current segment.\n */\n REPLACE = 'replace',\n /**\n * Content opens in an adjacent zone (secondary or companion).\n * Creates a side-by-side layout. The source zone's content remains visible.\n * Back navigation un-splits (closes the adjacent zone).\n * URL: the detail's own address beside a resource primary; beside any other primary the host\n * keeps its URL and a RESOURCE detail rides as `?pane=`. There is no split segment.\n */\n SPLIT = 'split',\n /**\n * Content opens in a floating layer above the entire layout (dialog, sheet, or drawer).\n * The underlying layout remains visible; it is non-interactive while the overlay is modal (the\n * default), and stays interactive under `overlayBehavior.modal: false`.\n * Back navigation or Escape dismisses the overlay.\n * NOT URL-addressed: opening an overlay leaves the browser URL where it was, so its content cannot\n * be linked to or restored by a reload. Choose it knowing that.\n */\n OVERLAY = 'overlay',\n /**\n * Element-level transformation within the current view. A specific item in a\n * list/section transforms from one mode to another (read → edit); a CREATE\n * materializes a new element beside the existing ones. The parent view stays,\n * the zone stack is unchanged, and surrounding items remain visible.\n *\n * Fundamentally different from `replace` (which swaps the entire zone content).\n * `inplace` operates at the element level, not the zone level.\n *\n * No lifecycle modifiers (`persistent`/`ephemeral`) are valid on `inplace`.\n * No appearance to configure — the element transforms within its existing slot.\n *\n * **It is the one transition that does not place content in a zone**, which is\n * why the controller hands it to the element-level host\n * (`InPlaceOperationContext`) instead of resolving a target zone for it. That\n * host is provided by the COLLECTION the element belongs to, so a transition\n * resolving to `inplace` on a surface with no collection above it — a detail\n * page, a breadcrumb, a picker — degrades to an OVERLAY.\n *\n * **It is TRANSIENT: no URL, and a reload returns the view to rest.** Earlier\n * revisions of this comment promised a query param (`?editing=<childId>` /\n * `?creating=<resourceType>`) and none was ever written. It is not written now\n * either, and that is a decision rather than an omission: an inline row-edit is\n * a momentary state of a listing, not a place — no comparable admin framework\n * deep-links one, and anything that should survive a reload or a back button\n * wants `push`. `ResourceOperationActionPresentation.INLINE`, the per-operation\n * tier that selects the same host, is transient for the same reason.\n *\n * @example\n * // Click \"edit\" on a child in parent's inline section → item transforms to edit form\n * transitions: { [CoreResourceOperation.UPDATE]: NavigationTransition.INPLACE }\n *\n * // Click \"add\" in a relationship section → create form appears inline in the list\n * transitions: { [CoreResourceOperation.CREATE]: NavigationTransition.INPLACE }\n */\n INPLACE = 'inplace',\n /**\n * Escape the current context and open content at primary scope.\n * Abandons the current context: overlays close, companion/secondary dismiss — except a pane\n * placed by a `persistent` split, which survives a reset by design.\n * The promoted content becomes the primary zone's top content.\n *\n * Use case: a link within an overlay should open as a full primary view,\n * or a nested detail in a companion zone should \"pop out\" to primary.\n *\n * Fundamentally different from `push` (which stays in the current zone) and\n * from `replace` (which replaces content within the same zone). `promote`\n * crosses zones and always targets primary.\n *\n * No lifecycle modifiers (`persistent`/`ephemeral`) are valid on `promote`.\n * No appearance to configure — content fills primary (same as push/replace).\n *\n * URL serialization: full URL change (promoted resource becomes the primary route).\n *\n * @example\n * // From an overlay, a link should open as primary (close overlay, show in primary)\n * transitions: { [CoreResourceOperation.READ]: NavigationTransition.PROMOTE }\n */\n PROMOTE = 'promote',\n}\n/** @wildo_source:part:end saas.models.navigation.transition-vocabulary */\n\n/**\n * Named layout zones — configurable structural areas WHERE content lives.\n *\n * Zones serve four purposes:\n * 1. **Structural** — which physical areas exist in the layout (declared in config)\n * 2. **Source context** — the same operation resolves differently FROM primary vs FROM secondary\n * 3. **Responsive** — each zone carries its own collapse behavior per viewport\n * 4. **Content model** — each zone independently manages single-stack or tabbed content\n *\n * Note: `overlay` is NOT a named zone — it's an implicit layer always available.\n * Overlay is a runtime destination, not a configurable zone. See `NavigationZone`\n * in the frontend runtime types for the full set including overlay.\n *\n * @wildo_source:part:start saas.models.navigation.surface-vocabulary facet:layer:shared facet:family:navigation-config\n */\nexport enum NavigationZoneName {\n /** Main content area. Lists, root-level reads, primary workspace. Always exists. */\n PRIMARY = 'primary',\n /**\n * First adjacent zone. Detail content in list-detail patterns.\n * Only exists if declared in config. Appears when a `split` transition targets it.\n * Typical use: showing item details alongside a list.\n */\n SECONDARY = 'secondary',\n /**\n * Persistent supplementary content. Reference panels, docs, notes, threads.\n * Only exists if declared in config, and starts hidden.\n * Reached by a `split` with `persistent: true`, or by an ordinary `split` when the secondary zone\n * is already occupied.\n * Typical use: Slack thread panel, VS Code terminal, documentation sidebar.\n */\n COMPANION = 'companion',\n}\n\n/**\n * How a zone manages multiple items. Orthogonal to transitions.\n *\n * The transition says \"content arrives\" — the content model says\n * \"how does the zone accommodate it.\" Any zone can use any content model,\n * regardless of which transitions it supports.\n */\nexport enum NavigationZoneContentModel {\n /**\n * Navigation stack: new content pushes on top, previous preserved underneath.\n * Only one item visible at a time. Back navigation pops the stack.\n * `replace` replaces the top without adding to the stack.\n * This is the default for all zones.\n */\n SINGLE = 'single',\n /**\n * Parallel tabs: every navigation landing in the zone opens a new tab and makes it active (no\n * de-duplication). Tab bar is visible, showing all open tabs. No depth stack within tabs.\n * `replace` replaces the active tab's content, and back closes the active tab and shows its\n * neighbour. The model changes RENDERING only — it does not change how navigation resolves.\n * When no tabs remain, `onEmpty` behavior applies.\n */\n TABBED = 'tabbed',\n}\n\n/**\n * Responsive collapse behavior when viewport shrinks below a zone's breakpoint.\n *\n * Only applies to secondary and companion zones. Primary never collapses.\n * It applies to content ALREADY in the zone, not only to new navigations: when the zone collapses its\n * whole history moves (a tabbed zone's tabs too, the one on screen on top), and when the viewport\n * grows back what is still on top of primary migrates home with every field intact. Whatever the\n * reader navigated past at the narrow width stays where it is.\n */\nexport enum ResponsiveCollapseMode {\n /**\n * Zone hides. Its content joins primary's navigation stack.\n * The user sees the content in-context within primary.\n * Back navigation pops back to primary's previous content.\n */\n PUSH = 'push',\n /**\n * Zone hides. Its content opens as an overlay on top of primary.\n * The user sees the content as a floating sheet/dialog.\n * Dismiss returns to the underlying primary content.\n */\n OVERLAY = 'overlay',\n}\n/** @wildo_source:part:end saas.models.navigation.surface-vocabulary */\n\n/**\n * @wildo_source:part:start saas.models.navigation.zone-declaration facet:layer:shared facet:family:navigation-config\n *\n * What happens when a zone's last content is dismissed.\n * Only meaningful for secondary and companion zones (primary never empties,\n * overlay auto-dismisses by definition).\n */\nexport enum ZoneEmptyBehavior {\n /**\n * Zone hides, adjacent zones expand to fill the space.\n * Example: closing the last detail → layout returns to list-only.\n * This is the default for all non-primary zones.\n */\n COLLAPSE = 'collapse',\n /**\n * Zone stays visible with an empty-state placeholder.\n * Example: \"Select an item to view details\" message. Keeps layout stable.\n * Useful when the user frequently toggles between items.\n */\n EMPTY_STATE = 'emptyState',\n}\n/** @wildo_source:part:end saas.models.navigation.zone-declaration */\n\n/**\n * @wildo_source:part:start saas.models.navigation.surface-vocabulary facet:layer:shared facet:family:navigation-config\n *\n * Visual presentation for overlay transitions.\n * Determines how floating content renders above the layout.\n */\nexport enum OverlayAppearance {\n /**\n * Centered modal dialog with backdrop.\n * Best for focused tasks: create forms, confirmations, destructive actions.\n * Blocks underlying content visually. Escape or backdrop click dismisses.\n */\n DIALOG = 'dialog',\n /**\n * Side or bottom drawer panel that slides in from an edge.\n * Best for contextual content that benefits from seeing the underlying layout.\n * Less disruptive than dialog. Common for detail views on mobile.\n */\n SHEET = 'sheet',\n /**\n * Vaul-backed mobile drawer.\n * Use when the navigation resolver should choose a drawer directly rather\n * than relying on a dialog appearance plus mobileShape policy.\n */\n DRAWER = 'drawer',\n}\n\n/*\n * ─── `SplitAppearance` was REMOVED on 2026-09-25, and the reason is worth keeping ───────────────\n *\n * It declared `PANEL` (\"vertical side panel\") and `DRAWER` (\"horizontal drawer, bottom panel\"), and\n * the whole sub-tree was WRITE-ONLY: the resolver computed it, the controller stored it on the stack\n * entry, and the ONLY site reading `entry.appearance` cast it to `OverlayAppearance` for the overlay\n * container. No split renderer branched on it. So `DRAWER` could never render — an author who wrote\n * it got a vertical side panel with no diagnostic — and `PANEL` was a value meaning \"the default\".\n *\n * It was also a SECOND vocabulary for an axis `SplitConfig.orientation` already owns:\n * `orientation: HORIZONTAL` is \"top-bottom\", which is what `DRAWER` described. The two were\n * independently authorable in contradiction, with no refine and nothing honouring either against the\n * other.\n *\n * Collapsed to ONE source — `SplitConfig.orientation`, which the renderer genuinely reads — per\n * \"measure what the runtime actually reads, then collapse to one source of truth\". `orientation` was\n * additionally made live on the STATIC render branch in the same change; it had been read only by\n * the resizable branch, so `HORIZONTAL` + `resizable: false` silently produced a side panel.\n *\n * `entry.appearance` is now `OverlayAppearance` alone, which removes the unchecked downcast at its\n * one reader. The removal follows the precedent already set here for `defaultVisible`, `autoSplit`\n * and `CompanionSplitConfig.orientation`: a declared-but-unread field is deleted, not deprecated.\n */\n/** @wildo_source:part:end saas.models.navigation.surface-vocabulary */\n\n// ════════════════════════════════════════════════════════════════\n// ViewportDiscriminated — Generic responsive override pattern\n// ════════════════════════════════════════════════════════════════\n\n/**\n * A value that is either a plain `T` (applies at all viewports) or a\n * viewport-keyed partial record for per-breakpoint control.\n *\n * This pattern is used throughout the navigation config for responsive properties:\n * `responsiveCollapse`, `appearance`, `contentSectionConfig`, `transition`.\n *\n * @example\n * // Plain value — same everywhere\n * responsiveCollapse: ResponsiveCollapseMode.PUSH\n *\n * // Viewport-discriminated — different per breakpoint\n * responsiveCollapse: { [ViewportBreakpoint.VERT_TABLET]: ResponsiveCollapseMode.PUSH, [ViewportBreakpoint.MOBILE]: ResponsiveCollapseMode.OVERLAY }\n *\n * // Overlay appearance — sheet on tablet, drawer on mobile\n * overlay: { [ViewportBreakpoint.VERT_TABLET]: OverlayAppearance.SHEET, [ViewportBreakpoint.MOBILE]: OverlayAppearance.DRAWER }\n */\nexport type ViewportDiscriminated<T> = T | Partial<Record<ViewportBreakpoint, T>>;\n\n/**\n * Zod schema factory for `ViewportDiscriminated<T>`.\n *\n * Produces a union: the plain inner schema OR a record keyed by `ViewportBreakpoint`\n * with inner schema values. The record must have at least one key.\n *\n * @param innerSchema - Zod schema for the value type at each breakpoint.\n */\nexport function viewportDiscriminatedSchema<T extends z.ZodType>(innerSchema: T) {\n return z.union([\n innerSchema,\n z.partialRecord(z.enum(ViewportBreakpoint), innerSchema).refine(\n (obj) => Object.keys(obj).length > 0,\n { message: 'Viewport-discriminated object must have at least one breakpoint key' },\n ),\n ]);\n}\n\n\n// ════════════════════════════════════════════════════════════════\n// Transition Config\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Extended transition with lifecycle modifiers.\n *\n * Most transitions are simple verbs (just the enum value). The object form\n * adds lifecycle semantics for two specific patterns:\n *\n * - **Companion pattern**: `{ transition: NavigationTransition.SPLIT, persistent: true }`\n * The split zone persists when the source zone's content changes.\n * Without `persistent`, a split zone would clear when primary navigates away.\n *\n * - **Inspect pattern**: `{ transition: NavigationTransition.OVERLAY, ephemeral: true }`\n * The overlay auto-closes when the source zone's stack changes.\n * Without `ephemeral`, overlays stay open until explicitly dismissed.\n *\n * Semantic constraints (enforced by `.refine()`):\n * - `persistent` is only valid on `split` transitions\n * - `ephemeral` is only valid on `overlay` transitions\n * - `persistent` and `ephemeral` are mutually exclusive\n * - `inplace` and `promote` do not accept any modifier (they are always simple verbs)\n */\nexport const TransitionObjectSchema = z.object({\n /** The transition verb. */\n transition: z.enum(NavigationTransition),\n /**\n * When `true`, the split zone persists when the source zone navigates away.\n * Only valid on `split` transitions. Targets the companion zone specifically\n * (rather than the default adjacent zone resolution).\n *\n * Example: Slack thread panel stays open when switching channels.\n */\n persistent: z.boolean().optional(),\n /**\n * When `true`, the overlay auto-closes when the source zone's stack changes.\n * Only valid on `overlay` transitions.\n *\n * Example: Quick-inspect preview that dismisses when the user clicks another item.\n */\n ephemeral: z.boolean().optional(),\n}).refine(\n (obj) => {\n if (obj.persistent && obj.transition !== NavigationTransition.SPLIT) return false;\n if (obj.ephemeral && obj.transition !== NavigationTransition.OVERLAY) return false;\n if (obj.persistent && obj.ephemeral) return false;\n return true;\n },\n { message: 'persistent is only valid on split; ephemeral is only valid on overlay; they are mutually exclusive' },\n);\nexport type TransitionObject = z.infer<typeof TransitionObjectSchema>;\n\n/**\n * A transition configuration: either a simple verb string or an object with modifiers.\n *\n * @example\n * // Simple verb\n * transitions: { read: NavigationTransition.SPLIT, create: NavigationTransition.OVERLAY }\n *\n * // Object with lifecycle modifier\n * transitions: { read: { transition: NavigationTransition.SPLIT, persistent: true } }\n */\nexport const TransitionConfigSchema = z.union([\n z.enum(NavigationTransition),\n TransitionObjectSchema,\n]);\nexport type TransitionConfig = z.infer<typeof TransitionConfigSchema>;\n\n\n// ════════════════════════════════════════════════════════════════\n// Zone Configuration\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Operation → transition mapping for a zone.\n *\n * Partial record — only operations that the zone handles need entries.\n * Missing operations fall back to the framework's hardcoded defaults.\n *\n * Keys are `CoreResourceOperation` values such as `read`, `list`, `create`,\n * `update`, `delete`, and `search`.\n *\n * @example\n * transitions: {\n * read: NavigationTransition.SPLIT, // click item → split to secondary\n * list: NavigationTransition.REPLACE, // \"View all\" → replace primary\n * create: NavigationTransition.OVERLAY, // new item → dialog\n * update: NavigationTransition.INPLACE, // edit → transform element inline\n * delete: NavigationTransition.OVERLAY, // confirm → dialog\n * search: NavigationTransition.PUSH, // advanced search → full-surface route\n * }\n *\n * // From an overlay, promote a link to primary view\n * transitions: {\n * read: NavigationTransition.PROMOTE, // link in overlay → escape to primary\n * }\n */\n/** Partial record — only operations that the zone handles need entries. Missing operations fall back to framework defaults. */\nexport const ZoneTransitionsSchema = z.partialRecord(\n z.enum(CoreResourceOperation),\n TransitionConfigSchema,\n) as unknown as z.ZodType<Partial<Record<CoreResourceOperation, TransitionConfig>>>;\nexport type ZoneTransitions = Partial<Record<CoreResourceOperation, TransitionConfig>>;\n\n/**\n * Transition → visual appearance for a zone. Values are viewport-discriminated.\n *\n * Only the `overlay` transition has an appearance choice. The others have none to configure:\n * - `push`/`replace` fill the zone\n * - `split` opens a pane whose shape is `split.orientation` (there is no split appearance)\n * - `inplace` transforms an element within the current view\n * - `promote` fills primary (same as push/replace)\n *\n * @example\n * appearance: {\n * overlay: { [ViewportBreakpoint.VERT_TABLET]: OverlayAppearance.SHEET, [ViewportBreakpoint.MOBILE]: OverlayAppearance.DRAWER }, // sheet on tablet, drawer on mobile\n * }\n */\nexport const ZoneAppearanceSchema = z.object({\n /**\n * How overlay content renders. Default: `OverlayAppearance.DIALOG` (centered modal).\n *\n * There is deliberately no `split` sibling: how a PANE renders is `SplitConfig.orientation` plus\n * the zone's width bounds, which the renderer reads. See the note where `SplitAppearance` used to\n * be declared.\n */\n overlay: viewportDiscriminatedSchema(z.enum(OverlayAppearance)).optional(),\n});\nexport type ZoneAppearance = z.infer<typeof ZoneAppearanceSchema>;\n\n/**\n * @wildo_source:part:start saas.models.navigation.zone-declaration facet:layer:shared facet:family:navigation-config\n *\n * How much of its zone a destination's content occupies is NOT declared here: it is the\n * destination's `ZoneContentGeometry` (a `maxWidth` and a `fillsHeight`), because the same primary\n * zone hosts a list that wants the width cap, a detail that caps itself, and a graph that wants\n * neither. A zone's own declaration follows.\n */\n\n/**\n * Full zone configuration.\n *\n * Each declared zone in the layout owns its complete behavior:\n * which transition fires for each operation, how content appears,\n * and how the zone responds to viewport changes.\n *\n * Note: `minWidth`, `maxWidth`, `onEmpty` and `responsiveCollapse` are only meaningful for\n * secondary and companion zones. Primary never collapses, never empties, and takes remaining space.\n * Setting these on primary has no effect.\n *\n * ## Every field here is READ by the runtime, and that was checked rather than assumed (#211)\n *\n * | field | the reader |\n * |---|---|\n * | `contentModel` | `NavigationContentAreas.tsx` (TABBED detection) + `zone-visible-entry.ts` |\n * | `transitions` | `navigation-policy-resolver.service.ts` |\n * | `appearance` | the policy resolver (`appearance.overlay` — there is no split appearance) |\n * | `minWidth` / `maxWidth` | `NavigationContentAreas.tsx` drag constraints, both split branches |\n * | `onEmpty` | `zone-empty-behavior.ts` |\n * | `responsiveCollapse` | `navigation-policy-resolver.service.ts` |\n *\n * `defaultVisible` was REMOVED by that audit: nothing read it, and its only documented meaning was\n * \"defaults to `true` when `split.autoSplit` is `true`\" — a field defined in terms of another field\n * that was also dead. What it was reaching for is `onEmpty`, which every current layout already uses\n * (`zoneOccupiesSpaceWhenEmpty`) and which the runtime genuinely reads.\n */\nexport const ZoneConfigSchema = z.object({\n /**\n * How this zone manages multiple items.\n * - `NavigationZoneContentModel.SINGLE` (default): stack-based navigation. One item visible, back pops.\n * - `NavigationZoneContentModel.TABBED`: parallel tabs. Tab bar visible, multiple items accessible.\n * @default NavigationZoneContentModel.SINGLE\n */\n contentModel: z.enum(NavigationZoneContentModel).default(NavigationZoneContentModel.SINGLE),\n\n /** Operation → transition mapping. Defines what happens for each user action in this zone. */\n transitions: ZoneTransitionsSchema,\n\n /** Which shape an OVERLAY opened from this zone takes. Only overlays have an appearance: a pane's shape is `split.orientation`. */\n appearance: ZoneAppearanceSchema.optional(),\n\n /**\n * Minimum pixel width when resizing. Constrains how far this side of the\n * split divider can be dragged. Only meaningful for secondary and companion zones, and only when\n * that zone is resizable — `SplitConfigSchema.resizable` for secondary, `split.companion.resizable`\n * for companion (independent flags).\n *\n * The pixel value is converted to a share of the content area and clamped to 5–70%. When OMITTED on\n * a resizable zone the floor is 25% of the content area — or the zone's own ratio share, if that is\n * smaller — never zero. A pane is never collapsed by dragging it: closing a pane is navigation.\n *\n * A declared `maxWidth` narrower than this floor lowers the floor to it. When the shown side panes ask\n * for more than primary's 25% leaves, they shrink in proportion and none opens below its floor (a\n * non-resizable pane's floor is 25%, or its own ratio share if smaller); primary opens at exactly 25%.\n * The floors are pixels, so at a narrow window they may not fit together at all — they then give way\n * to each other in proportion, and the smaller floor a pane opens at is its drag floor. Primary never\n * gives way.\n *\n * ## It is ALSO a COLLAPSE TRIGGER, on every zone — not only a drag bound\n *\n * The paragraph above restricts this to resizing, and that stopped being the whole truth when the\n * content-area fit escalation landed: `resolveCollapseMode` feeds `minWidth` to\n * `contentAreaFitsSplit`, for resizable and non-resizable zones alike. A zone declaring\n * `minWidth: W` needs `W / 0.75` of content width beside primary's 25% floor, and below that the\n * split escalates rather than squeezing both panes under their floors.\n *\n * So a NON-resizable pane with `minWidth: 600` stops splitting on a 1000px content area at full\n * desktop width — correct behaviour, and the opposite of what this field's own contract said until\n * 2026-09-25. Declare it when you mean \"this pane is not worth opening narrower than W\", and omit\n * it when you only want a drag floor on a layout that is not resizable anyway.\n */\n minWidth: z.number().positive().optional(),\n\n /**\n * Maximum pixel width when resizing. Constrains how far this side of the\n * split divider can be dragged. Only meaningful for secondary and companion zones, and only when\n * that zone is resizable — `SplitConfigSchema.resizable` for secondary, `split.companion.resizable`\n * for companion (independent flags).\n *\n * The pixel value is converted to a share of the content area and clamped to 5–70%. When OMITTED on\n * a resizable zone the ceiling is whatever leaves the primary zone 25% of the content area.\n */\n maxWidth: z.number().positive().optional(),\n\n /**\n * What happens when this zone's last content is dismissed (stack empty, last tab closed).\n * - `ZoneEmptyBehavior.COLLAPSE` (default): zone hides, adjacent zones expand to fill.\n * - `ZoneEmptyBehavior.EMPTY_STATE`: zone stays visible with placeholder (\"Select an item to view details\").\n * Only meaningful for secondary and companion zones. Primary never empties.\n */\n onEmpty: z.enum(ZoneEmptyBehavior).optional(),\n\n /**\n * Responsive collapse rules: what happens when viewport shrinks below the zone's breakpoint.\n * Accepts a plain `ResponsiveCollapseMode` (all breakpoints) or viewport-discriminated object.\n * Only meaningful for secondary and companion zones. Primary never collapses.\n *\n * It moves content already in the zone as well as new navigations: the zone's whole history\n * moves when it collapses, and what is still on top of primary goes home when it returns — see\n * `ResponsiveCollapseMode`.\n *\n * @example\n * responsiveCollapse: ResponsiveCollapseMode.PUSH // always push into primary\n * responsiveCollapse: { [ViewportBreakpoint.VERT_TABLET]: ResponsiveCollapseMode.PUSH, [ViewportBreakpoint.MOBILE]: ResponsiveCollapseMode.OVERLAY } // tablet: push, mobile: overlay\n */\n responsiveCollapse: viewportDiscriminatedSchema(z.enum(ResponsiveCollapseMode)).optional(),\n});\nexport type ZoneConfig = z.infer<typeof ZoneConfigSchema>;\n/** @wildo_source:part:end saas.models.navigation.zone-declaration */\n\n\n// ════════════════════════════════════════════════════════════════\n// App-Level & From-Overlay Configuration\n// ════════════════════════════════════════════════════════════════\n\n/**\n * App-level navigation configuration: from OUTSIDE the zone system.\n *\n * Covers navigation triggered by sidebar clicks, command palette selections,\n * hotkey shortcuts, toast actions, and notification clicks.\n *\n * App-level navigation causes a **layout reset**: primary content is replaced,\n * secondary and companion zones are cleared. This is fundamentally different\n * from zone-level navigation where the source zone's content persists.\n *\n * @example\n * appLevel: {\n * transitions: {\n * list: NavigationTransition.REPLACE, // sidebar \"Projects\" → replace primary, clear others\n * read: NavigationTransition.REPLACE, // command palette \"Go to X\" → replace primary\n * create: NavigationTransition.OVERLAY, // quick action \"New X\" → dialog\n * search: NavigationTransition.REPLACE, // command/menu search surface → replace primary\n * },\n * appearance: { overlay: OverlayAppearance.DIALOG },\n * }\n */\nexport const AppLevelConfigSchema = z.object({\n /** Operation → transition mapping for app-level navigation. */\n transitions: ZoneTransitionsSchema,\n /** Appearance overrides for app-level transitions. */\n appearance: ZoneAppearanceSchema.optional(),\n});\nexport type AppLevelConfig = z.infer<typeof AppLevelConfigSchema>;\n\n/**\n * Navigation from within an overlay (dialog, sheet, or drawer).\n *\n * When already in an overlay, transitions behave differently to avoid\n * nesting overlays. Typically all operations `push` within the overlay's\n * own stack instead of opening new overlays.\n *\n * No appearance config — the content is already inside an overlay.\n *\n * @example\n * fromOverlay: {\n * transitions: {\n * read: NavigationTransition.PUSH, // push within overlay — don't nest modals\n * list: NavigationTransition.PUSH,\n * create: NavigationTransition.PUSH,\n * search: NavigationTransition.PUSH,\n * },\n * }\n */\nexport const FromOverlayConfigSchema = z.object({\n /** Operation → transition mapping when navigating from within an overlay. */\n transitions: ZoneTransitionsSchema,\n});\nexport type FromOverlayConfig = z.infer<typeof FromOverlayConfigSchema>;\n\n\n// ════════════════════════════════════════════════════════════════\n// Split Geometry\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Companion-specific split geometry.\n * Controls how the companion zone is sized and positioned relative to the main content area.\n */\nexport const CompanionSplitConfigSchema = z.object({\n /**\n * Main-area-to-companion size ratio.\n * @example [70, 30] — companion takes 30% of available space\n * @default [70, 30]\n */\n ratio: z.tuple([z.number(), z.number()]).default([70, 30]),\n /**\n * Whether the companion split boundary is user-draggable.\n * When `true`, a draggable divider appears between the main area and the companion zone.\n * Per-side drag constraints use `ZoneConfig.minWidth`/`maxWidth` on the companion zone.\n * @default false\n */\n resizable: z.boolean().default(false),\n});/*\n * `orientation` was REMOVED here by the #211 audit, and it is the one removal that took a\n * capability with it. It claimed the companion could sit BELOW the main area (\"bottom panel, e.g.\n * VS Code terminal\") and nothing read it: all three zones share ONE `ResizablePanelGroup` whose\n * `direction` comes from `split.orientation`, so an author writing HORIZONTAL here got a side panel\n * and no diagnostic. Honouring it needs a NESTED panel group, with its own sizes, autoSaveId, drag\n * constraints and responsive-collapse behaviour — a feature, not a field fix. Left as a declared\n * lie it was worse than absent: it ships to application builders in the compiled\n * `config-navigation` skill and answers with silence. Build the nested group first; the field comes\n * back when something reads it.\n */\n\nexport type CompanionSplitConfig = z.infer<typeof CompanionSplitConfigSchema>;\n\n/**\n * Top-level split geometry — describes the physical relationship between zones.\n *\n * This is a top-level config (not per-zone) because it describes the INTER-zone\n * layout: how much space each zone gets, and the split direction.\n *\n * @example\n * split: {\n * ratio: [40, 60], // 40% primary, 60% secondary\n * orientation: DisplayDirection.VERTICAL, // side-by-side\n * resizable: true, // divider is draggable\n * companion: {\n * ratio: [70, 30], // companion takes 30%\n * resizable: true, // its own divider is draggable\n * },\n * }\n */\nexport const SplitConfigSchema = z.object({\n /**\n * Primary-to-secondary width/height ratio. Defines the initial proportion.\n * When `resizable` is `true`, user drag overrides this (persisted to localStorage).\n * @example [40, 60] — primary gets 40%, secondary gets 60%\n * @default [50, 50]\n */\n /*\n * ONLY `ratio[1]` is read. Primary takes what the side panes leave — `100 − Σ(side defaults)` in\n * the static branch, the resizable branch's own clamping otherwise — so the first element has no\n * reader anywhere, and with BOTH a secondary and a companion shown it is not even well defined.\n *\n * Kept as a 2-tuple rather than narrowed to one number, deliberately: `[50, 50]` reads as a\n * proportion, which is what an author is thinking about, and changing the shape would break every\n * authored layout for a field whose value is already ignored. What changed on 2026-09-25 is that\n * it says so — `ratio: [40, 30]` silently rendered a 30% pane and a 70% primary, with the authored\n * 40 discarded and no diagnostic.\n */\n ratio: z.tuple([z.number(), z.number()]).default([50, 50]),\n /**\n * Split direction between primary and secondary — **the ONE axis vocabulary**.\n *\n * - `DisplayDirection.VERTICAL` (default): side-by-side (most common for list-detail)\n * - `DisplayDirection.HORIZONTAL`: top-bottom — the shape `SplitAppearance.DRAWER` used to\n * describe before that duplicate vocabulary was removed (2026-09-25).\n *\n * Read by BOTH render branches since the same change. It was read only by the resizable branch\n * before, so `HORIZONTAL` on a non-resizable layout silently produced a side panel.\n *\n * Note this names the DIVIDER's orientation, not the stacking axis — `VERTICAL` divider, content\n * side by side. `splitDividerOrientationToPanelGroupDirection` is the one place that inverts it.\n *\n * @default DisplayDirection.VERTICAL\n */\n orientation: z.enum(DisplayDirection).default(DisplayDirection.VERTICAL),\n /**\n * Whether the primary↔secondary split boundary is user-draggable.\n * When `true`, a draggable divider appears between primary and secondary zones.\n * Per-side drag constraints use `ZoneConfig.minWidth`/`maxWidth` on each zone.\n * @default false\n */\n resizable: z.boolean().default(false),\n /** Companion zone split geometry. Only relevant if companion zone is declared. */\n companion: CompanionSplitConfigSchema.optional(),\n});\n/*\n * Every field above is READ by the runtime, checked rather than assumed (#211):\n * `ratio` and `resizable` by `NavigationContentAreas.tsx` (both the panel sizes and the\n * is-anything-draggable decision), `orientation` by `splitDividerOrientationToPanelGroupDirection`,\n * `companion` by the companion panel branch.\n *\n * `autoSplit` was REMOVED by that audit. It was declared, defaulted, documented, shipped to\n * application builders in the compiled `config-navigation` skill, authored by three preset layouts\n * and two applications — and read by nothing, so every one of those authors got `false`'s behaviour\n * whatever they wrote. Removing rather than implementing was the deliberate answer: what it\n * described is auto-SELECTING a record the user did not choose and stamping its URL, which is a\n * product decision nobody has taken, and the case people actually hit — a detail URL restoring\n * beside its list — was covered by the deep-link restoration in `528d132a` without it.\n */\nexport type SplitConfig = z.infer<typeof SplitConfigSchema>;\n\n\n// ════════════════════════════════════════════════════════════════\n// Viewport Override Block\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Global viewport override — applies across ALL zones at a given breakpoint.\n *\n * Use for sweeping mobile/tablet overrides that affect the entire app.\n * For per-zone responsive behavior, use `ZoneConfig.responsiveCollapse` and\n * viewport-discriminated appearance values instead.\n *\n * @example\n * // In NavigationLayout:\n * [ViewportBreakpoint.MOBILE]: {\n * transitions: {\n * read: NavigationTransition.PUSH, // mobile: no splits, everything pushes\n * create: { transition: NavigationTransition.OVERLAY, ephemeral: true }, // mobile: create opens as an inspect-style ephemeral overlay\n * },\n * }\n */\nexport const ViewportOverrideSchema = z.object({\n /** Operation → transition overrides at this viewport. Merged over zone defaults. */\n transitions: (z.partialRecord(\n z.enum(CoreResourceOperation),\n TransitionConfigSchema,\n ) as unknown as z.ZodType<Partial<Record<CoreResourceOperation, TransitionConfig>>>).optional(),\n});\nexport type ViewportOverride = z.infer<typeof ViewportOverrideSchema>;\n\n\n// ════════════════════════════════════════════════════════════════\n// NavigationLayout — Top-Level App Configuration\n// ════════════════════════════════════════════════════════════════\n\n/**\n * @wildo_source:part:start saas.models.navigation.layout facet:layer:shared facet:family:navigation-config\n *\n * The complete navigation layout configuration for an application.\n *\n * This is the single configuration object that defines the entire navigation\n * behavior. It specifies which zones exist, how each zone handles operations,\n * how zones are sized relative to each other, and global overrides.\n *\n * Resolution order (from highest to lowest priority; the first tier that answers wins):\n * 1. Per-operation frontend override (`operation.operationFrontendConfig.navigationOverrides`)\n * 2. Authored action presentation (an operation's explicit presentation)\n * 3. Per-relationship override (`display.inParentNavigation.transition`)\n * 4. Global viewport override (`ViewportBreakpoint.MOBILE` / `ViewportBreakpoint.VERT_TABLET` blocks)\n * 5. Source context `transitions[operation]` — an overlay source with no `fromOverlay` entry falls\n * back to primary's map\n * 6. Derived action presentation (inferred by the framework, used only after authored policy)\n * 7. Framework hardcoded fallback\n *\n * @example\n * const layout: NavigationLayout = {\n * zones: {\n * primary: { transitions: { read: NavigationTransition.SPLIT, create: NavigationTransition.OVERLAY, update: NavigationTransition.INPLACE } },\n * secondary: { transitions: { read: NavigationTransition.PUSH }, onEmpty: ZoneEmptyBehavior.COLLAPSE },\n * },\n * appLevel: { transitions: { list: NavigationTransition.REPLACE, create: NavigationTransition.OVERLAY } },\n * fromOverlay: { transitions: { read: NavigationTransition.PROMOTE } },\n * split: { ratio: [40, 60] },\n * maxDepth: 2,\n * };\n */\n/**\n * WHICH LAYER OWNS THE BACK AFFORDANCE.\n *\n * Two layers can render a back control for the same navigation stack: the app\n * SHELL (the menubar's hosted navigation control) and the current SURFACE (a\n * resource/view header, beside the icon + title + breadcrumb). Both mount the\n * same component, so without an explicit owner an app that hosts the shell\n * control gets TWO back arrows on every pushed page — one floating in the bar\n * with no context, one attached to the thing it goes back from.\n *\n * This is deliberately a POLICY rather than a per-surface flag: \"who owns this\n * chrome\" is one application-wide decision, and expressing it as an owner makes\n * the duplication unrepresentable instead of asking every surface to remember\n * to suppress itself.\n */\nexport enum NavigationBackAffordanceOwner {\n /**\n * The current surface's own header owns it — the back control sits beside the\n * surface's icon/title/breadcrumb, so it reads as \"back from THIS\". The shell\n * control renders nothing even when hosted. Default: it keeps the affordance\n * attached to its context, and matches the shell staying free of a lone,\n * context-free arrow.\n */\n SURFACE = 'surface',\n /**\n * The app shell's navigation control owns it — one fixed back control in the\n * menubar (the Notion-style top-left placement). Surface headers render none.\n * Requires the shell to actually host `NAVIGATION_CONTROL`; if it does not,\n * the application has no back affordance at all.\n */\n SHELL = 'shell',\n /**\n * BOTH layers render one. An explicit opt-in for layouts where the two\n * genuinely differ — e.g. a multi-zone shell whose bar control pops the\n * focused zone while each zone's header pops its own stack. Chosen\n * deliberately; never a default.\n */\n BOTH = 'both',\n}\n\n/** Default owner when a layout declares none — see {@link NavigationBackAffordanceOwner.SURFACE}. */\nexport const DEFAULT_NAVIGATION_BACK_AFFORDANCE_OWNER: NavigationBackAffordanceOwner = NavigationBackAffordanceOwner.SURFACE;\n\n/**\n * Does `owner` grant the SHELL (menubar navigation control) a back affordance?\n * Shared by both render sites so the two can never disagree about one policy.\n */\nexport function navigationBackAffordanceAdmitsShell(owner: NavigationBackAffordanceOwner | undefined): boolean {\n const resolved = owner ?? DEFAULT_NAVIGATION_BACK_AFFORDANCE_OWNER;\n return resolved === NavigationBackAffordanceOwner.SHELL || resolved === NavigationBackAffordanceOwner.BOTH;\n}\n\n/** Does `owner` grant the current SURFACE's header a back affordance? */\nexport function navigationBackAffordanceAdmitsSurface(owner: NavigationBackAffordanceOwner | undefined): boolean {\n const resolved = owner ?? DEFAULT_NAVIGATION_BACK_AFFORDANCE_OWNER;\n return resolved === NavigationBackAffordanceOwner.SURFACE || resolved === NavigationBackAffordanceOwner.BOTH;\n}\n\nexport const NavigationLayoutSchema = z.object({\n /**\n * Zone declarations. Primary is required, secondary and companion are optional.\n * Undeclared zones cannot be targeted by transitions — `NavigationTransition.SPLIT` in a layout\n * without secondary will escalate to overlay.\n */\n zones: z.object({\n /** Primary zone — always exists. Main content area (lists, root reads). */\n primary: ZoneConfigSchema,\n /** Secondary zone — optional. First adjacent zone for detail content. */\n secondary: ZoneConfigSchema.optional(),\n /** Companion zone — optional. Persistent supplementary content. */\n companion: ZoneConfigSchema.optional(),\n }),\n /**\n * How navigation from the app shell (sidebar, command palette, hotkey) behaves.\n * Causes a layout reset when targeting primary.\n */\n appLevel: AppLevelConfigSchema.optional(),\n /**\n * How navigation that STARTS in an overlay resolves. `PUSH` or `REPLACE` from an overlay leaves it\n * and lands in PRIMARY (the page changes); `OVERLAY` stacks a second overlay on the first. A\n * missing entry falls back to primary's own map. Nothing here keeps a link inside the dialog.\n */\n fromOverlay: FromOverlayConfigSchema.optional(),\n /** Split geometry: ratios, orientation, resizability. */\n split: SplitConfigSchema.optional(),\n /**\n * Maximum push depth before the framework escalates to overlay.\n * When a zone's stack depth reaches `maxDepth`, the next `push` opens an overlay instead.\n * Prevents infinitely deep navigation stacks. Per-relationship `maxDepth` can override.\n */\n maxDepth: z.number().int().positive().optional(),\n\n /**\n * Which layer renders the back control — see {@link NavigationBackAffordanceOwner}.\n * Omitted means {@link DEFAULT_NAVIGATION_BACK_AFFORDANCE_OWNER} (the surface's\n * own header), which is what keeps a shell that hosts `NAVIGATION_CONTROL`\n * from rendering a second, context-free back arrow beside every page's own.\n */\n backAffordanceOwner: z.enum(NavigationBackAffordanceOwner).optional(),\n\n /**\n * Mobile viewport override — applies across all zones when viewport is `<md` (< 768px).\n * Use for sweeping mobile behavior changes (e.g., all splits become pushes).\n */\n [ViewportBreakpoint.MOBILE]: ViewportOverrideSchema.optional(),\n /**\n * Tablet viewport override — applies across all zones when viewport is `<lg` (768–1023px).\n * Use for tablet-specific behavior changes.\n */\n [ViewportBreakpoint.VERT_TABLET]: ViewportOverrideSchema.optional(),\n});\nexport type NavigationLayout = z.infer<typeof NavigationLayoutSchema>;\n/** @wildo_source:part:end saas.models.navigation.layout */\n\n\n// ════════════════════════════════════════════════════════════════\n// Transition Config Helpers\n// ════════════════════════════════════════════════════════════════\n\n/**\n * The transition verb of a {@link TransitionConfig}, which is either the verb itself or an object\n * carrying it alongside its modifiers.\n *\n * Exported from here rather than from the frontend resolver — where all three of these lived until\n * 2026-09-25 — because they are pure functions of an AUTHORING type this file owns, and the layout\n * diagnostics below need them too. A second copy beside the diagnostics would have been a second\n * answer to \"what verb did the author write\".\n */\nexport function getTransitionVerb(config: TransitionConfig): NavigationTransition {\n if (typeof config === 'string') return config;\n return (config as TransitionObject).transition;\n}\n\n/** Whether a {@link TransitionConfig} carries the `ephemeral` modifier. */\nexport function isEphemeralTransition(config: TransitionConfig): boolean {\n if (typeof config === 'string') return false;\n return (config as TransitionObject).ephemeral === true;\n}\n\n/** Whether a {@link TransitionConfig} carries the `persistent` modifier — a split that targets companion. */\nexport function isPersistentTransition(config: TransitionConfig): boolean {\n if (typeof config === 'string') return false;\n return (config as TransitionObject).persistent === true;\n}\n\n\n// ════════════════════════════════════════════════════════════════\n// Navigation Layout Diagnostics\n// ════════════════════════════════════════════════════════════════\n\n/**\n * What a {@link NavigationLayoutDiagnostic} says about the layout.\n *\n * `ERROR` means the runtime will do something the author did not ask for — a declared split that\n * silently becomes a dialog. `WARNING` means a declaration is INERT: nothing goes wrong, and the\n * author believes they configured something they did not.\n *\n * Neither is fatal. See {@link collectNavigationLayoutDiagnostics} for why.\n */\nexport enum NavigationLayoutDiagnosticSeverity {\n ERROR = 'error',\n WARNING = 'warning',\n}\n\n/** The closed set of layout defects {@link collectNavigationLayoutDiagnostics} can recognise. */\nexport enum NavigationLayoutDiagnosticCode {\n /**\n * A `SPLIT` is declared somewhere in the layout and NO adjacent zone is declared, so every one of\n * those splits silently becomes an overlay.\n *\n * The single most surprising thing in the navigation runtime, and it was documented in\n * `NavigationLayoutSchema`'s own JSDoc — *\"`NavigationTransition.SPLIT` in a layout without\n * secondary will escalate to overlay\"* — while nothing checked it. An author gets a dialog where\n * they asked for a pane, with no diagnostic anywhere.\n */\n SPLIT_WITHOUT_ADJACENT_ZONE = 'split-without-adjacent-zone',\n /**\n * A `persistent` split is declared and no `companion` zone exists. A persistent split targets\n * companion SPECIFICALLY — it does not fall back to secondary — so it escalates to an overlay even\n * in a layout that declares a perfectly good `secondary`.\n *\n * Separate from {@link SPLIT_WITHOUT_ADJACENT_ZONE} because the remedy is different and the\n * surprise is larger: the author is looking at a declared pane and cannot see why their split\n * refuses to use it.\n */\n PERSISTENT_SPLIT_WITHOUT_COMPANION = 'persistent-split-without-companion',\n /**\n * `minWidth`, `maxWidth`, `onEmpty` or `responsiveCollapse` declared on PRIMARY, where every one of\n * them is inert: primary never collapses, never empties and takes the remaining space.\n *\n * `ZoneConfigSchema`'s JSDoc states this — *\"Setting these on primary has no effect\"* — so the\n * diagnostic enforces a rule the contract already carries.\n */\n INERT_PRIMARY_ZONE_FIELD = 'inert-primary-zone-field',\n /** A zone whose `minWidth` exceeds its `maxWidth`. The drag constraints cannot both be honoured. */\n ZONE_WIDTH_BOUNDS_INVERTED = 'zone-width-bounds-inverted',\n}\n\n/** One finding about an authored {@link NavigationLayout}. */\nexport interface NavigationLayoutDiagnostic {\n code: NavigationLayoutDiagnosticCode;\n severity: NavigationLayoutDiagnosticSeverity;\n /** Where in the layout, as an authoring path: `zones.primary.transitions.read`. */\n path: string;\n /** What is wrong and what the runtime will do instead. */\n message: string;\n /** The edit that fixes it. Always present — a diagnostic with no remedy is a complaint. */\n remedy: string;\n}\n\n/**\n * Read an authored {@link NavigationLayout} and report what the runtime will silently do differently\n * from what it says.\n *\n * ## Why this exists\n *\n * Nothing validated a navigation layout beyond its SHAPE until 2026-09-25 — there was no `refine`\n * anywhere in this file — so three classes of declaration were accepted and quietly ignored. The\n * escalation in {@link NavigationLayoutDiagnosticCode.SPLIT_WITHOUT_ADJACENT_ZONE} is the expensive\n * one: it is documented in this file's own prose and produces a dialog where a pane was asked for.\n *\n * ## It REPORTS; it never refuses, and that is deliberate\n *\n * A `superRefine` on {@link NavigationLayoutSchema} was the obvious implementation and was rejected.\n * The layout is parsed inside `AppConfiguration_Frontend_Schema` at application boot, so a refusal\n * there would stop an application from starting over a split that renders as a dialog — wildly\n * disproportionate, and the exact shape `.claude/rules/application-creation-directive.md` forbids:\n * a mechanism that refuses rather than marks. The precedent for the chosen shape is the\n * administrative-continuity boot report, which is non-fatal for the same reason.\n *\n * Pure, so it is equally usable from a test, a CLI check or a future authoring-time gate.\n *\n * ## What this CANNOT see, and what covers it instead\n *\n * A layout is not the only place a `SPLIT` is declared. A resource's `navigationOverrides`, a\n * relationship transition and an action presentation all reach the resolver, and none of them is in\n * the layout — so the only real instance of `SPLIT_WITHOUT_ADJACENT_ZONE` in this repository was\n * INVISIBLE here: Wonder Todos declared `SPLIT` on `todos.READ` against a single-zone layout, every\n * drill-in became a dialog for the life of the declaration, and this check reported clean.\n *\n * Re-deriving that population statically would mean a second enumeration of every tier that can\n * produce a SPLIT, kept in step with the resolver by hand. The resolver has already decided, so the\n * report lives at the DECISION instead: `useNavigationController` warns once per resource+operation\n * when a resolution carries `SPLIT_ESCALATED_NO_ADJACENT_ZONE`. That covers every tier by\n * construction and cannot drift. This function keeps the half a boot check can answer — the layout's\n * own declarations, before anything navigates.\n *\n * ## The rule that was considered and REJECTED, because it fires on correct code\n *\n * *\"A `secondary` zone is declared and no transition in the layout resolves to `SPLIT`, so the pane\n * can never open.\"* It reads like the natural companion to the rules above and it is wrong: Wonder\n * CRM declares `secondary` while `zones.primary.transitions.read` is `PUSH`, and its pane is reached\n * ONLY by `deal`'s per-resource `navigationOverrides: [{ transition: SPLIT }]` — a declaration this\n * function cannot see, because it lives in a resource's ui-behavior rather than in the layout. The\n * rule would have reported the repository's one deliberate two-zone application as misconfigured.\n *\n * A checker that mostly reports correct code trains its reader to skim the reports that matter.\n *\n * (That rationale also mis-named Wonder CRM as \"the repository's one deliberate two-zone\n * application\". The workbench declares `zones.secondary` too — and unlike CRM its pane IS reached\n * from the layout, so the rejected rule would not have fired on it. The rejection stands on CRM\n * alone.)\n */\nexport function collectNavigationLayoutDiagnostics(layout: NavigationLayout): NavigationLayoutDiagnostic[] {\n const diagnostics: NavigationLayoutDiagnostic[] = [];\n const hasSecondary = layout.zones.secondary !== undefined;\n const hasCompanion = layout.zones.companion !== undefined;\n const hasAdjacentZone = hasSecondary || hasCompanion;\n\n /*\n * Every place a layout can declare a transition. Enumerated rather than walked, because the set is\n * closed by `NavigationLayoutSchema` and a structural walk would also reach the per-resource\n * overrides this function deliberately cannot see (see the rejected rule above).\n */\n const transitionSources: { path: string; transitions: ZoneTransitions | undefined }[] = [\n { path: 'zones.primary.transitions', transitions: layout.zones.primary?.transitions },\n { path: 'zones.secondary.transitions', transitions: layout.zones.secondary?.transitions },\n { path: 'zones.companion.transitions', transitions: layout.zones.companion?.transitions },\n { path: 'appLevel.transitions', transitions: layout.appLevel?.transitions },\n { path: 'fromOverlay.transitions', transitions: layout.fromOverlay?.transitions },\n { path: `['${ViewportBreakpoint.MOBILE}'].transitions`, transitions: layout[ViewportBreakpoint.MOBILE]?.transitions },\n { path: `['${ViewportBreakpoint.VERT_TABLET}'].transitions`, transitions: layout[ViewportBreakpoint.VERT_TABLET]?.transitions },\n ];\n\n for (const source of transitionSources) {\n if (!source.transitions) continue;\n for (const [operation, config] of Object.entries(source.transitions)) {\n if (config === undefined) continue;\n if (getTransitionVerb(config as TransitionConfig) !== NavigationTransition.SPLIT) continue;\n const path = `${source.path}.${operation}`;\n\n if (!hasAdjacentZone) {\n diagnostics.push({\n code: NavigationLayoutDiagnosticCode.SPLIT_WITHOUT_ADJACENT_ZONE,\n severity: NavigationLayoutDiagnosticSeverity.ERROR,\n path,\n message:\n 'Declares SPLIT, and the layout declares no `secondary` or `companion` zone. '\n + 'The split escalates to an OVERLAY, so this operation opens as a dialog rather than beside its source.',\n remedy: 'Declare `zones.secondary`, or change this transition to the one you want (PUSH, REPLACE or OVERLAY).',\n });\n continue;\n }\n\n if (isPersistentTransition(config as TransitionConfig) && !hasCompanion) {\n diagnostics.push({\n code: NavigationLayoutDiagnosticCode.PERSISTENT_SPLIT_WITHOUT_COMPANION,\n severity: NavigationLayoutDiagnosticSeverity.ERROR,\n path,\n message:\n 'Declares a `persistent` SPLIT, which targets the `companion` zone specifically and does NOT '\n + 'fall back to `secondary`. With no companion declared it escalates to an OVERLAY.',\n remedy: 'Declare `zones.companion`, or drop `persistent` so the split may use `secondary`.',\n });\n }\n }\n }\n\n const primary = layout.zones.primary;\n if (primary) {\n const inertOnPrimary = (['minWidth', 'maxWidth', 'onEmpty', 'responsiveCollapse'] as const)\n .filter(field => primary[field] !== undefined);\n for (const field of inertOnPrimary) {\n diagnostics.push({\n code: NavigationLayoutDiagnosticCode.INERT_PRIMARY_ZONE_FIELD,\n severity: NavigationLayoutDiagnosticSeverity.WARNING,\n path: `zones.primary.${field}`,\n message:\n `\\`${field}\\` has no effect on the primary zone: primary never collapses, never empties, and takes `\n + 'the space the other zones leave.',\n remedy: `Move \\`${field}\\` to \\`zones.secondary\\` or \\`zones.companion\\`, or remove it.`,\n });\n }\n }\n\n for (const zoneName of ['primary', 'secondary', 'companion'] as const) {\n const zone = layout.zones[zoneName];\n if (zone?.minWidth !== undefined && zone.maxWidth !== undefined && zone.minWidth > zone.maxWidth) {\n diagnostics.push({\n code: NavigationLayoutDiagnosticCode.ZONE_WIDTH_BOUNDS_INVERTED,\n severity: NavigationLayoutDiagnosticSeverity.ERROR,\n path: `zones.${zoneName}`,\n message: `\\`minWidth\\` (${zone.minWidth}) exceeds \\`maxWidth\\` (${zone.maxWidth}); the drag constraints cannot both hold.`,\n remedy: 'Lower `minWidth` or raise `maxWidth` so the range is non-empty.',\n });\n }\n }\n\n return diagnostics;\n}\n\n// ════════════════════════════════════════════════════════════════\n// Per-Resource Operation Override\n// ════════════════════════════════════════════════════════════════\n\n// DELETED — NavigationOperationOverrideSchema and NavigationOperationOverride\n// Transferred to @wildo-ai/saas-frontend-lib (resources.frontend.schemas)\n"]}
|
|
1
|
+
{"version":3,"file":"navigation.shared.schemas.js","sourceRoot":"","sources":["../../../../src/config/frontend/navigation.shared.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Navigation — Configuration Schemas\n *\n * Zone-first, operation-driven navigation configuration model.\n * Decomposes navigation into four independent axes:\n *\n * 1. **Meaning** (input signals) — contextual facts at navigation time (source zone, operation,\n * cardinality, viewport, depth). NOT configured — these are inputs to resolution.\n * 2. **Transition** (verb) — HOW content arrives: push, replace, split, overlay, inplace, promote.\n * This is the primary thing that gets configured per zone.\n * 3. **Placement** (zones) — WHERE content lives: primary, secondary, companion, overlay.\n * Zones are structural layout areas AND source context for resolution.\n * 4. **Appearance** (visual) — HOW content renders in its slot: panel, drawer, dialog, sheet.\n * Only meaningful for split and overlay transitions.\n *\n * Key design decisions:\n * - Zones own their complete behavior (no global defaults + override pattern)\n * - Operations are transition keys; cardinality drives appearance only\n * - Embedding (tabs/sections within a parent) is view composition, not navigation\n * - `contentModel` (single/tabbed) is orthogonal to transitions\n *\n * @see _code_archive/docs-archive/navigation/navigation-v3-reflection.md\n */\n\nimport { z } from 'zod';\nimport { ViewportBreakpoint, DisplayDirection } from '@wildo-ai/zod-decorators';\nimport { CoreResourceOperation } from '../../resources/resources.shared.core.definitions';\n\n\n// ════════════════════════════════════════════════════════════════\n// Enums\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Navigation transition verbs — HOW content arrives at its destination.\n *\n * These are the six fundamental navigation actions. Every user-triggered\n * navigation event resolves to exactly one of these verbs. The source zone's\n * `transitions` map determines which verb fires for each operation.\n *\n * Four zone-level transitions: `push`, `replace`, `split`, `overlay`\n * Two cross-context transitions: `inplace` (element-level), `promote` (escape to primary)\n *\n * `push` behavior depends on the zone's `contentModel`:\n * - In `single` zones: stack-based (new content on top, back pops)\n * - In `tabbed` zones: opens a new tab and makes it active (an already-open record is NOT\n * de-duplicated — it opens again)\n *\n * @wildo_source:part:start saas.models.navigation.transition-vocabulary facet:layer:shared facet:family:navigation-config\n */\nexport enum NavigationTransition {\n /**\n * Content added to the zone's stack (single) or as a new tab (tabbed).\n * Back navigation pops the stack or switches to the previous tab.\n * URL adds a new path segment.\n */\n PUSH = 'push',\n /**\n * Content replaces the current content in the zone. No stack entry — the previous\n * content is gone from the zone's state (but remains in browser history).\n * URL replaces the current segment.\n */\n REPLACE = 'replace',\n /**\n * Content opens in an adjacent zone (secondary or companion).\n * Creates a side-by-side layout. The source zone's content remains visible.\n * Back navigation un-splits (closes the adjacent zone).\n * URL: the detail's own address beside a resource primary; beside any other primary the host\n * keeps its URL and a RESOURCE detail rides as `?pane=`. There is no split segment.\n */\n SPLIT = 'split',\n /**\n * Content opens in a floating layer above the entire layout (dialog, sheet, or drawer).\n * The underlying layout remains visible; it is non-interactive while the overlay is modal (the\n * default), and stays interactive under `overlayBehavior.modal: false`.\n * Back navigation or Escape dismisses the overlay.\n * NOT URL-addressed: opening an overlay leaves the browser URL where it was, so its content cannot\n * be linked to or restored by a reload. Choose it knowing that.\n */\n OVERLAY = 'overlay',\n /**\n * Element-level transformation within the current view. A specific item in a\n * list/section transforms from one mode to another (read → edit); a CREATE\n * materializes a new element beside the existing ones. The parent view stays,\n * the zone stack is unchanged, and surrounding items remain visible.\n *\n * Fundamentally different from `replace` (which swaps the entire zone content).\n * `inplace` operates at the element level, not the zone level.\n *\n * No lifecycle modifiers (`persistent`/`ephemeral`) are valid on `inplace`.\n * No appearance to configure — the element transforms within its existing slot.\n *\n * **It is the one transition that does not place content in a zone**, which is\n * why the controller hands it to the element-level host\n * (`InPlaceOperationContext`) instead of resolving a target zone for it. That\n * host is provided by the COLLECTION the element belongs to, so a transition\n * resolving to `inplace` on a surface with no collection above it — a detail\n * page, a breadcrumb, a picker — degrades to an OVERLAY.\n *\n * **It is TRANSIENT: no URL, and a reload returns the view to rest.** Earlier\n * revisions of this comment promised a query param (`?editing=<childId>` /\n * `?creating=<resourceType>`) and none was ever written. It is not written now\n * either, and that is a decision rather than an omission: an inline row-edit is\n * a momentary state of a listing, not a place — no comparable admin framework\n * deep-links one, and anything that should survive a reload or a back button\n * wants `push`. `ResourceOperationActionPresentation.INLINE`, the per-operation\n * tier that selects the same host, is transient for the same reason.\n *\n * @example\n * // Click \"edit\" on a child in parent's inline section → item transforms to edit form\n * transitions: { [CoreResourceOperation.UPDATE]: NavigationTransition.INPLACE }\n *\n * // Click \"add\" in a relationship section → create form appears inline in the list\n * transitions: { [CoreResourceOperation.CREATE]: NavigationTransition.INPLACE }\n */\n INPLACE = 'inplace',\n /**\n * Escape the current context and open content at primary scope.\n * Abandons the current context: overlays close, companion/secondary dismiss — except a pane\n * placed by a `persistent` split, which survives a reset by design.\n * The promoted content becomes the primary zone's top content.\n *\n * Use case: a link within an overlay should open as a full primary view,\n * or a nested detail in a companion zone should \"pop out\" to primary.\n *\n * Fundamentally different from `push` (which stays in the current zone) and\n * from `replace` (which replaces content within the same zone). `promote`\n * crosses zones and always targets primary.\n *\n * No lifecycle modifiers (`persistent`/`ephemeral`) are valid on `promote`.\n * No appearance to configure — content fills primary (same as push/replace).\n *\n * URL serialization: full URL change (promoted resource becomes the primary route).\n *\n * @example\n * // From an overlay, a link should open as primary (close overlay, show in primary)\n * transitions: { [CoreResourceOperation.READ]: NavigationTransition.PROMOTE }\n */\n PROMOTE = 'promote',\n}\n/** @wildo_source:part:end saas.models.navigation.transition-vocabulary */\n\n/**\n * Named layout zones — configurable structural areas WHERE content lives.\n *\n * Zones serve four purposes:\n * 1. **Structural** — which physical areas exist in the layout (declared in config)\n * 2. **Source context** — the same operation resolves differently FROM primary vs FROM secondary\n * 3. **Responsive** — each zone carries its own collapse behavior per viewport\n * 4. **Content model** — each zone independently manages single-stack or tabbed content\n *\n * Note: `overlay` is NOT a named zone — it's an implicit layer always available.\n * Overlay is a runtime destination, not a configurable zone. See `NavigationZone`\n * in the frontend runtime types for the full set including overlay.\n *\n * @wildo_source:part:start saas.models.navigation.surface-vocabulary facet:layer:shared facet:family:navigation-config\n */\nexport enum NavigationZoneName {\n /** Main content area. Lists, root-level reads, primary workspace. Always exists. */\n PRIMARY = 'primary',\n /**\n * First adjacent zone. Detail content in list-detail patterns.\n * Only exists if declared in config. Appears when a `split` transition targets it.\n * Typical use: showing item details alongside a list.\n */\n SECONDARY = 'secondary',\n /**\n * Persistent supplementary content. Reference panels, docs, notes, threads.\n * Only exists if declared in config, and starts hidden.\n * Reached by a `split` with `persistent: true`, or by an ordinary `split` when the secondary zone\n * is already occupied.\n * Typical use: Slack thread panel, VS Code terminal, documentation sidebar.\n */\n COMPANION = 'companion',\n}\n\n/**\n * How a zone manages multiple items. Orthogonal to transitions.\n *\n * The transition says \"content arrives\" — the content model says\n * \"how does the zone accommodate it.\" Any zone can use any content model,\n * regardless of which transitions it supports.\n */\nexport enum NavigationZoneContentModel {\n /**\n * Navigation stack: new content pushes on top, previous preserved underneath.\n * Only one item visible at a time. Back navigation pops the stack.\n * `replace` replaces the top without adding to the stack.\n * This is the default for all zones.\n */\n SINGLE = 'single',\n /**\n * Parallel tabs: every navigation landing in the zone opens a new tab and makes it active (no\n * de-duplication). Tab bar is visible, showing all open tabs. No depth stack within tabs.\n * `replace` replaces the active tab's content, and back closes the active tab and shows its\n * neighbour. The model changes RENDERING only — it does not change how navigation resolves.\n * When no tabs remain, `onEmpty` behavior applies.\n */\n TABBED = 'tabbed',\n}\n\n/**\n * Responsive collapse behavior when viewport shrinks below a zone's breakpoint.\n *\n * Only applies to secondary and companion zones. Primary never collapses.\n * It applies to content ALREADY in the zone, not only to new navigations: when the zone collapses its\n * whole history moves (a tabbed zone's tabs too, the one on screen on top), and when the viewport\n * grows back what is still on top of primary migrates home with every field intact. Whatever the\n * reader navigated past at the narrow width stays where it is.\n */\nexport enum ResponsiveCollapseMode {\n /**\n * Zone hides. Its content joins primary's navigation stack.\n * The user sees the content in-context within primary.\n * Back navigation pops back to primary's previous content.\n */\n PUSH = 'push',\n /**\n * Zone hides. Its content opens as an overlay on top of primary.\n * The user sees the content as a floating sheet/dialog.\n * Dismiss returns to the underlying primary content.\n */\n OVERLAY = 'overlay',\n}\n/** @wildo_source:part:end saas.models.navigation.surface-vocabulary */\n\n/**\n * @wildo_source:part:start saas.models.navigation.zone-declaration facet:layer:shared facet:family:navigation-config\n *\n * What happens when a zone's last content is dismissed.\n * Only meaningful for secondary and companion zones (primary never empties,\n * overlay auto-dismisses by definition).\n */\nexport enum ZoneEmptyBehavior {\n /**\n * Zone hides, adjacent zones expand to fill the space.\n * Example: closing the last detail → layout returns to list-only.\n * This is the default for all non-primary zones.\n */\n COLLAPSE = 'collapse',\n /**\n * Zone stays visible with an empty-state placeholder.\n * Example: \"Select an item to view details\" message. Keeps layout stable.\n * Useful when the user frequently toggles between items.\n */\n EMPTY_STATE = 'emptyState',\n}\n/** @wildo_source:part:end saas.models.navigation.zone-declaration */\n\n/**\n * @wildo_source:part:start saas.models.navigation.surface-vocabulary facet:layer:shared facet:family:navigation-config\n *\n * Visual presentation for overlay transitions.\n * Determines how floating content renders above the layout.\n */\nexport enum OverlayAppearance {\n /**\n * Centered modal dialog with backdrop.\n * Best for focused tasks: create forms, confirmations, destructive actions.\n * Blocks underlying content visually. Escape or backdrop click dismisses.\n */\n DIALOG = 'dialog',\n /**\n * Side or bottom drawer panel that slides in from an edge.\n * Best for contextual content that benefits from seeing the underlying layout.\n * Less disruptive than dialog. Common for detail views on mobile.\n */\n SHEET = 'sheet',\n /**\n * Vaul-backed mobile drawer.\n * Use when the navigation resolver should choose a drawer directly rather\n * than relying on a dialog appearance plus mobileShape policy.\n */\n DRAWER = 'drawer',\n}\n\n/*\n * ─── `SplitAppearance` was REMOVED on 2026-09-25, and the reason is worth keeping ───────────────\n *\n * It declared `PANEL` (\"vertical side panel\") and `DRAWER` (\"horizontal drawer, bottom panel\"), and\n * the whole sub-tree was WRITE-ONLY: the resolver computed it, the controller stored it on the stack\n * entry, and the ONLY site reading `entry.appearance` cast it to `OverlayAppearance` for the overlay\n * container. No split renderer branched on it. So `DRAWER` could never render — an author who wrote\n * it got a vertical side panel with no diagnostic — and `PANEL` was a value meaning \"the default\".\n *\n * It was also a SECOND vocabulary for an axis `SplitConfig.orientation` already owns:\n * `orientation: HORIZONTAL` is \"top-bottom\", which is what `DRAWER` described. The two were\n * independently authorable in contradiction, with no refine and nothing honouring either against the\n * other.\n *\n * Collapsed to ONE source — `SplitConfig.orientation`, which the renderer genuinely reads — per\n * \"measure what the runtime actually reads, then collapse to one source of truth\". `orientation` was\n * additionally made live on the STATIC render branch in the same change; it had been read only by\n * the resizable branch, so `HORIZONTAL` + `resizable: false` silently produced a side panel.\n *\n * `entry.appearance` is now `OverlayAppearance` alone, which removes the unchecked downcast at its\n * one reader. The removal follows the precedent already set here for `defaultVisible`, `autoSplit`\n * and `CompanionSplitConfig.orientation`: a declared-but-unread field is deleted, not deprecated.\n */\n/** @wildo_source:part:end saas.models.navigation.surface-vocabulary */\n\n// ════════════════════════════════════════════════════════════════\n// ViewportDiscriminated — Generic responsive override pattern\n// ════════════════════════════════════════════════════════════════\n\n/**\n * A value that is either a plain `T` (applies at all viewports) or a\n * viewport-keyed partial record for per-breakpoint control.\n *\n * This pattern is used throughout the navigation config for responsive properties:\n * `responsiveCollapse`, `appearance`, `contentSectionConfig`, `transition`.\n *\n * @example\n * // Plain value — same everywhere\n * responsiveCollapse: ResponsiveCollapseMode.PUSH\n *\n * // Viewport-discriminated — different per breakpoint\n * responsiveCollapse: { [ViewportBreakpoint.VERT_TABLET]: ResponsiveCollapseMode.PUSH, [ViewportBreakpoint.MOBILE]: ResponsiveCollapseMode.OVERLAY }\n *\n * // Overlay appearance — sheet on tablet, drawer on mobile\n * overlay: { [ViewportBreakpoint.VERT_TABLET]: OverlayAppearance.SHEET, [ViewportBreakpoint.MOBILE]: OverlayAppearance.DRAWER }\n */\nexport type ViewportDiscriminated<T> = T | Partial<Record<ViewportBreakpoint, T>>;\n\n/**\n * Zod schema factory for `ViewportDiscriminated<T>`.\n *\n * Produces a union: the plain inner schema OR a record keyed by `ViewportBreakpoint`\n * with inner schema values. The record must have at least one key.\n *\n * @param innerSchema - Zod schema for the value type at each breakpoint.\n */\nexport function viewportDiscriminatedSchema<T extends z.ZodType>(innerSchema: T) {\n return z.union([\n innerSchema,\n z.partialRecord(z.enum(ViewportBreakpoint), innerSchema).refine(\n (obj) => Object.keys(obj).length > 0,\n { message: 'Viewport-discriminated object must have at least one breakpoint key' },\n ),\n ]);\n}\n\n\n// ════════════════════════════════════════════════════════════════\n// Transition Config\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Extended transition with lifecycle modifiers.\n *\n * Most transitions are simple verbs (just the enum value). The object form\n * adds lifecycle semantics for two specific patterns:\n *\n * - **Companion pattern**: `{ transition: NavigationTransition.SPLIT, persistent: true }`\n * The split zone persists when the source zone's content changes.\n * Without `persistent`, a split zone would clear when primary navigates away.\n *\n * - **Inspect pattern**: `{ transition: NavigationTransition.OVERLAY, ephemeral: true }`\n * The overlay auto-closes when the source zone's stack changes.\n * Without `ephemeral`, overlays stay open until explicitly dismissed.\n *\n * Semantic constraints (enforced by `.refine()`):\n * - `persistent` is only valid on `split` transitions\n * - `ephemeral` is only valid on `overlay` transitions\n * - `persistent` and `ephemeral` are mutually exclusive\n * - `inplace` and `promote` do not accept any modifier (they are always simple verbs)\n */\nexport const TransitionObjectSchema = z.object({\n /** The transition verb. */\n transition: z.enum(NavigationTransition),\n /**\n * When `true`, the split zone persists when the source zone navigates away.\n * Only valid on `split` transitions. Targets the companion zone specifically\n * (rather than the default adjacent zone resolution).\n *\n * Example: Slack thread panel stays open when switching channels.\n */\n persistent: z.boolean().optional(),\n /**\n * When `true`, the overlay auto-closes when the source zone's stack changes.\n * Only valid on `overlay` transitions.\n *\n * Example: Quick-inspect preview that dismisses when the user clicks another item.\n */\n ephemeral: z.boolean().optional(),\n}).refine(\n (obj) => {\n if (obj.persistent && obj.transition !== NavigationTransition.SPLIT) return false;\n if (obj.ephemeral && obj.transition !== NavigationTransition.OVERLAY) return false;\n if (obj.persistent && obj.ephemeral) return false;\n return true;\n },\n { message: 'persistent is only valid on split; ephemeral is only valid on overlay; they are mutually exclusive' },\n);\nexport type TransitionObject = z.infer<typeof TransitionObjectSchema>;\n\n/**\n * A transition configuration: either a simple verb string or an object with modifiers.\n *\n * @example\n * // Simple verb\n * transitions: { read: NavigationTransition.SPLIT, create: NavigationTransition.OVERLAY }\n *\n * // Object with lifecycle modifier\n * transitions: { read: { transition: NavigationTransition.SPLIT, persistent: true } }\n */\nexport const TransitionConfigSchema = z.union([\n z.enum(NavigationTransition),\n TransitionObjectSchema,\n]);\nexport type TransitionConfig = z.infer<typeof TransitionConfigSchema>;\n\n\n// ════════════════════════════════════════════════════════════════\n// Zone Configuration\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Operation → transition mapping for a zone.\n *\n * Partial record — only operations that the zone handles need entries.\n * Missing operations fall back to the framework's hardcoded defaults.\n *\n * Keys are `CoreResourceOperation` values such as `read`, `list`, `create`,\n * `update`, `delete`, and `search`.\n *\n * @example\n * transitions: {\n * read: NavigationTransition.SPLIT, // click item → split to secondary\n * list: NavigationTransition.REPLACE, // \"View all\" → replace primary\n * create: NavigationTransition.OVERLAY, // new item → dialog\n * update: NavigationTransition.INPLACE, // edit → transform element inline\n * delete: NavigationTransition.OVERLAY, // confirm → dialog\n * search: NavigationTransition.PUSH, // advanced search → full-surface route\n * }\n *\n * // From an overlay, promote a link to primary view\n * transitions: {\n * read: NavigationTransition.PROMOTE, // link in overlay → escape to primary\n * }\n */\n/** Partial record — only operations that the zone handles need entries. Missing operations fall back to framework defaults. */\nexport const ZoneTransitionsSchema = z.partialRecord(\n z.enum(CoreResourceOperation),\n TransitionConfigSchema,\n) as unknown as z.ZodType<Partial<Record<CoreResourceOperation, TransitionConfig>>>;\nexport type ZoneTransitions = Partial<Record<CoreResourceOperation, TransitionConfig>>;\n\n/**\n * Transition → visual appearance for a zone. Values are viewport-discriminated.\n *\n * Only the `overlay` transition has an appearance choice. The others have none to configure:\n * - `push`/`replace` fill the zone\n * - `split` opens a pane whose shape is `split.orientation` (there is no split appearance)\n * - `inplace` transforms an element within the current view\n * - `promote` fills primary (same as push/replace)\n *\n * @example\n * appearance: {\n * overlay: { [ViewportBreakpoint.VERT_TABLET]: OverlayAppearance.SHEET, [ViewportBreakpoint.MOBILE]: OverlayAppearance.DRAWER }, // sheet on tablet, drawer on mobile\n * }\n */\nexport const ZoneAppearanceSchema = z.object({\n /**\n * How overlay content renders. Default: `OverlayAppearance.DIALOG` (centered modal).\n *\n * There is deliberately no `split` sibling: how a PANE renders is `SplitConfig.orientation` plus\n * the zone's width bounds, which the renderer reads. See the note where `SplitAppearance` used to\n * be declared.\n */\n overlay: viewportDiscriminatedSchema(z.enum(OverlayAppearance)).optional(),\n});\nexport type ZoneAppearance = z.infer<typeof ZoneAppearanceSchema>;\n\n/**\n * @wildo_source:part:start saas.models.navigation.zone-declaration facet:layer:shared facet:family:navigation-config\n *\n * How much of its zone a destination's content occupies is NOT declared here: it is the\n * destination's `ZoneContentGeometry` (a `maxWidth` and a `fillsHeight`), because the same primary\n * zone hosts a list that wants the width cap, a detail that caps itself, and a graph that wants\n * neither. A zone's own declaration follows.\n */\n\n/**\n * Full zone configuration.\n *\n * Each declared zone in the layout owns its complete behavior:\n * which transition fires for each operation, how content appears,\n * and how the zone responds to viewport changes.\n *\n * Note: `minWidth`, `maxWidth`, `onEmpty` and `responsiveCollapse` are only meaningful for\n * secondary and companion zones. Primary never collapses, never empties, and takes remaining space.\n * Setting these on primary has no effect.\n *\n * ## Every field here is READ by the runtime, and that was checked rather than assumed (#211)\n *\n * | field | the reader |\n * |---|---|\n * | `contentModel` | `NavigationContentAreas.tsx` (TABBED detection) + `zone-visible-entry.ts` |\n * | `transitions` | `navigation-policy-resolver.service.ts` |\n * | `appearance` | the policy resolver (`appearance.overlay` — there is no split appearance) |\n * | `minWidth` / `maxWidth` | `NavigationContentAreas.tsx` drag constraints, both split branches |\n * | `onEmpty` | `zone-empty-behavior.ts` |\n * | `responsiveCollapse` | `navigation-policy-resolver.service.ts` |\n *\n * `defaultVisible` was REMOVED by that audit: nothing read it, and its only documented meaning was\n * \"defaults to `true` when `split.autoSplit` is `true`\" — a field defined in terms of another field\n * that was also dead. What it was reaching for is `onEmpty`, which every current layout already uses\n * (`zoneOccupiesSpaceWhenEmpty`) and which the runtime genuinely reads.\n */\nexport const ZoneConfigSchema = z.object({\n /**\n * How this zone manages multiple items.\n * - `NavigationZoneContentModel.SINGLE` (default): stack-based navigation. One item visible, back pops.\n * - `NavigationZoneContentModel.TABBED`: parallel tabs. Tab bar visible, multiple items accessible.\n * @default NavigationZoneContentModel.SINGLE\n */\n contentModel: z.enum(NavigationZoneContentModel).default(NavigationZoneContentModel.SINGLE),\n\n /** Operation → transition mapping. Defines what happens for each user action in this zone. */\n transitions: ZoneTransitionsSchema,\n\n /** Which shape an OVERLAY opened from this zone takes. Only overlays have an appearance: a pane's shape is `split.orientation`. */\n appearance: ZoneAppearanceSchema.optional(),\n\n /**\n * Minimum pixel width when resizing. Constrains how far this side of the\n * split divider can be dragged. Only meaningful for secondary and companion zones, and only when\n * that zone is resizable — `SplitConfigSchema.resizable` for secondary, `split.companion.resizable`\n * for companion (independent flags).\n *\n * The pixel value is converted to a share of the content area and clamped to 5–70%. When OMITTED on\n * a resizable zone the floor is 25% of the content area — or the zone's own ratio share, if that is\n * smaller — never zero. A pane is never collapsed by dragging it: closing a pane is navigation.\n *\n * A declared `maxWidth` narrower than this floor lowers the floor to it. When the shown side panes ask\n * for more than primary's 25% leaves, they shrink in proportion and none opens below its floor (a\n * non-resizable pane's floor is 25%, or its own ratio share if smaller); primary opens at exactly 25%.\n * The floors are pixels, so at a narrow window they may not fit together at all — they then give way\n * to each other in proportion, and the smaller floor a pane opens at is its drag floor. Primary never\n * gives way.\n *\n * ## It is ALSO a COLLAPSE TRIGGER, on every zone — not only a drag bound\n *\n * The paragraph above restricts this to resizing, and that stopped being the whole truth when the\n * content-area fit escalation landed: `resolveCollapseMode` feeds `minWidth` to\n * `contentAreaFitsSplit`, for resizable and non-resizable zones alike. A zone declaring\n * `minWidth: W` needs `W / 0.75` of content width beside primary's 25% floor, and below that the\n * split escalates rather than squeezing both panes under their floors.\n *\n * So a NON-resizable pane with `minWidth: 600` stops splitting on a 1000px content area at full\n * desktop width — correct behaviour, and the opposite of what this field's own contract said until\n * 2026-09-25. Declare it when you mean \"this pane is not worth opening narrower than W\", and omit\n * it when you only want a drag floor on a layout that is not resizable anyway.\n */\n minWidth: z.number().positive().optional(),\n\n /**\n * Maximum pixel width when resizing. Constrains how far this side of the\n * split divider can be dragged. Only meaningful for secondary and companion zones, and only when\n * that zone is resizable — `SplitConfigSchema.resizable` for secondary, `split.companion.resizable`\n * for companion (independent flags).\n *\n * The pixel value is converted to a share of the content area and clamped to 5–70%. When OMITTED on\n * a resizable zone the ceiling is whatever leaves the primary zone 25% of the content area.\n */\n maxWidth: z.number().positive().optional(),\n\n /**\n * What happens when this zone's last content is dismissed (stack empty, last tab closed).\n * - `ZoneEmptyBehavior.COLLAPSE` (default): zone hides, adjacent zones expand to fill.\n * - `ZoneEmptyBehavior.EMPTY_STATE`: zone stays visible with placeholder (\"Select an item to view details\").\n * Only meaningful for secondary and companion zones. Primary never empties.\n */\n onEmpty: z.enum(ZoneEmptyBehavior).optional(),\n\n /**\n * Responsive collapse rules: what happens when viewport shrinks below the zone's breakpoint.\n * Accepts a plain `ResponsiveCollapseMode` (all breakpoints) or viewport-discriminated object.\n * Only meaningful for secondary and companion zones. Primary never collapses.\n *\n * It moves content already in the zone as well as new navigations: the zone's whole history\n * moves when it collapses, and what is still on top of primary goes home when it returns — see\n * `ResponsiveCollapseMode`.\n *\n * @example\n * responsiveCollapse: ResponsiveCollapseMode.PUSH // always push into primary\n * responsiveCollapse: { [ViewportBreakpoint.VERT_TABLET]: ResponsiveCollapseMode.PUSH, [ViewportBreakpoint.MOBILE]: ResponsiveCollapseMode.OVERLAY } // tablet: push, mobile: overlay\n */\n responsiveCollapse: viewportDiscriminatedSchema(z.enum(ResponsiveCollapseMode)).optional(),\n});\nexport type ZoneConfig = z.infer<typeof ZoneConfigSchema>;\n/** @wildo_source:part:end saas.models.navigation.zone-declaration */\n\n\n// ════════════════════════════════════════════════════════════════\n// App-Level & From-Overlay Configuration\n// ════════════════════════════════════════════════════════════════\n\n/**\n * App-level navigation configuration: from OUTSIDE the zone system.\n *\n * Covers navigation triggered by sidebar clicks, command palette selections,\n * hotkey shortcuts, toast actions, and notification clicks.\n *\n * App-level navigation causes a **layout reset**: primary content is replaced,\n * secondary and companion zones are cleared. This is fundamentally different\n * from zone-level navigation where the source zone's content persists.\n *\n * @example\n * appLevel: {\n * transitions: {\n * list: NavigationTransition.REPLACE, // sidebar \"Projects\" → replace primary, clear others\n * read: NavigationTransition.REPLACE, // command palette \"Go to X\" → replace primary\n * create: NavigationTransition.OVERLAY, // quick action \"New X\" → dialog\n * search: NavigationTransition.REPLACE, // command/menu search surface → replace primary\n * },\n * appearance: { overlay: OverlayAppearance.DIALOG },\n * }\n */\nexport const AppLevelConfigSchema = z.object({\n /** Operation → transition mapping for app-level navigation. */\n transitions: ZoneTransitionsSchema,\n /** Appearance overrides for app-level transitions. */\n appearance: ZoneAppearanceSchema.optional(),\n});\nexport type AppLevelConfig = z.infer<typeof AppLevelConfigSchema>;\n\n/**\n * Navigation from within an overlay (dialog, sheet, or drawer).\n *\n * When already in an overlay, transitions behave differently to avoid\n * nesting overlays. Typically all operations `push` within the overlay's\n * own stack instead of opening new overlays.\n *\n * No appearance config — the content is already inside an overlay.\n *\n * @example\n * fromOverlay: {\n * transitions: {\n * read: NavigationTransition.PUSH, // push within overlay — don't nest modals\n * list: NavigationTransition.PUSH,\n * create: NavigationTransition.PUSH,\n * search: NavigationTransition.PUSH,\n * },\n * }\n */\nexport const FromOverlayConfigSchema = z.object({\n /** Operation → transition mapping when navigating from within an overlay. */\n transitions: ZoneTransitionsSchema,\n});\nexport type FromOverlayConfig = z.infer<typeof FromOverlayConfigSchema>;\n\n\n// ════════════════════════════════════════════════════════════════\n// Split Geometry\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Companion-specific split geometry.\n * Controls how the companion zone is sized and positioned relative to the main content area.\n */\nexport const CompanionSplitConfigSchema = z.object({\n /**\n * Main-area-to-companion size ratio.\n * @example [70, 30] — companion takes 30% of available space\n * @default [70, 30]\n */\n ratio: z.tuple([z.number(), z.number()]).default([70, 30]),\n /**\n * Whether the companion split boundary is user-draggable.\n * When `true`, a draggable divider appears between the main area and the companion zone.\n * Per-side drag constraints use `ZoneConfig.minWidth`/`maxWidth` on the companion zone.\n * @default false\n */\n resizable: z.boolean().default(false),\n});/*\n * `orientation` was REMOVED here by the #211 audit, and it is the one removal that took a\n * capability with it. It claimed the companion could sit BELOW the main area (\"bottom panel, e.g.\n * VS Code terminal\") and nothing read it: all three zones share ONE `ResizablePanelGroup` whose\n * `direction` comes from `split.orientation`, so an author writing HORIZONTAL here got a side panel\n * and no diagnostic. Honouring it needs a NESTED panel group, with its own sizes, autoSaveId, drag\n * constraints and responsive-collapse behaviour — a feature, not a field fix. Left as a declared\n * lie it was worse than absent: it ships to application builders in the compiled\n * `config-navigation` skill and answers with silence. Build the nested group first; the field comes\n * back when something reads it.\n */\n\nexport type CompanionSplitConfig = z.infer<typeof CompanionSplitConfigSchema>;\n\n/**\n * Top-level split geometry — describes the physical relationship between zones.\n *\n * This is a top-level config (not per-zone) because it describes the INTER-zone\n * layout: how much space each zone gets, and the split direction.\n *\n * @example\n * split: {\n * ratio: [40, 60], // 40% primary, 60% secondary\n * orientation: DisplayDirection.VERTICAL, // side-by-side\n * resizable: true, // divider is draggable\n * companion: {\n * ratio: [70, 30], // companion takes 30%\n * resizable: true, // its own divider is draggable\n * },\n * }\n */\nexport const SplitConfigSchema = z.object({\n /**\n * Primary-to-secondary width/height ratio. Defines the initial proportion.\n * When `resizable` is `true`, user drag overrides this (persisted to localStorage).\n * @example [40, 60] — primary gets 40%, secondary gets 60%\n * @default [50, 50]\n */\n /*\n * ONLY `ratio[1]` is read. Primary takes what the side panes leave — `100 − Σ(side defaults)` in\n * the static branch, the resizable branch's own clamping otherwise — so the first element has no\n * reader anywhere, and with BOTH a secondary and a companion shown it is not even well defined.\n *\n * Kept as a 2-tuple rather than narrowed to one number, deliberately: `[50, 50]` reads as a\n * proportion, which is what an author is thinking about, and changing the shape would break every\n * authored layout for a field whose value is already ignored. What changed on 2026-09-25 is that\n * it says so — `ratio: [40, 30]` silently rendered a 30% pane and a 70% primary, with the authored\n * 40 discarded and no diagnostic.\n */\n ratio: z.tuple([z.number(), z.number()]).default([50, 50]),\n /**\n * Split direction between primary and secondary — **the ONE axis vocabulary**.\n *\n * - `DisplayDirection.VERTICAL` (default): side-by-side (most common for list-detail)\n * - `DisplayDirection.HORIZONTAL`: top-bottom — the shape `SplitAppearance.DRAWER` used to\n * describe before that duplicate vocabulary was removed (2026-09-25).\n *\n * Read by BOTH render branches since the same change. It was read only by the resizable branch\n * before, so `HORIZONTAL` on a non-resizable layout silently produced a side panel.\n *\n * Note this names the DIVIDER's orientation, not the stacking axis — `VERTICAL` divider, content\n * side by side. `splitDividerOrientationToPanelGroupDirection` is the one place that inverts it.\n *\n * @default DisplayDirection.VERTICAL\n */\n orientation: z.enum(DisplayDirection).default(DisplayDirection.VERTICAL),\n /**\n * Whether the primary↔secondary split boundary is user-draggable.\n * When `true`, a draggable divider appears between primary and secondary zones.\n * Per-side drag constraints use `ZoneConfig.minWidth`/`maxWidth` on each zone.\n * @default false\n */\n resizable: z.boolean().default(false),\n /** Companion zone split geometry. Only relevant if companion zone is declared. */\n companion: CompanionSplitConfigSchema.optional(),\n});\n/*\n * Every field above is READ by the runtime, checked rather than assumed (#211):\n * `ratio` and `resizable` by `NavigationContentAreas.tsx` (both the panel sizes and the\n * is-anything-draggable decision), `orientation` by `splitDividerOrientationToPanelGroupDirection`,\n * `companion` by the companion panel branch.\n *\n * `autoSplit` was REMOVED by that audit. It was declared, defaulted, documented, shipped to\n * application builders in the compiled `config-navigation` skill, authored by three preset layouts\n * and two applications — and read by nothing, so every one of those authors got `false`'s behaviour\n * whatever they wrote. Removing rather than implementing was the deliberate answer: what it\n * described is auto-SELECTING a record the user did not choose and stamping its URL, which is a\n * product decision nobody has taken, and the case people actually hit — a detail URL restoring\n * beside its list — was covered by the deep-link restoration in `528d132a` without it.\n */\nexport type SplitConfig = z.infer<typeof SplitConfigSchema>;\n\n\n// ════════════════════════════════════════════════════════════════\n// Viewport Override Block\n// ════════════════════════════════════════════════════════════════\n\n/**\n * Global viewport override — applies across ALL zones at a given breakpoint.\n *\n * Use for sweeping mobile/tablet overrides that affect the entire app.\n * For per-zone responsive behavior, use `ZoneConfig.responsiveCollapse` and\n * viewport-discriminated appearance values instead.\n *\n * @example\n * // In NavigationLayout:\n * [ViewportBreakpoint.MOBILE]: {\n * transitions: {\n * read: NavigationTransition.PUSH, // mobile: no splits, everything pushes\n * create: { transition: NavigationTransition.OVERLAY, ephemeral: true }, // mobile: create opens as an inspect-style ephemeral overlay\n * },\n * }\n */\nexport const ViewportOverrideSchema = z.object({\n /** Operation → transition overrides at this viewport. Merged over zone defaults. */\n transitions: (z.partialRecord(\n z.enum(CoreResourceOperation),\n TransitionConfigSchema,\n ) as unknown as z.ZodType<Partial<Record<CoreResourceOperation, TransitionConfig>>>).optional(),\n});\nexport type ViewportOverride = z.infer<typeof ViewportOverrideSchema>;\n\n\n// ════════════════════════════════════════════════════════════════\n// NavigationLayout — Top-Level App Configuration\n// ════════════════════════════════════════════════════════════════\n\n/**\n * @wildo_source:part:start saas.models.navigation.layout facet:layer:shared facet:family:navigation-config\n *\n * The complete navigation layout configuration for an application.\n *\n * This is the single configuration object that defines the entire navigation\n * behavior. It specifies which zones exist, how each zone handles operations,\n * how zones are sized relative to each other, and global overrides.\n *\n * Resolution order (from highest to lowest priority; the first tier that answers wins):\n * 1. Per-operation frontend override (`operation.operationFrontendConfig.navigationOverrides`)\n * 2. Authored action presentation (an operation's explicit presentation)\n * 3. Per-relationship override (`display.inParentNavigation.transition`)\n * 4. Global viewport override (`ViewportBreakpoint.MOBILE` / `ViewportBreakpoint.VERT_TABLET` blocks)\n * 5. Source context `transitions[operation]` — an overlay source with no `fromOverlay` entry falls\n * back to primary's map\n * 6. Derived action presentation (inferred by the framework, used only after authored policy)\n * 7. Framework hardcoded fallback\n *\n * @example\n * const layout: NavigationLayout = {\n * zones: {\n * primary: { transitions: { read: NavigationTransition.SPLIT, create: NavigationTransition.OVERLAY, update: NavigationTransition.INPLACE } },\n * secondary: { transitions: { read: NavigationTransition.PUSH }, onEmpty: ZoneEmptyBehavior.COLLAPSE },\n * },\n * appLevel: { transitions: { list: NavigationTransition.REPLACE, create: NavigationTransition.OVERLAY } },\n * fromOverlay: { transitions: { read: NavigationTransition.PROMOTE } },\n * split: { ratio: [40, 60] },\n * maxDepth: 2,\n * };\n */\n/**\n * WHICH LAYER OWNS THE BACK AFFORDANCE.\n *\n * Two layers can render a back control for the same navigation stack: the app\n * SHELL (the menubar's hosted navigation control) and the current SURFACE (a\n * resource/view header, beside the icon + title + breadcrumb). Both mount the\n * same component, so without an explicit owner an app that hosts the shell\n * control gets TWO back arrows on every pushed page — one floating in the bar\n * with no context, one attached to the thing it goes back from.\n *\n * This is deliberately a POLICY rather than a per-surface flag: \"who owns this\n * chrome\" is one application-wide decision, and expressing it as an owner makes\n * the duplication unrepresentable instead of asking every surface to remember\n * to suppress itself.\n */\nexport enum NavigationBackAffordanceOwner {\n /**\n * The current surface's own header owns it — the back control sits beside the\n * surface's icon/title/breadcrumb, so it reads as \"back from THIS\". The shell\n * control renders nothing even when hosted. Default: it keeps the affordance\n * attached to its context, and matches the shell staying free of a lone,\n * context-free arrow.\n */\n SURFACE = 'surface',\n /**\n * The app shell's navigation control owns it — one fixed back control in the\n * menubar (the Notion-style top-left placement). Surface headers render none.\n * Requires the shell to actually host `NAVIGATION_CONTROL`; if it does not,\n * the application has no back affordance at all.\n */\n SHELL = 'shell',\n /**\n * BOTH layers render one. An explicit opt-in for layouts where the two\n * genuinely differ — e.g. a multi-zone shell whose bar control pops the\n * focused zone while each zone's header pops its own stack. Chosen\n * deliberately; never a default.\n */\n BOTH = 'both',\n}\n\n/** Default owner when a layout declares none — see {@link NavigationBackAffordanceOwner.SURFACE}. */\nexport const DEFAULT_NAVIGATION_BACK_AFFORDANCE_OWNER: NavigationBackAffordanceOwner = NavigationBackAffordanceOwner.SURFACE;\n\n/**\n * Does `owner` grant the SHELL (menubar navigation control) a back affordance?\n * Shared by both render sites so the two can never disagree about one policy.\n */\nexport function navigationBackAffordanceAdmitsShell(owner: NavigationBackAffordanceOwner | undefined): boolean {\n const resolved = owner ?? DEFAULT_NAVIGATION_BACK_AFFORDANCE_OWNER;\n return resolved === NavigationBackAffordanceOwner.SHELL || resolved === NavigationBackAffordanceOwner.BOTH;\n}\n\n/** Does `owner` grant the current SURFACE's header a back affordance? */\nexport function navigationBackAffordanceAdmitsSurface(owner: NavigationBackAffordanceOwner | undefined): boolean {\n const resolved = owner ?? DEFAULT_NAVIGATION_BACK_AFFORDANCE_OWNER;\n return resolved === NavigationBackAffordanceOwner.SURFACE || resolved === NavigationBackAffordanceOwner.BOTH;\n}\n\nexport const NavigationLayoutSchema = z.object({\n /**\n * Zone declarations. Primary is required, secondary and companion are optional.\n * Undeclared zones cannot be targeted by transitions — `NavigationTransition.SPLIT` in a layout\n * without secondary will escalate to overlay.\n */\n zones: z.object({\n /** Primary zone — always exists. Main content area (lists, root reads). */\n primary: ZoneConfigSchema,\n /** Secondary zone — optional. First adjacent zone for detail content. */\n secondary: ZoneConfigSchema.optional(),\n /** Companion zone — optional. Persistent supplementary content. */\n companion: ZoneConfigSchema.optional(),\n }),\n /**\n * How navigation from the app shell (sidebar, command palette, hotkey) behaves.\n * Causes a layout reset when targeting primary.\n */\n appLevel: AppLevelConfigSchema.optional(),\n /**\n * How navigation that STARTS in an overlay resolves. `PUSH` or `REPLACE` from an overlay leaves it\n * and lands in PRIMARY (the page changes); `OVERLAY` stacks a second overlay on the first. A\n * missing entry falls back to primary's own map. Nothing here keeps a link inside the dialog.\n */\n fromOverlay: FromOverlayConfigSchema.optional(),\n /** Split geometry: ratios, orientation, resizability. */\n split: SplitConfigSchema.optional(),\n /**\n * Maximum push depth before the framework escalates to overlay.\n * When a zone's stack depth reaches `maxDepth`, the next `push` opens an overlay instead.\n * Prevents infinitely deep navigation stacks. Per-relationship `maxDepth` can override.\n */\n maxDepth: z.number().int().positive().optional(),\n\n /**\n * Which layer renders the back control — see {@link NavigationBackAffordanceOwner}.\n * Omitted means {@link DEFAULT_NAVIGATION_BACK_AFFORDANCE_OWNER} (the surface's\n * own header), which is what keeps a shell that hosts `NAVIGATION_CONTROL`\n * from rendering a second, context-free back arrow beside every page's own.\n */\n backAffordanceOwner: z.enum(NavigationBackAffordanceOwner).optional(),\n\n /**\n * Mobile viewport override — applies across all zones when viewport is `<md` (< 768px).\n * Use for sweeping mobile behavior changes (e.g., all splits become pushes).\n */\n [ViewportBreakpoint.MOBILE]: ViewportOverrideSchema.optional(),\n /**\n * Tablet viewport override — applies across all zones when viewport is `<lg` (768–1023px).\n * Use for tablet-specific behavior changes.\n */\n [ViewportBreakpoint.VERT_TABLET]: ViewportOverrideSchema.optional(),\n});\nexport type NavigationLayout = z.infer<typeof NavigationLayoutSchema>;\n/** @wildo_source:part:end saas.models.navigation.layout */\n\n\n// ════════════════════════════════════════════════════════════════\n// Transition Config Helpers\n// ════════════════════════════════════════════════════════════════\n\n/**\n * The transition verb of a {@link TransitionConfig}, which is either the verb itself or an object\n * carrying it alongside its modifiers.\n *\n * Exported from here rather than from the frontend resolver — where all three of these lived until\n * 2026-09-25 — because they are pure functions of an AUTHORING type this file owns, and the layout\n * diagnostics below need them too. A second copy beside the diagnostics would have been a second\n * answer to \"what verb did the author write\".\n */\nexport function getTransitionVerb(config: TransitionConfig): NavigationTransition {\n if (typeof config === 'string') return config;\n return (config as TransitionObject).transition;\n}\n\n/** Whether a {@link TransitionConfig} carries the `ephemeral` modifier. */\nexport function isEphemeralTransition(config: TransitionConfig): boolean {\n if (typeof config === 'string') return false;\n return (config as TransitionObject).ephemeral === true;\n}\n\n/** Whether a {@link TransitionConfig} carries the `persistent` modifier — a split that targets companion. */\nexport function isPersistentTransition(config: TransitionConfig): boolean {\n if (typeof config === 'string') return false;\n return (config as TransitionObject).persistent === true;\n}\n\n\n// ════════════════════════════════════════════════════════════════\n// Navigation Layout Diagnostics\n// ════════════════════════════════════════════════════════════════\n\n/**\n * What a {@link NavigationLayoutDiagnostic} says about the layout.\n *\n * `ERROR` means the runtime will do something the author did not ask for — a declared split that\n * silently becomes a dialog. `WARNING` means a declaration is INERT: nothing goes wrong, and the\n * author believes they configured something they did not.\n *\n * Neither is fatal. See {@link collectNavigationLayoutDiagnostics} for why.\n */\nexport enum NavigationLayoutDiagnosticSeverity {\n ERROR = 'error',\n WARNING = 'warning',\n}\n\n/** The closed set of layout defects {@link collectNavigationLayoutDiagnostics} can recognise. */\nexport enum NavigationLayoutDiagnosticCode {\n /**\n * A `SPLIT` is declared somewhere in the layout and NO adjacent zone is declared, so every one of\n * those splits silently becomes an overlay.\n *\n * The single most surprising thing in the navigation runtime, and it was documented in\n * `NavigationLayoutSchema`'s own JSDoc — *\"`NavigationTransition.SPLIT` in a layout without\n * secondary will escalate to overlay\"* — while nothing checked it. An author gets a dialog where\n * they asked for a pane, with no diagnostic anywhere.\n */\n SPLIT_WITHOUT_ADJACENT_ZONE = 'split-without-adjacent-zone',\n /**\n * A `persistent` split is declared and no `companion` zone exists. A persistent split targets\n * companion SPECIFICALLY — it does not fall back to secondary — so it escalates to an overlay even\n * in a layout that declares a perfectly good `secondary`.\n *\n * Separate from {@link SPLIT_WITHOUT_ADJACENT_ZONE} because the remedy is different and the\n * surprise is larger: the author is looking at a declared pane and cannot see why their split\n * refuses to use it.\n */\n PERSISTENT_SPLIT_WITHOUT_COMPANION = 'persistent-split-without-companion',\n /**\n * `minWidth`, `maxWidth`, `onEmpty` or `responsiveCollapse` declared on PRIMARY, where every one of\n * them is inert: primary never collapses, never empties and takes the remaining space.\n *\n * `ZoneConfigSchema`'s JSDoc states this — *\"Setting these on primary has no effect\"* — so the\n * diagnostic enforces a rule the contract already carries.\n */\n INERT_PRIMARY_ZONE_FIELD = 'inert-primary-zone-field',\n /** A zone whose `minWidth` exceeds its `maxWidth`. The drag constraints cannot both be honoured. */\n ZONE_WIDTH_BOUNDS_INVERTED = 'zone-width-bounds-inverted',\n}\n\n/** One finding about an authored {@link NavigationLayout}. */\nexport interface NavigationLayoutDiagnostic {\n code: NavigationLayoutDiagnosticCode;\n severity: NavigationLayoutDiagnosticSeverity;\n /** Where in the layout, as an authoring path: `zones.primary.transitions.read`. */\n path: string;\n /** What is wrong and what the runtime will do instead. */\n message: string;\n /** The edit that fixes it. Always present — a diagnostic with no remedy is a complaint. */\n remedy: string;\n}\n\n/**\n * Read an authored {@link NavigationLayout} and report what the runtime will silently do differently\n * from what it says.\n *\n * ## Why this exists\n *\n * Nothing validated a navigation layout beyond its SHAPE until 2026-09-25 — there was no `refine`\n * anywhere in this file — so three classes of declaration were accepted and quietly ignored. The\n * escalation in {@link NavigationLayoutDiagnosticCode.SPLIT_WITHOUT_ADJACENT_ZONE} is the expensive\n * one: it is documented in this file's own prose and produces a dialog where a pane was asked for.\n *\n * ## It REPORTS; it never refuses, and that is deliberate\n *\n * A `superRefine` on {@link NavigationLayoutSchema} was the obvious implementation and was rejected.\n * The layout is parsed inside `AppConfiguration_Frontend_Schema` at application boot, so a refusal\n * there would stop an application from starting over a split that renders as a dialog — wildly\n * disproportionate, and the exact shape `.claude/rules/application-creation-directive.md` forbids:\n * a mechanism that refuses rather than marks. The precedent for the chosen shape is the\n * administrative-continuity boot report, which is non-fatal for the same reason.\n *\n * Pure, so it is equally usable from a test, a CLI check or a future authoring-time gate.\n *\n * ## What this CANNOT see, and what covers it instead\n *\n * A layout is not the only place a `SPLIT` is declared. A resource's `navigationOverrides`, a\n * relationship transition and an action presentation all reach the resolver, and none of them is in\n * the layout — so the only real instance of `SPLIT_WITHOUT_ADJACENT_ZONE` in this repository was\n * INVISIBLE here: Wonder Todos declared `SPLIT` on `todos.READ` against a single-zone layout, every\n * drill-in became a dialog for the life of the declaration, and this check reported clean.\n *\n * Re-deriving that population statically would mean a second enumeration of every tier that can\n * produce a SPLIT, kept in step with the resolver by hand. The resolver has already decided, so the\n * report lives at the DECISION instead: `useNavigationController` warns once per resource+operation\n * when a resolution carries `SPLIT_ESCALATED_NO_ADJACENT_ZONE`. That covers every tier by\n * construction and cannot drift. This function keeps the half a boot check can answer — the layout's\n * own declarations, before anything navigates.\n *\n * ## The rule that was considered and REJECTED, because it fires on correct code\n *\n * *\"A `secondary` zone is declared and no transition in the layout resolves to `SPLIT`, so the pane\n * can never open.\"* It reads like the natural companion to the rules above and it is wrong: Wonder\n * CRM declares `secondary` while `zones.primary.transitions.read` is `PUSH`, and its pane is reached\n * ONLY by `deal`'s per-resource `navigationOverrides: [{ transition: SPLIT }]` — a declaration this\n * function cannot see, because it lives in a resource's ui-behavior rather than in the layout. The\n * rule would have reported the repository's one deliberate two-zone application as misconfigured.\n *\n * A checker that mostly reports correct code trains its reader to skim the reports that matter.\n *\n * (That rationale also mis-named Wonder CRM as \"the repository's one deliberate two-zone\n * application\". The workbench declares `zones.secondary` too — and unlike CRM its pane IS reached\n * from the layout, so the rejected rule would not have fired on it. The rejection stands on CRM\n * alone.)\n */\nexport function collectNavigationLayoutDiagnostics(layout: NavigationLayout): NavigationLayoutDiagnostic[] {\n const diagnostics: NavigationLayoutDiagnostic[] = [];\n const hasSecondary = layout.zones.secondary !== undefined;\n const hasCompanion = layout.zones.companion !== undefined;\n const hasAdjacentZone = hasSecondary || hasCompanion;\n\n /*\n * Every place a layout can declare a transition. Enumerated rather than walked, because the set is\n * closed by `NavigationLayoutSchema` and a structural walk would also reach the per-resource\n * overrides this function deliberately cannot see (see the rejected rule above).\n */\n const transitionSources: { path: string; transitions: ZoneTransitions | undefined }[] = [\n { path: 'zones.primary.transitions', transitions: layout.zones.primary?.transitions },\n { path: 'zones.secondary.transitions', transitions: layout.zones.secondary?.transitions },\n { path: 'zones.companion.transitions', transitions: layout.zones.companion?.transitions },\n { path: 'appLevel.transitions', transitions: layout.appLevel?.transitions },\n { path: 'fromOverlay.transitions', transitions: layout.fromOverlay?.transitions },\n { path: `['${ViewportBreakpoint.MOBILE}'].transitions`, transitions: layout[ViewportBreakpoint.MOBILE]?.transitions },\n { path: `['${ViewportBreakpoint.VERT_TABLET}'].transitions`, transitions: layout[ViewportBreakpoint.VERT_TABLET]?.transitions },\n ];\n\n for (const source of transitionSources) {\n if (!source.transitions) continue;\n for (const [operation, config] of Object.entries(source.transitions)) {\n if (config === undefined) continue;\n if (getTransitionVerb(config as TransitionConfig) !== NavigationTransition.SPLIT) continue;\n const path = `${source.path}.${operation}`;\n\n if (!hasAdjacentZone) {\n diagnostics.push({\n code: NavigationLayoutDiagnosticCode.SPLIT_WITHOUT_ADJACENT_ZONE,\n severity: NavigationLayoutDiagnosticSeverity.ERROR,\n path,\n message:\n 'Declares SPLIT, and the layout declares no `secondary` or `companion` zone. '\n + 'The split escalates to an OVERLAY, so this operation opens as a dialog rather than beside its source.',\n remedy: 'Declare `zones.secondary`, or change this transition to the one you want (PUSH, REPLACE or OVERLAY).',\n });\n continue;\n }\n\n if (isPersistentTransition(config as TransitionConfig) && !hasCompanion) {\n diagnostics.push({\n code: NavigationLayoutDiagnosticCode.PERSISTENT_SPLIT_WITHOUT_COMPANION,\n severity: NavigationLayoutDiagnosticSeverity.ERROR,\n path,\n message:\n 'Declares a `persistent` SPLIT, which targets the `companion` zone specifically and does NOT '\n + 'fall back to `secondary`. With no companion declared it escalates to an OVERLAY.',\n remedy: 'Declare `zones.companion`, or drop `persistent` so the split may use `secondary`.',\n });\n }\n }\n }\n\n const primary = layout.zones.primary;\n if (primary) {\n const inertOnPrimary = (['minWidth', 'maxWidth', 'onEmpty', 'responsiveCollapse'] as const)\n .filter(field => primary[field] !== undefined);\n for (const field of inertOnPrimary) {\n diagnostics.push({\n code: NavigationLayoutDiagnosticCode.INERT_PRIMARY_ZONE_FIELD,\n severity: NavigationLayoutDiagnosticSeverity.WARNING,\n path: `zones.primary.${field}`,\n message:\n `\\`${field}\\` has no effect on the primary zone: primary never collapses, never empties, and takes `\n + 'the space the other zones leave.',\n remedy: `Move \\`${field}\\` to \\`zones.secondary\\` or \\`zones.companion\\`, or remove it.`,\n });\n }\n }\n\n for (const zoneName of ['primary', 'secondary', 'companion'] as const) {\n const zone = layout.zones[zoneName];\n if (zone?.minWidth !== undefined && zone.maxWidth !== undefined && zone.minWidth > zone.maxWidth) {\n diagnostics.push({\n code: NavigationLayoutDiagnosticCode.ZONE_WIDTH_BOUNDS_INVERTED,\n severity: NavigationLayoutDiagnosticSeverity.ERROR,\n path: `zones.${zoneName}`,\n message: `\\`minWidth\\` (${zone.minWidth}) exceeds \\`maxWidth\\` (${zone.maxWidth}); the drag constraints cannot both hold.`,\n remedy: 'Lower `minWidth` or raise `maxWidth` so the range is non-empty.',\n });\n }\n }\n\n return diagnostics;\n}\n\n// ════════════════════════════════════════════════════════════════\n// Per-Resource Operation Override\n// ════════════════════════════════════════════════════════════════\n\n// DELETED — NavigationOperationOverrideSchema and NavigationOperationOverride\n// Transferred to @wildo-ai/saas-frontend-lib (resources.frontend.schemas)\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboarding.shared.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"onboarding.shared.schemas.d.ts","sourceRoot":"","sources":["../../../../src/config/frontend/onboarding.shared.schemas.ts"],"names":[],"mappings":"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"}
|