chore: remove progress reports

This commit is contained in:
lda
2026-08-14 12:02:42 +07:00 Verified
parent 89e934e65b
commit 8383d7f07a
12 changed files with 0 additions and 689 deletions
@@ -1,19 +0,0 @@
# SDD ledger — plan: docs/historical/superpowers/plans/2026-08-12-composite-input-expressions.md
Task 1: complete (`b38cc325`, fix `e661691e`, approved)
Task 2: complete (`acda465d`, fix `b216521f`, approved)
Task 3: complete (`fa22a1a6`, fixes `4120174a`, `03150a5c`, `0eeb6079`, approved)
Task 4: complete (`144152a0`, fix `c259ba73`, approved)
Task 5: complete (`1bb684bf`, fixes `cca1be89`, `0a7996da`, approved)
Task 6: complete (`b8a16a0`, fixes `29d7a11d`, `18c9ef12`, approved)
Task 7: complete (`c062680c`, fixes `01b33c8c`, `5f09765f`, `7923254f`, approved; React Doctor 100/100)
Task 8: complete in the shared worktree; focused proofs pass. The scoped Python
regression retains six pre-existing admin/schema failures, and repository-wide
format/type gates retain their pre-existing failures; see task-8-report.md.
@@ -1,57 +0,0 @@
# Task 1 Review Fix Report
## Status
Fixed P1 findings #1 and #2 from `task-1-review.md`. P2 #3 was intentionally left for the planned Python API/runtime tasks.
## Fixes
### P1 #1: Prebuilt expression limits
`InputExpressionBinding.check_limits()` now converts an already-constructed Pydantic expression model with `model_dump(mode="python")` before invoking the raw-tree limit walker. This keeps the same bounded validation path for both JSON mappings and prebuilt `ArrayExpression`/`LiteralExpression` instances.
Added regressions for:
- a prebuilt array containing 1,024 literal expressions;
- a prebuilt literal containing 64 nested JSON containers.
Both now fail with the configured node/depth validation errors instead of bypassing the limits.
### P1 #2: Strict JSON mapping boundary
`validate_strict_json_value()` now accepts native `dict` containers, matching the original strict contract, rather than every `collections.abc.Mapping`. A `UserDict` is rejected instead of being silently converted into a JSON-shaped dictionary.
Added a regression covering `UserDict` through the literal-expression boundary.
### P2 #3: Deferred builder/runtime carry-through
No change. Task 1 is persistence-only. The existing adapter cast remains documented as a temporary boundary because Task 4 widens builder signatures and Task 2 adds runtime resolution. No Task 1 persistence test is broken by leaving that work deferred.
## TDD And Verification
The new review regressions were run before the production fixes and failed as expected: `3 failed, 14 passed`. After the fixes, the focused expression suite passed with `17 passed`.
Final commands:
```powershell
uv run pytest tests/core/test_input_expressions.py tests/core/test_canonical_node_bindings.py tests/artifacts/test_draft_models.py -q
uv run basedpyright --level error src/wf_core/models src/wf_artifacts/drafts
uv run ruff check src/wf_core/models src/wf_artifacts/drafts tests/core/test_input_expressions.py tests/core/test_canonical_node_bindings.py tests/artifacts/test_draft_models.py
uv run ruff format --check src/wf_core/models src/wf_artifacts/drafts tests/core/test_input_expressions.py tests/core/test_canonical_node_bindings.py tests/artifacts/test_draft_models.py
git diff --check
```
Results before the fix commit:
- `70 passed`
- `basedpyright`: `0 errors, 0 warnings, 0 notes`
- Ruff check: all checks passed
- Ruff format: all files already formatted
- Git diff check: clean apart from normal Windows line-ending warnings
## Changed Files
- `src/wf_core/models/input_bindings.py`
- `src/wf_core/models/json_values.py`
- `tests/core/test_input_expressions.py`
- This report file
@@ -1,54 +0,0 @@
# Task 1 Report: Canonical Input Expressions And Persistence
## Status
Implemented and verified. The task adds a recursive, discriminated input-expression model and widens only node-local persisted input/request fields. Workflow-level output remains on the existing simple path/value union.
## Changed Content
- Added `src/wf_core/models/json_values.py` with the shared recursive `JsonValue` type and strict JSON validator.
- Added `src/wf_core/models/input_bindings.py` with path/value bindings, literal/path/array/object expressions, `InputExpressionBinding`, `StepInputBinding`, and bounded raw-tree validation.
- Updated `src/wf_core/models/steps.py` to preserve legacy binding imports while using `StepInputBinding` for `NodeUse.input`, `SubgraphNode.input`, and `InterruptNode.request`.
- Updated `src/wf_artifacts/drafts/models.py` to use `StepInputBinding` for draft use, subgraph, and interrupt input fields.
- Exported the new public models and JSON helpers from `wf_core.models` and `wf_core`.
- Added a narrow typed cast in `src/wf_artifacts/drafts/adapter.py` because the existing Python authoring builder remains simple-binding-only until the later API carry-through task. This preserves Task 1 persistence without pretending runtime authoring support is already complete.
- Added model and persistence coverage in `tests/core/test_input_expressions.py`, `tests/core/test_canonical_node_bindings.py`, and `tests/artifacts/test_draft_models.py`.
## Behavior Covered
- The exact composite object/array/path/literal binding round-trips through `NodeUse`, `SubgraphNode`, `InterruptNode`, `DraftUseStep`, `DraftSubgraphPayload`, and `DraftInterruptPayload`.
- Workflow final-output parsing rejects composite expressions and keeps the existing simple union.
- Existing path/value bindings dump unchanged.
- Extra fields are rejected at binding and expression nodes.
- Literal expressions accept only strict finite JSON values; tuples, sets, NaN, and infinity are rejected.
- Expression depth is bounded at 64 levels.
- Total expression/container nodes are bounded at 1,024.
- Malformed raw expression structures are left for normal Pydantic validation rather than recursively trusted by the limit walker.
## TDD And Verification
The new model suite was first run before production implementation and failed during collection because `InputExpressionBinding` did not exist. After implementation, the focused suite passed.
Commands run:
```powershell
uv run pytest tests/core/test_input_expressions.py tests/core/test_canonical_node_bindings.py tests/artifacts/test_draft_models.py -q
uv run basedpyright --level error src/wf_core/models src/wf_artifacts/drafts
uv run ruff check src/wf_core/models src/wf_artifacts/drafts tests/core/test_input_expressions.py tests/core/test_canonical_node_bindings.py tests/artifacts/test_draft_models.py
uv run ruff format --check src/wf_core/models src/wf_artifacts/drafts tests/core/test_input_expressions.py tests/core/test_canonical_node_bindings.py tests/artifacts/test_draft_models.py
git diff --check
```
Results:
- `67 passed`
- `basedpyright`: `0 errors, 0 warnings, 0 notes`
- Ruff check: all checks passed
- Ruff format: all files already formatted
- Git diff check: clean apart from normal Windows line-ending warnings
## Concerns And Follow-Up
- Composite expressions are persisted and decoded by the core/draft models, but the Python authoring builder and runtime resolution paths still require the later planned carry-through task.
- The adapter cast is deliberately isolated at that boundary and documented so future API work can replace it with a widened authoring input type rather than spreading casts.
- No transport, CLI, TypeScript, or console changes are included in this task.
@@ -1,40 +0,0 @@
# Task 2 Review Fix Report
## Status
Fixed the sole Task 2 review finding: direct `InputPathBinding` resolution now
preserves the pre-Task 2 runtime behavior, while composite `PathExpression`
leaves retain strict `JsonValue` validation.
## Change
`resolve_step_input_bindings()` now forwards values from direct path bindings
unchanged into `set_local_value`. This preserves both identity and legacy
acceptance of opaque runtime values. `resolve_input_expression()` continues to
call `validate_strict_json_value()` for composite path leaves, as required by
the composite expression contract.
No Task 4 authoring adapter files were modified.
## TDD Evidence
- RED: the new legacy identity test failed because the direct path branch
rejected an opaque nested object through strict JSON validation.
- GREEN: removing validation from only the direct path branch made the legacy
test pass while the composite path strictness regression remained passing.
## Verification
- Shared resolver tests: `9 passed`.
- Task 2 focused/core selection: `37 passed`.
- Full core suite: `287 passed`.
- Ruff check: clean for all changed files.
- Ruff format check: clean.
- Scoped basedpyright: `0 errors, 0 warnings, 0 notes` for
`src/wf_core/runtime` and `src/wf_core/validation`.
- `git diff --check`: clean apart from normal Windows line-ending warnings.
## Concerns
- The Task 4 Python authoring adapter widening remains intentionally separate
and was not touched by this fix.
@@ -1,54 +0,0 @@
# Task 2 Report: Resolve And Validate Expressions In Core Execution
## Status
Implemented and verified. Core runtime input resolution now supports the
canonical composite input expressions from Task 1 across node execution,
prepared subgraph boundaries, and interrupt requests. Structural validation
walks every nested path expression while keeping each top-level binding
atomic for target-overlap checks.
## Changed Content
- Added `src/wf_core/runtime/input_bindings.py` with:
- `resolve_input_expression()` for literal, path, array, and object nodes;
- `resolve_step_input_bindings()` for simple and composite bindings;
- strict JSON validation for values read from graph sources;
- location-preserving `WorkflowExecutionError` messages for missing paths and
local-target failures.
- Replaced duplicated input-binding loops in:
- `src/wf_core/runtime/ops/nodes.py`;
- `src/wf_core/runtime/subgraphs.py`;
- `src/wf_core/runtime/ops/interrupts.py`.
- Extended `src/wf_core/validation/steps.py` to accept `StepInputBinding`,
recursively validate every `PathExpression`, and report nested source paths
such as `nodes[0].input[0].expression.fields.name.path`.
- Added runtime and validation coverage in:
- `tests/core/test_input_expression_runtime.py`;
- `tests/core/test_mapping_validation.py`.
## TDD Evidence
- RED: the new focused suite initially failed during collection because the
shared runtime resolver module did not exist.
- GREEN: after implementation, the focused suite passed and was extended with
explicit input/context path, nested location, and local-target failure cases.
## Verification
- Focused Task 2 suites: `35 passed`.
- Full core suite: `285 passed`.
- Ruff check: clean for all changed source and test files.
- Ruff format check: all changed files already formatted.
- Scoped basedpyright: `0 errors, 0 warnings, 0 notes` for
`src/wf_core/runtime` and `src/wf_core/validation`.
- `git diff --check`: clean apart from normal Windows line-ending warnings.
## Concerns
- The Python authoring builder and artifact adapter still carry the separate
Task 1 follow-up for widening `InputBindingArg`; this task intentionally
consumes the canonical models at the core runtime boundary and does not
redesign that authoring API.
- Workflow-level `project_output` remains on the simple path/value union as
required by the brief.
@@ -1,64 +0,0 @@
# Task 4 Review-Fix Report
## Status
Review findings addressed as a follow-up to
`144152a0 feat: expose composite step inputs`.
## Fixes
- Updated the stale `_draft_input_maps` node-local annotation from
`InputBinding` to `StepInputBinding`; workflow-output helpers remain narrow.
- Added command-level CLI parity assertions for composite expressions through:
- `wf draft add capability --bindings-file`
- `wf draft update capability --bindings-file`
- `wf draft set-input --bindings-file`
- Added explicit workflow-output command coverage proving an expression file is
rejected before a remote context is loaded.
- Added MCP handler persistence coverage asserting the exact nested expression
survives into the stored draft.
- Added artifact adapter coverage asserting a composite draft input survives
the `WorkflowDraft` to `WorkflowBuilder` round-trip unchanged.
- Corrected the original Task 4 report from the incorrect `589` count to the
review-confirmed `368 passed, 3 baseline failures` result.
## Verification
Focused new parity tests:
```text
6 passed
```
Task 4 exact focused command, including the three known baseline failures:
```text
373 passed, 3 failed, 180 warnings
```
The failures are unchanged admin-event fixture failures:
- `test_rpc_workflow_client_reads_admin_state`
- `test_wf_admin_commands_use_rpc_url_override`
- `test_wf_status_uses_rpc_url_override`
The same command excluding only those tests:
```text
373 passed, 164 warnings
```
The expanded run including `tests/artifacts/test_draft_adapter.py` produced
`388 passed, 3 failed, 180 warnings`.
- Ruff check passed for all changed source and tests.
- Ruff format check passed.
- `git diff --check` passed.
- The required basedpyright scope still reports the same 33 pre-existing
TypedDict/result-shape errors in CLI/MCP result surfaces; no new error is
attributable to this review fix.
## Concerns
The admin-event fixture failures and existing basedpyright errors remain outside
the composite-input review scope and should be handled separately.
@@ -1,69 +0,0 @@
# Task 4 Report: Expose Composite Step Inputs
## Status
Implemented on current `main`. Node-local step inputs now carry `StepInputBinding`
through the Python authoring/API surfaces, live OpenRPC models and client, MCP
workflow surface, CLI bindings-file paths, and draft adapters. Workflow-output
binding surfaces remain simple-only.
## Changed Content
- Widened node-local API, service, capability, draft-update, subgraph, interrupt,
JSON-RPC, remote-client, MCP, and builder input annotations to `StepInputBinding`.
- Renamed the builder alias to `StepInputBindingArg` and the canonical normalizer
to `normalize_step_input_bindings`; expression dictionaries are parsed through
`InputExpressionBinding`.
- Removed the temporary draft adapter cast/limitation. Persisted composite inputs
now pass directly into `WorkflowBuilder.use_ref`.
- Kept workflow-output APIs and parsers on `InputBinding`/`OutputBinding` as
appropriate; their OpenRPC union does not include `InputExpressionBinding`.
- Split CLI bindings-file adapters so node-local files accept expressions while
inline `--map`/`--value` remain simple-only and workflow-output files reject
expression records.
- Updated CLI help and explain guidance to direct composite expressions to
`--bindings-file` without inventing inline expression syntax.
- Updated the simple binding schema description to document its node-local versus
workflow-output boundary.
## Verification
Required focused command:
```text
368 passed, 3 failed, 180 warnings
```
This is the count from the original Task 4 verification command, corrected to
match the command and collection reviewed after the task was committed.
The three failures are pre-existing admin-event fixture failures caused by
`AdminEventPayload.timestamp_epoch_ms` being required while the fixture emitted
no timestamp. They occur in admin-state/remote-status tests and are unrelated to
composite input bindings.
The same focused command excluding only those three tests:
```text
368 passed, 164 warnings
```
Additional checks:
- `ruff check` passed for all changed source and test files.
- `ruff format --check` passed for all changed source and test files.
- `git diff --check` passed.
- The required `basedpyright --level error` command reports the repository's
existing 33 TypedDict/result-shape errors in unrelated CLI/MCP result surfaces.
No new composite-binding error was reported. The changed `drafts.py` file has
one of those pre-existing errors at its existing list-payload call site.
- Live OpenRPC tests verify that step-input operations reach
`InputExpressionBinding`, while workflow-output operations remain simple.
## Concerns
- The three admin-event failures and existing basedpyright errors should be
remediated separately; changing them here would expand Task 4 beyond its
binding-surface scope.
- The checked OpenRPC manifest was intentionally not regenerated; Task 5 owns
that deterministic artifact update.
@@ -1,57 +0,0 @@
# Task 5 Second Repair Report
## Status
Complete. Task 6 was not started.
## Fixed Findings
### P1: Context-aware runtime expression budget
Removed the global expression-shape scan from runtime validation. The new
`hasBoundedInputExpressionsAtSchema` helper follows the generated operation
payload or success schema and only invokes the canonical 1024-node expression
counter at `StepInputBinding` and `InputExpressionBinding` positions.
Generic JSON components such as `JsonObject` are no longer interpreted by
their keys. This preserves ordinary values shaped like
`{ kind: "literal", value: ... }` in both simple `InputValueBinding.value` and
`workflow.runs.start.workflow_input`, while genuine over-budget expressions
remain rejected. Authored fixture validation continues to use the recursive
expression schema and the same node budget.
Added adversarial runtime regressions for both accepted ordinary-value cases;
the existing actual-expression and nested-literal rejection tests remain
green.
### P2: Lossless legacy binding order
Replaced the legacy form's simple-row-plus-expression suffix construction with
a stable merge. Existing expression rows stay at their original positions.
Existing simple rows claim a matching original kind/target slot first, fall
back to the next unused row of the same kind when an edit changes its target,
and unmatched serialized rows are appended as genuinely new rows.
Added interaction regressions for no-op `[expression, path]` and mixed
`[path, expression, value]` sequences. Both now submit in their original
canonical order without duplicating expression rows.
## TDD Evidence
The new runtime and form interaction tests were added before the production
changes. The initial focused runs reproduced both rereview failures; the final
focused runs are green.
## Verification
- Python Task 5 focused suite — **168 passed**
- `pnpm --dir web test`**1,652 passed, 6 skipped** across RPC,
presentation-sync, console, and server workspaces
- RPC `contract:check` — clean
- RPC typecheck — clean
- Console typecheck/build — clean; existing Vite chunk-size warning only
- Focused runtime-schema and CapabilityNodeForm tests — **25 passed**
- `git diff --check` — clean; only expected Windows LF/CRLF warnings
No generated contract files were modified, Serena configuration was untouched,
and Task 6 was not started.
@@ -1,73 +0,0 @@
# Task 5 Review Fix Report
## Status
Complete. Task 6 was not started.
## Fixed Findings
### P1: Legacy form expression preservation
`CapabilityNodeForm` now carries expression bindings found in rehydrated
`initialValue.inputBindings` through legacy-form submission. The existing
schema editor still owns simple path/value serialization; expression rows are
appended only from the rehydrated expression subset, so they are preserved
without duplicating rows or pretending that the legacy editor can edit them.
Added an interaction regression covering render, submit, and exact preservation
of a rehydrated array expression.
### P1: Sound discriminated `oneOf` translation
The JSON Schema translator now accepts the special case only when all branches
are distinct local component references, the discriminator mapping is an exact
branch mapping, and every referenced branch is a closed object with the
required discriminator property constrained to a distinct string `const`.
Decorative inline discriminators and overlapping branches without discriminator
constants now fail translation instead of being weakened into an Effect union.
### P2: TypeScript expression node budget
Added shared recursive traversal helpers with the canonical `1024` node limit.
The count includes expression nodes and nested array/object containers inside
literal values. The check is applied to authored expression bindings and to
runtime RPC payload/result boundaries, with cyclic values rejected safely.
Added runtime and authored validation-error regressions for both large
expression arrays and nested literal containers.
### P2: Named generated `StepInputBinding`
Changed the canonical Python alias to `typing.TypeAliasType`, causing the
OpenRPC manifest and generated TypeScript contract to expose a named
`StepInputBinding` component/type. Repeated node-local operation fields now
reference that name, while workflow-output bindings remain on the simple
path/value union.
Updated the method registry and generated contract tests to consume the
generated alias. The manifest and TypeScript contract were regenerated with
the documented commands; no generated file was hand-edited.
## TDD Evidence
The new form, translator, runtime-budget, authored-budget, manifest, and
generator tests were written before their corresponding fixes. The initial
focused runs reproduced the four review failures; the final focused runs are
green.
## Verification
- `uv run pytest tests/wf_contract_manifest/test_generate.py tests/wf_contract_manifest/test_committed_manifest.py tests/wf_transport_rpc_http/test_openrpc_contract.py tests/core/test_input_expressions.py tests/core/test_input_expression_runtime.py tests/core/test_canonical_node_bindings.py tests/wf_transport_rpc_http/test_rpc_models.py tests/wf_api/test_input_expression_validation.py -q`**168 passed**
- `pnpm --dir web --filter @lda/workflow-rpc test`**147 passed, 6 skipped** across 13 files
- Focused console tests — **59 passed** across 5 files
- `pnpm --dir web --filter @lda/workflow-rpc typecheck` — clean
- `pnpm --dir web --filter @lda/console typecheck` — clean
- `pnpm --dir web --filter @lda/workflow-rpc contract:check` — clean
- `uv run ruff check ...` — clean
- `git diff --check` — clean; only expected Windows LF/CRLF warnings
An additional broader sweep exposed an unrelated existing admin-events fixture
failure: `test_rpc_workflow_client_reads_admin_state` omits the required
`timestamp_epoch_ms` field. It is outside this Task 5 remediation and no
production code was changed for it.
@@ -1,69 +0,0 @@
# Task 5 Report: Decode Composite Step Inputs
## Status
Complete. Task 6 was not started.
## Changed Content
- Regenerated `contracts/workflow-api.manifest.json` and
`web/packages/rpc/src/generated/workflow-contract.ts` using the documented
generators. The checked contract now carries recursive literal/path/array/
object expression branches for node-local inputs while workflow outputs stay
on the simple binding union.
- Added manifest, generated-type, authored-schema, and translator coverage for
recursive expressions, strict over-specified-variant rejection, and the
node-local/workflow-output boundary.
- Extended the authored Effect Schema fixtures with a `Schema.suspend`
recursive decoder. The existing translator now accepts discriminated
recursive `oneOf` contracts but continues rejecting arbitrary `oneOf` schemas.
- Made RPC CLI projection explicit and exhaustive. Path/value bindings retain
their inline flags; expression bindings report
`input_bindings (use --bindings-file)` and are never flattened into a fake
`--value`.
- Added browser `InputExpression`, `InputExpressionBinding`, and
`StepInputBinding` types. Authoring clients and controllers now carry the
complete node-local union, with handwritten recursive copies for paths,
arrays, objects, and literal values.
- Widened `CapabilityNodeForm` callback types without adding expression editing
controls. The existing canonical rehydration seam preserves valid expression
rows instead of classifying them as malformed; editing remains deferred to
Task 6/7.
## Verification
- `uv run pytest tests/wf_contract_manifest/test_generate.py tests/wf_contract_manifest/test_committed_manifest.py -q`
**8 passed**
- `pnpm --dir web --filter @lda/workflow-rpc test`**142 passed, 6 skipped**
across 13 files
- `pnpm --dir web --filter @lda/workflow-rpc typecheck` — clean
- `pnpm --dir web --filter @lda/workflow-rpc contract:check` — clean
- Required focused console tests — **54 passed** across 4 files
- `pnpm --dir web --filter @lda/console typecheck` — clean
- `git diff --check` — clean; only expected Windows LF/CRLF warnings were
reported by Git
## TDD Notes
- Manifest and parity tests were added before the recursive schema and contract
regeneration; they failed until the new schemas were present.
- The translator test initially failed on the generated discriminated `oneOf`;
the targeted translator support made it pass while preserving the existing
arbitrary-`oneOf` rejection tests.
- Browser model, client, controller, form-seam, and canonical rehydration tests
were added before their corresponding type/copy changes.
## Deviations And Risks
- `canonical-capability-form.ts` and its test were changed even though they were
omitted from the Task 5 file list. This is the minimal enabling change needed
for the widened form callback to preserve a valid returned expression and for
the console typecheck to remain green; no recursive editor or Task 6
projection was implemented.
- The contract generator emits the node-local union inline in operation params
rather than a standalone generated `StepInputBinding` alias. Generated type
tests assert the complete path/value/expression union and the output boundary;
neither generated artifact was edited manually.
- The legacy form can carry an expression through rehydration and callback
types, but it still renders/creates only simple path/value controls. The
recursive editor is intentionally the next task.
@@ -1,54 +0,0 @@
# Task 8 Repair Report
## Scope
This repair addresses both findings in `task-8-review.md` without changing
production behavior:
- The browser route regression no longer mocks `createDraftAuthoringClient` or
its mutation methods.
- The Python vertical proof uses the normal `state.result` state/output path
instead of the unsupported `state.text` workaround explanation.
## Browser Proof
`DraftDetailRoute.authoring-sync.test.tsx` now constructs the production
`createConsoleWriteExecutor`, keeps the production `createDraftAuthoringClient`
and `callOperation` implementations, and stubs only `fetch` at the established
connection contract boundary. The test:
1. Returns a canonical RPC success envelope through the real response parser and
draft workspace decoder.
2. Submits the composite editor form.
3. Asserts the exact `/api/rpc` JSON body, including
`workflow.draft_workspaces.set_step_input_bindings`, `workspace_id`,
`revision`, `step_id`, and the recursive array expression payload.
4. Asserts the returned revision and rehydrated path/literal editor values.
This fails on incorrect encoder field names or a malformed canonical response;
the route has no mocked authoring client left to conceal either error.
## Python Proof
`tests/wf_api/test_composite_input_workflow.py` now declares `state.result`,
projects the capability's `text` result into `state.result`, and exposes that
state value as public output `result`. The composite root object still combines
`state.foo` with the literal `wowcool`, and the vertical run still produces
`hello wowcool`.
## Verification
- `pnpm --dir web/apps/console test -- src/workspace/routes/DraftDetailRoute.authoring-sync.test.tsx --reporter=dot`: **2 passed**
- `uv run pytest tests/wf_api/test_composite_input_workflow.py -q`: **1 passed**
- `pnpm --dir web/apps/console test -- src/workspace/routes/DraftDetailRoute.authoring-sync.test.tsx src/workspace/domain/draft-authoring-client.test.ts src/workspace/domain/write-executor.test.ts src/connection/api.test.ts --reporter=dot`: **27 passed**
- `pnpm --dir web/packages/rpc test -- --reporter=dot`: **135 passed, 3 skipped**
- `pnpm --dir web/apps/console typecheck`: **passed**
- `pnpm --dir web/packages/rpc typecheck`: **passed**
- `pnpm --dir web/apps/console build`: **passed** with the existing large-chunk warning
- `uv run ruff check tests/wf_api/test_composite_input_workflow.py`: **passed**
- `uv run ruff format --check tests/wf_api/test_composite_input_workflow.py`: **passed**
- `git diff --check`: **passed**
No unclassified failure was encountered in the focused repair gates. The
repository-wide baseline failures remain classified in `task-8-report.md` and
were not re-labeled by this repair.
@@ -1,79 +0,0 @@
# Task 8 Report: Vertical Proof And Documentation Closure
## Delivered
- Added a real platform-registry proof for the exact root object expression
from the plan. `wf.std.concat` receives a state-backed item and a literal
item, and the final workflow output is `hello wowcool`.
- Added remote CLI coverage using the existing RPC client/transport seam. The
bindings file survives `wf draft set-input` as the exact composite payload.
- Added a browser route regression through the real `createDraftAuthoringClient`,
write executor, `callOperation`, and mocked `/api/rpc` fetch seam. It asserts
the exact JSON-RPC method/target/params body, runs the canonical response
through the runtime decoders, and verifies that the recursive editor state
rehydrates.
- Marked the data-shaping issue and Slice 5 complete, documented the Python
canonical model and console editor, updated the live design-spec status, and
archived the implementation plan.
## Verification
Focused proof:
- `uv run pytest tests/wf_api/test_composite_input_workflow.py -q`: **1 passed**
- `uv run pytest tests/wf_cli/test_remote_target.py -q`: **45 passed, 2 failed**
- `pnpm --dir web --filter @lda/console test -- src/workspace/routes/DraftDetailRoute.authoring-sync.test.tsx`: **2 passed**
Final gates:
- Scoped Python regression: **1667 passed, 6 failed, 358 warnings**
- `uv run ruff check ...`: **passed**
- `uv run ruff format --check ...`: **failed on pre-existing formatting in
`src/wf_api/deployments.py` and `src/wf_api/runs.py`**
- `uv run basedpyright --level error`: **338 pre-existing errors** across
unrelated API, CLI, MCP, example, and test surfaces
- `pnpm --dir web test`: **1677 passed, 3 skipped** across RPC,
presentation-sync, server, and console workspaces
- `pnpm --dir web typecheck`: **passed**
- `pnpm --dir web build`: **passed** with the existing large-chunk warning
- `git diff --check`: **passed**
## Classified Baseline Failures
The six scoped Python failures are outside the new composite-input proof:
- `tests/wf_transport_rpc_http/test_client.py::test_rpc_workflow_client_reads_admin_state`
and `tests/wf_cli/test_remote_target.py::test_wf_admin_commands_use_rpc_url_override`
fail because the existing recorded admin event fixture lacks
`timestamp_epoch_ms`.
- `tests/wf_cli/test_remote_target.py::test_wf_status_uses_rpc_url_override`
fails because the existing local static admin surface reports unavailable.
- `tests/wf_cli/test_schema.py::test_compact_outline_preserves_any_of_keyword`,
`test_schema_compact_component_is_queryable`, and
`test_compact_outline_replaces_local_refs_with_names` fail because the
existing compact schema projection returns a string where those tests expect
the older structured `any_of` shape.
These failures were reproduced before the final documentation/commit step and
do not overlap the new vertical proof or changed production code. They are
classified as **baseline regressions**, not suppressed failures.
## Review And Remaining Risk
Manual implementation review found no Critical or Important issue in the new
tests or documentation changes. The repository's external review-dispatch
tool was not available in this session, so no external reviewer result is
claimed.
The root expression proof uses the ordinary `state.result` output slot. The
capability's `text` result is projected into workflow state and then into the
public `result` output, so this fixture exercises the normal state/output naming
path without a validator workaround.
## Documentation
- Plan moved to
`docs/historical/superpowers/plans/2026-08-12-composite-input-expressions.md`.
- Live links now point to the historical plan.
- The design spec remains live at
`docs/superpowers/specs/2026-08-12-composite-input-expressions-design.md`.