v1.0 → v1.0.1: open-source GA + onboarding fixes#3
Merged
Conversation
- 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
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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-appagainst a real siblingdbt-labs/jaffle_shoprepo.All 16 publishable packages are now live on npm at
1.0.1(includingcreate-dql-app,@duckcodeailabs/dql-cli,@duckcodeailabs/dql-core).What changed
v1.0.1 — onboarding fixes (the latest 2 commits)
dql.config.json; dropped legacycdql.yamlfrom templatesdbt: { projectDir, manifestPath }section to config + auto-resolverjaffle-shop,empty) with real block/dashboard grammar that parses.dqlfront-matter notebooks with proper.dqlnbJSONpackage.jsonsonpm install && npm run notebookjust worksdql compile(was: silentcatch {})dql sync dbtauto-resolves manifest from config; actionable error when missingdql init: idempotency guard (--force), sibling-dbt auto-detect, portable relative pathscreate-dql-app: detects pnpm/yarn/npm and tailors next-steps outputv1.0 — Open-source GA
create-dql-appscaffolderapps/docs/+ Vercel deploydql-openlineage,dql-telemetry,dql-plugin-apipackagesci-okgate)v0.11 — git-native versioning
.dqlserializer with format-version headerdql diff— semantic AST-level diff.run.json)Verification
/tmp/dql-dryrun/acmewith siblingdbt-labs/jaffle_shop:npm install→dql sync dbt(5 models) →dql compile(11 nodes / 10 edges / 23ms) ✓blocks/broken.dqlnow emits1 error(s): ✗ blocks/broken.dql: …✓dql initidempotency: refuses to clobber, suggests--force✓dql initin bare sibling: detects dbt sibling, writes portabledbt.projectDir: "../dbt"✓pnpm -r buildgreen for publishable packages;create-dql-appsmoke test green1.0.1vianpm viewTest plan
pnpm installclean on a fresh checkoutnpx create-dql-app@1.0.1 my-testscaffolds a project that runsnpm install && npm run notebookend-to-enddql sync dbtagainst a sibling dbt project withtarget/manifest.jsonimports modelsdql compileon a project with a malformed block file surfaces the parse error (exit 1)dql initin an already-initialized directory refuses without--force🤖 Generated with Claude Code