anthropics / anthropics/claude-code

[BUG] Artifact db capability — live sync doesn't deliver updates to the page on reload

Abierto
#94,426 0 comentarios 0 reacciones 0 asignados Ver en GitHub
area:claude-code-web bug platform:web
Lenguaje dominante
Python
Estrellas
145k
Forks
23.1k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

### Preflight Checklist

- [x] I have searched [existing issues](https://github.com/anthropics/claude-code/issues?q=is%3Aissue%20state%3Aopen%20label%3Abug) and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code

### What's Wrong?

Title: Artifact db capability — live sync doesn't deliver updates to the page on reload

Artifact: https://claude.ai/code/artifact/e79c7ec3-3686-4b07-bf32-6369bfff00ed (private, runtime contract 0.2.49 — latest)

Summary: Writes to the artifact's db collection persist correctly and durably (verified repeatedly via read_db, including at as_level: interact matching a normal viewer's access). The published page's own hydrateFromDb() — a one-time collection("jobs").get() followed by onSnapshot(), matching the documented db capability contract exactly — does not reliably reflect those writes on a fresh page load.

Reproduction:

Edit a document via the page's own UI (adds/changes a field), confirm the write succeeded via read_db.
Fully reload the page (not just close/reopen a panel within the same tab).
The reload shows the pre-edit state, not the current database state.

Confirmed NOT the cause:

Not browser cache — reproduced in a fresh incognito window.
Not local to one machine — reproduced on a separate device (mobile) on a separate network.
Not a stale runtime — upgraded from contract 0.2.43 to the latest (0.2.49); no change.
Not a code defect — hydrateFromDb()/onSnapshot() usage was audited against the platform's own db.d.ts for contract 0.2.49 and matches the documented pattern (subscribed once, not per-render, no filters).
Not an access-rule issue — identical stale result at both owner-level and interact-level reads.
No error surfaces to the page — hydrateFromDb()'s .catch path (which would show a "couldn't load the latest data" notice) never fires.

Current workaround: manually re-fetch the collection and republish the page with a freshly baked-in seed. Not sustainable as a standing fix.

### What Should Happen?

What should happen: On a fresh page load, hydrateFromDb()'s initial collection("jobs").get() should resolve with the current state of every document in the collection — including any writes made before the reload, regardless of who made them or how recently. Per the db capability's own documentation: "Read once. Absence is NOT an error" — a one-time get() is documented as authoritative, not eventually-consistent or cached. The subsequent onSnapshot() subscription should then keep that state live for as long as the page stays open, per its documented contract: "next fires with the current state soon after registration, then on every change — including other viewers' writes, live."

In practice: reload the page, and it should show exactly what's in the database at that moment — not a snapshot from whenever the artifact was last republished.

### Error Messages/Logs

```shell

```

### Steps to Reproduce

Steps to Reproduce

Publish an artifact declaring capabilities: {db: {}}, with a page that on load calls a one-time read followed by a live subscription:
const db = await claude.use("db");
db.collection("jobs").get().then(snap => {
// render initial state from snap.docs
db.collection("jobs").onSnapshot(snap => {
// re-render on every change
});
});

(This is the exact pattern used in artifact e79c7ec3-3686-4b07-bf32-6369bfff00ed, contract 0.2.49 — subscribed once at page load, not per-render, no filters/limits on the query.)

Open the published page as the owner (or any granted viewer) and edit a document through the page's own UI — e.g. change a text field on one job record — triggering a set()/update() write.
Confirm the write actually persisted by reading the same document directly via the platform's read_db (bypassing the page entirely) — it shows the new value, with an incremented version and a fresh updatedAt.
Fully reload the page (not a same-tab panel close/reopen — an actual navigation/reload) and view that same document.
Expected: the page shows the value confirmed in step 3.
Actual: the page shows the value from before step 2 — the state as of whenever the artifact was last republished, not the current database state.
Repeat step 4 in: a private/incognito window, and on a separate physical device on a separate network. Same stale result every time — rules out browser cache, cookies, or anything local to one machine.
Repeat the whole test after upgrading the artifact's contract to latest (0.2.43 → 0.2.49) and republishing. No change in behavior.

Concrete instance: job PHX-1014 in the artifact above — a second unit/vehicle was added via the page's edit form and saved; read_db confirmed the write (both vehicles present, version incremented); the page, reloaded fresh on desktop, incognito, and mobile, continued showing only the original single vehicle until the artifact was manually republished with the current data force-baked into its seed.

### Claude Model

Sonnet (default)

### Is this a regression?

No, this never worked

### Last Working Version

_No response_

### Claude Code Version

2.1.272 (Claude Code)

### Platform

Anthropic API

### Operating System

Windows

### Terminal/Shell

Windows Terminal

### Additional Information

_No response_

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.