docs: design draft lifecycle authoring

This commit is contained in:
lda
2026-07-21 11:14:15 +07:00 Verified
parent bc4c4e0257
commit f89af77eae
2 changed files with 370 additions and 0 deletions
+67
View File
@@ -5,3 +5,70 @@
- [x] Dedicated draft CLI subcommands cover every draft step kind.
- [x] Draft interrupts preserve request and resume schemas.
- [x] Draft subgraphs preserve workflow references and boundary contracts.
## Draft data-shaping parity
- [ ] `wf draft bind` rejects nested node-local targets such as
`local.report.title`, even though canonical `LocalPath`, the runtime binding
resolver, and `WorkflowBuilder` support nested local paths.
- [ ] Capability-step authoring persists nested input targets but silently skips
workflow input/state schema projection when a target has more than one path
segment.
- [ ] No atomic API/RPC/CLI helper assembles one structured node input from
multiple graph paths. The current focused path requires several
revision-checked edits and an intermediate state object, or a raw map/patch.
- [ ] Focused draft authoring cannot add or update literal node-input bindings
comparable to `WorkflowBuilder.use(input=[{"target": ..., "value": ...}])`
without raw JSON Patch.
- [ ] Focused step input/output maps collapse valid canonical fan-out bindings.
A source-to-target dictionary cannot represent one graph source feeding two
local inputs, or one local output feeding two state targets; a later merge can
therefore rewrite a valid binding list into a lossy map.
- [ ] Focused workflow-output authoring cannot add or update literal output
bindings even though `WorkflowDraft.output` accepts canonical value bindings.
- [ ] Workflow output schema projection skips nested sources such as
`state.report.title`, leaving callers to patch the output schema manually even
when the nested source schema is already declared.
- [ ] CLI help and agent instructions describe step-input targets as bare local
fields and do not document the nested composition behavior already supported
by the canonical runtime model.
## Draft workspace lifecycle parity
- [ ] No capability-free draft workspace creation is exposed through the
transport-facing API, JSON-RPC, or CLI. Control-first, interrupt-first, and
subgraph-first workflows must bootstrap from an unrelated capability or be
created through a lower-level raw document path.
- [ ] No focused operation changes the draft entry point. `WorkflowBuilder`
exposes `set_entry_point`, while workspace callers must patch `/start`
directly after replacing the bootstrap step.
- [ ] No focused operation declares workflow outcomes. `wf draft add end
--outcome error` can add the terminal node, but core validation rejects it
until the caller separately patches `/outcomes`.
- [ ] No focused operation updates workflow input/state/output schemas or state
reducer declarations after workspace creation. These modeled workflow
contracts currently require RFC 6902 edits.
- [ ] The dedicated capability-step CLI cannot set `desc`, `retry`,
`timeout_seconds`, or literal inputs at creation, and there is no focused
update-step operation. The generic RPC step payload can represent these
fields, but CLI repair still requires remove/re-add or raw patching.
## Draft revision semantics
- [ ] Semantic draft edits do not consistently check the expected revision
before reading and validating current content. `add_step` now gates preflight
on the revision, but bind, capability-add, branch/handle, and remove helpers
can report a current-content error to a stale caller instead of the canonical
`revision_conflict` result.
## TypeScript JSON-RPC coverage
- [ ] `@lda/workflow-rpc` models only the 12 operations needed by the current
console explorer. It omits typed access to capabilities, source
inspect/diagnose, artifact save/delete/create, deployment save/delete, every
draft operation, and source-registry/admin operations already exposed by the
Python JSON-RPC server.
- [ ] Python JSON-RPC models and the Effect RPC schemas are maintained by hand
with no parity check or generated contract. Add an operation-inventory test
or a code-generation seam so server additions cannot silently remain absent
from TypeScript.