Complete source 6 engineering workflows and preserve release validation evidence

This commit is contained in:
Codex
2026-09-06 21:49:04 -07:00
parent 2b2d2bc18b
commit 4b6b5fc197
290 changed files with 48271 additions and 1791 deletions
+44 -5
View File
@@ -6,7 +6,7 @@ use std::{
use uuid::Uuid;
pub type Id = Uuid;
pub const SCHEMA_VERSION: u32 = 5;
pub const SCHEMA_VERSION: u32 = 6;
pub const MAX_COORDINATE: f32 = 1_000_000.;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
@@ -39,6 +39,7 @@ pub enum Kind {
Mission,
FunctionalChain,
ExchangeItem,
ExchangeCategory,
DataType,
DataField,
Interface,
@@ -65,7 +66,7 @@ pub enum Kind {
Constraint,
}
impl Kind {
pub const ALL: [Self; 38] = [
pub const ALL: [Self; 39] = [
Self::Entity,
Self::Actor,
Self::Role,
@@ -80,6 +81,7 @@ impl Kind {
Self::Mission,
Self::FunctionalChain,
Self::ExchangeItem,
Self::ExchangeCategory,
Self::DataType,
Self::DataField,
Self::Interface,
@@ -121,6 +123,7 @@ impl Kind {
Self::Mission => "Mission",
Self::FunctionalChain => "Functional chain",
Self::ExchangeItem => "Exchange item",
Self::ExchangeCategory => "Exchange category",
Self::DataType => "Data type",
Self::DataField => "Data field",
Self::Interface => "Interface",
@@ -564,6 +567,10 @@ pub enum OccurrenceBody {
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub enum SharedBody {
ExchangeCategory {
family: crate::view_options::ExchangeFamily,
exchanges: Vec<Id>,
},
ExchangeItem {
kind: ExchangeItemKind,
mechanism: ExchangeMechanism,
@@ -754,6 +761,10 @@ impl ElementBody {
default: None,
unit: String::new(),
},
Kind::ExchangeCategory => SharedBody::ExchangeCategory {
family: crate::view_options::ExchangeFamily::Work,
exchanges: vec![],
},
Kind::DataField => SharedBody::DataField {
type_ref: TypeRef::String,
minimum: 1,
@@ -815,6 +826,7 @@ impl SharedBody {
pub fn kind(&self) -> Kind {
match self {
Self::ExchangeItem { .. } => Kind::ExchangeItem,
Self::ExchangeCategory { .. } => Kind::ExchangeCategory,
Self::DataType { .. } => Kind::DataType,
Self::DataField { .. } => Kind::DataField,
Self::Interface { .. } => Kind::Interface,
@@ -844,6 +856,7 @@ pub enum RelationKind {
RoleAssignment,
FunctionalExchange,
BoundaryExchange,
CommunicationMean,
MissionCapability,
CapabilityInclude,
CapabilityExtend,
@@ -858,7 +871,7 @@ pub enum RelationKind {
StateAction,
}
impl RelationKind {
pub const ALL: [Self; 23] = [
pub const ALL: [Self; 24] = [
Self::InterfaceItemAllocation,
Self::DataAssociation,
Self::Allocation,
@@ -870,6 +883,7 @@ impl RelationKind {
Self::RoleAssignment,
Self::FunctionalExchange,
Self::BoundaryExchange,
Self::CommunicationMean,
Self::MissionCapability,
Self::CapabilityInclude,
Self::CapabilityExtend,
@@ -902,6 +916,10 @@ impl RelationKind {
Self::RoleAssignment => from == Kind::Role && to == Kind::Activity,
Self::FunctionalExchange => from == Kind::Function && to == Kind::Function,
Self::BoundaryExchange => from == Kind::Port && to == Kind::Port,
Self::CommunicationMean => {
matches!(from, Kind::Entity | Kind::Actor)
&& matches!(to, Kind::Entity | Kind::Actor)
}
Self::MissionCapability => matches!(
(from, to),
(Kind::OperationalMission, Kind::Capability)
@@ -953,6 +971,7 @@ impl RelationKind {
Self::RoleAssignment => "OA role → activity",
Self::FunctionalExchange => "SA function → SA function",
Self::BoundaryExchange => "Output port → input port",
Self::CommunicationMean => "OA entity/actor → OA entity/actor",
Self::MissionCapability => "Mission → capability in the same perspective",
Self::CapabilityInclude => "Including capability → included capability",
Self::CapabilityExtend => {
@@ -963,7 +982,7 @@ impl RelationKind {
Self::SequenceLink => "Preceding → following contribution in the same process or chain",
Self::StateTransition => "State → state in one machine",
Self::ExchangeAllocation => {
"Boundary exchange → operational interaction / functional exchange"
"Communication means / boundary exchange → operational interaction / functional exchange"
}
Self::InterfaceProvision => "Participant/port → provided interface",
Self::InterfaceRequirement => "Participant/port → required interface",
@@ -986,6 +1005,7 @@ impl fmt::Display for RelationKind {
Self::RoleAssignment => "Role assignment",
Self::FunctionalExchange => "Functional exchange",
Self::BoundaryExchange => "Boundary exchange",
Self::CommunicationMean => "Communication means",
Self::MissionCapability => "Mission capability",
Self::CapabilityInclude => "Capability include",
Self::CapabilityExtend => "Capability extend",
@@ -1074,6 +1094,12 @@ pub enum RelationBody {
oriented: bool,
items: Vec<Id>,
},
CommunicationMean {
source: Id,
target: Id,
oriented: bool,
items: Vec<Id>,
},
MissionCapability {
source: Id,
target: Id,
@@ -1160,6 +1186,7 @@ impl RelationBody {
Self::RoleAssignment { .. } => RelationKind::RoleAssignment,
Self::FunctionalExchange { .. } => RelationKind::FunctionalExchange,
Self::BoundaryExchange { .. } => RelationKind::BoundaryExchange,
Self::CommunicationMean { .. } => RelationKind::CommunicationMean,
Self::MissionCapability { .. } => RelationKind::MissionCapability,
Self::CapabilityInclude { .. } => RelationKind::CapabilityInclude,
Self::CapabilityExtend { .. } => RelationKind::CapabilityExtend,
@@ -1187,6 +1214,7 @@ impl RelationBody {
| Self::RoleAssignment { source, target }
| Self::FunctionalExchange { source, target, .. }
| Self::BoundaryExchange { source, target, .. }
| Self::CommunicationMean { source, target, .. }
| Self::MissionCapability { source, target }
| Self::CapabilityInclude { source, target }
| Self::CapabilityExtend { source, target, .. }
@@ -1214,6 +1242,7 @@ impl RelationBody {
| Self::RoleAssignment { source, target }
| Self::FunctionalExchange { source, target, .. }
| Self::BoundaryExchange { source, target, .. }
| Self::CommunicationMean { source, target, .. }
| Self::MissionCapability { source, target }
| Self::CapabilityInclude { source, target }
| Self::CapabilityExtend { source, target, .. }
@@ -1235,7 +1264,8 @@ impl RelationBody {
match self {
Self::Interaction { items, .. }
| Self::FunctionalExchange { items, .. }
| Self::BoundaryExchange { items, .. } => items,
| Self::BoundaryExchange { items, .. }
| Self::CommunicationMean { items, .. } => items,
_ => &[],
}
}
@@ -1285,6 +1315,12 @@ impl RelationBody {
oriented: true,
items: vec![],
},
RelationKind::CommunicationMean => Self::CommunicationMean {
source,
target,
oriented: false,
items: vec![],
},
RelationKind::MissionCapability => Self::MissionCapability { source, target },
RelationKind::CapabilityInclude => Self::CapabilityInclude { source, target },
RelationKind::CapabilityExtend => Self::CapabilityExtend {
@@ -1387,6 +1423,8 @@ pub struct Diagram {
pub description: String,
pub layer: Layer,
pub projection: ProjectionKind,
#[serde(default)]
pub view_options: crate::view_options::ViewOptions,
#[serde(deserialize_with = "unique_id_map")]
pub nodes: BTreeMap<Id, NodePlacement>,
#[serde(default)]
@@ -1814,6 +1852,7 @@ impl Project {
description: String::new(),
layer,
projection: ProjectionKind::Overview,
view_options: crate::view_options::ViewOptions::default(),
nodes: BTreeMap::new(),
routes: vec![],
},