Skip to content

hygiene: de-privatize vibecrafted before public release (vc-deprivatize) - #70

Open
div0-space wants to merge 33 commits into
mainfrom
deprivatize/vibecrafted
Open

hygiene: de-privatize vibecrafted before public release (vc-deprivatize)#70
div0-space wants to merge 33 commits into
mainfrom
deprivatize/vibecrafted

Conversation

@div0-space

Copy link
Copy Markdown
Member

What

vc-deprivatize pass over the whole repository (stacked on #69 — the hosted-runner DMG workflow; merge that first or this PR carries its commits).

Scan before: 1277 findings / 465 definite leaks. After: verifyOK, no unambiguous PII/secret leaks remain; 219 "definite" hits left, of which 182 are the word tailscale (product surface) and the rest are REVIEW items below.

Refactors (functional, tested)

  • vc-frame theming — the private mesh topology (dragon/sztudio/silver/div0/mgbook16) was baked into auto-theme.sh and the theme names. Themes are now mesh-red/purple/cyan/green (palettes byte-identical); host→theme comes from VIBECRAFTED_MESH_MAP or ${VIBECRAFTED_HOME}/mesh.conf. Smoke 29/0, pytest 9/9, shellcheck clean. Operator machines need a ~/.vibecrafted/mesh.conf to keep their per-host accent (format in docs/VC-FRAME.md).
  • tui-agent mission controlTAILSCALE_DISPATCH_TARGETS = ["dragon","div0"] removed; targets from VIBECRAFTED_DISPATCH_TARGETS or mesh.conf; empty → neutral signal. Snapshots regenerated with generic hosts and CGNAT addresses. cargo fmt/clippy -D warnings/test -p voc green (also fixes a pre-existing clippy error in lib.rs).
  • parity diagnosticskronika 2026-04-10 citations → doctrine 2026-04-10 in code + the tests asserting on them.

Scrubs

  • private hostnames → host-a…host-f across docker/runtime, vibecrafted-vm, AICX-SYNC, fleet-health-probes, dashboards, tools, fixtures; one real tailnet IP → 100.64.0.11
  • people in public prose → operator / Vetcoders; Szowesgad out of CLI examples
  • /Users/polyversai/Users/tester (fixtures) and a repository variable PAYLOAD_HYGIENE_EXTRA_LITERALS (workflow; empty = run fails)
  • .loctree/loct-findings-vibecrafted.json untracked (tracked despite .gitignore)

REVIEW — recorded in ~/.local/state/vetcoders/naming/need-decisions.md (14 rows), highlights

  • P0: runtime_receipt.py / installer_gui.py still probe ~/Libraxis and ~/vc-workspace/vetcoders as legacy workshop roots
  • P0: tools/hooks/load-project-context.sh pings api.libraxis.cloud (private product) on session start
  • signing identity string in test_unified_app_contract.py (ground truth, name is public in the cert)
  • tools/scripts/github/repo-transfer.py (personal-account migration tool) — suggest removing
  • ~25 doc-removal candidates (agent-run reports, design sketches, historical audits)
  • 112× lowercase vetcoders in prose — separate casing PR

History scan (report-only)

7 commit subjects carry [maciej/manual] / ops-linux. No rewrite performed; operator decision before first public push.

Never merge from this PR — operator button.

🤖 Generated with Claude Code

… a hosted macOS runner

- new workflow release-dmg.yml (macos-15, workflow_dispatch + v* tags): checks out vibecrafted + donors vc-frame/vc-terminal, materializes $KEYS from secrets, runs make release, re-walks the DMG through the hygiene gate, scrubs keys, uploads DMG + receipts as artifact (no publish)
- payload-hygiene.sh: PAYLOAD_HYGIENE_EPHEMERAL_ROOTS declares builder roots that identify nobody (/Users/runner, $GITHUB_WORKSPACE); not an allowlist of payload strings — every surviving literal is still refused; unset = operator boundary unchanged
- why: operator decision 2026-08-22 — the local operator build cannot pass its own gate (rustc leaves ~411 $HOME literals in vc-frame via inlined upstream spans); a hosted runner has no operator identity to leak, so the gate's promise holds by construction
- measured: three clean local builds of PR66/main all stop at 'names the build host in 3 place(s)' (vc-frame only)

Authored-By: claude <agents@vetcoders.io>

session_id: 67428033-45fe-4310-abb5-09b998f5da06

time: 2026-08-22T19:53:05+02:00

runtime: terminal
…s an encrypted asset

- assets/fonts/SpotMono.ttc.enc: AES-256-CBC/PBKDF2 ciphertext of the licensed font (434 KB exceeds the 48 KB Actions secret limit; plaintext must not sit in a public repo)
- release-dmg.yml: decrypts it into $KEYS/fonts with secret VC_FONT_PASSPHRASE; replaces the VC_SPOT_MONO_TTC_B64 secret
- passphrase also kept in the operator's ~/.keys for rotation

Authored-By: claude <agents@vetcoders.io>

session_id: 67428033-45fe-4310-abb5-09b998f5da06

time: 2026-08-22T20:09:33+02:00

runtime: terminal
…rst hosted run

- workflow_dispatch is only registered once the file exists on main; a push trigger on this branch lets PR #69 prove the runner path before merge
- remove before/at merge

Authored-By: claude <agents@vetcoders.io>

session_id: 67428033-45fe-4310-abb5-09b998f5da06

time: 2026-08-22T20:14:17+02:00

runtime: terminal
- vetcoders/vc-frame main (7ab84069, 2026-08-14) lacks the release-binary target and the baked-manifest fix; develop (017e3839) is 13 ahead and is what the operator's local donor builds from
- first hosted run 32590319025 proved toolchain, keys and vc-terminal; it stopped exactly on 'No rule to make target release-binary'

Authored-By: claude <agents@vetcoders.io>

session_id: 67428033-45fe-4310-abb5-09b998f5da06

time: 2026-08-22T20:29:46+02:00

runtime: terminal
- run 32591086444 reached xtask build and panicked in prost-build: no protoc on macos-15; brew protobuf provides it

Authored-By: claude <agents@vetcoders.io>

session_id: 67428033-45fe-4310-abb5-09b998f5da06

time: 2026-08-22T20:41:58+02:00

runtime: terminal
…wn for the server shell

- run 32591700337 built vc-frame and vc-start on the runner; build-server-release stopped on missing cargo-leptos
- pinned to 0.3.7, the version the operator's machine releases with

Authored-By: claude <agents@vetcoders.io>

session_id: 67428033-45fe-4310-abb5-09b998f5da06

time: 2026-08-22T21:08:29+02:00

runtime: terminal
…not name the operator

- run 32593008654 assembled the whole app on macos-15 and stopped at the gate with 'no --forbid literal given': every build-host root was ephemeral, so the scanner refused an empty proof — correctly
- payload-hygiene.sh: PAYLOAD_HYGIENE_EXTRA_LITERALS appends caller literals; the workflow passes the operator's home and workshop, which is exactly what a signed artifact built elsewhere must not carry
- these two paths already appear in the public git history; forbidding them leaks nothing

Authored-By: claude <agents@vetcoders.io>

session_id: 67428033-45fe-4310-abb5-09b998f5da06

time: 2026-08-22T21:48:37+02:00

runtime: terminal
…pshot-donors)

