first dated version. plugins were all sitting on 1.0.0, which said nothing about
when a build was made or which of two copies is newer — the platform already
uses YYYY.MM.DD.NN and this follows it.
the version lives in manifest.ts because a plugin has no package.json; that is
the field the marketplace publishes and the installer compares.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
tags are how the marketplace is browsed rather than scrolled: a list of them on
the left, the plugins that carry one on the right. a closed vocabulary
(PLUGIN_TAGS in the platform) because free text becomes homelab, home-lab, Home
Lab and selfhosted inside a month, and a filter list of synonyms is worse than
no filter at all.
declared here rather than curated in the catalogue, so a plugin can say what it
is and nobody edits a table when one ships. the marketplace caches it on sync,
exactly as it already does for label and summary.
The platform now has `scope: 'shared'` for a dependency every account must be able to run, and the
check that goes with it — world-executable, and every parent directory traversable.
iris cannot use it yet, for a reason worth writing down rather than rediscovering: it BUILDS its
binary in the sidecar rather than declaring it as a dependency, so there is nothing for the probe to
judge. The remaining half is this sidecar installing into /usr/local/bin.
Also corrected open item 3, which said a member's agent "cannot read it there". On alpha it can —
/home/<owner> is mode 751, so an absolute path traverses. That is an accident, not a design, and 750
would break it silently. Stated that way so nobody concludes it already works.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Designed 2026-08-20 in conversation; PLUGIN.md is the decision record. Nothing here has
run yet: no live install, no build, no capture. The wrapper's two launch branches and the
cookie-seeding are written against documented behaviour, not observed behaviour.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>