diff --git a/apps/ui/src/features/operate/live-debug/DebugLal.vue b/apps/ui/src/features/operate/live-debug/DebugLal.vue index 29c7f3f..16b3c07 100644 --- a/apps/ui/src/features/operate/live-debug/DebugLal.vue +++ b/apps/ui/src/features/operate/live-debug/DebugLal.vue @@ -428,6 +428,7 @@ const popoutComparable = ref< >([]); const popoutDslLines = ref([]); const popoutCurrentLine = ref(0); +const popoutReason = ref(null); /** Brace-match a top-level DSL block (`extractor {` … `}`) and return its * 1-based line span, or null when the opener isn't present. */ @@ -467,6 +468,7 @@ function openCellPopout(cell: LalCellData, step: LalStep, node: LalNodeView): vo popoutJson.value = fullJson(cell.payload, step.type); popoutDslLines.value = sourceDslLines.value; popoutCurrentLine.value = stepLines(step).start; + popoutReason.value = cell.sample.reason ?? null; // Comparable = the record's other same-format (builder) cells. Per- // statement snapshots map to their DSL line; the post-extractor / // output snapshots map to their whole block range, so the captured @@ -970,6 +972,7 @@ function recordTitle(view: LalRecordView): string { @@ -985,6 +988,7 @@ function recordTitle(view: LalRecordView): string { :title="popoutTitle" :script="popoutScript" :json="popoutJson" + :reason="popoutReason" :comparable="popoutComparable" :dsl-lines="popoutDslLines" :current-line="popoutCurrentLine" diff --git a/apps/ui/src/features/operate/live-debug/LalCell.vue b/apps/ui/src/features/operate/live-debug/LalCell.vue index b85408f..5a96635 100644 --- a/apps/ui/src/features/operate/live-debug/LalCell.vue +++ b/apps/ui/src/features/operate/live-debug/LalCell.vue @@ -40,6 +40,9 @@ import { const props = defineProps<{ stepType: SampleType; payload: LalSamplePayload | null; + /** Why this step stopped the pipeline (parse failure, non-matching regexp, …), + * or null/undefined when it continued or the OAP version doesn't report it. */ + reason?: string | null; /** When set (the cell popout), body/content shows its complete pretty- * printed value instead of the 80-char dense-matrix preview. */ full?: boolean; @@ -119,6 +122,10 @@ const outputKvs = computed(() => outputEntries(props.payload, props.full));
{{ t('aborted') }}
+
+ {{ t('drop reason') }} + {{ props.reason }} +
diff --git a/apps/ui/src/features/operate/live-debug/LalCellPopout.vue b/apps/ui/src/features/operate/live-debug/LalCellPopout.vue index 2fe7fcd..cfc092d 100644 --- a/apps/ui/src/features/operate/live-debug/LalCellPopout.vue +++ b/apps/ui/src/features/operate/live-debug/LalCellPopout.vue @@ -40,6 +40,8 @@ const props = defineProps<{ script: string; /** The opened cell's complete payload, pretty JSON. */ json: string; + /** Why this step stopped the pipeline, or null when it continued. */ + reason?: string | null; /** Same-format sibling cells. `lineStart..lineEnd` is the DSL span * (equal for per-statement steps, the block range for block steps). */ comparable: { label: string; script: string; json: string; lineStart: number; lineEnd: number }[]; @@ -114,6 +116,11 @@ function clearCompare(): void {
{{ script }}
+
+ {{ t('drop reason') }} + {{ reason }} +
+
{{ t('compare with') }}