Skip to content

Release 0.4.0 — layered control plane (overlays, strict load, lazy federation) + CI - #2

Merged
araray merged 4 commits into
mainfrom
av/26-july_improvements
Sep 19, 2026
Merged

araray merged 4 commits into
mainfrom
av/26-july_improvements

Conversation

@araray

@araray araray commented Sep 19, 2026

Copy link
Copy Markdown
Owner

Summary

Lands av/26-july_improvements (4 commits): grimoire 0.4.0 — Layered Control Plane, the release that lets grimoire serve as THE single prompt/tool/skill control plane for llmcore and wairu. Fast-forwards onto main (no conflicts).

Highlights

  • Grimoire.layered(roots) over ordered (name, path, writable) layers; CompositeRepoView merges ALL artifact types (spells, runes, promptlets, rituals, bundles, skilldocs, default vars) and stays duck-type compatible with every consumer (runtime rune registration included).
  • LayeredGrimoire typed get_* / list_* for every artifact type, per-key default_vars merge, resolve_layer(artifact_id, kind).
  • Strict loading — GrimoireRepo.load(..., strict=True) / LayeredGrimoire.from_roots(..., strict=True) raise RepoError naming the failing layer; Grimoire.validate(layer=...) for startup validation of user overlays.
  • Caches — host/git conjure builtins computed once per engine; catalog() / tool_schemas() memoized with invalidate_caches().
  • Deterministic discovery (sorted; stable duplicate-id winner).
  • Lazy federation — grimoire.federation imports llmcore lazily (PEP 562) and llmcore lives in the federation extra, so llmcore can hard-depend on grimoire without an import cycle; federation tests are guarded when llmcore is absent.
  • CI — GitHub Actions workflow; 0.3.0 changelog entry backfilled.

Version / compatibility

  • 0.3.0 → 0.4.0. Consumers: llmcore 0.52.0 hard-depends on grimoire>=0.4.0; wairu 0.3.0 pins grimoire>=0.4.0,<0.5.

Verification

  • Full suite in this venv: 672 passed.
  • git merge-tree main HEAD → clean.

Notes

  • GitHub Actions is currently not starting jobs on this private repo (billing/spending-limit error); numbers above are from a local run.

🤖 Generated with Claude Code

araray and others added 4 commits July 5, 2026 03:32
Reconstructed from git history between v0.2.0 (6f22d83) and the v0.3.0
version bump (4f32c24) plus the release_notes.md narrative: rune command
schema export, intent-based procedural discovery, JSON-RPC MCP server,
federation adapters, OWASP metadata/auditing, and the wairu runtime
adapter.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pytest matrix on Python 3.11/3.12 using the [test] extra, plus a ruff
lint job scoped to src/ (tests/ carry pre-existing lint findings that
are out of scope here). Pattern follows semantiscan's workflow without
the postgres service.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CI installs only `.[test]`, which does not (and should not) pull in
llmcore, but tests/unit/test_federation.py imported grimoire.federation
at module level, which imports llmcore.observability.federation. That
made pytest collection fail with ModuleNotFoundError in every CI matrix
entry. Guard the module with pytest.importorskip, matching the existing
semantiscan smoke-test pattern, so the suite skips these tests in
environments without the optional llmcore ecosystem dependency.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…y federation (0.4.0)

Phase 0 of the Darwin/control-plane overhaul (grimoire is becoming THE
prompt/tool/skill control plane for llmcore + wairu):

- Grimoire.layered(roots): facade over ordered (name, path, writable)
  layers; every API resolves through the composed view
- CompositeRepoView: read-only merged GrimoireRepo over layers for ALL
  artifact types; duck-type compatible incl. in-memory runtime rune
  registration (drops on reload by design)
- LayeredGrimoire: typed accessors for all artifact types, per-key
  default_vars merge, resolve_layer(id, kind)
- Strict + deterministic loading: sorted discovery (stable duplicate
  winner); strict=True raises RepoError on parse failure/duplicate id,
  from_roots names the failing layer; validate(layer=...) for per-layer
  startup checks
- federation.py imports llmcore lazily (PEP 562) + declared
  grimoire[federation] extra — kills the one import-cycle hazard before
  llmcore hard-depends on grimoire
- Perf: static host/git conjure builtins cached per engine (was 2 git
  subprocesses per conjure); catalog()/tool_schemas() memoized with
  invalidate_caches() wired into reload + runtime rune registration
- 25 new tests (tests/unit/test_layered_all_types.py); suite green; ruff
  clean; version 0.4.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The job was not started because recent GitHub Actions payments have failed or your spending limit needs to be increased.

@araray araray self-assigned this Sep 19, 2026
@araray
araray merged commit 5d15d2b into main Sep 19, 2026
0 of 4 checks passed
@araray
araray deleted the av/26-july_improvements branch September 19, 2026 04:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants