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
87 changes: 87 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
name: Publish

on:
push:
tags:
- "v*.*.*"
- "v*.*.*rc*"
release:
types: [published]

jobs:
build:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- uses: actions/checkout@v4

- uses: astral-sh/setup-uv@v5

- uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Install build backend
run: uv pip install --system hatch

- name: Verify tag matches pyproject version
if: startsWith(github.ref, 'refs/tags/v')
id: version
run: |
tag="${GITHUB_REF#refs/tags/v}"
pyver=$(hatch version)
echo "tag=$tag pyver=$pyver"
if [ "$tag" != "$pyver" ]; then
echo "::error::Tag v$tag does not match pyproject version $pyver"
exit 1
fi
echo "version=$pyver" >> "$GITHUB_OUTPUT"

- name: Build sdist + wheel
run: hatch build

- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/

publish-testpypi:
needs: build
if: startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
environment:
name: testpypi
url: https://test.pypi.org/project/elume/
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v4
with:
name: dist
path: dist/

- name: Publish to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
skip-existing: true

publish-pypi:
needs: build
if: github.event_name == 'release' && github.event.action == 'published'
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/project/elume/
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v4
with:
name: dist
path: dist/

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
58 changes: 57 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@ All notable changes to Elume are documented here. Format loosely follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Versions follow
semantic versioning once `0.1.0` ships; pre-alpha releases may break anything.

## [Unreleased] — Archon readiness phase 1
## [0.1.0] — 2026-05-04 — First public release

First public-ready snapshot. 21 tracks landed, 1045 tests passing, ruff
clean, GitHub CI green on Python 3.11/3.12, MIT-licensed.

### Added — Archon readiness phase 1

- Hopfield RNG injection: `HopfieldNetwork.update_all_units` now accepts an
injected `np.random.Generator`; deprecates the implicit global numpy RNG
Expand All @@ -23,6 +28,57 @@ semantic versioning once `0.1.0` ships; pre-alpha releases may break anything.
- New integration tests for belief-retrieval, competition-reinforcement
round-trip, and basin-state checkpointing.

### Added — Track 017: PriorHierarchy (Fleet B)

- `elume.models.priors` — frozen `PriorConstraint` and `PriorHierarchy`
records with generic `PriorTarget`/`PriorAction`/`PriorDefaultAction`
enums and successor helpers (`add`, `remove`, `replace`, `with_weight`,
`set_active`). No hardcoded archetypes, personas, or singleton state.

### Added — Track 020: Prior-gated cognition (Fleet B)

- `elume.cognition.priors` — `check_thought_permitted`,
`evaluate_prior_gate`, `apply_prior_activation_modifiers`, and
`run_gated_thought_competition`. Hard priors filter blocked candidates
out of the competition; soft priors apply boost/suppress activation
modifiers via successor thoughts. Base `run_thought_competition` is
unchanged.

### Added — Envelope reference operations

- Four additional registered operations: `evolution.step`,
`network.self_model.step`, `cognition.thought_competition`, and
`basins.hopfield_recall`. Each ships with deterministic-replay tests
asserting identical result, hash, and RNG state across runs.
- `OPERATIONS` registry with `register`/`resolve` helpers and the
`UnknownOperation` error for unregistered names.

### Added — Cross-platform float-hash policy

- `elume.envelope.hashing.platform_fingerprint()` returns a stable
`{arch}|{system}|{impl}|{python}|numpy={version}` tag; folded into
the canonical BLAKE2b pre-image at step 0 so cross-platform replay
drift produces a visible hash mismatch by construction. Rationale and
rejected alternatives in `docs/archon-readiness/21-float-hash-policy.md`.

### Added — Reference service

- `reference_service/src/reference_service/demo.py` — runnable in-memory
demo wiring belief embedding → LinOSS context → basin recall → thought
competition → one evolution step. Callable via `elume-reference-demo`
or `python -m reference_service`. Optional FastAPI surface (`/health`,
`/demo`) under the `[web]` extra.

### Added — Public-repo basics

- MIT `LICENSE`.
- `ATTRIBUTION.md` crediting LinOSS (Rusch & Rus, ICLR 2025), MemEvolve
(Zhang et al. 2025), Context Engineering (Kimai), and classical Hopfield
work.
- `CONTRIBUTING.md` covering local setup and library boundary rules.
- `.github/workflows/ci.yml` running ruff and pytest on Python 3.11/3.12
plus a reference-demo smoke run on every PR and main push.

## 0.0.1 — Unreleased

### Added — Track 015: MetacognitiveParticle + CognitiveCore (Fleet B)
Expand Down
27 changes: 22 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Elume

