// Canonical SysML metamodel types — adapted from phase-0/src/types.ts // (the Phase 0 validation that ran 10/10 against the corpus). // // See docs/sysml-modeling.md §6 for the design rationale and §3 for what we // deliberately don't model. export type BlockKind = "block" | "actor" | "constraint" | "system"; export type PropertyType = | { kind: "string" } | { kind: "number" } | { kind: "boolean" } | { kind: "enum"; values: string[] }; export type Multiplicity = "0..1" | "1" | "0..*" | "1..*"; export interface Property { id: string; name: string; type: PropertyType; multiplicity: Multiplicity; description?: string; } export interface Block { id: string; label: string; kind: BlockKind; stereotypes: string[]; properties: Property[]; description?: string; } export type AssociationKind = | "association" | "composition" | "aggregation" | "generalization" | "constraintApplies"; export interface Association { id: string; fromBlockId: string; toBlockId: string; label: string; kind: AssociationKind; multiplicity?: { from: Multiplicity; to: Multiplicity }; } export interface Constraint { id: string; label: string; expression: string; appliesTo: string[]; } export type RequirementRelation = | { kind: "satisfy"; blockId: string } | { kind: "derive"; fromReqId: string } | { kind: "verify"; experimentId: string }; export interface Requirement { id: string; tag: string; text: string; relations: RequirementRelation[]; } export interface SysMLModel { systemOfInterestId?: string; blocks: Block[]; associations: Association[]; constraints: Constraint[]; requirements: Requirement[]; }