anthropics / anthropics/claude-code

[Bug] Design canvas public share fails with "unscannable" content scan error

Aperta
#88,326 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
area:skills bug has repro platform:macos
Lingua principale
Python
Stelle
145k
Fork
23.1k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

**Bug Description**
# A `/design` canvas cannot be shared publicly — public serving refuses the version as `unscannable`

## Summary

A design canvas published from Claude Code's `/design` skill cannot be given
"Anyone with the link" access. The share UI first blocks on the `downloads`
capability; once that is dropped, the share request itself fails, and the API
gives a different reason entirely:

```
PATCH /api/frame/perm/?org=
{"read":{"mode":"public","users":[]},"shared":""}

{"error":"frame: public serving requires the served version's content scan to be dispatched (unscannable)",
"reason":"unscannable"}
```

This makes a design canvas unshareable with anyone outside the publisher's
organization, which removes the only route by which an external collaborator
(a designer, a client, a contractor) can look at one.

## Why this looks like a bug rather than a policy

1. **The two failure messages disagree with each other.** The share dropdown
says the artifact "offers file downloads, so it can't be shared publicly" —
a capability explanation. Removing the capability makes the option
selectable, and then the actual request fails for an unrelated reason
(`unscannable`). A user following the first message's advice arrives at a
dead end with no way to understand why.
2. **`unscannable` is never surfaced in the UI.** The dialog shows a generic
"This version can't be shared publicly. Publish a new version or change the
shared version, then try again." Both of those suggested remedies are
useless here — publishing new versions and re-pointing the shared version
both fail identically. The real reason is only visible in the network
response.
3. **The condition is structural, not content-specific** (tested — see below). A design
canvas embeds the whole canvas editor (~2MB of minified JS) in every
published page, before any design content exists. If that alone exceeds
whatever the content scan can handle, then *no* canvas produced by `/design`
can ever be shared publicly — which the `/design` skill's own documentation
does not anticipate. It states the opposite: "a canvas that declared export
shares within the organization only … while one without export can also be
shared by public link when the share dialog offers it."

## Reproduction

1. In Claude Code, run `/design` and have it publish any canvas.
2. Open the artifact → Share.
3. General access → "Anyone with the link" is disabled, with the note that the
artifact offers file downloads.
4. Republish declaring only the artifact-publish capability (no `downloads`).
5. "Anyone with the link" is now selectable. Select it and confirm "Share
publicly".
6. The dialog flashes the options and then shows "This version can't be shared
publicly. Publish a new version or change the shared version, then try
again." The underlying PATCH returns `reason: "unscannable"`.

## What was eliminated

- **Not the version pointer.** "Shared version" was already `Latest`, and
selecting explicit versions changes nothing.
- **Not the capability declaration.** Republished with `{"self":{},"downloads":{}}`,
then `{"self":{}}`, then `{}` (no capabilities at all). All three fail the
same way, so the block is not a capability grant.
- **Page size was reduced** from ~2.7MB to ~2.2MB by removing embedded base64
fonts from the artboards (238KB + 225KB of artboard source down to 33KB +
20KB). **The smaller version fails identically**, which
points the finger at the editor payload itself rather than at anything the
design content contributes.

## Expected behaviour

Either:
- a design canvas can be served publicly (the scan handles it, or canvases are
exempted), **or**
- the UI says up front that design canvases cannot be shared outside the
organization, instead of offering an option that always fails — and the
`/design` documentation is corrected to match.

## Environment

- Claude Code, `/design` skill (canvas editor preview), runtime contract 0.1.31
- Published page ~2.2–2.7MB, 2 artboards, 6 embedded PNGs
- macOS, Firefox 153

**Environment Info**
- Platform: darwin
- Terminal: ghostty
- Version: 2.1.237
- Feedback ID: 32fd593f-1964-4104-a9f5-4a8366f23be6

**Errors**
```json
[]
```

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Direzione di ricerca

Reproduce the failure by publishing a canvas from Claude Code's /design skill and selecting public sharing, then inspect PATCH /api/frame/perm/?org= and its unscannable response. Compare the share dialog with the API reason and verify that the completed behavior either permits public serving or clearly explains the limitation and aligns the /design documentation.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
javascript
Ambito
api, security
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Attiva
Chiarezza
Abbastanza chiara
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.