release: v1.6.0 - #359
Conversation
|
Important Review skippedIgnore keyword(s) in the title. ⛔ Ignored keywords (2)
Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Reviewer's GuideRelease cut for v1.6.0: backfills 1.5.1 changelog entries, documents all user-facing changes since 1.5.1 in a new [1.6.0] section, and bumps project metadata/lockfile to 1.6.0. Flow diagram for preparing and cutting the v1.6.0 releaseflowchart TD
start(["Start v1.6.0 release cut"]) --> backfill151
backfill151["Backfill 1.5.1 entries into CHANGELOG [1.5.1]"] --> write160
write160["Write new [1.6.0] section in CHANGELOG with all user-facing changes"] --> bumpmeta
bumpmeta["Bump version: pyproject.toml 1.5.1 → 1.6.0 and refresh uv.lock"] --> mergepr
mergepr["Merge release PR into main"] --> tag160
tag160["Create and push Git tag v1.6.0 at merge commit"] --> ci
ci["GitHub Actions publish.yml builds and uploads 1.6.0 to PyPI"] --> verify
verify["Verify CHANGELOG renders correctly on PyPI release page"] --> endNode(["Release complete"])
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Hey - I've found 2 issues
Prompt for AI Agents
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location path="CHANGELOG.md" line_range="21" />
<code_context>
+- **Belief retention class + per-source aging policy** ([#290](https://github.com/robotrocketscience/aelfrice/issues/290)). Phase-1 adds the `retention_class` schema column on `beliefs` (`unknown` | `transient` | `durable` | `permanent`) and the matching python validator. Phase-2 wires per-ingest-source defaults into `derive()` and the orphan-classifier scanner so new beliefs land with a non-`unknown` retention class based on which entry point ingested them. Phase-3 lands the promotion path: `MemoryStore.find_promotable_snapshots()` and `set_retention_class()` store APIs, surfaced through `aelf doctor --promote-retention` so an operator can run a one-shot pass that reclassifies low-prior beliefs based on retrieval / corroboration evidence accumulated since they were ingested. Foundational layer for the v2.0 aging / pruning policy spec'd in `docs/belief_retention_class.md`; no automated retention-driven eviction yet.
</code_context>
<issue_to_address>
**issue (typo):** Capitalize "Python" when referring to the language.
Since this refers to the programming language, please capitalize it as "Python" for consistency with standard usage in the docs.
```suggestion
- **Belief retention class + per-source aging policy** ([#290](https://github.com/robotrocketscience/aelfrice/issues/290)). Phase-1 adds the `retention_class` schema column on `beliefs` (`unknown` | `transient` | `durable` | `permanent`) and the matching Python validator. Phase-2 wires per-ingest-source defaults into `derive()` and the orphan-classifier scanner so new beliefs land with a non-`unknown` retention class based on which entry point ingested them. Phase-3 lands the promotion path: `MemoryStore.find_promotable_snapshots()` and `set_retention_class()` store APIs, surfaced through `aelf doctor --promote-retention` so an operator can run a one-shot pass that reclassifies low-prior beliefs based on retrieval / corroboration evidence accumulated since they were ingested. Foundational layer for the v2.0 aging / pruning policy spec'd in `docs/belief_retention_class.md`; no automated retention-driven eviction yet.
```
</issue_to_address>
### Comment 2
<location path="CHANGELOG.md" line_range="43" />
<code_context>
+- **Corroborations preserved across unique-applying migration** (refs [#336](https://github.com/robotrocketscience/aelfrice/issues/336)). The one-shot migration adding `UNIQUE(content_hash)` to `beliefs` did `DROP TABLE beliefs` with `PRAGMA foreign_keys=ON`, firing the `ON DELETE CASCADE` on `belief_corroborations` and wiping every corroboration row — including the synthetic `consolidation_migration` markers the dedup pass had just inserted. Wrap the swap in `PRAGMA foreign_keys=OFF/=ON` per the SQLite recommended pattern for table-mutation migrations.
</code_context>
<issue_to_address>
**issue (typo):** Fix the PRAGMA example to use `OFF/ON` instead of `OFF/=ON`.
`PRAGMA foreign_keys=OFF/=ON` doesn’t match SQLite syntax or the earlier `foreign_keys=ON` in the sentence. Please use `PRAGMA foreign_keys=OFF` / `PRAGMA foreign_keys=ON`, or otherwise show `OFF/ON` without the extra `=`.
```suggestion
- **Corroborations preserved across unique-applying migration** (refs [#336](https://github.com/robotrocketscience/aelfrice/issues/336)). The one-shot migration adding `UNIQUE(content_hash)` to `beliefs` did `DROP TABLE beliefs` with `PRAGMA foreign_keys=ON`, firing the `ON DELETE CASCADE` on `belief_corroborations` and wiping every corroboration row — including the synthetic `consolidation_migration` markers the dedup pass had just inserted. Wrap the swap in `PRAGMA foreign_keys=OFF` / `PRAGMA foreign_keys=ON` per the SQLite recommended pattern for table-mutation migrations.
```
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
|
|
||
| - **`aelf tail` — live observability for hook injections** ([#321](https://github.com/robotrocketscience/aelfrice/issues/321), [#322](https://github.com/robotrocketscience/aelfrice/pull/322)). `tail -f`-style pretty-printer over the per-turn hook audit log. Streams each fire as a one-line summary (timestamp, session, n_locked, latency, prompt prefix); `--full` switches to the full rendered block. Reader half of the #321 observability story; complements the audit-log writer above. The audit record itself is extended with `beliefs[]` (per-belief id + tier), `latency_ms`, and `tokens` so the tail reader can surface what was injected at what cost without re-running retrieval. | ||
|
|
||
| - **Belief retention class + per-source aging policy** ([#290](https://github.com/robotrocketscience/aelfrice/issues/290)). Phase-1 adds the `retention_class` schema column on `beliefs` (`unknown` | `transient` | `durable` | `permanent`) and the matching python validator. Phase-2 wires per-ingest-source defaults into `derive()` and the orphan-classifier scanner so new beliefs land with a non-`unknown` retention class based on which entry point ingested them. Phase-3 lands the promotion path: `MemoryStore.find_promotable_snapshots()` and `set_retention_class()` store APIs, surfaced through `aelf doctor --promote-retention` so an operator can run a one-shot pass that reclassifies low-prior beliefs based on retrieval / corroboration evidence accumulated since they were ingested. Foundational layer for the v2.0 aging / pruning policy spec'd in `docs/belief_retention_class.md`; no automated retention-driven eviction yet. |
There was a problem hiding this comment.
issue (typo): Capitalize "Python" when referring to the language.
Since this refers to the programming language, please capitalize it as "Python" for consistency with standard usage in the docs.
| - **Belief retention class + per-source aging policy** ([#290](https://github.com/robotrocketscience/aelfrice/issues/290)). Phase-1 adds the `retention_class` schema column on `beliefs` (`unknown` | `transient` | `durable` | `permanent`) and the matching python validator. Phase-2 wires per-ingest-source defaults into `derive()` and the orphan-classifier scanner so new beliefs land with a non-`unknown` retention class based on which entry point ingested them. Phase-3 lands the promotion path: `MemoryStore.find_promotable_snapshots()` and `set_retention_class()` store APIs, surfaced through `aelf doctor --promote-retention` so an operator can run a one-shot pass that reclassifies low-prior beliefs based on retrieval / corroboration evidence accumulated since they were ingested. Foundational layer for the v2.0 aging / pruning policy spec'd in `docs/belief_retention_class.md`; no automated retention-driven eviction yet. | |
| - **Belief retention class + per-source aging policy** ([#290](https://github.com/robotrocketscience/aelfrice/issues/290)). Phase-1 adds the `retention_class` schema column on `beliefs` (`unknown` | `transient` | `durable` | `permanent`) and the matching Python validator. Phase-2 wires per-ingest-source defaults into `derive()` and the orphan-classifier scanner so new beliefs land with a non-`unknown` retention class based on which entry point ingested them. Phase-3 lands the promotion path: `MemoryStore.find_promotable_snapshots()` and `set_retention_class()` store APIs, surfaced through `aelf doctor --promote-retention` so an operator can run a one-shot pass that reclassifies low-prior beliefs based on retrieval / corroboration evidence accumulated since they were ingested. Foundational layer for the v2.0 aging / pruning policy spec'd in `docs/belief_retention_class.md`; no automated retention-driven eviction yet. |
|
|
||
| ### Fixed | ||
|
|
||
| - **Corroborations preserved across unique-applying migration** (refs [#336](https://github.com/robotrocketscience/aelfrice/issues/336)). The one-shot migration adding `UNIQUE(content_hash)` to `beliefs` did `DROP TABLE beliefs` with `PRAGMA foreign_keys=ON`, firing the `ON DELETE CASCADE` on `belief_corroborations` and wiping every corroboration row — including the synthetic `consolidation_migration` markers the dedup pass had just inserted. Wrap the swap in `PRAGMA foreign_keys=OFF/=ON` per the SQLite recommended pattern for table-mutation migrations. |
There was a problem hiding this comment.
issue (typo): Fix the PRAGMA example to use OFF/ON instead of OFF/=ON.
PRAGMA foreign_keys=OFF/=ON doesn’t match SQLite syntax or the earlier foreign_keys=ON in the sentence. Please use PRAGMA foreign_keys=OFF / PRAGMA foreign_keys=ON, or otherwise show OFF/ON without the extra =.
| - **Corroborations preserved across unique-applying migration** (refs [#336](https://github.com/robotrocketscience/aelfrice/issues/336)). The one-shot migration adding `UNIQUE(content_hash)` to `beliefs` did `DROP TABLE beliefs` with `PRAGMA foreign_keys=ON`, firing the `ON DELETE CASCADE` on `belief_corroborations` and wiping every corroboration row — including the synthetic `consolidation_migration` markers the dedup pass had just inserted. Wrap the swap in `PRAGMA foreign_keys=OFF/=ON` per the SQLite recommended pattern for table-mutation migrations. | |
| - **Corroborations preserved across unique-applying migration** (refs [#336](https://github.com/robotrocketscience/aelfrice/issues/336)). The one-shot migration adding `UNIQUE(content_hash)` to `beliefs` did `DROP TABLE beliefs` with `PRAGMA foreign_keys=ON`, firing the `ON DELETE CASCADE` on `belief_corroborations` and wiping every corroboration row — including the synthetic `consolidation_migration` markers the dedup pass had just inserted. Wrap the swap in `PRAGMA foreign_keys=OFF` / `PRAGMA foreign_keys=ON` per the SQLite recommended pattern for table-mutation migrations. |
Summary
Cuts v1.6.0 from main HEAD. 23 user-facing commits since v1.5.1 captured under
[1.6.0]in CHANGELOG. Version bumped 1.5.1 → 1.6.0; uv.lock refreshed.Companion to the retroactive v1.5.1 tag pushed today at
831881d(already published to PyPI via run 25262298217).What landed in this PR
Three atomic commits:
123b10e— backfill#190+#238entries from stale[Unreleased]into[1.5.1](where they actually shipped pergit describe --contains).deac329— write[1.6.0]section: 9 grouped feat entries (paragraphs), 1 changed entry (refactor: drop benchmarks/-importing targets from aelf bench (supersedes #329) #342), 6 fixed entries (one-liners).3084da5—release: v1.6.0(pyproject + uv.lock).v1.6.0 highlights (reviewer-facing)
aelf tailfor live hook observability ([v1.5.x] Injection log +aelf tail— live observability for hook-injected memory blocks #321).attn:merge-conflictrename.Verification
831881d..mainaccounted for in[1.6.0](excluding internal-only ci/build/test/style/docs/chore).[Unreleased]section now empty / removed.Test plan
v1.6.0at merge commit, push tag, verifypublish.ymlships to PyPI.Summary by Sourcery
Cut the v1.6.0 release by finalizing the changelog, backfilling the 1.5.1 section, and bumping the project version.
New Features:
aelf tailCLI for live observability.aelf upgrade.Bug Fixes:
aelf doctor --gc-orphan-feedbackto clean up dangling feedback history rows with non-existent belief references.step-security/harden-runnerGitHub Action to a specific commit SHA and correct a misnamed merge-conflict label in workflows.Enhancements:
aelfCLI into module-level entry points and improveaelf bencherror messaging.Build:
Documentation: