This release adds 2 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+8 more
Affected surfaces
Summary
AI summaryUpdates Minor Changes, Patch Changes, and single-threaded across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Low |
Branch‑health thresholds (`branchWarnLimit`, `branchBlockLimit`) become configurable via `config.json` (defaults 50, 80). Branch‑health thresholds (`branchWarnLimit`, `branchBlockLimit`) become configurable via `config.json` (defaults 50, 80). Source: llm_adapter@2026-06-04 Confidence: high |
— |
| Feature | Low |
New CLI tools: `contentrain_branch_list` (lists pending branches + merge status) and `contentrain_branch_delete` (removes stale/failed branches). New CLI tools: `contentrain_branch_list` (lists pending branches + merge status) and `contentrain_branch_delete` (removes stale/failed branches). Source: llm_adapter@2026-06-04 Confidence: high |
— |
| Feature | Low |
`contentrain_merge` can target a branch by model name with optional locale/latest flags, not just timestamped names. `contentrain_merge` can target a branch by model name with optional locale/latest flags, not just timestamped names. Source: llm_adapter@2026-06-04 Confidence: high |
— |
| Feature | Low |
`contentrain_status` derives `stats.models`/`stats.entries` live instead of echoing possibly‑stale `context.json`. `contentrain_status` derives `stats.models`/`stats.entries` live instead of echoing possibly‑stale `context.json`. Source: llm_adapter@2026-06-04 Confidence: high |
— |
| Feature | Low |
`contentrain_validate --fix` lands cosmetic structural fixes via auto‑merge instead of creating a pending review branch. `contentrain_validate --fix` lands cosmetic structural fixes via auto‑merge instead of creating a pending review branch. Source: granite4.1:30b@2026-06-04-audit Confidence: low |
— |
| Dependency | Low |
Updated dependency: @contentrain/types to version 0.5.1. Updated dependency: @contentrain/types to version 0.5.1. Source: granite4.1:30b@2026-06-04-audit Confidence: low |
— |
| Bugfix | Medium |
Machine-generated `[contentrain]` commits now pass `--no-verify`, allowing commitlint/husky/lefthook hooks to accept Contentrain writes. Machine-generated `[contentrain]` commits now pass `--no-verify`, allowing commitlint/husky/lefthook hooks to accept Contentrain writes. Source: llm_adapter@2026-06-04 Confidence: high |
— |
| Bugfix | Medium |
Failed saves no longer leak dangling `cr/*` branches; merged feature branches are automatically deleted after landing. Failed saves no longer leak dangling `cr/*` branches; merged feature branches are automatically deleted after landing. Source: llm_adapter@2026-06-04 Confidence: high |
— |
| Bugfix | Medium |
Git/hook failures are returned as structured, ANSI‑stripped JSON errors rather than raw colored blobs. Git/hook failures are returned as structured, ANSI‑stripped JSON errors rather than raw colored blobs. Source: llm_adapter@2026-06-04 Confidence: high |
— |
| Bugfix | Medium |
Non‑i18n models are validated against a single locale, removing phantom per‑locale "orphan content" warnings in multi‑locale projects. Non‑i18n models are validated against a single locale, removing phantom per‑locale "orphan content" warnings in multi‑locale projects. Source: llm_adapter@2026-06-04 Confidence: high |
— |
| Bugfix | Low |
When no git remote is configured, `contentrain_submit` guides users to use `contentrain_merge` for local landing instead of failing outright. When no git remote is configured, `contentrain_submit` guides users to use `contentrain_merge` for local landing instead of failing outright. Source: llm_adapter@2026-06-04 Confidence: high |
— |
| Bugfix | Low |
Polymorphic multi-relations accept `{ model, ref }` items instead of rejecting them as strings. Polymorphic multi-relations accept `{ model, ref }` items instead of rejecting them as strings. Source: granite4.1:30b@2026-06-04-audit Confidence: low |
— |
| Bugfix | Low |
Relation integrity resolves targets at the target model's storage locale with a default‑locale fallback for i18n:true targets, removing false "broken relation" errors. Relation integrity resolves targets at the target model's storage locale with a default‑locale fallback for i18n:true targets, removing false "broken relation" errors. Source: granite4.1:30b@2026-06-04-audit Confidence: low |
— |
| Bugfix | Low |
`contentrain_content_save`'s inline validation now evaluates committed/overlaid state, so newly created locale files are no longer reported as missing. `contentrain_content_save`'s inline validation now evaluates committed/overlaid state, so newly created locale files are no longer reported as missing. Source: granite4.1:30b@2026-06-04-audit Confidence: low |
— |
| Refactor | Low |
`context.json` is no longer committed on feature branches; it is regenerated deterministically on the `contentrain` branch after merge, eliminating merge‑conflict classes. `context.json` is no longer committed on feature branches; it is regenerated deterministically on the `contentrain` branch after merge, eliminating merge‑conflict classes. Source: llm_adapter@2026-06-04 Confidence: high |
— |
Full changelog
Minor Changes
-
149fa6b: Harden the git/branch lifecycle, redesign context.json handling, and fix validator false positives.
Git & branches
- Machine-generated
[contentrain]commits now pass--no-verify, so repos with commitlint / husky / lefthookcommit-msghooks no longer reject Contentrain writes. - Feature branches are pruned automatically: a failed save no longer leaks a dangling
cr/*branch, and merged branches (auto-merge orcontentrain_merge) are deleted after landing. - Branch-health thresholds are now configurable via
config.json—branchWarnLimit(default 50) andbranchBlockLimit(default 80) — instead of being hardcoded. - New tools:
contentrain_branch_list(pendingcr/*branches + merge status) andcontentrain_branch_delete(remove a stale/failed branch; thecontentrainbranch is protected). contentrain_mergecan now target a branch bymodel(+ optionallocale/latest), not just the exact timestamped branch name.contentrain_submitwith no git remote now guides you tocontentrain_merge(local landing) instead of failing with a bare "configure a remote".- Git/hook failures are returned as structured, ANSI-stripped errors (
{ error, stage, hook?, code?, agent_hint? }) instead of a raw escaped color blob.
context.json
context.jsonis no longer committed on feature branches; it is regenerated deterministically on thecontentrainbranch after merge (single-threaded). This removes the merge-conflict class that hit parallel content saves on different branches.contentrain_statusnow derivesstats.models/stats.entrieslive instead of echoing a possibly-stalecontext.json.
Validation
- Non-i18n models are validated against a single locale, eliminating phantom per-locale "orphan content" warnings (and the wrong-locale meta files
--fixused to write) in multi-locale projects. - Polymorphic multi-relations (
relationstargeting multiple models) accept{ model, ref }items, matching the generated SDK type instead of being rejected as "must be a string". - Relation-integrity resolves targets at the target model's own storage locale (with a default-locale fallback for i18n:true targets), removing false "broken relation" errors.
contentrain_content_save's inline validation now evaluates the committed/overlaid state, so freshly created locale files are no longer reported as "missing".contentrain_validate --fixlands cosmetic structural fixes via auto-merge instead of spawning a pending review branch.
- Machine-generated
Patch Changes
- Updated dependencies [149fa6b]
- @contentrain/[email protected]
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
About Contentrain/ai
Local-first MCP server for AI content governance — 13 tools for model/content CRUD, validation, normalization, and i18n across any framework.
Related context
Earlier breaking changes
- v@contentrain/[email protected] `validateModelDefinition` now returns `{ errors, warnings }` instead of a string array.
- v@contentrain/[email protected] `model_save` rejects models with unknown keys, `min > max`, invalid constraints, and `unique` on singletons.
- v@contentrain/[email protected] `content_save` now validates before committing and rejects invalid content.
- v@contentrain/[email protected] `validateModelDefinition` now returns `{ errors, warnings }` instead of a string array.
- v@contentrain/[email protected] `model_save` rejects models with unknown keys, `min > max`, invalid constraints, and `unique` on singletons.
Beta — feedback welcome: [email protected]