From 404237a8efe51f784f87bfabc8e9affe3904a7a1 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Tue, 29 Sep 2026 13:50:45 +0200 Subject: [PATCH] Cut the stale README and check.ps1 claims README no longer tells the reader to run `brokkr-daemon -- serve`, a subcommand that does not exist; it lists the real subcommands and says the daemon is a CLI over cache files. The Unity install path is F:/. check.ps1 takes -CultLibRoot (default F:\Projects\CultLib) and fails, instead of skipping, when the CultLib packages directory is absent; the Blender CultMesh smoke loads the three Python packages through blender_target._load_cultmesh. Cut M2 of docs/brokkr-adoption-cut.md. check.ps1 is a Starfire check. Co-Authored-By: Claude Sonnet 5 --- README.md | 29 +++++++++++++++++++---------- tools/check.ps1 | 11 +++++++---- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 3b7a0e9..2d5ac56 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,8 @@ broker. - `surfaces/blender/brokkr_bridge`: Blender add-on target backed by CultLib's Python CultMesh node/server, with optional debug export/import probes. -- `brokkr-daemon`: Rust daemon skeleton that emits Brokkr's provider - advertisement and command policy. +- `brokkr-daemon`: Rust CLI that emits Brokkr's provider advertisement and + command policy and runs the Unity/Blender sync pass. ## First Smoke @@ -55,17 +55,26 @@ timeline bindings, and receipts. Unity and Blender editor plugins publish those documents through CultMesh so a daemon sync loop can translate them into host-owned command intents without stealing scene truth. -## Unity Smoke +## Commands -```powershell -cargo run -p brokkr-daemon -- serve -``` +`brokkr-daemon` is a command-line tool over cache files, not a running service. +It has four subcommands: -Add the Unity package by local path: +- `provider` (alias `smoke`): print the provider advertisement. +- `sync-contract`: print the sync contract. +- `sync-once --unity-cache PATH --blender-cache PATH [--dry-run]`: run one sync + pass between the two editor caches. +- `sync-loop --unity-cache PATH --blender-cache PATH [--interval-ms N] + [--max-passes N] [--dry-run]`: repeat the sync pass. + +## Unity Install + +Add the Unity package by local path, alongside `org.gamecult.cultlib` (see +`surfaces/unity/README.md`): ```json -"com.gamecult.brokkr": "file:E:/Projects/Brokkr/surfaces/unity/Packages/com.gamecult.brokkr" +"com.gamecult.brokkr": "file:F:/Projects/Brokkr/surfaces/unity/Packages/com.gamecult.brokkr" ``` -Then open `GameCult > Brokkr` in Unity and publish a snapshot to the local -daemon. +Then open `GameCult > Brokkr` in Unity. The window mirrors editor state to a +CultMesh cache file in the project. diff --git a/tools/check.ps1 b/tools/check.ps1 index 4023541..c5d8dbb 100644 --- a/tools/check.ps1 +++ b/tools/check.ps1 @@ -1,3 +1,5 @@ +param([string]$CultLibRoot = "F:\Projects\CultLib") + $ErrorActionPreference = "Stop" function Assert-NativeSuccess { @@ -80,11 +82,12 @@ try { & $pythonExe -m py_compile surfaces\blender\brokkr_bridge\blender_target.py surfaces\blender\brokkr_bridge\__init__.py Assert-NativeSuccess "Blender adapter Python compile" - $cultLibPySrc = "E:\Projects\CultLib-main-work\packages\cultcache-py\src" - if (Test-Path $cultLibPySrc) { - & $pythonExe -c "import sys, tempfile; sys.path.insert(0, r'$cultLibPySrc'); sys.path.insert(0, r'surfaces\blender\brokkr_bridge'); import blender_target; cultmesh, cultcache = blender_target._load_cultmesh(r'$cultLibPySrc'); doc = cultcache.define_document_type('brokkr.check.v0'); node = cultmesh.CultMesh.start_node(tempfile.NamedTemporaryFile(suffix='.ccmp').name, runtime_id='brokkr-check'); node.database.register_document(doc); node.database.put(doc, 'check', {'ok': True}); assert node.database.snapshot()['brokkr.check.v0']['check']['ok'] is True; server = cultmesh.CultMesh.serve_node(node, host='127.0.0.1', port=0); assert server.port > 0; server.stop()" - Assert-NativeSuccess "Blender adapter CultMesh import" + $cultLibPackages = Join-Path $CultLibRoot "packages" + if (-not (Test-Path $cultLibPackages)) { + throw "CultLib packages directory not found: $cultLibPackages (pass -CultLibRoot)." } + & $pythonExe -c "import sys, tempfile; sys.path.insert(0, r'surfaces\blender\brokkr_bridge'); import blender_target; cultmesh, cultcache = blender_target._load_cultmesh(r'$cultLibPackages'); doc = cultcache.define_document_type('brokkr.check.v0'); node = cultmesh.CultMesh.start_node(tempfile.NamedTemporaryFile(suffix='.ccmp').name, runtime_id='brokkr-check'); node.database.register_document(doc); node.database.put(doc, 'check', {'ok': True}); assert node.database.snapshot()['brokkr.check.v0']['check']['ok'] is True; server = cultmesh.CultMesh.serve_node(node, host='127.0.0.1', port=0); assert server.port > 0; server.stop()" + Assert-NativeSuccess "Blender adapter CultMesh import" } finally { Pop-Location