[![PyPI version](https://img.shields.io/pypi/v/elume.svg)](https://pypi.org/project/elume/)
[![Python versions](https://img.shields.io/pypi/pyversions/elume.svg)](https://pypi.org/project/elume/)
[![CI](https://github.com/bionicbutterfly13/elume/actions/workflows/ci.yml/badge.svg)](https://github.com/bionicbutterfly13/elume/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

**An open-source agentic memory engine for long-horizon adaptive learning.**

Elume brings together existing memory and sequence-modeling components into a single working system for long-horizon agents.
Expand Down Expand Up @@ -62,9 +67,17 @@ Phase 2 is complete through the prior gate: `Track 011` shipped `elume.network`,

Archon-style deterministic-harness adoption is staged on `feat/archon-readiness-phase-1`. The kernel has injected RNGs, frozen trajectory metadata, provider snapshots, and an `elume.envelope` v0 operation registry covering belief embedding, evolution step, thought competition, self-model stepping, and Hopfield recall. The remaining design question is cross-platform float-hash policy.

## Quickstart
## Install

Requires Python `>=3.11`.

```bash
pip install elume
```

## Quickstart (development)

Requires Python `>=3.11` and [`uv`](https://github.com/astral-sh/uv).
For local development, use [`uv`](https://github.com/astral-sh/uv) and an editable install:

```bash
# from the repo root
Expand Down Expand Up @@ -107,15 +120,19 @@ elume/

## Consuming Elume

Elume is consumed by downstream projects via editable install during co-development:
Downstream projects pin a versioned PyPI release:

```bash
pip install elume==0.1.0
```

For co-development against an unreleased branch, an editable install also works:

```bash
# from the consumer repo (e.g. dionysus3)
pip install -e /path/to/elume
```

Once the API stabilizes, switch to versioned PyPI releases.

## Principles

- **Integration, not invention.** The underlying techniques are open source or openly published; Elume's work is bringing them together.
Expand Down
11 changes: 6 additions & 5 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "hatchling.build"

[project]
name = "elume"
version = "0.0.1"
version = "0.1.0"
description = "Elume — an open-source agentic memory engine for long-horizon adaptive learning. An integration layer bringing together LinOSS oscillatory state-space models, attractor-based associative memory, and MemEvolve-style adaptive memory mechanisms into a single unified memory kernel. The contribution is integration, not invention."
readme = "README.md"
requires-python = ">=3.11"
Expand All @@ -14,7 +14,7 @@ authors = [
]
keywords = ["memory", "active-inference", "attractor-basins", "linoss", "self-evolving"]
classifiers = [
"Development Status :: 2 - Pre-Alpha",
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: MIT License",
Expand All @@ -35,9 +35,10 @@ dev = [
]

[project.urls]
Homepage = "https://github.com/manisaintvictor/elume"
Repository = "https://github.com/manisaintvictor/elume"
Issues = "https://github.com/manisaintvictor/elume/issues"
Homepage = "https://github.com/bionicbutterfly13/elume"
Repository = "https://github.com/bionicbutterfly13/elume"
Issues = "https://github.com/bionicbutterfly13/elume/issues"
Changelog = "https://github.com/bionicbutterfly13/elume/blob/main/CHANGELOG.md"

[tool.hatch.build.targets.wheel]
packages = ["src/elume"]
Expand Down
6 changes: 3 additions & 3 deletions reference_service/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "hatchling.build"

[project]
name = "elume-reference-service"
version = "0.0.1"
version = "0.1.0"
description = "Runnable reference service demonstrating the Elume kernel end-to-end."
readme = "README.md"
requires-python = ">=3.11"
Expand All @@ -20,8 +20,8 @@ dependencies = [
elume-reference-demo = "reference_service.demo:main"

[project.optional-dependencies]
# FastAPI wiring will land in a later track. Kept as an optional extra so the
# core shell installs without web dependencies.
# Optional web extra. The CLI demo runs without it; install when you want
# the FastAPI surface (`/health`, `/demo`).
web = [
"fastapi>=0.110",
"uvicorn>=0.29",
Expand Down
2 changes: 1 addition & 1 deletion reference_service/src/reference_service/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
"""Elume reference service — runnable demo of the kernel end-to-end."""

__version__ = "0.0.1"
__version__ = "0.1.0"
2 changes: 1 addition & 1 deletion src/elume/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@
See conductor/product.md for the full product specification.
"""

__version__ = "0.0.1"
__version__ = "0.1.0"
2 changes: 1 addition & 1 deletion tests/unit/test_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ def test_version_is_declared() -> None:


def test_version_matches_pyproject() -> None:
assert elume.__version__ == "0.0.1"
assert elume.__version__ == "0.1.0"
Loading