diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md index bef96a9..5165250 100644 --- a/docs/BACKLOG.md +++ b/docs/BACKLOG.md @@ -6904,6 +6904,8 @@ That makes a real question **unmeasurable today**: *does `fifo_claim_batch` reli ## 232. Steps view for routers +> ๐Ÿ”ข **Filed 2026-07-30 โ€” not started.** ADR-first: a `route` row kind widens the ADR 0076 ยง3 grammar, so the amendment lands before any build. + **Cluster:** IDE & Authoring. **Priority:** P2. **Verdict:** build (ADR-first). **Severity:** low (capability gap; no correctness or security risk). **What:** `lens parse` emits rows per `@handler` only โ€” [ADR 0076](adr/0076-typed-action-vocabulary-action-list-lens.md) ยง3 states routers are "**out of v1 scope**" โ€” so a `@router` function gets **no Steps view at all**: no "Reopen in Steps view" CodeLens on the def, no rows. An analyst who can read a Handler as steps drops back to raw Python the moment *routing* is the question, which is exactly where destination selection and fan-out are decided. @@ -6928,6 +6930,8 @@ def route_demo_oru(msg): ## 233. Steps view move-drop logic implemented twice (model + webview) +> ๐Ÿ”ข **Filed 2026-07-30 โ€” not started.** Prerequisite for #237; option (c), a differential test across both implementations, can land first on its own. + **Cluster:** IDE & Authoring. **Priority:** P2. **Verdict:** build (de-duplicate). **Severity:** medium โ€” a silent-divergence class, not a visible bug. **What:** the row move/drop semantics exist in **two independent implementations** that must agree and are not mechanically kept in agreement: @@ -6950,6 +6954,8 @@ The webview cannot import from `src/` (it is loaded as a plain script into a `de ## 234. Steps view projection refreshes on save only +> ๐Ÿ”ข **Filed 2026-07-30 โ€” not started.** The framing itself (revisit vs. fix) is unsettled โ€” read the Verdict line and #225 before treating this as either. + **Cluster:** IDE & Authoring. **Priority:** P3. **Verdict:** **revisit โ€” ADR amendment required, do not treat as a bug.** **Severity:** low (UX latency). **What:** the Steps view re-projects the handler on **save**, not on edit. Type in the split text editor and the rows do not follow until the buffer is written. Live values go further and are **skipped entirely while `document.isDirty`**. @@ -6966,6 +6972,8 @@ The webview cannot import from `src/` (it is loaded as a plain script into a `de ## 235. Generate Steps view parameter forms from Python type hints +> ๐Ÿ”ข **Filed 2026-07-30 โ€” not started.** Widens what is *editable* without widening the recognition grammar; sequence deliberately against #237. + **Cluster:** IDE & Authoring. **Priority:** P2. **Verdict:** build (evaluate as its own lane). **Severity:** low. **What:** today a recognized row exposes **enabled inputs only for literal params**; anything else renders visibly disabled (`stepsView.ts:11-13`). Windmill's pattern is to derive a **JSON Schema from the script's Python type hints** and render the step's parameter form from that schema. Applied here: `lens parse` (or a sibling `lens schema`) emits, per recognized action, a small parameter schema derived from the vocabulary helper's own **type hints** โ€” which ADR 0076 ยง2 already requires to be "fully type-hinted, mypy-strict". @@ -6982,6 +6990,8 @@ The webview cannot import from `src/` (it is loaded as a plain script into a `de ## 236. Test-this-step and test-up-to-step with pinned upstream values +> ๐Ÿ”ข **Filed 2026-07-30 โ€” not started.** Largely a stop condition + state dump on ADR 0072's traced dry-run; lookup rows must mock by default, not as an afterthought. + **Cluster:** IDE & Authoring. **Priority:** P2. **Verdict:** build (evaluate as its own lane). **Severity:** low. **What:** the Steps view's Test control delegates to the Test Bench โ€” it runs the **whole** handler. Windmill's OSS editor offers *test this step*, *test up to this step*, and **step mocking** (pin an upstream step's output and run from there). The analog: run a handler **up to row N** against a chosen synthetic sample and show the message state at that point; optionally pin an upstream row's result so a lower row can be exercised without re-running an expensive lookup. @@ -6996,6 +7006,8 @@ The webview cannot import from `src/` (it is loaded as a plain script into a `de ## 237. Per-argument input modes (static templated dynamic) in the Steps view +> ๐Ÿ”ข **Filed 2026-07-30 โ€” not started.** Gated on #233: the duplicated move/drop logic is a prerequisite for touching this form surface. + **Cluster:** IDE & Authoring. **Priority:** P2. **Verdict:** build. **Severity:** low. **What:** today a parameter slot is effectively **literal-or-refused** โ€” a literal is editable, anything else (a `msg[...]` read, a concat, a conditional) collapses the row's editability. Windmill's flow editor instead gives every argument an explicit **mode**: *static* (a literal), *templated* (an interpolation over upstream values), or *dynamic* (an expression), with a picker over what is available upstream. Adopting the mode concept turns "this row is not editable" into "this argument is in dynamic mode", which is both more honest and more useful. @@ -7012,6 +7024,8 @@ The webview cannot import from `src/` (it is loaded as a plain script into a `de ## 238. OpenFlow step-attribute completeness pass over the engine vocabulary +> ๐Ÿ”ข **Filed 2026-07-30 โ€” not started.** A review whose output is findings, not a feature; OpenFlow is explicitly **not** a compatibility target. + **Cluster:** IDE & Authoring / Engine. **Priority:** P3. **Verdict:** build (a review, not a feature). **Severity:** none โ€” this is a gap-analysis task whose output is findings. **What:** read Windmill's **OpenFlow** step-attribute vocabulary as a **completeness checklist** against MessageFoundry's own step/connector semantics, and record what is missing, what is deliberately absent, and what is already covered under a different name. The attributes to walk: `retry`, `timeout`, `stop_after_if`, `skip_if`, `continue_on_error`, `mock`, `cache_ttl`. @@ -7026,6 +7040,8 @@ The webview cannot import from `src/` (it is loaded as a plain script into a `de ## 239. Re-measure Steps view estate coverage (opaque vs editable rows) after the palette +> ๐Ÿšง **PARTIAL โ€” measured 2026-07-30, tooling not yet merged.** The scan ran against the de-identified estate (388 files ยท 145 handlers ยท 1,423 rows ยท 0 parse refusals; editable share **42.0%**, fully-typed handlers **14.5%**) and the full result is recorded on PR #81. The re-runnable `scripts/quality/lens_coverage.py` is still unmerged, so the number is **not yet reproducible from `main`**. + **Cluster:** IDE & Authoring. **Priority:** P1 โ€” this number decides how much further Steps-view investment is justified. **Verdict:** build (cheap, reproducible). **Severity:** none (measurement). **What:** re-run [ADR 0089](adr/0089-recognition-first-lens-native-idioms.md) ยง5's AST coverage scan against the current production estate and publish the delta. **The measurement already exists and must not be re-invented:** ADR 0089 ยง1 scanned **87 files / 486 `msg`-manipulating functions / 3,852 statements** and found **~66% of projected rows opaque** (`code` / `UNRECOGNIZED control`) with **100% of handlers rendering zero editable action rows**; the index row records **~42% editable after Phase A**. ยง5 states the scan is explicitly "a **repeatable** coverage check โ€” re-running it after each phase measures the coverage lift and surfaces the shrinking residual".