feat: parser join-mode (// trigger all) + script_trigger.join_all

Stage A: JoinMode{Any(default),All} + `// trigger any|all` directive in
parse_pipeline_annotations; TriggerSpec::is_partition_bearing() (path
contains {partition}); join_mode threaded through all 4 asset-parser
crates (ts/py/sql/yaml). Stage B: reversible migration adds
script_trigger.join_all; insert_script_trigger writes it; deploy path
sets it from the parsed annotation. No reader yet (AND-join dispatch is
the next stage) so runtime behaviour is unchanged.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Ruben Fiszel
2026-05-16 19:29:07 +00:00
co-authored by Claude Opus 4.7
parent 9f9289d04d
commit 9e157868bf
10 changed files with 132 additions and 5 deletions
@@ -1240,6 +1240,8 @@ async fn create_script_internal<'c>(
// them in auto_kind itself).
let pipeline_annotations = parse_pipeline_annotations(&ns.content);
let in_pipeline = pipeline_annotations.in_pipeline;
// `// trigger all` → AND join barrier (else OR, the default).
let pipeline_join_all = !pipeline_annotations.join_mode.is_any();
let pipeline_triggers = pipeline_annotations.triggers;
let auto_kind = if in_pipeline {
Some("pipeline".to_string())
@@ -1566,6 +1568,7 @@ async fn create_script_internal<'c>(
&ns.path,
trigger_kind,
&trigger_ref,
pipeline_join_all,
)
.await?;
}