Skip to content

Auto-discover new modules in a configured plugin repo and start syncing them — a per-repo setting, no per-Space interaction #833

Closed

Description

@rbuergi

The problem this solves

On our instances modules arrive through per-Space {Space}/_GitSync entries, not the plugin catalog: memex.meshweaver.cloud carries 37 sync configs and zero install records. The consequence is that a module with no entry is simply not on the mesh — and nothing says so. Two live examples today: Planning (merged this morning) and Ifrs17 are both absent from memex purely because nobody created their entries, while their nine sibling modules from the same repo are present.

Worse, the entry cannot be made by hand: a _GitSync needs its Space to exist, and creating a Space makes the creator Admin on a system-owned partition — forbidden by the access rules, and re-minted by every human-run sync. So today "add a module to an instance" has no safe self-service path at all.

Requested feature (maintainer, 2026-08-06)

Detect new plugins on git automatically and start syncing without any interaction — as a setting on the plugin repo, in settings.

Make the repo the unit of configuration instead of the Space:

Plugin repo setting (per configured source)
  ├─ repo + branch                     (exists today as a catalog source)
  ├─ ☑ auto-discover new modules       ← new
  └─ ☑ auto-sync discovered modules    ← new

When enabled, on each build event (or poll) for that repo:

  1. Discover its top-level modules — the same node-repo layout the catalog already understands (a module folder with a root node; manifest.lock gives its content identity).
  2. For any module with no Space yet, provision it as SYSTEM through the existing install/provision path — never as the acting user, so no personal grant is minted.
  3. Write its {Space}/_GitSync (repo + subdirectory + branch) and run the first update.
  4. Recompile the affected types, in dependency order, exactly as the existing update path does.
  5. Record what was created, so an instance can answer "what appeared, and when?".

Removed modules should not be auto-deleted — surface them as orphaned rather than destroying content.

Interactions to respect

Tests

A repo source with auto-discovery on and one module that has no Space: run the build event ⇒ Space provisioned by SYSTEM (no creator grant — assert _Access holds only system-security), _GitSync written, content imported, affected types compile Ok; re-run ⇒ no-op. With a priced module ⇒ not auto-provisioned. With the setting off ⇒ nothing happens.

Context

Documented in Doc/Architecture/ReleaseToProductionPipeline (#832): "a module with no sync entry is simply not on the mesh".

🤖 Generated with Claude Code

Activity

  1. rbuergi commented on Aug 6, 2026

    @rbuergi
    ContributorAuthor

    Extended scope (maintainer, 2026-08-06)

    Provision all plugins in the MeshWeaver.Plugins repo by default — "ships with the OS" — and install the default packages (Essentials, Feedback, Presentation, Skills, Agents, …) by default for each user. See that all install nodes are run and the user gets all the paths to look up skills, agents, …

    Two distinct layers, both needed:

    1. Instance layer — "ships with the OS". Every module of the platform repo is auto-provisioned on every instance, not opted into one at a time. That is the per-repo auto-discovery above, with the platform repo defaulting to on, so a new platform module is present everywhere the moment it merges.

    2. User layer — default packages per user. Beyond the Space existing, each user must end up with the pre-installed packages copied into their own space ({viewer}/Skill, {viewer}/Agent, …), so skills and agents are look-up-able by path for that user. This is the preInstalled mechanism (StandardPacksOnboarding / StandardPacksActivationWatcher in Store/Catalog/Source) — the requirement is that it actually runs to completion for every user, and that every install node is executed rather than left half-applied.

    Concretely worth verifying/fixing as part of this:

    • Which packages carry preInstalled: true today — Publish does; Edu does not and is unpriced, which post-Claim roles are a platform capability, never node data access — closes the paywall #825 leaves it with no self-service way in (raised separately in education#106). The intended default set named here is Essentials, Feedback, Presentation, Skills, Agents, …
    • That onboarding is idempotent and self-healing: a user who predates a new default package still gets it, rather than only new signups.
    • That the resulting paths are discoverable — the point of the exercise is that an agent or a user can look up skills and agents by path without knowing an install happened.
    • The preInstalled copy path is now bulk (Plugins#340), so doing this for every user is no longer the multi-minute per-user cost it was.

    Permission interaction stays as in #830: unpriced/platform packages may be auto-installed; priced ones may not.

    Proof point today: Planning was provisioned end-to-end through the sanctioned path (Store/Provision node → SystemInstall under SYSTEM: create root → wire _GitSync → import → compile, all six phases Done, and Planning/_Access carries only Anonymous/Public Viewer — no personal grant). That is the mechanism this issue should run automatically, per repo, for every module.

    🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions