From 2c4df3998ac8545d7362fa77aa28dbf50166139a Mon Sep 17 00:00:00 2001 From: Elizabeth W Date: Tue, 26 May 2026 19:23:19 -0600 Subject: [PATCH] rules are list of options not strings --- .../04-blueprint.fs | 82 ++++++++++++++++--- 1 file changed, 71 insertions(+), 11 deletions(-) diff --git a/design/workflows/dependency-recovery/identify-vendored-packages/04-blueprint.fs b/design/workflows/dependency-recovery/identify-vendored-packages/04-blueprint.fs index 7ecf1ac..c7668d2 100644 --- a/design/workflows/dependency-recovery/identify-vendored-packages/04-blueprint.fs +++ b/design/workflows/dependency-recovery/identify-vendored-packages/04-blueprint.fs @@ -20,13 +20,73 @@ type TrustedCanonicalProjectionReference = TrustedCanonicalProjectionReference o type TrustedRuntimeTraceReference = TrustedRuntimeTraceReference of string -type CandidateDiscoveryRule = CandidateDiscoveryRule of string +type CandidateGroupingRule = + | GroupAdjacentSegments + | GroupStructurallyLinkedSegments + | GroupSharedLiteralClusters + | GroupSharedExportSurface -type ScoringRule = ScoringRule of string +type BoundaryRationaleRule = + | RecordAdjacentGroupingRationale + | RecordStructuralLinkRationale + | RecordSharedLiteralRationale + | RecordExportSurfaceRationale -type TieBreakRule = TieBreakRule of string +type ScoringRule = + | WeightLicenseBanner + | WeightPreservedPackageName + | WeightSourceMapHint + | WeightPreservedRequireString + | WeightCharacteristicLiteralSet + | WeightHelperSignature + | WeightAstShapeFingerprint + | WeightExportSurfaceSimilarity + | WeightDependencyGraphPosition + | WeightByteSimilarity + | WeightRuntimeExecutionTrace -type RequirementRule = RequirementRule of string +type RankingRule = + | RankByTotalEvidenceWeight + | RankByEvidenceDiversity + | RankByBoundaryCoverage + | RankByRuntimeSupport + +type TieBreakRule = + | PreferMoreSpecificPackageMatch + | PreferBroaderBoundaryCoverage + | PreferStaticEvidenceAgreement + | PreferStablePackageNameOrder + +type UnresolvedRule = + | KeepBelowThresholdCandidatesUnresolved + | KeepCollidingCandidatesUnresolved + | KeepAmbiguousCandidatesUnresolved + | KeepConflictingEvidenceCandidatesUnresolved + +type RejectedRule = + | RejectDeterministicallyAppAuthoredCandidates + | RejectDeterministicallyNonPackageCandidates + | RejectDeterministicallyContradictedCandidates + +type RequiredManifestField = + | CandidatePackageNameField + | DecisionStateField + | ConfidenceScoreField + | EvidenceSummaryField + | RawEvidenceReferencesField + | MatchedSegmentIdsField + | RecoveredBoundaryNotesField + | ReplacementPlanField + | FallbackReferenceField + | EvidenceProvenanceField + | AmbiguityNotesField + +type AuditabilityRule = + | RecordDecisionRationale + | RecordThresholdUsed + | RecordScoringInputs + | RecordCompetingMatches + | RecordDecisionTimestampOrder // 2. Commands (Inputs) @@ -49,25 +109,25 @@ type TrustedIngestArtifacts = { type VendoredCandidateDiscoveryRules = { allowedSignals: EvidenceSignal list - groupingRules: CandidateDiscoveryRule list - boundaryRationaleRules: CandidateDiscoveryRule list + groupingRules: CandidateGroupingRule list + boundaryRationaleRules: BoundaryRationaleRule list } type ConfidenceScoringRules = { scoringRules: ScoringRule list - rankingRules: ScoringRule list + rankingRules: RankingRule list tieBreakRules: TieBreakRule list } type AcceptanceThresholdPolicy = { acceptanceThreshold: ConfidenceScore - unresolvedRules: RequirementRule list - rejectedRules: RequirementRule list + unresolvedRules: UnresolvedRule list + rejectedRules: RejectedRule list } type DependencyDecisionRequirements = { - requiredManifestRules: RequirementRule list - auditabilityRules: RequirementRule list + requiredManifestFields: RequiredManifestField list + auditabilityRules: AuditabilityRule list } type DependencyRecoveryState = {