---
title: openplanr 1.7.0
description: "Published 2026-05-10. feat: artifact integrity + rules generator managed-block markers"
url: https://openplanr.dev/docs/changelog/1.7.0
updated: 2026-05-10
related:
  - https://openplanr.dev/docs/changelog/1.7.2.md
  - https://openplanr.dev/docs/changelog/1.7.1.md
  - https://openplanr.dev/docs/changelog/1.6.0.md
---

# openplanr 1.7.0

Published 2026-05-10.

[Release on GitHub](https://github.com/openplanr/OpenPlanr/releases/tag/v1.7.0)

## Minor Changes

feat: artifact integrity + rules generator managed-block markers

### Managed-block markers for `rules generate` (fixes AGENTS.md clobber bug)

`openplanr rules generate --scope pipeline` no longer overwrites the entire AGENTS.md / CLAUDE.md. Generated content is now wrapped in `<!-- ##planr-pipeline:begin## -->` / `<!-- ##planr-pipeline:end## -->` HTML comment markers. On regeneration, only the content between markers is replaced — project headers, agile content, and hand-written sections are preserved. Same treatment for `--scope agile` via `<!-- ##planr-agile:begin## -->` markers.

### Write-time artifact validation

`updateArtifact()` now validates structural invariants before writing: frontmatter fences present, YAML parses, `id:` field unchanged, and checkbox IDs preserved. On violation, throws `ArtifactInvariantError` with the specific violation. This stops AI-driven corruption from `openplanr refine` / `openplanr revise` at the door — the file on disk is never poisoned by malformed AI output.

### AI contract: structured deltas for `openplanr refine`

`openplanr refine` now asks the AI for structured deltas (`frontmatterChanges` + `bodyChanges`) instead of a whole-file `improvedMarkdown` blob. Our code applies deltas deterministically — the AI never holds a pen on raw bytes. Legacy `improvedMarkdown` responses are validated and rejected if they break structural invariants.

### Migration

- First run of `openplanr rules generate` on an existing project wraps content in markers automatically (non-destructive).
- `openplanr refine` change is transparent to users (AI contract is an implementation detail).
- Files previously corrupted by refine must be manually repaired or restored via `git checkout`.
