Checkpoint source 7 workflows and in-progress diagram authoring redesign
Rust checks / check (ubuntu-latest) (push) Canceled after 0s
Rust checks / check (windows-latest) (push) Canceled after 0s

Preserve current core, source, REST, desktop, recovery, documentation and validation work, including AGENTS.md and the development summary. This is a work-in-progress checkpoint: the new compact palette has outstanding compilation errors and native acceptance; earlier passing gates retain their documented scope.
This commit is contained in:
Codex
2026-09-10 10:06:55 -07:00
parent 4b6b5fc197
commit e2ecfea69b
162 changed files with 17595 additions and 926 deletions
+27 -2
View File
@@ -711,14 +711,21 @@ pub fn view(app: &App) -> Element<'_, Message> {
return out.push(label("Start with a Process, Scenario or State machine using Create element. Add occurrences or regions inside it to describe behavior.")).padding(24).into();
};
let e = &p.elements[&selected.id];
let compact_process = matches!(e.kind(), Kind::Process | Kind::FunctionalChain)
&& (uses_explicit_topology(p, e.id) || e.steps().is_none_or(Vec::is_empty));
if e.kind() == Kind::StateMachine {
out = column![text("States & modes").size(20)].spacing(8);
} else if compact_process {
// The process canvas owns its compact header and remaining-height layout.
out = column![].spacing(6);
} else if matches!(e.kind(), Kind::Process | Kind::FunctionalChain) {
out = column![text("Processes & functional chains").size(20)].spacing(8);
}
out = out.push(
pick_list(choices, Some(selected), Message::BehaviorOwner)
.width(Fill)
.text_size(13)
.padding(10),
.padding(if compact_process { 6 } else { 10 }),
);
if matches!(e.kind(), Kind::Process | Kind::FunctionalChain) {
return topology::view(app, e.id, out);
@@ -767,6 +774,17 @@ fn uses_explicit_topology(p: &Project, owner: Id) -> bool {
})
}
pub fn selected_behavior(p: &Project, selected: Id) -> Option<Id> {
if let Some(Relation {
body: RelationBody::ContextualLink { owner, .. },
..
}) = p.relations.get(&selected)
{
return p
.elements
.get(owner)
.filter(|e| matches!(e.kind(), Kind::Process | Kind::FunctionalChain))
.map(|e| e.id);
}
let mut current = Some(
p.relations
.get(&selected)
@@ -1154,7 +1172,7 @@ impl Scene {
MessageKind::Timer { .. } => "timer · ",
}
};
let message_label = if !scenario {
let mut message_label = if !scenario {
r.map(|r| r.name.clone()).unwrap_or_else(|| e.name.clone())
} else if let MessageKind::Timer { expression } = message_kind {
format!("{} · {expression}", e.name)
@@ -1163,6 +1181,12 @@ impl Scene {
} else {
e.name.clone()
};
if scenario
&& let Some(operation) = crate::data_values::operation_label(p, e)
{
message_label.push_str(" · ");
message_label.push_str(&operation);
}
self.lines.push(Line {
id: *id,
points,
@@ -2311,6 +2335,7 @@ mod direct_canvas_tests {
f.owner,
&format!("Reply {index}"),
OccurrenceBody::Exchange {
operation: None,
exchange: Some(f.exchange),
sender: Some(f.receiver),
receiver: Some(f.sender),