- run #5 assembled Vibecrafted.app but the hygiene gate refused it:
  411x /Users/polyversai + 13x /Volumes/vc-workspace in Contents/Helpers/vc-frame
- source: vc-frame's git-tracked zellij-utils/assets/plugins/*.wasm, built on
  the operator machine and embedded via include_bytes!; no runner flag can
  rewrite bytes compiled elsewhere
- the builder already recompiles them under its remaps behind --snapshot-donors;
  on a hosted runner the donors are throwaway checkouts, so it is always on

Authored-By: claude <agents@vetcoders.io>

session_id: 67428033-45fe-4310-abb5-09b998f5da06

time: 2026-08-22T22:29:45+02:00

runtime: terminal
…the search list

- run #6 passed the hygiene gate (0 literals) and died in codesign:
  "The specified item could not be found in the keychain" although
  find-identity saw the Developer ID in the ephemeral keychain
- codesign chains the leaf through the search list; the hosted image also
  lacks Apple's Developer ID G2 intermediate
- builder: KEYCHAIN_SESSION_REGISTER_SEARCH_LIST now honours
  VIBECRAFTED_KEYCHAIN_SEARCH_LIST (default 0 — the operator machine keeps
  its Codescribe-safe behaviour)
- workflow: sets it to 1 and imports DeveloperIDG2CA.cer into the runner's
  login keychain

Authored-By: claude <agents@vetcoders.io>

session_id: 67428033-45fe-4310-abb5-09b998f5da06

time: 2026-08-22T23:31:15+02:00

runtime: terminal
…r, document the hosted path

- run 32600012658 produced Vibecrafted_4.2.4-20260822-8d041616.dmg:
  notarized, stapled, accepted by spctl, clean through the hygiene gate on
  the operator machine
- the push trigger on ci/release-dmg-runner was only for bring-up;
  tags v* and workflow_dispatch remain
- RELEASE_KICKOFF: the root workflow is no longer read-only; hosted runner vs
  operator machine, publication stays an explicit step

Authored-By: claude <agents@vetcoders.io>
session_id: 67428033-45fe-4310-abb5-09b998f5da06
time: 2026-08-23T00:19:26+02:00
runtime: claude-code
….conf, accent-named themes

- vetcoders-mesh.kdl: vetcoders-dragon/sztudio/silver/div0 → mesh-red/purple/cyan/green, palettes byte-identical
- auto-theme.sh: VIBECRAFTED_THEME pin > VIBECRAFTED_MESH_MAP > ${VIBECRAFTED_HOME}/mesh.conf > vibecrafted; no host list in the repo
- smoke [5] uses a temp mesh.conf with generic hosts (29/0); vc-dashboard MESH line reads the same file
- docs/VC-FRAME.md: per-host mapping section replaces the private host table

Authored-By: claude <agents@vetcoders.io>
session_id: 67428033-45fe-4310-abb5-09b998f5da06
time: 2026-08-23T13:00:37+02:00
runtime: claude-code
…from config, not a host list

- mission_control.rs: TAILSCALE_DISPATCH_TARGETS const removed; VIBECRAFTED_DISPATCH_TARGETS env > ${VIBECRAFTED_HOME}/mesh.conf (first token per line) > empty with a neutral 'no dispatch targets configured' signal
- fixtures/snapshots: host-a/host-b with 100.64.0.x CGNAT addresses instead of real peers
- lib.rs: useless_format clippy error in HEAD fixed; rustfmt pass on vc_start/config/observe/ui (HEAD was not fmt-clean)
- fmt/clippy -D warnings/test -p voc green

Authored-By: claude <agents@vetcoders.io>
session_id: 67428033-45fe-4310-abb5-09b998f5da06
time: 2026-08-23T13:01:01+02:00
runtime: claude-code
…he private chronicle

