Skip to content

v1.0 → v1.0.1: open-source GA + onboarding fixes#3

Merged
KKranthi6881 merged 16 commits into
mainfrom
claude/charming-roentgen
Apr 17, 2026
Merged

v1.0 → v1.0.1: open-source GA + onboarding fixes#3
KKranthi6881 merged 16 commits into
mainfrom
claude/charming-roentgen

Conversation

@KKranthi6881

Copy link
Copy Markdown
Collaborator

Summary

Ships the DQL open-source GA line: everything from v0.10.2 through v1.0.1. Final patch (v1.0.1) closes eight friction bugs found during an end-to-end dry-run of npx create-dql-app against a real sibling dbt-labs/jaffle_shop repo.

All 16 publishable packages are now live on npm at 1.0.1 (including create-dql-app, @duckcodeailabs/dql-cli, @duckcodeailabs/dql-core).

What changed

v1.0.1 — onboarding fixes (the latest 2 commits)

  • Unified project config on dql.config.json; dropped legacy cdql.yaml from templates
  • Added dbt: { projectDir, manifestPath } section to config + auto-resolver
  • Rewrote templates (jaffle-shop, empty) with real block/dashboard grammar that parses
  • Replaced broken .dql front-matter notebooks with proper .dqlnb JSON
  • Templates now ship package.json so npm install && npm run notebook just works
  • Block/notebook parse errors surface as diagnostics in dql compile (was: silent catch {})
  • dql sync dbt auto-resolves manifest from config; actionable error when missing
  • dql init: idempotency guard (--force), sibling-dbt auto-detect, portable relative paths
  • create-dql-app: detects pnpm/yarn/npm and tailors next-steps output

v1.0 — Open-source GA

  • create-dql-app scaffolder
  • Nextra docs site at apps/docs/ + Vercel deploy
  • Tauri desktop wrapper, Homebrew formula, release workflows
  • dql-openlineage, dql-telemetry, dql-plugin-api packages
  • Example gallery + 4k-model stress bench
  • CI hardening (matrix, stress test, format-check, ci-ok gate)

v0.11 — git-native versioning

  • Canonical .dql serializer with format-version header
  • dql diff — semantic AST-level diff
  • In-app git panel (read-only)
  • Notebook run snapshots (.run.json)

Verification

  • End-to-end dry-run against /tmp/dql-dryrun/acme with sibling dbt-labs/jaffle_shop:
    • scaffold → npm installdql sync dbt (5 models) → dql compile (11 nodes / 10 edges / 23ms) ✓
  • Parse-error path: invalid blocks/broken.dql now emits 1 error(s): ✗ blocks/broken.dql: …
  • dql init idempotency: refuses to clobber, suggests --force
  • dql init in bare sibling: detects dbt sibling, writes portable dbt.projectDir: "../dbt"
  • pnpm -r build green for publishable packages; create-dql-app smoke test green
  • All 16 packages verified on npm at 1.0.1 via npm view

Test plan

  • pnpm install clean on a fresh checkout
  • npx create-dql-app@1.0.1 my-test scaffolds a project that runs npm install && npm run notebook end-to-end
  • dql sync dbt against a sibling dbt project with target/manifest.json imports models
  • dql compile on a project with a malformed block file surfaces the parse error (exit 1)
  • dql init in an already-initialized directory refuses without --force
  • CI matrix (Linux/macOS/Windows) passes
  • Docs site builds and link-check passes

🤖 Generated with Claude Code

KKranthi6881 and others added 16 commits April 17, 2026 12:04
- Drop SemanticPanel from ActivityBar, Sidebar, CommandPalette, and
  SidebarPanel union; Block Studio remains the single semantic authoring
  surface.
- Repalette DARK/LIGHT in notebook-theme with tighter contrast, near-black
  shell, and refined accent so the v0.10 UI reads visibly distinct from
  v0.9 without mass-editing every component.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Freezes the on-disk .dql v1 format. canonicalize() parses, reformats
via the existing formatter, and prepends a `// dql-format: 1` header so
future readers can detect the format generation without ambiguity.

