Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Using caboodle

Caboodle ships a resumable interview and the plan/apply/verify engine with adapters for Quipu, Camayoc, Bobbin, Yupana, and Desire Path.

cargo install --git https://github.com/scbrown/caboodle --locked

# Guided: use, crew themes, and anticipated graph questions are checkpointed.
caboodle init --guided

# Read-only preflight: every blocker on this host, before anything installs.
caboodle doctor

# Non-interactive: read the same schema from caboodle-intent.toml.
caboodle plan --profile retrieval --intent caboodle-intent.toml

# Converge the reviewed plan, then prove both tools with isolated round trips.
caboodle apply
caboodle verify
caboodle verify-questions

# Or run both phases together after review.
caboodle install

apply installs a missing released tool and reads its version back — a successful installer exit alone is never accepted. verify uses temporary isolated stores: it proves a marker absent, writes it, and requires the reader path to return it. Progress is written atomically to .caboodle/state.json, so rerunning converges.

If input ends partway through an interview, Caboodle stops without a plan and keeps accepted answers in .caboodle/interview.toml. Run caboodle init --guided again to resume at the next unanswered question. Invalid answers are rejected and never produce a plan.

Use --skip-install when package installation belongs to another system; the version and functional checks still run.

code-intel adds checksum-pinned Yupana and proves a caller edge in a temporary repository with isolated HOME/state. everything additionally installs Desire Path by building the revision its v0.3.2 tag names, reads it back from dp version, and proves ingest/list against a temporary database. These checks never use the user’s normal evidence stores.

caboodle-intent.toml names the intended use, zero or more themed crew members, and at least one anticipated ontology question. A question is a contract, not a wish: it includes an answer shape, fixture/seed intent, executable SELECT or ASK SPARQL, and an expected result marker. The reviewed install plan embeds the contract, and verify-questions executes it through Quipu’s reader path. This makes “what should the graph answer?” an install acceptance test.

A first install usually has no ontology to ask about yet. Pressing enter at the question-count prompt selects the built-in self-test question instead. It seeds one caboodle-verify-roundtrip node into a scratch store and queries for it, so it passes on a fresh machine. verify-questions always runs it against that scratch store, even when --db points at your own. Replace it with real questions later by editing [intent] in the plan.

intended_use = "answer dependency and ownership questions about my services"

[[crew_members]]
name = "Harbor"
theme = "patient navigator"
domain = "service operations"
role = "trace dependencies and explain incidents"

[[anticipated_questions]]
question = "which services depend on the message broker?"
answer_shape = "a list of service entities"
seed_intent = "two fixture services and one depends_on edge to the fixture broker"
sparql = "SELECT ?service WHERE { ?service <https://example.org/depends_on> <https://example.org/broker> }"
expected = "fixture-service"

The prose fields steer ontology and seed construction; the SPARQL and expected marker decide whether that construction is retrievable through the path a reader will actually use. Never put credentials in this file or the generated plan.

Review observability before deployment

For every selected tool, CABOODLE emits a versioned contract. Quipu and Bobbin currently declare /metrics and required metric families; tools without an exporter remain explicit contracts with an unavailable reason rather than being silently omitted. Supply generic Prometheus targets without URL schemes:

[targets]
quipu = "quipu.example:8080"
bobbin = "bobbin.example:3030"

Then render and inspect the artifacts. Rendering never claims the targets were scraped or deploys anything:

caboodle render-observability --targets caboodle-observability.toml
caboodle validate-observability
less caboodle-observability/prometheus.yml
less caboodle-observability/alerts.yml
less caboodle-observability/dashboard.json
less caboodle-observability/contracts.json

Validation fails on a missing or malformed selected target, a target for a tool whose pinned contract has no exporter, a missing scrape job, or an alert or dashboard metric absent from the versioned contracts.