- 'kronika <date>' → 'doctrine <date>' in comments, docs, diagnostics and the tests that assert on them (spawn.sh, agent_dispatch.py, spawn_parity_test.sh, agent_dispatch_test.py)
- 'kronika notes/fragments' → 'chronicle …' in skill prose; PL glossary entry kept (vocabulary)
- spawn_parity 18/0, race_protection 23/0, agent_dispatch tests green

Authored-By: claude <agents@vetcoders.io>
session_id: 67428033-45fe-4310-abb5-09b998f5da06
time: 2026-08-23T13:01:11+02:00
runtime: claude-code
…, runtime and fixtures

- private workstation names (dragon/div0/sztudio/silver/mgbook16/ops-linux/blacky) → host-a…host-f in docker/runtime, vibecrafted-vm, AICX-SYNC, fleet-health-probes, dashboards, tools, test fixtures; one real tailnet address → 100.64.0.11
- people in public prose → operator / Vetcoders (design sketches, synthesis template, AGENT_OPS, install.sh signature line, PL glossary example)
- hook templates: 'Vista-specific' comments → product-neutral; regex unchanged
- tests green: aicx_sync_smoke 16/0, iterm2 149 passed, memex/live_dashboard/control_plane suites

Authored-By: claude <agents@vetcoders.io>
session_id: 67428033-45fe-4310-abb5-09b998f5da06
time: 2026-08-23T13:01:42+02:00
runtime: claude-code
…lic workflow, placeholders normalized

- release-dmg.yml: PAYLOAD_HYGIENE_EXTRA_LITERALS comes from the repository variable of the same name (set: 2 lines); empty variable fails the run
- test fixtures: /Users/polyversai|someone|nobody|operator|Barney → /Users/tester; scratch session name instead of the operator's
- .loctree/loct-findings-vibecrafted.json untracked (was tracked despite .gitignore)
- vc-deprivatize verify: OK; REVIEW items recorded in ~/.local/state/vetcoders/naming/need-decisions.md

Authored-By: claude <agents@vetcoders.io>
session_id: 67428033-45fe-4310-abb5-09b998f5da06
time: 2026-08-23T13:02:04+02:00
runtime: claude-code
Copilot AI lite review requested due to automatic review settings August 23, 2026 11:06
… operator skills

- skills_sync.sh --mirror uses rsync --delete against the target host's skills dir; vc-deprivatize (private, not in the shared store) is now excluded from both push and delete
- make uninstall already leaves it alone (it only removes store-enumerated skill names)

Authored-By: claude <agents@vetcoders.io>
session_id: 67428033-45fe-4310-abb5-09b998f5da06
time: 2026-08-23T13:07:42+02:00
runtime: claude-code

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Repository-wide hygiene and de-privatization pass ahead of public release, replacing private hostnames/user paths/person-identifiers with generic placeholders, and refactoring a few runtime/release surfaces so they no longer depend on baked-in mesh topology.

Changes:

  • Replace private mesh hostnames/paths/person-identifiers across docs, scripts, tests, and fixtures with generic host-* and /Users/tester examples.
  • Refactor vc-frame “mesh” theming and tui-agent Tailscale dispatch-target logic to be configured via env/mesh.conf rather than hard-coded hosts.
  • Add a GitHub-hosted macOS “Release DMG” workflow and extend payload-hygiene to support “ephemeral builder roots” + extra operator-bound literals.

Reviewed changes