All write paths now route through canonicalizeSafe() — CLI fmt, block
creation (custom + semantic), and the notebook save endpoint. The Safe
wrapper preserves original bytes if parsing fails so unusual templates
don't break block creation; they just miss the header until next fmt.

Prereq for in-app git panel and `dql diff` (v0.11 remaining work): clean,
byte-stable git diffs on notebook edits.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Adds diffDQL / diffProgram in dql-core that compare two programs by
top-level identity (block name, dashboard/workbook title) and descend
into the properties that matter for review: SQL query (whitespace-
normalised), params, visualization props, tests, tags, metadata.

`dql diff <before> <after>` surfaces it at the CLI with text and
--format json output; exit 1 on changes so it's scriptable as a CI
gate alongside `fmt --check`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Adds a Git sidebar panel with three tabs:
- Status: branch, ahead/behind, changed files with porcelain codes
- Log: last 30 commits with hash/author/date/subject
- Diff: unified diff, scoped to all files or the active file

Backed by three new endpoints on the notebook dev server
(/api/git/{status,log,diff}) that shell out to the system `git` binary
via execFile — the user already has git installed to be in a git repo,
and shelling out is leaner than bundling isomorphic-git. All args are
fixed subcommands plus the repo-relative file path passed as a separate
argv entry, never interpreted by a shell.

Activity bar gets a Git icon, command palette gets an entry, and the
SidebarPanel union grows `'git'`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Persists each notebook's last executed cell results to a sibling
`<notebook>.run.json` so reopening shows the output without forcing a
re-run. Snapshots are written debounced (600ms) and only when an
actual execution changed state — pure edits don't trigger writes.

Backend:
- GET/PUT /api/run-snapshot  (path -> sibling .run.json)
- Snapshot writer appends `*.run.json` to .gitignore on first write,
  so runs stay out of git history unless explicitly un-ignored.

Frontend:
- useRunSnapshotAutosave() hook mounted at AppShell root
- api.fetchRunSnapshot / saveRunSnapshot
- handleOpenFile hydrates cell status/result/error/executionCount from
  the snapshot after parsing the notebook file
- RunSnapshot type (version: 1) in store/types

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Canonical .dql serializer (format version header), dql diff (AST-level
semantic diff), in-app git panel, and notebook run snapshots.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ates

Five-section IA: Get Started / Guides / Reference / Architecture / Contribute.
Each page opens with a "takes ~N minutes" badge and ends with a concrete
"verify it worked" step. Internal link-checker runs as part of the build.

Deletes 11 duplicate legacy top-level docs superseded by the new IA;
long-form language spec and maintainer docs remain under docs/.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
npx create-dql-app <name> — zero global install, opens a running notebook
in under 5 minutes (v1.0 demo gate). Two templates: jaffle-shop (default)
scaffolds cdql.yaml, a welcome notebook, a certified revenue block, and
a sample dashboard; empty ships a minimal project.

Auto-detects a sibling dbt_project.yml and wires the path into cdql.yaml.
Initializes a git repo on scaffold so the first commit is clean.

Smoke test (node test/smoke.mjs) verifies both templates scaffold cleanly
with placeholder substitution — keeps us honest about the demo gate.

Docs updated so quickstart + homepage lead with npx create-dql-app.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Adds:
- apps/desktop — Tauri 2.0 scaffold (macOS aarch64/x86_64, Linux, Windows)
- packaging/homebrew — formula template + publish script (opens PR against duckcode-ai/homebrew-dql)
- .github/workflows/release-desktop.yml — 4-platform matrix build, uploads bundles to GitHub Release
- .github/workflows/release.yml — publish-homebrew job

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- examples/gallery — jaffle-shop + retail-mart + saas-analytics pointers
- scripts/bench/gen-dbt-project.mjs — synthetic N-model dbt project generator (layered DAG)
- scripts/bench/run-bench.mjs — cold/warm benchmark with <30s/<2s gates

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- @duckcodeailabs/dql-openlineage — OpenLineage event emitter for block runs
  (OL spec 2.0.0 RunEvent, 2s timeout, DQL_OPENLINEAGE_DISABLED env gate)
