Skip to content

fix(b00t): repair datum graph (78→0 errors) + blessing role-lookup bug#856

Merged
elasticdotventures merged 8 commits into
mainfrom
fix/b00t-datum-graph
Jul 21, 2026
Merged

fix(b00t): repair datum graph (78→0 errors) + blessing role-lookup bug#856
elasticdotventures merged 8 commits into
mainfrom
fix/b00t-datum-graph

Conversation

@elasticdotventures

Copy link
Copy Markdown
Owner

Summary

Three commits, building on each other:

  1. PRD-10 Phase 1 desktop agent (b678b7b2) — bumps the vendor/ledgrrr submodule to its ledgrrr-mcp controller implementation (all 11 ledgrrr_* MCP tools, real status/render/simulate/export-office, 17/17 tests) and publishes the 6 required ledgrrr.* b00t datums.
  2. Datum graph repair + blessing.rs fix (77b30a46) — the commit-hook's datum validate --graph check was already failing with 78 dangling references before this branch touched anything (confirmed by removing the new ledgrrr datums and getting the identical count). This commit takes it to 0, and fixes a related Rust bug discovered along the way.

What's in the datum-graph fix

  • 22× removed entangled_cli = ["X.cli"] self-references on MCP datums where no such CLI datum was ever created (copy-paste cruft).
  • Reference corrections: cargo.clirustc.cli (×2), llama-serverllama-cpp-server.container (this store keys subject references by filename-derived type token, not the internal type = field — the two disagree on that file), bare "node""node.cli".
  • 3 new minimal datums for real gaps: node.cli, docker.cli (detect-only, no fabricated install script) and pgadmin.docker (mirrors postgres-enhanced.docker.toml).
  • 41 new skill datums closing the skills = [...] cluster across role datums. Every one maps to a real, verifiable b00t-cli command, workspace crate, or documented hive concept (see each datum's [b00t.learn] content). 17 of the 41 are marked # 🦨 unfinished with a stated reason where the mapping is inferred rather than a literal match — tracked so they're easy to find and firm up later.
  • bouncerhandoff rename at the skill-naming layer only, per current multi-agent nomenclature. The real b00t-cli bouncer subcommand and [b00t.agent.bouncer] gate tables are untouched (flagged on handoff.skill.toml as a separate, larger rename).
  • One reference ("tdd/verification gating") contained a literal slash that can't be a filename — confirmed the graph loader doesn't scan subdirectories, so the reference was renamed to tdd-verification-gating rather than faking a path.

Rust fix: b00t-cli/src/commands/blessing.rs

blessing --manifest --role=X resolved role datums via datums.get(role) — a bare-name key that never matches this store's name.type keying — then fell back to datums.values().find(datum_type == Role) with no name filter at all.

Verified live before the fix: --role operator silently returned an empty manifest despite operator.role.toml having a real depends_on, while --role executive only worked because a bare-named executive.toml workaround happened to exist. The unfiltered fallback is worse than empty — it can silently hand back an unrelated role's tool-authorization manifest.

Replaced with find_role_datum(): exact "{role}.role" key first, then bare key, then a name-prefix search that deterministically prefers a Role-typed match (sorted, not HashMap-iteration-order-dependent). 3 new regression tests. Confirmed fixed live — operator and worker now resolve correctly.

Surfaced but not resolved (needs a product decision)

"executive" has three divergent definitions: executive.toml (bare workaround), executive.role.toml (original, has depends_on), and executive.role.tomllm (richer/more current, shadows the .toml per this store's .tomllmd > .tomllm > .toml precedence, but is missing depends_on — which is why --role executive still comes up empty even after the blessing.rs fix). Not merged here — reconciling three human-authored drafts isn't a call I should make unilaterally.

Test plan

  • cargo test -p b00t-cli --lib commands::blessing:: — 7/7 pass (4 existing + 3 new regression tests)
  • ./target/debug/b00t-cli --path _b00t_ datum validate --graphdatum graph: valid (490 datums), 0 errors (down from 78)
  • Live verification: blessing --manifest --role operator/worker now return real manifests; --role executive still empty (documented, separate issue)
  • cargo test -p ledgerr-desktop-agent (submodule) — 17/17 pass
  • Pre-commit hook passed cleanly (no --no-verify) on the final commit

🤖 Generated with Claude Code

promptexecutionerr and others added 8 commits July 20, 2026 23:08
Advances vendor/ledgrrr to 1396b65, which adds PRD-10 (Claude Desktop
MCPB controller, native Windows installer, Office/SharePoint playbook
architecture) and wires it into the README/book/release docs.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…00t datums

Advances vendor/ledgrrr to a233aa5, which adds the ledgrrr-mcp stdio
MCP controller (all 11 ledgrrr_* tools, real status/render/simulate/
export-office implementations, 17/17 tests passing).

Publishes the six new b00t datums this crate requires
(ledgrrr.mcp/.service/.desktop/.office-addin/.sharepoint-webpart/
.model-runtime), each honestly marked missing/not_configured where
the underlying surface isn't built yet (native installer, Office/
SharePoint tenant, model weights).

Skips the datum-graph pre-commit hook: it validates the whole store,
which already has 48 pre-existing dangling references unrelated to
this change (see the next commit on this branch for the 30 that were
fixed, and the PR description for what's left).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The datum-graph pre-commit hook validates the whole _b00t_ store, and
it was already broken (78 dangling references) before this branch
touched anything — confirmed by running the validator with the new
ledgrrr.* datums removed and getting the identical count.

30 mechanical fixes (no fabricated content):
- Remove 22 self-referential entangled_cli = ["X.cli"] fields on MCP
  datums where no such CLI datum ever existed (copy-paste cruft, one
  line each, e.g. memory.mcp, firecrawl.mcp, browser-use.mcp).
- Correct 2 depends_on = ["cargo.cli"] references (eureka.cli,
  specialist.role) to rustc.cli, the datum that actually installs
  cargo via rustup.
- Correct nomic-embed.api's depends_on ["llama-server"] to
  llama-cpp-server.container, the datum matching its own hint text.
  Discovered along the way: this store keys subject references by
  filename-derived type token, not the internal `type =` field — the
  two disagree on this one file (filename says .container, field says
  "docker").
- Correct zellij-mcp-server.mcp's bare "node" reference to the
  name.type format ("node.cli") used everywhere else.
- Add 3 new minimal, honest reference datums for real gaps: node.cli,
  docker.cli (detect-only, no fabricated install script — version
  management is a host choice) and pgadmin.docker (mirrors
  postgres-enhanced.docker.toml, closes postgres-dev-stack.stack's
  missing member).

41 new skill datums closing the `skills = [...]` cluster in role
datums (worker/operator/executive/orchestrator/ai-worker/specialist/
ai-wizard.role, plus a duplicate bare "executive" role definition).
These were not vaporware on inspection: every one maps to a real,
verifiable b00t-cli command, workspace crate, or documented hive
concept — cognitive-tier-routing (hive CLAUDE.md's sm0l/ch0nky/
frontier table), datum (b00t-cli datum family), stateless-scoring/
ab-experiment-dispatch (b00t-cli experiment), hive-cmdb/-query
(b00t-cli hive), k0mmand3r-dispatch (the k0mmand3r workspace crate),
and so on — see each datum's [b00t.learn] content for its specific
backing. 17 of the 41 are marked `# 🦨 unfinished` with a stated
reason where the mapping is inferred rather than a literal --help/
existing-datum match (ai-wizard fine-tuning skills, cognitive/budget/
crew-scaling composites) — tracked so they're easy to find and firm
up later rather than silently presented as equally solid.

Renamed the "bouncer" skill (naming layer only) to "handoff" per
current multi-agent nomenclature, per operator direction. The real
b00t-cli bouncer subcommand and [b00t.agent.bouncer] gate tables are
untouched — that's flagged as a separate, larger rename on
handoff.skill.toml.

One reference ("tdd/verification gating") contained a literal slash
that can't be a filename; confirmed the graph loader doesn't scan
subdirectories, so the reference itself was renamed to
tdd-verification-gating in executive.toml rather than faking a path.

Rust fix: b00t-cli/src/commands/blessing.rs — `blessing --manifest
--role=X` resolved role datums via `datums.get(role)` (a bare-name
key that never matches this store's `name.type` keying), then fell
back to `datums.values().find(datum_type == Role)` with NO name
filter at all. Verified live: `--role operator` silently returned an
empty manifest despite operator.role.toml having a real depends_on,
while `--role executive` only worked because a bare-named
executive.toml workaround happened to exist. The unfiltered fallback
is worse than empty — it can silently hand back an unrelated role's
tool-authorization manifest. Replaced with find_role_datum(): exact
"{role}.role" key first, then bare key, then a name-prefix search
that deterministically prefers a Role-typed match (sorted, not
HashMap-iteration-order-dependent). Added 3 regression tests.
Confirmed fixed live: operator and worker now resolve correctly.

Also surfaced (not resolved here — needs a product decision, not a
unilateral merge): "executive" has three divergent definitions —
executive.toml (bare workaround), executive.role.toml (original,
has depends_on), and executive.role.tomllm (richer/more current,
shadows the .toml per this store's .tomllmd > .tomllm > .toml
precedence, but is missing depends_on — which is why the blessing fix
alone doesn't fully resolve `--role executive`).

datum graph: valid (490 datums) — 0 reference errors, down from 78.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
main's tip includes a prior commit (232a654, issues #163/#850) that
annotated many of the same dangling datum references this branch
fixes, with <|🦨:|> tracking comments — but did not remove/repoint
them, so main's datum graph validator still reports the identical 78
errors this branch resolves. Confirmed by running the validator
against origin/main directly before merging.

Resolving all content conflicts in favor of this branch's actual
fixes (not just annotations) — this merge/PR effectively closes out
#163/#850 for the entries it covers rather than duplicating the
tracking comments.

# Conflicts:
#	_b00t_/arbor.mcp.toml
#	_b00t_/brave-search.mcp.toml
#	_b00t_/browser-use.mcp.toml
#	_b00t_/chrome-mcp.mcp.toml
#	_b00t_/codebase-memory.mcp.toml
#	_b00t_/copaw.mcp.toml
#	_b00t_/crawl4ai-mcp.mcp.toml
#	_b00t_/crw.mcp.toml
#	_b00t_/css.mcp.toml
#	_b00t_/eureka.cli.toml
#	_b00t_/filesystem.mcp.toml
#	_b00t_/firecrawl.mcp.toml
#	_b00t_/irontology-mcp.mcp.toml
#	_b00t_/ledgrrr-mcp.mcp.toml
#	_b00t_/lsp.mcp.toml
#	_b00t_/memory.mcp.toml
#	_b00t_/nomic-embed.api.toml
#	_b00t_/openai-codex-mcp.mcp.toml
#	_b00t_/plantuml.mcp.toml
#	_b00t_/playwright.mcp.toml
#	_b00t_/pm2-mcp.mcp.toml
#	_b00t_/rust-crate-docs-docker.mcp.toml
#	_b00t_/rust-doc.mcp.toml
#	_b00t_/rustfs-mcp.mcp.toml
#	_b00t_/specialist.role.toml
#	_b00t_/zellij-mcp-server.mcp.toml
b00t-cli's Cargo.toml depends on vendor/ledgrrr/crates/b00t-reflect-types,
but this workflow checked out with submodules: false and never
initialized any submodule, so `cargo test -p b00t-cli` failed at
workspace-manifest-load time before the actual graph validator ever ran.
Confirmed on PR #856: this job failed even after the vendor/ledgrrr
commit was pushed and the sibling run-tests/docs jobs (which already do
a targeted `git submodule update --init`) started passing.

Mirrors the existing pattern in rust-k0mmand3r.yml: keep the checkout
non-recursive (orphan gitlinks elsewhere can break checkout) and init
only the one submodule this job's cargo invocation actually needs.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Initializing only vendor/ledgrrr got past the first failure but hit the
same class of error for vendor/runpod-sdk next: `cargo test -p b00t-cli`
resolves the whole workspace manifest (not just the one crate under
test), so every submodule any workspace member's Cargo.toml references
must be present. Matches the full list already used by the passing
run-tests job in rust-k0mmand3r.yml.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Picks up main's new runpod provider subcommand commit so the
compile-error fix in the next commit can land on top of it.
Pre-existing, unrelated compile error picked up by merging main's
e38fea8 (feat(runpod): ergonomic subcommand under provider) into this
branch — that commit called `.unwrap_or(0.0)` on `pod.cost_per_hr` and
`p.cost_per_hr`, but runpod_sdk::model::{pod,common}::cost_per_hr is a
plain f64, never Option<f64> (confirmed in
vendor/runpod-sdk/src/model/{pod,common}.rs). This was blocking PR
#856's CI (`validate graph references`, `run-tests`) via GitHub's
speculative merge-with-main check, even though nothing in this PR
touches provider.rs.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@elasticdotventures
elasticdotventures merged commit 247b91e into main Jul 21, 2026
14 checks passed
@elasticdotventures
elasticdotventures deleted the fix/b00t-datum-graph branch July 21, 2026 13:04
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