|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to OpenLore are documented here. This project adheres to |
| 4 | +[Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| 5 | + |
| 6 | +## [2.1.3] - 2026-06-22 |
| 7 | + |
| 8 | +Everything merged since v2.1.2: a batch of new agent-facing capabilities plus a |
| 9 | +deep end-to-end hardening and dogfooding pass. The version is read from |
| 10 | +`package.json`, so the CLI and the MCP server both report `2.1.3`. |
| 11 | + |
| 12 | +### Added |
| 13 | + |
| 14 | +- **Agent behavioral governance ("panic")** — opt-in, off by default (#175). A |
| 15 | + PreToolUse destabilization guard (`openlore panic-check`), an observe→memory |
| 16 | + feedback loop that feeds behavioral hotspots into `orient`, an optional Gryph |
| 17 | + runtime observer, and an accuracy-validation harness |
| 18 | + (`panic-validate` / `panic-calibrate` / `panic-replay`). Enable per project with |
| 19 | + `openlore setup --panic <mode>` and install the hooks with |
| 20 | + `openlore setup --hooks <format>` (remove them with `--hooks none`). |
| 21 | +- **External spec-store binding** — the `spec_store_status` MCP tool (federation |
| 22 | + preset) reports the read-only health of a `.openlore/config.json` `specStore` |
| 23 | + binding and its indexed targets (#178). |
| 24 | +- **Working-set context briefing** — the `working_set_context` MCP tool assembles |
| 25 | + one token-budgeted, per-target structural briefing for an active change across |
| 26 | + its spec-store targets (#180). |
| 27 | +- **Change-impact certificate** — the `change_impact_certificate` MCP tool and the |
| 28 | + `openlore impact-certificate` CLI certify what a diff touches: the paths it |
| 29 | + newly opens into declared covering surfaces (differential, no LLM), blast |
| 30 | + radius, drifted specs, and the tests to run (#181). |
| 31 | +- **Live dependency graph in watch mode** — `watch` now reconciles file creates & |
| 32 | + deletes and keeps `dependency-graph.json` import edges (including inline |
| 33 | + `<script>` and HTML asset edges) fresh incrementally (#173). |
| 34 | +- **Pi extension** — marketplace gallery preview image (#174); Windows daemon |
| 35 | + hardening so no console window flashes (#177). |
| 36 | + |
| 37 | +### Changed |
| 38 | + |
| 39 | +- Removed the `get_decisions` MCP tool. ADRs are now surfaced through |
| 40 | + `search_specs` (domain `decisions`) and via `orient`'s ADR matches, which now |
| 41 | + work without an embedding server (#179). |
| 42 | +- `.mjs` / `.cjs` / `.mts` / `.cts` files are now recognized as JavaScript / |
| 43 | + TypeScript and included in the call graph and signature index (previously |
| 44 | + silently dropped). |
| 45 | +- Panic-state: the on-disk file is the single source of truth for the |
| 46 | + cross-process intervention counter; all writers (MCP server, hook, daemon) |
| 47 | + serialize through one lock. |
| 48 | +- Documentation: Windows setup steps in CONTRIBUTING (#176); corrected and guarded |
| 49 | + MCP tool-count references. |
| 50 | + |
| 51 | +### Fixed |
| 52 | + |
| 53 | +End-to-end hardening pass (PR #182), all with regression tests: |
| 54 | + |
| 55 | +- **First run** — `openlore init` and `openlore run` now create `.gitignore` on a |
| 56 | + fresh `git init` repo, so `.openlore/` analysis artifacts (multi-MB lance |
| 57 | + binaries) aren't accidentally committed and don't pollute diff-based tools. |
| 58 | +- **MCP no-throw / robustness** — `get_spec` confines its `domain` argument |
| 59 | + (path-traversal fix); `get_file_dependencies` guards a partial dependency-graph |
| 60 | + artifact; `change_impact_certificate` drops non-object surface members and |
| 61 | + `buildLeaseAnchors` never escapes the handler; a malformed `callGraph` is |
| 62 | + normalized instead of crashing graph handlers; large tool results stay valid |
| 63 | + JSON when capped to the byte budget. |
| 64 | +- **LLM generation** — all providers tolerate malformed or `usage`-less responses |
| 65 | + (common with OpenAI-compatible gateways) instead of crashing or reporting `$NaN` |
| 66 | + cost. |
| 67 | +- **Panic** — fixed a cross-process lost-update on the intervention counter; |
| 68 | + untrusted `panic-state.json` fields are sanitized and a NaN timestamp is treated |
| 69 | + as expired; panic hooks gained an uninstall path and update in place on a format |
| 70 | + change. |
| 71 | +- **Multi-repo federation** — a registered repo that throws mid-query is skipped |
| 72 | + with a reason instead of aborting the whole fleet query; tool output no longer |
| 73 | + leaks absolute host paths. |
| 74 | +- **CLI** — `verify --json` and `decisions --sync` now exit non-zero on failure |
| 75 | + (they previously reported failure but exited 0, defeating CI gates); `decisions` |
| 76 | + has a top-level error boundary; `openlore view` reports a friendly message on a |
| 77 | + port-in-use, sanitizes errors before logging, and serves a 404 (not 500) for a |
| 78 | + missing graph artifact. |
| 79 | + |
| 80 | +**Full Changelog**: https://github.com/clay-good/OpenLore/compare/v2.1.2...v2.1.3 |
0 commit comments