Merge pull request #698 from AIOSAI/dev

Merge playbook SOP fixes from live run PPLAN-0010
This commit is contained in:
AIPass
2026-07-16 23:43:55 -07:00
committed by GitHub
4 changed files with 40 additions and 11 deletions
+26
View File
@@ -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
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -3,4 +3,4 @@
git clone + ./setup.sh — https://github.com/AIOSAI/AIPass
"""
__version__ = "2.7.1"
__version__ = "2.7.2"
@@ -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