This release includes 1 breaking change for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
Summary
AI summaryMemory IDs changed from integers to strings with first-class entity support.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
Memories are now first-class entities with string IDs. Memories are now first-class entities with string IDs. Source: granite4.1:8b-q6_K@2026-05-20 Confidence: high |
— |
| Feature | Medium |
Memory IDs can be referenced using `memory:<id>` syntax in linked_entities and search. Memory IDs can be referenced using `memory:<id>` syntax in linked_entities and search. Source: granite4.1:8b-q6_K@2026-05-20 Confidence: high |
— |
| Feature | Medium |
`search()` treats unresolved entity or example-query references as warnings instead of errors. `search()` treats unresolved entity or example-query references as warnings instead of errors. Source: granite4.1:8b-q6_K@2026-05-20 Confidence: high |
— |
| Feature | Medium |
`SlayerClient.forget_memory` now URL-quotes the memory id. `SlayerClient.forget_memory` now URL-quotes the memory id. Source: granite4.1:8b-q6_K@2026-05-20 Confidence: high |
— |
| Feature | Medium |
`SlayerClient.query`, `sql`, `explain`, `query_df`, and their `_sync` variants accept query, dict, list, or model name inputs. `SlayerClient.query`, `sql`, `explain`, `query_df`, and their `_sync` variants accept query, dict, list, or model name inputs. Source: granite4.1:8b-q6_K@2026-05-20 Confidence: high |
— |
| Feature | Medium |
Filters and ORDER BY on renamed measures accept alias or colon form; colon-form filters are classified as HAVING. Filters and ORDER BY on renamed measures accept alias or colon form; colon-form filters are classified as HAVING. Source: granite4.1:8b-q6_K@2026-05-20 Confidence: low |
— |
| Feature | Medium |
Added integration tests for Clickhouse and MySQL using Docker. Added integration tests for Clickhouse and MySQL using Docker. Source: granite4.1:8b-q6_K@2026-05-20 Confidence: low |
— |
| Bugfix | Medium |
Stale entity references inside memories are automatically cleaned up on model, datasource, or memory deletion. Stale entity references inside memories are automatically cleaned up on model, datasource, or memory deletion. Source: granite4.1:8b-q6_K@2026-05-20 Confidence: high |
— |
| Refactor | Medium |
SQLite memories tables from older databases are rebuilt with a TEXT primary key on first open. SQLite memories tables from older databases are rebuilt with a TEXT primary key on first open. Source: granite4.1:8b-q6_K@2026-05-20 Confidence: low |
— |
| Refactor | Medium |
Outermost rendered SELECT projects declared dimensions, time dimensions, and measures in order; hidden hoists stay in CTEs. Outermost rendered SELECT projects declared dimensions, time dimensions, and measures in order; hidden hoists stay in CTEs. Source: granite4.1:8b-q6_K@2026-05-20 Confidence: low |
— |
Full changelog
SLayer 0.6.9
Memories are now first-class entities. Memory IDs are strings instead of integers (you can pass your own, e.g. from a knowledge base; auto ids still work; same-id saves upsert). You can reference a memory anywhere an entity name is accepted - in another memory's linked_entities, in search(entities=...), etc. - using the form memory:<id>, and search ranks memories and other entities through the same machinery.
Minor changes
- Stale entity references inside memories are cleaned up automatically when you delete a model, datasource, or memory.
search()now treats unresolved entity or example-query references as warnings instead of erroring.- SQLite memories tables from older databases are rebuilt with a TEXT primary key on first open.
SlayerClient.forget_memorynow URL-quotes the memory id.SlayerClient.query/sql/explain/query_df(and their_syncvariants) now accept the same input shapes asengine.execute- a query, a dict, a list for multi-stage DAGs, or a model name; previously HTTP-mode crashed on list and string input.- Filters and ORDER BY on a renamed measure (
{"formula": "col:agg", "name": "alias"}) now accept either the alias or the original colon form; colon-form filters are classified as HAVING. - The outermost rendered SELECT now projects exactly your declared dimensions, time dimensions, and measures in declared order; hidden hoists for window arguments, sub-aggregates, ORDER BY aggregates, and filter-extracted refs stay in CTEs.
- Add integration tests for Clickhouse and MySQL (using Docker)
Breaking Changes
- Memory IDs are now strings instead of integers; existing integer-based references must be updated.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
Track SLayer, a semantic layer maintained by your agent
Get notified when new releases ship.
Sign up freeAbout SLayer, a semantic layer maintained by your agent
All releases →Related context
Related tools
Earlier breaking changes
- v0.6.3 Datasource names now reject dots, slashes, nulls, empty/whitespace; existing names containing '.' will fail validation on upgrade.
- v0.6.0 recall_memories surface entirely removed with no deprecation shim.
- v0.5.1 Two-mode reference semantics enforced: SQL mode accepts arbitrary SQL; DSL mode strictly resolves identifiers.
- v0.5.1 RecallHit.match_count renamed to RecallHit.score across MCP, REST, CLI, and SlayerClient.
Beta — feedback welcome: [email protected]