Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Universal Engineering Rules
<!-- stack-version: 2.4.3 -->
<!-- stack-version: 2.4.4 -->
<!-- Cross-tool: Claude Code (@AGENTS.md in CLAUDE.md), Cursor (reads AGENTS.md natively at root + nested dirs), Codex (auto-loaded AGENTS.md) -->
<!-- Keep this file at the project root. Customize per project as needed. -->
<!-- Canonical source — reference this file (@AGENTS.md), do not copy it. Updates flow via `git pull` + /stack-upgrade. See UPDATING.md. -->
Expand Down
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,17 @@ project adheres to [Semantic Versioning](https://semver.org/).

## [Unreleased]

## [2.4.4] - 2026-09-17

Multi-Forge v1: the first release carrying the generic-Git lifecycle, the
feature model, the provider-neutral work policy and the Release Protocol V3
runtime. This is the **V2 bridge release**: the runtime understands a future
(V3) lifecycle publication and reports `CLI_UPDATE_REQUIRED` with the
upgrade path, while its own lifecycle artifact deliberately remains protocol
2 (`ainative-lifecycle-v2-2.4.4.zip`) so current runtimes can consume it
(see `docs/RELEASING.md`).


### Added

- **V2 forward bridge: a future lifecycle protocol now says so** (#157): a
Expand Down
4 changes: 2 additions & 2 deletions README.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -614,11 +614,11 @@ OpenCode et Cursor), pose `AGENTS.md` et `conventions.json`.
# Relancez la ligne d'installation quand une release change le runtime du
# lifecycle ; `ainative update` vous le dira (CLI_UPDATE_REQUIRED).
#
# PyPI (ainative-dev-stack==2.4.3) est cable mais pas encore publie : il
# PyPI (ainative-dev-stack==2.4.4) est cable mais pas encore publie : il
# manque une configuration Trusted Publisher unique sur le compte PyPI
# (docs/RELEASING.md). D'ici la, la release GitHub epinglee ci-dessous est
# l'installation supportee.
pip install "git+https://github.com/Rwanbt/ai-native-dev-stack.git@v2.4.3" # release epinglee (reproductible)
pip install "git+https://github.com/Rwanbt/ai-native-dev-stack.git@v2.4.4" # release epinglee (reproductible)
cd /chemin/vers/votre-projet

ainative setup # guide : profil, integration machine, doctor
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -607,11 +607,11 @@ manifest before parsing anything, and the support matrix is in `SUPPORT.md`.
# Re-run the install line when a release changes the lifecycle runtime;
# `ainative update` tells you when (CLI_UPDATE_REQUIRED).
#
# PyPI (ainative-dev-stack==2.4.3) is wired but not yet published: it needs
# PyPI (ainative-dev-stack==2.4.4) is wired but not yet published: it needs
# a one-time Trusted Publisher setup on the PyPI account (docs/RELEASING.md,
# "PyPI"), so until then the pinned GitHub release below is the supported
# install.
pip install "git+https://github.com/Rwanbt/ai-native-dev-stack.git@v2.4.3" # pinned release (reproducible)
pip install "git+https://github.com/Rwanbt/ai-native-dev-stack.git@v2.4.4" # pinned release (reproducible)
cd your-project

ainative setup # guided: profile, machine integration, doctor
Expand Down Expand Up @@ -664,7 +664,7 @@ cp tools/ai_docs/config.sh.example tools/ai_docs/config.sh
# Fill in Obsidian vault path, Python path, graphify binary

# 4. Install the CLI; it configures the hook — no hand-edited JSON:
pip install "git+https://github.com/Rwanbt/ai-native-dev-stack.git@v2.4.3"
pip install "git+https://github.com/Rwanbt/ai-native-dev-stack.git@v2.4.4"
ainative init --profile standard # merges ONE owned PostToolUse entry into .claude/settings.json
# (hand-registered before the lifecycle existed? init adopts it idempotently.)

Expand Down
2 changes: 1 addition & 1 deletion UPDATING.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ update each project. `ainative update` refuses the other order with

```bash
# 1. the CLI / runtime
pip install --upgrade "git+https://github.com/Rwanbt/ai-native-dev-stack.git@v2.4.3"
pip install --upgrade "git+https://github.com/Rwanbt/ai-native-dev-stack.git@v2.4.4"

# 2. each project
ainative update check # is there anything newer? (works with any runtime)
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.4.3
2.4.4
2 changes: 1 addition & 1 deletion ainative/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@

from __future__ import annotations

__version__ = "2.4.3"
__version__ = "2.4.4"

__all__ = ["__version__"]
2 changes: 1 addition & 1 deletion docs/MULTIVAULT-OPERATOR-GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ history only. ENFORCED-DIAGNOSTIC and ENFORCED-AUTHENTICATED are not available.
1. Install and initialize the stack (pinned release; see README for the current version):

```powershell
pip install --upgrade "git+https://github.com/Rwanbt/ai-native-dev-stack.git@v2.4.3"
pip install --upgrade "git+https://github.com/Rwanbt/ai-native-dev-stack.git@v2.4.4"
ainative machine init # installs the method and assets for every harness
ainative machine doctor # healthy, or exit 1 naming the failing asset
```
Expand Down
4 changes: 2 additions & 2 deletions docs/PUBLIC-PILOT.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ source pilot-venv/bin/activate
# Windows (PowerShell):
pilot-venv\Scripts\Activate.ps1

pip install "git+https://github.com/Rwanbt/ai-native-dev-stack.git@v2.4.3"
pip install "git+https://github.com/Rwanbt/ai-native-dev-stack.git@v2.4.4"
ainative --version
```

The last command prints the lifecycle version, the state schema and the stack
version. **Pass:** it prints them without an error. Note the versions in the
feedback form.

PyPI (`pip install ainative-dev-stack==2.4.3`) is not published yet — the
PyPI (`pip install ainative-dev-stack==2.4.4`) is not published yet — the
one-time trusted-publisher setup on the PyPI account is still pending. The
pinned release above is the supported install for this pilot.

Expand Down
16 changes: 8 additions & 8 deletions docs/RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ reminder; the gates fail closed and none of them fixes anything silently.

```bash
git checkout main && git pull --ff-only
git tag v2.4.3 <MAIN_SHA>
git push origin v2.4.3
git tag v2.4.4 <MAIN_SHA>
git push origin v2.4.4
```

The **Release assets** workflow then runs, in order:
Expand Down Expand Up @@ -100,29 +100,29 @@ workflow token, and GitHub does not let one workflow's token trigger another
exists, upload an already-published release with:

```bash
gh workflow run publish-pypi.yml -f tag=v2.4.3
gh workflow run publish-pypi.yml -f tag=v2.4.4
```

```bash
# what a user then runs
pip install ainative-dev-stack==2.4.3
pip install ainative-dev-stack==2.4.4
# or, isolated:
pipx install ainative-dev-stack==2.4.3
pipx install ainative-dev-stack==2.4.4
```

## Verifying what was published

```bash
# integrity: the bytes match the published sums
gh release download v2.4.3 --dir dist
gh release download v2.4.4 --dir dist
cd dist && sha256sum -c SHA256SUMS

# provenance: which workflow, repository and commit produced them
gh attestation verify dist/ainative_dev_stack-2.4.3-py3-none-any.whl -R Rwanbt/ai-native-dev-stack
gh attestation verify dist/ainative_dev_stack-2.4.4-py3-none-any.whl -R Rwanbt/ai-native-dev-stack

# PyPI provenance (attestations are published with the files)
python -m pip install --upgrade pypi-attestations
python -m pypi_attestations verify dist/ainative_dev_stack-2.4.3-py3-none-any.whl
python -m pypi_attestations verify dist/ainative_dev_stack-2.4.4-py3-none-any.whl
```

`SHA256SUMS` alone proves integrity against the source that published it; it
Expand Down
2 changes: 1 addition & 1 deletion scripts/opencode_plugin_published_e2e.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

Usage:
python scripts/opencode_plugin_published_e2e.py
python scripts/opencode_plugin_published_e2e.py --wheel dist/ainative_dev_stack-2.4.3-py3-none-any.whl
python scripts/opencode_plugin_published_e2e.py --wheel dist/ainative_dev_stack-2.4.4-py3-none-any.whl
python scripts/opencode_plugin_published_e2e.py --keep
"""

Expand Down
2 changes: 1 addition & 1 deletion templates/AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Universal Engineering Rules
<!-- stack-version: 2.4.3 -->
<!-- stack-version: 2.4.4 -->
<!-- Cross-tool: Claude Code (@AGENTS.md in CLAUDE.md), Cursor (reads AGENTS.md natively at root + nested dirs), Codex (auto-loaded AGENTS.md) -->
<!-- Keep this file at the project root. Customize per project as needed. -->
<!-- Canonical source — reference this file (@AGENTS.md), do not copy it. Updates flow via `git pull` + /stack-upgrade. See UPDATING.md. -->
Expand Down
4 changes: 4 additions & 0 deletions tests/test_lifecycle_update_transport.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@ def setUp(self) -> None:
previous = os.environ.pop(name, None)
if previous is not None:
self.addCleanup(os.environ.__setitem__, name, previous)
else:
# Tests set these directly; leave the process as it was found
# so a following suite never inherits a surprise selector.
self.addCleanup(os.environ.pop, name, None)

def get(self, provider, server: ScriptedTransport, url: str,
limit: int = 1_000_000) -> bytes:
Expand Down