Skip to content

Commit 698cd04

Browse files
committed
Release GERM 0.3.2 status privacy patch
1 parent 16f427b commit 698cd04

10 files changed

Lines changed: 47 additions & 14 deletions

File tree

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Changelog
22

3+
## 0.3.2 — Cosmoaudition status privacy
4+
5+
- Keep Cosmoaudition health-check failures in local logs while returning only
6+
a stable public error at the loopback API boundary.
7+
- Add a regression test proving low-level backend details cannot enter the
8+
status payload.
9+
310
## 0.3.1 — Security and stack alignment
411

512
- Overrode Stable Audio 3's upstream Torch 2.7.1 constraint with the locally

CITATION.cff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ authors:
55
- family-names: "Isaza"
66
given-names: "eme"
77
affiliation: "Sonic Field Labs"
8-
version: "0.3.1"
8+
version: "0.3.2"
99
date-released: "2026-08-03"
1010
license: "MPL-2.0"
1111
repository-code: "https://github.com/sonicfieldlabs/germ"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ listened to, and traced through lineage. A listening from Oída can become a
88
prompt or source in GERM; a successful render can become a descendant in
99
Akousmata and return to Oída for another listening.
1010

11-
Current release: `0.3.1`.
11+
Current release: `0.3.2`.
1212

1313
GERM is an independent Sonic Field Labs project. It can use Stable Audio 3
1414
providers, but it is not an official Stability AI product.

apps/macos/script/build_and_run.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ APP_NAME="germ"
66
EXECUTABLE_NAME="germ-macos"
77
BUNDLE_ID="org.sonicfield.germ"
88
MIN_SYSTEM_VERSION="13.0"
9-
MARKETING_VERSION="0.3.1"
10-
BUNDLE_VERSION="4"
9+
MARKETING_VERSION="0.3.2"
10+
BUNDLE_VERSION="5"
1111

1212
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
1313
# Keep the runnable bundle where repository users expect to find apps. The

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "germ"
3-
version = "0.3.1"
3+
version = "0.3.2"
44
description = "Local-first modular laboratory for generative microsound, Stable Audio workflows, and lineage-aware cultivation."
55
readme = "README.md"
66
license = "MPL-2.0"

server/cosmoaudition.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import annotations
22

33
import json
4+
import logging
45
import math
56
from ipaddress import ip_address
67
from typing import Any
@@ -19,6 +20,7 @@
1920

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

2325

2426
class CosmoauditionBridgeError(RuntimeError):
@@ -129,11 +131,12 @@ def status(self) -> dict[str, Any]:
129131
try:
130132
remote = self.get_json("/health")
131133
except (CosmoauditionBridgeError, ValueError) as exc:
134+
LOGGER.warning("Cosmoaudition health check unavailable: %s", exc)
132135
return {
133136
"available": False,
134137
"contract": COSMOAUDITION_GERM_CONTRACT,
135138
"baseUrl": self.base_url,
136-
"error": str(exc)[:2_000],
139+
"error": "Cosmoaudition bridge unavailable",
137140
}
138141
return {
139142
"available": remote.get("ok", True) is True,

server/identity.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
PRODUCT_NAME = "germ"
55
PRODUCT_DESCRIPTION = "open-source modular lab for generative microsound"
6-
__version__ = "0.3.1"
6+
__version__ = "0.3.2"
77
LEGACY_ENGINE_NAME = "Germinator"
88
SOUND_MATTER_CONCEPT = "sound_matter"
99
SOUND_MATTER_SCALES = ["micro", "meso", "macro"]

tests/test_project_consistency.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ def test_stable_audio_uses_the_audited_torch_override() -> None:
5050

5151

5252
def test_release_version_is_consistent_across_runtime_and_packaging() -> None:
53-
assert __version__ == "0.3.1"
54-
assert 'version = "0.3.1"' in _read("pyproject.toml")
55-
assert 'Current release: `0.3.1`.' in _read("README.md")
56-
assert 'version: "0.3.1"' in _read("CITATION.cff")
53+
assert __version__ == "0.3.2"
54+
assert 'version = "0.3.2"' in _read("pyproject.toml")
55+
assert 'Current release: `0.3.2`.' in _read("README.md")
56+
assert 'version: "0.3.2"' in _read("CITATION.cff")
5757
assert 'date-released: "2026-08-03"' in _read("CITATION.cff")
58-
assert 'MARKETING_VERSION="0.3.1"' in _read("apps/macos/script/build_and_run.sh")
59-
assert 'BUNDLE_VERSION="4"' in _read("apps/macos/script/build_and_run.sh")
58+
assert 'MARKETING_VERSION="0.3.2"' in _read("apps/macos/script/build_and_run.sh")
59+
assert 'BUNDLE_VERSION="5"' in _read("apps/macos/script/build_and_run.sh")

tests/test_server.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -986,6 +986,29 @@ def test_cosmoaudition_status_requires_boolean_remote_health(
986986
assert bridge.status()["available"] is False
987987

988988

989+
def test_cosmoaudition_status_logs_but_does_not_return_backend_details(
990+
monkeypatch: pytest.MonkeyPatch,
991+
caplog: pytest.LogCaptureFixture,
992+
) -> None:
993+
bridge = CosmoauditionBridge(
994+
base_url="http://127.0.0.1:8797",
995+
timeout_seconds=0.1,
996+
max_response_bytes=1_024,
997+
)
998+
999+
def fail(_path: str) -> dict:
1000+
raise CosmoauditionBridgeError("private backend path: /Users/listener/secret")
1001+
1002+
monkeypatch.setattr(bridge, "get_json", fail)
1003+
with caplog.at_level("WARNING"):
1004+
status = bridge.status()
1005+
1006+
assert status["available"] is False
1007+
assert status["error"] == "Cosmoaudition bridge unavailable"
1008+
assert "secret" not in str(status)
1009+
assert "private backend path" in caplog.text
1010+
1011+
9891012
def test_matter_analysis_persists_explicit_states_and_masa_sidecar() -> None:
9901013
source_path = settings.audio_dir / "pytest_matter_analysis_source.wav"
9911014
write_sine_wav(source_path, duration=0.25)

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)