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: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ dist/
build/
*.egg-info/
.env
.env.*
!.env.example
*.env
state.json
runtime.json
Expand Down
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# Changelog

## 0.3.3 — 2026-08-03

- Advance the immutable compatibility set to Oída 0.9.2, GERM 0.3.3,
AKOÚŌ 0.9.1, Earworm 0.6.1, and Akousmata 0.6.1.
- Preserve the embodied-listener boundary for `heard`, attributable
disagreement resolution, and mechanically additive listening revisions
across the installed core.
- Pin every component to its exact reviewed release commit and broaden local
environment-file ignore coverage.

## 0.3.2 — 2026-08-03

- Advance the immutable GERM pin to 0.3.2, whose Cosmoaudition status boundary
Expand Down
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ cff-version: 1.2.0
message: "If you use the Listening Stack Installer in research, cite this software and the installed applications and models separately."
title: "The Listening Stack Installer"
type: software
version: 0.3.2
version: 0.3.3
date-released: 2026-08-03
authors:
- family-names: "Isaza"
Expand Down
32 changes: 17 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Earworm, and Akousmata remain independent repositories with their own histories,
licenses, and releases. The assistant does not duplicate their application
code.

Current installer release: `0.3.2`.
Current installer release: `0.3.3`.

## Quick Start

Expand Down Expand Up @@ -65,32 +65,33 @@ chmod +x listening-stack.pyz

Sources are cloned into a dedicated installation directory. The installer
verifies every existing origin and refuses to update a dirty or unexpected
checkout. Release `0.3.2` installs one immutable compatibility set and records
checkout. Release `0.3.3` installs one immutable compatibility set and records
the exact commits it installed in local state:

| Component | Tested release |
| --- | --- |
| Oída | 0.9.1 |
| GERM | 0.3.2 |
| AKOÚŌ | 0.9.0 |
| Earworm | 0.6.0 |
| Akousmata | 0.6.0 |
| Oída | 0.9.2 |
| GERM | 0.3.3 |
| AKOÚŌ | 0.9.1 |
| Earworm | 0.6.1 |
| Akousmata | 0.6.1 |

The official MOSS-Audio source is pinned to the revision tested with Oída
0.9.1. Stable Audio 3 source is pinned to the same revision locked by GERM
0.3.2. Rerunning this installer therefore reproduces the compatibility set;
0.9.2. Stable Audio 3 source is pinned to the same revision locked by GERM
0.3.3. Rerunning this installer therefore reproduces the compatibility set;
it does not silently advance a checkout to a newer moving branch.

## Accountable Listening Contract

Release 0.3.2 installs listening as an explicit, inspectable chain:
Release 0.3.3 installs listening as an explicit, inspectable chain:

1. AKOÚŌ owns routing and claim discipline under `akouo/v0.9`, including
situated `akouo/listening-context/v2`, attributable listening passes,
provenance and cuts, explicit route decisions, and declared ensembles.
2. Oída owns runtime perception and the decision-first gateway. A successful
hearing emits `oida/listening-event/v0.3` through `oida/gateway/v0.5`; a
refusal before perception emits `oida/route-outcome/v0.1` instead of
perception pass emits `oida/listening-event/v0.3` through
`oida/gateway/v0.5`; a refusal before perception emits
`oida/route-outcome/v0.1` instead of
fabricating an empty hearing.
3. Earworm owns addressable, append-only `earworm/auditum/v2` lineage,
disagreement, decision-only records, action receipts, revision, and
Expand All @@ -101,8 +102,9 @@ Release 0.3.2 installs listening as an explicit, inspectable chain:

Capability and authority stay separate. A host may declare what its apparatus
can perceive, but Oída recomputes the effective context and defaults operational
authority to observe-only. Prompts, transcripts, and contextual descriptions
remain attributed text rather than being relabeled as heard evidence.
authority to observe-only. Prompts, transcripts, contextual descriptions, and
machine observations remain attributed evidence rather than being relabeled as
embodied hearing.
Unsupported measurements remain absent rather than being inferred from model
prose. A pause, refusal, withholding, or forgetting decision is recorded as a
decision, not confused with honest absence or an undetermined claim. Distinct
Expand Down Expand Up @@ -148,7 +150,7 @@ MOSS-Audio code and released model checkpoints are Apache-2.0. Oída is develope
and tested first against the 4B Instruct and Thinking checkpoints while
remaining model-agnostic at its gateway boundary.

