diff --git a/CHANGELOG.md b/CHANGELOG.md index 48eaffb7..a150a24c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,32 @@ PyPI version — not the changelog header. --- +## [2026-07-17] + +**v2.7.2** — everything merged since v2.7.1, headlined by the compass decision +engine v2: curation with supersedes links + write-time conflict advisories +(Track 1), and ambient recall — rated past decisions now surface verbatim into +live sessions on matching prompts, governed by session caps and spacing +(Track 2). Also in this release: the plan close pipeline completes itself +(auto-vectorization + crash-safe registry writes), drone's 3-layer subprocess +timeout policy with a collision-free `--drone-timeout` flag, plan-number memory +search that pins the exact plan, a fleet-wide seedgo 100% restoration, and +SSH-signed commits now verifying on GitHub. Details in the sections below +(2026-07-16 carries the full stories). + +### Changed + +- **Release cadence ruling: every dev→main merge ships a PATCH bump + tag by + default.** PyPI tracks main, always current; version numbers carry no + significance during beta — the big jump is reserved for beta exit. + +- **Merge playbook SOP refined from live run PPLAN-0010.** The raw + `git fetch origin main:main` step (now blocked by the git gate) is replaced + with `drone @git sync` in both places it appeared, and the template opens + with the exact create command (`drone @flow create . "Merge summary" merge + pplan` — template name before type), closing the trap where the wrong arg + order silently stamps the default template. + ## [2026-07-16] ### Added diff --git a/pyproject.toml b/pyproject.toml index 367242de..d790a3bf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "aipass" -version = "2.7.1" +version = "2.7.2" description = "A local multi-agent framework where your AI agents keep their memory, work together, and never ask you to re-explain context" readme = "README.md" license = "MIT" diff --git a/src/aipass/__init__.py b/src/aipass/__init__.py index 21e11f5a..ab100156 100644 --- a/src/aipass/__init__.py +++ b/src/aipass/__init__.py @@ -3,4 +3,4 @@ git clone + ./setup.sh — https://github.com/AIOSAI/AIPass """ -__version__ = "2.7.1" +__version__ = "2.7.2" diff --git a/src/aipass/flow/templates/playbook_plans/merge.md b/src/aipass/flow/templates/playbook_plans/merge.md index 513487a8..743d3a2c 100644 --- a/src/aipass/flow/templates/playbook_plans/merge.md +++ b/src/aipass/flow/templates/playbook_plans/merge.md @@ -1,5 +1,7 @@ # {plan_number} - {subject} (MERGE) +> **Create:** `drone @flow create . "Merge summary" merge pplan` (template name before type) + **Created**: {today} **Branch**: {location} **Status**: Active @@ -59,10 +61,9 @@ just that one merge commit — **cosmetic and trivially resolved**. WORKS** — a clean fast-forward realign, no merge commit created, no history rewrite. - **Realign dev to even** (recommended): `drone @git sync` from dev (clean FF), or manually `git merge --ff-only origin/main` on dev. No force-push, no rebase needed. -- **Sync local `main` ref WITHOUT checkout**: `git fetch origin main:main` — updates the - local main ref to match origin with **zero working-tree touch, no checkout**. This is the - answer to the IDE "switch to main → your local changes would be overwritten by checkout" - dialog: that dialog is git SAFETY working — **Cancel, never Force Checkout**. You never +- **Local main behind?** `drone @git sync` from dev handles it (stays on dev, clean FF). + If the IDE shows "switch to main → your local changes would be overwritten by checkout" — + that dialog is git SAFETY working — **Cancel, never Force Checkout**. You never need to stand on main. --- @@ -73,7 +74,7 @@ just that one merge commit — **cosmetic and trivially resolved**. - [ ] Confirm what's shipping — scan uncommitted changes + already-pushed dev commits ahead of main: `git rev-list --count main..dev` (read git, raw ok) - [ ] No surprise files (stray `/tmp` artifacts, test pollution, `.recovery`/`.archive` churn). Clean = archive, never delete. - [ ] **Version state check** (informs the bump decision): read the **two** release-tied versions — `grep '^version' pyproject.toml` and `grep __version__ src/aipass/__init__.py` (they should match; if drifted, note it) — and what PyPI already has: `curl -s https://pypi.org/pypi/aipass/json | python3 -c "import sys,json;print(json.load(sys.stdin)['info']['version'])"`. PyPI rejects a duplicate, so the target must be > published. -- [ ] Decide: **release tag this merge?** (tag = PyPI publish + GitHub Release). If yes, note target version. (Significance call is the user's — the PATCH-default rule below is guidance, and the actual release history is a useful tie-breaker.) +- [ ] **Release tag: default YES with PATCH bump.** Every dev-to-main merge ships a PATCH bump + tag so PyPI always tracks main (Patrick ruling S318, 2026-07-17 — version numbers carry no significance during beta). Override to MINOR/MAJOR only when warranted; skip only if explicitly told. ## 2. Verify, commit, CHANGELOG @@ -112,14 +113,16 @@ The PR gate (verified against `.github/workflows/`): - [ ] **Expect `dev` to show "1 behind main" — that's the merge commit, it's cosmetic + fast-forwardable.** See "Why dev shows behind main" up top. - [ ] **Realign dev** (recommended): `drone @git sync` from dev, or `git merge --ff-only origin/main` on dev. Clean FF, no merge commit, no rewrite. -- [ ] **Stay on `dev`. Do not check out `main`.** Local main being behind is fine — sync it without checkout: `git fetch origin main:main` (zero working-tree touch). +- [ ] **Stay on `dev`. Do not check out `main`.** Local main being behind is fine — `drone @git sync` from dev covers it. - [ ] Never rebase, never reset, never checkout main. - [ ] Dependabot / other PRs targeting main: they go green once main has the fix + bots rebase — check after the push -## 7. Release tag (only if cutting a release) +## 7. Release tag -**Versioning rule — bump by SIGNIFICANCE, not cadence:** -- **PATCH** (`x.y.Z+1`) = fix / internal / standards / UX only → the default for most merges +**Standing default: PATCH bump every merge** (Patrick ruling S318, 2026-07-17). PyPI should always track main; version numbers carry no significance during beta. Big jump reserved for beta exit. + +Reference (SemVer — for when significance matters post-beta): +- **PATCH** (`x.y.Z+1`) = fix / internal / standards / UX only - **MINOR** (`x.Y+1.0`) = a new backward-compatible user-facing feature shipped - **MAJOR** (`X+1.0.0`) = breaking public-API change