Copilot reviewed 91 out of 92 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
vibecrafted-vm/wizard/strings.json Updates VM wizard strings to use generic host examples.
vibecrafted-vm/RUNBOOK.md Scrubs hostnames in VM runbook examples and narrative.
vibecrafted-vm/README.md Scrubs hostnames in VM README usage/examples.
vibecrafted-vm/entry.sh Updates comments/examples referencing mesh hosts.
vibecrafted-vm/compose.yaml Updates comments to generic host examples for userspace tailscale.
vibecrafted-server/control-core/tests/scaffold_artifacts.rs Scrubs hard-coded operator home paths from test fixtures.
vibecrafted-core/vibecrafted_core/skills/vc-review/SKILL.md Renames “kronika” references to “chronicle/doctrine” terminology.
vibecrafted-core/vibecrafted_core/skills/vc-research/references/synthesis-template.md Scrubs personal identifiers from template frontmatter.
vibecrafted-core/vibecrafted_core/skills/vc-operator/DASHBOARD.md Scrubs host references in operator dashboard docs.
vibecrafted-core/vibecrafted_core/skills/vc-audit/SKILL.md Renames “kronika” references to “chronicle/doctrine” terminology.
vibecrafted-core/vibecrafted_core/skills/vc-audit/DISPATCH.md Renames “kronika” references to “chronicle/doctrine” terminology.
vibecrafted-core/vibecrafted_core/skills/pl/vibecrafted_glossary_rules-PL.md Scrubs a glossary example string.
vibecrafted-core/vibecrafted_core/skills/pl/vc-research/references/synthesis-template.md Scrubs personal identifiers from PL template frontmatter.
vibecrafted-core/vibecrafted_core/skills/pl/vc-operator/DASHBOARD.md Scrubs host references in PL operator dashboard docs.
vibecrafted-core/vibecrafted_core/skills/pl/vc-audit/DISPATCH.md Renames “kronika” references to “chronicle/doctrine” terminology (PL).
vibecrafted-core/vibecrafted_core/skills/pl/LIVING_TREE_RULE.md Renames “kronika” references to “doctrine” (PL).
vibecrafted-core/vibecrafted_core/skills/LIVING_TREE_RULE.md Renames “kronika” references to “doctrine”.
vibecrafted-core/vibecrafted_core/server_supervisor.py Updates docstring wording to remove operator-path naming.
vibecrafted-core/vibecrafted_core/runtime/scripts/skills_sync.sh Updates usage examples to generic hostnames.
vibecrafted-core/vibecrafted_core/runtime/scripts/lib/util.sh Scrubs “Silver” workstation-specific wording from contract comment.
vibecrafted-core/vibecrafted_core/runtime/docs/fleet-health-probes.md Scrubs mesh hostnames/IPs in fleet-health docs/examples.
vibecrafted-core/vibecrafted_core/config/vc-frame/vc-quick-cmd.sh Scrubs operator identity/host example in vc-frame quick cmd spec comment.
vibecrafted-core/vibecrafted_core/config/vc-frame/themes/vetcoders-mesh.kdl Renames mesh theme identifiers to generic mesh-* accents; removes topology mapping.
vibecrafted-core/vibecrafted_core/config/vc-frame/config.kdl Updates theme docs/comments to match new mesh-* accent scheme + mapping config.
vibecrafted-core/vibecrafted_core/config/vc-frame/auto-theme.sh Refactors host→theme resolution to read from env/mesh.conf instead of hard-coded hosts.
vibecrafted-core/vibecrafted_core/aicx_sync.py Renames “kronika” references to “doctrine” in module documentation.
vibecrafted-core/vibecrafted_core/agent_dispatch.py Renames “kronika” references to “doctrine” in parity diagnostics/docs.
vibecrafted-core/tests/test_memex_client.py Scrubs hostnames and “kronika” sources in memex client tests.
vibecrafted-core/tests/test_live_dashboard.py Scrubs workspace names from dashboard tests.
vibecrafted-core/tests/test_control_plane.py Scrubs hostnames from test docstring narrative.
vibecrafted-core/tests/test_control_plane_lock_doctrine.py Scrubs “Kronika” mention from lock doctrine test header.
vibecrafted-app/tui-agent/tests/snapshots/mission_control_snapshots__vc_admin_status.snap Regenerates snapshot with generic hosts/IPs.
vibecrafted-app/tui-agent/tests/snapshots/mission_control_snapshots__mission_control_tab_tailscale_probe.snap Regenerates snapshot with generic hosts/IPs.
vibecrafted-app/tui-agent/tests/mission_control_snapshots.rs Updates snapshot test fixtures; adds env-based dispatch targets.
vibecrafted-app/tui-agent/src/ui.rs Formatting-only changes (layout/paragraph builder chains).
vibecrafted-app/tui-agent/src/observe.rs Formatting-only changes (array literals, iterator chains, line wrapping).
vibecrafted-app/tui-agent/src/mission_control.rs Removes hard-coded dispatch targets; reads from env or mesh.conf; adds “not configured” signal.
vibecrafted-app/tui-agent/src/lib.rs Minor allocation cleanup in error rendering.
vibecrafted-app/tui-agent/src/config.rs Help text formatting tweaks.
vibecrafted-app/tui-agent/src/bin/vc_start.rs Formatting-only changes + test assertion line wrapping.
vibecrafted-app/docs/plans/PLAN_23_AGENT_OPERATOR_DASHBOARD.md Scrubs hostnames in plan doc examples.
tools/scripts/github/repo-transfer.py Scrubs personal account name from usage examples.
tools/scripts/github/README.md Scrubs personal account name from examples.
tools/scripts/chat/README.md Scrubs host reference, but updates model example text (needs quoting fix per comments).
tools/scripts/chat/chat-cli.py Scrubs host reference, but updates model example text (needs quoting fix per comments).
tools/README.md Scrubs “dragon” naming in tooling docs.
tests/vc-frame-layouts-smoke.sh Updates vc-frame theme tests to mesh.conf/VIBECRAFTED_MESH_MAP-based mapping.
tests/tui/test_vc_frame_config.py Updates doctrine reference in test comment.
tests/tui/test_unified_app_contract.py Scrubs example bundle IDs and user paths from contract tests.
tests/tui/test_product_entry_policy.py Scrubs non-product session example names.
tests/tui/test_payload_hygiene.py Scrubs user path literals in payload hygiene tests.
tests/spawn_parity_test.sh Updates parity test diagnostics to cite “doctrine”.
tests/race_protection_test.sh Scrubs “kronika incident” wording.
tests/aicx_sync_smoke.sh Scrubs hostnames in AICX sync smoke script.
tests/agent_dispatch_test.py Updates parity test docs/assertions to cite “doctrine”.
templates/hooks/scripts/redact-output.mjs Generalizes token naming (“product-specific”).
templates/hooks/lib/secrets.sh Generalizes token naming (“product-specific”).
templates/hooks/config/template.husky.env Generalizes secret guard description.
scripts/vc-dashboard Refactors mesh host display to read from mesh.conf and color by theme accent.
scripts/lib/spawn.sh Updates parity wording and diagnostics to cite “doctrine”.
scripts/lib/payload-hygiene.sh Adds ephemeral-root filtering + extra-literals support for hosted builders.
scripts/lib/living-tree-commit.sh Updates kronika references to doctrine.
scripts/install-hammerspoon.sh Updates kronika references to doctrine.
scripts/build-vibecrafted-release.sh Makes keychain-search-list behavior configurable for hosted runners.
scripts/bootstrap-modal.sh Scrubs example runtime hostname.
plugins/iterm2/tests/test_iterm2_osc.py Scrubs host/profile strings in tests.
Makefile Updates doctrine references; one comment has redundant wording (needs fix per comments).
install.sh Scrubs signing identity output string.
docs/VC-FRAME.md Documents new mesh accent themes + mesh.conf/VIBECRAFTED_MESH_MAP mapping scheme.
docs/runtime/AGENT_OPS.md Scrubs personal identifiers in provenance text.
docs/RUNTIME_CONTAINER.md Scrubs “dragon” naming in runtime container docs.
docs/RELEASE_KICKOFF.md Documents hosted runner DMG workflow + operator publication boundary.
docs/public/_CONTRACT.md Updates “do not emit private infra identifiers” examples.
docs/MEMEX.md Renames kronika references to chronicle; scrubs hostnames in examples.
docs/ITERM2.md Renames kronika references to doctrine.
docs/HAMMERSPOON.md Renames kronika references to doctrine.
docs/design/agents-workshop/preview.html Scrubs personal name to “Operator” in UI mock content.
docs/design/agents-workshop/Layout-5.md Scrubs personal name to “Operator” in UI mock content.
docs/design/agents-workshop/Layout-4.md Scrubs personal name to “Operator” in UI mock content.
docs/design/agents-workshop/Layout-2.md Scrubs personal name to “Operator” in UI mock content.
docs/design/agents-workshop/Layout-1.md Scrubs personal name to “Operator” in UI mock content.
docs/design/agents-workshop/_render.py Scrubs transcript string to “Operator” in renderer fixture.
docs/AICX-SYNC.md Scrubs hostnames; renames kronika references to doctrine.
docker/runtime/tailscale.env.example Scrubs runtime hostname example.
docker/runtime/README.md Scrubs hostnames and runtime access examples.
docker/runtime/entrypoint-runtime.sh Scrubs runtime ssh example in logs/comments.
docker/runtime/Dockerfile Scrubs hostnames in container documentation/comments.
docker/runtime/docker-compose.yml Scrubs hostnames in compose docs and defaults.
config/hammerspoon/init.lua Renames kronika references to doctrine.
config/aicx-sync.toml.example Scrubs mesh hostname examples and updates docs.
.github/workflows/release-dmg.yml Adds hosted-runner DMG build/sign/notarize workflow (integrity-check note in comments).
Suppressed comments (2)