Oída 0.9.1 requires Safetensors for its embedded model loader and pins its
Oída 0.9.2 requires Safetensors for its embedded model loader and pins its
compatible Torch, TorchAudio, TorchCodec, and Transformers releases. The
installer downloads MOSS checkpoints by immutable Hugging Face commit and the
doctor verifies both model configuration and Safetensors weights.
Expand Down
4 changes: 2 additions & 2 deletions docs/accountable-listening.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Accountable Listening Architecture

Listening Stack 0.3.2 treats listening as a chain of bounded contracts, not as
Listening Stack 0.3.3 treats listening as a chain of bounded contracts, not as
one undifferentiated model response. Each concept has one semantic owner and is
parsed once at the boundary that owns it.

Expand Down Expand Up @@ -62,7 +62,7 @@ succeed.
When Oída is running, `listening-stack doctor` verifies:

1. the process identifies as Oída on the configured loopback address;
2. `/gateway` reports Oída 0.9.1 and the expected component contracts;
2. `/gateway` reports Oída 0.9.2 and the expected component contracts;
3. the gateway advertises all required schema endpoints;
4. the host-perception schema requires `oida/host-perception/v0.4`;
5. the listening-event schema requires `oida/listening-event/v0.3`;
Expand Down
10 changes: 5 additions & 5 deletions docs/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ remain under Hugging Face's credential handling and are not written to stack
state or environment files.

MOSS-Audio checkpoints are downloaded at the immutable revisions tested by
Oída 0.9.1. Stable Audio 3 currently resolves the selected gated model through
Oída 0.9.2. Stable Audio 3 currently resolves the selected gated model through
its upstream loader; when the Hugging Face cache exposes the resolved `main`
revision, the installer records it in `state.json`.

Expand Down Expand Up @@ -119,7 +119,7 @@ Pin the executable release used by the curl bootstrap:
```bash
curl -fsSL \
https://raw.githubusercontent.com/sonicfieldlabs/listening-stack/main/install.sh \
| LISTENING_STACK_VERSION=v0.3.2 bash
| LISTENING_STACK_VERSION=v0.3.3 bash
```

Override the executable destination:
Expand All @@ -137,11 +137,11 @@ clean installation checkout before fetching the immutable revisions in the
installer's compatibility set. It records the exact commits and refuses a
checkout that resolves to anything else. It never resets a dirty tree.

Listening Stack 0.3.2 pins Oída 0.9.1, GERM 0.3.2, AKOÚŌ 0.9.0, Earworm
0.6.0, and Akousmata 0.6.0. It also records the exact accountable-listening
Listening Stack 0.3.3 pins Oída 0.9.2, GERM 0.3.3, AKOÚŌ 0.9.1, Earworm
0.6.1, and Akousmata 0.6.1. It also records the exact accountable-listening
contracts in `listening-stack/state/v2`. The state names the canonical profile,
the exact component set, the four core components, and optional components. A
later installer release may publish a newer tested set; an existing 0.3.2
later installer release may publish a newer tested set; an existing 0.3.3
executable continues to reproduce this one.

Application version numbers remain owned by their repositories. Updating an
Expand Down
4 changes: 2 additions & 2 deletions docs/models.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ serves direct and transcription routes; the Thinking model serves deeper,
music, and targeted re-listening routes. Oída consumes a final model response
as bounded evidence and does not expose private reasoning traces.

Listening Stack 0.3.2 downloads each MOSS checkpoint by the immutable commit
audited for this release. Oída 0.9.1's embedded loader requires Safetensors and
Listening Stack 0.3.3 downloads each MOSS checkpoint by the immutable commit
audited for this release. Oída 0.9.2's embedded loader requires Safetensors and
uses its locked Torch 2.10, TorchAudio 2.10, TorchCodec 0.10, and Transformers
5.14 runtime. The installer also prepares Oída's optional Music ID dependency;
identification remains opt-in per listen and may contact the service used by
Expand Down
2 changes: 1 addition & 1 deletion docs/troubleshooting.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ listening-stack doctor
```

The installer sets explicit local MOSS paths, disables silent Hub lookup, and
downloads the immutable revisions tested with Oída 0.9.1. Rerun model download
downloads the immutable revisions tested with Oída 0.9.2. Rerun model download
if a checkpoint is incomplete.

## Oída is healthy but a contract or schema check fails
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "sonicfield-listening-stack"
version = "0.3.2"
version = "0.3.3"
description = "Reproducible installer and runtime verifier for the accountable listening core and optional GERM."
readme = "README.md"
requires-python = ">=3.9"
Expand Down
2 changes: 1 addition & 1 deletion src/listening_stack/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
"""Sonic Field Listening Stack installation assistant."""

__version__ = "0.3.2"
__version__ = "0.3.3"
32 changes: 16 additions & 16 deletions src/listening_stack/catalog.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,41 +59,41 @@ def size_gb(self) -> float:
key="oida",
name="Oída",
url="https://github.com/sonicfieldlabs/oida.git",
ref="v0.9.1",
version="0.9.1",
revision="46df4b18e51a10a46a7656fb000fdd23a639fef7",
ref="v0.9.2",
version="0.9.2",
revision="22a99662b004f3d472d86c06d595e458b0aaf022",
),
"germ": Repository(
key="germ",
name="GERM",
url="https://github.com/sonicfieldlabs/germ.git",
ref="v0.3.2",
version="0.3.2",
revision="55c7fc1f403c969c1053d727740681db24718bd6",
ref="v0.3.3",
version="0.3.3",
revision="3cbe20054328bc2d6f2d9988865d3194d915bfa6",
),
"akouo": Repository(
key="akouo",
name="AKOÚŌ",
url="https://github.com/sonicfieldlabs/akouo.git",
ref="v0.9.0",
version="0.9.0",
revision="466c4345ca57dee2636be7a5c3c7ec2615b1bf86",
ref="v0.9.1",
version="0.9.1",
revision="9cf584acaa55a321163b5deaebd4cc90fd3c6299",
),
"earworm": Repository(
key="earworm",
name="Earworm",
url="https://github.com/sonicfieldlabs/earworm.git",
ref="v0.6.0",
version="0.6.0",
revision="4aac663ab9a81cdf8d8c2f5c93f4cc84587c1572",
ref="v0.6.1",
version="0.6.1",
revision="48a87c5cd2eafb126c3ce9dc3eaa7b29dcc9dad1",
),
"akousmata": Repository(
key="akousmata",
name="Akousmata",
url="https://github.com/sonicfieldlabs/akousmata.git",
ref="v0.6.0",
version="0.6.0",
revision="7a0200ccfb98449dd545e8a8c0f7d3a36627f5ab",
ref="v0.6.1",
version="0.6.1",
revision="47d0557203f9ed286519d943245324034e6f7a54",
),
}

Expand Down Expand Up @@ -126,7 +126,7 @@ def size_gb(self) -> float:
name="Stable Audio 3",
url="https://github.com/Stability-AI/stable-audio-3.git",
ref="main",
# Match the immutable source revision in GERM v0.3.2's uv.lock.
# Match the immutable source revision in GERM v0.3.3's uv.lock.
revision="fa5ee841dd49bae0fa361fac26904adc27fd400e",
)

Expand Down
4 changes: 2 additions & 2 deletions tests/test_bootstrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ def fixture(
"BOOTSTRAP_FIXTURES": str(fixtures),
"HOME": str(home),
"LISTENING_STACK_BIN_DIR": str(install_bin),
"LISTENING_STACK_VERSION": "v0.3.2",
"LISTENING_STACK_VERSION": "v0.3.3",
"PATH": str(fake_bin) + os.pathsep + environment.get("PATH", ""),
"TMPDIR": str(temp_dir),
}
Expand Down Expand Up @@ -119,7 +119,7 @@ def test_additional_checksum_line_is_rejected(self):
def test_invalid_release_tag_is_rejected_before_download(self):
with tempfile.TemporaryDirectory() as temporary:
install_bin, environment = self.fixture(temporary)
environment["LISTENING_STACK_VERSION"] = "v0.3.2/../../unexpected"
environment["LISTENING_STACK_VERSION"] = "v0.3.3/../../unexpected"
result = subprocess.run(
["bash", str(ROOT / "install.sh"), "models", "--json"],
env=environment,
Expand Down
10 changes: 5 additions & 5 deletions tests/test_catalog.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@ def test_unknown_model_is_rejected(self):
selected_models(["not-a-model"])

def test_release_compatibility_set_is_immutable(self):
self.assertEqual(REPOSITORIES["oida"].version, "0.9.1")
self.assertEqual(REPOSITORIES["germ"].version, "0.3.2")
self.assertEqual(REPOSITORIES["akouo"].version, "0.9.0")
self.assertEqual(REPOSITORIES["earworm"].version, "0.6.0")
self.assertEqual(REPOSITORIES["akousmata"].version, "0.6.0")
self.assertEqual(REPOSITORIES["oida"].version, "0.9.2")
self.assertEqual(REPOSITORIES["germ"].version, "0.3.3")
self.assertEqual(REPOSITORIES["akouo"].version, "0.9.1")
self.assertEqual(REPOSITORIES["earworm"].version, "0.6.1")
self.assertEqual(REPOSITORIES["akousmata"].version, "0.6.1")
for repository in REPOSITORIES.values():
self.assertEqual(len(repository.revision), 40)
int(repository.revision, 16)
Expand Down
8 changes: 4 additions & 4 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ def test_noninteractive_dry_run(self):
]
)
self.assertIn("Dry run complete", output.getvalue())
self.assertIn("Oída v0.9.1", output.getvalue())
self.assertIn("GERM v0.3.2", output.getvalue())
self.assertIn("Oída v0.9.2", output.getvalue())
self.assertIn("GERM v0.3.3", output.getvalue())
self.assertIn("oida/gateway/v0.5", output.getvalue())
self.assertIn("earworm/auditum/v2", output.getvalue())

Expand All @@ -59,8 +59,8 @@ def test_noninteractive_default_is_core_without_germ(self):
)
plan = output.getvalue()
self.assertIn("Listening core", plan)
self.assertIn("Oída v0.9.1", plan)
self.assertNotIn("GERM v0.3.2", plan)
self.assertIn("Oída v0.9.2", plan)
self.assertNotIn("GERM v0.3.3", plan)

def test_models_and_no_models_are_mutually_exclusive(self):
with self.assertRaises(SystemExit) as raised:
Expand Down
6 changes: 3 additions & 3 deletions tests/test_doctor.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,11 @@ def output(command, **_kwargs):
(Path(temporary) / ".git").mkdir()
check = _check_repository(Path(temporary), "oida", spec.revision)
self.assertEqual(check.status, "pass")
self.assertIn("v0.9.1", check.detail)
self.assertIn("v0.9.2", check.detail)

def test_oida_live_contracts_verify_manifest_and_four_schemas(self):
manifest = {
"version": "0.9.1",
"version": "0.9.2",
"contract": "oida/gateway/v0.5",
"components": {
"akouo": {"contract": "akouo/v0.9"},
Expand Down Expand Up @@ -146,7 +146,7 @@ def test_oida_live_contracts_verify_manifest_and_four_schemas(self):

def test_oida_live_contracts_fail_closed_on_semantic_drift(self):
manifest = {
"version": "0.9.1",
"version": "0.9.2",
"contract": "oida/gateway/v0.5",
"components": {
"akouo": {"contract": "akouo/v0.9"},
Expand Down
2 changes: 1 addition & 1 deletion tests/test_installer.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def test_dry_run_model_free_install_has_no_filesystem_effect(self):
state["components"], ["earworm", "akouo", "akousmata", "oida"]
)
self.assertEqual(state["optional_components"], [])
self.assertEqual(state["installer_version"], "0.3.2")
self.assertEqual(state["installer_version"], "0.3.3")
self.assertEqual(state["contracts"]["gateway"], "oida/gateway/v0.5")
self.assertEqual(
state["contracts"]["listening_context"],
Expand Down