Skip to main content

stack_ids/
ids.rs

1//! Opaque ID newtypes for cross-crate identity.
2//!
3//! Each newtype wraps a `String` and is intentionally opaque — callers
4//! should not parse the inner value. IDs are assigned by their respective
5//! authority crates; `stack-ids` only provides the type contract.
6
7use schemars::JsonSchema;
8use serde::{Deserialize, Deserializer, Serialize};
9use std::str::FromStr;
10
11/// Validation error for a family-qualified opaque ID.
12#[derive(Debug, Clone, PartialEq, Eq)]
13pub struct IdParseError {
14    family: String,
15    reason: &'static str,
16}
17
18impl std::fmt::Display for IdParseError {
19    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
20        write!(f, "invalid {} ID: {}", self.family, self.reason)
21    }
22}
23
24impl std::error::Error for IdParseError {}
25
26impl IdParseError {
27    /// Canonical ID family that rejected the input.
28    pub fn family(&self) -> &str {
29        &self.family
30    }
31
32    /// Stable validation failure reason.
33    pub fn reason(&self) -> &'static str {
34        self.reason
35    }
36}
37
38fn family_name(type_name: &str) -> String {
39    let stem = type_name.strip_suffix("Id").unwrap_or(type_name);
40    let mut family = String::new();
41    for (index, character) in stem.chars().enumerate() {
42        if character.is_ascii_uppercase() {
43            if index != 0 {
44                family.push('-');
45            }
46            family.push(character.to_ascii_lowercase());
47        } else {
48            family.push(character);
49        }
50    }
51    family
52}
53
54fn valid_payload(payload: &str) -> bool {
55    let mut characters = payload.chars();
56    matches!(characters.next(), Some(first) if first.is_ascii_alphanumeric())
57        && characters.all(|character| {
58            character.is_ascii_alphanumeric() || matches!(character, '-' | '.' | '_' | '~' | ':')
59        })
60}
61
62/// Macro to generate an opaque string-wrapper ID type with standard impls.
63macro_rules! define_id {
64    (
65        $(#[$meta:meta])*
66        $name:ident
67    ) => {
68        $(#[$meta])*
69        #[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, JsonSchema)]
70        #[serde(transparent)]
71        pub struct $name(pub String);
72
73        impl $name {
74            /// Creates an ID from a canonical family-qualified string or a
75            /// validated payload that will be family-qualified.
76            ///
77            /// Panics when the value is empty, non-canonical, or belongs to a
78            /// different ID family. Use try_new for untrusted input.
79            pub fn new(value: impl Into<String>) -> Self {
80                Self::try_new(value).unwrap_or_else(|error| panic!("{error}"))
81            }
82
83            /// Fallible constructor for untrusted ID input or payloads.
84            pub fn try_new(value: impl Into<String>) -> Result<Self, IdParseError> {
85                let value = value.into();
86                let family = family_name(stringify!($name));
87                if let Some((actual_family, payload)) = value.split_once(':') {
88                    if actual_family != family {
89                        return Err(IdParseError {
90                            family,
91                            reason: "cross-family substitution",
92                        });
93                    }
94                    if !valid_payload(payload) {
95                        return Err(IdParseError {
96                            family,
97                            reason: "payload is empty or non-canonical",
98                        });
99                    }
100                    return Ok(Self(value));
101                }
102                if !valid_payload(&value) {
103                    return Err(IdParseError {
104                        family,
105                        reason: "payload is empty or non-canonical",
106                    });
107                }
108                Ok(Self(format!("{family}:{value}")))
109            }
110
111            /// Generate a new random UUID v4 ID.
112            pub fn generate() -> Self {
113                Self::new(uuid::Uuid::new_v4().to_string())
114            }
115
116            /// Borrow as a string slice.
117            pub fn as_str(&self) -> &str {
118                &self.0
119            }
120
121            /// Returns true if the inner string is empty.
122            ///
123            /// Valid IDs are never empty; retained for source compatibility.
124            pub fn is_empty(&self) -> bool {
125                self.0.is_empty()
126            }
127        }
128
129        impl std::fmt::Display for $name {
130            fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
131                f.write_str(&self.0)
132            }
133        }
134
135        impl AsRef<str> for $name {
136            fn as_ref(&self) -> &str {
137                &self.0
138            }
139        }
140
141        impl FromStr for $name {
142            type Err = IdParseError;
143
144            fn from_str(value: &str) -> Result<Self, Self::Err> {
145                let family = family_name(stringify!($name));
146                // Accept family-prefixed values directly
147                if let Some((actual_family, payload)) = value.split_once(':') {
148                    if actual_family != family {
149                        return Err(IdParseError {
150                            family: family.clone(),
151                            reason: "cross-family substitution",
152                        });
153                    }
154                    if !valid_payload(payload) {
155                        return Err(IdParseError {
156                            family,
157                            reason: "payload is empty or non-canonical",
158                        });
159                    }
160                    return Ok(Self(value.to_string()));
161                }
162                // Accept unprefixed values and prepend the family (backward compat)
163                if !valid_payload(value) {
164                    return Err(IdParseError {
165                        family,
166                        reason: "payload is empty or non-canonical",
167                    });
168                }
169                Ok(Self(format!("{family}:{value}")))
170            }
171        }
172
173        impl<'de> Deserialize<'de> for $name {
174            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
175            where
176                D: Deserializer<'de>,
177            {
178                let value = String::deserialize(deserializer)?;
179                value.parse().map_err(serde::de::Error::custom)
180            }
181        }
182    };
183}
184
185define_id!(
186    /// Opaque identifier for an import/export envelope.
187    ///
188    /// Assigned by the exporting authority (e.g. Forge). Stable across
189    /// re-exports of the same logical unit.
190    EnvelopeId
191);
192
193define_id!(
194    /// Opaque identifier for a claim (knowledge assertion).
195    ///
196    /// Assigned by the projection importer. Stable within a claim lineage.
197    ClaimId
198);
199
200define_id!(
201    /// Opaque identifier for a specific version of a claim.
202    ///
203    /// Each mutation to a claim's validity, status, or content produces
204    /// a new version with a new `ClaimVersionId`. The `ClaimId` remains
205    /// stable across versions.
206    ClaimVersionId
207);
208
209define_id!(
210    /// Opaque identifier for an entity (person, concept, code unit, etc.).
211    ///
212    /// The inner string is intentionally unstructured. Use domain-specific
213    /// constructors to create these (e.g. code_entity_id).
214    EntityId
215);
216
217define_id!(
218    /// Opaque identifier for an episode (causal record).
219    ///
220    /// Assigned by the episode creator. Stable within the episode's lifecycle.
221    EpisodeId
222);
223
224define_id!(
225    /// Opaque identifier for a logical retry family within one retry-owner boundary.
226    ///
227    /// One `AttemptId` exists per logical retry family. Retries inside that
228    /// boundary produce new `TrialId`s, NOT new `AttemptId`s. A new `AttemptId`
229    /// is created only when the retry owner changes (e.g. node-level retry
230    /// after transport retries are exhausted) or on explicit replay/re-enqueue.
231    AttemptId
232);
233
234define_id!(
235    /// Opaque identifier for a concrete execution within a logical retry family.
236    ///
237    /// Every retry within one owner boundary creates a new `TrialId` under
238    /// the same `AttemptId`. Each `TrialId` is globally unique (UUID v4).
239    TrialId
240);
241
242define_id!(
243    /// Opaque identifier for a stored artifact (patch, snapshot, file).
244    ///
245    /// Assigned by the artifact store. Stable across reads.
246    ArtifactId
247);
248
249define_id!(
250    /// Opaque identifier for a projection instance.
251    ///
252    /// Identifies a specific derived view (entity registry entry, temporal
253    /// claim set, etc.) within a scope.
254    ProjectionId
255);
256
257define_id!(
258    /// Opaque identifier for a relation (edge between entities).
259    ///
260    /// Assigned by the projection importer. Stable within a relation lineage.
261    /// Each mutation produces a new `RelationVersionId` under the same `RelationId`.
262    RelationId
263);
264
265define_id!(
266    /// Opaque identifier for a relation version.
267    ///
268    /// Each mutation to a relation produces a new version with a new
269    /// `RelationVersionId`. The `RelationId` remains stable across versions.
270    RelationVersionId
271);
272
273define_id!(
274    /// Opaque identifier for an import batch produced by the bridge.
275    ///
276    /// Assigned by the bridge transformation pipeline. Unique per batch.
277    ImportBatchId
278);
279
280define_id!(
281    /// Opaque identifier for a claim family spanning multiple claim versions.
282    ///
283    /// Assigned by the authoritative exporter when version lineage is known.
284    ClaimFamilyId
285);
286
287define_id!(
288    /// Opaque identifier for a higher-order assertion group.
289    ///
290    /// Used to preserve joint assertion meaning across export, bridge, and
291    /// deterministic compilation. The bridge preserves it; it does not invent it.
292    AssertionGroupId
293);
294
295define_id!(
296    /// Opaque identifier for a relation group exported by the authority.
297    ///
298    /// Relation groups allow the compiler to recover hyperedge structure without
299    /// flattening upstream semantics into pairwise folklore.
300    RelationGroupId
301);
302
303define_id!(
304    /// Opaque identifier for a joint evidence group.
305    ///
306    /// Used to tie multiple observations or assertions to a shared evidence basis.
307    JointEvidenceGroupId
308);
309
310define_id!(
311    /// Opaque identifier for a contradiction candidate group.
312    ///
313    /// Assigned upstream when the exporting authority exposes contradiction seed
314    /// structure. Kernel/runtime layers must not synthesize it from absence.
315    ContradictionGroupId
316);
317
318define_id!(
319    /// Opaque identifier for a mutual exclusion or constraint seed group.
320    ConstraintGroupId
321);
322
323define_id!(
324    /// Opaque identifier for a recursive kernel run.
325    ///
326    /// Assigned by the kernel execution layer for one bounded, rebuildable run.
327    KernelRunId
328);
329
330define_id!(
331    /// Opaque identifier for a compiled constraint unit.
332    ConstraintId
333);
334
335define_id!(
336    /// Opaque identifier for a compiled hyperedge recovered from upstream grouping semantics.
337    HyperedgeId
338);
339
340define_id!(
341    /// Opaque identifier for a residual artifact emitted by bounded execution.
342    ResidualId
343);
344
345define_id!(
346    /// Opaque identifier for a stable syndrome signature emitted by the kernel.
347    SyndromeId
348);
349
350define_id!(
351    /// Opaque identifier for a witness artifact produced by execution or oracles.
352    WitnessId
353);
354
355define_id!(
356    /// Opaque identifier for a certificate artifact produced by execution or oracles.
357    CertificateId
358);
359
360define_id!(
361    /// Opaque identifier for a bounded oracle slice definition.
362    OracleSliceId
363);
364
365define_id!(
366    /// Opaque identifier for a bounded execution region.
367    RegionId
368);
369
370define_id!(
371    /// Opaque identifier for a stable digest of one bounded execution region.
372    RegionDigestId
373);
374
375define_id!(
376    /// Opaque identifier for a typed artifact transport crossing region boundaries.
377    ArtifactTransportId
378);
379
380define_id!(
381    /// Opaque identifier for syndrome-first repair routing.
382    RepairRouteId
383);
384
385define_id!(
386    /// Opaque identifier for one ranked local repair candidate.
387    RepairCandidateId
388);
389
390define_id!(
391    /// Opaque identifier for a nuisance-state artifact.
392    NuisanceStateId
393);
394
395define_id!(
396    /// Opaque identifier for a convergence-governance artifact.
397    ConvergenceReportId
398);
399
400define_id!(
401    /// Opaque identifier for a registered recursive operator contract.
402    OperatorId
403);
404
405define_id!(
406    /// Opaque identifier for a specific version of a registered operator contract.
407    ///
408    /// `OperatorId` stays stable across versions; `OperatorVersionId` changes when
409    /// the executable contract or policy-relevant operator surface changes.
410    OperatorVersionId
411);
412
413define_id!(
414    /// Opaque identifier for a structured refutation result artifact.
415    RefutationResultId
416);
417
418define_id!(
419    /// Opaque identifier for a structured calibration report artifact.
420    CalibrationReportId
421);
422
423define_id!(
424    /// Opaque identifier for a verification-control case.
425    VerificationCaseId
426);
427
428define_id!(
429    /// Opaque identifier for a canonical verification check plan.
430    CheckPlanId
431);
432
433define_id!(
434    /// Opaque identifier for a canonical control-plane receipt.
435    ControlReceiptId
436);
437
438define_id!(
439    /// Opaque identifier for an append-only verification ledger entry.
440    LedgerEntryId
441);
442
443define_id!(
444    /// Opaque identifier for a policy decision artifact.
445    PolicyDecisionId
446);
447
448define_id!(
449    /// Opaque identifier for a runtime execution permit.
450    ///
451    /// Minted only after policy, approval, and plan checks succeed for one
452    /// concrete execution surface.
453    ExecutionPermitId
454);
455
456define_id!(
457    /// Opaque identifier for an approval record artifact.
458    ApprovalRecordId
459);
460
461define_id!(
462    /// Opaque identifier for a typed constitutional approval grant.
463    ///
464    /// Grants carry scoped approval lineage for effectful tool dispatch.
465    ApprovalGrantId
466);
467
468define_id!(
469    /// Opaque identifier for a promotion decision artifact.
470    PromotionDecisionId
471);
472
473define_id!(
474    /// Opaque identifier for a refutation decision artifact.
475    RefutationDecisionId
476);
477
478define_id!(
479    /// Opaque identifier for a rollback plan artifact.
480    RollbackPlanId
481);
482
483define_id!(
484    /// Opaque identifier for a calibration snapshot artifact.
485    CalibrationSnapshotId
486);
487
488define_id!(
489    /// Opaque identifier for a versioned learning update artifact.
490    LearningUpdateId
491);
492
493define_id!(
494    /// Opaque identifier for a deterministic boundary repair record artifact.
495    BoundaryRepairRecordId
496);
497
498define_id!(
499    /// Opaque identifier for a semantics profile artifact.
500    SemanticsProfileId
501);
502
503define_id!(
504    /// Opaque identifier for a claim-state artifact.
505    ClaimStateId
506);
507
508define_id!(
509    /// Opaque identifier for a semantic diff artifact.
510    SemanticDiffId
511);
512
513define_id!(
514    /// Opaque identifier for a causal-attribution bundle artifact.
515    CausalAttributionBundleId
516);
517
518define_id!(
519    /// Opaque identifier for an explicit degradation record artifact.
520    DegradationRecordId
521);
522
523define_id!(
524    /// Opaque identifier for an exactness-budget artifact.
525    ExactnessBudgetId
526);
527
528define_id!(
529    /// Opaque identifier for one exported or imported support-set artifact.
530    ///
531    /// Stable for one snapshot of the support expression attached to a claim.
532    SupportSetId
533);
534
535define_id!(
536    /// Opaque identifier for one contradiction-witness artifact.
537    ///
538    /// Used to point at a stored explanation of why a claim is simultaneously
539    /// supported and refuted within one semantics profile.
540    ContradictionWitnessId
541);
542
543define_id!(
544    /// Opaque identifier for one retraction / supersession artifact.
545    ///
546    /// This identifies the transaction-time event that closes currentness for
547    /// a claim version without erasing historical visibility.
548    RetractionRecordId
549);
550
551define_id!(
552    /// Opaque identifier for an intervention bundle artifact.
553    InterventionId
554);
555
556define_id!(
557    /// Opaque identifier for an outcome-schema artifact.
558    OutcomeSchemaId
559);
560
561define_id!(
562    /// Opaque identifier for an experiment case artifact.
563    ExperimentCaseId
564);
565
566define_id!(
567    /// Opaque identifier for a cohort-contract artifact.
568    CohortContractId
569);
570
571define_id!(
572    /// Opaque identifier for a comparability-matrix artifact.
573    ComparabilityMatrixId
574);
575
576define_id!(
577    /// Opaque identifier for a counterfactual-slice artifact.
578    CounterfactualSliceId
579);
580
581define_id!(
582    /// Opaque identifier for a decision-trace artifact.
583    DecisionTraceId
584);
585
586define_id!(
587    /// Opaque identifier for a refuter-suite artifact.
588    RefuterSuiteId
589);
590
591define_id!(
592    /// Opaque identifier for a refuter-result artifact.
593    RefuterResultId
594);
595
596define_id!(
597    /// Opaque identifier for a rollout-decision artifact.
598    RolloutDecisionId
599);
600
601define_id!(
602    /// Opaque identifier for a rollback-decision artifact.
603    RollbackDecisionId
604);
605
606define_id!(
607    /// Opaque identifier for an experiment-budget artifact.
608    ExperimentBudgetId
609);
610
611define_id!(
612    /// Opaque identifier for an attestation-envelope artifact.
613    AttestationEnvelopeId
614);
615
616define_id!(
617    /// Opaque identifier for a trust-root-set artifact.
618    TrustRootSetId
619);
620
621define_id!(
622    /// Opaque identifier for an artifact-admission-policy artifact.
623    ArtifactAdmissionPolicyId
624);
625
626define_id!(
627    /// Opaque identifier for a transparency-receipt artifact.
628    TransparencyReceiptId
629);
630
631define_id!(
632    /// Opaque identifier for an attestation-revocation artifact.
633    AttestationRevocationId
634);
635
636define_id!(
637    /// Opaque identifier for an attestation-supersession artifact.
638    AttestationSupersessionId
639);
640
641define_id!(
642    /// Opaque identifier for a remote-oracle lease artifact.
643    RemoteOracleLeaseId
644);
645
646define_id!(
647    /// Opaque identifier for a remote-slice request artifact.
648    RemoteSliceRequestId
649);
650
651define_id!(
652    /// Opaque identifier for a remote-slice result artifact.
653    RemoteSliceResultId
654);
655
656define_id!(
657    /// Opaque identifier for a cross-runtime replay-ticket artifact.
658    CrossRuntimeReplayTicketId
659);
660
661define_id!(
662    /// Opaque identifier for a dispute-bundle artifact.
663    DisputeBundleId
664);
665
666define_id!(
667    /// Opaque identifier for a disclosure-policy artifact.
668    DisclosurePolicyId
669);
670
671define_id!(
672    /// Opaque identifier for a disclosure-budget artifact.
673    DisclosureBudgetId
674);
675
676define_id!(
677    /// Opaque identifier for a treaty bundle artifact.
678    TreatyBundleId
679);
680
681define_id!(
682    /// Opaque identifier for a runtime identity set artifact.
683    RuntimeIdentitySetId
684);
685
686define_id!(
687    /// Opaque identifier for a cross-runtime equivalence bundle artifact.
688    CrossRuntimeEquivalenceBundleId
689);
690
691define_id!(
692    /// Opaque identifier for a settlement case artifact.
693    SettlementCaseId
694);
695
696define_id!(
697    /// Opaque identifier for a shared disposition artifact.
698    SharedDispositionId
699);
700
701define_id!(
702    /// Opaque identifier for a local dissent record artifact.
703    LocalDissentId
704);
705
706define_id!(
707    /// Opaque identifier for a shared-view downgrade artifact.
708    SharedViewDowngradeId
709);
710
711define_id!(
712    /// Opaque identifier for a settlement receipt artifact.
713    SettlementReceiptId
714);
715
716define_id!(
717    /// Opaque identifier for a shared replay slice artifact.
718    SharedReplaySliceId
719);
720
721define_id!(
722    /// Opaque identifier for a shared divergence report artifact.
723    SharedDivergenceReportId
724);
725
726define_id!(
727    /// Opaque identifier for a treaty suspension artifact.
728    TreatySuspensionId
729);
730
731define_id!(
732    /// Opaque identifier for a mechanism bundle artifact.
733    MechanismBundleId
734);
735
736define_id!(
737    /// Opaque identifier for a theory version artifact.
738    TheoryVersionId
739);
740
741define_id!(
742    /// Opaque identifier for a theory library artifact.
743    TheoryLibraryId
744);
745
746define_id!(
747    /// Opaque identifier for a hypothesis library artifact.
748    HypothesisLibraryId
749);
750
751define_id!(
752    /// Opaque identifier for a simulation contract artifact.
753    SimulationContractId
754);
755
756define_id!(
757    /// Opaque identifier for a fit-run artifact.
758    FitRunId
759);
760
761define_id!(
762    /// Opaque identifier for a theory refuter suite artifact.
763    TheoryRefuterSuiteId
764);
765
766define_id!(
767    /// Opaque identifier for a rollout stability report artifact.
768    RolloutStabilityReportId
769);
770
771define_id!(
772    /// Opaque identifier for a discovery program artifact.
773    DiscoveryProgramId
774);
775
776define_id!(
777    /// Opaque identifier for a portfolio plan artifact.
778    PortfolioPlanId
779);
780
781define_id!(
782    /// Opaque identifier for an experiment campaign artifact.
783    ExperimentCampaignId
784);
785
786define_id!(
787    /// Opaque identifier for a campaign decision trace artifact.
788    CampaignDecisionTraceId
789);
790
791define_id!(
792    /// Opaque identifier for an information-value estimate artifact.
793    InformationValueEstimateId
794);
795
796define_id!(
797    /// Opaque identifier for a verification-load budget artifact.
798    VerificationLoadBudgetId
799);
800
801define_id!(
802    /// Opaque identifier for a charter bundle artifact.
803    CharterBundleId
804);
805
806define_id!(
807    /// Opaque identifier for a doctrine snapshot artifact.
808    DoctrineSnapshotId
809);
810
811define_id!(
812    /// Opaque identifier for an amendment proposal artifact.
813    AmendmentProposalId
814);
815
816define_id!(
817    /// Opaque identifier for an amendment decision artifact.
818    AmendmentDecisionId
819);
820
821define_id!(
822    /// Opaque identifier for an archive manifest artifact.
823    ArchiveManifestId
824);
825
826define_id!(
827    /// Opaque identifier for a compaction receipt artifact.
828    CompactionReceiptId
829);
830
831define_id!(
832    /// Opaque identifier for a historical query guarantee artifact.
833    HistoricalQueryGuaranteeId
834);
835
836define_id!(
837    /// Opaque identifier for a deprecation bundle artifact.
838    DeprecationBundleId
839);
840
841define_id!(
842    /// Opaque identifier for a retirement bundle artifact.
843    RetirementBundleId
844);
845
846define_id!(
847    /// Opaque identifier for a spec bundle artifact.
848    SpecBundleId
849);
850
851define_id!(
852    /// Opaque identifier for a normative AST artifact.
853    NormativeAstId
854);
855
856define_id!(
857    /// Opaque identifier for a generated schema bundle artifact.
858    GeneratedSchemaBundleId
859);
860
861define_id!(
862    /// Opaque identifier for a generated interpreter bundle artifact.
863    GeneratedInterpreterBundleId
864);
865
866define_id!(
867    /// Opaque identifier for a generated conformance corpus artifact.
868    GeneratedConformanceCorpusId
869);
870
871define_id!(
872    /// Opaque identifier for a generated migration plan artifact.
873    GeneratedMigrationPlanId
874);
875
876define_id!(
877    /// Opaque identifier for a proof-obligation set artifact.
878    ProofObligationSetId
879);
880
881define_id!(
882    /// Opaque identifier for a proof evaluation receipt artifact.
883    ProofEvaluationReceiptId
884);
885
886define_id!(
887    /// Opaque identifier for a human-veto bundle artifact.
888    HumanVetoBundleId
889);
890
891define_id!(
892    /// Opaque identifier for a meta-challenge bundle artifact.
893    MetaChallengeBundleId
894);
895
896define_id!(
897    /// Opaque identifier for a self-hosting build receipt artifact.
898    SelfHostingBuildReceiptId
899);
900
901define_id!(
902    /// Opaque identifier for an effect intent artifact.
903    EffectIntentId
904);
905
906define_id!(
907    /// Opaque identifier for an effect preflight report artifact.
908    EffectPreflightReportId
909);
910
911define_id!(
912    /// Opaque identifier for an effect execution window artifact.
913    EffectWindowId
914);
915
916define_id!(
917    /// Opaque identifier for an effect commit decision artifact.
918    EffectCommitDecisionId
919);
920
921define_id!(
922    /// Opaque identifier for an effect execution receipt artifact.
923    EffectExecutionReceiptId
924);
925
926define_id!(
927    /// Opaque identifier for an effect observation bundle artifact.
928    EffectObservationBundleId
929);
930
931define_id!(
932    /// Opaque identifier for a compensation plan artifact.
933    CompensationPlanId
934);
935
936define_id!(
937    /// Opaque identifier for a compensation execution receipt artifact.
938    CompensationExecutionReceiptId
939);
940
941define_id!(
942    /// Opaque identifier for an external effect ledger entry artifact.
943    ExternalEffectLedgerEntryId
944);
945
946define_id!(
947    /// Opaque identifier for a capability class artifact.
948    CapabilityClassId
949);
950
951define_id!(
952    /// Opaque identifier for an authority lease artifact.
953    AuthorityLeaseId
954);
955
956define_id!(
957    /// Opaque identifier for a delegation bundle artifact.
958    DelegationBundleId
959);
960
961define_id!(
962    /// Opaque identifier for an authority chain artifact.
963    AuthorityChainId
964);
965
966define_id!(
967    /// Opaque identifier for a separation-of-duties policy artifact.
968    SeparationOfDutiesPolicyId
969);
970
971define_id!(
972    /// Opaque identifier for a dual-control approval artifact.
973    DualControlApprovalId
974);
975
976define_id!(
977    /// Opaque identifier for a break-glass grant artifact.
978    BreakGlassGrantId
979);
980
981define_id!(
982    /// Opaque identifier for a delegation revocation artifact.
983    DelegationRevocationId
984);
985
986define_id!(
987    /// Opaque identifier for an acting-on-behalf receipt artifact.
988    ActingOnBehalfReceiptId
989);
990
991define_id!(
992    /// Opaque identifier for a conflict disclosure artifact.
993    ConflictDisclosureId
994);
995
996define_id!(
997    /// Opaque identifier for a deployment profile artifact.
998    DeploymentProfileId
999);
1000
1001define_id!(
1002    /// Opaque identifier for an operating envelope artifact.
1003    OperatingEnvelopeId
1004);
1005
1006define_id!(
1007    /// Opaque identifier for an assurance case artifact.
1008    AssuranceCaseId
1009);
1010
1011define_id!(
1012    /// Opaque identifier for a hazard register artifact.
1013    HazardRegisterId
1014);
1015
1016define_id!(
1017    /// Opaque identifier for a control mapping artifact.
1018    ControlMappingId
1019);
1020
1021define_id!(
1022    /// Opaque identifier for a residual-risk acceptance artifact.
1023    ResidualRiskAcceptanceId
1024);
1025
1026define_id!(
1027    /// Opaque identifier for a release-readiness decision artifact.
1028    ReleaseReadinessDecisionId
1029);
1030
1031define_id!(
1032    /// Opaque identifier for a field monitoring plan artifact.
1033    FieldMonitoringPlanId
1034);
1035
1036define_id!(
1037    /// Opaque identifier for a certification bundle artifact.
1038    CertificationBundleId
1039);
1040
1041define_id!(
1042    /// Opaque identifier for a recertification trigger artifact.
1043    RecertificationTriggerId
1044);
1045
1046define_id!(
1047    /// Opaque identifier for a service-level profile artifact.
1048    ServiceLevelProfileId
1049);
1050
1051define_id!(
1052    /// Opaque identifier for an error-budget ledger artifact.
1053    ErrorBudgetLedgerId
1054);
1055
1056define_id!(
1057    /// Opaque identifier for an incident case artifact.
1058    IncidentCaseId
1059);
1060
1061define_id!(
1062    /// Opaque identifier for a containment decision artifact.
1063    ContainmentDecisionId
1064);
1065
1066define_id!(
1067    /// Opaque identifier for a forensic freeze artifact.
1068    ForensicFreezeId
1069);
1070
1071define_id!(
1072    /// Opaque identifier for a recovery plan artifact.
1073    RecoveryPlanId
1074);
1075
1076define_id!(
1077    /// Opaque identifier for a recovery replay slice artifact.
1078    RecoveryReplaySliceId
1079);
1080
1081define_id!(
1082    /// Opaque identifier for a bounded continuity exception artifact.
1083    ContinuityExceptionId
1084);
1085
1086define_id!(
1087    /// Opaque identifier for a postmortem bundle artifact.
1088    PostmortemBundleId
1089);
1090
1091define_id!(
1092    /// Opaque identifier for a resilience exercise artifact.
1093    ResilienceExerciseId
1094);
1095
1096define_id!(
1097    /// Opaque identifier for an effect review case artifact.
1098    EffectReviewCaseId
1099);
1100
1101define_id!(
1102    /// Opaque identifier for an effect block receipt artifact.
1103    EffectBlockReceiptId
1104);
1105
1106define_id!(
1107    /// Opaque identifier for a delegation review case artifact.
1108    DelegationReviewCaseId
1109);
1110
1111define_id!(
1112    /// Opaque identifier for a release gate case artifact.
1113    ReleaseGateCaseId
1114);
1115
1116define_id!(
1117    /// Opaque identifier for a continuity review case artifact.
1118    ContinuityReviewCaseId
1119);
1120
1121define_id!(
1122    /// Opaque identifier for an effect policy profile artifact.
1123    EffectPolicyProfileId
1124);
1125
1126define_id!(
1127    /// Opaque identifier for a delegation policy profile artifact.
1128    DelegationPolicyProfileId
1129);
1130
1131define_id!(
1132    /// Opaque identifier for a release policy profile artifact.
1133    ReleasePolicyProfileId
1134);
1135
1136define_id!(
1137    /// Opaque identifier for a continuity policy profile artifact.
1138    ContinuityPolicyProfileId
1139);
1140
1141define_id!(
1142    /// Opaque identifier for an effect adjudication receipt artifact.
1143    EffectAdjudicationReceiptId
1144);
1145
1146define_id!(
1147    /// Opaque identifier for a release rollback decision artifact.
1148    ReleaseRollbackDecisionId
1149);
1150
1151define_id!(
1152    /// Opaque identifier for a tool effect dispatch receipt artifact.
1153    ToolEffectDispatchReceiptId
1154);
1155
1156define_id!(
1157    /// Opaque identifier for a privacy/retention profile artifact.
1158    PrivacyRetentionProfileId
1159);
1160
1161define_id!(
1162    /// Opaque identifier for a redaction rule-set artifact.
1163    RedactionRuleSetId
1164);
1165
1166define_id!(
1167    /// Opaque identifier for an access-purpose matrix artifact.
1168    AccessPurposeMatrixId
1169);
1170
1171define_id!(
1172    /// Opaque identifier for an audit extraction policy artifact.
1173    AuditExtractionPolicyId
1174);
1175
1176define_id!(
1177    /// Opaque identifier for a residency policy profile artifact.
1178    ResidencyPolicyProfileId
1179);
1180
1181define_id!(
1182    /// Opaque identifier for a tenant-boundary profile artifact.
1183    TenantBoundaryProfileId
1184);
1185
1186define_id!(
1187    /// Opaque identifier for a cross-boundary transfer class artifact.
1188    CrossBoundaryTransferClassId
1189);
1190
1191define_id!(
1192    /// Opaque identifier for a locality exception artifact.
1193    LocalityExceptionId
1194);
1195
1196define_id!(
1197    /// Opaque identifier for a role catalog artifact.
1198    RoleCatalogId
1199);
1200
1201define_id!(
1202    /// Opaque identifier for a delegation matrix artifact.
1203    DelegationMatrixId
1204);
1205
1206define_id!(
1207    /// Opaque identifier for an approval matrix artifact.
1208    ApprovalMatrixId
1209);
1210
1211define_id!(
1212    /// Opaque identifier for a conflict-class catalog artifact.
1213    ConflictClassCatalogId
1214);
1215
1216define_id!(
1217    /// Opaque identifier for a regulatory-regime profile artifact.
1218    RegulatoryRegimeProfileId
1219);
1220
1221define_id!(
1222    /// Opaque identifier for a requirement-to-control map artifact.
1223    RequirementControlMapId
1224);
1225
1226define_id!(
1227    /// Opaque identifier for an evidence collection plan artifact.
1228    EvidenceCollectionPlanId
1229);
1230
1231define_id!(
1232    /// Opaque identifier for a recertification schedule artifact.
1233    RecertificationScheduleId
1234);
1235
1236define_id!(
1237    /// Opaque identifier for a hazard library artifact.
1238    HazardLibraryId
1239);
1240
1241define_id!(
1242    /// Opaque identifier for a hazard scenario artifact.
1243    HazardScenarioId
1244);
1245
1246define_id!(
1247    /// Opaque identifier for a monitor catalog artifact.
1248    MonitorCatalogId
1249);
1250
1251define_id!(
1252    /// Opaque identifier for a mitigation playbook artifact.
1253    MitigationPlaybookId
1254);
1255
1256define_id!(
1257    /// Opaque identifier for a vendor certification adapter artifact.
1258    VendorCertificationAdapterId
1259);
1260
1261define_id!(
1262    /// Opaque identifier for a vendor evidence translation artifact.
1263    VendorEvidenceTranslationId
1264);
1265
1266define_id!(
1267    /// Opaque identifier for a vendor trust-root binding artifact.
1268    VendorTrustRootBindingId
1269);
1270
1271define_id!(
1272    /// Opaque identifier for a vendor revocation handling artifact.
1273    VendorRevocationHandlingId
1274);
1275
1276define_id!(
1277    /// Opaque identifier for an incident taxonomy artifact.
1278    IncidentTaxonomyId
1279);
1280
1281define_id!(
1282    /// Opaque identifier for a severity matrix artifact.
1283    SeverityMatrixId
1284);
1285
1286define_id!(
1287    /// Opaque identifier for a pager-route profile artifact.
1288    PagerRouteProfileId
1289);
1290
1291define_id!(
1292    /// Opaque identifier for an escalation-clock policy artifact.
1293    EscalationClockPolicyId
1294);
1295
1296define_id!(
1297    /// Opaque identifier for an applicability-context artifact.
1298    ApplicabilityContextId
1299);
1300
1301define_id!(
1302    /// Opaque identifier for a normalized profile-set artifact.
1303    ProfileSetId
1304);
1305
1306define_id!(
1307    /// Opaque identifier for a composition rule-set artifact.
1308    CompositionRuleSetId
1309);
1310
1311define_id!(
1312    /// Opaque identifier for a composition receipt artifact.
1313    CompositionReceiptId
1314);
1315
1316define_id!(
1317    /// Opaque identifier for an effective constitution artifact.
1318    EffectiveConstitutionId
1319);
1320
1321define_id!(
1322    /// Opaque identifier for a compiled obligation-set artifact.
1323    CompiledObligationSetId
1324);
1325
1326define_id!(
1327    /// Opaque identifier for a composition conflict-set artifact.
1328    CompositionConflictSetId
1329);
1330
1331define_id!(
1332    /// Opaque identifier for a profile exception bundle artifact.
1333    ProfileExceptionBundleId
1334);
1335
1336define_id!(
1337    /// Opaque identifier for a policy impact diff artifact.
1338    PolicyImpactDiffId
1339);
1340
1341#[cfg(test)]
1342#[path = "ids_tests.rs"]
1343mod tests;