The mechanism
What stands between a plugin and your files.
Four separate stages, each of which can refuse: review, the catalog entry, the download, and the permissions you grant afterwards.
01A release is immutable once published
The archive is built deterministically and its SHA-256 recorded. A resubmission whose bytes differ is refused rather than merged, so any edit — even one reworded line — has to become a new version with its own review.
02The checksum is rechecked on your machine
After downloading, the app recomputes the SHA-256 and compares it to the reviewed value, and checks the size matches the recorded one. A mismatch refuses the install outright rather than warning.
03The download URL cannot point elsewhere
A catalog entry is only accepted if its download URL is https, on linelark.com, at the exact path for that plugin and version, with no query string and no fragment. A catalog that has been tampered with cannot redirect an install to another host.
04The archive itself is constrained
No symbolic links, no paths escaping the bundle, at most 1,000 entries, at most 20 MB unpacked and 50 MB compressed. A zip that tries any of those is rejected before anything is written.
05Capabilities are declared, then granted separately
The manifest asks for git write access, for named hosts, and for named credentials. Installing does not grant them — you switch each on in Manage Plugins, and the panel shows exactly what was asked for.
06Changing what a plugin asks for revokes your consent
Permissions are bound to a fingerprint of the manifest’s capabilities. An update that adds a host, or moves a credential to a different header, has to ask again from scratch rather than inheriting the yes you gave the previous version.