feat: plugin ingestion claims — drops and pastes from other apps reach plugin objects (goal 0251) - #516
Merged
Merged
Conversation
…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
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.
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: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.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.goand 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