- @duckcodeailabs/dql-telemetry — privacy-first opt-in telemetry (DO_NOT_TRACK,
  DQL_TELEMETRY_DISABLED, persisted anonymousId)
- @duckcodeailabs/dql-plugin-api — frozen v1.0 plugin contracts
  (Connector, ChartRenderer, RulePack, PLUGIN_API_VERSION)

All three ship with passing contract tests.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- build-and-test matrix on node 20/22
- scaffold-smoke gate for create-dql-app
- docs build + link check
- dql fmt --check across templates
- stress test (4k-model synthetic project, cold<30s / warm<2s gates, main-only)
- playwright e2e (continue-on-error until suite lands)
- ci-ok summary job for branch protection

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- apps/docs/vercel.json pins build + static output
- .github/workflows/deploy-docs.yml deploys on push to main (paths-filtered)
- Guarded on VERCEL_TOKEN presence so forks don't fail

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Bump all publishable packages to 1.0.0 — the open-source GA:

- @duckcodeailabs/dql-core, dql-compiler, dql-runtime, dql-connectors
- @duckcodeailabs/dql-governance, dql-project, dql-lsp, dql-charts
- @duckcodeailabs/dql-ui, dql-cli, dql-notebook, dql-notebook-app
- @duckcodeailabs/dql-openlineage, dql-telemetry, dql-plugin-api
- create-dql-app, dql-language-support

What lands in v1.0:
- Docs site (Nextra, Vercel-deployed)
- create-dql-app scaffolder (npx create-dql-app)
- Tauri desktop binaries (macOS/Linux/Windows)
- Homebrew tap auto-PR on release
- OpenLineage emitter (OL spec 2.0.0)
- Opt-in privacy-first telemetry
- Frozen v1.0 Plugin API (Connector, ChartRenderer, RulePack)
- CI hardening: node 20/22 matrix, scaffold-smoke, docs link-check,
  dql fmt --check, 4k-model stress test, e2e, ci-ok branch gate
- Example gallery + synthetic dbt project generator

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… templates

Fixes 8 friction bugs found during a dry-run of the create-dql-app →
sync → compile path against a real dbt-labs/jaffle_shop sibling repo:

1. Unify config on dql.config.json; drop legacy cdql.yaml from templates
2. Add dbt: { projectDir, manifestPath } section to config + schema
3. Rewrite templates with real grammar (block/dashboard) that parses
4. Replace broken .dql front-matter notebooks with proper .dqlnb JSON
5. Add package.json to templates so `npm install && npm run notebook` works
6. Surface block/notebook parse errors as diagnostics in compile output
7. Auto-resolve dbt manifest path from config; actionable error when missing
8. `dql init`: idempotency guard (--force), sibling-dbt auto-detect, portable relative paths

Also: detect npm/pnpm/yarn in create-dql-app and tailor next-steps output.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@KKranthi6881 KKranthi6881 merged commit 5c0f351 into main Apr 17, 2026
4 of 7 checks passed
KKranthi6881 added a commit that referenced this pull request Apr 23, 2026
…r abstraction)

Closes the v1.2.1 gap audit — 9 fixes, ordered by severity. No behavior
changes beyond the #2 email-delivery correction; the rest add logging,
ignore patterns, and a provider-extension point.

Critical:
- #1 ignore .dql/runs/ and .dql/cache/ (root + `dql init` scaffold)
- #2 email notifier returns delivered:false in stub mode (was lying)

Bugs:
- #3 GET /api/blocks/body endpoint for bound-cell reloads
- #5 /api/schema returns 500 + fallback instead of silent file-only
- #6 log malformed scheduler run records to stderr
- #7 replace empty catches in runtime/html emitters with console.warn

Smells:
- #8 move LLM providers into providers/; add LLMProvider type alias
- #9 `dql schedule stop` via pidfile

#4 was a false-positive — bound-cell lineage is already wired via the
manifest builder's pathToBlockName lookup; comment updated.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant