Complete source 6 engineering workflows and preserve release validation evidence
This commit is contained in:
@@ -191,6 +191,7 @@ fn path(own: &Own, facet: &FacetSelector) -> Option<Vec<String>> {
|
||||
F::State(StateFacet::Exit) => ("State", &["exit"]),
|
||||
F::State(StateFacet::DoActivity) => ("State", &["do_activity"]),
|
||||
F::Constraint(ConstraintFacet::Expression) => ("Constraint", &["expression"]),
|
||||
F::Category(CategoryFacet::Family) => ("ExchangeCategory", &["family"]),
|
||||
F::Relation(RelationFacet::Source) => ("*", &["source"]),
|
||||
F::Relation(RelationFacet::Target) => ("*", &["target"]),
|
||||
F::Relation(RelationFacet::AllocationOrder) => ("InterfaceItemAllocation", &["order"]),
|
||||
@@ -206,7 +207,7 @@ fn path(own: &Own, facet: &FacetSelector) -> Option<Vec<String>> {
|
||||
F::Relation(RelationFacet::TargetNavigable) => ("DataAssociation", &["target_navigable"]),
|
||||
F::Relation(RelationFacet::SourcePort) => ("FunctionalExchange", &["source_port"]),
|
||||
F::Relation(RelationFacet::TargetPort) => ("FunctionalExchange", &["target_port"]),
|
||||
F::Relation(RelationFacet::Oriented) => ("BoundaryExchange", &["oriented"]),
|
||||
F::Relation(RelationFacet::Oriented) => ("*", &["oriented"]),
|
||||
F::Relation(RelationFacet::ExtendCondition) => ("CapabilityExtend", &["condition"]),
|
||||
F::Relation(RelationFacet::SequenceGuard) => ("SequenceLink", &["guard"]),
|
||||
F::Relation(RelationFacet::TransitionKind) => ("StateTransition", &["transition_kind"]),
|
||||
@@ -311,7 +312,8 @@ pub(crate) fn collection(project: &Project, id: Id, which: ReferenceCollection)
|
||||
Some(
|
||||
RelationBody::Interaction { items, .. }
|
||||
| RelationBody::FunctionalExchange { items, .. }
|
||||
| RelationBody::BoundaryExchange { items, .. },
|
||||
| RelationBody::BoundaryExchange { items, .. }
|
||||
| RelationBody::CommunicationMean { items, .. },
|
||||
) => Some(items.clone()),
|
||||
_ => None,
|
||||
},
|
||||
@@ -327,6 +329,10 @@ pub(crate) fn collection(project: &Project, id: Id, which: ReferenceCollection)
|
||||
Some(SharedBody::Constraint { constrained, .. }) => Some(constrained.clone()),
|
||||
_ => None,
|
||||
},
|
||||
C::CategoryExchanges => match shared {
|
||||
Some(SharedBody::ExchangeCategory { exchanges, .. }) => Some(exchanges.clone()),
|
||||
_ => None,
|
||||
},
|
||||
}
|
||||
}
|
||||
pub(crate) fn order_collection(which: OrderedCollection) -> ReferenceCollection {
|
||||
@@ -575,6 +581,7 @@ fn catalog_facets(
|
||||
ReferenceCollection::FunctionOutputItems,
|
||||
ReferenceCollection::SignalItems,
|
||||
ReferenceCollection::ExchangeItems,
|
||||
ReferenceCollection::CategoryExchanges,
|
||||
ReferenceCollection::TransitionTriggers,
|
||||
ReferenceCollection::TransitionEffects,
|
||||
ReferenceCollection::Constrained,
|
||||
@@ -1036,6 +1043,11 @@ mod coverage {
|
||||
p
|
||||
};
|
||||
for (kind, parts, which) in [
|
||||
(
|
||||
"ExchangeCategory",
|
||||
vec!["exchanges"],
|
||||
ReferenceCollection::CategoryExchanges,
|
||||
),
|
||||
("Process", vec!["steps"], ReferenceCollection::Steps),
|
||||
("FunctionalChain", vec!["steps"], ReferenceCollection::Steps),
|
||||
("Scenario", vec!["steps"], ReferenceCollection::Steps),
|
||||
@@ -1079,6 +1091,11 @@ mod coverage {
|
||||
vec!["items"],
|
||||
ReferenceCollection::ExchangeItems,
|
||||
),
|
||||
(
|
||||
"CommunicationMean",
|
||||
vec!["items"],
|
||||
ReferenceCollection::ExchangeItems,
|
||||
),
|
||||
(
|
||||
"StateTransition",
|
||||
vec!["triggers"],
|
||||
|
||||
@@ -73,6 +73,7 @@ macro_rules! enums {
|
||||
} )* };
|
||||
}
|
||||
enums!(
|
||||
crate::view_options::ExchangeFamily,
|
||||
ExchangeItemKind,
|
||||
ExchangeMechanism,
|
||||
ParameterDirection,
|
||||
|
||||
@@ -63,7 +63,8 @@ pub(crate) fn set_collection(
|
||||
Some(
|
||||
RelationBody::Interaction { items, .. }
|
||||
| RelationBody::FunctionalExchange { items, .. }
|
||||
| RelationBody::BoundaryExchange { items, .. },
|
||||
| RelationBody::BoundaryExchange { items, .. }
|
||||
| RelationBody::CommunicationMean { items, .. },
|
||||
) => Some(items),
|
||||
_ => None,
|
||||
},
|
||||
@@ -79,6 +80,10 @@ pub(crate) fn set_collection(
|
||||
Some(SharedBody::Constraint { constrained, .. }) => Some(constrained),
|
||||
_ => None,
|
||||
},
|
||||
C::CategoryExchanges => match p.elements.get_mut(&id).and_then(Element::shared_mut) {
|
||||
Some(SharedBody::ExchangeCategory { exchanges, .. }) => Some(exchanges),
|
||||
_ => None,
|
||||
},
|
||||
}
|
||||
.ok_or("Collection is inapplicable on target")?;
|
||||
*slot = list;
|
||||
|
||||
@@ -795,7 +795,18 @@ fn build_review(
|
||||
current.clone()
|
||||
};
|
||||
if resolution.decision == SemanticDecision::TakeSource {
|
||||
fact = remap_fact(&fact, &map, source_layer)?;
|
||||
fact = if let Some(adapted) = transitions::review_endpoint_fact(
|
||||
initial,
|
||||
&plan.request.transition,
|
||||
&map,
|
||||
request.source,
|
||||
target,
|
||||
&fact,
|
||||
)? {
|
||||
adapted
|
||||
} else {
|
||||
remap_fact(&fact, &map, source_layer)?
|
||||
};
|
||||
}
|
||||
// A Keep reads the frozen target, never a value written by an earlier source.
|
||||
if resolution.decision != SemanticDecision::KeepTarget {
|
||||
|
||||
@@ -86,6 +86,7 @@ macro_rules! scalar_families {
|
||||
ExchangeItem, ExchangeItemFacet, ExchangeItemReview {
|
||||
Nature: ExchangeItemKind, Mechanism: ExchangeMechanism, Supertype: Option<Id>
|
||||
}
|
||||
Category, CategoryFacet, CategoryReview { Family: crate::view_options::ExchangeFamily }
|
||||
Interface, InterfaceFacet, InterfaceReview { Supertype: Option<Id> }
|
||||
Data, DataFacet, DataReview {
|
||||
Constructor: DataConstructor,
|
||||
@@ -197,6 +198,7 @@ pub enum ReferenceCollection {
|
||||
FunctionOutputItems,
|
||||
SignalItems,
|
||||
ExchangeItems,
|
||||
CategoryExchanges,
|
||||
TransitionTriggers,
|
||||
TransitionEffects,
|
||||
Constrained,
|
||||
|
||||
Reference in New Issue
Block a user