René's URL Explorer Experiment
Title: fix(cli,skill): let sync and publish share one baseline, and add an app-models reference by jamesbhobbs · Pull Request #508 · deepnote/deepnote · GitHub
Open Graph Title: fix(cli,skill): let sync and publish share one baseline, and add an app-models reference by jamesbhobbs · Pull Request #508 · deepnote/deepnote
X Title: fix(cli,skill): let sync and publish share one baseline, and add an app-models reference by jamesbhobbs · Pull Request #508 · deepnote/deepnote
Description: Two strands, both about the same confusion: which command owns a project's files, and which app model a given deliverable actually is.
packages/ — sync and publish stop overwriting each other's writes to the project file store.
skills/ — a canonical reference for Deepnote's app models, and a corrected skill sync map in AGENTS.md.
deepnote static-site access — change a published site's sharing and viewer API access without republishing (section at the end).
1. Sync and publish share one baseline
The conflict
deepnote publish deploys into _deepnote_static/**, which is a subtree of the project file store that deepnote sync --all-files mirrors. Neither command knew the other existed — STATIC_ROOT was a private const in publish.ts, and sync claimed the entire inventory. Four consequences:
Guaranteed churn. Publish never touched sync's manifest, so after every publish the whole static subtree looked changed and the next sync --all-files re-downloaded the built site into .files/.
Push could regress a live site. uploadProjectFiles never fetched the inventory at all — it was documented "last-write-wins, no staleness check", with no equivalent of the baseModifiedAt/baseContentHash protection the notebook path gets.
--prune produced ghosts. publish --prune removed a remote asset; sync's local copy still hash-matched the manifest so push skipped it, leaving it on disk forever and resurrecting it in the cloud on the next edit.
Round-trip loop. dist/ → publish → cloud → sync pull → .files/ → git → sync push → cloud.
The fix
Coordination, not partition — both commands keep writing the same paths.
Sync gains per-file lost-update protection on push. Every candidate is now checked against the cloud inventory, and a file that moved since the manifest baseline goes through the existing --on-conflict override-or-skip choice instead of being overwritten. Reported as N file(s) kept from Deepnote / filesSkipped. This is the load-bearing part: publish often runs from CI where no manifest exists, and the Deepnote app can write these paths too. It also fixes the same silent overwrite for ordinary working files (requirements.txt edited in the app was clobbered before).
Publish updates the sync mirror when the published directory sits inside a synced workspace: it writes each file into the project's .files/ mirror and records size, hash, and server updatedAt, exactly as a sync download would. Manifest, mirror, and cloud then agree, so sync sees the deploy as already in step. --prune drops pruned paths from both. --sync-root / --no-sync-root control discovery, which otherwise walks up from the published directory.
Publish stops before mutating anything if a path it would write has moved on in Deepnote since that workspace last synced — the mirror holds no copy of that content. --force overrides. Its check is deliberately narrower than sync's: sync is a mirror where both sides are authoritative, publish is a deploy where the local build is authoritative, so a path with no baseline is not flagged (that's the normal state of a static root written by earlier publishes, and flagging it would break the first publish in every workspace).
PROJECT_STATIC_ROOT moves to @deepnote/cloud so every writer agrees on where the boundary is.
Edge cases handled
A pending replacement is exempt from the conflict check — that missing cloud copy is sync's own unfinished delete, not another writer's deletion. Without this, every interrupted upload would become a false conflict.
The mirror is only updated when the tracked project directory already exists. Creating it would flip readLocalNotebookFiles from null to [], which sync reads as "every notebook was deleted locally" and pushes. Leaving the baseline stale is safe: the next sync pulls once and converges.
A record written before updatedAt was tracked has no baseline to compare, so it still overwrites (rather than manufacturing conflicts for existing users) and becomes verifiable after the next pull.
Mirror failures are warnings, not errors — the deploy already succeeded, and a stale manifest is safe because the next sync brings the mirror back in step (a pull re-downloads the published files, a push surfaces them as a conflict).
Push hashes files in one pass and re-reads them at upload time, so one prompt can cover a whole project without buffering every file in memory.
Known limitation
The file API has no conditional write (POST /v2/files refuses to overwrite at all, which is why writes are delete-then-upload), so this is optimistic concurrency over the inventory: a small time-of-check/time-of-use window remains, and each replaced file has a brief 404 window on the live site. Both need a server-side atomic replace to close, tracked separately.
Review rounds (takeover, 2026-09-03)
Live-tested against the real CLI with a mock server (--contract strict|echo) and re-reviewed in five rounds. Changes on top of the original design:
Server dependency made explicit. The per-file updatedAt baseline that publish records comes from the upload response, which the server only started echoing in deepnote-internal#20773 (in production since v0.16.997, 2026-09-03). On servers without it — self-hosted or older — publish-written baselines are unverifiable; the docs say so, and the CLI degrades to the pre-baseline overwrite rather than failing.
The publish stop needs a usable baseline. Only an entry carrying the server's updatedAt is compared: --all-files syncs always record one, publishes do since #20773. A path without one is overwritten like any deploy. A per-path warning for that case was tried and removed — its only remedy, a pull, records the cloud copy as the baseline so the next publish passes the stop anyway.
Pull keeps the baseline of a cloud-deleted file that stays on disk (no --prune), and warns. Previously the record was dropped, so an edited copy silently resurrected a file someone had removed (e.g. via publish --prune). An edited push now surfaces the deletion as a conflict; --prune still removes file and record together.
Pending uploads. Publish clears a path from pendingFileUploads when it writes or prunes it, so an interrupted sync replacement that publish already settled cannot brick later syncs. A pending path whose cloud copy exists again is a conflict ("re-created in Deepnote after an interrupted upload"), not a silent retry — the "our own unfinished delete" premise is disproven when the copy is back. Sync persists each settled upload immediately, so a run interrupted later cannot leave its own upload looking pending; if a kept re-created conflict does occur, skipping it drops the retry so the next pull resolves it instead of the conflict sticking.
Explicit --sync-root failures are exit 2 consistently, including a tracked project directory that is missing; a manifest that exists but cannot be read (or is a symlink) also exits 2 with a pointer at --no-sync-root.
Kept-files warning is honest about pull: it says pulling replaces the local copies; the download-side dirty check itself is a follow-up.
Token handling unified: every command resolves --token/DEEPNOTE_TOKEN through one trimming helper (a pasted token with a stray space used to fail only in publish).
Dry run honours an explicit --on-conflict instead of always reporting a skip; the upload loop re-checks the 100 MiB cap on the bytes it actually uploads.
Shared sha256/baselineDiverged helpers so publish and sync cannot drift on what "changed" means; apps.md states the static site's URL-to-file mapping.
Gates at head: pnpm test 3147 passed, typecheck, biome, prettier, spell-check clean; CI green including codecov patch/project.
2. App models reference (#509)
The skill had no canonical account of Deepnote's app models, so an agent choosing between them had to infer the differences from cli-publish.md, two example READMEs, and the local-runner package docs — and the one place that mentioned app tokens covered only the CLI flag.
skills/deepnote/references/apps.md states the five models, what each is made of, where it runs, and which credentials it gets: data apps, Streamlit apps, published static sites, published browser apps with viewer API access, and local Node-backed serveStatic apps. It leads with a decision table keyed on the questions that actually change the plan — including whether an agent can create the underlying files at all, which is where hosted-only workflows quietly fail.
It also records the failure mode worth knowing before it bites: code developed against a local preview with a personal token keeps working there and does nothing once embedded, with no error, because the viewer token is limited to one run loop.
AGENTS.md — the skill sync map claimed MCP tools mirror the CLI and should be recorded in cli-*.md. They do not: @deepnote/mcp (local files), hosted MCP at deepnote.com/mcp, and the codex-plugin consumer are three separate surfaces. The map now routes each to its own home and adds a row for app models, publishing ownership, and token boundaries.
skills/deepnote/SKILL.md — an Apps section pointing at the new reference.
Ownership documented consistently
Both strands land the same rule, which is why they read better together than apart. apps.md states it for agents and the cli-*.md references carry the mechanics:
deepnote publish is the deploying writer for _deepnote_static/** — build output goes through publish, not through a synced workspace.
The two commands share one baseline rather than splitting the namespace: sync mirrors those paths and surfaces a republished site as a conflict instead of reverting it.
Publish updates a surrounding workspace's mirror unless told not to (--no-sync-root, which is what CI wants), and exits 1 without touching the project when Deepnote holds unsynced changes.
A follow-up commit on this branch dropped an earlier "publish owns the namespace" line from apps.md, which read as a split now that the implementation deliberately shares a baseline.
Branch history
#509 was merged into this branch (its base was worktree-sync-publish-coordination), bringing apps.md, the AGENTS.md map fix, and the SKILL.md pointer.
main was merged in to pick up #507. That is why #507 appears in this branch's log but not in the diff — it is already on main.
One follow-up commit states the publish/sync coordination in apps.md now that the mechanism ships in this PR.
Testing
The merged commits touch only AGENTS.md, SKILL.md, and skills/deepnote/references/apps.md — no code, so the gate results for the implementation still stand: pnpm test (3127 passed, 1 skipped), pnpm typecheck, pnpm biome:check, pnpm prettier:check, pnpm spell-check all clean.
New test coverage in this PR:
publish.test.ts — mirror writes and manifest records, the divergence stop and --force, --prune clearing the mirror, --no-sync-root, both --sync-root error cases, the missing-project-directory case, and the warn-not-fail mirror failure.
sync.test.ts — a diverged cloud copy kept vs. overridden, a deleted cloud copy treated as a conflict, an unchanged copy not flagged, a pending retry finishing when the cloud copy is gone, plus unit coverage of describeCloudFileDivergence.
publish-mirror.test.ts — findDivergedPublishPaths (including the deliberate mirror/deploy asymmetry) and resolvePublishMirror discovery.
Docs updated per AGENTS.md: packages/cli/README.md, skills/deepnote/references/cli-publish.md, skills/deepnote/references/cli-sync.md, and both commands' --help.
Stacked on this
#510 adds the public docs/ pages for deepnote publish and deepnote sync, and distinguishes the CLI deepnote sync command from the in-product "Deepnote file sync" feature. It is based on this branch and will retarget to main when this merges.
🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Added static-site access to manage published-site sharing and viewer API access without republishing.
publish now supports sync-workspace coordination, conflict detection, pruning, and force overrides.
Sync now detects changed, deleted, or recreated cloud files and reports uploaded and skipped files more clearly.
Bug Fixes
Prevented publishing and syncing from silently overwriting newer or deleted cloud files.
Improved validation for workspaces, paths, authentication, and mirror updates.
Documentation
Expanded guidance for apps, publishing, syncing, access controls, and MCP surfaces.
Static-site access lifecycle
This draft now also adds deepnote static-site access, a settings-only command that reuses the existing PATCH /v2/projects/{projectId} contract. It can disable or re-enable sharing and change viewer API access without uploading or deleting _deepnote_static/**. Disabling sharing also disables viewer API access; re-enabling serves the retained files again.
The CLI README, cli-publish.md, apps.md, and the installed Deepnote skill describe the same publish → change access lifecycle. Six command tests cover combined settings, sharing-only and API-only updates, invalid empty/contradictory requests, and API failures.
Latest local verification: pnpm typecheck, pnpm biome:check, pnpm prettier:check, pnpm spell-check, and pnpm test (3133 passed, 1 skipped).
Open Graph Description: Two strands, both about the same confusion: which command owns a project's files, and which app model a given deliverable actually is.
packages/ — sync and publish stop overwriting each other&...
X Description: Two strands, both about the same confusion: which command owns a project's files, and which app model a given deliverable actually is.
packages/ — sync and publish stop overwriting each ot...
Opengraph URL: https://github.com/deepnote/deepnote/pull/508
X: @github
direct link
Domain: github.com
| react-profiling | 0 |
| react-import-map | react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@d5750093facf |
| route-pattern | /:user_id/:repository/pull/:id/commits/:range(.:format) |
| route-controller | pull_requests |
| route-action | commits |
| fetch-nonce | v2:8815c558-29cc-6c7c-37cf-4a39a0369e0d |
| current-catalog-service-hash | ae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b |
| request-id | AFAC:CD3F7:A52876:DBFC28:6AEDD0DA |
| html-safe-nonce | c0bd5b1c05eff4a1ccd90d7f02d05ea8dedad0485b714c267448693f3bb81459 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBRkFDOkNEM0Y3OkE1Mjg3NjpEQkZDMjg6NkFFREQwREEiLCJ2aXNpdG9yX2lkIjoiOTAzMjEzMTMyMjY0NDkxMDI5OCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 64348f8e6a26a35400123576a75144a1ca79a2e7e34686c96ad1ed06b0300b48 |
| hovercard-subject-tag | pull_request:4414289787 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | ///pull_requests/show/commits |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046 |
| twitter:image | https://avatars.githubusercontent.com/u/15235276?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/u/15235276?s=400&v=4 |
| og:image:alt | Two strands, both about the same confusion: which command owns a project's files, and which app model a given deliverable actually is.
packages/ — sync and publish stop overwriting each other&... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | f60373873bb1ef795e8511ea1f2a76997e9c649d72b02942aedf2def3423a0ce |
| turbo-cache-control | no-preview |
| diff-view | unified |
| go-import | github.com/deepnote/deepnote git https://github.com/deepnote/deepnote.git |
| octolytics-dimension-user_id | 45339858 |
| octolytics-dimension-user_login | deepnote |
| octolytics-dimension-repository_id | 1066509034 |
| octolytics-dimension-repository_nwo | deepnote/deepnote |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1066509034 |
| octolytics-dimension-repository_network_root_nwo | deepnote/deepnote |
| turbo-body-classes | logged-out env-production page-responsive full-width |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | a4f7bf08d1db53116c0b6bd31b90d545127fc4f9 |
| ui-target | canary-2 |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
| Skip to content | https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046#start-of-content |
| https://github.com/ |
| Sign in | https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fdeepnote%2Fdeepnote%2Fpull%2F508%2Fcommits%2F89c54e3af2c942c515a7cf5da78884cad0de0046 |
| GitHubRepository hosting, code review, and collaboration | https://github.com/platform |
| CopilotAI coding agent for tasks, projects, and automated work | https://github.com/features/copilot |
| ActionsCI/CD and automation | https://github.com/features/actions |
| Code QualityQuality analysis, fixes, and enforcement | https://github.com/features/code-quality |
| CodespacesCloud development environments | https://github.com/features/codespaces |
| Code SecurityVulnerability detection and remediation | https://github.com/security/advanced-security/code-security |
| Secret ProtectionSecret scanning and leak prevention | https://github.com/security/advanced-security/secret-protection |
| All Features | https://github.com/features |
| Documentation | https://docs.github.com/en |
| Training | https://learn.github.com/skills |
| Certifications | https://learn.github.com/credentials |
| Build with Copilot | https://github.com/features/ai |
| Customize Copilot | https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/customize-copilot-overview |
| Integrations | https://github.com/marketplace |
| Trending repos | https://github.com/trending |
| GitHub Sponsors | https://github.com/open-source/sponsors |
| Developer articles | https://github.com/resources/articles |
| ChangelogYour source for the latest features, improvements, and fixes across GitHub products, all in one place. | https://github.blog/changelog/ |
| Enterprises | https://github.com/enterprise |
| Team | https://github.com/team |
| Startups | https://github.com/enterprise/startups |
| Nonprofits | https://github.com/solutions/industry/nonprofits |
| Healthcare | https://github.com/solutions/industry/healthcare |
| Financial services | https://github.com/solutions/industry/financial-services |
| Manufacturing | https://github.com/solutions/industry/manufacturing |
| Government | https://github.com/solutions/industry/government |
| See all industries | https://github.com/solutions/industry |
| Why GitHub | https://github.com/why-github |
| Customer Stories | https://github.com/customer-stories |
| Business insights | https://github.com/solutions/executive-insights |
| Trust Center | https://github.com/trust-center |
| GitHub Advanced SecurityEnterprise-grade code security | https://github.com/security/advanced-security |
| Copilot for businessEnterprise-grade AI features | https://github.com/features/copilot/copilot-business |
| Premium SupportEnterprise-grade 24/7 support | https://github.com/enterprise/premium-support |
| Documentation | https://docs.github.com/en |
| Resource center | https://github.com/resources |
| Blog | https://github.blog/ |
| Events & webinars | https://github.com/resources/events |
| Community Forum | https://github.com/orgs/community/discussions |
| Customer Stories | https://github.com/customer-stories |
| Integrations | https://github.com/marketplace |
| Customer support | https://help.github.com/ |
| Training | https://learn.github.com/skills |
| GitHub Status | https://www.githubstatus.com/ |
| About | https://github.com/about |
| Partners | https://github.com/partners |
| Changelog | https://github.blog/changelog/ |
| GitHub UniverseThe event for developers, by developers — talks, workshops, and what’s next for GitHub. | https://githubuniverse.com/ |
| Pricing | https://github.com/pricing |
| Sign in | https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fdeepnote%2Fdeepnote%2Fpull%2F508%2Fcommits%2F89c54e3af2c942c515a7cf5da78884cad0de0046 |
| Sign up | https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Fcommits&source=header-repo&source_repo=deepnote%2Fdeepnote |
| Reload | https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046 |
| Reload | https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046 |
| Reload | https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046 |
| deepnote | https://github.com/deepnote |
| deepnote | https://github.com/deepnote/deepnote |
| Code | https://github.com/deepnote/deepnote |
| Issues14 (14) | https://github.com/deepnote/deepnote/issues |
| Pull requests24 (24) | https://github.com/deepnote/deepnote/pulls |
| Discussions | https://github.com/deepnote/deepnote/discussions |
| Actions | https://github.com/deepnote/deepnote/actions |
| Security and quality | https://github.com/deepnote/deepnote/security |
| Insights | https://github.com/deepnote/deepnote/pulse |
| Sign up for GitHub
| https://github.com/signup?return_to=%2Fdeepnote%2Fdeepnote%2Fissues%2Fnew%2Fchoose |
| terms of service | https://docs.github.com/terms |
| privacy statement | https://docs.github.com/privacy |
| Sign in | https://github.com/login?return_to=%2Fdeepnote%2Fdeepnote%2Fissues%2Fnew%2Fchoose |
| tkislan | https://github.com/tkislan |
| main | https://github.com/deepnote/deepnote/tree/main |
| worktree-sync-publish-coordination | https://github.com/deepnote/deepnote/tree/worktree-sync-publish-coordination |
|
Conversation
33
| https://github.com/deepnote/deepnote/pull/508 |
|
Commits
22
| https://github.com/deepnote/deepnote/pull/508/commits |
|
Checks
20
| https://github.com/deepnote/deepnote/pull/508/checks |
|
Files changed
| https://github.com/deepnote/deepnote/pull/508/files |
| Please reload this page | https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046 |
|
fix(cli,skill): let sync and publish share one baseline, and add an app-models reference
| https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046#top |
|
Show all changes
22 commits
| https://github.com/deepnote/deepnote/pull/508/files |
|
558e4bf
fix(cli): let sync and publish share one baseline for project files
jamesbhobbs Sep 1, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/558e4bf4a10e16ebe05b402d447aba1fef4e1b9c |
|
9e653a4
Merge branch 'main' into worktree-sync-publish-coordination
jamesbhobbs Sep 1, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/9e653a446b94c16fe8cbae25158b46d6c50d0332 |
|
89c54e3
docs(skill): add an app-models reference and fix the skill sync map (…
jamesbhobbs Sep 1, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046 |
|
afd296a
docs(skill): state the publish/sync coordination now that it ships here
jamesbhobbs Sep 1, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/afd296add1c8b0a7e184d9bc5ded86ab1fe7edfb |
|
170a7b9
feat(cli): manage static-site access
jamesbhobbs Sep 1, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/170a7b9e0f6eecd07074ff0f67add8a9704f9e7c |
|
ab0811a
refactor(cli,cloud): cut publish/sync comments back to the why
tkislan Sep 3, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/ab0811a19c9e26da76270aeba5541f6f803641bb |
|
083f86c
Cleanup code comments
tkislan Sep 3, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/083f86c9151768c360e65795275737027d93d363 |
|
542b96c
Remove unnecessary tests
tkislan Sep 3, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/542b96c07a832641daf5e20000e764b14625b192 |
|
7e0c316
Use path.join and path.sep
tkislan Sep 3, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/7e0c316c4e167b9ca919fa757fa58bb5c1354371 |
|
f8b00b3
Revert "Use path.join and path.sep"
tkislan Sep 3, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/f8b00b381bb2219fd258c89236263bdfe3565463 |
|
c8ed543
docs(skill): state the static site's URL-to-file mapping
voyti Sep 3, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/c8ed543aea1841bb9a77e46d5c89846a2abb96bb |
|
1a7dc9a
fix(cli): close pending-upload gaps, fail explicit --sync-root loudly…
voyti Sep 3, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/1a7dc9a06d24d482445283cb22a5d6057df49f29 |
|
61c83fb
test(cli): pin the POSIX invariant of the mirror path
voyti Sep 3, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/61c83fb83f5f638a5419722d8edb571ad4db8a92 |
|
857a878
fix(cli): keep cloud-deleted baselines, guard plain-synced publishes,…
voyti Sep 3, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/857a8781b315d75b732e23705133d541fa730f28 |
|
e5d162a
fix(cli): warn per unchecked overwrite in publish and state the usabl…
voyti Sep 3, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/e5d162ad036b81747fa81d6cb4b5951c63d41fa6 |
|
06c964a
fix(cli): settle each upload on disk and let a kept re-created confli…
voyti Sep 3, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/06c964acc80c8084cbe4038a627df39ed76a1647 |
|
c3c034b
test(cli): pin that each uploaded baseline is settled on disk before …
voyti Sep 3, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/c3c034b18d85f34ddb902ca50075d0c415f8ce5e |
|
494e6ad
fix(cli): keep read-only pulls off the stale-path symlink guard and s…
voyti Sep 3, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/494e6ad00413f0489ce80779ab63b74a9e75ad87 |
|
63c6177
Merge branch 'main' into worktree-sync-publish-coordination
voyti Sep 3, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/63c6177d595b9a6800d821b590402ac119ad1b2a |
|
c87cde5
refactor(cli): drop publish's unchecked-overwrite warning and the dup…
voyti Sep 3, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/c87cde5a30016a29c4a69493c34fdf41ef053e24 |
|
08277fa
docs(skill): state how the next sync recovers from a failed publish m…
voyti Sep 4, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/08277faefed93c6f364efa36dc27485d2f5d320d |
|
d1c104d
refactor(cli): address review — real cloud module in test mocks, keep…
voyti Sep 4, 2026
| https://github.com/deepnote/deepnote/pull/508/commits/d1c104d8884a170a6da79b33c2ccee72f874cd21 |
|
Clear filters
| https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046 |
| Please reload this page | https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046 |
| Please reload this page | https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046 |
|
AGENTS.md
| https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046#diff-a54ff182c7e8acf56acfd6e4b9c3ff41e2c41a31c9b211b2deb9df75d9a478f9 |
|
SKILL.md
| https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046#diff-fc910ff9af653863a4d56f42ab43df86a18730c7df959926af99800c102c21db |
|
apps.md
| https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046#diff-6b758c65bc61424114f90007c9eec4b80eebdf0ec9e078e85343f2916d13b69a |
|
Prev
| https://github.com/deepnote/deepnote/pull/508/commits/9e653a446b94c16fe8cbae25158b46d6c50d0332 |
|
Next
| https://github.com/deepnote/deepnote/pull/508/commits/afd296add1c8b0a7e184d9bc5ded86ab1fe7edfb |
| #… | https://github.com/deepnote/deepnote/pull/509 |
| …509 | https://github.com/deepnote/deepnote/pull/509 |
| #508 | https://github.com/deepnote/deepnote/pull/508 |
| #508 | https://github.com/deepnote/deepnote/pull/508 |
| Please reload this page | https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046 |
|
| https://github.com/jamesbhobbs |
|
| https://github.com/claude |
| jamesbhobbs | https://github.com/deepnote/deepnote/commits?author=jamesbhobbs |
| claude | https://github.com/deepnote/deepnote/commits?author=claude |
|
| https://github.com/deepnote/deepnote/blob/main/.github/CODEOWNERS#L2 |
| AGENTS.md | https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046#diff-a54ff182c7e8acf56acfd6e4b9c3ff41e2c41a31c9b211b2deb9df75d9a478f9 |
|
View file
| https://github.com/deepnote/deepnote/blob/89c54e3af2c942c515a7cf5da78884cad0de0046/AGENTS.md |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/deepnote/deepnote/pull/508/commits/{{ revealButtonHref }} |
|
| https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046#diff-a54ff182c7e8acf56acfd6e4b9c3ff41e2c41a31c9b211b2deb9df75d9a478f9 |
|
| https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046#diff-a54ff182c7e8acf56acfd6e4b9c3ff41e2c41a31c9b211b2deb9df75d9a478f9 |
|
| https://github.com/deepnote/deepnote/blob/main/.github/CODEOWNERS#L2 |
| skills/deepnote/SKILL.md | https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046#diff-fc910ff9af653863a4d56f42ab43df86a18730c7df959926af99800c102c21db |
|
View file
| https://github.com/deepnote/deepnote/blob/89c54e3af2c942c515a7cf5da78884cad0de0046/skills/deepnote/SKILL.md |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/deepnote/deepnote/pull/508/commits/{{ revealButtonHref }} |
|
| https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046#diff-fc910ff9af653863a4d56f42ab43df86a18730c7df959926af99800c102c21db |
|
| https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046#diff-fc910ff9af653863a4d56f42ab43df86a18730c7df959926af99800c102c21db |
|
| https://github.com/deepnote/deepnote/blob/main/.github/CODEOWNERS#L2 |
| skills/deepnote/references/apps.md | https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046#diff-6b758c65bc61424114f90007c9eec4b80eebdf0ec9e078e85343f2916d13b69a |
|
View file
| https://github.com/deepnote/deepnote/blob/89c54e3af2c942c515a7cf5da78884cad0de0046/skills/deepnote/references/apps.md |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/deepnote/deepnote/pull/508/commits/{{ revealButtonHref }} |
| Please reload this page | https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046 |
| Please reload this page | https://github.com/deepnote/deepnote/pull/508/commits/89c54e3af2c942c515a7cf5da78884cad0de0046 |
|
| https://github.com |
| Terms | https://docs.github.com/site-policy/github-terms/github-terms-of-service |
| Privacy | https://docs.github.com/site-policy/privacy-policies/github-privacy-statement |
| Security | https://github.com/security |
| Status | https://www.githubstatus.com/ |
| Community | https://github.community/ |
| Docs | https://docs.github.com/ |
| Contact | https://support.github.com?tags=dotcom-footer |
Viewport: width=device-width
URLs of crawlers that visited me.