ruview @ v0.12.0
integrity
- size
- 60.4 MiB
- downloaded
- last checked
release notes
Five small commits since v0.11.0 — the HOMECORE web UI is no longer an empty shell, and the project's Trust Kill Switch now verifies every layer of the stack with a single command.
What changed
HOMECORE web UI is functional (was: empty shell)
The Lit + Vite frontend shipped in v0.10.0 had registered components but no pages mounted, so operators saw the appbar + nav but nothing in <main>. Browser-driven testing this session caught it; this release fixes it end-to-end.
frontend/src/pages/Dashboard.ts— new<hc-dashboard>Lit component. Reads bearer fromlocalStorage["homecore.token"](or?token=, or<meta>, withdev-tokenfallback). Fetches/api/config+/api/states, renders a.metaline + responsive grid of<hc-state-card>. Polls every 5 s. Surfaces structured backend-unreachable errors instead of a blank page.frontend/src/pages/States.ts— full HA-style table view of every entity (entity_id / state / last_changed / attributes). 5 s auto-refresh.frontend/src/pages/Services.ts— domain-grouped service registry from/api/services. Friendly empty state when no services are registered (matches a vanilla plugin-less boot).frontend/src/pages/Settings.ts— backend config readout (location / version / state / components) + bearer-token editor that writes tolocalStorage["homecore.token"].frontend/src/main.ts— tiny router: AppShell'shc-navigateevents swap the page element. Default first paint = Dashboard.scripts/homecore-seed.sh— populates 10 representative entities (RuView sensing-derived + conventional HA fixtures) so a freshhomecore-serverboot has demo content. Idempotent. Pulls live numbers from the RuView sensing-server whenRUVIEW_URLis reachable.
Browser-verified all 4 nav clicks swap the rendered page correctly. Zero console errors.
Trust Kill Switch covers v1 + v2 + HOMECORE
The original verify script only validated the v1 Python signal-processing proof. After v0.9.0 (ADR-125) and v0.10.0/v0.11.0 (HOMECORE), the stack has six more proof boundaries. verify now runs 9 phases in one command:
PASS Phase 1: v1 pipeline hash matches expected
PASS Phase 2: no random generators in production code
PASS Phase 3: 2,263 Rust workspace tests pass (real number, no agent claim)
PASS Phase 4: wifi-densepose-py PyO3 binding compiles
PASS Phase 5: ADR-125 §2.1.d invariant — identity_risk_score is None
PASS Phase 6: 12/12 crates on crates.io
PASS Phase 7: @ruvnet/rvagent v0.1.0 on npm
PASS Phase 8: multi-arch (amd64 + arm64) Docker manifest live
SKIP Phase 9: docker pull (skip when CLI absent)
Each phase reports PASS / FAIL / SKIP independently. SKIP is honest — no false green when an optional tool (cargo / docker / curl) is absent. Flags: --quick, --rust-only, --docker-only, plus the pre-existing --verbose, --audit, --generate-hash pass-through.
Pydantic + Windows + numpy-drift fixes
archive/v1/src/config/settings.py—extra="ignore"so the v1 proof tolerates unrelated.envkeys (NPM_TOKEN, DOCKER_HUB_TOKEN, etc.) used by other tooling. Closes a real secret-leak path where pydantic's error message echoed the offending token value.archive/v1/data/proof/expected_features.sha256— regenerated per the documentedverify.py --generate-hashprocedure to match the current numpy/scipy combo.verifyPhase 3 — fixed three subtle bugs (pipefail killing the script,0\n0arithmetic poisoning, Windows file-lock on cog-pose-estimation's smoke test) so the 2,263-test pass count actually surfaces.
Reproduce
./verify # full 9-phase proof
./verify --quick # skip slow phases (Rust workspace tests + Docker pull)
Local witness log saved at dist/verify-witness-9a09d186c.log (5.8 KB).
References
- Previous releases: v0.11.0, v0.10.0, v0.9.0
- ADR-125 / ADR-127 / ADR-130 / ADR-132 — the foundations this release builds on
Co-Authored-By: claude-flow ruv@ruv.net
download
curl -fL -o v0.12.0.zip https://ratatoskr.space/pkg/ruview/v0.12.0.zip
printf '%s %s\n' '411e3d1a1a3ff7f479404133345c7fb94769f7156936ee2f05160ca55ce7b7aa' 'v0.12.0.zip' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/ruview/v0.12.0.zip"
$out = "v0.12.0.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "411e3d1a1a3ff7f479404133345c7fb94769f7156936ee2f05160ca55ce7b7aa") { throw "sha256 mismatch" }
curl -fL -o v0.12.0.tar.gz https://ratatoskr.space/pkg/ruview/v0.12.0.tar.gz
printf '%s %s\n' '1cfc4779c36e511ba08d6faf13ad94e78963f83e4bb86bf4c060c7537d8b5021' 'v0.12.0.tar.gz' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/ruview/v0.12.0.tar.gz"
$out = "v0.12.0.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "1cfc4779c36e511ba08d6faf13ad94e78963f83e4bb86bf4c060c7537d8b5021") { throw "sha256 mismatch" }
download via yggdrasil mesh
curl -fL -o v0.12.0.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.12.0.zip
printf '%s %s\n' '411e3d1a1a3ff7f479404133345c7fb94769f7156936ee2f05160ca55ce7b7aa' 'v0.12.0.zip' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.12.0.zip"
$out = "v0.12.0.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "411e3d1a1a3ff7f479404133345c7fb94769f7156936ee2f05160ca55ce7b7aa") { throw "sha256 mismatch" }
curl -fL -o v0.12.0.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.12.0.tar.gz
printf '%s %s\n' '1cfc4779c36e511ba08d6faf13ad94e78963f83e4bb86bf4c060c7537d8b5021' 'v0.12.0.tar.gz' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.12.0.tar.gz"
$out = "v0.12.0.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "1cfc4779c36e511ba08d6faf13ad94e78963f83e4bb86bf4c060c7537d8b5021") { throw "sha256 mismatch" }
| artifact | format | size | hashes |
|---|---|---|---|
| v0.12.0.zip | zip | 60.4 MiB |
blake3-24 8c3ad3eb8932dd0beaa1f5b583f15470645ff4d681425005
sha256 411e3d1a1a3ff7f479404133345c7fb94769f7156936ee2f05160ca55ce7b7aa
sha1 6802b208ec9524bd14933f9caf614de4ef125de4
|
| v0.12.0.tar.gz | tar.gz | 58.7 MiB |
blake3-24 e0b742efcd469382232163518df9fc999676adff2c45467b
sha256 1cfc4779c36e511ba08d6faf13ad94e78963f83e4bb86bf4c060c7537d8b5021
sha1 52619362482d1a461214f1065550f36054b6b9d1
|
install
http_archive(
name = "ruview",
urls = ["https://ratatoskr.space/pkg/ruview/v0.12.0.tar.gz"],
integrity = "sha256-HPxHecNuURugjW+vE62U54lj+D5LuGv0wGDHU32LUCE=",
strip_prefix = "ruview-v0.12.0",
)
.url = "https://ratatoskr.space/pkg/ruview/v0.12.0.tar.gz",
install via yggdrasil mesh
http_archive(
name = "ruview",
urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.12.0.tar.gz"],
integrity = "sha256-HPxHecNuURugjW+vE62U54lj+D5LuGv0wGDHU32LUCE=",
strip_prefix = "ruview-v0.12.0",
)
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.12.0.tar.gz",