artifact-graph 0.6.1 → 0.7.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.cts CHANGED
@@ -793,6 +793,337 @@ interface ReviewResult {
793
793
  repair?: RepairData;
794
794
  }
795
795
 
796
+ interface ContractIdentity {
797
+ /** Major identity (e.g., "artifact.e2e-test@1") */
798
+ major: string;
799
+ /** Authority namespace (e.g., "artifact", "project", "io.github.org") */
800
+ authority: string;
801
+ /** Namespace for ID resolution */
802
+ namespace: string;
803
+ /** Immutable revision digest (sha256:...) */
804
+ revisionDigest: string;
805
+ /** Machine-readable relation rules for this contract */
806
+ relationRules?: Record<string, RelationRule>;
807
+ /** Machine-readable semantic markers for this contract */
808
+ semanticMarkers?: Record<string, SemanticMarker>;
809
+ }
810
+ interface RelationRule {
811
+ /** Allowed target types for this relation kind */
812
+ allowedTargetTypes: string[];
813
+ /** Minimum cardinality (0 = optional) */
814
+ min: number;
815
+ /** Maximum cardinality */
816
+ max: number;
817
+ /** Anchor policy: "required", "optional", or "forbidden" */
818
+ anchorPolicy: 'required' | 'optional' | 'forbidden';
819
+ }
820
+ interface SemanticMarker {
821
+ /** Canonical JSON pointer to the semantic slot */
822
+ jsonPointer: string;
823
+ /** Markdown marker identifier (e.g., "scope", "system-boundary") */
824
+ markdownMarker: string;
825
+ /** Whether this marker is required */
826
+ required: boolean;
827
+ }
828
+ interface ContractDefinition {
829
+ identity: ContractIdentity;
830
+ schema: ContractSchema;
831
+ /** Raw schema content for digest computation */
832
+ rawContent: string;
833
+ }
834
+ interface ContractSchema {
835
+ $id: string;
836
+ title: string;
837
+ version: string;
838
+ contractIdentity: ContractIdentity;
839
+ type: string;
840
+ required: string[];
841
+ properties: Record<string, unknown>;
842
+ definitions?: Record<string, unknown>;
843
+ additionalProperties?: boolean;
844
+ }
845
+ declare const CONTRACT_ERROR_CODES: {
846
+ /** Contract identity not found */
847
+ readonly CONTRACT_NOT_FOUND: "CONTRACT_NOT_FOUND";
848
+ /** Invalid contract identity format */
849
+ readonly INVALID_IDENTITY: "INVALID_IDENTITY";
850
+ /** Revision digest mismatch */
851
+ readonly DIGEST_MISMATCH: "DIGEST_MISMATCH";
852
+ /** Duplicate contract identity */
853
+ readonly DUPLICATE_IDENTITY: "DUPLICATE_IDENTITY";
854
+ /** Multiple active write contracts for same type */
855
+ readonly MULTIPLE_ACTIVE_WRITE: "MULTIPLE_ACTIVE_WRITE";
856
+ /** Unknown authority namespace */
857
+ readonly UNKNOWN_AUTHORITY: "UNKNOWN_AUTHORITY";
858
+ /** Namespace authority violation */
859
+ readonly AUTHORITY_VIOLATION: "AUTHORITY_VIOLATION";
860
+ /** Schema validation failed */
861
+ readonly SCHEMA_VALIDATION_FAILED: "SCHEMA_VALIDATION_FAILED";
862
+ /** Canonical IR normalization failed */
863
+ readonly NORMALIZATION_FAILED: "NORMALIZATION_FAILED";
864
+ /** Policy compatibility check failed */
865
+ readonly POLICY_INCOMPATIBLE: "POLICY_INCOMPATIBLE";
866
+ /** Legacy revision cannot be normalized */
867
+ readonly LEGACY_NORMALIZATION_FAILED: "LEGACY_NORMALIZATION_FAILED";
868
+ /** Canonical and legacy conflict */
869
+ readonly CANONICAL_LEGACY_CONFLICT: "CANONICAL_LEGACY_CONFLICT";
870
+ /** Relation rule violation */
871
+ readonly RELATION_RULE_VIOLATION: "RELATION_RULE_VIOLATION";
872
+ /** Relation rules missing in contract (fail closed) */
873
+ readonly RELATION_RULES_MISSING: "RELATION_RULES_MISSING";
874
+ /** Ambiguous revision — multiple revisions found, no unique active write */
875
+ readonly AMBIGUOUS_REVISION: "AMBIGUOUS_REVISION";
876
+ /** Invalid relation kind */
877
+ readonly RELATION_INVALID_KIND: "RELATION_INVALID_KIND";
878
+ /** Invalid relation target type */
879
+ readonly RELATION_INVALID_TARGET_TYPE: "RELATION_INVALID_TARGET_TYPE";
880
+ /** Relation below minimum cardinality */
881
+ readonly RELATION_BELOW_MIN: "RELATION_BELOW_MIN";
882
+ /** Relation above maximum cardinality */
883
+ readonly RELATION_ABOVE_MAX: "RELATION_ABOVE_MAX";
884
+ /** Missing required anchor */
885
+ readonly RELATION_MISSING_ANCHOR: "RELATION_MISSING_ANCHOR";
886
+ /** Forbidden anchor present */
887
+ readonly RELATION_FORBIDDEN_ANCHOR: "RELATION_FORBIDDEN_ANCHOR";
888
+ /** Missing required semantic marker */
889
+ readonly MARKER_MISSING: "MARKER_MISSING";
890
+ /** Duplicate semantic marker */
891
+ readonly MARKER_DUPLICATE: "MARKER_DUPLICATE";
892
+ /** Unknown semantic marker */
893
+ readonly MARKER_UNKNOWN: "MARKER_UNKNOWN";
894
+ };
895
+ type ContractErrorCode = typeof CONTRACT_ERROR_CODES[keyof typeof CONTRACT_ERROR_CODES];
896
+ declare class ContractError extends Error {
897
+ readonly code: ContractErrorCode;
898
+ readonly details?: Record<string, unknown> | undefined;
899
+ constructor(code: ContractErrorCode, message: string, details?: Record<string, unknown> | undefined);
900
+ }
901
+ /**
902
+ * Check if a namespace is official (artifact or artifact.*)
903
+ */
904
+ declare function isOfficialNamespace(namespace: string): boolean;
905
+ /**
906
+ * Validate namespace authority
907
+ * - Official namespace (artifact.*) can only be used by official contracts
908
+ * - Third-party must use their own authority (e.g., io.github.org.*)
909
+ * - Project contracts use project.<project-id>.*
910
+ */
911
+ declare function validateNamespaceAuthority(identity: ContractIdentity, expectedAuthority?: string): void;
912
+ /**
913
+ * Compute immutable revision digest for contract content.
914
+ * Uses SHA-256 on canonicalized content (revisionDigest field excluded).
915
+ */
916
+ declare function computeRevisionDigest(content: string): string;
917
+ /**
918
+ * Verify that content matches expected digest
919
+ */
920
+ declare function verifyDigest(content: string, expectedDigest: string): boolean;
921
+ interface ContractRegistryEntry {
922
+ contract: ContractDefinition;
923
+ isActive: boolean;
924
+ isWriteTarget: boolean;
925
+ loadedAt: string;
926
+ }
927
+ declare class ContractRegistry {
928
+ private contracts;
929
+ private typeToActiveWrite;
930
+ private majorToContracts;
931
+ /**
932
+ * Register a contract
933
+ * @throws ContractError if duplicate identity or multiple active write contracts
934
+ */
935
+ register(contract: ContractDefinition, options?: {
936
+ isActive?: boolean;
937
+ isWriteTarget?: boolean;
938
+ }): void;
939
+ /**
940
+ * Resolve by major identity. Multiple revisions require a unique active write
941
+ * revision; insertion order is never a resolution policy.
942
+ */
943
+ get(major: string): ContractDefinition | undefined;
944
+ /**
945
+ * Get contract by major identity and digest
946
+ */
947
+ getByMajorAndDigest(major: string, digest: string): ContractDefinition | undefined;
948
+ /**
949
+ * Get all contracts for a major identity
950
+ */
951
+ getByMajor(major: string): ContractDefinition[];
952
+ /**
953
+ * Get active write contract for a type
954
+ */
955
+ getActiveWriteContract(typePrefix: string): ContractDefinition | undefined;
956
+ /**
957
+ * List all registered contracts
958
+ */
959
+ list(): ContractRegistryEntry[];
960
+ /**
961
+ * Check if a contract is registered by major identity
962
+ */
963
+ has(major: string): boolean;
964
+ /**
965
+ * Check if a contract is registered by major identity and digest
966
+ */
967
+ hasByMajorAndDigest(major: string, digest: string): boolean;
968
+ }
969
+ interface CanonicalIR {
970
+ /** Artifact type */
971
+ type: string;
972
+ /** Artifact ID */
973
+ id: string;
974
+ /** Contract major identity used */
975
+ contractMajor: string;
976
+ /** Contract revision digest */
977
+ contractDigest: string;
978
+ /** Normalized canonical data */
979
+ canonical: Record<string, unknown>;
980
+ /** Source revision (legacy or canonical) */
981
+ sourceRevision: 'canonical' | 'legacy';
982
+ /** Normalization warnings */
983
+ warnings: string[];
984
+ }
985
+ interface NormalizationError {
986
+ code: string;
987
+ path: string;
988
+ message: string;
989
+ }
990
+ interface NormalizationResult {
991
+ success: boolean;
992
+ ir?: CanonicalIR;
993
+ errors: NormalizationError[];
994
+ warnings: string[];
995
+ }
996
+ interface LegacyFieldMapping {
997
+ /** Legacy field name */
998
+ legacy: string;
999
+ /** Canonical field name */
1000
+ canonical: string;
1001
+ /** Transform function (optional) */
1002
+ transform?: (value: unknown) => unknown;
1003
+ /** Whether field is required in canonical */
1004
+ required?: boolean;
1005
+ }
1006
+ interface NormalizerConfig {
1007
+ /** Contract identity this normalizer targets */
1008
+ contractMajor: string;
1009
+ /** Field mappings from legacy to canonical */
1010
+ fieldMappings: LegacyFieldMapping[];
1011
+ /** Validation function for canonical form */
1012
+ validate?: (canonical: Record<string, unknown>) => string[];
1013
+ }
1014
+ /**
1015
+ * Normalize data to canonical IR.
1016
+ * Handles:
1017
+ * - Pure canonical input: returns sourceRevision: 'canonical'
1018
+ * - Pure legacy input: maps to canonical, returns sourceRevision: 'legacy'
1019
+ * - Mixed input: detects canonical/legacy conflicts
1020
+ */
1021
+ declare function normalizeToCanonical(legacyData: Record<string, unknown>, config: NormalizerConfig, contract: ContractDefinition): NormalizationResult;
1022
+ interface ProjectPolicy {
1023
+ /** Policy identity */
1024
+ id: string;
1025
+ /** Base contract this policy tightens */
1026
+ baseContractMajor: string;
1027
+ /** Additional required fields */
1028
+ additionalRequired?: string[];
1029
+ /** Restricted enum values (subset of base) */
1030
+ restrictedEnums?: Record<string, unknown[]>;
1031
+ /** Minimum cardinality overrides */
1032
+ minCardinality?: Record<string, number>;
1033
+ /** Maximum cardinality overrides */
1034
+ maxCardinality?: Record<string, number>;
1035
+ /** Additional constraints */
1036
+ constraints?: Record<string, unknown>;
1037
+ }
1038
+ interface PolicyCompatibilityResult {
1039
+ compatible: boolean;
1040
+ errors: string[];
1041
+ warnings: string[];
1042
+ }
1043
+ /**
1044
+ * Validate that project policy only tightens (never loosens) base contract.
1045
+ * - Arrays use minItems/maxItems; numbers use minimum/maximum.
1046
+ * - Enum restrictions must be subsets of base enum.
1047
+ * - Unimplemented constraints are rejected (fail-closed).
1048
+ */
1049
+ declare function validatePolicyCompatibility(policy: ProjectPolicy, baseContract: ContractDefinition): PolicyCompatibilityResult;
1050
+ interface LoadContractOptions {
1051
+ /** Expected authority (optional, for validation) */
1052
+ expectedAuthority?: string;
1053
+ }
1054
+ /**
1055
+ * Load contract from JSON file.
1056
+ * Digest verification is always on (fail-closed) — no bypass option.
1057
+ */
1058
+ declare function loadContract(contractPath: string, options?: LoadContractOptions): Promise<ContractDefinition>;
1059
+ /**
1060
+ * Load all contracts from a directory.
1061
+ * Fails closed: if ANY contract is invalid, the entire load fails.
1062
+ */
1063
+ declare function loadContractsFromDirectory(contractsDir: string, options?: LoadContractOptions): Promise<ContractDefinition[]>;
1064
+ interface SchemaValidationResult {
1065
+ valid: boolean;
1066
+ errors: string[];
1067
+ }
1068
+ /**
1069
+ * Validate data against a contract schema using AJV.
1070
+ * AJV is a runtime dependency — if unavailable, validation fails closed.
1071
+ */
1072
+ declare function validateContractAgainstSchema(data: unknown, contract: ContractDefinition): SchemaValidationResult;
1073
+ declare const E2E_NORMALIZER_CONFIG: NormalizerConfig;
1074
+ /**
1075
+ * Normalize a legacy E2E artifact to canonical IR.
1076
+ * The legacy format has flat fields (id, title, status, scope as string, etc.)
1077
+ * while the canonical format uses nested objects (metadata.id, scope.business_goal, etc.)
1078
+ * Requires explicit contract — no default identity fallback.
1079
+ */
1080
+ declare function normalizeE2eLegacyArtifact(legacyData: Record<string, unknown>, contract: ContractDefinition): NormalizationResult;
1081
+ interface ContractCatalogEntry {
1082
+ identity: ContractIdentity;
1083
+ contract: ContractDefinition;
1084
+ }
1085
+ /**
1086
+ * Machine-readable contract catalog.
1087
+ * Lists, resolves and explains registered contracts.
1088
+ * Uses (major, digest) as revision key for multi-revision support.
1089
+ */
1090
+ declare class ContractCatalog {
1091
+ private contracts;
1092
+ private majorToContracts;
1093
+ private majorToActiveWrite;
1094
+ /**
1095
+ * Add a contract to the catalog
1096
+ * @throws ContractError if duplicate identity
1097
+ */
1098
+ add(contract: ContractDefinition, options?: {
1099
+ isActive?: boolean;
1100
+ isWriteTarget?: boolean;
1101
+ }): void;
1102
+ /**
1103
+ * Resolve a contract by major identity.
1104
+ * - 0 entries: returns undefined
1105
+ * - 1 entry: returns it
1106
+ * - multiple: if there's a unique active write, returns it; otherwise throws AMBIGUOUS_REVISION
1107
+ */
1108
+ resolve(major: string): ContractDefinition | undefined;
1109
+ /**
1110
+ * Resolve a contract by major identity and exact digest
1111
+ */
1112
+ resolveByDigest(major: string, digest: string): ContractDefinition | undefined;
1113
+ /**
1114
+ * List all catalog entries (all revisions)
1115
+ */
1116
+ list(): ContractCatalogEntry[];
1117
+ /**
1118
+ * Get catalog as JSON-serializable object (all revisions)
1119
+ */
1120
+ toJSON(): Record<string, unknown>;
1121
+ }
1122
+ /**
1123
+ * Load contract catalog from a contracts directory
1124
+ */
1125
+ declare function loadContractCatalog(contractsDir: string, options?: LoadContractOptions): Promise<ContractCatalog>;
1126
+
796
1127
  interface ArtifactNode {
797
1128
  uid: string;
798
1129
  type: string;
@@ -1105,4 +1436,4 @@ declare function discoverTargets(graph: ArtifactGraph, options?: DiscoverOptions
1105
1436
  declare function resolveArtifactContext(graph: ArtifactGraph, opts: ContextOptions): ContextManifest;
1106
1437
  declare function formatContextMarkdown(manifest: ContextManifest): string;
1107
1438
 
1108
- export { ALWAYS_PRESENT_ITEMS as ALWAYS_PRESENT, type ArtifactChainDoctorReport, type ArtifactEdge, type ArtifactEdgeRule, type ArtifactExtraFieldSchema, type ArtifactGraph, type ArtifactGraphCliCandidate, type ArtifactGraphCliResolution, type ArtifactGraphCliSource, type ArtifactNode, type ArtifactSchema, type ArtifactTarget, type ArtifactTypeMetadata, type ArtifactTypeRole, type ArtifactTypeSchema, BASELINE_CONSTRAINTS, BASELINE_CONSTRAINTS_COUNT, BASELINE_ITEMS_COUNT, type BatchDefinition, type CollectChangedPathsOptions, type ContextItem, type ContextManifest, type ContextMode, type ContextOptions, type ContextTier, DEFAULT_MAX_CHARS, DEFAULT_SCHEMA, type DiscoverOptions, type E2eCoverageStats, type E2eCoverageThresholds, type E2eRegistry, type E2eRegistryBatch, type E2eRunnerConfig, type E2eWaiver, type Evidence, type EvidenceObject, type ExecutorType, type Finding, type FindingLocation, type FindingSeverity, type FindingStatus, type GitChangeMode, type GitChangeResult, type GitHookName, type HookInstallResult, type ImplementationBlueprintDraft, type ImplementationPacket, MIN_PROMPT_CHARS, type ManagedHookBlockOptions, type MissingDetail, type PacketAuditEntry, type PacketAuditSummary, type PacketCategory, type PacketItem, type PacketOmittedItem, type PacketOptions, type PacketPromptError, type PacketPromptOptions, type PacketTarget, type PacketTargetType, type PacketValidationIssue, type PacketValidationResult, type PreparedManagedHookBlock, type Producer, type PromptValidationIssue, type PromptValidationResult, type QueryOptions, type RepairData, type RepairValidation, type ResolveArtifactGraphCliOptions, type ReviewData, type ReviewDecision, type ReviewMetrics, type ReviewOrderStep, type ReviewResult, type ReviewStatus, type RiskChecklistItem, TARGET_ARTIFACT_TYPES, type TargetArtifactType, type TraceVersionResult, VALID_PACKET_TARGET_TYPES, VERSION_INDEX_SCHEMA_VERSION, VERSION_LOCK_PATH, VERSION_LOCK_SCHEMA_VERSION, type ValidationError, type ValidationIssue, type VersionEdgeKind, type VersionIndex, type VersionLockAuditResult, type VersionLockBootstrapOptions, type VersionLockEntry, type VersionLockFile, type VersionLockIssue, type VersionLockRef, type VersionLockRefreshOptions, type VersionLockRefreshResult, type VersionLockSourceRef, type VersionLockStatus, type VersionLockUpdateOptions, type VersionSourceKind, type VersionedEdge, type VersionedNode, applyPreparedManagedHookBlocks, assemblePacket, auditPackets, auditVersionLock, bootstrapVersionLock, buildGraph, buildVersionIndex, collectChangedPaths, computeE2eCoverageStats, discoverAndAuditPackets, discoverTargets, doctorArtifactChain, formatContextMarkdown, generateE2eRegistry, getArtifactTypeMetadata, getTargetArtifactTypes, installManagedHookBlock, isPacketTargetType, isPacketTargetTypeDynamic, isTargetArtifactType, loadConfig, nextId, parseTargetSelector, parseTargetsFile, prepareManagedHookBlock, queryGraph, refreshVersionLock, renderDoctorMarkdown, renderMermaid, renderPacketMarkdown, renderPacketPrompt, renderTraceVersionMarkdown, renderVersionLockAuditMarkdown, renderVersionLockRefreshMarkdown, resolveArtifactContext, resolveArtifactGraphCli, resolveArtifactTypeName, resolveCliTarget, resolveGitHookPath, resolveMatrixEdges, scanArtifacts, traceVersion, updateVersionLock, validateExecutableTraceability, validateGraph, validatePacket, validatePacketMarkdown, validatePacketPrompt, validateReviewResult, validateScenarioPrdLinkIndex, validateScenarioPrdLinks, writeGraphCache };
1439
+ export { ALWAYS_PRESENT_ITEMS as ALWAYS_PRESENT, type ArtifactChainDoctorReport, type ArtifactEdge, type ArtifactEdgeRule, type ArtifactExtraFieldSchema, type ArtifactGraph, type ArtifactGraphCliCandidate, type ArtifactGraphCliResolution, type ArtifactGraphCliSource, type ArtifactNode, type ArtifactSchema, type ArtifactTarget, type ArtifactTypeMetadata, type ArtifactTypeRole, type ArtifactTypeSchema, BASELINE_CONSTRAINTS, BASELINE_CONSTRAINTS_COUNT, BASELINE_ITEMS_COUNT, type BatchDefinition, CONTRACT_ERROR_CODES, type CanonicalIR, type CollectChangedPathsOptions, type ContextItem, type ContextManifest, type ContextMode, type ContextOptions, type ContextTier, ContractCatalog, type ContractCatalogEntry, type ContractDefinition, ContractError, type ContractErrorCode, type ContractIdentity, ContractRegistry, type ContractRegistryEntry, type ContractSchema, DEFAULT_MAX_CHARS, DEFAULT_SCHEMA, type DiscoverOptions, E2E_NORMALIZER_CONFIG, type E2eCoverageStats, type E2eCoverageThresholds, type E2eRegistry, type E2eRegistryBatch, type E2eRunnerConfig, type E2eWaiver, type Evidence, type EvidenceObject, type ExecutorType, type Finding, type FindingLocation, type FindingSeverity, type FindingStatus, type GitChangeMode, type GitChangeResult, type GitHookName, type HookInstallResult, type ImplementationBlueprintDraft, type ImplementationPacket, type LegacyFieldMapping, type LoadContractOptions, MIN_PROMPT_CHARS, type ManagedHookBlockOptions, type MissingDetail, type NormalizationResult, type NormalizerConfig, type PacketAuditEntry, type PacketAuditSummary, type PacketCategory, type PacketItem, type PacketOmittedItem, type PacketOptions, type PacketPromptError, type PacketPromptOptions, type PacketTarget, type PacketTargetType, type PacketValidationIssue, type PacketValidationResult, type PolicyCompatibilityResult, type PreparedManagedHookBlock, type Producer, type ProjectPolicy, type PromptValidationIssue, type PromptValidationResult, type QueryOptions, type RepairData, type RepairValidation, type ResolveArtifactGraphCliOptions, type ReviewData, type ReviewDecision, type ReviewMetrics, type ReviewOrderStep, type ReviewResult, type ReviewStatus, type RiskChecklistItem, type SchemaValidationResult, TARGET_ARTIFACT_TYPES, type TargetArtifactType, type TraceVersionResult, VALID_PACKET_TARGET_TYPES, VERSION_INDEX_SCHEMA_VERSION, VERSION_LOCK_PATH, VERSION_LOCK_SCHEMA_VERSION, type ValidationError, type ValidationIssue, type VersionEdgeKind, type VersionIndex, type VersionLockAuditResult, type VersionLockBootstrapOptions, type VersionLockEntry, type VersionLockFile, type VersionLockIssue, type VersionLockRef, type VersionLockRefreshOptions, type VersionLockRefreshResult, type VersionLockSourceRef, type VersionLockStatus, type VersionLockUpdateOptions, type VersionSourceKind, type VersionedEdge, type VersionedNode, applyPreparedManagedHookBlocks, assemblePacket, auditPackets, auditVersionLock, bootstrapVersionLock, buildGraph, buildVersionIndex, collectChangedPaths, computeE2eCoverageStats, computeRevisionDigest, discoverAndAuditPackets, discoverTargets, doctorArtifactChain, formatContextMarkdown, generateE2eRegistry, getArtifactTypeMetadata, getTargetArtifactTypes, installManagedHookBlock, isOfficialNamespace, isPacketTargetType, isPacketTargetTypeDynamic, isTargetArtifactType, loadConfig, loadContract, loadContractCatalog, loadContractsFromDirectory, nextId, normalizeE2eLegacyArtifact, normalizeToCanonical, parseTargetSelector, parseTargetsFile, prepareManagedHookBlock, queryGraph, refreshVersionLock, renderDoctorMarkdown, renderMermaid, renderPacketMarkdown, renderPacketPrompt, renderTraceVersionMarkdown, renderVersionLockAuditMarkdown, renderVersionLockRefreshMarkdown, resolveArtifactContext, resolveArtifactGraphCli, resolveArtifactTypeName, resolveCliTarget, resolveGitHookPath, resolveMatrixEdges, scanArtifacts, traceVersion, updateVersionLock, validateContractAgainstSchema, validateExecutableTraceability, validateGraph, validateNamespaceAuthority, validatePacket, validatePacketMarkdown, validatePacketPrompt, validatePolicyCompatibility, validateReviewResult, validateScenarioPrdLinkIndex, validateScenarioPrdLinks, verifyDigest, writeGraphCache };