v1.0.4: v0.12 Git-native versioning & collaboration-lite#8
Merged
Conversation
T1 — Canonical .dqlnb serialization
New packages/dql-core/src/format/notebook.ts with canonicalizeNotebook,
parseDqlNotebook version-aware loader, key-sorted JSON emitter, and
`dql migrate format` that walks the project and upgrades .dql/.dqlnb in
place.
T2 — `dql diff` polish
diffNotebook + cell/dashboard/workbook change variants; `dql diff <path>`
now diffs against HEAD via the new git-service helper.
T3 — In-app git service
/api/git/{status,diff,log} endpoints. /api/git/diff returns raw unified
diff plus a semantic DiffReport for .dql/.dqlnb, reading HEAD blob and
working-copy concurrently.
T4 — Git panel UI
New GitDiffView renders semantic DiffReport with per-field pills and
falls back to raw unified diff for non-DQL files. GitPanel polls status
every 2s with order-independent change detection so terminal-side edits
surface without clicking refresh.
T5 — Run snapshots
/api/run-snapshot persists last-run results to sibling
<notebook>.{dql,dqlnb}.run.json (gitignored). Notebooks hydrate on open
and cells render a "cached" chip until re-run.
Simplify pass: parallelized git shell-outs, O(1) cell-hydration lookup,
always-clear pending-timer cleanup in the snapshot autosave, single
try/catch in place of existsSync+readFileSync TOCTOU, stat-based .git
root probe.
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
.dqlnbserialization +dql migrate formatso notebook writes are byte-identical for identical state and old projects upgrade on a single command.dql diff <path>now diffs againstHEADand handles.dqlnbviadiffNotebook;DiffReportgains cell/dashboard/workbook change variants./api/git/{status,diff,log}endpoints./api/git/diffreads HEAD blob and working copy concurrently and returns the raw unified diff + a semanticDiffReportfor.dql/.dqlnb.GitDiffView+ refactoredGitPanel: semantic DiffReport with per-field pills, raw fallback for other file types, 2s status polling with order-independent change detection./api/run-snapshotpersists last-run cell results to sibling*.dqlnb.run.json(gitignored). Notebooks hydrate on open and cells show a subtle "cached" chip until re-run.Also: simplify pass (parallel git reads, O(1) cell lookup, always-clear debounce cleanup, stat-based
.gitprobe), version bump to 1.0.4 across 10 publishable packages.Test plan
pnpm --filter @duckcodeailabs/dql-core test— 222 tests pass (incl. newdiff.test.tscell variants andnotebook.test.tsround-trip)pnpm build— 18/18 workspace builds succeedpnpm release:dry-run— all 10 packages pack cleanly at 1.0.4welcome.dqlnb→ "cached" chips render on hydrated cells → Run All clears chips → reload repopulates/api/git/diff?path=<p>returns{ inRepo, diff, before, after, diffReport }for.dql/.dqlnbdql fmt --check) — deferred to a follow-up PR, see plan🤖 Generated with Claude Code