{# Step count — workflow-only (compound/comparison have sections, not steps). #} {# Folder targeting (design §6): the readout shows the project, else the folder NAME (resolved by globalScopeLabel from the #g-folder select), else "Portfolio". A folder target uses a folder icon and hides the "@ version" suffix (folders have no single version). Workflow-only. #} {# C2: the pill title is conditional — a target-bound workflow with a concrete target reads "Pinned scope"; a GENERAL/portfolio workflow has no pinned scope (target picked at run time) so it must not claim one (globalScopePillTitle()). #} {# Run banner — live status pill while a workflow run streams (§6.3). Workflow-only. #}
{# Edit returns from run-view to authoring (§6.3). Workflow-only. #}
{# Hand off to the standalone Run canvas once a run is live (§9). SAME-TAB
navigation (openRunCanvas → location.href) — NOT target=_blank: the SSE
stream is single-consumer per run, so a second tab would split it. Workflow-only. #}
{# Export modal — workflow-only (compound/comparison don't have this yet). #}
{# Run flips to Stop while a run is in flight (§6.3). Task D (T5):
kind-aware label/title — "Run workflow" | "Run compound" |
"Run comparison" (compound/comparison open the inline run drawer). #}
Portfolio snapshot
{# Sortable receiver: ONLY the step cards live here. The model is the
single source of truth; indices/edges re-render from it. In run-view
each card carries a run-* state class driven by the `step` SSE event. #}
{# An unresolved recipe ref (not in the known recipe set) is flagged
with the `unresolved` class (folded into runStepClass) + a title
+ a warning chip; it's excluded from the local run (runnableCount)
but preserved for export (spec §10). #}
{# Run-state badge (spinner while running, check when done). #}
{# Effective-property chips — driven by the per-step effective
config (global ← overrides). MCP steps show export-only. #}
{# Done → clickable report link (§6.3). #}
{# Skipped → reason-specific note. #}
{# Error → message. #}
{# Unresolved recipe ref → warning chip (excluded from run,
preserved for export, spec §10). #}
unresolved
export-only
CVE set
{# Live run line — running message + indeterminate progress fill. #}
Drag a report or tool here to add a step
{# Section count badge #}
{# Ordered, drag-to-reorder section list. Task C: sections are objects
({recipe, overrides}); each row is click-to-select (parallel to step
selection) so the per-section override inspector opens for it. #}
{# Empty state when no sections #}
{# ── Comparison report editor (PR3.1) — Left/Right scope + "vs" divider ── #}
{# Two scope cascades — left/right scope pickers (folder → project → version).
Center canvas: Left panel | vs | Right panel; scopes baked at Save.
Rail: Diff facets + Title + Output (in the left rail above). #}
No sections yet
Click a recipe in the Add section panel on the left to add one.
{# Scope baking banner #}
{# ── Left / Right scope panels ── #}
{# /#comparison-editor #}
{# ── Task D: inline RUN drawer (compound + comparison) ──
Rebuilds the prerun modal INLINE as a right-side drawer that slides in
OVER the editor. The fragment is fetched + wired by
window.__openInlineRun (command-center.js) into #cpd-run-panel; the
runTriggers (_recipeKindCfg) flip cpdRunOpen and call it. Gated to the
two recipe-doc kinds so a workflow never shows it (workflows keep the
in-canvas run-view). Backdrop scrim closes on click; the panel slides
from the right. Re-inject is fresh each open (innerHTML) so handlers
don't stack. #}
{# Left scope #}
{# vs divider #}
{# /.wfb-cmp-scopes #}
Left
vs
{# Right scope #}
Right