tools/scripts/chat/README.md:63

  • This alias example also uses an unquoted model name containing a space, so the alias will not work as written when pasted into a shell.
    tools/scripts/chat/chat-cli.py:285
  • This epilog example also uses a model name with a space ("libraxisai/a local-11b"); without quoting it will be split into multiple args when pasted into a shell.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +50 to +53
local name="$1"
name="${name%.local}"
name="${name%.lan}"
printf '%s' "$name" | tr '[:upper:]' '[:lower:]'
# Dragon with Svetliq
./chat-cli.py -b http://dragon:10240/v1 -m libraxisai/Svetliq-11b-v3.0-mlx
# host-a with a local
./chat-cli.py -b http://host-a:10240/v1 -m libraxisai/a local-11b-v3.0-mlx
Comment on lines +148 to +149
curl -fsSL -o DeveloperIDG2CA.cer https://www.apple.com/certificateauthority/DeveloperIDG2CA.cer
security import DeveloperIDG2CA.cer -k "$HOME/Library/Keychains/login.keychain-db" -T /usr/bin/codesign

# With custom model
./chat-cli.py --base-url http://dragon:10240/v1 --model libraxisai/Svetliq-11b
./chat-cli.py --base-url http://host-a:10240/v1 --model libraxisai/a local-11b
Comment thread Makefile
# downgrades, allow cross-family delegation, and honor the
# VIBECRAFTED_SPAWN_ALLOW_DOWNGRADE=1 operator override with an audit
# warning. Captures kronika 2026-04-10 doctrine.
# warning. Captures doctrine 2026-04-10 doctrine.
Copilot AI review requested due to automatic review settings August 23, 2026 11:11

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 91 out of 92 changed files in this pull request and generated 1 comment.

Suppressed comments (6)

vibecrafted-core/vibecrafted_core/config/vc-frame/auto-theme.sh:53

  • normalize_host strips .local / .lan before lowercasing, so values like HOST-A.LOCAL will not have the suffix removed (the .local match is case-sensitive) and can fail to match the configured mapping. Lowercase first, then strip suffixes so casing variants behave as documented.
    tools/scripts/chat/README.md:33
  • The example model id contains a space (libraxisai/a local-...), which makes the command invalid when copied (word-splitting) and suggests a non-existent model identifier. Use a placeholder like <model-id> (or a valid slug without spaces).
    tools/scripts/chat/README.md:65
  • The alias example also uses an unquoted model id containing a space, so it won't run when pasted into a shell. Replace it with a placeholder/valid slug to keep the snippet copy-pasteable.
    tools/scripts/chat/README.md:72
  • This transcript snippet repeats the same model id with a space (libraxisai/a local-11b). Even though it's “output”, readers often copy/paste it; use a placeholder (<model-id>) and a generic assistant name to avoid implying a real model name with invalid characters.
    tools/scripts/chat/chat-cli.py:23
  • The help/usage examples use a model id with a space (libraxisai/a local-11b), which makes the example command invalid when pasted. Replace with a placeholder (<model-id>) or a valid slug without spaces.
    tools/scripts/chat/chat-cli.py:286
  • The argparse epilog repeats the same invalid example model id with a space, which breaks copy/paste usage. Use a placeholder (<model-id>) or a valid slug without spaces.

|| { echo "::error::repository variable PAYLOAD_HYGIENE_EXTRA_LITERALS is empty; the hygiene gate would prove nothing about the operator"; exit 1; }
umask 077
mkdir -p "$KEYS/fonts"
printf '%s' "$VC_CERT_P12_B64" | base64 --decode > "$KEYS/Certificates.p12"
…s instead of refusing them

