feat: silo plugin registry (tessera-lake S1) - #29
Merged
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- SiloRegistry.is_registered() checks the local dict without triggering ensure_entry_points_loaded(), so builtin registration at import time no longer eagerly loads third-party entry points (which could silently shadow crm/docs if a pack declared the same name). - ensure_entry_points_loaded() now wraps each entry point's load/ normalize/register in try/except, logging and skipping broken or colliding packs instead of letting one bad entry point poison the registry for the rest of the process. - register_builtins() now guards with is_registered() instead of names(), restoring "built-ins win" semantics. Covering tests added to tests/test_silo_registry.py and tests/test_silo_builtins.py for lazy loading, error containment, and builtin-wins-over-entry-point precedence.
Add "Extending: adding a silo type" README section covering the SiloType dataclass, the tessera.silo_types entry-point group, and lazy discovery — including the per-entry-point error containment (broken packs are skipped with a logged warning) added in the registry review fix.
Remove dangling reference to a gitignored process file in a builtin silo comment, document the plugins key in build_artifacts' docstring, and note in the README that silo-type entry points may also load to an iterable or a zero-arg callable factory.
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.
Summary
S1 of the tessera-lake design (spec:
docs/superpowers/specs/2026-07-17-tessera-lake-design.md, local): tessera's hardcoded crm/docs silo wiring becomes a plugin registry so domain packs — first:tessera-lake— can register new silo types from their own pip package.tessera.silos.registry:SiloType(server module, tool names, prompt blurb, consulted-claims credit fn, optional compile build/write hooks) +SiloRegistrysingleton with lazy loading from thetessera.silo_typesentry-point group. Broken third-party packs are skipped with a logged warning; built-ins always win name collisions.tessera.silos.builtin) — the MCP server modules andsilos/access.pyare untouched.evals/task.py(per-blueprint MCP server launch; prompt intro assembled from blurbs, byte-identical — the_BASELINE_PROMPTSHA256 pin still passes),evals/scoring.py(consulted_claimsdispatch),compiler.py(optional per-silo build/write hooks;pluginskey only when a custom builder ran, so API previews are unchanged).Accepted deviations and S2 backlog are documented in the plan's "Deviations discovered during execution" section (notably: per-run prompt assembly deferred — scaffold constants are test-pinned; compiler stays permissive on unregistered silo names while the eval path fails loudly — to be decided before S2 ships a custom build hook).
Test plan
🤖 Generated with Claude Code