Releases: databricks-solutions/consort
Release list
v0.3.8
Defect-fix release hardening the design lane and the per-story acceptance gate, plus two capture/replay fidelity fixes. All fixes fold onto 0.3.7; no behavior is removed. Legacy sftdd names/paths still read for back-compat.
Fixed
- Persistence-invariant fitness tests now anchor to the story that REALIZES the invariant, not the first story that merely names its table. Previously the Test Strategist front-loaded every persistence invariant (including those for a not-yet-created table) onto an early display/read-only story's fitness tests; the write story that actually migrates the table could then never obtain a distinct coverage tag, and the story-scoped reflection revise could not clear it — a dead-loop to HIL. A new
invariantRealizingStoryprimitive joinsarchitecture.persistence_invariants[].tabletodb-design.schema_changes[]; the fitness-analyst prompt, the spec-gate distinct-coverage check, and the reflect remediation all key off it. - The per-story acceptance gate no longer serves an UNMIGRATED experiment branch. Honest-GREEN verify migrates only a disposable child branch (isolating a reversibility test's up/down fixtures), so the experiment branch the review app was bound to was never upgraded — the write path 500'd with
relation ... does not existeven though every test passed. The--gatedeploy now applies a forward-only, idempotent migrate to the bound branch BEFORE starting the app, and a failing migrate fails the deploy honestly (reachable:false+ escalation). - Gate-deploy reachability is now a strict non-5xx serving probe — a booted-but-erroring app no longer certifies as "reachable." Non-gate deploys and the foreign-port guard keep the lenient probe.
- Story-scoped
review-verdictresolves at the cycles story-root (route/contract seam fix). - Replay reads the intake design-brief + assets from the finalize-corpus mirror layout (nested
design/), fixing the live replay launcher.
Added
- agent-log.jsonl is mirrored into the corpus during a recording, preserving the central agent-log stream alongside correspondence for replay.
Full test suite green (3760 passed).
v0.3.7
Consumers pin via github:databricks-solutions/consort#v0.3.7.
A large consolidation release (304 commits since v0.3.6). See CHANGELOG.md for the full section.
Added
- One executor dispatch path for every agent turn — design, planning, and build turns (spec-author breakdown, navigator RED/assess/review/reflect, driver green/refactor/repair, deploy/superseded variants) dispatch through a single parameterized
ClaudeStepAgentvia a manifest-declaredagent:{kind,config}+ step-contract seam, with a pre-dispatch route-satisfiable check and a three-channel output model (product code /.consortartifact / meta). - Per-role / per-turn optimization harness — a committed sweep engine experiments on each design and navigator build turn across model tiers and effort/tool-scope levers, judged against the recorded reference, with visible results, baseline compare, and programmatic auto-apply. The test-strategist is now a supervisor over per-kind analysts.
- Capture/replay corpus tooling — faithful per-turn snapshot replay with honest live verify + divergence guard, a browsable
.consortmirror, a two-sprint/sprint-driven capture launcher recording the full orchestrator-HIL correspondence, and planning-only capture/replay. Added thestockflow-full+stockflow-plancorpora. - Deterministic UI reachability + token-consumption gate, and an app-icon design-adherence check in the UX-clean gate.
Changed
- Renamed the kit from
sftddto Consort — canonicalresolveConsortSettings,consortEnv,LAKEBASE_CONSORT_*,.consort/,.lakebase/consort-config.json,consort-*bins. Legacy env prefixes, config/artifact-root fallbacks, andlakebase-*bin aliases still resolve. Launcher is nowscripts/consort.sh. - Reorganized the source tree into domain families under
consort/with acyclic-import + single-home guards; CLIs moved tobin/consort/+bin/lakebase/. - Fact-checked + de-jargoned all docs and swept stale
sftddnaming from source comments, shell scripts, and test descriptions (functional legacy literals preserved).
Fixed
- Live-drive resilience: stalled agent turns self-heal (inactivity kill + retry); headless spawns use
acceptEdits; fail-fast on expired Databricks auth. - Supersession/self-heal routing (classes k-n), story-loop
ux-adherenceself-heal,architect-reviewerin-placeac.jsonaugmentation, additive reflection-gate revise. - Terminal
doneturn now recorded; post-merge lands on the parent tier + removes the merged branch;prepare-pr --forcepast the produced.consortdirty tree. - Hardcoded
.sftdd/path literals removed (derived fromARTIFACT_ROOT); brokendist/bin/sftdd/…reference corrected;.gitignore.baseignores.consort/per-run files.
v0.3.6
Fixed
- Story independence is enforced at each story's own spec gate (not tens of turns later at the feature ship gate); the spec-author also self-checks it at breakdown.
- The build fails fast on expired Databricks auth instead of hanging. A drive-time auth preflight (
databricks auth token --force-refresh) and an immediateauth-expiredescalation replace the pool hang; the runtime-token app template raises a typedDatabricksAuthExpired. Pins@databricks-solutions/lakebase-scm-utilsv0.1.0. - Reactive-green supersession turns are labeled
green-supersededso a build-turn replay no longer sees a spurious extra green; both the replay filter and the corpus-integrity guard drop the verify-failure detour.
Added
lakebase-update-agentsrefreshes a scaffolded project's.claude/agents/from the current kit (auto-refresh on kit-version bump).- Recorded turns carry an agent transcript (task prompt, tools used, final reasoning).
- A re-recorded
stockflow-rerecordscenario corpus captured end-to-end on the current kit (design + build lanes live, incl the DBA role + live planning lane; two sprints, F1 + F6 both shipped to staging).
Changed
- Plugin manifests track the release version so
claude plugin updaterefreshes. - Documented updating an existing project (
./scripts/lk --warm,lakebase-update-agents,lakebase-update-commands,claude plugin update). - Tests own their database state (test-strategist scopes seed + assertion to its own rows); deploy-verify contamination self-heal now also covers the feature-ship deploy.
- The planning lane records the committed feature's size on a re-plan sprint (
estimate-committed). - The green-failure assess turn is decisive when the failure is already localized (no full-tree re-scan).
v0.3.5
A service no longer implies a database.
service_backed used to force a schema: a service_backed feature with zero tables or zero persistence_invariants[] hard-failed the design gate, so a compute / transform / proxy / external-API-aggregator service (real business logic, no persistence) could not pass.
persistence_invariants[] is now the single source of truth for "this feature has a database":
- Declaring
>=1routes the feature through the DBA + DB-integration tests. - Declaring none marks it a non-persisting service: the DBA turn is skipped,
db-design.jsonis optional, no persistence coverage is required. checkDbDesign/checkPersistenceCoveragekey off the invariants, notservice_backed.
Safety net preserved: persistence evidence (an Infra-layer AC, or a migration/schema/storage NFR) while persistence_invariants is empty still hard-blocks the gate, so a feature that really persists cannot escape DB testing. Layering enforcement is unchanged. Agent prose, the architecture schema, and the DBA task hint were realigned, with a regression guard.
v0.3.4
Fixes a blocking DBA design-gate bug.
For any feature with persistence invariants, the design gate was unsatisfiable: dba.md told the DBA to write realizes_invariants[] entries "mapped to the physical construct that enforces it" (implying objects), but the schema, the conformance gate, and the recorded corpus all require a flat array of bare invariant-id strings. The DBA looped until the drive aborted with a PROTOCOL VIOLATION.
- Aligned the DBA prose (and the orchestrator's DBA task hint + remediation) to the schema:
realizes_invariants[]is a flat string array (the "which construct realizes it" rationale lives indb-design.md),unique_constraintsis an array of column-name arrays,column.defaultis a string SQL expression. - Added a regression guard pinning the DBA prose to the schema.
- Corrected the abort message so a present-but-nonconformant artifact is no longer misreported as "returned nothing (absent/null/empty)".
Root-caused the accompanying test-list failures as downstream of the DBA loop (the Test Strategist prose is already consistent with its schema), so no test-strategist change was needed.
v0.3.3
Repin @databricks-solutions/lakebase-scm-utils to v0.1.0-beta.11, which fixes two first-run create findings at the source:
- Pre-existing EMPTY target directory accepted on the
--no-githubpath (only a non-empty dir is refused). --no-github+--tiers 2/3rejected up front, before any provisioning, instead of provisioning tier 1 and skipping the rest with a post-hoc warning. Pair--no-githubwith--tiers 1.
Also reconciles the /consort:start interview and the first-project walkthrough to that behavior, and corrects the --agent-model help role list (adds dba, drops release-engineer, which is deterministic and not a tunable agent).
v0.3.2
Crisp cold start: the environment is checked before anything is provisioned.
Added
- Environment doctor gate on project creation.
lakebase-create-project(and/consort:start's create path) runs the doctor before any provisioning and refuses to start when a hard cold-start check fails (a missing tool, or a workspace without Lakebase), printing the fix.--skip-doctorbypasses; the JDK check blocks only java/kotlin. - One-line bootstrap (
bootstrap.sh).curl … | bashdetects each required tool (Node 20+, npm, Python 3.10+, JDK 17+,gh, Databricks CLI), offers to install or upgrade what's missing, then runs the doctor. - First-project walkthrough under
examples/first-project/: a copy-ready, from-zero StockFlow example (intake + feature-proposals + feature-requests + the narrated /plan -> /design -> /build -> /deploy walkthrough).
Changed
- Repin
@databricks-solutions/lakebase-scm-utilstov0.1.0-beta.10(the extended doctor: cold-start prerequisites + a lakebase-enabled workspace probe). - README leads with the bootstrap + doctor step 0; prerequisites folded into a
<details>block. - Docs de-jargoned and internal design notes relocated under
docs/design/.
Validated live against a real Lakebase workspace (doctor positive/negative, gate refuses-before-provisioning, a real python create + teardown); full hermetic suite green.
v0.3.1
Consort rename + the DBA design-lane role (the ninth role), plus a batch of capture-path self-heal fixes proven out end-to-end by a full 2-sprint live re-capture (stockflow-rerecord): kit .claude scaffolding, sprint claim via the lk shim, reflection co-heal + progress-based revise budget, refactor-verify supersession assess, per-feature-relevant NFR coverage, the Test Strategist self-checks (reverse-AC-coverage / compound-defense / fitness-not-Gherkin), transient-API-error retry, and the scm-utils v0.1.0-beta.9 repin (client .gitignore via an npm-safe .gitignore.base). Full changelog in CHANGELOG.md.
v0.3.0-beta.37
Track C Phase 4: kit no longer redeclares substrate bins (closes the hoisting bug); the deterministic driver resolves scm-* bins from the installed scm-utils package. Consumes scm-utils v0.1.0-beta.4 (per-bin lk routing + scm-utils-ref CI). FEIP-8298.
v0.3.0-beta.36
Track C Phase 2+3: the SCM + shared substrate now lives in @databricks-solutions/lakebase-scm-utils (consumed at v0.1.0-beta.3); the kit keeps SFTDD orchestration + MCP server. createProject/adoptLakebaseProject decoupled (base in the substrate, kit injects the .sftdd/ lay-down). The . barrel re-exports the substrate. Suite: 1835 passed. FEIP-8263.