- run_mutation: a `$HOME` behind a symlink (`/tmp`→`/private/tmp`, `/home`→`/var/home`)
  raised RunMetaMutationError on every meta write; the dispatcher died right after
  spawn and the worker ran unsupervised, so runs never left `active/pid_alive`.
- _canonical_directory / _canonical_meta_path now resolve ancestors and return the
  canonical path; only the meta file itself is still refused when it is a symlink.
- run_mutation_locks keys reentrancy by the resolved root — an outer lock via
  `~/.vibecrafted` and an inner via `/private/...` used to flock the same file twice
  and self-deadlock the board sync.
- runtime_transcript mirrors the same rule so transcript manifests are written under
  symlinked homes.
- tests: symlinked-ancestor mutation and cross-spelling lock reentrancy.

Authored-By: claude <agents@vetcoders.io>

session_id: d825633a-af40-4a4e-b528-4aeb2e90d78b

time: 2026-08-23T15:38:02+02:00

runtime: headless
…t reads green, not red

- doctor: `server-supervisor` is `warn: optional` when the LaunchAgent was never
  installed (headless runs, observe/await and reports work without it); a present
  but unhealthy service still fails closed.
- doctor: `version - unknown` on a stamped install falls back to the published
  runtime's VERSION stamp (same truth the launcher resolves); update-available no
  longer compares "unknown" against the channel.
- foundation:vc-frame stops pointing at a vc-frame installer that does not exist;
  it now says the cockpit ships with the desktop app and headless works without it.
- install-foundations: missing vc-frame prints the headless next steps instead of
  "cockpit cannot exist without it".
- make install: the closing banner says `vc-start` only when vc-frame is on PATH;
  otherwise it prints PATH export + doctor + one dispatch + await.
- README: from-source install = complete headless runtime; cockpit arrives with the
  DMG; first-run commands spelled out.

Authored-By: claude <agents@vetcoders.io>

session_id: d825633a-af40-4a4e-b528-4aeb2e90d78b

time: 2026-08-23T15:43:12+02:00

runtime: headless
…s real runs; help explains its words

- init: when vc-frame is absent (or `--runtime plain`), the agent starts in the
  caller's terminal with the /vc-init prompt instead of "run vc-start first" — which
  needed the same missing binary. Non-TTY callers get the headless alternative.
- status: delegates to the control-plane board (one full sync, then today's runs
  newest first with state, report path and the await command); the legacy
  artifacts scan that printed "No activity yet" after two finished runs is the
  fallback only when core is unavailable. New module run_board.py.
- settlements: listed in help but "not in the command deck" on an installed
  runtime — routed to core.
- help: a three-line Words block (run / stage / workspace) in the root banner;
  init --help documents --runtime plain; status --help says what a run is.
- scripts/vibecrafted is the byte mirror of the deck (deck owns).
- tests updated to the new contract (init without vc-frame, empty status).

Authored-By: claude <agents@vetcoders.io>

session_id: d825633a-af40-4a4e-b528-4aeb2e90d78b

time: 2026-08-23T15:43:45+02:00

runtime: headless
…tatus board

- test_operator_mode: missing vc-frame now asserts the plain-terminal fallback
  message and the headless alternative, never "run vc-start first".
- test_vibecrafted_launcher: empty status asserts the dispatch + await hint
  instead of "No activity yet — run init".

Authored-By: claude <agents@vetcoders.io>

session_id: d825633a-af40-4a4e-b528-4aeb2e90d78b

time: 2026-08-23T15:44:14+02:00

runtime: headless
…names the cockpit as optional

- core.sh: sourcing the first readable runtime helper returned out of a
  `while read < <(enumerator)` loop, closing the pipe under the producer — every
  `vibecrafted init` printed three "printf: write error: Broken pipe" lines.
  Candidates are drained first (portable loop, /bin/bash 3.2 has no mapfile).
- doctor vc-frame:path: "run make install" right after a successful make install
  was a loop; it now says the cockpit is optional and where it comes from.
- run_board: report_validated renders as ok, like completed.

Authored-By: claude <agents@vetcoders.io>

session_id: d825633a-af40-4a4e-b528-4aeb2e90d78b

time: 2026-08-23T15:50:29+02:00

runtime: headless
Copilot AI review requested due to automatic review settings August 23, 2026 14:00

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 108 out of 109 changed files in this pull request and generated no new comments.

Suppressed comments (5)

.github/workflows/release-dmg.yml:132

  • base64 --decode is GNU-specific and is likely to fail on the macOS runner (BSD base64 typically uses -D). Use a portable decode fallback so the key materialization step works on hosted macOS images.
          printf '%s' "$VC_CERT_P12_B64" | base64 --decode > "$KEYS/Certificates.p12"

tools/scripts/chat/README.md:33

  • This example uses a model name containing a space, but it is not quoted. Copy/pasting will pass libraxisai/a as the model and treat the remainder as extra CLI args.
    tools/scripts/chat/README.md:63
  • This alias uses an unquoted model string containing a space, so the shell will split it into multiple arguments and --model will receive the wrong value.
    tools/scripts/chat/chat-cli.py:24
  • The usage example includes a model name containing a space but it is not quoted; copy/pasting will pass the wrong --model value.
    tools/scripts/chat/chat-cli.py:286
  • The argparse epilog example includes an unquoted model name containing a space, which will be split by the shell when copy/pasted.

…etitors

- .loctree/canary/JOURNAL.md: Phase I inventory from loct twins/where-symbol/who-imports —
  nine definitions of the runtime roots in four languages, two control-plane shims with a
  three-candidate path chain, two shell lib trees, small Python twins, and the two
  absences (agent orientation, integrator). One throne decided per power.
