Skip to content

Releases: databricks-solutions/consort

v0.3.8

Choose a tag to compare

@kevin-hartman kevin-hartman released this 14 Aug 17:18

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 invariantRealizingStory primitive joins architecture.persistence_invariants[].table to db-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 exist even though every test passed. The --gate deploy 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-verdict resolves 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

Choose a tag to compare

@kevin-hartman kevin-hartman released this 13 Aug 03:26

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 ClaudeStepAgent via a manifest-declared agent:{kind,config} + step-contract seam, with a pre-dispatch route-satisfiable check and a three-channel output model (product code / .consort artifact / 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 .consort mirror, a two-sprint /sprint-driven capture launcher recording the full orchestrator-HIL correspondence, and planning-only capture/replay. Added the stockflow-full + stockflow-plan corpora.
  • Deterministic UI reachability + token-consumption gate, and an app-icon design-adherence check in the UX-clean gate.

Changed

  • Renamed the kit from sftdd to Consort — canonical resolveConsortSettings, consortEnv, LAKEBASE_CONSORT_*, .consort/, .lakebase/consort-config.json, consort-* bins. Legacy env prefixes, config/artifact-root fallbacks, and lakebase-* bin aliases still resolve. Launcher is now scripts/consort.sh.
  • Reorganized the source tree into domain families under consort/ with acyclic-import + single-home guards; CLIs moved to bin/consort/ + bin/lakebase/.
  • Fact-checked + de-jargoned all docs and swept stale sftdd naming 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-adherence self-heal, architect-reviewer in-place ac.json augmentation, additive reflection-gate revise.
  • Terminal done turn now recorded; post-merge lands on the parent tier + removes the merged branch; prepare-pr --force past the produced .consort dirty tree.
  • Hardcoded .sftdd/ path literals removed (derived from ARTIFACT_ROOT); broken dist/bin/sftdd/… reference corrected; .gitignore.base ignores .consort/ per-run files.

v0.3.6

Choose a tag to compare

@kevin-hartman kevin-hartman released this 02 Aug 02:34

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 immediate auth-expired escalation replace the pool hang; the runtime-token app template raises a typed DatabricksAuthExpired. Pins @databricks-solutions/lakebase-scm-utils v0.1.0.
  • Reactive-green supersession turns are labeled green-superseded so 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-agents refreshes 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-rerecord scenario 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 update refreshes.
  • 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

Choose a tag to compare

@kevin-hartman kevin-hartman released this 31 Jul 06:29

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 >=1 routes the feature through the DBA + DB-integration tests.
  • Declaring none marks it a non-persisting service: the DBA turn is skipped, db-design.json is optional, no persistence coverage is required.
  • checkDbDesign / checkPersistenceCoverage key off the invariants, not service_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

Choose a tag to compare

@kevin-hartman kevin-hartman released this 31 Jul 05:45

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 in db-design.md), unique_constraints is an array of column-name arrays, column.default is 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

Choose a tag to compare

@kevin-hartman kevin-hartman released this 30 Jul 20:41

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-github path (only a non-empty dir is refused).
  • --no-github + --tiers 2/3 rejected up front, before any provisioning, instead of provisioning tier 1 and skipping the rest with a post-hoc warning. Pair --no-github with --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

Choose a tag to compare

@kevin-hartman kevin-hartman released this 30 Jul 03:29

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-doctor bypasses; the JDK check blocks only java/kotlin.
  • One-line bootstrap (bootstrap.sh). curl … | bash detects 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-utils to v0.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

Choose a tag to compare

@kevin-hartman kevin-hartman released this 28 Jul 05:57

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

Choose a tag to compare

@kevin-hartman kevin-hartman released this 25 Jul 15:49

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

Choose a tag to compare

@kevin-hartman kevin-hartman released this 25 Jul 04:01

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.