@unified-product-graph/core 0.27.0 → 0.28.0

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/index.d.ts CHANGED
@@ -1808,6 +1808,13 @@ declare const UPG_EDGE_CATALOG: {
1808
1808
  source_type: string;
1809
1809
  target_type: string;
1810
1810
  };
1811
+ surface_deviates_via_technical_debt_item: {
1812
+ forward_verb: string;
1813
+ reverse_verb: string;
1814
+ classification: "cross-domain";
1815
+ source_type: string;
1816
+ target_type: string;
1817
+ };
1811
1818
  feature_occupies_surface: {
1812
1819
  forward_verb: string;
1813
1820
  reverse_verb: string;
@@ -12762,6 +12769,85 @@ type SurfacePersistence = 'always' | 'conditional' | 'on_demand' | 'transient';
12762
12769
  * - `user_configurable` — the end user chooses what occupies it.
12763
12770
  */
12764
12771
  type SurfaceExtensibility = 'closed' | 'plugin_registerable' | 'user_configurable';
12772
+ /** How many instances of the surface exist, in UML multiplicity notation.
12773
+ *
12774
+ * `capacity` counts OCCUPANTS INSIDE one instance; `cardinality` counts the
12775
+ * INSTANCES themselves. A slot with `capacity: 1` still says nothing about
12776
+ * whether the product renders one such slot or forty.
12777
+ *
12778
+ * - `'1'` — exactly one instance, always present.
12779
+ * - `'0..1'` — at most one; may not be rendered at all.
12780
+ * - `'1..n'` — at least one, and more may be rendered.
12781
+ * - `'0..n'` — any number, including none.
12782
+ *
12783
+ * Spelled in UML multiplicity rather than snake_case words because the notation
12784
+ * is the lingua franca for the question and reads unambiguously in a diff. The
12785
+ * registry already carries non-identifier enum values where the domain has its
12786
+ * own notation (`headcount_band: '1-10'`, `openapi_version: 'v3.1'`).
12787
+ */
12788
+ type SurfaceCardinality = '1' | '0..1' | '1..n' | '0..n';
12789
+ /** What an instance of the surface is scoped to.
12790
+ *
12791
+ * Read with `cardinality`: together they say whether "the product has an
12792
+ * inspector panel" is a true sentence, or whether the truth is "every document
12793
+ * pane has its own inspector panel, and three can show different content at
12794
+ * once". Without this, a graph asserts the former when it means the latter.
12795
+ *
12796
+ * - `global` — one instance serves the whole product; its state is shared.
12797
+ * - `per_parent` — each containing surface owns its own instance with its own
12798
+ * state. "Parent" is the `surface_contains_surface` parent (or the
12799
+ * `screen_renders_surface` host when the surface sits at the top of a screen).
12800
+ */
12801
+ type SurfaceInstanceScope = 'global' | 'per_parent';
12802
+ /** How the occupants of a surface relate to one another.
12803
+ *
12804
+ * The three modes need genuinely different governance, and conflating them is
12805
+ * what makes a contention check misfire:
12806
+ *
12807
+ * - `exclusive` — one occupant wins and the others are not rendered. This is
12808
+ * contention in the strict sense, and it is the mode that needs an
12809
+ * `arbitration_rule`.
12810
+ * - `additive` — all occupants coexist and are rendered together. Nobody is
12811
+ * suppressed, so the open question is ORDER rather than victory; record the
12812
+ * ordering in `arbitration_rule`.
12813
+ * - `chained` — each occupant WRAPS the next, typically by invoking a
12814
+ * render-default callback it is handed. Not contention but a trust model: an
12815
+ * occupant that never calls the callback silently deletes everything
12816
+ * downstream of it. Many occupants and no arbitration rule is the DESIGNED
12817
+ * shape here, not a defect, so `chained` is exempt from
12818
+ * `contended-surface-without-arbitration`.
12819
+ *
12820
+ * EXEMPTION IS DECLARE-TO-EARN. A surface that leaves `composition_mode` unset
12821
+ * keeps firing the contention check: the default posture stays suspicious, and
12822
+ * silence has to be claimed deliberately. Declaring `chained` is a factual
12823
+ * claim about how the code composes, and claiming it falsely to quiet the check
12824
+ * is the same category of error as filling `arbitration_rule` with a
12825
+ * placeholder.
12826
+ */
12827
+ type SurfaceCompositionMode = 'exclusive' | 'additive' | 'chained';
12828
+ /** Whether the arbitration answer is enforced, written down, both, or neither.
12829
+ *
12830
+ * `arbitration_rule` is free text and its absence is meaningful, but absence
12831
+ * alone conflates three very different situations with three very different
12832
+ * remediations. This property separates them:
12833
+ *
12834
+ * - `enforced_documented` — the code enforces a rule and `arbitration_rule`
12835
+ * transcribes it. The healthy state.
12836
+ * - `enforced_undocumented` — the code enforces a rule that was never written
12837
+ * down. Remediation is ten minutes of transcription, not a design decision.
12838
+ * - `safe_by_coincidence` — nothing enforces anything, and the surface behaves
12839
+ * only because the occupants happen not to collide (disjoint enum values,
12840
+ * mutually exclusive conditions). The most dangerous state, because it looks
12841
+ * settled from the outside and breaks the first time an occupant is added.
12842
+ * - `none` — nobody ever decided. Remediation is a design meeting.
12843
+ *
12844
+ * THIS IS NOT AN ESCAPE HATCH. Declaring `enforced_documented` does not by
12845
+ * itself silence `contended-surface-without-arbitration`: the detector still
12846
+ * requires a non-empty `arbitration_rule`, so claiming the rule is documented
12847
+ * without documenting it changes nothing. `safe_by_coincidence` and `none`
12848
+ * make the check fire whatever else is recorded, because both are admissions.
12849
+ */
12850
+ type SurfaceArbitrationState = 'enforced_documented' | 'enforced_undocumented' | 'safe_by_coincidence' | 'none';
12765
12851
  /** A place in the UI, its occupants, and the rule that arbitrates between them.
12766
12852
  *
12767
12853
  * `screen` answers *which route is this?*; `feature_area` answers *who owns
@@ -12783,6 +12869,7 @@ type SurfaceExtensibility = 'closed' | 'plugin_registerable' | 'user_configurabl
12783
12869
  * what it draws with: `surface_renders_design_component`
12784
12870
  * how it is judged: `surface_measured_by_metric`
12785
12871
  * replacement: `surface_supersedes_surface`
12872
+ * intent-versus-reality: `surface_deviates_via_technical_debt_item`
12786
12873
  *
12787
12874
  * @example
12788
12875
  * const properties: SurfaceProperties = {
@@ -12790,7 +12877,11 @@ type SurfaceExtensibility = 'closed' | 'plugin_registerable' | 'user_configurabl
12790
12877
  * persistence: 'conditional',
12791
12878
  * visibility_condition: 'A node is selected and the inspector is not collapsed.',
12792
12879
  * capacity: 1,
12880
+ * cardinality: '0..n',
12881
+ * instance_scope: 'per_parent',
12882
+ * composition_mode: 'exclusive',
12793
12883
  * arbitration_rule: 'The most recently selected node wins. A pinned inspector outranks selection until unpinned.',
12884
+ * arbitration_state: 'enforced_documented',
12794
12885
  * extensibility: 'plugin_registerable',
12795
12886
  * mutates_content: true,
12796
12887
  * dimensional_constraint: '292px wide, fixed',
@@ -12809,7 +12900,16 @@ interface SurfaceProperties {
12809
12900
  */
12810
12901
  visibility_condition?: string;
12811
12902
  /**
12812
- * How many occupants the surface holds at once, as a non-negative count.
12903
+ * How many occupants ONE INSTANCE of the surface holds at once, as a
12904
+ * non-negative count. Count the instances themselves with `cardinality`.
12905
+ *
12906
+ * CAPACITY IS ALWAYS INTENT, NEVER OBSERVED BEHAVIOUR. It records the cap the
12907
+ * design asserts, so a banner region declared `capacity: 1` keeps saying 1
12908
+ * even after someone finds it rendering four. Reality that has drifted from
12909
+ * the declared intent is recorded as a trackable, assignable debt item on
12910
+ * `surface_deviates_via_technical_debt_item`, not by quietly editing this
12911
+ * number up to match the bug. Editing it to match would destroy the only
12912
+ * record that a gap exists.
12813
12913
  *
12814
12914
  * ABSENT MEANS UNBOUNDED. UPG has no union-typed property primitive
12815
12915
  * (`PropertyDefinition.type` is a single scalar kind), so the proposed
@@ -12819,6 +12919,24 @@ interface SurfaceProperties {
12819
12919
  * "nothing may occupy this surface" (a reserved place), not "unbounded".
12820
12920
  */
12821
12921
  capacity?: number;
12922
+ /**
12923
+ * How many instances of this surface exist. `capacity` counts occupants
12924
+ * within one instance; this counts the instances.
12925
+ */
12926
+ cardinality?: SurfaceCardinality;
12927
+ /**
12928
+ * What an instance is scoped to: one shared instance for the product, or one
12929
+ * per containing surface. Decides whether "the product has this surface" is
12930
+ * a true sentence or a per-parent one.
12931
+ */
12932
+ instance_scope?: SurfaceInstanceScope;
12933
+ /**
12934
+ * How the occupants relate: one wins (`exclusive`), all coexist
12935
+ * (`additive`), or each wraps the next (`chained`). Declaring `chained`
12936
+ * exempts the surface from `contended-surface-without-arbitration`; leaving
12937
+ * this unset does not.
12938
+ */
12939
+ composition_mode?: SurfaceCompositionMode;
12822
12940
  /**
12823
12941
  * Who wins when more occupants want the surface than `capacity` allows, and
12824
12942
  * why.
@@ -12830,6 +12948,13 @@ interface SurfaceProperties {
12830
12948
  * @example "Highest priority wins; ties break to the most recently updated."
12831
12949
  */
12832
12950
  arbitration_rule?: string;
12951
+ /**
12952
+ * Whether the arbitration answer is enforced, written down, both, or neither.
12953
+ * Separates "enforced in code but never transcribed" (ten minutes of typing)
12954
+ * from "never decided" (a design meeting) from "safe only because nothing has
12955
+ * collided yet" (the dangerous one).
12956
+ */
12957
+ arbitration_state?: SurfaceArbitrationState;
12833
12958
  /** Who may add occupants to the surface. */
12834
12959
  extensibility?: SurfaceExtensibility;
12835
12960
  /**
@@ -20475,6 +20600,15 @@ interface EntityCheck {
20475
20600
  * 2. `{ property, value }` (0.17.0) — count entities whose `property` equals
20476
20601
  * `value`, e.g. `metric` where `designation === 'north_star'`.
20477
20602
  * 3. `{ status }` — count entities in a given lifecycle status.
20603
+ * 4. `{ property, present, except_property, except_value }` (0.28.0) — form 1,
20604
+ * but entities whose `except_property` equals `except_value` are removed
20605
+ * from the counted population first. This is what lets a detector carry a
20606
+ * declared exemption: `surface` counts as missing an `arbitration_rule`
20607
+ * unless it has declared `composition_mode: 'chained'`, for which having
20608
+ * no rule is the designed shape rather than an omission. The exclusion is
20609
+ * an intersection, not a marginal, so it cannot be derived from forms 1-3;
20610
+ * collectors compute it from `UPG_PRESENCE_EXCEPT_SPECS`, which is derived
20611
+ * from these filters, and store it under `presenceExceptKey(...)`.
20478
20612
  */
20479
20613
  filter?: Record<string, unknown>;
20480
20614
  /** Comparison operator */
@@ -21622,6 +21756,52 @@ interface UPGCuratedAntiPattern {
21622
21756
  * stable URL fragments and content surfaces.
21623
21757
  */
21624
21758
  declare const UPG_ANTI_PATTERNS: readonly UPGCuratedAntiPattern[];
21759
+ /**
21760
+ * One `{ property, present, except_property, except_value }` filter declared
21761
+ * somewhere in `UPG_ANTI_PATTERNS`, flattened for collectors.
21762
+ *
21763
+ * @see UPG_PRESENCE_EXCEPT_SPECS
21764
+ */
21765
+ interface UPGPresenceExceptSpec {
21766
+ /** Entity type the count is taken over. */
21767
+ entity_type: string;
21768
+ /** Property whose presence is being counted. */
21769
+ property: string;
21770
+ /** Property that removes an entity from the counted population. */
21771
+ except_property: string;
21772
+ /** Value of `except_property` that triggers the exclusion. */
21773
+ except_value: string;
21774
+ }
21775
+ /**
21776
+ * Every except-qualified presence filter the catalog declares (0.28.0).
21777
+ *
21778
+ * A collector cannot compute joint property counts speculatively: indexing
21779
+ * every (property, other-property, other-value) triple is quadratic in
21780
+ * properties-per-node and would tax every `validate_graph` call to serve one
21781
+ * detector. Nor can it derive the count arithmetically from the existing
21782
+ * indexes, because those record marginals and the question is an intersection.
21783
+ *
21784
+ * So the catalog declares what it needs and collectors compute exactly that
21785
+ * and no more. Today the list holds one entry (`surface.arbitration_rule`
21786
+ * except `composition_mode: 'chained'`); it stays correct without maintenance
21787
+ * because it is derived from the conditions themselves.
21788
+ *
21789
+ * @example
21790
+ * UPG_PRESENCE_EXCEPT_SPECS[0]
21791
+ * // → { entity_type: 'surface', property: 'arbitration_rule',
21792
+ * // except_property: 'composition_mode', except_value: 'chained' }
21793
+ */
21794
+ declare const UPG_PRESENCE_EXCEPT_SPECS: readonly UPGPresenceExceptSpec[];
21795
+ /**
21796
+ * Canonical key for an except-qualified presence count, shared by the
21797
+ * collectors that build `countsByTypeAndPropertyPresenceExcept` and the
21798
+ * evaluator that reads it. Both sides must agree, so neither spells it inline.
21799
+ *
21800
+ * @example
21801
+ * presenceExceptKey('arbitration_rule', 'composition_mode', 'chained')
21802
+ * // → "arbitration_rule!composition_mode=chained"
21803
+ */
21804
+ declare function presenceExceptKey(property: string, exceptProperty: string, exceptValue: string): string;
21625
21805
  /**
21626
21806
  * Look up a curated anti-pattern by its slug id.
21627
21807
  *
@@ -21788,6 +21968,28 @@ interface AntiPatternInputs {
21788
21968
  * carries this property" rather than crashing.
21789
21969
  */
21790
21970
  countsByTypeAndPropertyPresence?: Record<string, Record<string, number>>;
21971
+ /**
21972
+ * As `countsByTypeAndPropertyPresence`, but counted over a population that
21973
+ * EXCLUDES entities carrying a declared exemption (0.28.0). Only required for
21974
+ * anti-patterns with a `filter: { property, present, except_property,
21975
+ * except_value }` clause (currently 1:
21976
+ * `contended-surface-without-arbitration`, which exempts surfaces that have
21977
+ * declared `composition_mode: 'chained'`).
21978
+ *
21979
+ * Shape: type → `presenceExceptKey(property, except_property, except_value)`
21980
+ * → count of entities of that type that carry a value for `property` AND are
21981
+ * NOT exempt. The evaluator derives the absent-and-not-exempt count from this
21982
+ * plus `countsByType` and `countsByTypeAndProperty`, so collectors still
21983
+ * never enumerate absences.
21984
+ *
21985
+ * Collectors build it by walking `UPG_PRESENCE_EXCEPT_SPECS` rather than
21986
+ * indexing property pairs speculatively, which would be quadratic in
21987
+ * properties-per-node for the benefit of one detector. Absent input reads as
21988
+ * zero, which makes a stale collector OVER-report (every non-exempt entity
21989
+ * reads as missing the property) rather than silently under-report — the safe
21990
+ * direction for a check whose job is to notice omissions.
21991
+ */
21992
+ countsByTypeAndPropertyPresenceExcept?: Record<string, Record<string, number>>;
21791
21993
  /**
21792
21994
  * Boolean presence per `(source_type, edge_type, target_type)` tuple.
21793
21995
  * Key format: `${source_type}|${edge_type}|${target_type}`.
@@ -23062,7 +23264,7 @@ declare function checkHeaderSealText(text: string): UPGHeaderSealReport;
23062
23264
  * it stamps the `upg_version` field of every `.upg` file written by the SDK.
23063
23265
  * The `check:version-lockstep` gate enforces this at release time.
23064
23266
  */
23065
- declare const UPG_VERSION: "0.27.0";
23267
+ declare const UPG_VERSION: "0.28.0";
23066
23268
  /**
23067
23269
  * The `.upg` JSON document format version. Written to the `upg_version` field.
23068
23270
  * Evolves independently from `UPG_VERSION` (the catalogue version).
@@ -23187,4 +23389,4 @@ declare const UPG_EDGE_COUNT: number;
23187
23389
  */
23188
23390
  declare const UPG_META_COUNT: number;
23189
23391
 
23190
- export { type A11yAnnotationProperties, type A11yAuditProperties, type A11yGuidelineProperties, type A11yIssueProperties, type A11yStandardProperties, ANALYTICS_DATA_PLAYBOOK, type AcceptanceCriterionProperties, type AccessPolicyProperties, type AccountProperties, type AcquisitionChannelProperties, type AdCreativeProperties, type AffinityClusterProperties, type AgentDefinitionProperties, type AgentHookProperties, type AgentSessionProperties, type AgentSkillProperties, type AgentTaskProperties, type AggregateProperties, type AiCostTrackerProperties, type AiDatasetProperties, type AiExperimentProperties, type AiGuardrailProperties, type AiModelProperties, type AiTraceProperties, type AlertRuleProperties, type AnnotationProperties, type AntiPatternInputs, type AntiPatternViolation, type AnyUPGEntityType, type ApiContractProperties, type ApiEcosystemProperties, type ApiEndpointProperties, type ApproachBinding, type ApproachFilter, type ApproachRun, type ApproachRuntime, type ApprovalRecordProperties, type AssumptionProperties, type AttributionModelProperties, type AuditLogPolicyProperties, BUSINESS_GROWTH_METRIC_DRIVEN_PLAYBOOK, BUSINESS_GTM_GROWTH_PLAYBOOK, BUSINESS_MARKETING_AUDIENCE_FIRST_PLAYBOOK, type BehavioralSegmentProperties, type BenchmarkCheck, type BetaProgramProperties, type BoundedContextProperties, type BrandAssetProperties, type BrandColourProperties, type BrandIdentityProperties, type BrandImageryProperties, type BrandLogoProperties, type BrandTypographyProperties, type BrandVoiceProperties, type BugProperties, type BuildArtifactProperties, type BusinessModelProperties, CLASSIFICATION_EDGE_PROPERTY_SCHEMA, CONTENT_DEPTH_WARNING_RULES, COVERAGE_ANTI_PATTERNS, type Cadence, type CapabilityProperties, type CapacityPlanProperties, type CauseConfidence, type CeremonyProperties, type CertificationProperties, type ChangeRequestProperties, type ChangelogProperties, type ChurnReasonProperties, type CiPipelineProperties, type ClassificationAxisProperties, type ClassificationCapability, type ClassificationCapabilitySurface, type ClassificationCommitment, type ClassificationValueProperties, type CodeRepositoryProperties, type CohortProperties, type ComfortLevel, type CommandProperties, type CommunityInitiativeProperties, type CompetitiveAnalysisProperties, type CompetitiveBattleCardProperties, type CompetitorFeatureProperties, type CompetitorProperties, type CompetitorSignalProperties, type ComplianceFrameworkProperties, type ComplianceRequirementProperties, type Confidence, type ConformanceLevel, type ConstraintKind, type ConstraintOrigin, type ConstraintProperties, type ConstraintStatus, type ContactProperties, type ContentCalendarProperties, type ContentPieceProperties, type ContentStrategyProperties, type ContentThemeProperties, type ContractClauseProperties, type ContractProperties, type CostStructureProperties, type CountBenchmark, type Cron, type CrossProductEligibleEdgeType, type CrossProductScope, type CulturalAdaptationProperties, type CustomerFeedbackProperties, type CustomerHealthScoreProperties, type CustomerJourneyStageProperties, type CustomerRelationshipProperties, DEFAULT_ENTITY_EMOJI, DEFERRED_PROPOSED_BY_CONTRACT, DEFER_EDGE_PROPERTY_SCHEMA, DISCOVERY_RESEARCH_VALIDATION_PLAYBOOK, type DashboardProperties, type DataClassificationProperties, type DataContractProperties, type DataDomainProperties, type DataFlowProperties, type DataLineageProperties, type DataModelProperties, type DataPipelineProperties, type DataProductProperties, type DataQualityRuleProperties, type DataSensitivity, type DataSourceProperties, type DatabaseSchemaProperties, type DealProperties, type DecisionProperties, type DeliberateOnlyEdgeType, type DeliverableProperties, type DemandGenProgramProperties, type DepartmentProperties, type DependencyProperties, type DeploymentProperties, type DeprecatedUPGEntityType, type DesignComponentProperties, type DesignConceptProperties, type DesignGuidelineProperties, type DesignPatternProperties, type DesignQuestionProperties, type DesignSprintProperties, type DesignSystemProperties, type DesignTokenProperties, type DesiredOutcomeProperties, type DeveloperPortalProperties, type DifficultyLevel, type DiscountStrategyProperties, type DistributionChannelProperties, type DocumentProperties, type DocumentationTemplateProperties, type DomainActivation, type DomainCountCheck, type DomainEntityProperties, type DomainEventProperties, type DomainGuideStep, type DomainPopulationCheck, type Duration, ENGINEERING_PLATFORM_PLAYBOOK, ENTITY_EMOJI, EXPERIENCE_DESIGN_BRAND_PLAYBOOK, type EducationProgramProperties, type EmailSequenceProperties, type EmptyCell, type EmptyCellRationaleKind, type EntityCheck, type EntitySequenceStep, type EntityTypeMeta, type EntityTypeResolution, type EntryMode, type EpicProperties, type ErrorBudgetProperties, type EvalBenchmarkProperties, type EvalRunProperties, type EvaluateAntiPatternsOptions, type EventProperties, type EventSchemaProperties, type EvidenceDirection, type EvidenceProperties, type ExperimentPlanProperties, type ExperimentProperties, type ExperimentRunProperties, type ExternalApiProperties, FOUNDATIONS_PLAYBOOK, type FeasibilityStudyProperties, type FeatureAreaProperties, type FeatureFlagProperties, type FeatureProperties, type FeatureRequestProperties, type FeedbackProgramProperties, type FeedbackThemeProperties, type FeedbackVoteProperties, type FixProperties, type ForecastProperties, type FrameworkCategory, type FrameworkComputedProperty, type FrameworkConstant, type FrameworkDataSpec, type FrameworkEducation, type FrameworkEntityTypeSpec, type FrameworkExerciseProperties, type FrameworkInvocationStep, type FrameworkLayout, type FrameworkLevel, type FrameworkOrigin, type FrameworkPresentationSpec, type FrameworkPropertyRequirement, type FrameworkScoringMethod, type FrameworkSlot, type FrameworkStep, type FrameworkStructureSpec, type FrameworkValidationResult, type FrequencyRating, type FunnelProperties, type FunnelStage, type FunnelStepProperties, type GlossaryTermProperties, type GrowthCampaignProperties, type GrowthLoopProperties, type GtmStrategyProperties, type GuardrailStatus, type HallucinationReportProperties, type HealthStatus, type HelpVideoProperties, type HypothesisEvidenceProperties, type HypothesisProperties, type ISO4217, type ISODate, type ISODateTime, type IdealCustomerProfileProperties, type IncidentProperties, type IncidentSeverity, type InfrastructureComponentProperties, type InitiativeProperties, type InsightProperties, type IntegrationPartnerProperties, type IntegrationPatternProperties, type IntelligenceCondition, type InteractionSpecProperties, type InternalDocProperties, type InterviewGuideProperties, type InvestigationProperties, type InvoiceProperties, type IpAssetProperties, type JobProperties, type JobStepProperties, type JourneyActionProperties, type JourneyPhaseProperties, type JourneyStepProperties, type JourneyType, type KeyActivityProperties, type KeyResourceProperties, type KeyResultProperties, type KnowledgeBaseArticleProperties, LEGACY_PRODUCT_STAGES, type LaunchProperties, type LeadProperties, type LearningPathProperties, type LearningProperties, type LegalEntityProperties, type LibraryDependencyProperties, type LifecyclePhase, type LifecycleRenderShape, type LifecycleRenderState, type LifecycleRenderTransition, type LifecycleState, type LocaleConfigProperties, type LocaleProperties, type LogLevel, type LowMedHigh, MARKDOWN_FORMAT_VERSION, MARKET_COMPETITIVE_PLAYBOOK, type MarketSegmentProperties, type MarketTrendProperties, type MarketingCampaignPlanProperties, type MarketingChannelProperties, type MarketingPlatform, type MarketingStrategyProperties, type MarketplaceListingProperties, type MatrixSlot, type MaturityLevel, type MessagingProperties, type MetricCategory, type MetricDataPoint, type MetricDesignation, type MetricHealth, type MetricImpactLevel, type MetricIndicatorDirection, type MetricProperties, type MetricQualityAssessmentProperties, type MetricSegmentType, type MetricStatisticalFunction, type MilestoneProperties, type MissionProperties, type ModelComparisonProperties, type ModifiedProperty, type MonitorProperties, type NamedGroup, type NeedMaturity, type NeedProperties, type NeedValence, type NpsCampaignProperties, OPERATIONS_QUALITY_PLAYBOOK, type ObjectionProperties, type ObjectiveProperties, type ObservationProperties, type OnCallRotationProperties, type OperatingLifecycleProperties, type OperatingStageProperties, type OpportunityProperties, type OrganizationProperties, type OrphanCheck, type OutcomeProperties, PRODUCT_DELIVERY_PLAYBOOK, PROPERTY_MODIFIERS, PROPERTY_MODIFIER_SEMANTICS, PROPERTY_SCALE_MAP, type ParticipantProperties, type PartnerProgramProperties, type PartnerRevenueShareProperties, type PartnerTierProperties, type PartnershipProperties, type PaywallProperties, type PenetrationTestProperties, type PersonProperties, type PersonaProperties, type PipelineSalesProperties, type PipelineStageProperties, type PlanningCycleProperties, type PlaybookBinding, type PlaybookFilter, type PlaybookProperties, type PlaybookRun, type PlaybookRuntime, type PortfolioProperties, type PositioningProperties, type PostmortemProperties, type PressReleaseProperties, type PricingStrategyProperties, type PricingTierProperties, type PrimitiveProperties, type Priority, type PrivacyPolicyProperties, type ProductAreaProperties, type ProductProperties, type ProductStageCoercion, type ProgramProperties, type ProjectProperties, type PromptTemplateProperties, type PromptVersionProperties, type ProofPointProperties, type PropertyDefinition, type PropertyModifier, type PropertySchema, type Protocol, type PrototypeProperties, type ProxyConfidence, type ProxyReason, type QaSessionProperties, type QueueTopicProperties, type QuoteDocumentProperties, type QuoteProperties, RECORD_ENTITY_TYPES, REFLECT_MODES, REGISTRY_PRODUCT_ID, type RatioBenchmark, type ReadModelProperties, type RebuttalProperties, type ReflectMode, type RegionalPricingProperties, type RegressionTestProperties, type RelationshipBenchmark, type RelationshipCheck, type ReleaseProperties, type ReleaseStrategyProperties, type ReportProperties, type ResearchPlanProperties, type ResearchQuestionProperties, type ResearchStudyProperties, type ResourceAllocationProperties, type RetrospectiveProperties, type RevenueStreamProperties, type ReviewGateProperties, type RiskProperties, type RiskRegisterProperties, type RoadmapItemProperties, type RoadmapProperties, type RoadmapThemeProperties, type RoleProperties, type RootCauseProperties, type RuleStrength, type RunContext, type RunbookProperties, STRATEGY_OUTCOMES_PLAYBOOK, type SalesMotionProperties, type ScreenProperties, type ScreenStateProperties, type SecurityAuditProperties, type SecurityControlProperties, type SecurityPolicyProperties, type SecurityReviewProperties, type Semver, type SeoKeywordProperties, type SerializeOptions, type ServiceBlueprintProperties, type ServiceLevelAgreementProperties, type ServiceLevelIndicatorProperties, type ServiceLevelObjectiveProperties, type ServiceProperties, type SignalChannel, type SignalSentiment, type SignalUrgency, type SkillProperties, type SocialPostProperties, type SolutionProperties, type SpecificationProperties, type StageRange, type StakeholderProperties, type StatusCategory, type StatusReportProperties, type Step, type StepKind, type StepOutput, type StepOutputKind, type StoryTaskProperties, type StrategicPillarProperties, type StrategicQuestionProperties, type StrategicThemeProperties, type StructurePattern, type SubSequenceStep, type SubscriptionProperties, type SuccessMilestoneProperties, type SupportTicketProperties, type SurfaceExtensibility, type SurfaceId, type SurfaceKind, type SurfacePersistence, type SurfaceProperties, type SurveyResponseProperties, type SwitchingCostProperties, type SymptomProperties, THIN_GRAPH_THRESHOLD, type TableColumn, type TargetCustomerSegmentProperties, type TaskProperties, type TeamOkrProperties, type TeamProperties, type TechnicalDebtItemProperties, type TerritoryProperties, type TestCaseProperties, type TestCoverageReportProperties, type TestEnvironmentProperties, type TestPlanProperties, type TestResultProperties, type TestSuiteProperties, type ThreatModelProperties, type ThreatProperties, type Timeframe, type TotalEntityCountCheck, type TouchpointProperties, type TranslationBundleProperties, type TranslationKeyProperties, type TrialConfigProperties, type TutorialProperties, type UPGAnchorEntity, type UPGAntiPattern, type UPGAntiPatternConcern, type UPGAntiPatternSeverity, type UPGApproach, type UPGApproachEnvelope, type UPGApproachId, type UPGAreaTaxonomyEntry, type UPGAssessment, type UPGBaseNode, type UPGBenchmarkSource, type UPGBoundaryDirection, type UPGBoundaryEdge, type UPGCrossEdge, type UPGCrossEdgeType, type UPGCrossOnlyEdgeType, type UPGCuratedAntiPattern, type UPGDocument, type UPGDomain, type UPGDomainBridge, type UPGDomainId, type UPGDomainPattern, type UPGDomainRing, type UPGDomainUsageGuide, type UPGEdge, type UPGEdgeDefinition, type UPGEdgeMigration, type UPGEdgeMigrationEndpoints, type UPGEdgePickHint, type UPGEdgeType, type UPGEntityType, type UPGEntityTypeMaturity, type UPGEnumScaleDefinition, type UPGEnumScaleValue, type UPGFramework, type UPGFrameworkMeta, type UPGHeader, type UPGHeaderCountsMismatch, type UPGHeaderIntegrity, type UPGHeaderIntegrityMismatch, type UPGHeaderProvenance, type UPGHeaderSealReport, type UPGIntegrity, type UPGLens, type UPGLensIntelligencePrompt, type UPGLifecycle, type UPGMappingConfidence, type UPGMemberKindKey, type UPGNode, type UPGOrganization, type UPGPlaybook, type UPGPortfolio, type UPGPortfolioDocument, type UPGPortfolioKind, type UPGProduct, type UPGProductArea, type UPGProductStage, type UPGPropertyMap, type UPGPropertyMigration, type UPGPropertyMigrationChange, type UPGRegion, type UPGRegionEntityMembership, type UPGRegionEntityRole, type UPGRegionId, type UPGRegionShape, type UPGRegistry, type UPGScalarToEdgeMigration, type UPGScaleDefinition, type UPGScalePoint, type UPGSource, type UPGSplitEdge, type UPGSplitMigration, type UPGSplitRoute, type UPGSplitRouteTarget, type UPGSplitTarget, type UPGTreeChild, type UPGTreeGapPolicy, type UPGTreePattern, type UPGTreePatternDetail, type UPGTreePatternEdge, type UPGTreePatternSummary, type UPGTypeLabel, type UPGTypeMigration, type UPGValidationError, type UPGValidationProfile, type UPGValidationResult, type UPGValidationWarning, type UPGWildcardEndpoint, UPG_ACTIVE_TYPES, UPG_ANTI_PATTERNS, UPG_ANTI_PATTERN_CONCERNS, UPG_APPROACHES, UPG_APPROACHES_BY_ID, UPG_AREA_TAXONOMY, UPG_AREA_TAXONOMY_BY_COVERAGE_KEY, UPG_CANONICAL_FORMAT_VERSION, UPG_CONTAINMENT_FREE_TYPES, UPG_COUNT_BENCHMARKS, UPG_CROSS_EDGE_TYPES, UPG_CROSS_ELIGIBLE_CATALOG_EDGE_TYPES, UPG_CROSS_ONLY_EDGE_TYPES, UPG_DELIBERATE_ONLY_EDGE_TYPES, UPG_DEPRECATED_TYPES, UPG_DOMAINS, UPG_DOMAIN_ACTIVATION, UPG_DOMAIN_COUNT, UPG_DOMAIN_GUIDES, UPG_DOMAIN_RINGS, UPG_EDGE_CATALOG, UPG_EDGE_COUNT, UPG_EDGE_MIGRATIONS, UPG_EDGE_PAIR_MAP, UPG_EDGE_TYPES, UPG_ENTITY_COUNT, UPG_ENTITY_META, UPG_ENTITY_META_BY_ID, UPG_ENTITY_META_BY_NAME, UPG_ENTITY_TO_DOMAIN, UPG_ENUM_SCALES, UPG_FORMAT_VERSION, UPG_FRAMEWORKS, UPG_FRAMEWORKS_BY_CATEGORY, UPG_FRAMEWORKS_BY_ID, UPG_FRAMEWORK_CATEGORIES, UPG_LENSES, UPG_LIFECYCLES, UPG_LIFECYCLE_FREE_TYPES, UPG_LIFECYCLE_PLANNED_TYPES, UPG_META_COUNT, UPG_MIGRATIONS, UPG_PLAYBOOKS, UPG_POLYMORPHIC_EDGE_KEYS, UPG_PORTFOLIO_KINDS, UPG_PORTFOLIO_SHARED_TYPES, UPG_PRODUCT_STAGES, UPG_PRODUCT_STAGE_COERCION_MAP, UPG_PROPERTY_MIGRATIONS, UPG_PROPERTY_SCHEMA, UPG_RATIO_BENCHMARKS, UPG_REGIONS, UPG_REGION_COUNT, UPG_REGION_MAP, UPG_RELATIONSHIP_BENCHMARKS, UPG_SCALAR_TO_EDGE_MIGRATIONS, UPG_SCALES, UPG_SPLIT_MIGRATIONS, UPG_STATUS_MIGRATIONS, UPG_STRUCTURE_PATTERNS, UPG_TREE_PATTERNS, UPG_TREE_PATTERNS_BY_ID, UPG_TYPES, UPG_TYPES_SET, UPG_TYPE_ALIASES, UPG_TYPE_LABELS, UPG_TYPE_LABELS_MAP, UPG_TYPE_NAMES, UPG_VALIDATION_PROFILES, UPG_VALID_CHILDREN, UPG_VERSION, UPG_WILDCARD_ENDPOINT, USERS_NEEDS_PLAYBOOK, type UnitEconomicsProperties, UnknownEntityTypeError, type UserAdvisoryBoardProperties, type UserFlowProperties, type UserJourneyProperties, type UserStoryProperties, type ValueObjectProperties, type ValuePropositionProperties, type ValueStreamProperties, type VariantProperties, type VisionProperties, type VulnerabilityProperties, type WalkMigrationChainResult, type WalkthroughProperties, type WebinarProperties, type WireframeProperties, type WorkflowArtifactProperties, type WorkflowRunProperties, type WorkflowTemplateProperties, type WorkspaceProperties, backfillSlug, buildTypeAliases, canBeChildOf, checkHeaderSeal, checkHeaderSealText, coerceProductStage, collectSlugsForType, compareVersions, computeBodyChecksum, concernEvaluatedFor, concernFor, concernGatesFor, crossProductScope, deriveCounts, derivePortfolioCounts, deriveSingleCounts, describeTreePattern, edgeCarriesProperties, evaluateAntiPatterns, findInvalidStatusMigrationTargets, formatUpgText, friendlyToAssessment, generateSlug, getAnchorEntity, getAntiPatternById, getAntiPatterns, getAntiPatternsBySeverity, getAntiPatternsForStage, getAreaTaxonomyEntry, getBenchmark, getBenchmarksByDomain, getBusinessAreasForRegion, getCanonicalPlaybookForRegion, getCoverageKeysForRegion, getDefaultLens, getDeprecatedTypes, getDomainForType, getDomainIdForType, getDomainsInRing, getEdgePropertySchema, getEntityModifierSummary, getEnumScale, getEnumValueMeta, getGuideForDomain, getLens, getLensIds, getLensPlaybook, getLensesForDomain, getLifecycleForType, getLifecycleRenderShape, getMigrationMap, getPlaybookById, getPlaybooksForRegion, getPropertiesForScale, getPropertyDefaultScale, getPropertyMigrations, getPropertyModifier, getPropertySchema, getRegion, getRegionForEntityType, getReplacementType, getRingForDomain, getScalarToEdgeMigrations, getScale, getSplitMigrations, getTreePattern, getTypeId, getTypeName, getTypes, getUPGEdgeMigrations, getValidChildren, getVisibleTypes, hasStatusMigration, isAggregateShapedProperty, isCanonical, isCanonicalProductStage, isContainmentFreeType, isCrossCapable, isCrossProductEligible, isCuratedCrossEligible, isDeliberateOnlyEdge, isDeprecatedType, isDomainGuideStep, isEntitySequenceStep, isFrameworkInvocationStep, isLegacyProductStage, isLifecycleFreeType, isLifecyclePlannedType, isPolymorphicEdge, isPortfolio, isPortfolioSharedType, isRecordEntity, isRegisteredPolymorphicEdge, isRuntimeStateShapedProperty, isSubSequenceStep, isThinCoverageAdvisory, isUPGDocument, listPropertiesByModifier, listStatusMigrations, listTreePatternSummaries, migrateEdge, migrateNode, migrateNodeProperties, migrateProductStage, migrateStatusValue, normalizeDocument, parseUpg, pickCanonicalEdge, resolveAllEdges, resolveContainmentEdge, resolveEntityType, resolveLabel, resolveSlugCollision, resolveTreePatternEdges, ringOrderedDomainIds, rotateSlug, serializeCanonical, validateEdgeProperties, validateProductStageStrict, validateUPGDocument, validateUPGFramework, validationProfileFor, walkMigrationChainToCanonical };
23392
+ export { type A11yAnnotationProperties, type A11yAuditProperties, type A11yGuidelineProperties, type A11yIssueProperties, type A11yStandardProperties, ANALYTICS_DATA_PLAYBOOK, type AcceptanceCriterionProperties, type AccessPolicyProperties, type AccountProperties, type AcquisitionChannelProperties, type AdCreativeProperties, type AffinityClusterProperties, type AgentDefinitionProperties, type AgentHookProperties, type AgentSessionProperties, type AgentSkillProperties, type AgentTaskProperties, type AggregateProperties, type AiCostTrackerProperties, type AiDatasetProperties, type AiExperimentProperties, type AiGuardrailProperties, type AiModelProperties, type AiTraceProperties, type AlertRuleProperties, type AnnotationProperties, type AntiPatternInputs, type AntiPatternViolation, type AnyUPGEntityType, type ApiContractProperties, type ApiEcosystemProperties, type ApiEndpointProperties, type ApproachBinding, type ApproachFilter, type ApproachRun, type ApproachRuntime, type ApprovalRecordProperties, type AssumptionProperties, type AttributionModelProperties, type AuditLogPolicyProperties, BUSINESS_GROWTH_METRIC_DRIVEN_PLAYBOOK, BUSINESS_GTM_GROWTH_PLAYBOOK, BUSINESS_MARKETING_AUDIENCE_FIRST_PLAYBOOK, type BehavioralSegmentProperties, type BenchmarkCheck, type BetaProgramProperties, type BoundedContextProperties, type BrandAssetProperties, type BrandColourProperties, type BrandIdentityProperties, type BrandImageryProperties, type BrandLogoProperties, type BrandTypographyProperties, type BrandVoiceProperties, type BugProperties, type BuildArtifactProperties, type BusinessModelProperties, CLASSIFICATION_EDGE_PROPERTY_SCHEMA, CONTENT_DEPTH_WARNING_RULES, COVERAGE_ANTI_PATTERNS, type Cadence, type CapabilityProperties, type CapacityPlanProperties, type CauseConfidence, type CeremonyProperties, type CertificationProperties, type ChangeRequestProperties, type ChangelogProperties, type ChurnReasonProperties, type CiPipelineProperties, type ClassificationAxisProperties, type ClassificationCapability, type ClassificationCapabilitySurface, type ClassificationCommitment, type ClassificationValueProperties, type CodeRepositoryProperties, type CohortProperties, type ComfortLevel, type CommandProperties, type CommunityInitiativeProperties, type CompetitiveAnalysisProperties, type CompetitiveBattleCardProperties, type CompetitorFeatureProperties, type CompetitorProperties, type CompetitorSignalProperties, type ComplianceFrameworkProperties, type ComplianceRequirementProperties, type Confidence, type ConformanceLevel, type ConstraintKind, type ConstraintOrigin, type ConstraintProperties, type ConstraintStatus, type ContactProperties, type ContentCalendarProperties, type ContentPieceProperties, type ContentStrategyProperties, type ContentThemeProperties, type ContractClauseProperties, type ContractProperties, type CostStructureProperties, type CountBenchmark, type Cron, type CrossProductEligibleEdgeType, type CrossProductScope, type CulturalAdaptationProperties, type CustomerFeedbackProperties, type CustomerHealthScoreProperties, type CustomerJourneyStageProperties, type CustomerRelationshipProperties, DEFAULT_ENTITY_EMOJI, DEFERRED_PROPOSED_BY_CONTRACT, DEFER_EDGE_PROPERTY_SCHEMA, DISCOVERY_RESEARCH_VALIDATION_PLAYBOOK, type DashboardProperties, type DataClassificationProperties, type DataContractProperties, type DataDomainProperties, type DataFlowProperties, type DataLineageProperties, type DataModelProperties, type DataPipelineProperties, type DataProductProperties, type DataQualityRuleProperties, type DataSensitivity, type DataSourceProperties, type DatabaseSchemaProperties, type DealProperties, type DecisionProperties, type DeliberateOnlyEdgeType, type DeliverableProperties, type DemandGenProgramProperties, type DepartmentProperties, type DependencyProperties, type DeploymentProperties, type DeprecatedUPGEntityType, type DesignComponentProperties, type DesignConceptProperties, type DesignGuidelineProperties, type DesignPatternProperties, type DesignQuestionProperties, type DesignSprintProperties, type DesignSystemProperties, type DesignTokenProperties, type DesiredOutcomeProperties, type DeveloperPortalProperties, type DifficultyLevel, type DiscountStrategyProperties, type DistributionChannelProperties, type DocumentProperties, type DocumentationTemplateProperties, type DomainActivation, type DomainCountCheck, type DomainEntityProperties, type DomainEventProperties, type DomainGuideStep, type DomainPopulationCheck, type Duration, ENGINEERING_PLATFORM_PLAYBOOK, ENTITY_EMOJI, EXPERIENCE_DESIGN_BRAND_PLAYBOOK, type EducationProgramProperties, type EmailSequenceProperties, type EmptyCell, type EmptyCellRationaleKind, type EntityCheck, type EntitySequenceStep, type EntityTypeMeta, type EntityTypeResolution, type EntryMode, type EpicProperties, type ErrorBudgetProperties, type EvalBenchmarkProperties, type EvalRunProperties, type EvaluateAntiPatternsOptions, type EventProperties, type EventSchemaProperties, type EvidenceDirection, type EvidenceProperties, type ExperimentPlanProperties, type ExperimentProperties, type ExperimentRunProperties, type ExternalApiProperties, FOUNDATIONS_PLAYBOOK, type FeasibilityStudyProperties, type FeatureAreaProperties, type FeatureFlagProperties, type FeatureProperties, type FeatureRequestProperties, type FeedbackProgramProperties, type FeedbackThemeProperties, type FeedbackVoteProperties, type FixProperties, type ForecastProperties, type FrameworkCategory, type FrameworkComputedProperty, type FrameworkConstant, type FrameworkDataSpec, type FrameworkEducation, type FrameworkEntityTypeSpec, type FrameworkExerciseProperties, type FrameworkInvocationStep, type FrameworkLayout, type FrameworkLevel, type FrameworkOrigin, type FrameworkPresentationSpec, type FrameworkPropertyRequirement, type FrameworkScoringMethod, type FrameworkSlot, type FrameworkStep, type FrameworkStructureSpec, type FrameworkValidationResult, type FrequencyRating, type FunnelProperties, type FunnelStage, type FunnelStepProperties, type GlossaryTermProperties, type GrowthCampaignProperties, type GrowthLoopProperties, type GtmStrategyProperties, type GuardrailStatus, type HallucinationReportProperties, type HealthStatus, type HelpVideoProperties, type HypothesisEvidenceProperties, type HypothesisProperties, type ISO4217, type ISODate, type ISODateTime, type IdealCustomerProfileProperties, type IncidentProperties, type IncidentSeverity, type InfrastructureComponentProperties, type InitiativeProperties, type InsightProperties, type IntegrationPartnerProperties, type IntegrationPatternProperties, type IntelligenceCondition, type InteractionSpecProperties, type InternalDocProperties, type InterviewGuideProperties, type InvestigationProperties, type InvoiceProperties, type IpAssetProperties, type JobProperties, type JobStepProperties, type JourneyActionProperties, type JourneyPhaseProperties, type JourneyStepProperties, type JourneyType, type KeyActivityProperties, type KeyResourceProperties, type KeyResultProperties, type KnowledgeBaseArticleProperties, LEGACY_PRODUCT_STAGES, type LaunchProperties, type LeadProperties, type LearningPathProperties, type LearningProperties, type LegalEntityProperties, type LibraryDependencyProperties, type LifecyclePhase, type LifecycleRenderShape, type LifecycleRenderState, type LifecycleRenderTransition, type LifecycleState, type LocaleConfigProperties, type LocaleProperties, type LogLevel, type LowMedHigh, MARKDOWN_FORMAT_VERSION, MARKET_COMPETITIVE_PLAYBOOK, type MarketSegmentProperties, type MarketTrendProperties, type MarketingCampaignPlanProperties, type MarketingChannelProperties, type MarketingPlatform, type MarketingStrategyProperties, type MarketplaceListingProperties, type MatrixSlot, type MaturityLevel, type MessagingProperties, type MetricCategory, type MetricDataPoint, type MetricDesignation, type MetricHealth, type MetricImpactLevel, type MetricIndicatorDirection, type MetricProperties, type MetricQualityAssessmentProperties, type MetricSegmentType, type MetricStatisticalFunction, type MilestoneProperties, type MissionProperties, type ModelComparisonProperties, type ModifiedProperty, type MonitorProperties, type NamedGroup, type NeedMaturity, type NeedProperties, type NeedValence, type NpsCampaignProperties, OPERATIONS_QUALITY_PLAYBOOK, type ObjectionProperties, type ObjectiveProperties, type ObservationProperties, type OnCallRotationProperties, type OperatingLifecycleProperties, type OperatingStageProperties, type OpportunityProperties, type OrganizationProperties, type OrphanCheck, type OutcomeProperties, PRODUCT_DELIVERY_PLAYBOOK, PROPERTY_MODIFIERS, PROPERTY_MODIFIER_SEMANTICS, PROPERTY_SCALE_MAP, type ParticipantProperties, type PartnerProgramProperties, type PartnerRevenueShareProperties, type PartnerTierProperties, type PartnershipProperties, type PaywallProperties, type PenetrationTestProperties, type PersonProperties, type PersonaProperties, type PipelineSalesProperties, type PipelineStageProperties, type PlanningCycleProperties, type PlaybookBinding, type PlaybookFilter, type PlaybookProperties, type PlaybookRun, type PlaybookRuntime, type PortfolioProperties, type PositioningProperties, type PostmortemProperties, type PressReleaseProperties, type PricingStrategyProperties, type PricingTierProperties, type PrimitiveProperties, type Priority, type PrivacyPolicyProperties, type ProductAreaProperties, type ProductProperties, type ProductStageCoercion, type ProgramProperties, type ProjectProperties, type PromptTemplateProperties, type PromptVersionProperties, type ProofPointProperties, type PropertyDefinition, type PropertyModifier, type PropertySchema, type Protocol, type PrototypeProperties, type ProxyConfidence, type ProxyReason, type QaSessionProperties, type QueueTopicProperties, type QuoteDocumentProperties, type QuoteProperties, RECORD_ENTITY_TYPES, REFLECT_MODES, REGISTRY_PRODUCT_ID, type RatioBenchmark, type ReadModelProperties, type RebuttalProperties, type ReflectMode, type RegionalPricingProperties, type RegressionTestProperties, type RelationshipBenchmark, type RelationshipCheck, type ReleaseProperties, type ReleaseStrategyProperties, type ReportProperties, type ResearchPlanProperties, type ResearchQuestionProperties, type ResearchStudyProperties, type ResourceAllocationProperties, type RetrospectiveProperties, type RevenueStreamProperties, type ReviewGateProperties, type RiskProperties, type RiskRegisterProperties, type RoadmapItemProperties, type RoadmapProperties, type RoadmapThemeProperties, type RoleProperties, type RootCauseProperties, type RuleStrength, type RunContext, type RunbookProperties, STRATEGY_OUTCOMES_PLAYBOOK, type SalesMotionProperties, type ScreenProperties, type ScreenStateProperties, type SecurityAuditProperties, type SecurityControlProperties, type SecurityPolicyProperties, type SecurityReviewProperties, type Semver, type SeoKeywordProperties, type SerializeOptions, type ServiceBlueprintProperties, type ServiceLevelAgreementProperties, type ServiceLevelIndicatorProperties, type ServiceLevelObjectiveProperties, type ServiceProperties, type SignalChannel, type SignalSentiment, type SignalUrgency, type SkillProperties, type SocialPostProperties, type SolutionProperties, type SpecificationProperties, type StageRange, type StakeholderProperties, type StatusCategory, type StatusReportProperties, type Step, type StepKind, type StepOutput, type StepOutputKind, type StoryTaskProperties, type StrategicPillarProperties, type StrategicQuestionProperties, type StrategicThemeProperties, type StructurePattern, type SubSequenceStep, type SubscriptionProperties, type SuccessMilestoneProperties, type SupportTicketProperties, type SurfaceArbitrationState, type SurfaceCardinality, type SurfaceCompositionMode, type SurfaceExtensibility, type SurfaceId, type SurfaceInstanceScope, type SurfaceKind, type SurfacePersistence, type SurfaceProperties, type SurveyResponseProperties, type SwitchingCostProperties, type SymptomProperties, THIN_GRAPH_THRESHOLD, type TableColumn, type TargetCustomerSegmentProperties, type TaskProperties, type TeamOkrProperties, type TeamProperties, type TechnicalDebtItemProperties, type TerritoryProperties, type TestCaseProperties, type TestCoverageReportProperties, type TestEnvironmentProperties, type TestPlanProperties, type TestResultProperties, type TestSuiteProperties, type ThreatModelProperties, type ThreatProperties, type Timeframe, type TotalEntityCountCheck, type TouchpointProperties, type TranslationBundleProperties, type TranslationKeyProperties, type TrialConfigProperties, type TutorialProperties, type UPGAnchorEntity, type UPGAntiPattern, type UPGAntiPatternConcern, type UPGAntiPatternSeverity, type UPGApproach, type UPGApproachEnvelope, type UPGApproachId, type UPGAreaTaxonomyEntry, type UPGAssessment, type UPGBaseNode, type UPGBenchmarkSource, type UPGBoundaryDirection, type UPGBoundaryEdge, type UPGCrossEdge, type UPGCrossEdgeType, type UPGCrossOnlyEdgeType, type UPGCuratedAntiPattern, type UPGDocument, type UPGDomain, type UPGDomainBridge, type UPGDomainId, type UPGDomainPattern, type UPGDomainRing, type UPGDomainUsageGuide, type UPGEdge, type UPGEdgeDefinition, type UPGEdgeMigration, type UPGEdgeMigrationEndpoints, type UPGEdgePickHint, type UPGEdgeType, type UPGEntityType, type UPGEntityTypeMaturity, type UPGEnumScaleDefinition, type UPGEnumScaleValue, type UPGFramework, type UPGFrameworkMeta, type UPGHeader, type UPGHeaderCountsMismatch, type UPGHeaderIntegrity, type UPGHeaderIntegrityMismatch, type UPGHeaderProvenance, type UPGHeaderSealReport, type UPGIntegrity, type UPGLens, type UPGLensIntelligencePrompt, type UPGLifecycle, type UPGMappingConfidence, type UPGMemberKindKey, type UPGNode, type UPGOrganization, type UPGPlaybook, type UPGPortfolio, type UPGPortfolioDocument, type UPGPortfolioKind, type UPGPresenceExceptSpec, type UPGProduct, type UPGProductArea, type UPGProductStage, type UPGPropertyMap, type UPGPropertyMigration, type UPGPropertyMigrationChange, type UPGRegion, type UPGRegionEntityMembership, type UPGRegionEntityRole, type UPGRegionId, type UPGRegionShape, type UPGRegistry, type UPGScalarToEdgeMigration, type UPGScaleDefinition, type UPGScalePoint, type UPGSource, type UPGSplitEdge, type UPGSplitMigration, type UPGSplitRoute, type UPGSplitRouteTarget, type UPGSplitTarget, type UPGTreeChild, type UPGTreeGapPolicy, type UPGTreePattern, type UPGTreePatternDetail, type UPGTreePatternEdge, type UPGTreePatternSummary, type UPGTypeLabel, type UPGTypeMigration, type UPGValidationError, type UPGValidationProfile, type UPGValidationResult, type UPGValidationWarning, type UPGWildcardEndpoint, UPG_ACTIVE_TYPES, UPG_ANTI_PATTERNS, UPG_ANTI_PATTERN_CONCERNS, UPG_APPROACHES, UPG_APPROACHES_BY_ID, UPG_AREA_TAXONOMY, UPG_AREA_TAXONOMY_BY_COVERAGE_KEY, UPG_CANONICAL_FORMAT_VERSION, UPG_CONTAINMENT_FREE_TYPES, UPG_COUNT_BENCHMARKS, UPG_CROSS_EDGE_TYPES, UPG_CROSS_ELIGIBLE_CATALOG_EDGE_TYPES, UPG_CROSS_ONLY_EDGE_TYPES, UPG_DELIBERATE_ONLY_EDGE_TYPES, UPG_DEPRECATED_TYPES, UPG_DOMAINS, UPG_DOMAIN_ACTIVATION, UPG_DOMAIN_COUNT, UPG_DOMAIN_GUIDES, UPG_DOMAIN_RINGS, UPG_EDGE_CATALOG, UPG_EDGE_COUNT, UPG_EDGE_MIGRATIONS, UPG_EDGE_PAIR_MAP, UPG_EDGE_TYPES, UPG_ENTITY_COUNT, UPG_ENTITY_META, UPG_ENTITY_META_BY_ID, UPG_ENTITY_META_BY_NAME, UPG_ENTITY_TO_DOMAIN, UPG_ENUM_SCALES, UPG_FORMAT_VERSION, UPG_FRAMEWORKS, UPG_FRAMEWORKS_BY_CATEGORY, UPG_FRAMEWORKS_BY_ID, UPG_FRAMEWORK_CATEGORIES, UPG_LENSES, UPG_LIFECYCLES, UPG_LIFECYCLE_FREE_TYPES, UPG_LIFECYCLE_PLANNED_TYPES, UPG_META_COUNT, UPG_MIGRATIONS, UPG_PLAYBOOKS, UPG_POLYMORPHIC_EDGE_KEYS, UPG_PORTFOLIO_KINDS, UPG_PORTFOLIO_SHARED_TYPES, UPG_PRESENCE_EXCEPT_SPECS, UPG_PRODUCT_STAGES, UPG_PRODUCT_STAGE_COERCION_MAP, UPG_PROPERTY_MIGRATIONS, UPG_PROPERTY_SCHEMA, UPG_RATIO_BENCHMARKS, UPG_REGIONS, UPG_REGION_COUNT, UPG_REGION_MAP, UPG_RELATIONSHIP_BENCHMARKS, UPG_SCALAR_TO_EDGE_MIGRATIONS, UPG_SCALES, UPG_SPLIT_MIGRATIONS, UPG_STATUS_MIGRATIONS, UPG_STRUCTURE_PATTERNS, UPG_TREE_PATTERNS, UPG_TREE_PATTERNS_BY_ID, UPG_TYPES, UPG_TYPES_SET, UPG_TYPE_ALIASES, UPG_TYPE_LABELS, UPG_TYPE_LABELS_MAP, UPG_TYPE_NAMES, UPG_VALIDATION_PROFILES, UPG_VALID_CHILDREN, UPG_VERSION, UPG_WILDCARD_ENDPOINT, USERS_NEEDS_PLAYBOOK, type UnitEconomicsProperties, UnknownEntityTypeError, type UserAdvisoryBoardProperties, type UserFlowProperties, type UserJourneyProperties, type UserStoryProperties, type ValueObjectProperties, type ValuePropositionProperties, type ValueStreamProperties, type VariantProperties, type VisionProperties, type VulnerabilityProperties, type WalkMigrationChainResult, type WalkthroughProperties, type WebinarProperties, type WireframeProperties, type WorkflowArtifactProperties, type WorkflowRunProperties, type WorkflowTemplateProperties, type WorkspaceProperties, backfillSlug, buildTypeAliases, canBeChildOf, checkHeaderSeal, checkHeaderSealText, coerceProductStage, collectSlugsForType, compareVersions, computeBodyChecksum, concernEvaluatedFor, concernFor, concernGatesFor, crossProductScope, deriveCounts, derivePortfolioCounts, deriveSingleCounts, describeTreePattern, edgeCarriesProperties, evaluateAntiPatterns, findInvalidStatusMigrationTargets, formatUpgText, friendlyToAssessment, generateSlug, getAnchorEntity, getAntiPatternById, getAntiPatterns, getAntiPatternsBySeverity, getAntiPatternsForStage, getAreaTaxonomyEntry, getBenchmark, getBenchmarksByDomain, getBusinessAreasForRegion, getCanonicalPlaybookForRegion, getCoverageKeysForRegion, getDefaultLens, getDeprecatedTypes, getDomainForType, getDomainIdForType, getDomainsInRing, getEdgePropertySchema, getEntityModifierSummary, getEnumScale, getEnumValueMeta, getGuideForDomain, getLens, getLensIds, getLensPlaybook, getLensesForDomain, getLifecycleForType, getLifecycleRenderShape, getMigrationMap, getPlaybookById, getPlaybooksForRegion, getPropertiesForScale, getPropertyDefaultScale, getPropertyMigrations, getPropertyModifier, getPropertySchema, getRegion, getRegionForEntityType, getReplacementType, getRingForDomain, getScalarToEdgeMigrations, getScale, getSplitMigrations, getTreePattern, getTypeId, getTypeName, getTypes, getUPGEdgeMigrations, getValidChildren, getVisibleTypes, hasStatusMigration, isAggregateShapedProperty, isCanonical, isCanonicalProductStage, isContainmentFreeType, isCrossCapable, isCrossProductEligible, isCuratedCrossEligible, isDeliberateOnlyEdge, isDeprecatedType, isDomainGuideStep, isEntitySequenceStep, isFrameworkInvocationStep, isLegacyProductStage, isLifecycleFreeType, isLifecyclePlannedType, isPolymorphicEdge, isPortfolio, isPortfolioSharedType, isRecordEntity, isRegisteredPolymorphicEdge, isRuntimeStateShapedProperty, isSubSequenceStep, isThinCoverageAdvisory, isUPGDocument, listPropertiesByModifier, listStatusMigrations, listTreePatternSummaries, migrateEdge, migrateNode, migrateNodeProperties, migrateProductStage, migrateStatusValue, normalizeDocument, parseUpg, pickCanonicalEdge, presenceExceptKey, resolveAllEdges, resolveContainmentEdge, resolveEntityType, resolveLabel, resolveSlugCollision, resolveTreePatternEdges, ringOrderedDomainIds, rotateSlug, serializeCanonical, validateEdgeProperties, validateProductStageStrict, validateUPGDocument, validateUPGFramework, validationProfileFor, walkMigrationChainToCanonical };
package/dist/index.js CHANGED
@@ -1540,9 +1540,10 @@ var UPG_EDGE_CATALOG = {
1540
1540
  journey_action_realised_by_feature: { forward_verb: "realised_by", reverse_verb: "realises", classification: "cross-domain", source_type: "journey_action", target_type: "feature" },
1541
1541
  // ── surface (0.27.0): the place inside a screen ─────────────────────────
1542
1542
  // `screen` is route-level; `surface` is the contested place within it. The
1543
- // ten edges below give a surface its spine (nesting), its guest list, its
1543
+ // eleven edges below give a surface its spine (nesting), its guest list, its
1544
1544
  // purpose, its governing rule, its rendering vocabulary, its measurement,
1545
- // and its replacement path.
1545
+ // its replacement path, and (0.28.0) the gap between what it intends and
1546
+ // what it actually does.
1546
1547
  //
1547
1548
  // Classification adjudications, each anchored on the nearest precedent:
1548
1549
  // contains → hierarchy (feature_area_contains_feature_area, planning_cycle_contains_planning_cycle)
@@ -1578,6 +1579,35 @@ var UPG_EDGE_CATALOG = {
1578
1579
  surface_renders_design_component: { forward_verb: "renders", reverse_verb: "rendered_on", classification: "hierarchy", source_type: "surface", target_type: "design_component", cross_product_eligible: true },
1579
1580
  surface_measured_by_metric: { forward_verb: "measured_by", reverse_verb: "measures", classification: "semantic", source_type: "surface", target_type: "metric", cross_product_eligible: true },
1580
1581
  surface_supersedes_surface: { forward_verb: "supersedes", reverse_verb: "superseded_by", classification: "semantic", source_type: "surface", target_type: "surface" },
1582
+ // ── surface, 0.28.0 addition: intent versus reality ─────────────────────────
1583
+ // Every surface property records what the design INTENDS. `capacity: 1` on a
1584
+ // banner region is an assertion, and a real product will eventually be found
1585
+ // rendering four. Without somewhere to put that fact, the only ways to record
1586
+ // it are to edit `capacity` up to 4 (which destroys the intent, and with it
1587
+ // any evidence that a gap exists) or to leave the graph quietly wrong.
1588
+ //
1589
+ // This edge is the third option, and it is what lets `capacity` mean intent
1590
+ // unconditionally: the deviation hangs off a `technical_debt_item`, which is
1591
+ // already a trackable, assignable, prioritisable entity with an owner and a
1592
+ // remediation cost. The gap becomes work rather than a discrepancy.
1593
+ //
1594
+ // classification → cross-domain (ux_design → technical_debt). Crossing INTO
1595
+ // the debt domain from another ring is the established shape:
1596
+ // risk_manifests_as_technical_debt_item is cross-domain on exactly that
1597
+ // reasoning. NOT `causal`: `decision_incurs_technical_debt_item` is causal
1598
+ // because a decision BRINGS the debt into existence, whereas a surface
1599
+ // does not cause its own drift, it exhibits it. NOT `hierarchy`: that
1600
+ // would oblige a surface → technical_debt_item containment pair in
1601
+ // UPG_VALID_CHILDREN (guardrail G2b), and a surface does not own the debt
1602
+ // that afflicts it — service_carries_technical_debt_item can be hierarchy
1603
+ // because a service genuinely owns its backlog.
1604
+ // verbs → `deviates_via` / `causes_deviation_in`. The forward verb names
1605
+ // what the SOURCE does (the surface deviates), qualified by the debt that
1606
+ // accounts for it, so the edge key reads as the sentence it asserts. The
1607
+ // reverse says what the debt does to the place.
1608
+ // not cross_product_eligible → a deviation is a fact about one product's
1609
+ // code, and `surface` is not portfolio_shared in the first place.
1610
+ surface_deviates_via_technical_debt_item: { forward_verb: "deviates_via", reverse_verb: "causes_deviation_in", classification: "cross-domain", source_type: "surface", target_type: "technical_debt_item" },
1581
1611
  // Inbound. `feature_occupies_surface` is the guest list: the edge that makes
1582
1612
  // "what else lives here?" answerable, and the one the contention anti-pattern
1583
1613
  // counts. cross-domain (product_spec → ux_design), like screen_surfaces_feature
@@ -13177,8 +13207,12 @@ var UPG_PROPERTY_SCHEMA = {
13177
13207
  surface_kind: { type: "string", enum: ["shell", "tool", "pane", "region", "slot", "gutter", "action_bar", "overlay", "ambient"], description: "Structural kind. Determines what may legally nest inside this surface." },
13178
13208
  persistence: { type: "string", enum: ["always", "conditional", "on_demand", "transient"], description: "How reliably the surface is present." },
13179
13209
  visibility_condition: { type: "string", description: 'When the surface appears, in plain language. Pairs with `persistence: \'conditional\'`, which states *that* it is conditional; this states *what* the condition is. @example "A node is selected", "Only for workspace admins"' },
13180
- capacity: { type: "number", description: 'How many occupants the surface holds at once, as a non-negative count. ABSENT MEANS UNBOUNDED. UPG has no union-typed property primitive (`PropertyDefinition.type` is a single scalar kind), so the proposed `integer | unbounded` shape is expressed as an optional number whose absence carries the "no cap" reading, rather than a magic sentinel value that every consumer would have to special-case. `0` is a real cap meaning "nothing may occupy this surface" (a reserved place), not "unbounded".' },
13210
+ capacity: { type: "number", description: 'How many occupants ONE INSTANCE of the surface holds at once, as a non-negative count. Count the instances themselves with `cardinality`. CAPACITY IS ALWAYS INTENT, NEVER OBSERVED BEHAVIOUR. It records the cap the design asserts, so a banner region declared `capacity: 1` keeps saying 1 even after someone finds it rendering four. Reality that has drifted from the declared intent is recorded as a trackable, assignable debt item on `surface_deviates_via_technical_debt_item`, not by quietly editing this number up to match the bug. Editing it to match would destroy the only record that a gap exists. ABSENT MEANS UNBOUNDED. UPG has no union-typed property primitive (`PropertyDefinition.type` is a single scalar kind), so the proposed `integer | unbounded` shape is expressed as an optional number whose absence carries the "no cap" reading, rather than a magic sentinel value that every consumer would have to special-case. `0` is a real cap meaning "nothing may occupy this surface" (a reserved place), not "unbounded".' },
13211
+ cardinality: { type: "string", enum: ["1", "0..1", "1..n", "0..n"], description: "How many instances of this surface exist. `capacity` counts occupants within one instance; this counts the instances." },
13212
+ instance_scope: { type: "string", enum: ["global", "per_parent"], description: 'What an instance is scoped to: one shared instance for the product, or one per containing surface. Decides whether "the product has this surface" is a true sentence or a per-parent one.' },
13213
+ composition_mode: { type: "string", enum: ["exclusive", "additive", "chained"], description: "How the occupants relate: one wins (`exclusive`), all coexist (`additive`), or each wraps the next (`chained`). Declaring `chained` exempts the surface from `contended-surface-without-arbitration`; leaving this unset does not." },
13181
13214
  arbitration_rule: { type: "string", description: 'Who wins when more occupants want the surface than `capacity` allows, and why. ABSENCE IS MEANINGFUL: a null or empty `arbitration_rule` on a contested surface means nobody decided, which is exactly what the `contended-surface-without-arbitration` anti-pattern detects. Do not fill this in with a placeholder to silence the check. @example "Highest priority wins; ties break to the most recently updated."' },
13215
+ arbitration_state: { type: "string", enum: ["enforced_documented", "enforced_undocumented", "safe_by_coincidence", "none"], description: 'Whether the arbitration answer is enforced, written down, both, or neither. Separates "enforced in code but never transcribed" (ten minutes of typing) from "never decided" (a design meeting) from "safe only because nothing has collided yet" (the dangerous one).' },
13182
13216
  extensibility: { type: "string", enum: ["closed", "plugin_registerable", "user_configurable"], description: "Who may add occupants to the surface." },
13183
13217
  mutates_content: { type: "boolean", description: "Whether occupying this surface can change the underlying content, as opposed to only selecting or revealing it. The selector-versus-mutator distinction: a gutter that toggles a value is a mutator, a gutter that jumps the cursor is not." },
13184
13218
  dimensional_constraint: { type: "string", description: 'The hard spatial budget the surface imposes on its occupants, in whatever unit the design system speaks. @example "292px wide", "25px per field", "two grid columns"' }
@@ -27015,7 +27049,44 @@ var UPG_ANTI_PATTERNS = [
27015
27049
  id: "contended-surface-without-arbitration",
27016
27050
  since: "0.27.0",
27017
27051
  name: "Contended surface without arbitration",
27018
- description: 'Features occupy surfaces in this graph, but at least one surface carries no arbitration_rule. A surface is a place features compete for; the arbitration rule is the recorded answer to "who wins here, and why". Left blank, that answer lives in whoever remembers the last argument.',
27052
+ description: 'Features occupy surfaces in this graph, and at least one surface has no recorded answer to "who wins here, and why". Either it carries no arbitration_rule and has not declared itself `chained`, or it admits through arbitration_state that the answer is absent (`none`) or accidental (`safe_by_coincidence`). Left unrecorded, that answer lives in whoever remembers the last argument.',
27053
+ // 0.28.0 (feedback 852a9721, from a 30-surface field audit). Three changes,
27054
+ // each earned by a reported false positive or a reported blind spot:
27055
+ //
27056
+ // (a) rule-absence, EXCEPT chained. `composition_mode: 'chained'` means each
27057
+ // occupant wraps the next rather than competing with it. Many occupants
27058
+ // and no arbitration rule is the designed shape, so the reporter's 14
27059
+ // chained slots were 14 standing false positives — and because
27060
+ // `get_anti_pattern_violations_for` attributes by TYPE, they kept the
27061
+ // whole surface roster lit no matter how diligently the genuinely
27062
+ // contended surfaces were documented. The check could never be silenced
27063
+ // by correct modelling, which is the property a check has to have.
27064
+ // Exemption is DECLARE-TO-EARN: an unset `composition_mode` still fires,
27065
+ // so the default posture stays suspicious and silence must be claimed.
27066
+ // (b) `safe_by_coincidence` fires on its own, with no chained exemption. It
27067
+ // is the one state that a written `arbitration_rule` can mask: the field
27068
+ // audit found surfaces whose prose described disjoint enum values doing
27069
+ // the arbitrating with nothing guarding them. Branch (a) cannot see
27070
+ // those, because the rule text is present.
27071
+ // (c) `none` fires on its own too. A graph that says "nobody decided" while
27072
+ // carrying rule text is contradicting itself, and the admission is the
27073
+ // half to believe.
27074
+ //
27075
+ // `enforced_undocumented` deliberately gets NO branch and NO suppression. It
27076
+ // needs none: a surface enforcing an untranscribed rule has no
27077
+ // `arbitration_rule`, so branch (a) already fires. Nor does it earn a
27078
+ // downgrade — severity is per-anti-pattern, not per-violation, so there is
27079
+ // nowhere to put one; and the harm this pattern names is that the settlement
27080
+ // is unrecorded, which is exactly what `enforced_undocumented` admits. The
27081
+ // graph is the record; code is not. What the state buys is triage, so the
27082
+ // remediation text below names the two costs separately.
27083
+ //
27084
+ // No new anti-pattern was minted for `safe_by_coincidence`. It is a value of
27085
+ // the arbitration question, not a different question, and a second detector
27086
+ // would fire on the same graphs and double-report through type-keyed
27087
+ // attribution — making this family noisier on its first real deployment,
27088
+ // which is the exact failure (a) exists to fix. If field evidence later shows
27089
+ // it needs its own severity, mint it then.
27019
27090
  structured_condition: {
27020
27091
  operator: "and",
27021
27092
  checks: [
@@ -27030,17 +27101,43 @@ var UPG_ANTI_PATTERNS = [
27030
27101
  }
27031
27102
  },
27032
27103
  {
27033
- check: {
27034
- type: "entity_count",
27035
- entity_type: "surface",
27036
- filter: { property: "arbitration_rule", present: false },
27037
- comparison: "nonzero"
27038
- }
27104
+ operator: "or",
27105
+ checks: [
27106
+ {
27107
+ check: {
27108
+ type: "entity_count",
27109
+ entity_type: "surface",
27110
+ filter: {
27111
+ property: "arbitration_rule",
27112
+ present: false,
27113
+ except_property: "composition_mode",
27114
+ except_value: "chained"
27115
+ },
27116
+ comparison: "nonzero"
27117
+ }
27118
+ },
27119
+ {
27120
+ check: {
27121
+ type: "entity_count",
27122
+ entity_type: "surface",
27123
+ filter: { property: "arbitration_state", value: "safe_by_coincidence" },
27124
+ comparison: "nonzero"
27125
+ }
27126
+ },
27127
+ {
27128
+ check: {
27129
+ type: "entity_count",
27130
+ entity_type: "surface",
27131
+ filter: { property: "arbitration_state", value: "none" },
27132
+ comparison: "nonzero"
27133
+ }
27134
+ }
27135
+ ]
27039
27136
  }
27040
27137
  ]
27041
27138
  },
27042
- why_it_matters: "Contention over a UI place is settled every time it comes up, and an unrecorded settlement is re-argued at the next feature. The cost is paid in repeated decisions, not in a visible defect.",
27043
- remediation: "For each surface with more than one `feature_occupies_surface` edge, write the rule that settles contention into `arbitration_rule`, and record the constraint it works within (`capacity`, `dimensional_constraint`). Where a design system already answers it, link the source with `surface_governed_by_design_guideline`.",
27139
+ why_it_matters: "Contention over a UI place is settled every time it comes up, and an unrecorded settlement is re-argued at the next feature. The cost is paid in repeated decisions, not in a visible defect. A surface that is safe only by coincidence pays it all at once instead, the first time an occupant is added.",
27140
+ remediation: "Read `arbitration_state` first: it says what the work actually is. `enforced_undocumented` means the rule already exists in code and needs transcribing into `arbitration_rule`: ten minutes, no meeting. `none` means nobody has decided and someone has to. `safe_by_coincidence` means nothing is enforcing anything and the surface only looks settled; that one wants a guard in code, not just prose. Record the constraint the rule works within (`capacity`, `dimensional_constraint`), and where a design system already answers it, link the source with `surface_governed_by_design_guideline`. Surfaces whose occupants wrap one another rather than compete should declare `composition_mode: 'chained'`, which exempts them: that is a factual claim about how the code composes, not a way to quiet the check.",
27044
27141
  stages: ["build", "beta", "launch", "growth", "mature", "maintenance"],
27045
27142
  severity: "medium",
27046
27143
  source: { kind: "fundamental" }
@@ -27098,6 +27195,38 @@ var UPG_ANTI_PATTERNS = [
27098
27195
  source: { kind: "fundamental" }
27099
27196
  }
27100
27197
  ];
27198
+ function walkForExceptSpecs(cond, out) {
27199
+ if ("operator" in cond) {
27200
+ for (const child of cond.checks) walkForExceptSpecs(child, out);
27201
+ return;
27202
+ }
27203
+ const check = cond.check;
27204
+ if (check.type !== "entity_count" || !check.filter) return;
27205
+ const f = check.filter;
27206
+ if (typeof f.property !== "string" || typeof f.except_property !== "string" || typeof f.except_value !== "string") {
27207
+ return;
27208
+ }
27209
+ const spec = {
27210
+ entity_type: check.entity_type,
27211
+ property: f.property,
27212
+ except_property: f.except_property,
27213
+ except_value: f.except_value
27214
+ };
27215
+ const seen = out.some(
27216
+ (s) => s.entity_type === spec.entity_type && s.property === spec.property && s.except_property === spec.except_property && s.except_value === spec.except_value
27217
+ );
27218
+ if (!seen) out.push(spec);
27219
+ }
27220
+ var UPG_PRESENCE_EXCEPT_SPECS = (() => {
27221
+ const out = [];
27222
+ for (const ap of UPG_ANTI_PATTERNS) {
27223
+ if (ap.structured_condition) walkForExceptSpecs(ap.structured_condition, out);
27224
+ }
27225
+ return out;
27226
+ })();
27227
+ function presenceExceptKey(property, exceptProperty, exceptValue) {
27228
+ return `${property}!${exceptProperty}=${exceptValue}`;
27229
+ }
27101
27230
  function getAntiPatternById(id) {
27102
27231
  return UPG_ANTI_PATTERNS.find((ap) => ap.id === id);
27103
27232
  }
@@ -27245,7 +27374,13 @@ function compareNumber(value, comparison, threshold) {
27245
27374
  function evaluateEntityCount(check, inputs) {
27246
27375
  const filter = check.filter;
27247
27376
  let count = 0;
27248
- if (filter && typeof filter.property === "string" && typeof filter.present === "boolean") {
27377
+ if (filter && typeof filter.property === "string" && typeof filter.present === "boolean" && typeof filter.except_property === "string" && typeof filter.except_value === "string") {
27378
+ const key = presenceExceptKey(filter.property, filter.except_property, filter.except_value);
27379
+ const exempt = inputs.countsByTypeAndProperty?.[check.entity_type]?.[filter.except_property]?.[filter.except_value] ?? 0;
27380
+ const eligible = Math.max(0, (inputs.countsByType[check.entity_type] ?? 0) - exempt);
27381
+ const withValue = inputs.countsByTypeAndPropertyPresenceExcept?.[check.entity_type]?.[key] ?? 0;
27382
+ count = filter.present ? Math.min(withValue, eligible) : Math.max(0, eligible - withValue);
27383
+ } else if (filter && typeof filter.property === "string" && typeof filter.present === "boolean") {
27249
27384
  const withValue = inputs.countsByTypeAndPropertyPresence?.[check.entity_type]?.[filter.property] ?? 0;
27250
27385
  count = filter.present ? withValue : Math.max(0, (inputs.countsByType[check.entity_type] ?? 0) - withValue);
27251
27386
  } else if (filter && typeof filter.property === "string" && typeof filter.value === "string") {
@@ -30366,7 +30501,7 @@ function checkHeaderSealText(text) {
30366
30501
  }
30367
30502
 
30368
30503
  // src/index.ts
30369
- var UPG_VERSION = "0.27.0";
30504
+ var UPG_VERSION = "0.28.0";
30370
30505
  var UPG_FORMAT_VERSION = "0.4.0";
30371
30506
  var MARKDOWN_FORMAT_VERSION = "0.1";
30372
30507
  var UPG_TYPES = getTypes();
@@ -30504,6 +30639,7 @@ export {
30504
30639
  UPG_POLYMORPHIC_EDGE_KEYS,
30505
30640
  UPG_PORTFOLIO_KINDS,
30506
30641
  UPG_PORTFOLIO_SHARED_TYPES,
30642
+ UPG_PRESENCE_EXCEPT_SPECS,
30507
30643
  UPG_PRODUCT_STAGES,
30508
30644
  UPG_PRODUCT_STAGE_COERCION_MAP,
30509
30645
  UPG_PROPERTY_MIGRATIONS,
@@ -30640,6 +30776,7 @@ export {
30640
30776
  normalizeDocument,
30641
30777
  parseUpg,
30642
30778
  pickCanonicalEdge,
30779
+ presenceExceptKey,
30643
30780
  resolveAllEdges,
30644
30781
  resolveContainmentEdge,
30645
30782
  resolveEntityType,