- .gitignore: .loctree/* stays local, .loctree/canary/ is versioned truth (nested
  .loctree dirs in sub-crates remain ignored).

Authored-By: claude <agents@vetcoders.io>

session_id: 48924e5f-ecb3-4b18-9a67-3647ecc09312

time: 2026-08-23T16:26:13+02:00

runtime: interactive
… redefining the root

- dispatch/worktrees.py defined its own vibecrafted_home with os.environ.get(..., "~/.vibecrafted"):
  an empty VIBECRAFTED_HOME resolved to the cwd while runtime_paths resolved to ~/.vibecrafted.
  Deleted; the module imports the throne.
- dispatch/doctor.py imported the competitor; it now imports runtime_paths.vibecrafted_home.
- vibecrafted-core tests/dispatch: 123 passed.

Authored-By: claude <agents@vetcoders.io>

session_id: 48924e5f-ecb3-4b18-9a67-3647ecc09312

time: 2026-08-23T16:26:22+02:00

runtime: interactive
…e roots

- scripts/lib/runtime-roots.sh is the only shell reading of VIBECRAFTED_HOME /
  RUNTIME_HOME / TOOLS_HOME / LAUNCHER_BIN; install-foundations.sh and
  install-runtime.sh source it instead of carrying their own copies.
- install-foundations.sh treated VIBECRAFTED_ROOT/.vibecrafted as a home. VIBECRAFTED_ROOT
  is the release generation root exported by every launcher — on a DMG machine that
  would have put the control plane inside the immutable generation. Gone.
- install.sh is the curl|bash bootstrap and keeps a verbatim copy between markers;
  tests/tui/test_runtime_roots_parity.py pins the copy byte-for-byte and proves the
  library and the bootstrap resolve identical roots for four env shapes, and that the
  contract fails closed on drift. Its --tools-dir default comes from the same function.
- Drift output follows docs/CLI_PRODUCT_SPEC.md: one '✗ … drift' line each plus one
  '→ fix' line; the five-line essay is gone.

Authored-By: claude <agents@vetcoders.io>

session_id: 48924e5f-ecb3-4b18-9a67-3647ecc09312

time: 2026-08-23T16:27:41+02:00

runtime: interactive
…tion

- scripts/migrate_agents_workspace.sh moved March-era .ai-agents/ folders into the
  control plane and carried its own VIBECRAFTED_ROOT meaning (a workspace to scan, not
  the release generation). Nobody outside this org has .ai-agents/; the script was the
  last competitor for the root grammar. Removed with its Makefile targets and test.
- test_install_runtime: drift assertion follows the one-line '✗ … drift' wording.

Authored-By: claude <agents@vetcoders.io>

session_id: 48924e5f-ecb3-4b18-9a67-3647ecc09312

time: 2026-08-23T16:27:51+02:00

runtime: interactive
…not a script found by path

- deck _control_plane_script walked three candidate roots (repo source, installed tools,
  script root) for scripts/control_plane_state.py and ran whichever existed first — which
  copy of the truth synced depended on the machine. Gone; _sync_control_plane_best_effort
  runs `-m vibecrafted_core.control_plane sync` through _core_module_dir and
  _vibecrafted_python like every other core verb.
- runtime/scripts/lib/meta.sh: spawn_control_plane_script (same chain, VIBECRAFTED_ROOT
  first) removed; spawn_sync_control_plane uses spawn_python_module.
- scripts/vibecrafted mirror re-synced byte for byte.

Authored-By: claude <agents@vetcoders.io>

session_id: 48924e5f-ecb3-4b18-9a67-3647ecc09312

time: 2026-08-23T16:41:33+02:00

runtime: interactive
…e module object per truth

- scripts/control_plane_state.py loaded vibecrafted_core.control_plane and then rebound
  its vibecrafted_home to a second module object (_sync_overrides) on every call;
  scripts/runtime_paths.py executed the canonical file under a second module name;
  scripts/control_plane_launch.py forwarded workflow. Three competitors of three thrones.
  (The file deletions themselves rode along in a2469bb.)
- installer_gui.py imports vibecrafted_core directly (checkout package dir on sys.path).
- vetcoders_install.py must run on the host python3 before the product interpreter
  exists and vibecrafted_core/__init__ needs 3.11+, so it executes runtime_paths.py
  from its file — still the one definition, just not through the package import.
- distribution manifest (install.sh, distribution_manifest.py) no longer lists the shim.
- pyproject: per-file E402 ignores for the shims removed.

Authored-By: claude <agents@vetcoders.io>

session_id: 48924e5f-ecb3-4b18-9a67-3647ecc09312

time: 2026-08-23T16:47:20+02:00

runtime: interactive
… runtime env scrubbed

- conftest: VIBECRAFTED_HOME/RUNTIME_HOME/TOOLS_HOME/RUNTIME_BIN/ROOT/RUNTIME_ROOT/PYTHON/SOURCE
  are deleted for every tui test. With a live launcher's env, a test building its own
  HOME still resolved the operator's runtime and skipped the step it meant to prove.
- test_control_plane_state imports the throne and sets VIBECRAFTED_HOME instead of
  monkeypatching the shim's copy; launcher tests expect
  '-m vibecrafted_core.control_plane sync', seed the fake tools root with the one file
  the deck probes for core, and isolate PATH so a venv console script cannot own the
  -m call; the path-chain test in test_meta_lifecycle is gone with the chain; manifest
  tests drop scripts/runtime_paths.py; the tarfile extractall in the manifest test is
  documented as bounded (members asserted, filter=data).
- docs: four mentions point at vibecrafted_core.control_plane / runtime_paths.

Authored-By: claude <agents@vetcoders.io>

session_id: 48924e5f-ecb3-4b18-9a67-3647ecc09312

time: 2026-08-23T16:52:38+02:00

runtime: interactive
…ome vibecrafted_core.clock

- utc_now ×3 (compact_hooks, cron, loop), _now_iso ×7 (capabilities, continuity/capabilities,
  lifecycle_control, perception, settlement, spawn, trust) and control_plane._now each
  read the wall clock on their own, in three formats: RFC 3339 +00:00, Z-suffixed, and —
  in lifecycle_control — LOCAL time with a numeric offset. Two machines comparing
  'which receipt is newer' could disagree by a timezone.
- vibecrafted_core/clock.py is the only reader of the wall clock for product state:
  utc_now (aware datetime), utc_now_iso (+00:00), utc_now_z (Z), utc_now_compact
  (file names). Every module above imports it; lifecycle_control receipts are UTC now.
- control_plane._now stays as the injectable seam tests patch; it delegates to clock.
- cron.default_state_file duplicated loop's (different signature) — cron imports loop's.
- wrappers.deck_path was a forwarder to package_resources.deck_path — gone, the name
  is imported.
- vibecrafted-core: 249 passed across cron/loop/compact_hooks/capabilities/perception/
  settlement/trust/lifecycle_control/control_plane; wrappers+cron+loop_ship 27 passed.

Authored-By: claude <agents@vetcoders.io>

session_id: 48924e5f-ecb3-4b18-9a67-3647ecc09312

time: 2026-08-23T16:53:20+02:00

runtime: interactive
…eline, what stays by name

- Cut 1 roots, Cut 2 control-plane entry, Cut 3 clock: competitors listed with LOC and
  the wrong thing each one did.
- loct prism over roots/sync/install/timestamps after the cuts: 13/15, union 60,
  shared 16, Jaccard 0.463 — the number the next cuts must lower.
- Six things not cut tonight, each with the proof it needs first.

Authored-By: claude <agents@vetcoders.io>

session_id: 48924e5f-ecb3-4b18-9a67-3647ecc09312

time: 2026-08-23T17:00:14+02:00

runtime: interactive
… — one name, one meaning

- wrappers.repo_root returned Path.cwd(); loop.repo_root returns the git toplevel. Two
  answers under one name. The wrapper's is the operator's invocation directory and is
  now called that; loop keeps repo_root.
- test_wrappers patches the new name. loct twins: 340 → 336 export groups after tonight.

Authored-By: claude <agents@vetcoders.io>

session_id: 48924e5f-ecb3-4b18-9a67-3647ecc09312

time: 2026-08-23T17:04:35+02:00

runtime: interactive
Copilot AI review requested due to automatic review settings August 23, 2026 15:06

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 147 out of 149 changed files in this pull request and generated 1 comment.

Suppressed comments (3)

tools/scripts/chat/README.md:32

  • This example model name contains a space (libraxisai/a local-…), which makes the command invalid as-is and reads like an accidental redaction artifact. Use a placeholder like <org>/<model-name> (or a real model slug without spaces).
    tools/scripts/chat/README.md:67
  • The alias + example output use libraxisai/a local-11b (space in model slug), which is not a valid --model value and will break copy/paste. Consider using a placeholder model slug and keep the alias name consistent with the command shown.
    tools/scripts/chat/chat-cli.py:23
  • This usage example uses a --model value with a space (libraxisai/a local-11b), which is not a valid model identifier for OpenAI-compatible APIs and will break copy/paste. Replace it with a placeholder (or a real slug without spaces).

Comment on lines +68 to +72
Connected to: http://host-a:10240/v1
Model: libraxisai/a local-11b

You: Kim jestes?
Assistant: Jestem Svetliq - polski model AI specjalizujacy sie w medycynie weterynaryjnej...
Assistant: Jestem a local - polski model AI specjalizujacy sie w medycynie weterynaryjnej...
… the chronicle hygiene

- de3a017 moved the canonical vc-audit and vc-review prose off the private chronicle
  ('kronika notes' → 'chronicle notes') but left the PL mirrors; the freshness leg of
  test_localization_contract has been red on this branch since.
- The mirrors now say 'dziennik projektu' in the same two sentences — same hygiene,
  same meaning — and are newer than their canonical files again.

Authored-By: claude <agents@vetcoders.io>

session_id: 48924e5f-ecb3-4b18-9a67-3647ecc09312

time: 2026-08-23T17:23:48+02:00

runtime: interactive
- Gate results after 0b508a5 appended (test-core 1668, test 1294 + the PL-mirror fix,
  check green). The repo_root line in 'not cut' is closed by 955e24b.

Authored-By: claude <agents@vetcoders.io>

session_id: 48924e5f-ecb3-4b18-9a67-3647ecc09312

time: 2026-08-23T17:24:31+02:00

runtime: interactive
Copilot AI review requested due to automatic review settings August 23, 2026 15:28

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 149 out of 151 changed files in this pull request and generated no new comments.

Suppressed comments (4)

tools/scripts/chat/README.md:32

  • The example model name contains a space, so this command will be parsed as two separate arguments (breaking --model/-m). Quote the model value (or use a space-free model name).
    tools/scripts/chat/README.md:63
  • This alias uses single quotes around the full command, but the -m value contains a space, so it will still split into multiple arguments. Quote the model inside the alias.
    tools/scripts/chat/chat-cli.py:23
  • The docstring example passes a model name containing a space without quoting, which will be split into two argv tokens. Quote the model value so the example is copy/pasteable.
    tools/scripts/chat/chat-cli.py:285
  • The argparse epilog example uses an unquoted model name with a space, which will be split into two args. Quote the model value so the help output stays correct.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants