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
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Changelog

## 0.3.2 — Cosmoaudition status privacy

- Keep Cosmoaudition health-check failures in local logs while returning only
a stable public error at the loopback API boundary.
- Add a regression test proving low-level backend details cannot enter the
status payload.

## 0.3.1 — Security and stack alignment

- Overrode Stable Audio 3's upstream Torch 2.7.1 constraint with the locally
Expand Down
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ authors:
- family-names: "Isaza"
given-names: "eme"
affiliation: "Sonic Field Labs"
version: "0.3.1"
version: "0.3.2"
date-released: "2026-08-03"
license: "MPL-2.0"
repository-code: "https://github.com/sonicfieldlabs/germ"
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ listened to, and traced through lineage. A listening from Oída can become a
prompt or source in GERM; a successful render can become a descendant in
Akousmata and return to Oída for another listening.

Current release: `0.3.1`.
Current release: `0.3.2`.

GERM is an independent Sonic Field Labs project. It can use Stable Audio 3
providers, but it is not an official Stability AI product.
Expand Down
4 changes: 2 additions & 2 deletions apps/macos/script/build_and_run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ APP_NAME="germ"
EXECUTABLE_NAME="germ-macos"
BUNDLE_ID="org.sonicfield.germ"
MIN_SYSTEM_VERSION="13.0"
MARKETING_VERSION="0.3.1"
BUNDLE_VERSION="4"
MARKETING_VERSION="0.3.2"
BUNDLE_VERSION="5"

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# Keep the runnable bundle where repository users expect to find apps. The
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 = "germ"
version = "0.3.1"
version = "0.3.2"
description = "Local-first modular laboratory for generative microsound, Stable Audio workflows, and lineage-aware cultivation."
readme = "README.md"
license = "MPL-2.0"
Expand Down
5 changes: 4 additions & 1 deletion server/cosmoaudition.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from __future__ import annotations

import json
import logging
import math
from ipaddress import ip_address
from typing import Any
Expand All @@ -19,6 +20,7 @@

COSMOAUDITION_GERM_CONTRACT = "cosmoaudition-germ/v0.1"
COSMOAUDITION_REMOTE_PATHS = frozenset({"/health", "/api/sources", "/api/snapshot"})
LOGGER = logging.getLogger(__name__)


class CosmoauditionBridgeError(RuntimeError):
Expand Down Expand Up @@ -129,11 +131,12 @@ def status(self) -> dict[str, Any]:
try:
remote = self.get_json("/health")
except (CosmoauditionBridgeError, ValueError) as exc:
LOGGER.warning("Cosmoaudition health check unavailable: %s", exc)
return {
"available": False,
"contract": COSMOAUDITION_GERM_CONTRACT,
"baseUrl": self.base_url,
"error": str(exc)[:2_000],
"error": "Cosmoaudition bridge unavailable",
}
return {
"available": remote.get("ok", True) is True,
Expand Down
2 changes: 1 addition & 1 deletion server/identity.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

PRODUCT_NAME = "germ"
PRODUCT_DESCRIPTION = "open-source modular lab for generative microsound"
__version__ = "0.3.1"
__version__ = "0.3.2"
LEGACY_ENGINE_NAME = "Germinator"
SOUND_MATTER_CONCEPT = "sound_matter"
SOUND_MATTER_SCALES = ["micro", "meso", "macro"]
12 changes: 6 additions & 6 deletions tests/test_project_consistency.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ def test_stable_audio_uses_the_audited_torch_override() -> None:


def test_release_version_is_consistent_across_runtime_and_packaging() -> None:
assert __version__ == "0.3.1"
assert 'version = "0.3.1"' in _read("pyproject.toml")
assert 'Current release: `0.3.1`.' in _read("README.md")
assert 'version: "0.3.1"' in _read("CITATION.cff")
assert __version__ == "0.3.2"
assert 'version = "0.3.2"' in _read("pyproject.toml")
assert 'Current release: `0.3.2`.' in _read("README.md")
assert 'version: "0.3.2"' in _read("CITATION.cff")
assert 'date-released: "2026-08-03"' in _read("CITATION.cff")
assert 'MARKETING_VERSION="0.3.1"' in _read("apps/macos/script/build_and_run.sh")
assert 'BUNDLE_VERSION="4"' in _read("apps/macos/script/build_and_run.sh")
assert 'MARKETING_VERSION="0.3.2"' in _read("apps/macos/script/build_and_run.sh")
assert 'BUNDLE_VERSION="5"' in _read("apps/macos/script/build_and_run.sh")
23 changes: 23 additions & 0 deletions tests/test_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -986,6 +986,29 @@ def test_cosmoaudition_status_requires_boolean_remote_health(
assert bridge.status()["available"] is False


def test_cosmoaudition_status_logs_but_does_not_return_backend_details(
monkeypatch: pytest.MonkeyPatch,
caplog: pytest.LogCaptureFixture,
) -> None:
bridge = CosmoauditionBridge(
base_url="http://127.0.0.1:8797",
timeout_seconds=0.1,
max_response_bytes=1_024,
)

def fail(_path: str) -> dict:
raise CosmoauditionBridgeError("private backend path: /Users/listener/secret")

monkeypatch.setattr(bridge, "get_json", fail)
with caplog.at_level("WARNING"):
status = bridge.status()

assert status["available"] is False
assert status["error"] == "Cosmoaudition bridge unavailable"
assert "secret" not in str(status)
assert "private backend path" in caplog.text


def test_matter_analysis_persists_explicit_states_and_masa_sidecar() -> None:
source_path = settings.audio_dir / "pytest_matter_analysis_source.wav"
write_sine_wav(source_path, duration=0.25)
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading