Skip to content

feat: plugin ingestion claims — drops and pastes from other apps reach plugin objects (goal 0251) - #516

Merged
alicoding merged 2 commits into
mainfrom
feat/0251-ingestion-claims
Aug 29, 2026
Merged

feat: plugin ingestion claims — drops and pastes from other apps reach plugin objects (goal 0251)#516
alicoding merged 2 commits into
mainfrom
feat/0251-ingestion-claims

Conversation

@alicoding

Copy link
Copy Markdown
Owner

Owner ask: "the whole thing about dropping .extension or things from clipboard from those apps btw not our own things." A runtime plugin can now claim the two doors external content arrives through — a file dragged from Finder (claim by extension) and clipboard content pasted from any app (bare-URL pastes, v1).

One declaration, in the manifest (contributes.canvasObjects, the VSCode contribution-point convention), consulted by BOTH chains as pure data — no plugin JS ever runs inside ingestion:

  • Go paste chain gains a claims-backed LAST recognizer (behind drawio/HTML-table/TSV/image, ahead of the note fallback), wired at the composition root through the disabled-extensions filter.
  • Frontend drop router gains a third-party branch behind built-in diagram/image/sheet routing, ahead of the card fallback.
  • Payload shape derives from the object's declared source (file ⇒ mirrorPath+title, url ⇒ url+host title); the host enforces the claim/source pairing at registration — a mismatch fails the plugin load with a named error.
  • Extensions rows state claims declare-first ("Catches web links pasted on the board").
  • mill-bookmark claims URL pastes as the shipping proof.

Proofs: Go (recognizer routing incl. built-ins-win ordering + contributes validation + URLPasteClaims filtering), Vitest (drop routing incl. never-shadow-a-built-in + claim/source pairing), e2e (full chain: paste a link from "another app" → bookmark object rendered by the plugin, no note; Extensions claims line). Runtime-plugins suite 4/4 locally; ADR-0047 amendment + SPEC + userdocs in the docs repo/same change.

Also splits the paste door out of atlaspastebuild.go and bundles main.go's settings-era wiring (both files hit the 500-line limit), and raises the Go coverage floor 71→75.

🤖 Generated with Claude Code

https://claude.ai/code/session_012im1JxQQV2ahnXzZDdVmZq

alicoding and others added 2 commits August 29, 2026 10:26
…h plugin objects (goal 0251)

Manifest contributes.canvasObjects (fileExtensions + pastesURLs) is the
declarative contribution point both ingestion chains consult without
running plugin code: the Go paste chain gains a claims-backed last
recognizer (wired through the disabled-extensions filter at the
composition root), the frontend drop router gains a third-party branch
behind built-ins and ahead of the card fallback, and the payload shape
derives from the object's declared source (file=>mirrorPath,
url=>url+host title), host-enforced at registration. Extensions rows
state claims declare-first; mill-bookmark claims URL pastes as the
shipping proof, e2e-proven end to end (paste a link, get a bookmark).
Splits the paste door out of atlaspastebuild.go and bundles main.go's
settings-era wiring calls (both files were at the 500-line limit).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012im1JxQQV2ahnXzZDdVmZq
… goal 0251's pluginsvc/atlassvc tests)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012im1JxQQV2ahnXzZDdVmZq
@alicoding
alicoding enabled auto-merge (squash) August 29, 2026 14:29
@alicoding
alicoding merged commit 8532f66 into main Aug 29, 2026
30 checks passed
@alicoding
alicoding deleted the feat/0251-ingestion-claims branch August 29, 2026 14:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant