All notable changes to ECAA-workflow land here. Format loosely follows Keep a Changelog.
Note: This project was renamed from
scripps-workflowduring the open-source split, and this repo is a deliberately slim OSS surface. Many historical entries below were authored in the originating (fuller) repo and reference docs, CI, make targets, or paths that are intentionally absent here. There is no GitHub CI in this OSS repo: gating is local viamaketargets (make lint+make test+make conformance) and the installed git pre-push hook. Bullets describing originating-repo artifacts are marked (originating repo; paths may be absent here) — treat them as a record of the change, not a claim that the artifact exists in this checkout.
New entries go at the top. One bullet per user-visible change.
- Taxonomy path retired.
config/stage-taxonomies/is gone, the--taxonomyCLI flag is no longer parsed (only--archetypeis accepted), and the legacy taxonomy-builder entry point was removed. The archetype-driven v4 proof-carrying planner is the sole path;ClassificationResultnow carriesarchetype_id.
- In-flow branching from completed tasks (M1.1).
BranchFromHereCardnow wired intoConversationPanefor session-scoped branching without leaving the chat flow.TaskDetailDrawer"Explore in a branch" entry point (M1.3) enables task-scoped branching; child sessions inherit parent's completed prerequisites and re-run only the named task and its descendants. - Per-task agent-generated code capture (M1.2).
AgentCodeRecordtype introduced to capture agent-generated code atruntime/outputs/<task_id>/agent-code.json. Surfaced via new per-task/resultendpoint and as the "Code" subtab inTaskDetailDrawer. Types exported viamake types(ts-rs). - Task-scoped branch lineage (M1.3).
BranchInput.task_id+SessionLineage.branched_from_task_idenable deterministic child-session derivation from a parent's specific task. Cross-version diff anchors to task pair when set.prov:wasDerivedFromlineage threaded through RO-Crate generation. - Docs-as-contract regression tests.
crates/conversation/tests/session/documented_constants.rsasserts that load-bearing numbers, greeting strings, and blocker titles in the SME docs match the live code. When a doc-referenced constant drifts,make testfails locally with a message pointing at the doc line to update. - PR template + operational doc set (originating repo; paths may be absent here) — a
.github/PULL_REQUEST_TEMPLATE.mddoc-parity checklist anddocs/{security-model,on-call-runbook,api-reference,versioning-policy,observability,reproducibility}.md. None ship in this OSS surface; the only trackeddocs/subtree isdocs/ecaa-spec/. - SME-facing doc coverage for post-emit lifecycle features — Dashboard / History / Cross-Version Diff / Sensitivity / Start Execution cards, quick-reply chips, auto-title, model transparency, rubric scorer, clinical-trial confirmation variant. In this repo the SME guide is
USERS.md. - Reproducibility check —
scripts/verify-reproducibility.shreproduces an intake twice (now across multiple scenarios + one amend) and SHA-compares the emitted packages (excluding the documented audit-log files).
- Root user-facing docs reorganized.
README.mdrewritten as a triage entry + operator quickstart.USERS.mdadded at root as a comprehensive SME guide (Part I walkthrough / Part II reference / Part III help). The originating repo also added a rootMETHODS.mdwhitepaper (originating repo; absent in this OSS surface). Thedocumented_constantstest (now atcrates/conversation/tests/session/) path constants updated; the greeting / blocker-title assertions are unchanged in shape. - Comment cleanup. Stripped implementation-timing / process-metadata comments (dated
§N.Mplan pointers, Wave / Phase / Tier labels, PR / SME / Gap / Round-N / Workstream / SME QoL sprint identifiers,Per plan §X.Yreferences, ancestry notes, and dated plan-doc file paths) from ~600 sites across the Rust workspace,ui/src/, scripts, Makefile, packer, containers, config YAML/JSON, reference docs, and READMEs. Named architectural invariants (§R-N,§3.X,Invariant I-N) preserved as shared vocabulary. A comment-hygiene policy paragraph was added toCONTRIBUTING.md. Two test functions renamed (pre_wave_sessions_default_to_exploratory→legacy_sessions_default_to_exploratory,HardwareEnvelopeInputs::local_phase2→local_serial). (The originating-repo comment-hygiene gate script + archive are not part of this OSS surface.) - CLAUDE.md refreshed for current state: closed-tool vocabulary anchored to
Tool::COUNT(14 batchable + 8 high-impact), per-modality manifests underconfig/modalities/, 14 state-inspector tabs, 10-iteration tool loop, 60s transcript polling, Haiku 4.5 used for auto-title side-calls. - Lotz walkthrough rewritten to match the transition fixture set — every transition is an
amend_stage_methodwith a different motivation (data-shape, annotation-rule, parameter-justification, prior-knowledge-override). - Greeting text now matches what
greeting_turn()actually returns. Snapshot-tested. host_errorblocker recovery copy corrected — no longer mentions a "Resize and resume" button that was stall-specific.
- DashboardTab empty placeholder — the dev
<div>empty</div>that leaked to prod is now a proper styled empty-state message. - Adding a modality documentation now records the downstream-policy registration step that was missing from the original list (originating-repo
config-reference.md; the configuration reference here is theconfig/tree itself). - DAG terminology contradiction — SME docs no longer say "see the DAG" (the assistant's voice forbids that term); they say "see the task graph" instead.
- README.md tool-count + key-name cleanup — README quotes
ECAA_ANTHROPIC_API_KEY(not the legacyANTHROPIC_API_KEY; legacy fallback preserved) and no longer hardcodes a stale tool count. The closed vocabulary isTool::COUNT= 22 (14 batchable + 8 high-impact), asserted at compile time; earlier "15/16-tool" mentions were stale.
ANTHROPIC_API_KEY(chat-side) — useECAA_ANTHROPIC_API_KEY. The legacy name still works with a one-time stderr warning; removal target not set.
- Annotated walkthrough screenshot (
docs/images/sme-walkthrough-overview.png) — requires running the UI in a browser and capturing a labelled reference frame. Defer until the next UI pass; not blocking since the split-pane layout is self-documenting and every labelled surface is also described insme-user-guide.md.
- Composer v1/v2/v3 retired. v4 (proof-carrying planner) is now the sole planner: the legacy
backward_chain_composeengine and legacy dispatch paths were removed.ECAA_COMPOSERandSession::composer_versionare retained as compatibility shims — every value (incl. legacylegacy/archetypes/backward-chain) resolves to v4, with atracing::warn!on legacy values. Old session files load unchanged; already-emitted packages are unaffected.
The codebase prior to the docs remediation was never formally tagged. Everything up to commit 33369b6 is considered the 0.1.0 baseline for changelog purposes. Functional scope at that point:
- Natural-chat (intake→emit chat, confirmation gate, fixture corpus, latency baseline).
- AWS remote compute, SLURM remote compute, modularity splits.
- Full-lifecycle SME operations: result review, amendment, rerun, sensitivity winner, branching.
- Token-burn remediation:
ECAA_LIVE_APIgate,ECAA_DISABLE_CONTEXT_EDITING,ECAA_SESSION_TOKEN_BUDGET,ECAA_SLIM_TAXONOMY, Opus 4.7 escalation target, 10-iteration tool-loop cap, soft-landing nudge at iteration 7.
Future entries will land here as they ship.