diff --git a/README.md b/README.md index 0ed2555..0f5a4d8 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,7 @@ tambo quickstart This saves a reviewed retrieval plan, installs Quipu, Camayoc and Bobbin, and checks each tool. Success is exit 0 and `quipu: verified`, `camayoc: verified`, `bobbin: verified`. Keep `caboodle-plan.toml` and `.caboodle/` to resume. +See the [compatibility contracts](docs/book/src/compatibility.md) for retained aliases and state paths. Recheck the same install: ```bash diff --git a/assets/footer.svg b/assets/footer.svg index 99886e7..222244b 100644 --- a/assets/footer.svg +++ b/assets/footer.svg @@ -1,4 +1,4 @@ - + diff --git a/assets/header.svg b/assets/header.svg index fa42a16..95b5a68 100644 --- a/assets/header.svg +++ b/assets/header.svg @@ -1,4 +1,4 @@ - + @@ -33,29 +33,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + diff --git a/assets/logo.svg b/assets/logo.svg index e386ca8..540823b 100644 --- a/assets/logo.svg +++ b/assets/logo.svg @@ -1,82 +1,17 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/docs/book/book.toml b/docs/book/book.toml index f947f0f..0c31f3d 100644 --- a/docs/book/book.toml +++ b/docs/book/book.toml @@ -8,7 +8,7 @@ src = "src" [output.html] default-theme = "coal" preferred-dark-theme = "coal" -# Keep working GitHub alias links until the repository rename is verified. +# Canonical source links for the published Tambo book. git-repository-url = "https://github.com/intigraph/tambo" edit-url-template = "https://github.com/intigraph/tambo/edit/main/docs/book/{path}" additional-css = ["custom/css/custom.css"] diff --git a/docs/book/custom/css/custom.css b/docs/book/custom/css/custom.css index ddd8777..1605758 100644 --- a/docs/book/custom/css/custom.css +++ b/docs/book/custom/css/custom.css @@ -1,7 +1,7 @@ /* Intel One Mono font for code */ @import url('https://fonts.googleapis.com/css2?family=Intel+One+Mono:wght@400;700&display=swap'); -/* Caboodle Documentation — Dracula Theme Override +/* Tambo Documentation — Dracula Theme Override Applied to the Coal theme (default) */ /* Dracula palette: diff --git a/docs/book/src/SUMMARY.md b/docs/book/src/SUMMARY.md index 4592478..ecd5c68 100644 --- a/docs/book/src/SUMMARY.md +++ b/docs/book/src/SUMMARY.md @@ -5,8 +5,9 @@ - [Getting started](getting-started.md) - [Installing and removing](installing.md) - [Installation and agent reference](installation-reference.md) + - [Compatibility](compatibility.md) - [Using it with agents](agents.md) -- [Using Caboodle](using.md) +- [Using Tambo](using.md) - [Reference](reference.md) - [Configuration](configuration.md) - [How it works](architecture.md) diff --git a/docs/book/src/agents.md b/docs/book/src/agents.md index 233a48d..edc4085 100644 --- a/docs/book/src/agents.md +++ b/docs/book/src/agents.md @@ -1,6 +1,6 @@ # Using it with agents -Caboodle is a CLI that an agent can run with the +Tambo is a CLI that an agent can run with the [Tambo skill](https://github.com/intigraph/tambo/blob/main/skills/tambo/SKILL.md). It does not expose its own MCP server. MCP (Model Context Protocol) lets an agent call servers supplied by the installed tools. @@ -28,7 +28,7 @@ in their client-specific server configuration. ## Managed crew -For a configured Shantytown rig, `caboodle project-settings` delegates +For a configured Shantytown rig, `tambo project-settings` delegates registration to Shantytown and its Quipu tooling manifest. It does not launch or restart agents. See [registering MCP servers](installing.md#registering-mcp-servers) for prerequisites, selection flags, remote proxies and the policy-only mode. @@ -160,7 +160,7 @@ existing key file. or a symlink to one, is still present on the agent's machine, older clients may keep authenticating through it. They then never report the missing or rejected identity. Remove such fallbacks once every client uses its own key, and confirm - with `caboodle doctor`, which names the credential source in use. + with `tambo doctor`, which names the credential source in use. ### Worked example: enrolling an agent on a second host diff --git a/docs/book/src/architecture.md b/docs/book/src/architecture.md index 5c14941..42a0e45 100644 --- a/docs/book/src/architecture.md +++ b/docs/book/src/architecture.md @@ -1,10 +1,10 @@ # Architecture -Caboodle's engine is a **plan → apply → verify** loop with a state file +Tambo's engine is a **plan → apply → verify** loop with a state file recording what is installed *and last proven working*. Idempotent and resumable: re-running converges, and a failed step names itself. -The wizard is an interview, not a form over install switches. `caboodle init +The wizard is an interview, not a form over install switches. `tambo init --guided` first elicits intended use, themed crew-member identities/domains/roles, and the questions the installed graph must answer. Those answers become typed plan data and executable reader-path contracts. The engine therefore builds diff --git a/docs/book/src/compatibility.md b/docs/book/src/compatibility.md new file mode 100644 index 0000000..8262416 --- /dev/null +++ b/docs/book/src/compatibility.md @@ -0,0 +1,12 @@ +# Compatibility + +The `caboodle` command remains an alias for `tambo`. Existing +`caboodle-plan.toml`, `caboodle-intent.toml`, `.caboodle` state, `CABOODLE_*` +environment variables, Rust crate imports and published vocabulary IRIs remain +valid. These are compatibility contracts; renaming the product does not move +installed state or rewrite stored graph identities. + +The release installer prefers a `tambo-` archive. Only an HTTP 404 selects a +legacy `caboodle-` archive; checksum and transport failures never select a +fallback. Existing package-manager identifiers remain valid until their own +managed migration. diff --git a/docs/book/src/configuration.md b/docs/book/src/configuration.md index 69b9e46..586f775 100644 --- a/docs/book/src/configuration.md +++ b/docs/book/src/configuration.md @@ -1,6 +1,6 @@ # Configuration reference -Caboodle writes a reviewable TOML plan and a JSON progress file. Use the CLI to +Tambo writes a reviewable TOML plan and a JSON progress file. Use the CLI to create the plan; keep credentials in the environment, never in intent text. The plan's schema rejects unknown keys. @@ -94,8 +94,8 @@ installing a random token does not grant access. ```sh install -d -m 700 "$HOME/.config/quipu" && install -m 400 /secure/issued-token "$HOME/.config/quipu/token" -caboodle provision-quipu-token --from /secure/issued-token --server https://your-quipu-server.example -caboodle doctor +tambo provision-quipu-token --from /secure/issued-token --server https://your-quipu-server.example +tambo doctor ``` `provision-quipu-token` proves the issued file against the authenticated server @@ -118,7 +118,7 @@ accepted authorization, missing token, rejected token, read-only server, or an unknown write path (including no HTTP response). This is authorization evidence, not a successful storage commit. Doctor also requires a nonempty canonical file with mode `0400` and parent mode `0700`, and an authenticated `/shapes` read -returning 2xx. `caboodle verify` runs that live credential proof before recording +returning 2xx. `tambo verify` runs that live credential proof before recording Quipu as verified, then exercises installed tools in isolated scratch stores. Set `QUIPU_SERVER` to the intended server; without it, verify uses the plan's Quipu MCP URL or `http://localhost:3030`. Missing, rejected, or unproven @@ -128,7 +128,7 @@ credentials leave verification incomplete. Public health is not an auth check. A Claude Code MCP entry for Quipu that holds only a URL sends no bearer. Reads work and every MCP write is refused with `missing_or_invalid_bearer_token`. -`caboodle plan --quipu-mcp-url ` adds a reviewable `[quipu_mcp]` step. +`tambo plan --quipu-mcp-url ` adds a reviewable `[quipu_mcp]` step. That step changes your Claude Code configuration, so it is opt-in. `apply` installs `~/.local/bin/quipu-mcp-headers` (mode 0755). Claude Code runs @@ -188,13 +188,13 @@ agents pick up changed hooks on their next launch. ## Externally owned Quipu Set `external_quipu = true` in a reviewed plan when another mechanism owns -Quipu installation. The default is false. Caboodle resolves `quipu` and +Quipu installation. The default is false. Tambo resolves `quipu` and `quipu-server` from PATH, reads both versions, and records their canonical paths with the identity. It never installs, converges, or release-updates these files. Missing executables and incompatible versions fail; external ownership does not waive the isolated write/read round trip or hook registration checks. Other tools retain their managed-install and shadow checks. Build flavors are incompatible -with external ownership because Caboodle does not build that installation. +with external ownership because Tambo does not build that installation. Verify uses the resolved client for both the entity and vocabulary round trips. An external source build has to support those contracts; a version banner alone diff --git a/docs/book/src/conventions.md b/docs/book/src/conventions.md index 5e4046b..d9412be 100644 --- a/docs/book/src/conventions.md +++ b/docs/book/src/conventions.md @@ -6,7 +6,7 @@ caboodle-ready by exposing the pattern the repos already follow: - conventional CLI verbs: ` selftest`, ` health`, ` init` - and/or `just` recipes: `just install`, `just verify` -Caboodle discovers and drives these directly. Metrics contracts live as +Tambo discovers and drives these directly. Metrics contracts live as camayoc catalogue entries, not per-repo config. The readiness contract every corpus repo adopts: diff --git a/docs/book/src/corpus.md b/docs/book/src/corpus.md index 86b5bab..6ebddc5 100644 --- a/docs/book/src/corpus.md +++ b/docs/book/src/corpus.md @@ -19,21 +19,21 @@ Every profile includes Quipu and can stage git-native knowledge shares into an explicit local database: ```console -caboodle plan --profile retrieval \ +tambo plan --profile retrieval \ --share ./team-knowledge \ --share ./project-knowledge \ --quipu-db ./knowledge.db -caboodle apply --skip-install +tambo apply --skip-install ``` A share directory is the canonical output of `quipu share`: `manifest.json`, -`export.nt`, and `shapes.ttl`. Caboodle does not parse, rewrite, unpack, or wrap +`export.nt`, and `shapes.ttl`. Tambo does not parse, rewrite, unpack, or wrap those files. It invokes `quipu import --db `, so Quipu owns payload-hash verification, identity candidates, local SHACL validation, and the staging/quarantine graph. The returned `share_id`, graph, outcome, promotion eligibility, and blockers are retained under `shares` in `.caboodle/state.json`. A quarantined import is -a successful safe consumption outcome that still needs review; Caboodle never +a successful safe consumption outcome that still needs review; Tambo never runs `quipu import promote`. Promotion into ROOT remains a separate explicit operator decision using the share ID. diff --git a/docs/book/src/crew-contracts.md b/docs/book/src/crew-contracts.md index 1fe04ff..0daf5f8 100644 --- a/docs/book/src/crew-contracts.md +++ b/docs/book/src/crew-contracts.md @@ -1,19 +1,19 @@ # Crew capability contracts -CABOODLE installs the selected crew runtime, but it does not take ownership of +Tambo installs the selected crew runtime, but it does not take ownership of the runtime's security or admission policy. Shantytown is a host executable, so its adapter reads back the installed `st` version. Creel's decisive facts exist inside the browser; verification therefore consumes two browser-produced JSON documents: ```console -caboodle verify \ +tambo verify \ --creel-doctor creel-doctor.json \ --creel-admission creel-admission.json ``` Both schemas are version 1 and reject unknown fields. A new producer field -cannot silently become evidence an older CABOODLE claims to understand. +cannot silently become evidence an older Tambo claims to understand. ## Doctor @@ -40,7 +40,7 @@ be `pass`. The Creel doctor workstream owns which checks it emits, including secure context, persistence, popup/bridge permissions, provider credential presence, Quipu WASM, state-repository health, service-worker freshness, and leases. -CABOODLE validates the contract; it does not reproduce those probes. +Tambo validates the contract; it does not reproduce those probes. ## Admission @@ -56,11 +56,11 @@ CABOODLE validates the contract; it does not reproduce those probes. } ``` -The verdict is `admit`, `refuse`, or `unknown`. CABOODLE proceeds only when all +The verdict is `admit`, `refuse`, or `unknown`. Tambo proceeds only when all three signals are measured passes and the verdict is `admit`. It never prints credentials, accepts an unredacted reason, rounds unknown to zero, or converts a policy refusal into an installer warning. Until Creel publishes both producer interfaces, its bundle can be applied but cannot be marked verified. That refusal is the intended boundary, not a -CABOODLE installation failure to bypass. +Tambo installation failure to bypass. diff --git a/docs/book/src/docs-map.md b/docs/book/src/docs-map.md index c888f99..9e6ea49 100644 --- a/docs/book/src/docs-map.md +++ b/docs/book/src/docs-map.md @@ -2,11 +2,11 @@ ## Start here -- [Introduction](introduction.md): what Caboodle does and when to use it. +- [Introduction](introduction.md): what Tambo does and when to use it. - [Getting started](getting-started.md): the smallest install, interview and recovery. - [Installing and removing](installing.md): platforms, source builds, files and updates. - [Using it with agents](agents.md): standalone MCP clients and managed crews. -- [Using Caboodle](using.md): the guided and non-interactive workflows. +- [Using Tambo](using.md): the guided and non-interactive workflows. - [Reference](reference.md): every command and the glossary. - [Configuration](configuration.md): plan, intent, environment and state. diff --git a/docs/book/src/emission.md b/docs/book/src/emission.md index 965d0dc..73275c1 100644 --- a/docs/book/src/emission.md +++ b/docs/book/src/emission.md @@ -1,6 +1,6 @@ # Emitting to quipu -Caboodle is itself a quipu emitter, twice over: +Tambo is itself a quipu emitter, twice over: **The box emits.** Every applied and functionally verified tool transition is written as a redacted episode under `.caboodle/episodes/`. The filename is the @@ -10,19 +10,19 @@ can safely receive Quipu's `unchanged` outcome and then move the file to `sent/`. **Beads emits.** Bead lifecycle — created, closed, commented — flows to quipu -as episodes through the same discipline. `caboodle queue-br export.jsonl` +as episodes through the same discipline. `tambo queue-br export.jsonl` projects each issue row into created, comment, and (when closed) closure events; re-reading a snapshot is idempotent. Because `br` is upstream, this integration -lives in CABOODLE and requires no fork patch. +lives in Tambo and requires no fork patch. Flush only after reviewing the queue. The endpoint must be HTTPS (or explicit localhost HTTP), and the bearer comes only from `QUIPU_AUTH_TOKEN`; it is never -written into the plan, queue, or command line. CABOODLE first runs a SPARQL +written into the plan, queue, or command line. Tambo first runs a SPARQL control whose marker must return, then posts files byte-for-byte: ```bash -caboodle queue-br br-export.jsonl -QUIPU_AUTH_TOKEN=... caboodle flush-episodes --endpoint https://graph.example +tambo queue-br br-export.jsonl +QUIPU_AUTH_TOKEN=... tambo flush-episodes --endpoint https://graph.example ``` Created, updated, and unchanged are successful delivery outcomes. A transport diff --git a/docs/book/src/getting-started.md b/docs/book/src/getting-started.md index ff92b16..f5eda6f 100644 --- a/docs/book/src/getting-started.md +++ b/docs/book/src/getting-started.md @@ -24,8 +24,8 @@ credential. See [configuration](configuration.md). ## Guided interview -Use `caboodle init --guided` instead of the first two commands to describe -your own use interactively. Run `caboodle doctor` before installing to see +Use `tambo init --guided` instead of the first two commands to describe +your own use interactively. Run `tambo doctor` before installing to see platform or prerequisite blockers. | prompt | what to type | @@ -33,30 +33,30 @@ platform or prerequisite blockers. | `profile` | `retrieval` for a first install. See [profiles](profiles.md). | | `what should this installation help you do?` | One plain sentence. It is recorded in the plan. | | `how many themed crew members` | `0` unless you run a named team of agents. | -| `how many ontology questions` | Press **enter** on a first install: caboodle uses a built-in self-test question that checks the store answers a query, and asks nothing else. Or type a number to write your own; each question is a check the finished graph must pass. | +| `how many ontology questions` | Press **enter** on a first install: Tambo uses a built-in self-test question that checks the store answers a query, and asks nothing else. Or type a number to write your own; each question is a check the finished graph must pass. | | the question's five fields | Only if you typed a number. A question in words, its answer shape, the seed fact that answers it, a SPARQL `SELECT` or `ASK` query, and a word the answer must contain. | ## Recovery -- **`caboodle doctor`** first. It names the blocker and the fix. -- **` install step ... no checksummed CABOODLE release for `**: +- **`tambo doctor`** first. It names the blocker and the fix. +- **` install step ... no checksummed Tambo release for `**: build that tool with the `cargo install` command doctor prints, then rerun - `caboodle install`. Caboodle adopts an installed tool that passes its checks. + `tambo install`. Tambo adopts an installed tool that passes its checks. - **` functional verification`**: the tool installed but its round trip failed. The error includes the tool's own output. Fix it and rerun - `caboodle install`; tools that already passed are not redone. -- **macOS with Bobbin before v0.18.0 (the pin CABOODLE carried before this release was v0.16.2): bobbin panics with `Failed to load ONNX Runtime dylib`**: bobbin + `tambo install`; tools that already passed are not redone. +- **macOS with Bobbin before v0.18.0 (the pin Tambo carried before this release was v0.16.2): bobbin panics with `Failed to load ONNX Runtime dylib`**: bobbin looks for its bundled runtime next to the `~/.cargo/bin/bobbin` symlink rather than next to the real binary. For that release, run `export ORT_DYLIB_PATH="$HOME/.local/share/caboodle/bobbin/v0.16.2/lib/libonnxruntime.dylib"` - (add it to your shell profile) and rerun `caboodle install`. + (add it to your shell profile) and rerun `tambo install`. - **A new build still behaves like the old one**: another copy earlier on PATH wins. Doctor lists every copy in the order your shell finds them, and - `caboodle verify` fails with `SHADOWED` when the copy PATH runs reports a - different version from the one caboodle installed. Remove the stale copy or + `tambo verify` fails with `SHADOWED` when the copy PATH runs reports a + different version from the one Tambo installed. Remove the stale copy or move `~/.cargo/bin` earlier on PATH. - **`no plan at caboodle-plan.toml`**: you are in a different directory from the - one where you ran `caboodle init --guided`. + one where you ran `tambo init --guided`. Do not delete `.caboodle/` to recover. It holds your interview answers and the last proven state. diff --git a/docs/book/src/images/stack-loop.svg b/docs/book/src/images/stack-loop.svg index 34faa63..2aef532 100644 --- a/docs/book/src/images/stack-loop.svg +++ b/docs/book/src/images/stack-loop.svg @@ -1,6 +1,6 @@ The quipu stack: knowledge returns to the next agent turn - Agents send activity to Camayoc. Camayoc sends tagged, quarantined episodes to Quipu. Quipu sends knowledge to Bobbin; Bobbin feeds the next agent turn. Yupana supplies committed structure to Quipu and code context to Bobbin. Caboodle installs, proves and observes the four tools. + Agents send activity to Camayoc. Camayoc sends tagged, quarantined episodes to Quipu. Quipu sends knowledge to Bobbin; Bobbin feeds the next agent turn. Yupana supplies committed structure to Quipu and code context to Bobbin. Tambo installs, proves and observes the four tools. @@ -30,7 +30,7 @@ quipu bobbin yupana - caboodle + tambo Claude Code · Codex diff --git a/docs/book/src/installation-reference.md b/docs/book/src/installation-reference.md index a4b2517..5af0435 100644 --- a/docs/book/src/installation-reference.md +++ b/docs/book/src/installation-reference.md @@ -38,7 +38,7 @@ absolute path. Or build the latest release from source with Rust (`cargo install --git https://github.com/intigraph/tambo --tag vX.Y.Z --locked`). Either way, -`caboodle --version` prints `caboodle X.Y.Z` for the release you installed. +`tambo --version` prints `tambo X.Y.Z` for the release you installed. ### macOS with Homebrew @@ -47,7 +47,11 @@ brew install scbrown/tap/caboodle caboodle --version ``` -Homebrew owns the installed command; Caboodle still composes and verifies the +This formula currently installs only the `caboodle` compatibility command. +For a Homebrew install, use `caboodle` wherever the examples below use `tambo` +(for example, `caboodle quickstart` and `caboodle verify`). + +Homebrew owns the installed command; Tambo still composes and verifies the stack. Update it with `brew upgrade scbrown/tap/caboodle`. To hold the installed version, use `brew pin caboodle`; resume updates with `brew unpin caboodle`. The [tap channel guide](https://github.com/scbrown/homebrew-tap#caboodle-preview-channel) @@ -108,11 +112,11 @@ review the resulting plan, then run `tambo install`. See the | I want to… | Command | |---|---| -| Choose tools and describe my own use | `caboodle init --guided` | -| Find install blockers before changing anything | `caboodle doctor` | -| Install and prove the reviewed selection | `caboodle install` | -| Recheck the selected tools | `caboodle verify` | -| Compare against this build's reviewed versions | `caboodle check-updates` | +| Choose tools and describe my own use | `tambo init --guided` | +| Find install blockers before changing anything | `tambo doctor` | +| Install and prove the reviewed selection | `tambo install` | +| Recheck the selected tools | `tambo verify` | +| Compare against this build's reviewed versions | `tambo check-updates` | [Full command and configuration reference](https://intigraph.github.io/tambo/reference.html). @@ -147,11 +151,11 @@ failed to connect. MCP (Model Context Protocol) lets your agent call the installed server. [Agent setup](https://intigraph.github.io/tambo/agents.html) covers indexing, Yupana, other clients -and managed crew registration through `caboodle project-settings`. +and managed crew registration through `tambo project-settings`. ## Before you start -| Platform | Caboodle | Quipu | Yupana | +| Platform | Tambo | Quipu | Yupana | |---|---|---|---| | Linux x86_64 | Release | Release | Release | | macOS arm64 / x86_64 | Release | Release | Release | @@ -161,7 +165,7 @@ Have `curl`, `tar`, `git`, `bash`, `python3` and `sha256sum` on PATH (`brew install coreutils` supplies `sha256sum` on macOS). The `everything` profile also needs Go. No account or remote server is needed. [Installation details](https://intigraph.github.io/tambo/installing.html) cover source builds, -installed files and removal; `caboodle doctor` names missing prerequisites. +installed files and removal; `tambo doctor` names missing prerequisites. ## What's next diff --git a/docs/book/src/installing.md b/docs/book/src/installing.md index 3840302..a6aa2a2 100644 --- a/docs/book/src/installing.md +++ b/docs/book/src/installing.md @@ -1,25 +1,13 @@ # Installing and removing Tambo -Tambo is the renamed Caboodle installer. For the transition release, both -`tambo` and `caboodle` are available. Existing `caboodle-plan.toml` and -`.caboodle` state paths remain compatible; no install-state move is required. -The canonical archive is `tambo-vVERSION-TARGET.tar.gz`; a compatibility archive -named `caboodle-vVERSION-TARGET.tar.gz` carries the same two commands for legacy -self-update clients. Both have filename-bound SHA-256 checksum files. - -The planned managed Linux and macOS cutover uses apt and Homebrew to update -both commands as a package after the first official Tambo release. The Homebrew -formula rename will migrate `caboodle` to `tambo`; the Linux transitional -`caboodle` package will depend on `tambo`. The checksummed release -installer remains the standalone fallback. A standalone self-update of a -dual-command installation verifies and updates both commands together, restoring -both prior files and state if either installed read-back fails. - -Caboodle publishes a release only when a `vVERSION` tag exactly matches the +Tambo installs and verifies the stack from checksummed release archives. See +[Compatibility](compatibility.md) for retained command and state contracts. + +Tambo publishes a release only when a `vVERSION` tag exactly matches the version in `Cargo.toml`. Each supported archive has a sibling `.sha256` file; the installer verifies that checksum before replacing the binary. -Caboodle's built-in HTTPS asset downloads make at most three attempts. Server +Tambo's built-in HTTPS asset downloads make at most three attempts. Server errors (HTTP 5xx) and transient resolution, connection, timeout, partial-transfer, send/receive or HTTP/2 stream errors are retried after one and then two seconds. Each attempt has a 10-second connection timeout and a 120-second transfer limit. @@ -27,7 +15,7 @@ Retry logs identify the URL, attempt, curl status, HTTP status and delay; recove logs name the successful attempt. Failed attempts use disposable files. HTTP 4xx (including missing assets), certificate and local file errors fail immediately. Checksum verification happens after downloading and is never -retried or bypassed. This policy covers downloads made by the Caboodle binary, +retried or bypassed. This policy covers downloads made by the Tambo binary, not the bootstrap shell installer above it or external package managers. ## Homebrew member updates @@ -63,24 +51,17 @@ curl -fsSL https://raw.githubusercontent.com/intigraph/tambo/main/scripts/instal The script still verifies the release archive's SHA256 checksum before replacing the binary. Read the [installer source](https://github.com/intigraph/tambo/blob/main/scripts/install.sh) -when inspecting the bootstrap. After installation, `caboodle --version` reads +when inspecting the bootstrap. After installation, `tambo --version` reads back the installed release. -The compatibility repository URL remains the bootstrap default through the -rename. The installer prefers a `tambo-` archive with both commands. Only an -HTTP 404 selects the historical `caboodle-` archive, which may contain just -`caboodle`; pinned releases such as `v0.2.23` therefore remain installable. -Checksum, server and transport failures stop installation without trying an -alternative archive. - Supported release targets are Linux x86_64, macOS x86_64, and macOS arm64. The default destination is `${CARGO_HOME:-$HOME/.cargo}/bin/caboodle`; override it with `CABOODLE_INSTALL_DIR` when that directory is managed elsewhere. -`caboodle --version` prints the release version and the commit it was built -from, for example `caboodle 0.2.3 (1a2b3c4d5e6f)`. Two builds of one release -can then be told apart. The installer warns when a different `caboodle` comes -earlier on PATH than the one it just installed, and `caboodle doctor` warns when +`tambo --version` prints the release version and the commit it was built +from, for example `tambo 0.4.0 (1a2b3c4d5e6f)`. Two builds of one release +can then be told apart. The installer warns when a different `tambo` comes +earlier on PATH than the one it just installed, and `tambo doctor` warns when PATH runs a different build from the one you invoked. Remove the stale copy or reorder PATH. @@ -91,12 +72,12 @@ A Rust toolchain can install the reviewed revision directly: ```bash cargo install --git https://github.com/intigraph/tambo \ --rev --locked -caboodle --version +tambo --version ``` ## Preflight -`caboodle doctor` reports what would stop an install on this host and changes +`tambo doctor` reports what would stop an install on this host and changes nothing. With a plan in the current directory it checks that plan; without one it checks every tool in the `everything` profile. It exits nonzero when any line is a `FAIL`: @@ -121,10 +102,10 @@ The interview writes a plan and changes nothing else. Read the complete file before applying it: ```bash -caboodle init --guided +tambo init --guided less caboodle-plan.toml -caboodle install -caboodle verify-questions +tambo install +tambo verify-questions ``` If input or an install is interrupted, rerun the same command. Interview @@ -150,7 +131,7 @@ re-hashes the artifacts on disk). ## Registering MCP servers -Caboodle owns binary installation, version convergence, and functional proof. +Tambo owns binary installation, version convergence, and functional proof. Shantytown owns harness registration: it projects the MCP/skill manifest from Quipu into the workspaces named by the rig's crew cards. Installing binaries alone does not register servers. @@ -158,15 +139,15 @@ alone does not register servers. After a green install, on a configured Shantytown rig: ```bash -caboodle project-settings --root /path/to/.shanty +tambo project-settings --root /path/to/.shanty # Optional: select one crew member or read identities directly from Quipu. -caboodle project-settings --root /path/to/.shanty --agent ada --registry quipu +tambo project-settings --root /path/to/.shanty --agent ada --registry quipu ``` This delegates to `st --root /path/to/.shanty ops provision --json`. It reads the rig's existing crew, even when the installation plan has no crew profile, and requires the configured Quipu tooling manifest (`SHANTY_TOOLING_MANIFEST`). -Server names, transports, and secret references come from that manifest; Caboodle +Server names, transports, and secret references come from that manifest; Tambo does not maintain another server list. A rig whose manifest names yupana, bobbin, forgejo, and homelab registers all four. A missing crew reports "no crew on this rig yet - run st fleet init / st agent new first". Missing @@ -191,7 +172,7 @@ claude mcp list ``` Homelab MCP exposes the `quipu_*` tools; it is a separately operated proxy, not -installed by Caboodle. Use your deployment's authentication procedure without +installed by Tambo. Use your deployment's authentication procedure without putting credentials in the plan. Bobbin's knowledge tools are not a replacement for Homelab's Quipu tools. HTTP endpoints above are placeholders, not public services. For Codex, use the rig adapter to emit its harness-specific settings. @@ -206,14 +187,14 @@ before the repo is available, which is why the file exists to be pasted from rather than executed. It bootstraps quipu (checksummed prebuilt `quipu` and `quipu-server` release -binaries), caboodle itself (prebuilt release binary via `scripts/install.sh`), +binaries), Tambo itself (prebuilt release binary via `scripts/install.sh`), the shared tooling the stack's quality gates need (`just`, `bd`, `pre-commit`, `mdbook`, `mdbook-mermaid`, `cffi`), and stages the stack knowledge packs into `~/.caboodle/packs/`, verified with `quipu pack --verify` — a pack that fails verification is deleted rather than trusted. It deliberately does **not** build the rest of the corpus: -that is caboodle's own job, and a session that needs the full stack runs -`caboodle install` against a reviewed plan so every tool is proved rather +that is Tambo's own job, and a session that needs the full stack runs +`tambo install` against a reviewed plan so every tool is proved rather than assumed. Set `CABOODLE_ALLOW_SOURCE_FALLBACK=1` only when the Quipu release artifact is @@ -227,7 +208,7 @@ conflicting `qp` files in the destination or on PATH cause refusal. Verification checks the link, executable identity and matching version output without creating files. `--skip-install` requires the alias to be present already. -An externally owned Quipu must provide its own command alias; Caboodle verifies +An externally owned Quipu must provide its own command alias; Tambo verifies it but does not create it. A paired release update retains the alias across a CLI replacement or rollback because the link follows the canonical `quipu` path. @@ -316,23 +297,23 @@ Bobbin's `.bbpack` index remains a separate binary release artifact. ## Uninstall -Remove only the Caboodle binary and optional local Caboodle state. Installed +Remove only the Tambo binary and optional local Tambo state. Installed corpus tools are intentionally left in place because they may be shared with other workflows: ```bash rm "${CARGO_HOME:-$HOME/.cargo}/bin/caboodle" -# Optional, from the directory where Caboodle was run: +# Optional, from the directory where Tambo was run: rm -r .caboodle ``` ## Reviewed-pin drift -`caboodle check-updates` proposes an update only when the installed version is +`tambo check-updates` proposes an update only when the installed version is older than the reviewed pin. A newer version is reported as ahead of the pin; an unparseable or same-version identity mismatch is reported as version drift. These reports remain nonzero because the installation differs from the review. -`caboodle update` refuses a reviewed-pin downgrade before replacing the tool. +`tambo update` refuses a reviewed-pin downgrade before replacing the tool. There is no `--allow-downgrade` escape: a deliberate rollback requires a separately reviewed installation, rather than a normal stack update. @@ -361,8 +342,8 @@ os.link(binary, backup, follow_symlinks=False) # fails if backup already exists binary.unlink() print(f"Saved {backup}; rerun apply with your existing plan and state") PYTHON -caboodle apply --plan caboodle-plan.toml --state .caboodle/state.json -caboodle verify --plan caboodle-plan.toml --state .caboodle/state.json +tambo apply --plan caboodle-plan.toml --state .caboodle/state.json +tambo verify --plan caboodle-plan.toml --state .caboodle/state.json ``` Keep `bobbin.before-tambo` until verification succeeds. If either command fails, @@ -395,13 +376,13 @@ procedure instead of the regular-file steps above. ## Opt-in published binary updates After the initial install and plan review, track published stable releases for a -selected binary without waiting for this Caboodle build's reviewed pins to change: +selected binary without waiting for this Tambo build's reviewed pins to change: ```bash -caboodle update-release --tool bobbin --check -caboodle update-release --tool bobbin -caboodle update-release --tool yupana -caboodle update-release --tool desire-path +tambo update-release --tool bobbin --check +tambo update-release --tool bobbin +tambo update-release --tool yupana +tambo update-release --tool desire-path ``` This path currently supports Linux x86_64. The tool must already be installed on @@ -433,8 +414,8 @@ beside the state file to serialize release updates; backups are retained under bound total runtime and retain stdout/stderr. This command does not itself install a timer or claim that another host or a long-running process has updated. -`caboodle update-self` applies the same release, checksum, downgrade, backup and -interruption-recovery controls to Caboodle itself. Its post-install contract +`tambo update-self` applies the same release, checksum, downgrade, backup and +interruption-recovery controls to Tambo itself. Its post-install contract requires the new binary's version and `update-release --help` to answer correctly. Self-update supports Linux x86_64, macOS x86_64, and macOS arm64, selecting the matching published archive and its `.sha256` asset. Other platforms refuse before @@ -443,7 +424,7 @@ restoring archive metadata, so archive extended attributes are not installed. Event consumers can select an exact stable release with `update-self --tag v0.2.14`. To bind the download to evidence obtained before installation, also supply `--archive-sha256` and `--binary-sha256`. Both values must be lowercase SHA256 -digests; both flags require the exact tag and each other. CABOODLE compares the +digests; both flags require the exact tag and each other. Tambo compares the archive before extraction and the executable before running it or replacing the installed copy. A mismatch leaves the previous installer and state intact. @@ -472,7 +453,7 @@ never touches the server at `QUIPU_SERVER`. To set camayoc up against your real server, run the bundle's bootstrap yourself as a separate step: `QUIPU_SERVER= bash ~/.local/share/caboodle/camayoc//scripts/bootstrap.sh`. -To remove caboodle, delete `~/.cargo/bin/caboodle` and the `.caboodle/` +To remove Tambo, delete `~/.cargo/bin/caboodle` and the `.caboodle/` directory. Installed tools stay, because other workflows may use them. The [install guide](installing.md) covers release pins, source installs, and updates. @@ -481,12 +462,12 @@ installs, and updates. **Platforms.** Linux x86_64 needs no Rust toolchain: each tool comes from a checksummed release or source archive, and Go builds desire-path. On other -platforms, availability depends on the tool as shown below; `caboodle doctor` +platforms, availability depends on the tool as shown below; `tambo doctor` prints the exact source-build command where no reviewed release exists. | | Linux x86_64 | macOS arm64 | macOS x86_64 | Linux arm64 | |---|---|---|---|---| -| caboodle | release | release | release | build with `cargo install --git` | +| Tambo | release | release | release | build with `cargo install --git` | | quipu | release | release | release | release | | camayoc | source archive | source archive | source archive | source archive | | bobbin | release | release | release | release | @@ -511,7 +492,7 @@ successful `update-release --tool seeds`. It requires the same selected plan, state file, executable path and exact current/prior SHA256 values: ```bash -caboodle rollback-seeds --plan crew.toml --state state.json \ +tambo rollback-seeds --plan crew.toml --state state.json \ --current-sha256 --prior-sha256 ``` @@ -534,10 +515,10 @@ and deployment contract before using it on an installed tool. Maintainers can verify an embedded Rust release member before publishing a pin: ```bash -caboodle verify-member seeds +tambo verify-member seeds ``` -This stages the archive pinned by that Caboodle checkout, checks its digest, +This stages the archive pinned by that Tambo checkout, checks its digest, identity and version, and runs the manifest's functional steps in temporary roots. It does not install a managed program. The `caboodle-verify` CI job runs this command against the PR checkout; Seeds pin automation requires that exact diff --git a/docs/book/src/introduction.md b/docs/book/src/introduction.md index 8c9cc36..00ea631 100644 --- a/docs/book/src/introduction.md +++ b/docs/book/src/introduction.md @@ -6,7 +6,7 @@ against your rules, records where each fact came from, and answers what was true when. *Bitemporal* means keeping both when a fact was recorded and, when supplied, when it was true. -**Caboodle installs and configures this stack**, then proves the selected tools +**Tambo installs and configures this stack**, then proves the selected tools work. [Quipu](https://intigraph.github.io/quipu/) holds the knowledge. Camayoc prepares knowledge and vocabulary for it. Bobbin searches code and can include knowledge from Quipu; Yupana shows code impact and can read policies from Quipu. @@ -19,7 +19,7 @@ Quipu's write checks for the rules you want enforced. See [Quipu's configuration reference](https://intigraph.github.io/quipu/getting-started/configuration.html) for the settings and their defaults. -![The quipu stack loop: agents send activity to Camayoc, which sends tagged, quarantined episodes to Quipu. Quipu supplies knowledge to Bobbin, which feeds the next agent turn. Yupana enforces code policies and contributes committed structure to Quipu and code context to Bobbin. Desire Path turns hallucinations into feature requests. Seeds tracks work items in the Quipu knowledge base. Caboodle installs, proves, and observes the tools.](images/stack-loop.svg) +![The quipu stack loop: agents send activity to Camayoc, which sends tagged, quarantined episodes to Quipu. Quipu supplies knowledge to Bobbin, which feeds the next agent turn. Yupana enforces code policies and contributes committed structure to Quipu and code context to Bobbin. Desire Path turns hallucinations into feature requests. Seeds tracks work items in the Quipu knowledge base. Tambo installs, proves, and observes the tools.](images/stack-loop.svg) ## Three ways in @@ -45,10 +45,10 @@ with probes that must be refused. See the ### 3. Install the whole kit -[Install Caboodle](installing.md), then start its guided interview: +[Install Tambo](installing.md), then start its guided interview: ```bash -caboodle init --guided +tambo init --guided ``` Review the generated plan before applying it. The diff --git a/docs/book/src/pendant-autoload.md b/docs/book/src/pendant-autoload.md index 8adc330..c55b28b 100644 --- a/docs/book/src/pendant-autoload.md +++ b/docs/book/src/pendant-autoload.md @@ -34,7 +34,7 @@ Nothing installs or activates repository hooks without an opt-in. ## 1. Discovery and autoload -**Convention, not a manifest.** Caboodle does not parse per-repo manifest +**Convention, not a manifest.** Tambo does not parse per-repo manifest files ([convention over manifest](conventions.md)), and packs need none. A repository ships its packs at one conventional path: @@ -49,7 +49,7 @@ of step with the packs it describes. **Triggers.** A `post-checkout` and `post-merge` hook, installed by `tambo init --pack-hooks` in repositories the user opts in, runs the same -sync command (the `caboodle` compatibility executable supports it too): +sync command (the `tambo` compatibility executable supports it too): ```bash tambo packs sync --repo . --shapes-from /path/to/trusted-authority.pendant.tar.gz @@ -111,13 +111,13 @@ rollback and broader consumer installation remain explicit operator actions. A pack is data landing in the graph that agents query first, so loading is a trust decision. -**Exists today** (aegis-2eckx0): `caboodle packs trust` keeps these decisions in +**Exists today** (aegis-2eckx0): `tambo packs trust` keeps these decisions in `~/.config/caboodle/pack-trust.toml`, separate from the stack config. `owners` lists `host/owner` pairs whose packs autoload. `[[allow]]` admits one foreign archive and must name both `repo` and `pack_sha256`: an entry without the hash, an unknown key or a malformed value refuses the whole file, so every pack is refused until it is fixed. `[[allow_endpoint]]` admits one exact -`http(s)` endpoint with no credentials in its URL. `caboodle packs trust check +`http(s)` endpoint with no credentials in its URL. `tambo packs trust check --pack ` exits 0 to load, or 3 with a refusal naming the pack and the exact `allow` command. `packs sync` asks this question before composing and before accepting a cached replay. @@ -126,10 +126,10 @@ cached replay. pointer endpoint may join federation: exit 0 admits it, exit 3 refuses it. It reads the current trust file on every invocation and never changes it. An archive allow does not admit its endpoint; foreign endpoints need their own -exact repository/URL allow. Both `tambo` and `caboodle` expose this command. +exact repository/URL allow. Both `tambo` and `tambo` expose this command. - **Your own repositories load automatically**, meaning repositories whose - remote owner matches an allow-list in caboodle's configuration. + remote owner matches an allow-list in Tambo's configuration. - **A foreign pack needs an explicit allow**, recorded per repository and pack hash. A repository name appearing in a configuration file is not consent. - **Loading is not promotion.** An autoloaded pack stays in its named dataset, @@ -147,7 +147,7 @@ A monorepo ships **one parent share and one derived share per project**. (`parent_share` set) whose stored CONSTRUCT scope filters by path prefix, such as `packages/api/`. - Each derived pack's own manifest records its path scope, so - `caboodle packs sync` can reload only the projects whose paths changed in + `tambo packs sync` can reload only the projects whose paths changed in the checkout, the same idea as yupana's per-file keys, grouped by project. - **Cross-project edges survive a reload.** Entity IRIs do not depend on the commit, so an edge from one project to another still resolves after either @@ -227,7 +227,7 @@ endpoint = "https://quipu.example.org/sparql" ``` - **`kind = "endpoint"`**: a live, large or fast-moving graph, such as a - homelab operations graph. `caboodle packs sync` adds it to quipu's declared + homelab operations graph. `tambo packs sync` adds it to quipu's declared federation list, so `SERVICE` and federated fan-out reach it with no local copy. The trust rule of section 2 applies to the endpoint: declaring it in a foreign pack does not authorise it. @@ -252,7 +252,7 @@ this way. 1. **quipu:** the per-repository current pointer and snapshot retention, with retraction carry-forward across snapshots of one pack. -2. **caboodle:** the `.quipu/packs/` convention, `caboodle packs sync`, and +2. **caboodle:** the `.quipu/packs/` convention, `tambo packs sync`, and the opt-in git hooks. 3. **caboodle:** the trust allow-list for foreign packs and pointer endpoints. 4. **quipu and caboodle:** monorepo derived shares by path prefix, proven on diff --git a/docs/book/src/profiles.md b/docs/book/src/profiles.md index 76c2650..231fb0b 100644 --- a/docs/book/src/profiles.md +++ b/docs/book/src/profiles.md @@ -18,8 +18,8 @@ installs seeds (`sd`), the crew's work tracker, and shuttle, its workflow engine When a plan selects both seeds and Desire Path, `apply` also sets the Desire Path command alias `bd -> sd`, so an agent that types `bd` from habit reaches seeds. `verify` checks that the alias is there. If the host already has a `bd` -alias that points somewhere else, caboodle leaves it alone: `dp alias` would -silently replace it, so caboodle reads the existing aliases first. `apply` and +alias that points somewhere else, Tambo leaves it alone: `dp alias` would +silently replace it, so Tambo reads the existing aliases first. `apply` and `verify` then report the existing target as a deliberate local choice, not a failure. If `dp` is not on PATH, `apply` prints a note instead of failing. @@ -32,10 +32,10 @@ than a hidden installer input. The crew choice is emitted today: ```console -caboodle plan --profile crew --crew shantytown -caboodle plan --profile crew --crew creel -caboodle plan --profile crew --crew both -caboodle plan --profile crew --crew standalone +tambo plan --profile crew --crew shantytown +tambo plan --profile crew --crew creel +tambo plan --profile crew --crew both +tambo plan --profile crew --crew standalone ``` `both` is not fan-out. Its plan names Shantytown as `durable_owner`, Creel as @@ -46,7 +46,7 @@ The reviewed plan can export policy summaries for review. These summaries do not register MCP servers or override the rig crew and its Quipu tooling manifest: ```console -caboodle project-settings --policy-only +tambo project-settings --policy-only ``` In `both` mode this writes `shantytown.settings.json` and @@ -68,7 +68,7 @@ It refuses when either contract is absent, when a required doctor result is not `pass`, or when the governor does not return a measured `admit`. Camayoc currently distributes its bootstrap ontology, shapes, queries, and gate -proof as a repository bundle; CABOODLE pins and checksums that bundle until the +proof as a repository bundle; Tambo pins and checksums that bundle until the designed `core.pendant` artifact is published. ## Quipu install flavor @@ -82,7 +82,7 @@ deliberately excludes the `lancedb` cargo feature — so flavor can never pull in an unreviewed Quipu: ```console -caboodle plan --profile retrieval --quipu-flavor lancedb +tambo plan --profile retrieval --quipu-flavor lancedb ``` The flavor is proven, never assumed. `quipu --version` cannot say which @@ -118,7 +118,7 @@ url = "https://models.example/reviewed/tokenizer.json" sha256 = "…" ``` -`caboodle plan --embedding-model ` copies a spec of that shape into +`tambo plan --embedding-model ` copies a spec of that shape into the plan. During `apply`, each artifact is downloaded beside its destination and hashed **before** it may take the artifact's name; a checksum mismatch deletes the download and fails the named `embedding-model` step with a @@ -130,7 +130,7 @@ like every other step. **What verify proves today, stated plainly:** verification re-hashes every artifact on disk against the plan's pinned digest and goes red on drift or absence. It does **not** yet prove an embed-and-search round-trip — the -installed Quipu exposes no reviewed embeddings contract for caboodle to +installed Quipu exposes no reviewed embeddings contract for Tambo to drive, and wiring a proof that cannot fail would be exactly the banner the three-proofs rule forbids. When that contract lands, the round-trip (auto-embedded episode against an isolated store, absent-control first, diff --git a/docs/book/src/proofs.md b/docs/book/src/proofs.md index df21bd6..8030def 100644 --- a/docs/book/src/proofs.md +++ b/docs/book/src/proofs.md @@ -1,6 +1,6 @@ # Three proofs, not one -Three claims separate caboodle from an install script, and each is a proof: +Three claims separate Tambo from an install script, and each is a proof: 1. **Installed** — proven by version read-back, never by exit code. 2. **Working** — a per-tool functional round-trip: quipu accepts an episode and @@ -8,7 +8,7 @@ Three claims separate caboodle from an install script, and each is a proof: it. Every check pairs with a **negative control** — the selftest that corrupts a byte and goes red — so a pass is capable of failing. 3. **Observable** — Prometheus actually scrapes each tool's declared exporter; - caboodle generates the scrape config, a starter alert pack, and one + Tambo generates the scrape config, a starter alert pack, and one consolidated dashboard. This encodes the operating culture the stack was built under: verify by diff --git a/docs/book/src/reference.md b/docs/book/src/reference.md index 7fac67c..9d6fb67 100644 --- a/docs/book/src/reference.md +++ b/docs/book/src/reference.md @@ -5,41 +5,41 @@ command surface, for reviewed updates, shared graphs, observability, and install records: ```bash -# Build caboodle from source instead of the release installer. +# Build Tambo from source instead of the release installer. cargo install --git https://github.com/intigraph/tambo --locked # Report what would block an install here. Changes nothing; exits nonzero on a blocker. -caboodle doctor +tambo doctor # Answer the use-shaped interview. It asks who the themed crew members are and # which questions the finished graph must answer, then only writes a plan. -caboodle init --guided +tambo init --guided # Or supply the same intended-use contract non-interactively. -caboodle plan --profile retrieval --intent caboodle-intent.toml +tambo plan --profile retrieval --intent caboodle-intent.toml # Optionally add canonical Quipu share directories to the reviewed corpus. # The target database is explicit; apply stages imports but never promotes them. -caboodle plan --profile retrieval --share ./team-share --quipu-db ./knowledge.db +tambo plan --profile retrieval --share ./team-share --quipu-db ./knowledge.db # Converge the reviewed plan, then prove each tool with a round trip. -caboodle apply -caboodle verify -caboodle verify-questions +tambo apply +tambo verify +tambo verify-questions # Or run both phases together after review. -caboodle install +tambo install -# Ask whether the running stack matches this Caboodle build's reviewed pins. +# Ask whether the running stack matches this Tambo build's reviewed pins. # The command exits nonzero when anything is missing, unreadable, or drifted. -caboodle check-updates +tambo check-updates # Converge only drifted tools, read every version back, and functionally verify # each changed tool before recording it as current. -caboodle update +tambo update # A full tool + crew plan is explicit and reviewable. -caboodle plan --profile everything --crew both +tambo plan --profile everything --crew both ``` `apply` installs a missing released tool and reads its version back; Bobbin comes @@ -53,7 +53,7 @@ scratch quipu server (see verified result. `check-updates` compares the running identities with the release versions and -source revisions pinned in the selected plan's Caboodle build. It does not use +source revisions pinned in the selected plan's Tambo build. It does not use an unreviewed “latest” endpoint. `update` is the mutation half: it installs only drifted selections through their existing checksummed/source-pinned adapters, requires version read-back to match the reviewed identity, runs the adapter's @@ -61,14 +61,14 @@ functional proof, and only then records an `updated` transition. A second run is current and performs no installation. This keeps release selection in review while making deployed-versus-released drift executable rather than anecdotal. -If the interview loses input or its caller stops, rerun `caboodle init --guided`: +If the interview loses input or its caller stops, rerun `tambo init --guided`: accepted answers resume from `.caboodle/interview.toml`. The session disappears only after the complete plan has been written successfully. The interview works backward from expected use. Each crew member has a free-form theme, domain, and role rather than a closed role enum. Each anticipated ontology question records its expected answer shape, the seed facts needed to exercise it, -an executable `SELECT`/`ASK` query, and a result marker. `caboodle +an executable `SELECT`/`ASK` query, and a result marker. `tambo verify-questions` runs those reader-path checks after installation. Empty, duplicate, credential-bearing, or non-executable entries are refused before a plan is written. @@ -76,13 +76,13 @@ plan is written. Installable profiles today are `kg` (Quipu + Camayoc), `retrieval` (plus Bobbin), `code-intel` (plus Yupana), `everything` (plus Desire Path and, when selected with `--crew`, Shantytown/Creel), and `crew` (Shantytown, Creel, -both, or standalone). CABOODLE installs +both, or standalone). Tambo installs checksum-pinned Shantytown and Creel distributions. Creel verification remains browser-owned: it requires explicit machine-readable doctor and admission documents and refuses missing, unknown, unredacted, or non-admit evidence. See the [crew capability contracts](crew-contracts.md). -Until Camayoc publishes `core.pendant`, CABOODLE installs its +Until Camayoc publishes `core.pendant`, Tambo installs its checksum-pinned bootstrap distribution: ontology, shapes, queries, and the same fail-closed gate proof. Verification then proves a separate first ingest with an absent control, reader-path retrieval, and an idempotent replay. @@ -90,11 +90,11 @@ Use `--skip-install` when package installation belongs to another system; the version and functional checks still run. Yupana installs from its checksum-pinned v0.12.7 release and proves `callers` on -an isolated fixture repository. CABOODLE builds Desire Path from the revision its `v0.3.2` tag names (`1f457ec`), stamps +an isolated fixture repository. Tambo builds Desire Path from the revision its `v0.3.2` tag names (`1f457ec`), stamps that identity into `dp version`, and proves an isolated ingest/list round trip. Neither verification can write into the user's normal Yupana state or Desire Path DB. -`caboodle render-observability` converts the reviewed selection plus explicit +`tambo render-observability` converts the reviewed selection plus explicit generic targets into Prometheus scrape config, starter alerts, a dashboard, and versioned contracts. `validate-observability` fails closed on missing targets or uncovered metrics; rendering is review-only and never claims a live scrape. @@ -105,15 +105,15 @@ endpoint plus an environment-only token, proves a query marker first, and keeps the identical bytes pending on ambiguous delivery. Profiles can also consume one or more directories produced by `quipu share`. -Caboodle passes each directory unchanged to `quipu import`, records the returned +Tambo passes each directory unchanged to `quipu import`, records the returned share ID, staging graph, eligibility, and blockers in `.caboodle/state.json`, and leaves ROOT promotion to the explicit `quipu import promote` review step. Non-conforming or off-vocabulary shares remain quarantined and visible rather -than being reshaped into a Caboodle-specific bundle. +than being reshaped into a Tambo-specific bundle. ## Command and option index -Run `caboodle --help` for that command’s complete option syntax. +Run `tambo --help` for that command’s complete option syntax. The table covers the current source tree; published binaries may lag new commands. | Command | Purpose and options | @@ -159,7 +159,7 @@ environment variables and observability targets. ### Quipu paired release updates -`caboodle update-release --tool quipu --plan caboodle-plan.toml` selects the +`tambo update-release --tool quipu --plan caboodle-plan.toml` selects the exact version and per-target SHA256 in `release-pins/quipu.toml`, rather than implicitly trusting the latest release or its downloaded checksum. The publication must provide the expected archive and checksum exactly once; both diff --git a/docs/book/src/roadmap.md b/docs/book/src/roadmap.md index 0b6a02c..c97f4be 100644 --- a/docs/book/src/roadmap.md +++ b/docs/book/src/roadmap.md @@ -1,11 +1,11 @@ -# Roadmap +# Capabilities and boundaries -- **Phase 0** *(shipped)* — plan/apply/verify engine; Quipu + Bobbin adapters; - checksummed release installs; atomic state; clean-machine CI test. -- **Phase 1** *(shipped)* — LLM-guided interview; `skills/caboodle`; Camayoc - bootstrap and first-ingest proof; Shantytown/Creel crew adapters with - browser-owned capability contracts; public clean-machine retrieval proof. -- **Phase 2** *(shipped)* — metrics contracts, generated Prometheus config, starter alerts, - one dashboard; yupana + desire-path adapters; the quipu/beads emitters. -- **Phase 3** — `caboodle upgrade`; per-repo CI keeping conventional verbs - tested with releases; expanded crew routing after explicit handoff lands. +Tambo interviews the operator, writes a reviewable plan, applies selected +adapters, and verifies installed tools. It preserves resumable state and emits +redacted evidence through explicit graph operations. See [Using Tambo](using.md) +and [Reference](reference.md) for the supported commands. + +Pack imports stage data; they do not authorize promotion into ROOT. The +[pendant autoload proposal](pendant-autoload.md) describes a proposal rather than +an installed default. Runtime changes still require the applicable authority +and successful verification. diff --git a/docs/book/src/stack-standard.md b/docs/book/src/stack-standard.md index 2853ccd..4c5a537 100644 --- a/docs/book/src/stack-standard.md +++ b/docs/book/src/stack-standard.md @@ -1,6 +1,6 @@ # The stack README standard -Every public repo in the stack (caboodle, quipu, camayoc, bobbin, yupana, +Every public repo in the stack (Tambo, quipu, camayoc, bobbin, yupana, desire-path) follows one README shape and one theme, so a reader who knows one can find their way around the others: try it first, then this book for depth. diff --git a/docs/book/src/stack.md b/docs/book/src/stack.md index 7b086c5..b775c51 100644 --- a/docs/book/src/stack.md +++ b/docs/book/src/stack.md @@ -1,7 +1,7 @@ # The stack ```text - caboodle (interview → plan → apply → verify → observe) + Tambo (interview → plan → apply → verify → observe) │ installs, proves, and watches ↓ ▼ quipu · bobbin · camayoc · yupana · desire-path · seeds · shuttle · shantytown / creel @@ -10,7 +10,7 @@ prometheus (every tool's metrics, consolidated) ``` -Caboodle never re-implements a tool's job. It installs the tool and then makes +Tambo never re-implements a tool's job. It installs the tool and then makes the tool demonstrate its own job, through three proofs: 1. **Installed**: proven by reading the version back, never by an exit code. @@ -24,7 +24,7 @@ the tool demonstrate its own job, through three proofs: resolve an undeclared term. Every check first proves its marker is absent, so a pass is capable of failing. -3. **Observable**: caboodle generates Prometheus scrape config, starter alerts, +3. **Observable**: Tambo generates Prometheus scrape config, starter alerts, and one dashboard for the selected tools, for you to review and deploy. Install and verification outcomes are also queued as quipu episodes, so a fresh @@ -44,7 +44,7 @@ design is in the [book](introduction.md). | [creel](https://github.com/scbrown/creel) | parallel agent bursts, entirely in the browser | | [shanty](https://github.com/scbrown/shanty) | a terminal multiplexer wrapper that makes tmux feel like home | | [beads](https://github.com/Dicklesworthstone/beads_rust) | issue tracking as agent memory — `br`, SQLite + JSONL | -| [quechua](https://github.com/scbrown/quechua) | the stack's shared vocabulary; caboodle pins a release by digest and loads it into Quipu ([catalog](https://scbrown.github.io/quechua/ns)) | +| [quechua](https://github.com/scbrown/quechua) | the stack's shared vocabulary; Tambo pins a release by digest and loads it into Quipu ([catalog](https://scbrown.github.io/quechua/ns)) | See [the corpus](corpus.md) for share import and [profiles](profiles.md) for which tools each selection installs. diff --git a/docs/book/src/using.md b/docs/book/src/using.md index 57e19aa..25bbb83 100644 --- a/docs/book/src/using.md +++ b/docs/book/src/using.md @@ -1,27 +1,27 @@ -# Using caboodle +# Using Tambo -Caboodle ships a resumable interview and the plan/apply/verify engine with +Tambo ships a resumable interview and the plan/apply/verify engine with adapters for Quipu, Camayoc, Bobbin, Yupana, and Desire Path. ```bash cargo install --git https://github.com/intigraph/tambo --locked # Guided: use, crew themes, and anticipated graph questions are checkpointed. -caboodle init --guided +tambo init --guided # Read-only preflight: every blocker on this host, before anything installs. -caboodle doctor +tambo doctor # Non-interactive: read the same schema from caboodle-intent.toml. -caboodle plan --profile retrieval --intent caboodle-intent.toml +tambo 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 +tambo apply +tambo verify +tambo verify-questions # Or run both phases together after review. -caboodle install +tambo install ``` `apply` installs a missing released tool and reads its version back — a @@ -30,8 +30,8 @@ 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 +If input ends partway through an interview, Tambo stops without a plan and +keeps accepted answers in `.caboodle/interview.toml`. Run `tambo init --guided` again to resume at the next unanswered question. Invalid answers are rejected and never produce a plan. @@ -80,7 +80,7 @@ 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 +For every selected tool, Tambo 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: @@ -95,8 +95,8 @@ Then render and inspect the artifacts. Rendering never claims the targets were scraped or deploys anything: ```bash -caboodle render-observability --targets caboodle-observability.toml -caboodle validate-observability +tambo render-observability --targets caboodle-observability.toml +tambo validate-observability less caboodle-observability/prometheus.yml less caboodle-observability/alerts.yml less caboodle-observability/dashboard.json diff --git a/docs/compatibility/legacy-name-contracts.json b/docs/compatibility/legacy-name-contracts.json new file mode 100644 index 0000000..0a61fc4 --- /dev/null +++ b/docs/compatibility/legacy-name-contracts.json @@ -0,0 +1,1636 @@ +{ + "files": { + ".beads/issues.jsonl": { + "lines": { + "043865104f7b90be9dd2d143d6b4e66de856b5d60016b8214dcbd951b383b5e8": 1, + "07a23d6fc33a36f9ca985d69fd8c1c48cf1c4a96b00ce71f6c92a37f518e49fb": 1, + "1ba63ba063199a98df9f8efb38d32afc8ef84560f7811132092a15a8ccdd6e62": 1, + "86bb0d7330218127b3bb5f0ee30160b1b3a24c31c39ac8e88a84e21b1545644a": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + ".github/workflows/ci.yml": { + "lines": { + "084f1c4ec860098a08621fbfa8ec36596799b73fa691f5dff740765f70056150": 1, + "0fd19f0516d977308f379dce9f031a64813f34653e10510c59f4756c0acb86ec": 1, + "10ef5148c8f1506b9744f3d06bd9550af5bc1a7435923d6dcf784553f68f4bb4": 1, + "1a637d6fbbbe5aa3d11724c2468068a7a3199551f427fabdcb592c745d652cf7": 1, + "2581656270d2a750d4838baa08f3f9104a69151852002c069d2ff53220b55e83": 1, + "27deea77862f3026d9d686ea137ae98c76ad789cc8f80456ab71443ca212e984": 1, + "2c1ece3ebb4e333b3f177eda90c396862beeffb5b2c407eb1785dec6a8aaed9e": 1, + "2e90c094d45282ea8ecd814b3a4a1914ef451f5e2c59b7ca5afa75146f99cae1": 1, + "31d79e056fefef83d1b29575ae0d92b1e663fb916120572d69289155136b2df0": 1, + "35f9ed3a660a25195bce0763c8b0b802ea9edfa08822b2fcbe7a29f2883d097e": 5, + "3b76b8fc63fd343a2a0b806b2e6e8d68ad82d1e2abb5a70db8d918c8c2e23588": 1, + "3cb3f95298dfc4ca96121715d8c57d904feac18546658a4a5f5f8d9b685c4317": 1, + "3e37c6ff66e58be9ca1aad65b94399f475d6c8c272d3a569e7e2b3205eb2d067": 1, + "520561a74418f537120dfaaac93fafce776edb9f2426d3614442479707876e8e": 1, + "552f0529d2202859dcc7bac78359eddec2343f73b93d5d6a321f611b1d2f8b9f": 1, + "66dfe8dba8a0700b40a6bfc943311ba6aa362d47425f1e75fbf9615ba334d5e7": 1, + "67b0f8405abf974c1440a89adbf324ac4bbba21724903112c5f5cc260fe12b8c": 7, + "69e0e2f4527c47dcfdf5131713910ff4352d25f5b99b23b1b061922584a283d2": 1, + "7e51b9f8bfabbde68319d401b05f51b95e8e076eb3db1daa67edfe63c366acef": 1, + "815b2734ca9b305f8de72bd4717823a4d83883bcdb679c9a38c7f482811ef643": 1, + "84f18567ac8049bc666b66cd4d47e02e470df7881984fba83cc78cb6088ff902": 1, + "850036b59a6f1397df24bd79d1a6c46d019b689b2c790f8266652ac479e27236": 1, + "89b3cc66c2f306f077932afa8b06bf51c13aed82e392170e5d7e86ded6785872": 1, + "8b3fe9e3be06e88a61206e6d1a68b76f011e85bc1d27e2b668d9fcabf13b78fc": 1, + "9367c8e4b0d82a2e2ae5dbc7faddc8bec6133ff35180c38f30c4ed079f1ace06": 1, + "96621c7f8a73a4a6cd2de4cf0d09311f4bc75642d7692ffc920a7ac3ed311e3f": 1, + "9f8fcee97efc435f46aab35ac846f56c3e6c6b3ad7f82c6149c4c4ec5cbe1813": 1, + "a4a4dfbc5331d24c98cc7eddbc75ece77e6322586e407e2fb0cf7465230721fd": 1, + "a5ff38d664bd91c5a0b106f0481ae10384c78ee2cbe4b29563484702951190dd": 1, + "a6c20b2e26879c39b7a56475d0e83ae49362bc6cf2477291000a46f169d1914d": 1, + "a90ea8b0a70b481620ddd3c8a84d507021a58d80a625013be728ebae99ce8107": 1, + "ab88a720453613c901da904769aa2f9a9aeb145f0d653d930cdc327391e215f5": 1, + "afbd54d0866bc96da4ae31e03be317e0426643d333a4b8258897525d58e9bbc5": 2, + "b01623a8530368e4e1aa8c2a1e336334baebba955698cfe3683ff2538e451e34": 1, + "b3d7f9a8f284a89eda061258908e76a54f21da2123efbaad143e4d23c6a9130c": 1, + "b99e98e1d5afff0e2d11dd1bab619f2b3ee741f8fa2c811ecf001cfecfe51b8c": 1, + "bf19aea307754133ab44219b808f13f27579342f3c9fe56c7c3da2afd961906d": 2, + "d3ae7b8ea7ff8a2fa3ce1afeb90670af3a2c8a76109ed16046e5c11c1302e6f8": 1, + "d72fe5e847939f156cc1480ee8236d58038fdd550d21eb424d81cf770adff29e": 1, + "d828298cffb8fe06ecc1dee72cbe94d2c8d56d66a3554f3845deb1ff4840e862": 5, + "e959717c2b65b0e36e26ffde89ba883f23ab949a2d9cce029c55d7b5f0a7554c": 1, + "ea98f7ef81b10264c525a0b76d011d847ed0b8508310c51a5ee329c5521b6069": 1, + "f0421d8885a786b4fb476dffada19db9dcfd49fad93177a3d71988a849ec2f4c": 1, + "f15fd5d91696afb5de57157088489e5813b1c24b99631f664ccefef5b95986e1": 1, + "f17866cc073a92796814343330eaf7cd40bf0c51ab7f96cf6bd27f218c6f6cfb": 1, + "f874862c479b5c5bc4891ab675450416eaae65809cb868ab21b5fa3aa88f96ce": 1, + "fb0b48c747f460d98bced139d41db478ca26652bc224241d51babb00cdcdea3e": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + ".github/workflows/member-verify.yml": { + "lines": { + "1ad84cd3f4bdb90eff5b0383984841ae60ac9eaf13e0f25a6ae674d952ac3146": 1, + "dbf8216c24d7e33c8cf195dad9c1ef71355a90ce118d838cacb09c5990f6caee": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + ".github/workflows/release.yml": { + "lines": { + "544e611ddaa879b028d3b4f5ae22de15ff9c9908e66be8edde46597235de7363": 1, + "c1294c87068897af27f29ec317091296f094fc8e7d0fbe8583f47d824e2e6b4c": 1, + "c918c45640e6940874105f93a59ba8a8d92c5f19be88af47033c58aabf002644": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "Cargo.toml": { + "lines": { + "3cc7c92e14e1b3db00d7e621d8efcd71d446cc99962408c379e73e203e7dc50f": 2, + "caaf318163961c02bb615c9144f075a2c27d308b0c0300ea42328b5a757b8515": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "README.md": { + "lines": { + "0a72892c82983c6bfa4534553f19ebdf33cc5cedd78b3312ee6ef4aa9a17e75e": 1, + "35676aaad176b1ef84ebf6b7e2a4385680595bc28799f3e45f09e2259ddbbe7c": 1, + "a1baf0b159f81bcfabf31f51dd50be756dad895f07581a4b08ef63383a872745": 1, + "b2f9b0c55ee1ed7b69c84e2cc918fbba49d7202d821b111926fb58f138c5f8fc": 1, + "c88874bacd2c2691e49e7ff69ce26220321dd0d6268dd0a215ed66ca38e4cca5": 1, + "cc8b0161d55a2b70fc766b60b09aa5775a559e0add51e9346fc1fc7612b2ce7b": 1 + }, + "reason": "Existing state/cache filename, command alias, environment, package, immutable vocabulary IRI or live compatibility anchor." + }, + "build.rs": { + "lines": { + "0257365214a1b7a417441d923a6ecb480e0fcd9977852acecdd5c6597302149d": 1, + "51421d889ab8c40d77d0ef62a9bfdd57d9038e95f88c649e984a8566fad5c761": 1, + "829a1255c670bfe608808967c0510f4775951bc0eb00cac9fdf0c7b8e90d9615": 1, + "b63336b572d2b3078092f78a8ed6d0ec21fc113b69125df8ad029a4a795f2be5": 1, + "cb0af3aea7d8652d82ad9e25afcf9d87f92093fdc14ef7de91dc4b3eb9e7d2f6": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "docs/book/src/architecture.md": { + "lines": { + "a3733f94477011feb5eae6640a978f222c3fa7b70c93d7aa2937efe00566925d": 1 + }, + "reason": "Existing state/cache filename, command alias, environment, package, immutable vocabulary IRI or live compatibility anchor." + }, + "docs/book/src/compatibility.md": { + "lines": { + "73d29c7744844a54fefa280f782e44decb05e13ce4771d05d6a68ea0bdc91cd5": 1, + "a2f210d54b7f77292d9ba9561d1eaf7d163b8af51f9ed290e1f2bfd6955f8fb5": 1, + "e32e037e704911f8bffa72a05cefd171e0bbbbf0868b1b3a27a15c66f44229b1": 1 + }, + "reason": "Existing state/cache filename, command alias, environment, package, immutable vocabulary IRI or live compatibility anchor." + }, + "docs/book/src/configuration.md": { + "lines": { + "0089f2b547f38bf753e892da5e82f1be7f98c1a6058a62fa38bbf1c4972a0d59": 1, + "10f0a040df6e1008148a22f006f3255c3cc7679c8a4e6fdf2f9927ddf75b1c72": 1, + "44b269a2b5d2d82feaf4b97e240731139ea93cfbe6ba45ed2720f4b73c992b0d": 1, + "457b40eadcdb434825ebdabf915a7ddc9844403a1ba64373d8003b5a9cd2dc02": 1, + "5526850f0115f3ef7b815dd24e0c957d3e8c8f28acf20bf7c693cae92715d04d": 1, + "6be577112dd29543773f55c332fa66acf6c4fdd2cee4434f212d99e1881e30bf": 1, + "9394f9b1417cc5fe1d3faa2970a0054a86689554a715fd7af5932dd85f7037e5": 1, + "ad9a5dc8802c54cd89dac5a884b7976ff14594e7321cde7d3dc12c86a7753ee3": 1, + "b88a704445f902b6f7971a642a0a350c662a35dfc00ed26504af76d04a2a9541": 1, + "d831b80cb62d9ce982d2c0b99c45e2e66555776a26747398098e1193a2796c29": 1, + "dcaf172b5a052f5d4d7234bed2e29553db22f4bbf878341d9bfeb685569b0fe6": 1 + }, + "reason": "Existing state/cache filename, command alias, environment, package, immutable vocabulary IRI or live compatibility anchor." + }, + "docs/book/src/conventions.md": { + "lines": { + "e5b436a0ba4329edc18a9d4891a3428575252ae92cb96b08a9bef2aff09e27b5": 1 + }, + "reason": "Existing state/cache filename, command alias, environment, package, immutable vocabulary IRI or live compatibility anchor." + }, + "docs/book/src/corpus.md": { + "lines": { + "ca2c3a61f1d501084203938625db83ec8894a1b413c40a4c3e466a3d26940784": 1 + }, + "reason": "Existing state/cache filename, command alias, environment, package, immutable vocabulary IRI or live compatibility anchor." + }, + "docs/book/src/emission.md": { + "lines": { + "f1f4db5cf5052c8dd1d3db63826a61b1e70efeee9a40e847867ceba5a53643a8": 1 + }, + "reason": "Existing state/cache filename, command alias, environment, package, immutable vocabulary IRI or live compatibility anchor." + }, + "docs/book/src/getting-started.md": { + "lines": { + "271e4abc04a99774caee06d23c365cd900793333c78cb8f2192095ecdb88eae1": 1, + "3aa443b8f0bfef9e5ca3a6f97287d8cb341162a9eae35b2e2f0b04df3e170149": 1, + "52d8929c6644a6413901113fe7504df40ac3e87c6ffe22cbd3c1f84c1762531e": 1, + "a2b352021e9be2435d1cf614a627b81a7f47c58ba2ed8db40f40ede47ae5d9a7": 1 + }, + "reason": "Existing state/cache filename, command alias, environment, package, immutable vocabulary IRI or live compatibility anchor." + }, + "docs/book/src/installation-reference.md": { + "lines": { + "0d714756291eb50ab1bc0cb785e04e36c3c92537ac33658751cfcef9c0bfcaf7": 1, + "1db9d94f6ad572c31b0064f036037f4619c22235a5cd686aa21f509012511103": 1, + "20a38aa80de5d1242f2b7320daa45d849c8a8adf2234f0791e12b7f0491b953b": 1, + "4582e4025781d8afd3016c1b923af37425eababce38faa494deabdd7dbaee2df": 1, + "7ef33cb5760d671a1e71b55939e90ccf768afbcdf6bf0c2465fde6a57be45982": 1, + "8558afef7784dffbb7b380d8a7c64913c488a305814c29e26c1075a398dac447": 1, + "a91a78bb7479979990e4e7abe116dab724315872279487cac4324b19eebd37a0": 1, + "c6ccd5fa09c072a8f2f4256c21a9f653378413852ccd9264154ac8bd72da92b5": 1, + "cb7847483b79e02ae3849b8460e3422daede2b4091f83563e9de9eac02d43589": 1, + "ebba26e4674089a2d484a0f39a679c40e4692be746efb23ed5e3fe427649f435": 1, + "ede13c63ae06f69a6b705f9ac9d3c0a423a2ccbf27ca1f68dbe505f0a374ce5a": 1, + "f577490d2d8e5fb075b2266ae6546027565d9dedbe2d22f59106c0f6ed495ebd": 1, + "fae4574c4b96521f6b03f4471693f0864155e34dfcbcc7562f0a277b35870dfe": 1 + }, + "reason": "Existing state/cache filename, command alias, environment, package, immutable vocabulary IRI or live compatibility anchor." + }, + "docs/book/src/installing.md": { + "lines": { + "0716cd4879d929615441d2281f9a0dbf0a6238fb7b1cdf50b9bbc267eb06c32a": 1, + "0abecf0895c20ece45a9729f565f531fac93ebe58a97e1bd281154d84b5890db": 1, + "10482039b780d3237123798404b6e136d270fc59c5c7fbdde7507b1cd6df337a": 1, + "217f0900684ee432aabb1e3dccfe442670191a72fbd1c2da83f22024555a5039": 1, + "27ab2c87b85530871590c7b94bd674a9786f182c1db6ef64238a16cbba69a45c": 1, + "29aefe4929557fa19f9962ca97782cea2ed5993813eb25926e8a125cc0e7652b": 1, + "3e70a0ef9a7e5a828b1aa23dd02977fb9358c80e651ec5a5e7eddc2277331812": 1, + "3ff0d2e8fcdab1f6390cf9f643b475b247d24a5203a23c57ddffbe98953b2e21": 1, + "414987c14e419ec2eb855962fc8dc3821edf18363a605c6369bd00bcf89ee9bc": 1, + "46e187d7db3226b371880de99411d9ee82ba966f7f4c02e27a189cc8c7941ad4": 1, + "47c6a4bdd0bd870378fe108b444a31badb9b00fc819d3efd8060c7bd349a2586": 1, + "4e0139304cfb12cff0b6b18732f2264c7e6fa335f7a4223c2b1b7e712bae8d25": 1, + "5ee493c99b8729381640bb3279b4b4a772377a969db1fd13885c84b8002466a2": 1, + "725b753e5a7c7004faebd885f4f5499748a57f18c969444c07ab64026cc3fe9a": 1, + "7a585731419e2fc3178e3e400fed4d1d7de30447057b2c528ca0ba2255d06a77": 1, + "b3eb5e96b91991571b1300620c264fd98eb92012e379fd7fb79b45240ac54bbb": 1, + "bff8408800e264e3044cfa40ef1d28260012980085b7dcb8582a3c266b6278d1": 1, + "ed617108f5d1380d1967d2fc74a88943a50a6d6d011c2d2bb967509ab1d16f21": 1, + "ede13c63ae06f69a6b705f9ac9d3c0a423a2ccbf27ca1f68dbe505f0a374ce5a": 1, + "f9789f7a1f3832feefda4e59814134d84a386bf2bfe5839cfd25db44f08622ab": 1, + "fcd3a09b875efeafbf6f5a012c1edc45057537720b3231ef40f47cc9b2da959a": 1 + }, + "reason": "Existing state/cache filename, command alias, environment, package, immutable vocabulary IRI or live compatibility anchor." + }, + "docs/book/src/pendant-autoload.md": { + "lines": { + "117d2e9d2d532abc3ba7d9fcf649cfb44da217bc7d2c8e156dba0467d6067fc5": 1, + "31100ce1a48ad97f94477758d1d37d490c1c12b90e72fded9e59b645ad196ad8": 1, + "36cdfa6c7a164a842736631ca47d48225dc67505758e51575d1e12b43565a60c": 1, + "4061004344c6710b11b6a08e8b62d16937a42152ca62810f1a5d48ae80f44b8d": 1, + "746766d516d984f744082ef48f40f3a571e422a2551c74e1702b792cbc9a63df": 1, + "818834b9054ca9d2bcf8ee9c7319596262975073abe1aa84311931a0e58e33c8": 1, + "b02a5f55f750ea89e8611a681319f55ed06566bb5770de176b96f859092a4d74": 1, + "bfb70c80d7c39b60af459a888b36313aab01f5969d1aff8b17020fb276a7b91f": 1 + }, + "reason": "Existing state/cache filename, command alias, environment, package, immutable vocabulary IRI or live compatibility anchor." + }, + "docs/book/src/profiles.md": { + "lines": { + "c0df0d105abc608b14f69a3591686ead2689177f8e7c4e139e3da74583fdf3fa": 1 + }, + "reason": "Existing state/cache filename, command alias, environment, package, immutable vocabulary IRI or live compatibility anchor." + }, + "docs/book/src/reference.md": { + "lines": { + "30143c176427de58ebf33910bc64e03a20409d8acddc612c22878e5162f25165": 1, + "3b5ba02cdf59aa4cd42c25c7b9bcf48f55126d7f820c4dac21b5e97a06c84673": 1, + "4817a2bfcddcc37956119e98a6cd0b0a39613bf0f9566ff0e4eff622da453087": 1, + "ad2fdee438a2feb36d30b825e2bcc794669869aee616ff0209d55b0119ae8f60": 1, + "b36239bbb627eb399364f2d0c2fb6c5c50b0a6b2b17987d739bc1719a9de482f": 1, + "b6586ea0cdf6ac241991587f9ecfa0665ee3de455411f999300d618cb2ada8d3": 1, + "fe9ac650df72ae45a78f4d9a35bfc14e8e65558da37c288340c10f36445b026c": 1 + }, + "reason": "Existing state/cache filename, command alias, environment, package, immutable vocabulary IRI or live compatibility anchor." + }, + "docs/book/src/using.md": { + "lines": { + "0817cf1b81d816c9aa9fed79a1f8e95bddb3760a5d92fe37203b78a2b542c6ce": 1, + "0cd0bc56b2a1d6bf637c0d5a2b6395e83699932254d95807f2223e3e6a054815": 1, + "23768634934c6f43d3197f42fb3648f341be32ec867c2a9adaa4c9efa158cb78": 1, + "4b7d1aecbd93bfd8101c4bdcefdc3290cc90786202a7aece0c8ba9c0e12bcdff": 1, + "5588f9d69b267ea45cf33741e0881fb40dd77751696874a419cd7f382cf8bec2": 1, + "58f022da2d0e240c2624597212ce28d25fe8694e8230af5a8fbd9a87a8e3a4f6": 1, + "8e2b298f79af54652adb931e858ee851332ee8def33fd4aae9cf82fc512c9a36": 1, + "b6586ea0cdf6ac241991587f9ecfa0665ee3de455411f999300d618cb2ada8d3": 1, + "b724530d5b22b953c0e2bcf8ea40a88d417be3c16a9707709929b8a657b210b8": 1, + "d9a5c52932568ab1ea334748653aab543dfa09774decd77ec248a8444fe50189": 1, + "fb9d6ccebb9069108a8679319f58d9ba514c460bc07c6d99378da2330d47e6c0": 1 + }, + "reason": "Existing state/cache filename, command alias, environment, package, immutable vocabulary IRI or live compatibility anchor." + }, + "docs/demos/bootstrap-compat/README.md": { + "lines": { + "2de1bd69bc9f45776dabb3eec6cb1394b19d5f19c01fd12dbf7a951e1413ba5e": 1, + "602d23c7dbf7c1772457c30dbd6953405475dd863e03cf99296b1f55b82d5980": 1, + "e06a961ae2434636cfc13f13847928d630cdc3e9ec5efe867dabec02ba95cf34": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/bootstrap-compat/output.txt": { + "lines": { + "544d4126fd1fcca01804032678e93fb8ecb09822767dd750e76cb43e4a3c1a98": 1, + "e01589ac9f5dfb2d5dea049926d0bf47fdf8d430fc7e22fefdd72828bdc8d6dc": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/bootstrap-compat/run.py": { + "lines": { + "2974500fb8db815f998d3e2aded600a35a80eb63f941a1185744f040d0155b64": 1, + "2c57a238c203d85e02a813269a606a45c658968446445c0d28e9e3b22c3a9d1c": 1, + "669b94ae9bf33e35f39fda9697607732201a23abc338822dad91e172ea78d356": 1, + "d1e6ef630c0605ee19f2c134182f06bbc98a79ad229b07642fc782819d700514": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/endpoint-trust/README.md": { + "lines": { + "d9c65150f8c549ff6f8b4ec71213f6ce0ccccca1a805e1c931b2dd23773df598": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/endpoint-trust/transcript.txt": { + "lines": { + "991f76dc143a00f250a5a3b779b2755ccdb7a270449434df8d341d52c09ca8dd": 1, + "fc8460f813f868fe54d662384f536d09d20d6d7d88bee73149816d197597eaf9": 2 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/homebrew-stable/demo.py": { + "lines": { + "99b7bc46e3b62cf4e85fbf6a5ba225a45b2316e5a2df2e660603ab573ed6b7dd": 1, + "b3b486383f97d455a884e185d945ae718ab114a0c66242dd9bdadf7d0a328089": 1, + "b468065a8b1e5d6827c5f492a4331d3ef8c8d75d14f619e23e5393e4e39b9623": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/local-doc-links/output.log": { + "lines": { + "5e7de488c5452d69c2aa4bbf00fed2f3c169955653b5ee60d21a7c76dfa81be8": 1, + "a60a864cd2117e6742724aa55d24b82b8e5d7ae7ab363e654b1350ec409f036a": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/local-doc-links/run.sh": { + "lines": { + "64ba48ab83971ebd5233d6d06be75fe873072dae0169000cdb8e5411b0be4df0": 1, + "87a3b714997568a7db780816a1ddfe5034b02e526cb54a687c84a48ba26eb7c0": 1, + "ac2c9428153d17ace35bd3f00279f3d30c09e11845fad1d82b77b3a32ea34170": 1, + "c4c2b196128f17d1ccc9310c4d225cb2461bb96a6ef4e3793fa840cd2323f868": 1, + "d65616e419bffc7b49256bbbe5ea193e47d3bdac3e084ace2772535f7ac71e10": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/member-package-path/demo.py": { + "lines": { + "872f2ad81417ca7afc0b147ecc5b593a9a76e9c8631e5d39a7c76cb47f46da9a": 1, + "d1344922166b187717164d7708bac9916680ea3bb5950e0f2c407abfc6f1ddad": 1, + "ecaf3995ce368094b938e4a35e82a8a01ed208acf006808b8b5dfedd2111f9ab": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/member-release-verification/README.md": { + "lines": { + "6811ed718f833d863645fc752dde14e5528ee9b4739dfd5d6e263b37ee749fb2": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/member-release-verification/demo.cast": { + "lines": { + "b6a524f73b7ee0c6f74442daf0946397d2d638df6af6fa31da719e62b1557983": 1, + "b8082b47a53a322bf1c65b3b96f2b7c3fc480716ddf29b95274e553c5f13cac4": 1, + "d9c75f1ef6c1d13d4f6d8fb935571cb0538ed392a0e9ff0a0948565d687f5bb8": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/monorepo-sync/demo.py": { + "lines": { + "edce7ee845e1a75addd12bf28b69f309cffd20268f1ba04258b989b6552d87c3": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/pendant-sync/demo.py": { + "lines": { + "5e1d5960b021b4e66a06860e06fc40edb8fe4486b40ea4999d3f068b4b212dbb": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/quipu-package-pair/demo.py": { + "lines": { + "99b7bc46e3b62cf4e85fbf6a5ba225a45b2316e5a2df2e660603ab573ed6b7dd": 1, + "b3b486383f97d455a884e185d945ae718ab114a0c66242dd9bdadf7d0a328089": 1, + "b468065a8b1e5d6827c5f492a4331d3ef8c8d75d14f619e23e5393e4e39b9623": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/quipu-pair/README.md": { + "lines": { + "38756f757378ecfedb3189b171d57326aae86303ba2cc9f27106220807c565a1": 1, + "a1da702e4ec632295c1db728711d0d059c26ae6ea6d584f9963b574b16c30afd": 1, + "eac4a5815f83288950cdf3f872b88899bebfbf75cad756ac0aea5ca261ddf452": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/quipu-pair/output.log": { + "lines": { + "5e25eb5301461851b1f79db45818f903e9c0a365f05ed115632bdcde0af7eb9e": 1, + "6a78d9ca9a5236a4d5851b5197a3e4cb975a764cea1cb45daf06aa3c7d3f2460": 2, + "7f49a3fd6b2121ee1bf9d94ce2ed210be4da9de04755aa2607eff5cda1e0cbcc": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/quipu-pair/run.sh": { + "lines": { + "03c18731ee72dda887268a2767122e677567f2d6a2e0f7ffdd8ca04f2c96f3f2": 1, + "5e8a5572cc8fad7920511a4f697b5848faedf912a0bdf164d299f5c3203b3bd2": 1, + "6c7d17d8f7ebb20cce7682960d809775e285d16a855b0cd00afec29061b1f2a9": 1, + "7b30a3268654a72b2fe9f5c5e97139ae66c215695caf44c018bf563bddb34026": 1, + "afef5ae2020b96ab06d7bd1e6aeed253554145fed88a826368c35d71f3f5a84e": 2, + "b00fac35b4c0444563005aac149e6ec11dd54bb8df211bf1b24650b870f74308": 1, + "b5ccfcdfc6fe3cccc560a406890c2a1fd664c488b95f69cac1e0e53434ee4ec3": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/stack-overview-prose/README.md": { + "lines": { + "e940348d55ca5221e86905c8f5be6ae32168a1245ae1f2d5f0929c56185f5850": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/tambo-rename/README.md": { + "lines": { + "1cc238d8b07aea39f9bf759f521946c87f2493630a23c176055d86d47915143c": 1, + "22e4b737e3833c83ac3e7b05c0b49f7a0ade143652834ea33489830e1a4f8d4b": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/tambo-rename/before-targets.json": { + "lines": { + "18c859e25c4bb37946697285728fe4ed8cd669c237a71390a890a7ae9667cb76": 1, + "81eb239fd488ce5d106ae5e8bb8a40ff6c46c776354c6f27031cdf53414b53bf": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/tambo-rename/output.log": { + "lines": { + "18c859e25c4bb37946697285728fe4ed8cd669c237a71390a890a7ae9667cb76": 1, + "28184dd2f109510aad9d99ab2cfef79808487170951de06b5d6c0743066bcdbb": 1, + "39c93719188195e1456cbe850f1a2cda22c0f980a65b62fad1788159eb2b47e6": 1, + "81eb239fd488ce5d106ae5e8bb8a40ff6c46c776354c6f27031cdf53414b53bf": 2 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/demos/tambo-rename/run.sh": { + "lines": { + "a2ef59dc24f056fb28097890d36f674d05fd40dd3d5a792ca031b20124a6f998": 1, + "ccf540ab010757024645a731d9d1aa3866c41f59dd30b4b76cb2a6126a96aeb5": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/design/local-quickstart-demo.md": { + "lines": { + "2c433bca4b3fe0b33d91243d27827da11fa983d62659b70c305f44e28c45c6f9": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/design/skill-profile-selection.md": { + "lines": { + "a20eb4c92699cc6e2fbdc4b2562a21eb8833e6e7d2a3198ae380c05f53c7f282": 1 + }, + "reason": "Existing caboodle library ABI in skill-profile selection design; module identifiers remain stable." + }, + "docs/design/txtai-gap-analysis.md": { + "lines": { + "78e056c5da92c50ace032517ed488ea313f778c6ce689d2aeae0387a19824a0e": 1, + "8e34d0d432f39c7bf4c6919b08d5dd7d2cbc6744089ce21e84c42f8a1aacacbb": 1, + "db4ddd478c27478900ae6314252a076372f26b7ed1c5528fcf46c4a7cef7afde": 1, + "dd1abe2439b8f245cba5ddf4b2cbce4a027d043e0a12540f4facaf339a5249d7": 1, + "efbac24bd1090d916184cb6055166748de31bbe8f951073b1f110d54f483bffe": 1, + "f317fe0f20061e04ca0df9c05340d51772d9ab9c088faddb8567b2c062dea58d": 1, + "fbf6fa446b58f916f3a7ae53c3d980f49813cd9208c48f029658ca9120df030f": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/design/vision.md": { + "lines": { + "235f0a6f388ba63bd1012b7a3d3e468e7300bb228a7d1857db81e117db38973c": 1, + "295e08b411caa331cfac0732c25e6d0cfbb2df3f5d38b4178111fc68b54e083c": 1, + "3097a2896fd4e2e55f29b8419054b11b4c90a6a0b3acd73b64cfd209d253fef9": 1, + "315ce858f4cff0fb52a9d6524545ec8530d2102788dbb37c09413e37ebb800e4": 1, + "3c15ce1d32b78c8e0d26011dd09f3e219dc11bc6fc3e8e3c00ebba2d29f660fd": 1, + "421677f1f493454809361033eebb89ae75a7042c365ef77307dd2b83d2c5fe56": 1, + "431a40528068d878b9dd08727bc60a231b33bf88da747f779f1a77a908d7c179": 1, + "5343a2bf99c0a3ac353b8867fb3ddea2580e73db5506ca1a1d250383202a5cc2": 1, + "5a3c4c846e61762492eaa35f443cff2562e96d7ec73214f4b88e749fb18021d8": 1, + "72de4c4d0d538c9861028125173d5966c0f683ea345de9be538f2c7ea847c37f": 1, + "76d9fde6f2acbdd86af77c37e43f6fde1280fa670883c62c78c7931717ea9773": 1, + "7b81a925e738dbdb9080cd5b9fd57951a1f691924b8c2c6016a4f3560df2f33a": 1, + "7c6a91d2ef134a301e8d082d09964bd53cc56e1326726cbb931cbd0568e3260f": 1, + "80ebe063b1d7302c028f3949ee4c98686bcf5ce9f4b25f1f1ef6a455ec9219d7": 1, + "9d3a2f7aba1410274215b2ad36c6ac156ed9d3adbedadf150ab3ebb319ec1b57": 1, + "c5e65255c39b47e73bd8e52e8958b537176946d27fbbfc4e3903d907579c41e2": 1, + "c85c3fc093d7fda742e3f9d8a9db6fe669dacffe828dafe228f49050785f9b95": 1, + "ca07b425512c6323fcc1d762f65b447ee8084edddc24ccd943e26266698334f6": 1, + "e7ea7524f00ef2547c9c12d3e817d43139ab0d94a5a54d36237d7ce13086dc9b": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "docs/knowledge/repository-knowledge.json": { + "lines": { + "12434b0bae9d6239cf06eb190cf3554c679e23b783ebfde7c58c7da031b720de": 1, + "2377db69c04a8c024551d1e8fd4b0e63828e5528940f720264a7c1ed84bb83dc": 1, + "8d4726ac5d61fb94a8218d5d5a317f9b76529469ca6fa39a3d3cf1a4fe379789": 1, + "c0da7dc970ef6eec67dae9aba667decabf2c76abc3cbd77f183280a93996f49c": 1, + "f9767e16bc058384c673b331f3b3cc8f982c02b04e58d0e3eff693ddb1df9adb": 1 + }, + "reason": "Stable caboodle intent/configuration and Rust library ABI references in source-backed knowledge records." + }, + "evaluations/text2kgbench/config.json": { + "lines": { + "70b0ec44ce0933c374bc467e9019225e67d2e0e306a52c9c7fe2709e13eca4e1": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "evaluations/text2kgbench/full-manifest.json": { + "lines": { + "4ecf5a5704fb9b583828cc218e3d07534cb8316875c66515d3e00726759566cd": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "evaluations/text2kgbench/reconcilers.json": { + "lines": { + "da47eebc16c39d724472cd065c10a8c6284fa72932bca7156ba98767f51a3cc0": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "evaluations/text2kgbench/results/2026-09-03/report.json": { + "lines": { + "db7ed03e94792882364424f2dbd8a033f6377994ec81c8a7af70c45f1945ac2d": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "evaluations/text2kgbench/results/2026-09-05-claude-code-l1-smoke/report.json": { + "lines": { + "4ecf5a5704fb9b583828cc218e3d07534cb8316875c66515d3e00726759566cd": 1, + "82d10a67ae0c2b17ac96ba24eb007958689803d2a6c7bfed2eb988b2d25bdc60": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "evaluations/text2kgbench/results/2026-09-05-claude-code-stratified-1000/REPORT.md": { + "lines": { + "2fc6e85c635a7700f504c4a2b92c840e4ffd468296b1bbd9a875e18dbed020ae": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "evaluations/text2kgbench/results/2026-09-09-parser-replay/REPORT.md": { + "lines": { + "37fcc9e5ad4060e56b5d4110679a7b327eb49542e965444e68552bc8d0fb5384": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "evaluations/text2kgbench/results/2026-09-09-parser-replay/comparison.json": { + "lines": { + "27454b9c164eecbc1b23300fa4bc79f42a6f148a92ac2506774eb73802d0ddba": 1, + "a5a82ab593529cdf8bfc0dfb5bb33f55e915eb1cd6604e14632495616df6bbe9": 1 + }, + "reason": "Retained historical records, demonstrations, design provenance or reproducibility fixtures; never rewritten as newly measured evidence." + }, + "examples/caboodle-intent.toml": { + "lines": { + "03530b66be1d5fcb8a3a2cbef627ce294eb9a17e766a4c7b74b735fc707c5608": 1, + "3009de9c9c308101e41be95fe83c4c695c78becd52ef9fbccb661582559cb61a": 1, + "42fcc7b9e8227bb7bbbd4352a4fa4c4d013aa57537d98557822e1ed5b696d16b": 1, + "4b04e1b65ad0e22f40bfab8416a20bea3eb5bc3f44635cd3c8fa27d50b143533": 1, + "4dd7521edb2c23a17b20aaa7973ddd3e22663910a2e3db5324ff0efaf1bb10ed": 1, + "54ceabb38cbe1e51219f107385ea4c7b6dc41d2d54a7bd3cdc978b8b1a628f07": 1, + "600db61c58aca4b7323a8b1b3572e2e84627dd09236287af51840f4f66f115d1": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "examples/skill_catalogue_query.rs": { + "lines": { + "e7e573e4a4ee9f9b4374a54659450aaf540fe3fd29b881f75b524077531817f1": 1 + }, + "reason": "Existing caboodle Rust library ABI import in the catalogue query example." + }, + "examples/skill_profile.rs": { + "lines": { + "de93692ddcdb66ebe93aa46adb46e12e1fc4ecf65c54d9db64c3e15a6ef045a3": 1 + }, + "reason": "Existing caboodle Rust library ABI import in the skill profile example." + }, + "hook-bundles/bobbin.json": { + "lines": { + "8691bcba7add74aa6979e51467cb03aae623b2bd4ca3792ca7825cf27b77a220": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "hook-bundles/desire-path.json": { + "lines": { + "a54719af982dd8187444a828bcd907919013a22237f1340509f3dcd62cc49a0a": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "hook-bundles/quipu.json": { + "lines": { + "8691bcba7add74aa6979e51467cb03aae623b2bd4ca3792ca7825cf27b77a220": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "hook-bundles/yupana.json": { + "lines": { + "8691bcba7add74aa6979e51467cb03aae623b2bd4ca3792ca7825cf27b77a220": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "install.sh": { + "lines": { + "00f024e0d74fea357750ef49522ff4296430e3adb3331874dade76e67abc0fd0": 1, + "08ebef1b53218c06ddd00b9d4f2fa91f4608b55dfd3766dc49844dceaf403cbe": 1, + "0e63c63a198d94ef32c87e435da5f337c92e4cdfc6de8d6a587f75e92fdb3edd": 1, + "1c8b7c8f15ca06a2c7e602f6b5b00c25da95922125dc830941557d622f9f3b47": 1, + "49a1fa5d35d7153d9d7d86b60055de6f849693888f6c7cba4252ae9467783ba5": 1, + "4ac5bbde7c7ba9da35d63e69a5c549a5e7bbd32570bd0262600a2f948bab56cd": 1, + "5e984d0541aa19c66adb136ae9a6c21e19d58e8ce0c5b90e243dad5421c20e78": 1, + "8a18f2984a08e555400976850c7ab616e9acd6baf8a6de069079a95877523fe8": 1, + "c4a70033b2995a3e32d5689c335c873c6fc0e4e390d6110fa35a4621f3709489": 1, + "d85ef8e737668b4a67e8bc0ef9f5a54022810c1275ee4605babc6413c8cd5d47": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "justfile": { + "lines": { + "3da74dd16513be7c78eecf114032bfdb0229a0d318f9ea2b95624d0634557d9e": 1, + "6c890079e8c1176add647e68de754694877436c03a3b5b0bf26d77b411e97643": 1, + "cc50959b37b6d72e061107ad80517ee304c962c98204a43b1f16c1907969fd5e": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "members/README.md": { + "lines": { + "56afb8c00fa359f3a755dc4a9d2bd22f01e0d3885d0b966ef978f49503482ff0": 1, + "707fce6076ec289e14cc6aa70bcc91ee167d0dd7ebbeac656cd4b9129ebf71c3": 1, + "98a710e8363f38e67420be9b344e2b8afc92436bf97720ad3829f1036d1a058a": 1, + "f366652c66bc9d82e0defbf6576d1faa3fa9963bcace753c0da428ddb207627f": 1, + "f6889b43a0f61f660ece9f2a4542daf74f6aac0f53acf8285bef4ba0a9ef70d0": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "members/chaski.toml": { + "lines": { + "a436dcb5b1ff0daf3f68926cdab9f83b4d1bd46a98a8bb2112736775c2d5a789": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "members/seeds.toml": { + "lines": { + "bb70917b1c2755f4dce66907a09c81704896d19eed67078f9a3726d6a28dba02": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "members/shuttle.toml": { + "lines": { + "081df8f8a7e8ec2c71c095ba52a65fe787932a3ea99d0f2d3d37780fdc6d0cde": 1, + "5731ef8329766007b3ce8bb88e44ebdd963e548d8c869d8c0a2515c5434b28ff": 1, + "c4d7b50107f1f1baef9626e9e19c9a213149f617552fa767d61aaac257ecf824": 1, + "db6b50f9e747c353d9a9eef8e70ec2b0d0a57a6a3b119ebbab6c912f380cce17": 1, + "ff12ff01ec76b14461f819e071cfe53047ec131107bb47f9890159e9d504b683": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "packs/policy/identifier-policy.shapes.ttl": { + "lines": { + "351780684e0a6c1018665a9b9c18c2fc63a40caa594aa8ae8ee596f25f83c4f5": 1 + }, + "reason": "Immutable vocabulary, graph and subject IRIs or verified text-share policy metadata. Product labels and repository links are canonical." + }, + "packs/policy/identifier-policy.ttl": { + "lines": { + "43110334aa404eba1903bea88348c836d571844303f5cc66bd37cfee1cc87a76": 1, + "6062101191ea6420f4b961fa3654333b1475f01d22ff6aa2d26febad91d1061b": 1, + "a16252ad645d0600b611cb7f31781eabeb36cc88002127abadd9b70910c62ac8": 1 + }, + "reason": "Immutable vocabulary, graph and subject IRIs or verified text-share policy metadata. Product labels and repository links are canonical." + }, + "packs/src/stack-map.ttl": { + "lines": { + "157f6fd0161372e1ee2f94aed010a54aa316b616f44d6bc3fd6576f9ca8c7f3c": 1, + "18cb850492bf965a89c245fe7405c31bff2277b33a787437bfb7a9d76af6b9bd": 1, + "20ca8c5f8c9dc5b8a53c17a94484f082544c72fa3c7202fa433146d805ae5259": 1, + "337e42294719a615743c13a9e6a010368c324a0fa0e0ca4b18045eb32d92e39e": 1, + "344228d39a64d17a47ebf81c0cf97ef7770e164668e90c08e5905bffd7980db0": 4, + "3b96efcf1f18e998b9dd3eb1265dcc7c77d6864e8015fd05cb751fef682af3fa": 1, + "41d110bb017e5f97ae2308090ea3ee5d3a5063948b35eeb9c1aac43c11b1ebf7": 1, + "4de3e645b937f610f98b1062f625315ca6d88469a9461a66bf86c896a978773e": 1, + "4f1d7e1d092afeb4aa5500f017e0fd972fc13f0b523dbf155cbb3e549a0341c0": 1, + "4f4538ad08ec05ac2c0450d6d8efd724c1419f91b209e5141e226ea6fb366c29": 1, + "563dfc1413372adfec3579975604fba3681afcab15ee21e78d91f08949a6c302": 1, + "570118b40ce452adfa1dbe3c68fb4266ea263518017f9a174511074caf1d38ce": 1, + "5953d113ab8259cfd22473a5ed939588264a4b4ed7dba9361299af843c7d3346": 1, + "6cdd65d688a68c7e505d60092d730405eb0830e30ce49211443081ee11d0ced7": 1, + "8cd6ffadab7eaeb0c05a56d6955ecae0ee819e2138f824de4ef05601a83a4d67": 1, + "8d1b91e0c4cc1d51747c1309bde515501ba441a421fa3b89495fd74a2b463502": 1, + "8f2af82b76bcf90ba4e9afa9b4c4a27cb4ab1fcc7bd3509b40fc48e641f7d5ba": 1, + "9137fb73f8eaa85cdd53f5ace2a75a50a678c8870975618d0de46dc21962bce6": 1, + "96baef1b4b196d54cfaeda220eed3ec762bd2db38a704c0e566ac3c0b2084bf0": 1, + "a2ae8bf9f88c9f68b81185332523112123d47646b2a7f9419866aa43965a98ea": 1, + "ae4fc07f1348d1d1f0a2309a5b5c9bc80e608dd7b5bc96447a7385616e5681eb": 1, + "b18f3ebb6ba799a57b758bf670e68be8364cbbe7cd0ff76c3c100c25e9112c3d": 1, + "b8c74523578722435e804645ddfbb1c9461af76eb7e92df609ede2b1ec9b1e06": 1, + "d0002c201af5c77b18e416237be57968c128f786e792255e642853021c52e456": 1, + "d143570609d351fce25534a5cc874a2b59b13fca39f2a8b338188bf6464e588c": 1, + "d9bc4c3c40c6a4698d13010c3e0908b7084a89bec6957928f31bf28c71a6d8ad": 1, + "dca93c5c63d9a43b765d979a04dded060f03dafe609e282e37c7b4dfc24cc6ba": 1, + "e610e7db598d73fd43ce631978ae390dcf75f19c001a1456c9ebf41ac5821cd6": 1, + "e7cd91634335fb162a904c1c3ab9d0ae0d56ec8c37dbb7a4069454f5194cb45e": 1, + "e91322234023cbcf7b5715426345f9b27c7c44aa4bbb7769988d36e9656432e2": 1, + "eb6aef9d8ef29bfc89654f2b7b6ff3da99547228c000f722e048fa96e60285f8": 1, + "fc242c9ec82aab1869806b15ca40bdf6cf27275c20344ebd71c435e8dd4d2bc7": 2 + }, + "reason": "Immutable vocabulary, graph and subject IRIs or verified text-share policy metadata. Product labels and repository links are canonical." + }, + "packs/src/stack-operations.ttl": { + "lines": { + "025ad56e1a08a4b630b912e9d55b8c907ae5c2ed3e6933d42b836f01851b3b43": 1, + "038fd19337eee3d36f796bf27d5e835c486f1db3be8b91309f5063123e99d550": 1, + "06637a84525be237b96445cfb258a6219132445077cc85e04264effedcc9243d": 1, + "123bb9283b57964eeefac32d74e047f3c688ae17076f3fbb766f5b1e9ef2f485": 1, + "16cee0b7c360efc7e93c8b205c3627ea93cdad27270f784f9a23d182d690866d": 1, + "179c075df3b99b9c97c528367d320874f40687334317f02d3e5c948b559881d7": 1, + "365abc52ccf8b023fcd21fa306f8c130391894bb265bf32507c2ca111ea441ce": 1, + "4f1d7e1d092afeb4aa5500f017e0fd972fc13f0b523dbf155cbb3e549a0341c0": 1, + "52d5d9d3e94ce1e264e83f4aff70a3aa46d83706ff6d51dbb3bed686191c9dc8": 2, + "7ffaaed4d69f2ac62e3247cf232cc60d58b37347b6e81f93d55cdffb895a4cb9": 1, + "8f3929c65d8e3238f18bee0874ee05e49f76062293ea360e710fa00364b9c8ea": 1, + "900630abf0290662dfcd60ff8ba5407f35cbdfea59b9ef287a341c2b5de9db49": 1, + "90e99d6151daccc9662257152e5805f6f0c648d39800a51e9e4f0b77e08c2e28": 2, + "96702815b37e3d02b44d7fa767fd353a6d00249b611db1325810c3f4682d353f": 1, + "9d37d341ad539ef776afb8cac7e2b5e800bef3c640497dc8fc1bb651dc7fabd0": 1, + "a010d921fb1298c3c9f16a58ee941563ad325fcacc775076bd4b68bf5b7553cd": 1, + "aab5200123d608eed6baef7c3f7a555ba9bb72db27c2647b7670c8959f295058": 1, + "aadece36429ad16e51d10644dc014c6b8d5c4f9a60c3a066d05d7284c27f1cce": 1, + "abfa3e1b23349871b74525eaf47f61fa9e7c3f0c81eab3ede71be7e7e130f966": 1, + "c02eb05ac976e42eb80289b3d5b2bb5396bb1a6bf629648eed4bed4fe8396db2": 1, + "c9824c45ffef56979af935ac935b68f7aa99fd9d623afe0043b15a3e01e804f5": 5, + "ce4c6ca031c85d6de1e77be7a7b18abbe8d9b62bf824ecd6b9ea3b4cdb393409": 2, + "d009ee777536bbafc609d167563b91b29949d6482cf04e2676f46d21cc44d797": 1, + "d3703b623123903fa74ab8211eb6e54fc0b9e48ef79c3c062330c69db3661a79": 1, + "dca93c5c63d9a43b765d979a04dded060f03dafe609e282e37c7b4dfc24cc6ba": 1, + "df8249d7a6d7a359606f7f8ab5583f8c5b8a6fa2147687bc7841566528fd6251": 1, + "f21e932b271da6a6978829be92f73e8f2ec5a417b1f517bfceac5853856b9ca9": 1, + "f4e1ad5e557a1591aae39b006b0637cb3bc580b58f02f2d835b014fd4e1e6704": 1, + "f84bba92ef2c787cad6c418fbc1bf5c56140dd65fbdf48ba53047a3bb22b418c": 4 + }, + "reason": "Immutable vocabulary, graph and subject IRIs or verified text-share policy metadata. Product labels and repository links are canonical." + }, + "packs/stack-map/pendant/export.nt": { + "lines": { + "02db0a76e9bc6fe25e53f1b06fc235e644013ae3f2ec4e44ee0a78b6ec5f5e26": 1, + "056b5874d276a2c477a93e148fa93c307181c6ae5510c2dbaebbd51ac23cdf3b": 1, + "07e7c337d7adbd94b902ab8484537f5dd02035b4303e06d806d576d58dec390d": 1, + "082d7d1510095ea144a49691ed6e9704de1e9b64dc62b954e4bf86b315fb5484": 1, + "0f35125ad84ec3eec2d7fecd343ecbb110cd881fff88d282ba4598c8f2c2a213": 1, + "0f8924bc5543d114da28ed7addc44f3e967d48936dfd39017016136f61ac2a05": 1, + "127c3c4cfab0c23673d561e1892fee37548c0ec8f60d920560fbb2c7e26db23f": 1, + "1970672b830b8a648a1e9c7449adf49a95af7eaf11fdf7e4d5ab778715319f8e": 1, + "1b95c7db4d91c41137ffaed6614752b8d411e4914d1196fe47e842d3a5e31e06": 1, + "1cf11d81088602ed90c50dfe20c622c54989a45b3c16f4d73c8f2b185e9dec9e": 1, + "1ec8d6fa68494f61a46877041d30cd9aaf2b6fd7c08cf279799009517db051f8": 1, + "20a8719a500753ed4db5dd6532246d94b1e161e38bb1351f2cfba1cc55ea58c7": 1, + "2788d57936857ea590c1821cb93d23f757e3bfad0f6d0db80b447aaa1ef8e985": 1, + "2947996ae543c3904548ebbb40e8b77f25cdbc92ab9458275016641ad65d27b6": 1, + "326a54af7d8c12f259a6b53cfb4ae901622e8f4d7dec35e3eee7dc070c6d58b4": 1, + "361f19d068b9311257c24f741b861031d9c68c87f0893becdcc27f0cf3c42e4e": 1, + "36c84c8a1be8348722a6e103413fb4436e1a45b39f188211c88769688a0fa5b3": 1, + "409b84eecf2620a6ad7476c00543fec69caf19684e3adf60274c9d5fffa5b2eb": 1, + "45e128832609d54656901245395ec30cf0af948803e9531e4fbe953a58216292": 1, + "48fe144ebbc27f08118796ccf08f0bd033ce0a4ddfb89a2f20fcde36ef61e8b6": 1, + "4a5b7ab3631a9f23469d9345e9e8d96af63b482ebeb13831e653528b6c304596": 1, + "5448b1bd490876063e6c3c9d8fafa18bcbb5be56176ef5628ac980cfd19cbfa1": 1, + "5e5b8dd599fd0198cd2850dd1e7ee69b3f4a432422b324fbec94784b50eab1c2": 1, + "62efc77f97fde011cca11ce89b50b250d7212498634fccb4ff458a0782eec85c": 1, + "6700de300da9fdbd0674b7731a5b6cb67c1b7e2882269b5d3d8dee51d4306e42": 1, + "6d8812620952013c178fc565fb1fe0d8bbc12cb94dccb8284dd92495cbdab076": 1, + "74f8ee0320b3179c8c0f7252da0730267afcbf0d5a7861cfb491511bc4c2a33f": 1, + "7c72b2460508800bd1571470a0fce5a4ee97c3cda107714283cc8a690341ae13": 1, + "83f3f3dc8e6b868c2a417c891bc9010950dacbf7425a0152227c8ff210f2af4e": 1, + "8e52851b561772e2bc285860bb8de3029833613c969e4813faa7756156fe3765": 1, + "8fd0d11171f911d9e53acdba7404142b091998bf9bf0cdf5f297eff522f0b238": 1, + "9410c2f94931ba4813b3738c63081007a0ae6a3b046e5582727f8f59c0cca038": 1, + "9459620e9c6cdacededca9e19d585e4b7ec04fa4fae62ab57a8b52cdb55f24f5": 1, + "9965a22c3a32629787291c1fe55905da81a12a91d48fba2a0a34e145e94f8903": 1, + "9d3373a0bf2b7b18d022c67deaef456f09ab2cd500264dbb2f1b0ba9293892df": 1, + "9fa675b985db97b96c191374797955f5d381437e1b86b0fa4c69425127ef4b81": 1, + "a21557f8ff8657963263f459fd3144de7d0bfbef706ea2a952762f481a052a8d": 1, + "a4d10f1f722f73c93f2a8afb639ed480e6eb81bbbcf34bb926751b2e9db849b1": 1, + "a9bbd23f6614661f7d3b2803a727fedb8800b95833b93ca515cced3018d4f9cf": 1, + "af8abc7c772969d1a2a208e97f391a02474794708ab65f66d70449f2bfbce8db": 1, + "b88a654c9bc0c8e4f6f68e1764a41d35326dd685a3fa5677962889219ca07d19": 1, + "bdf7541835b7cc911155fcf210f30de07d8190db50c67274572563def0e59394": 1, + "c2d975ccebb1108fd60d0dc69a12c97768d3b46f6d2ee6bd5ba42713f0ccece1": 1, + "c6915962e48acca55a2dc4436dc20a2478ba8e0b05bbd204ff050bc291629cfe": 1, + "cbc9f32dc69b03c81c8733dc11b12894b332755b51505714fd19e8aaca98b299": 1, + "d01a05066bdb2df00b6f0586153551b6a0a44e0994120eb6d5a4b72913195ae5": 1, + "d0723e7cf81d9d0c4cbad0c9aa65e3f4741cdfce0edfedd32b65112214afca7b": 1, + "d113b0728e236ea7d4c7db7379d7d7dd9d68c093fcf018f18993b60e979574b8": 1, + "d1a120da338f9486e178b6a0b69e0d6b17f7142b7fb0f93cdeb8f1d1c57d7e8b": 1, + "dea0fe6100fcb14577caf2414872a6bc36cd98fc1579188a00ab2796b735eb00": 1, + "dee082edf402e48dc1294f6575c177b40f335c193eb2766a5f5c8c2080026131": 1, + "e1645b82f1ebb6c7423e330ed54d9b6f0c8114b7124d925d61b6b7d6b290a30a": 1, + "e6eb2d0d6055571e5ffa7de309e3d7879b75279ba42b1498f0d66c58b84b4545": 1, + "faca085dc719214583137ed34ac30386503e3a0e98b0856b1292ec5e02dc4a28": 1 + }, + "reason": "Immutable vocabulary, graph and subject IRIs or verified text-share policy metadata. Product labels and repository links are canonical." + }, + "packs/stack-map/pendant/manifest.json": { + "lines": { + "70a949172e1f37fa6fd0e6f8bde908d0c8e275e3eabca4ac3767a5b336631b58": 1 + }, + "reason": "Immutable vocabulary, graph and subject IRIs or verified text-share policy metadata. Product labels and repository links are canonical." + }, + "packs/stack-operations/pendant/export.nt": { + "lines": { + "1074cdbc2e24e8b0a92258416772ebd3d296a5a239700b78241716dfac5144db": 1, + "1fd9c4ce07765d7a1398e17f65fa9dd6a5a1a4f69568142862311bf918ec1c0d": 1, + "20a894038fcba25930ac996c4410313729d91454043954598e8942a7978bea0f": 1, + "28131a15c2ac1e6264997eaf2bde8cbd1dceffe6d8f1bea87ef69444e2339bf2": 1, + "2f323dc8796a3d09d1a684bfcecbd4d43bba7523c412c25571eb3338d7d7fe3a": 1, + "3826a6114def181fd45012379f4cec5224a802115b8e1a922bdf9dd880732ded": 1, + "39ba3c2c7941aa74cbb0e1b4409d84c7350e36a61ee7741f6ad3493f896f2545": 1, + "3c3e4c720e8c8b12c24b4eca4741ec4f4799427601c65de9ece4907093b7a5d1": 1, + "42c7a94784966d74fdb2bccd6f007e07031772b847428dbb92137e9342f66f49": 1, + "43ee0c0e7c0f697202b7487655a111ce107af67bae0ad207a1febb3f83c71e21": 1, + "4f3295041632d92fd11df6d0abe48cdb88f602f8e67c7929ea8cf792746279d5": 1, + "5ab4dd8ab5feda2e4683871b193e0954df9739914257ea86f54f22101d5b7122": 1, + "5d1291f599a67ec27bd60827b749cc82d4457f8ea7dc3032f5681e33199440de": 1, + "665b4c4b1fee08c831a443fcf08ef913a0289ade6f07b698271c652f126a2522": 1, + "6b7dfa5855ac7243cb3fe3b67c284b6254bbbbfa13d7adbf46dd31f2712f1f3d": 1, + "703ccb79f525cc6993c7324a04483a34f396b323b94c9bc601cd3b35a343ce79": 1, + "7c7990d3ebc5d1aea6da954d16d48804a7996564cc11c8a0a817991dab10175a": 1, + "7fa31467fcaacbf0d71be163f27fa75c9a9670857d97dec44f7ca0323a57b8cb": 1, + "80332951d635f6d4ce84dd6b5be7ce7b61284ac49d99cad4d47e274e7b92375a": 1, + "8abb73f3f33dfe3ac7ae5a7719cb956c2b1e7589bfeec8487ad9813cb9cf9eb1": 1, + "97701d60caf212c48f72aee50cfc94c6338cb9ad555c822edc28f0d2a3914edf": 1, + "a213e4780cead393f0d6dfdca308de94b906a0e6e8fd719160ba125441aa4600": 1, + "a4fab78f936c5cb5d50d22a1c7f2db0fa85ff019bf41b8e321fa2a5025553143": 1, + "b526b3d430ec75c205ea9828ae6880923c940bc2ea5e01cf3f7a5979a6faa40e": 1, + "bbe5beaf4315f4f49d741825bdadef7a2058f27a5840fa7082cc92c5e2b8e883": 1, + "c3e4c207f7fd087941676f71ed47682309878bf73393bf23d278be694762de5e": 1, + "c8684028bc9254495ad65b4f439e37c4f320d72470d62eb21d0a3f5662f7c8df": 1, + "c94f10fac318a57c20ae5f8d50789f7db7a6a69df70d7a522f3a9bbb1a129c7e": 1, + "ca682abeb13d21e890bc40b68c2103bc740a916065db347c99c0bdcfe4f45039": 1, + "cc881e0c85666b4cbf3f0ff42ae9602e627494e5e472d4d23c03597748e564e1": 1, + "d2da822fbfcb743b92daeb4e9b163a347c18b5dbe1467577f01343e429433cf4": 1, + "dd5e4e8199baac82e9957b301d51e515d7e4ba438c26ab4583de957120f788a5": 1, + "ddd8125076ebfbe31eea440879a84af95bae914890c8d22c4c534456fdd5633b": 1, + "e6decbc9b4dbabe8f14340b3e15547cf594fdd398fe1f333ecafea88680ddc51": 1, + "f7101a6958a05b45effb739f84c78e2c7330ef4a8dc91d6f874d756c02b69f59": 1, + "f9fdc2853014c30a000e6d77d90861f7628e23efcbe677e61673eced7c520d90": 1, + "fd76533bf2b6bbe455008fb97643226f048044b1fc20ec85fae002eeb92808cb": 1 + }, + "reason": "Immutable vocabulary, graph and subject IRIs or verified text-share policy metadata. Product labels and repository links are canonical." + }, + "packs/stack-operations/pendant/manifest.json": { + "lines": { + "e92f41999f55f95b8ed9a13ad4d5982771786cebe81b654fef354684ad9cc75f": 1 + }, + "reason": "Immutable vocabulary, graph and subject IRIs or verified text-share policy metadata. Product labels and repository links are canonical." + }, + "queries/repository-share-tambo.rq": { + "lines": { + "a11a91a4d19cab9d64bf84f3b9ade47fc5d15389c8e4395a3608ece93a454a37": 1 + }, + "reason": "Existing repo_caboodle graph entity IRI; source renaming must not migrate graph identities." + }, + "scripts/build-repository-share.py": { + "lines": { + "1c4deda2a7f13c65e15044da0004a95ecce77886497411a4a65e0613e4668f45": 1, + "6a692b93eb125909349fff460af33b7855ec883b3ae641df7b40f480929ce9c4": 1 + }, + "reason": "Existing repo_caboodle graph identity and provenance literal in the repository-share builder." + }, + "scripts/build-stack-packs.sh": { + "lines": { + "228edbead24bc2586b7cf6e304072337a53d2aed956acc59a0619ee6f78d17d1": 1, + "80de118acc1f0311023e07aa1a676343eb92fdf41a6d410a6e8040fafc17557f": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "scripts/check-doc-links.sh": { + "lines": { + "81d697511022975e874278a04fa587660a3eea907fc863eb942c1d412e758731": 1, + "d7e6850eb11bd166507626a50f38efe6054bb8ccf7a13e79747409df08cce125": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "scripts/check-product-name.py": { + "lines": { + "158c3f5ccb63078857e8763a7e1728de2649c5aa1a07e05742bd268900c2123e": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "scripts/check-release-assets.sh": { + "lines": { + "0ecfed6c40a8fa46f0894129e9bcb934e6aaab6ba3e5e5a54cae47c3892674be": 1, + "5855e594c33a028c83b35a197f02932bf36197791ccae70c6f84c0946a201c83": 1, + "65d2461da9458eab9c9869cd43cf7a3a11a82845b18c42d8a2ddf280b45338ed": 1, + "9f563d71cd1044d3f9b0c32bc26e6edfd20832c25ea2b239f856a326e72a31c8": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "scripts/check-stack-table.py": { + "lines": { + "4a5604db68e18f2b3282a40d88cbe90c3e997d2fd57aa3656ed6aacbc8aa5614": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "scripts/generate-text2kgbench-manifest.py": { + "lines": { + "4e27c0e05ac8c2903701a673710bc08161751e506acf9049b2488515c0516242": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "scripts/install.sh": { + "lines": { + "00f024e0d74fea357750ef49522ff4296430e3adb3331874dade76e67abc0fd0": 1, + "08ebef1b53218c06ddd00b9d4f2fa91f4608b55dfd3766dc49844dceaf403cbe": 1, + "0e63c63a198d94ef32c87e435da5f337c92e4cdfc6de8d6a587f75e92fdb3edd": 1, + "1c8b7c8f15ca06a2c7e602f6b5b00c25da95922125dc830941557d622f9f3b47": 1, + "49a1fa5d35d7153d9d7d86b60055de6f849693888f6c7cba4252ae9467783ba5": 1, + "4ac5bbde7c7ba9da35d63e69a5c549a5e7bbd32570bd0262600a2f948bab56cd": 1, + "5e984d0541aa19c66adb136ae9a6c21e19d58e8ce0c5b90e243dad5421c20e78": 1, + "8a18f2984a08e555400976850c7ab616e9acd6baf8a6de069079a95877523fe8": 1, + "c4a70033b2995a3e32d5689c335c873c6fc0e4e390d6110fa35a4621f3709489": 1, + "d85ef8e737668b4a67e8bc0ef9f5a54022810c1275ee4605babc6413c8cd5d47": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "scripts/setup-environment.sh": { + "lines": { + "055cc48a62f9671c391b120a2b1e9a0a88a4f62bab1031eaf6f59bd71159394a": 1, + "1865ed4789ffd14bcca3f552aef94c5309c9d8a8d0a666e829ca430c78cc4483": 1, + "2a7e62dcb92dea9a3345d9efa57cf7200ea35b7ff8c222f6be7f78a49779fb5e": 1, + "2bdc64bf5826534a737eba60ff6126b15e4dd3f5d775da9fa3c62a40ff795673": 1, + "33e64e31fa4c99faf8d7c11a620603f4f72a5d16a3f3d4c5e126256577a049e6": 1, + "34689fcec2a4c87149b51ea0b2bda8f79be6eea10cca094933d9f6cee918d2c7": 1, + "3b08c85d4ce7fb916ec403a2b9d9945672ff63993c8834a868f9e6cf6ab37f3e": 1, + "45eb370b12ffbdba1bd7161fbf638bb91846d66e55dda8c912d4c05a2e361ebf": 1, + "4658687bc5e2229a867a5f27ed2e5fed6a5a2843f00cba3b4e8e591194c7492c": 1, + "50238a40053da27d49424250235922fd9c97e4f3e112c0f7e46d5884ee884eaf": 1, + "64770069a5a8a4c0f608d6724c17a8b9b0a45cdc1900558ad866c7e83017bc77": 1, + "6631fab0b7b4a58d887b0c52ebdf65d5ac21fe15082bb0ca9cbc8197b3fbfffd": 1, + "6e0136162d096a2c7eed9141d693e3d75b8f00dd6b7be3e05833aaafe479299d": 1, + "74a227cb53874fb4131734ff0fa425a2f5740cc408a9ab79072a7b8aa61919a6": 1, + "78023110e3dab38add18f5d8fbac0187d287ff9d3e45478c625a93e33b5ef788": 1, + "8965400e8593975fc8ad500f4bfa57af483992692749736db762c27001dbb15a": 1, + "90c54ff5bb32253cc2bdea719c21e943a74266d0081346b0720d7dcc7c54b79f": 1, + "a61828fe19072624e36708dc6fc023af8432f7b48e45ea54a1ffbf0f9b9c6ba4": 1, + "a73fcea39bd02943b80961063fbd26dbfa75d883768aadb9c3f7844c0d655f25": 1, + "be7360fb6c15212c8f9ee3791affbd7eea0590a82039c1a67342870554b3e924": 1, + "ca18d046086160105ab0923ecf1c6e0a1bd1878393f0b5a4c3ead56a836775e2": 1, + "e6f48254908d2a717ffae33f31302ab94f1362b83be1ebc48edff4288bcd1c9c": 1, + "eba17c1bd810d9a12aae32d292b8cd0c9290c1c01f2e9d8af0fd74d52c6102ac": 1, + "eff2e730ea5eb6ca34c30d7c7a9b992a96fa2a30cc69809118a72ac66171b712": 1, + "f4ac50140c317c85912411ac10e1976c1002bc7f811234ad8a7b4c24317db2f2": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "scripts/start-credential-fixture.py": { + "lines": { + "1fc8f78909eb1840c2937c85204b165800eded4b25f29523394e4ac1db5ef8ba": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "scripts/test-doc-links.py": { + "lines": { + "07b1de95060bc8b34ab2be90e9f8ae3aa194c35994506752830dc336cdd845ab": 1, + "153d86aa1d1f722a6ec0e5902d438a8fe08391e363a06a441d9aae797c31f37a": 1, + "5bebd54135755d627a629cb484dfa88f8d123293e7cd7a99b6d0920d40229c86": 1, + "7f9bc33eb621b97eb8d23da95c4f0992bd2ebc11f87c182bf0e2beff6e446a11": 1, + "9894174938f1e704c1de4444bd5f8cff87f896b561fafa0c0ad5262abb3ab0be": 1, + "be9c3626da878d455ab0ed4b5717c95b12b9e7a03ad82c47ae2e745d93464628": 1, + "c234e67bf28c3427f04fd42adf52b6464783270861e99ecfd0a0cc20ec4d2bfb": 1, + "d9d7f02135dd7388286f9e54e85d088476460869d0a09a471175b05b757a0e7d": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "scripts/test-install-bootstrap.py": { + "lines": { + "1f09c191d2781a00496ca8b5a4ff2cfd085c7e0b216eb3662b5adc057ee6e959": 1, + "25229e8d06b9f996789a4f1e17d1b29929a029954e3092d76e567e356fb710d9": 2, + "2b6ad3b88ecd8eea48f436b66274a8d0794c0f7b06fdc486036a966a10cd50e8": 4, + "38179de4886b68a780830ba7cf4f0e452c4bd849fbb03494d1c514f1219e7801": 1, + "3fe2a7dd96ec7ab9cf3aa773b999fef6e231842370af301b64e66305cb03e731": 1, + "437a5a1dc4c6f80363996022be72345366d6aed17b876bd2b5e51717bddae0c9": 2, + "46cbc96418479eb2cb5b2411138dcec07fd8ccf5cdbd4a99925c3d42b618ec9c": 1, + "4b9ca6457b90c7ed2819ba74f57c521baf5211e4e630e32366fdbc7bb3ebec52": 1, + "4ea92a5de17280169f406909d29032ad35d9c9b34774f2609606c64186633153": 1, + "72d0d8be702d83b4af3f7f108e8df633405b221c40d5ba93d8d7a1045f97aa1a": 1, + "802569373320fa8f80d1fd4d498882d1487b6124bd6ac18a167b10736e5be182": 1, + "813153b23ac9f119f0194be4f39960d3155abaa3cd7081ca913460f92c3f42e2": 1, + "90f9b37ffb88cae45899f58fbe95a56c66b3f3565f4352b18ad18ad15bc36a35": 1, + "cd52eb76cf459d42dc59cbe37dbd1c9eca83018dd56203f71275e2431775cd42": 1, + "cffd2afc0b6fe8b4807ae1cd7f549f3d86754449c289fe533c667a5a0d82d163": 4, + "d119018f618b7f4f565c2fe7253b1412aa938058bd9b0111eb6771c8cd22f853": 1, + "da3f85061f010b2bbd9fb59e3c259d73644f5552d07f1b72ee326d9c9c701812": 1, + "f9a1de1f3d2c595fe6cf7b5bd641a0cb6644f4000427fef6dcec7e59c4f8da54": 2 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "scripts/test-product-name.py": { + "lines": { + "3015d50d23a334a35fae896b9d561ff6d3a4a61e482eeab7740e26b53a901a75": 1, + "4fe5d291f5b1a172390ab93f5f801e7d30983e9b3c26ac1759c0a955a0a3aaf3": 1, + "9463d825caab84fd5dae5bd5e6652e9acc3505bd770cb3173e0a4aaef472038c": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "scripts/test-readme.sh": { + "lines": { + "12cb1e1454f4759ead69eecc5e96e4a707c86790a769b5d472f2acf0039d17ca": 1, + "39f86e9698afde648f29f495f4a519664b7a5cb8c21ccf5db345523f887602f9": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "scripts/test-release-install.sh": { + "lines": { + "009746cd70e4c714eb6389279764c5305a06341ab5493c8fdde88f0e262d4340": 1, + "0473db34f9747c282a6851ecede2e76f2fbac7d31e02c06b8a2e985a916952b9": 1, + "0687a2a239f77429b18a3927b2ff9a31cdfa33d2a1913fb297d00c0e1431b6ba": 2, + "0916946a26c5361a68f8a3f02c7965a1dd4d17c8aae8e078472f8efd41e2eb41": 1, + "10046bcecee19e111bef45a5c7a8abac24b2f6bcde9c2380b4a3c5bc70baf2cb": 1, + "1cad28f7a98e19b4c891d1ad80ecda33ed2809c99da7c2e737d66e6999948be4": 1, + "2340d1b62d332309115dd83509f0348d4771a00ddc43bb91e64251aaf548d000": 1, + "42fc6d0681af9d20610fd8753833b845548ca2f8b503948101f806758cccd0d4": 1, + "4eae57305aec6536a1c1f9947c24e97dcf963e583184844e9206a7b9c3c21a28": 1, + "6401a7e2b91983f198106449b2ae1460e5465c24a07081bf3acce1eb7bac1e78": 1, + "663eafd91454908ccf0aff032c881df918ab6b10411e15cec155df828c2f4189": 1, + "6dc9abdfe6d90349706e9124341246d37914334d48bba8a398ed8bd90a1bb46f": 1, + "72d34a74ae318055b490ea3324e6975f930c26a4402139b4188623984c086833": 1, + "8f42821f6044c6b983ef7e3091bb963208d21c7c25297a586326630f300f8464": 1, + "9904462c46598fd69bd9a5764b4eb7eb9bee6528e97dece446435d5c45644e4c": 2, + "9a68916f87e2d2c65586ffc106d75ecad36863052d46cd5e5b8adc38e160b8d5": 1, + "9e6b1c50093b9230d9d982c42a5707ba8b93d1f66a03be3bb591842916263fec": 1, + "a605812a2b3d840e0d7cc8bc62fb8482a84684cfedef4ac932f19505c574647e": 1, + "aa1ae10a72e3f73cc1b9f4cf82171c3b8c456c2b8a9e50a878233dff1d2a1c77": 1, + "b13b262cb09ac11cf7d3534f477f1bbcd3d53e55bdce7d1235a3c87eb24b8567": 2, + "bc2e304ed17564ce6c859f7a285b9ca04032157d796e08f76f8d9ae678d1a86f": 1, + "c6e1fb694682efd565ab9fa2706b2a4c8f86d02d837d53bb41269fd1d1590e0b": 1, + "c75173de50959a1d54de38a89b24f1c6f1f8a32ffc38e151fc2a58498a04ebad": 1, + "c98cdf45df539dbb5dabaa075604912a498fe29b871f77025c1211c174c8017b": 1, + "cd9f7f07e3333a6fc3c07f690314686ad901aeb8ce2dd85a9fa310f1ffaad2c9": 1, + "e03d89aeb429def0ad24754baa2d81a4e44712a60bce7c8857898099230b2bee": 1, + "f725d3d50519e5db0171d79a35242be112f32c1227b9256ad26236b5ec2efa4f": 1, + "f945d54eb800be9c5cd5a89af9c696bb8099df64c07ebca3adeb1dd4cd6eb4aa": 1, + "ff87096b70d1f6a3846670f94f99a9d802187783449ebb029989d4a358e29f7d": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "scripts/test-repository-share-query.py": { + "lines": { + "1f62e454c35279ffe84123531f43174d4dff7b0d5b1ce8117bea0eb65b59cd56": 1, + "6e051ffac67d1e2b7a4ce6c68244876861fde346ca919129e48f380bb7c7364b": 1 + }, + "reason": "Negative-control fixtures retain existing repo_caboodle graph identity." + }, + "scripts/test-stack-pendants.py": { + "lines": { + "18ca9bfc8ed9101f5862f02ecc58112ccc4e9d07d609e09866719177ca9d39b0": 1, + "8457ab54cc993b7389f39f90ba03dc9cb2da6187b88b8eb6a51c3fe5201473f2": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "scripts/text2kg_general.py": { + "lines": { + "ad442e2a65d3b898eca9cbb2dda4e514a2cd481ffe1861e3fdd6c52e15e66f07": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "skills/tambo/SKILL.md": { + "lines": { + "058bb7e64339d52495545ee541e0fbc2a80c4520378d5e43d186203868a74650": 1, + "252056fffea9ae08ee9c2c8867f4536a3c3c5c1ef5e867eb9fae0dfcec68072c": 1, + "2780d99349f7e31cc0b4366c600146a86807a3b58d60dcd2e22b4f38a578c3b8": 1, + "54c5d968e333a8139112c424540fd397d24627e8dbdea3b1b645d070e8dfacb0": 1, + "58c5c2e42ffe74e17c6fa245792a6d823a52b62d045d7dabc3d5a11fb15cab72": 1, + "5d0b5dd17d4751acc288ad2aab88be3bb75bf7c89ef419cd01bd7aa9c22bfea8": 1, + "7e4cd417b773faeba3ecd50f6db13da07b3ccccf2590f2c7bbafbe2195057f7a": 1, + "8fbd19dac5f3fc2bc45a3eec20062023818a509a37badb936982f5659feda2d2": 1, + "99f48f10735c3fad35c81b9e2fe47d2fa5db226c6d6b4309587c44a74c93c15a": 1, + "e9e4ad49f6af34f1921f64f77efae80ae7b901d918c734cd3f46846b1fda2a67": 1 + }, + "reason": "Existing state/cache filename, command alias, environment, package, immutable vocabulary IRI or live compatibility anchor." + }, + "src/adapter.rs": { + "lines": { + "09c81d2ac7b3233c4df3dfe2b30277f07d8695bd6e4cceeba03c0a160174ea2e": 1, + "0c9e8f4fd4303caa5d4f5dead4c3a24f4806eaf39b51a29a942af1ce1d3593c6": 2, + "0ce4b9a26fa298d28dabf76dcc64bc8edc52c3a6050cbffd491bd45c2b75c0bb": 1, + "17632977d42245c929997481e03bdd0c853a51c38b6285bdf4d98eaa766402af": 1, + "189ac12d91db4cceda1f7af5190a7a121b20d475ce014f228b4faacf048c3c7f": 1, + "27cd5eec141a50a26b1c1c10629335dee09e4b7b78cceb351051445e89d2947f": 1, + "41d40953309dd190af5dceab59a95aeab224436e954c3c2fc8e952f6d0cc5ca3": 1, + "5c8a85c9d4a587ec2114062d0d915dc4db07a2826f515cd59fe548d46865ab0d": 1, + "7c3e3d35dc155a0443723f782c752f419a4e8f88f3d2e02f564c61c76363be6a": 1, + "83bdeae3f88bb0447f904bf86688577e5ea5d918e4b665b62bfdd404ec954188": 1, + "86a4372be8e0229246f76b55434dbd2020a9d44e2fe68aa36679c275cd51b2ee": 1, + "86e1da759c4d7c32c3fdd9027ae6871b75c30706908a6104ad300771bb5c12ac": 1, + "90bcefde2a1193c1c684cd1e14cdc0b8f5504793a9d31d0dec85097d681e7320": 1, + "96d60a08451c27ac4f035d74534d8130401bf04d768b36e586f7814adb632ce3": 1, + "9d93664e95650fa2bd0c52611c911fa95af3cc7dfbb74e17a55b70710e431ca5": 1, + "acc1e1257dda07f6bd2932ba0232f387ee63d041d79993227352ae7a947084f9": 1, + "b7b928c5f8d21fc04ce741ab4796afbeaa23504aa650e651dc61f1e8520ac0b2": 1, + "c33fe9b9c9927554d9355f9305e7bca894ae16a3d2c1ff759557e5013381b6a2": 1, + "c42216ef94a0b0a37945a4dc0ebadd38c5911e76ef58c30e97b9d5fdd2e95469": 1, + "ca8f6a43ec5e4b07c4f8f80a6050bda3d28581990d4d5e1501bf87576cf93974": 1, + "eb306d055548c7f3775d145726c492ed1a6f3268db9ccd9dfe701982a78bcb2f": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/adapter/manifest.rs": { + "lines": { + "06903bc6d72085158f8f1c05050812127f9a3d176fafee114b1cb93659974af4": 1, + "111a9d3f09247fc5b415b9ab871373a0cb55c18f7a0b9b3e8ddbc9a891b5e170": 1, + "19b3f8b743793179c16a5823377cdad14680ce646aacb363a38d16f0c2979450": 1, + "66c7a22be95d496585d65765616d4feeb568303daebca140b04a09bd61862bab": 1, + "863650537ad538d96cf86e9d5031bd0cb6b74c435e6de5c95afcba17cc7b26a4": 1, + "a1ee70bad626222a7d275a9d92c78fef37c74b33af665bd74de10f180de1539a": 1, + "d7b1a87cb14c67dd3e92abb8331febd0ab4c258f8d98c4243ecebe7152a5636e": 1, + "ffd1e855c57c445e6c2e9680594ae6d384ba92607f958b02b5a87d4b1388810b": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/adapter/quipu_alias.rs": { + "lines": { + "2fba1f0bf862f98a1b481137c3aa4e8e0abe4be1bbcecf1984019fe7428ff40e": 1, + "93af6834b90828643eea1023a1adf1a82193c621bacc817f69f9f14dac247918": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/apt_owned.rs": { + "lines": { + "fa03e63ada8c15b736f40a9b36ada7a2608111696dbb52d0c95278ebe049a53a": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/crew.rs": { + "lines": { + "2c7087ff576cf987ae253da154cd14f3b07d9872b7eef9fe810b255afde63a7f": 1, + "6680f5c05e250a5ccb81853ed92c89b6bb62797e23988954bfbca39156ce2647": 1, + "d01ca1fd61a49b5a62f4b768296c52064833d0439ac3f32549feb8393e6d69d6": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/doctor.rs": { + "lines": { + "1b5d0fb8c5e770c657b59ff0bc88d4f668cfc0b7691077f95bf7bc9ee8e3fd3d": 1, + "2330a20785b809215424331126d53467773660ee30d07e6bdcca839df4d745f2": 1, + "76c8ad34879829715559849d1b00300ef133fdbc5736df5842039ad36d675568": 1, + "78e38bfe2703e2592c1e9c37f777ef295d652dcef87cfd305b8a06ae09d7dd11": 1, + "82747e28e6d7fe5e815160127c050aa426b169600321d98f25a76073b35e35e3": 1, + "968fa28a3248e45814be59971f5aa0f8b1627900b07b06d1bcc963fd7c111870": 1, + "9dff7e78ebe973b68f0db7c7950e6f2f161960a3d01c447bf76568473dd8fbde": 1, + "aed3205845d6fc9c8dd0c8d787d8e34e5518e85d5cca7f165b83c6cfd2d50749": 1, + "b2cff5ebdac9e5d20820c2dc06059489d799fb5363fd06a34bc0703b8c2c10a5": 1, + "b7fd3e7b0b359971497ff1caefc305cf3fbac2513ed8217f5a66fe3ffe8fcac9": 1, + "c98069322108af4dcbecfdfed2d078745e8cf630fac3b70d1aa707536add573d": 1, + "ceada0eb7f877f2e62a7a1efeae4b1f9397e387208fa821e3d864e9ee0f9bf2a": 1, + "e27033fbcaf03c4aab0bb0675461e0ac76a19c98a01a4dc26694cd23b5c0cadf": 1, + "e49dd32a0cb1ee68e1df1b7e20f1ea81a9acf97e1e5268fcc597f303793fc227": 1, + "ebf199a22611d3da76c65d588a78671ff2f07338ac619d351aee874e07056712": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/dp_alias.rs": { + "lines": { + "a8da20225db6e8db383c5f2beef91cde55f0642d560872efbe99331e8106ddb2": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/embedding.rs": { + "lines": { + "4dfe79f92a44531f2c1fcf2e40179408158f49bcb2fdf662d696a41ca19384ad": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/emission.rs": { + "lines": { + "111fdd85904a2fae94d54dbeee3e0935651e60a506a903ef0feb831f5eae592c": 1, + "3ba15601ea4860aea451fd2459be66eb9209fff8981321bc5e62f8198f9c3d87": 1, + "4c05e7ed759f281c98d0fd7bf587552f99ac56f4764b98a4a516263a093b4934": 1, + "abeebccf0921fd0aa4c10f43bc93d4e591999321c0c65ab9a7b062a42937b54d": 1, + "b4a9b2b95e45f21b7f22a74c253aaf199812764a768ebf473d032a3cf9a81c24": 1, + "fe86733c762213dd896ec09f89085dc39a9833ccae44f95f1627d32a75635f4c": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/engine.rs": { + "lines": { + "8461e982bd491f35441bf6a004befac475510214d410e57d2520e437a3dcc522": 1, + "9d8ed0419844c25fd99b5c385904f3f90d63031767efdc2219cbc2dbeb50c659": 1, + "a0ddc510bf77ce665f2c973c36767b5a71a62a2c5ee848353a349055bea2dc87": 1, + "e19f609694903dee70d6e9d0777635c8456359ed9b89e7e25d52a47977b93829": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/hook_bundles.rs": { + "lines": { + "4e608728037d745de5a31ac690e49b9520b23026bfbfeff0440f8eb526fa1862": 1, + "8a496a58b999e204fc20e37a7973f4fc23c104cd35b5f35f702ab073f4cb41ff": 1, + "f02ac24d4d2e71f26acbdfdf0aeabbd96153b0a1584522658e794f82ce6a0c53": 1, + "fb9907189903a02f5faf58a039bf8410ec9439d7c473be55245908192cce1632": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/main.rs": { + "lines": { + "050faa5e1ed0295f6b75dedc864fcd02a360769b4f0862db1dbc7d25b2bf6939": 1, + "0b0c04469bfe8662bdb4b941418c3a1539d32535a546488b740a833a3e3a0c1f": 1, + "0f626f582b5ac1f5ae4e3929aefa6979861b650c5c8d77c064abf944f33f0d6c": 1, + "0fe929e2beab3fc79e3af8a50cce69d5799720ebed9c2dda5d38429dbaaf3b14": 1, + "1c12704b94999d809bbaab1141bdad65eeeceba47db9e0483b312c95fa503632": 1, + "2330a20785b809215424331126d53467773660ee30d07e6bdcca839df4d745f2": 1, + "290ae03465cf4cac2db4192f9ce876783635d328b5a5c4178d8701a13eadae68": 1, + "2bac90b1440b4aba1271775b7f010eaee1ea7213e4336b80936c75278c834e25": 1, + "3c695b70c57f06b59e256403d63b5b85743399fcbf0b02b0b75965de435c9afb": 1, + "52fb24f85fb0cdcb7b04a048b4123a4e4a5b3aebab1e4ba3397f93e9ce1855d8": 1, + "582c3d9e78262c992545a06fd392196f1ae7f4793f4d81db308d40ac90c01524": 1, + "63413b1a1d1cc2c27fffb3e95ffbbe8ccfcdd25f2fa4cc69e599d9e43f981513": 1, + "67212a08721766df995f75975aa52b3bfaef95c5df50ed2c0c893ad681280d4c": 1, + "6bfab99ebaf909a12f81afde09da09074651069db44126007db3d02d8a70ce0c": 1, + "7349844672aef38af94d26514284e57a9f8c535ce1e6aca3ef78901a6744ac98": 1, + "7dc222a15899e07f70f7e577cb0ec2acaa229e0c58af6999793e30104c048084": 1, + "841f01a74b963b20866a212044db03f832b337102a3dcf2daae3cf143ca3b25a": 1, + "84c4e19221966b08321435fb0fd2ec0d8f46a4b02d1d8e4a8fdae688c9748b5a": 11, + "8d5f172ae9223ab1318846edbdfcb773cb57061de046decec2a5cd03c8a6fc0e": 1, + "9b45543ca9a25ff3cf9dd073607ec47f755aa3f62f99db00e27bfa7bb5f599dc": 1, + "a0f5f9aded0f6b337ca8802591b4b1264d4c2e6305c231604aa1fd6ae75ee30a": 1, + "b1f1a65a5411d9e66e2df3ec8d3cde814a188e7f69a8eb1a70dc55a0ad0ec7d2": 1, + "b22ed16db4cda9a6b5c743ce5427359984c3ae4cdf12c882519d81c20d072721": 1, + "b5437f382a122c18fa0b62bb5e380e1a9c2ca2a202e85176d1cb09b3032f7646": 1, + "b7f63569dfe487f4743ac5cfd77a383f59bf285cf463166ff487a57feb378410": 1, + "b8322713e066e93addc6f7f50a31fac79e59e43ec0822ba10aef13263ca58915": 2, + "b8e34bab251867ffe7e12d23324167d0e978d87e07561e5c440ede7173617b3e": 1, + "bb90bd0e174d11f9f4a7d41796c17eb1ce6c0aebd94640cd0c6efd8def843886": 1, + "bd5267eb57ca6ed651250f66d7afe2194d8b0732112156edd59c915634e17581": 1, + "c46555797f4d20a35a858c260c7de3fcffa0092486aa0c39e424f5d621d6ad40": 1, + "c6d38a3168cadfa64987e9b41f1284fc58301a0fd91ea60047e2e2529a013b28": 1, + "cd76c363c336bb3090b4014952931d433a906c8def8c3c2a3e2e00f8f5b06377": 1, + "d1745f2296f1c0601036aadfc05bea17dcbc5b81d1aeaf960a2917a991f92109": 8, + "d46311e20db82a24eaf04295664ddb292fbea09b758018d310a837ac4ccdc978": 1, + "e818169f4da5b0b687345fedcbdfa21ce0e868b9e054b4cb5bd21bea06edc881": 2, + "effa922ce28fe64ecf20fe247754000b29f6c70c74dbef69e2cf14f7f328b28b": 1, + "fde11d975d066817870dd8f7faa3e06621da33462d5f85aa02321161fe450b58": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/member_bump.rs": { + "lines": { + "b31dd5335e55b2d38645c6665f64d54efa838795acd08d19a8e3437a5c98ce5b": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/members.rs": { + "lines": { + "473389941685160de06a1ac4791e31f76e7e4d52a9158977625f5d95e176c25d": 1, + "6934dc93e6af8574152e17e2b08bbec3556086f09fd44b2f91db575a0d4698a6": 1, + "b07b2742bd3307932a7da209ac03fcbb6ce9a5aecfcbeff48932cde790c4786e": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/model.rs": { + "lines": { + "219bbd725bf8d936aa33dfd3ad4ec95d8060b2b60b11c82b344e94567f48b547": 1, + "54abd52948cb534e905e0c8384c94d967f0dea112beaa3546dbd5c111384e0d2": 1, + "5da681f3a28715d9e67f2d7c5ae268b447d922587db9cddbd9940600407cb356": 1, + "7d14f0549381c22d9b53825a31c2825206609cdb1a9dd53864e7fc7d58012984": 1, + "8b34ab155c8495870f157972bd2da10a7ee7f7a9fb6e17c1ef25801f2047e6cb": 1, + "91696a1fb0425a64fd9fc8243c829c4c91cc188d88d23ebebcefff54f5e5fc6d": 1, + "b9049a8deaa1e16515f291d75c0642dde013e5ab281e0f28c8618f05facd85f3": 1, + "c1d649bae72bd0d122249593a1a257f74ea86e55dc113cdc990af140710edae1": 1, + "e2514151c246b02ec3b87c421c403735b794ce054c92c09be77abafdfee2eb75": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/observability.rs": { + "lines": { + "03e67545e1e0b0c7b0a93db79d88700719a5f15a27323b9e592946ee4494f800": 1, + "1c9dcf2fc567f20817abf13f64397cabccb4f1e745e45cc2869aad7595a05ecf": 1, + "2b5deaed23356fbb7ed5656b12dd38a7948b7d40a425ab2f3c5cefab24357f93": 1, + "a1b928c9f8d22ce6c13f5cbe90c8dd87e021139f89c98f66db99115ffda6039a": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/pack_trust.rs": { + "lines": { + "28d1aece644779fe2248c848c2f2c5fa60c1acb1301c9e996b4a1d913fc8721b": 1, + "4fcc1399744132b549e2f67209500913a591740979c2f6bff624dcbed9bf27b3": 1, + "5f72769d99c3212cbec5d3d411f95936818d87328a612e35f6aeefdf3b2fd23b": 1, + "cb475916cc43b9b17b747baaca4665740fd37b9df6acbfdba623232a3a4dd391": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/pack_trust_tests.rs": { + "lines": { + "8cc4b95f643fba37f72eaa4bb546d23376df79a5c36beb5d33386317d21a2d8e": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/package.rs": { + "lines": { + "07d1bf1f013c5f41a53f59717fd8a4fcc6c2f062207622cd9eaa88c1e363a468": 1, + "13b9cd665f4fdcab670b40efe4894fdfcda8ab55490a5cdabe4eabfb5fc41a61": 1, + "13bf0fab4ed4e9bb7fbfb9aff1bfc3a9802563721184e812024e106d9865a1af": 1, + "27c41444005ddc7fba3cb3ff6a924778cf77563714790012f8fccd7d4ef66e26": 1, + "30e3be2141b172e163c3685794acfa96613ef1fc8c57e8f685198ffcce8f9f13": 1, + "35292fbf424a5ef2a51c83392c351eb2ebba9c3eed747d5cd6b6c1e00c2bee52": 1, + "43bd51aa24365b6891a3458a8460555708346162578f3901c7bee5cd6e82cd61": 1, + "9055b17cf525296e6df7c56261887aa3ad596ff355ad8d15cdc144adc54bedd6": 1, + "a02b31e78b051b89c3838ab8d178bc5382ff2916594ff961046a42279f72335d": 1, + "b41fd2bbb621cf150a1d693170e6f320bc92206fc3b9abceea500058d0628693": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/pendant_hooks.rs": { + "lines": { + "182ae49492c26cfe84bf93082d4aa810b60acd9dc805db4c541a4821474487b1": 1, + "fcb0a90eb383e3fe068bdb8b0a7ac26de382a791dbc7d1d253c6422a656f5227": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/pendant_sync.rs": { + "lines": { + "57593cdbd9944fade16a5f65621d133aa90a2e4f247e30066b7df6cbe2f4ad31": 1, + "9f4a41aacb97011923015da797e311ad73061f48486c2af7885e90e7bc5075d1": 1, + "b1f67323317a9f9d124f921bd29bbde539112ae07faa2127a8d6fa640a22d38b": 1, + "dca76bae5de124afb895b13e1c8ff89d5dce189384aa8f429e6c43f23694845c": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/projection.rs": { + "lines": { + "a35e98f644788ab8b4b48732cb8903d37902f15edb494fd6874620976d0770f5": 1, + "d9d3e20ec25e06b0d150fcd97757fccac0d0f8c954d1751c90c471cc4771a189": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/quipu_credential.rs": { + "lines": { + "467612b2dfcdde1ab6e4276d405912dc20221fc28bd5b90ec2f315864c44de38": 1, + "85e17746b267344de4c180ba453d07e329d0fbbb71675d0996e9a4b5efcc8b93": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/quipu_mcp.rs": { + "lines": { + "45c896256b18415bf408cd5ae8836b531c91f5e87b568810aba2b4312a33c8b2": 1, + "7952cc1a865b715b6356ca37bca9ef274c5b46400ebcb7b632e9661f78fd7a97": 1, + "c42a1226a5cbe7f81ac2ec2a2a6353f18dbd97e82fe02481899097e344796ff5": 1, + "fcede175caa94a7c6d934fa7d8d0d45f61f6157e168cd0f91b6aa6ad0d0c27af": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/release_update.rs": { + "lines": { + "05d6b8baf339bd6e8a4b6f2401407f39e5f59f3643bb92bbb64e8b59cc0ac8b5": 1, + "1d23664c7995a3475ba623032056c4501e1bc0bd581f025facb4ed1f852a9f2c": 1, + "2a15f3a0fbcde03daa11dabf02e1dc0ec9bf186661b25dd5ca1ce417aafa6867": 1, + "2e3b926696d01b6a1dd4a0948fb14422fd1e4db5ae1f65011789d97c9fb482b5": 1, + "36d41ab848ca154128629545b6319f25da458cec8ab8ba188d600269dfae6fa1": 1, + "3af73e8beddff03793f7e545258886bb90857982983ee3b33e590d7fdb4eec2a": 1, + "91f23116673a01619170fd631110551da37bdaac56954079627d75098e831ccb": 1, + "a3588b25a69c117ebeed2f4fd41e0a2e486b6a45852fcc7934548ebdae04d248": 1, + "bb133ea94efe92ecad898a6297d89328e6c0767338c76d15688b9cf7eb68d8ba": 1, + "c18062150f299d8d8208a28ad166bc048d1d1f803b5741d35d7db41c0fdfffb1": 1, + "c6ff5fe46ea6aaa6c7878ca548f9ab510d0dd37c70b24e2ce54886478504be79": 1, + "cf47c710277560956efb348538400aa67bbf4cbfaffc8d4db5aff2620d6e64c9": 1, + "d6cbc4b104ee8781b26bbd795e771d70370b9465947764005a9c46d8d241a306": 1, + "e67e597067e9a07ade6d4a0a53df3e25cb5322bdfb46ab5eb04e167673550435": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/release_update/quipu.rs": { + "lines": { + "2c0eea76b7827df18d5978d9a70b3c0937c88777dc91333e94ba01deefca7f79": 1, + "52f3877bb1683edfba4c8a41bdea0d1bd299e8082745bd9a1ed55710282110aa": 1, + "716a5be755d47e74f4ff870d0df6c703170501c3915c91a68025b97e2b507b50": 1, + "825673d6e75b63d735f4205e2b70e24f21e8f9948b4c73637ee4c50015de3a42": 1, + "85864d8942f12286313411acacd6ebef23b2fcb7676c4faee83fec410f66d20d": 1, + "920871fb23a9b582ea0b08e5ef2f715f243b6b8f4b616f4d83c3499db2e26800": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/release_update/self_pair.rs": { + "lines": { + "277bb5f67aa6d74c2035bdcb67759f46ff9c6a084f264f12f8c8538074dcb57e": 1, + "2960543bc2b1a9e4ff626c1c6505f4e1102a1579589310133d40d6e97dc33386": 2, + "37cc2375cc0acc126558df6fb6423501db828080bf4e233aeb230e87eb672d4b": 1, + "457e3d295476b12e51c531943f1f58c530742748a561d12fcdaa1f9243a46e7e": 1, + "63e5b7d68ab750b4c38416e3ea7f826136fe6d5478b4732b6efe0b12310148f1": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "src/vocabulary.rs": { + "lines": { + "68bcfacbbbc30a470616f5de2e34f3e9160d873fce4161cd487817a57413c934": 1, + "a6ed744f06e42a0ac90a4dcc0c28b0ec3732b8b8c4dce098b2dff04fe2131753": 1, + "c2caafcbfc2bdc949f43ecc182468008ae3d840cbca5cee51f3b046c846bf3a2": 1, + "c4e6c19c10305b179174a3585f0daff7b468c0ea3029f3e3f7fc11f173d5443b": 1, + "ce7c72711b27af1730aeb1e4d700d7a398d6d1e00c3f09e7d4e9fe5477ff4464": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/chaski_member_live.rs": { + "lines": { + "3877e42d591a66f920ffc7b311581b7884ee96272b93bf53e28a21aa9a7df644": 1, + "eb514e44540e5b7a21aa5a1c0e89080f9937cc8bcdd8aae25571d16df881384a": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/cli.rs": { + "lines": { + "00a475a30704f78f27148ea17587d875993ffe097d6b7bc027a18cc5662dddc3": 1, + "027e7bb9ea72f9adff078c148ea5c7a3cc8f3b30a3e084eed4eafa031ce99d9c": 1, + "034b8c0061079a6fa863c1036808a949ef710bcab2ed8475215f884f30eca925": 1, + "0532fced6632d54a4fd659cc72158f05c82e79fed000e543113b7533d3c2e891": 1, + "0539c038f4acc91034cd5af7d9384ab24efd9c70711625db0d689c98225624c4": 1, + "07545fae5c9c52399c2fde0361a14fc9e8a555f08c86eca3ace4fa11e0e7ad5d": 1, + "0a2f7b0df1c97795d995ed336e0a36678832a37908bf96149d9dae2d44d326d5": 1, + "0bdff4da42707ef8e870b312d3816326349d270ad9d08902dc13fefcc665a580": 1, + "0e7d02c371cbc1be2f8ef982d52cc24acc0191ab87e4418827708af39eaf5d70": 1, + "131ac2612902cb0ddb023006f622960631521348899f4b66e1f7b9cacaaabba5": 1, + "1445350a75650b76a0dd9513348d26c417b8f65170d5ff73e909320097b67322": 1, + "150b96b52649f55049593531b892e03a1252f59ab6f52e1517cc53cf058531a8": 1, + "155b3d8f2a2d4ff4d1c9e2eb4444b7442d413d5aa9871d08b7168f72d8c2445f": 1, + "18ba2bafd52818b76ec74c2bad574176258b3e7ff0ddc2976c8093110069efb1": 2, + "1dffccba53ce1ec4dae4e8023ff41228afc0fe5ac0fe08880cf4c0d9dfb44f7d": 2, + "1ff68942ab13a4d59558b7666e24992cf8ba7aed75bff1af9cdd8a6eec557a36": 1, + "20fd39370de29959ad4277d61346ab04838b0783a123c3617f8fa33869799cc0": 1, + "21d16c940137bc86a2e637e64d009e485baca7df47f1093ddf09ab207dbd5ab8": 1, + "23e6f7e36299ec7a44d07ae680b463073ef6a845acd2feda266113d493389e3a": 4, + "251cc2b347316e2c3fe8458464dedf171edf3784c39feea33c6d4126a8090cc5": 2, + "265cf71fb508a76c36e2fff8be989071d4fec4cf8811b7a3dbb9e5f947e56ec1": 1, + "278e07879fe66dd5619fa59d8fee706c63a26850cc24c67cb0d44f0a7ec39f76": 1, + "28a858de8c8739da25a2988ad1027a036ab9a2d95fa1a01694aff855f8edb087": 1, + "28ae1bd1e1fd730d51f81ba11f6aecbd85ac3bd93026ac7fa8df587b0ffd58cf": 1, + "30e34a14e72ecf23a38150af17eabb07699a93dd937e4165153e007a55a03c72": 2, + "331fea0644bd5aab350833a9a8f928d7c2c5ae2f7394c89ec134bcaf243cf22f": 1, + "335d03ee3cffaea9c9f6f4dd5763ea12a2b5d9ce2fed355af9d0f16c50c2bfd8": 1, + "366929ed28d913a4c9bb81a66a6e27fdd1f0dfe49e48073742a85dc87dc54343": 1, + "3cef08dea8b7261b0c8a9b7bd1c2ca2f3a29c3872f35d9a7bc8622a4f0be7951": 1, + "3d9c84081b61e134b14b2215f43ab7e840d1ef0bfc7262b179fdc939e78c8c8f": 1, + "40bceaf38294dea4f9447c4ee6ea9b76182de72fcd5c2a5ea39e6ac065578de5": 1, + "4373c215128ad7d047880001fa6868148b222d91fd370712475ce4e0141c2dc6": 1, + "43a47b33497bb33b428c5e7b7695eb964b789eee8ee27a363bdabe62c44e300a": 1, + "46f1cef87f82741defb022713efab82aac6c24a9f70f250be70b6b2a03eb3ca3": 1, + "49866e8eeb977a1879452bfc520530f7e8a8f46b729f95c1063e84e5bf52b86b": 1, + "49cbb86075fe5dce44309c112f1f8b5369c392722ff0275fde2b1a8111b2d1c0": 7, + "5460e7fb9520793b8e0b77c6f67a11440cc13b201b7fa8b5b9a2d5b916159822": 1, + "549946f40fcb39d8f69ef555a7b1c284996b1aac5f6044a294cdad686fb13232": 2, + "58a390e8365677da152b202026b4bee238ef5277ad2f6fef0f467debc67959c5": 1, + "58e04cbfe22f6c5a782f50a199fffe8e268fce4f683c37d77e1546687a80b118": 1, + "5efc974aca2750823a56f7a43ee5e01474cfc6cf8c56b43d815993bc6e9331fd": 1, + "62526146251366542a91ff502fe0ccf134780b9ba345b93811ebd8fea3b7a600": 1, + "6257102900bf91366a8898b4ba29ae44fef2a1d363ccce0e96fe863ba0080f7b": 1, + "6499d1b4602d056a3dc8aa9d3cf9a1d4ab5202d21d4030d6627e17b2b678e33e": 1, + "66f101e8ee22cf03b9a01123a934f699fc76fbf9c33cb690c3879502d7799bfa": 1, + "671897a82f87cdadb505f73d98189d8d959904e79108daf20590523d9a57bbac": 1, + "6897a9185b33a0b4a9b49a4824ee1885f1be77dcc58a47b57835f6426eb7a398": 1, + "6aafad05c98fb8f870f0d6348add945c4a217a401f0404c1696bb66b6be0d376": 1, + "715a72fdf203a46e9d375b07032735f2fdaabbe99450b6224b8e5f0e32f157b7": 1, + "7d2cbc61a8d3c4b75764950ee5093756866a7abe4a8f3923e1a1e3a38a35882a": 1, + "7e5d754b6c5f5d32c867b8ceddcbc7d8e74216078e5da20169b15f6d88fe7941": 1, + "7e641ed94354a72c24b35ea2af43589f731b2bbee6e4163af285d3e206298007": 1, + "7f6fff788e6fd5f5afeacf23e6ace485ba7320a5b8c900dd12b92a62da91dc72": 1, + "7fa2d8e07be03fceaf19b0a26deaa99b8441817fb7dbd0243a45fdf6682255ae": 1, + "81641e6422405c83bde8c12d5adeac221227d459132852f668cb3be781c64612": 1, + "83d7d857e52b610e602c899e45e231374cf4055b2966114ce26c911b76d88901": 1, + "864829f79567ae81d45523704a587c06ca471bf66ccbb14dc1da0997fcef6e89": 2, + "86b82e1ec98aec503b4812fca31a5955d87ad531cdac8aa2886c4560eeb2b6ab": 1, + "87a07c8af9e4757ba907a284a7dfd46944b9d9438a46cc5a88943f9e0034340c": 1, + "87b2f29ecc2d9c923c8bbe28182c13dec89910e9310a30ba6bb88bb9077c08c2": 1, + "88b1f58e8039c0cbe2508a4c1963e7f08de35b9bbfdb84ba25cc53f84aca8376": 1, + "88cd219dfffd3fff7bb0c0faa8db89608bad0d0b44d7f1c9daae58942d79e04f": 1, + "8a1339d62b5f9c95a946bae56dac5419d8ab092ba79e3233b7b64aa42bab7780": 1, + "8a99a0b470a3f4185f8e5f55fc88fc7fc580ca8a6289630c450b0864faa949ef": 1, + "8aefa7e1f3078deca831d357d2c31013cf323b840e9f23b60eb4a654081fc9de": 1, + "90eccdc9d4208f06e2da45efc70f86744b8017c8de41fc66c62fb0ed639b9551": 1, + "911deceb696519414e71e96456a9cb49a67f44a2eb1b6c64ea2cf396dc64cb49": 1, + "91470fda4083b6c613b521a58d8ea68c97a73701df0f87b84df66f0d34f41e40": 1, + "920871fb23a9b582ea0b08e5ef2f715f243b6b8f4b616f4d83c3499db2e26800": 1, + "96f2bd88d52cd808e8bffd3d73741c2bde620e397b38ffb526685a39a87a9755": 1, + "9c07825e042944a24b07a9a3bbce5e636af4066bbe61d4f3f411b5df2a80c559": 1, + "a0d42100936b5258c76566562caa65856eeb7d9c1da79b45e72cc0e1f5afc94d": 1, + "a4f45bedf8cd8a2b09d0828499e2825d708a2054ed0c7e5950197ae918cccbfc": 2, + "a51543202f8ba5f803e86302e7e4a6d67063a7be6265cb1127531550f7c5082d": 1, + "a860726a68b73e65192e1aa78b43d7e72816d274b3948dfbe97d989062426278": 1, + "a930597ce8720010eeb2542ffd226785c75498bba84c79734bc117aa83ca8a4b": 1, + "acb9ea142447e7b70df7cf1406c9c8a6669dd6271b6c424047fe9bd1b115fb49": 1, + "aeff4bba2192ee87c57ded46ecfeba64972487a393bd7f73bfc1cfaefd8b7428": 1, + "b3109b179e94ad12583f82dace9941db4790373102bae43803d931a2c96714bb": 1, + "bce9e96ae286a0d44948734561da0c42e0175c99d39d1c6bfa1428f8c71a6119": 1, + "c153625df64ec2e1bf9c77d0438c0810c27a075f706e271e98360500ddc82bf1": 1, + "c16ec09fb917266ba6cdf7acc2361fce0fc800654ea9903b2482880a2d3a6cea": 1, + "c46d543b654908801373fb4d4085914c7780e21f5f6451a5c205053042ffa4c3": 5, + "c81ed67b49ea36617910c542041c986caf55bddea6401477b444773c512a8c6e": 2, + "c8e5db7b39f123688ee372c27c793eb2769f4343874a44fd4c100961d7ed1558": 1, + "c91c7ea0187cc4d4a591b51565a66ce92c7ab03251695a33b2b13ff610098b9b": 1, + "ca4dee333501074de991095b1ed7ecc57c758973972f2ee450ef70afe1720325": 2, + "cf1dd986b81a17b58a78312d2f8a7516f017a8fa88357b80aa447d19535ff88b": 10, + "d1f8f6dfd23e1501f507497037e34a61eb162d8859aabcd2b3d95afd5cdcbdce": 1, + "d232e6eb2b32d1b4251410cdd5b4ff0a6796c4ef6bdbf9a08bf503b6dfd91a7f": 1, + "d4b0259a70021da8ab437e23d127e17f6e2ee79a79764d64573ee447cde7bb02": 1, + "dbfaa30db7d56a5ab2d2c101229d6a2b991a8f559e8d4b07ab001455cc1bb0af": 1, + "dd924eeb423dd349b80b626c9b94069a2830447d57ab9bad39c82c449b644a24": 1, + "de3fb1c8d653f68691c485c1d31864ee4f3650aaca73b6ff24ce69a59189afdf": 1, + "dedf7ca1db7bc703751c70f7a841ace9ccf4ae37e23e55e5e78bc8b61e2e9bb9": 1, + "e02d1ca4b65ab388b7d9c1482e74f56ff2caf97c6ec3d4788ffa76296665d9f3": 1, + "e0b5e3329c2c5c07a89c5aa9f734481b083a64048767a413e1270e40ac0297fa": 1, + "e13a6dea9a0f57053cf18dd5cc75253fbef1466ae68eb7c65b442d294dfbae65": 1, + "e3347665445042c5ec8a95f0f2759c38a1e06b7bf01435476b54fbb6ff54900e": 2, + "e7eba4ca1990e21a4000311e55fdbe21c71862c02ac56665048a76b519b733ad": 1, + "e809f537f0911a1b9c407ef127092b74735cca5858ebc9cd13c755fc40a071b5": 2, + "ec5b1c3584e7fa4070055a94874a2fede18162561f7aba8a0fa6e69036535400": 1, + "f4f5923d03d0081ee123e5610d38db5ac07a0e0996b0e4b9f12f9f68a507834d": 1, + "f56108b64ebd5219b0fb5c59abebd32b95b5b700a2563062b3ace5ca8d95180a": 1, + "f8cef9de7fa66797df4e7d30c47d38631403dea5e13b2d4e771ba76f240f5868": 1, + "fcc55c3de52ef22e09d368d363f0962f1afc3158f14fd8c48f2d7ef9c8b45fee": 1, + "fe0292f7de1eb2347ffd1ecb746ef6d8b04a0ecc3df4b82a6817e4fbc5e1b7d6": 1, + "fecc03fb6ec7ab6cde77654004193ab30d9bb48b7f97ebe0a34bcf1ec07c8333": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/endpoint_trust_cli.rs": { + "lines": { + "2f08cd82e75208c1bf6ac4c08a51819c747690a7e8baf08a509087981715b333": 1, + "739621214fb14089991885612c05aa338833de3238a1b6eec079daa3f8c796fe": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/external_quipu.rs": { + "lines": { + "02095c5319e3956c7605435f29a090ace636cdcc7f9d0a55d49bf068acee5d1e": 1, + "582c3d9e78262c992545a06fd392196f1ae7f4793f4d81db308d40ac90c01524": 1, + "7f39f57ea30f866d41b3365e22cca27f06bb56c2b9bd2bfa254b34661fe07e84": 1, + "90e40c1851ef518ad691c0121dc4bebc69f912c666249946bcb78ac1f99c9361": 1, + "916d783b5357d34447396e3c111214b5a3ffda15b310426b20385026030bad82": 1, + "e254246614142f6ef3d720acefdb893ffbe629534e94653ecac28bba0fe9446e": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/fixtures/members/fixture-demo.toml": { + "lines": { + "01fbe08ae0b98630f861ef2940dbde3dbc17e895505001b7c89dd7c3b6f50998": 1, + "ae0df5b38d5d475d21f584e918de90ef707383882311c6e1bad3db58eae7bdc1": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/fixtures/members/fixture-wheel.toml": { + "lines": { + "4e90c2ca8def218e916335cbfc3259e33d55a3b8c7ba6c518ba44fbc6daf8f60": 1, + "d38df5639f75ff9f23cadc2c42a2b3d9c87296d094ab4ad138dafdb6958f09f9": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/fixtures/wheel-src/fixture_wheel/__init__.py": { + "lines": { + "065d7576ffeee0a5bc0156812820a266dead5b11ceb03e0c587f7212404edc49": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/member_adapter.rs": { + "lines": { + "169b0e20a4be8752cc478c34a5926c3d0ba6486ac58f62f9ba17fe198d7a703a": 1, + "35701123fca9be93628536233a695e1a4d48105b6cbd6718d4a6b6b0298e1487": 1, + "3877e42d591a66f920ffc7b311581b7884ee96272b93bf53e28a21aa9a7df644": 1, + "495f52d63c51280ba129df428f3d8dbbec1716e0821dca177f4c4e06e8889808": 1, + "5ba3f945563f93d45737b9fc34e59ab2e81e0a802e53768a914cd37e8ab034ba": 1, + "a80d23bfe811619817d02fc88909c022c62f034404512e2d074cea52828546d9": 1, + "d19c504f44f1d3624a60357e70696f4ef38a821edfd9a12e87a91e5d9768f11d": 1, + "e016545391f3c090853e5ae64c8ee927facd30b362d11b74086a602153a68534": 1, + "eb514e44540e5b7a21aa5a1c0e89080f9937cc8bcdd8aae25571d16df881384a": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/member_bump.rs": { + "lines": { + "0bdff4da42707ef8e870b312d3816326349d270ad9d08902dc13fefcc665a580": 1, + "37e9cdb5d44849e5c257b072ec9d525901bab1924d13fe8ee4981a5fa09ec439": 1, + "8771980621da357cd96100f45b5e90a46de0a94797138407eea9c78a0ae11f06": 1, + "b3a200819667f34d9741206a6f23fd9aaf36a686f72a00887e16f29d12514a42": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/member_update_release.rs": { + "lines": { + "0bdff4da42707ef8e870b312d3816326349d270ad9d08902dc13fefcc665a580": 1, + "0fb9e3903c42dc2e9fb96541aa8eb8ddc2c7738c21e90b728c67f51782095199": 1, + "1d57e0a50b9fb78e08819d9e939c992a8a428cafb78abbec5dbba59a3d534537": 1, + "5472cab407f4567a62f421f2bbda31e90e9b1bbb1ae9608307a08a22282cc80b": 1, + "f8b33858e29b0c58e98243f0221c9f743d73ced6de83c04406f38537dd2a092b": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/member_wheel.rs": { + "lines": { + "1c0cc93b68bbfaff5333bd29e5c8bbb5e4fe1ef5603c0dbf2b589d8c2141e1ec": 1, + "296e7bf8e09193e06aff467c9aa68bc14adb4df70b80bf2c6e63e674636df326": 1, + "3877e42d591a66f920ffc7b311581b7884ee96272b93bf53e28a21aa9a7df644": 1, + "5e29b6ded9304dabb4b731df23c67c5d4d255b8fd222c856e767cf3cc1eaeee6": 1, + "703b7b347a6b82eeec0b87bf7950970c83642cfac9b0e22eb7d70bdc6c0b9004": 1, + "c4c58c7e3e5b0999128aef4b634c76399d0c1bbb1a16d123c72dbbfcc16a9988": 2, + "eb514e44540e5b7a21aa5a1c0e89080f9937cc8bcdd8aae25571d16df881384a": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/pendant_sync.rs": { + "lines": { + "223cd448c03b8a83e83c947fdd4170388c8831b187be372a825882398e6a1e39": 1, + "a5bf65699c6d9293f90b36c2d43c8a5484e816b110aed8bdbf14db94b06ab040": 1, + "ae0fb5f39b0e9fd8b617d4742f280d040d74f8ab22f58a383195329f61da74e1": 2, + "e7a405d5c3b4eb32862f3fb4c85da969da227bdf5b8a31fb4035875502f887c8": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/seeds_member_live.rs": { + "lines": { + "003b0305c3be64da088ef2f691f6f84fb01d41866b7c07f6bda9c405c2f3d958": 1, + "3877e42d591a66f920ffc7b311581b7884ee96272b93bf53e28a21aa9a7df644": 1, + "eb514e44540e5b7a21aa5a1c0e89080f9937cc8bcdd8aae25571d16df881384a": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/shuttle_member_live.rs": { + "lines": { + "3877e42d591a66f920ffc7b311581b7884ee96272b93bf53e28a21aa9a7df644": 1, + "eb514e44540e5b7a21aa5a1c0e89080f9937cc8bcdd8aae25571d16df881384a": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/test_pendant_setup.py": { + "lines": { + "2298288ed222942a3e2d1b3da873aae5ad4854616a3a756337c2ad36036ace35": 1, + "572e3873220982611210d9223e45377ceb3746f1e384a74257ae5ea868af665c": 1, + "5ff85c528953e14e309b99c6f8931fe891bf40132fc1f7d0503112ae3a1739b8": 1, + "8729304f0f60f4341b1494eaf8f9d624e6a1e747c5d65eb04b831c19665dc594": 1, + "c716d7f632e325b410ab16135805253397c3acaf7967fd69e60e5273aa7757e7": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/vocabulary.rs": { + "lines": { + "102987a91babe63f87bf668161288e856c626d2d02dad39dfa8d3a58c74d143a": 1, + "292f12633baa950e348bc493b7a8a76d7da019ae64d6010bd57b64f7e8120cb0": 1, + "3cc4475f3be9b331cd223de304eea24ea42dec8feb9b169689b134fb4ced21aa": 1, + "3e4e8d429159197765e83cbf8c8e0e8cf097729a16826b2d554feb3500e2201c": 1, + "5b54d27bf5c83d9ed6038e9006c42ea73f862f1277340dbee998cc3755a4e044": 1, + "916d783b5357d34447396e3c111214b5a3ffda15b310426b20385026030bad82": 1, + "b236665b2e82015bfe5cbc0706ddc44b3bf290d346b8533578300ae47d64c538": 1, + "dc1f7733c937ce5b58da009322cda354f98800e014f74b3558e3113df2105bef": 1, + "e254246614142f6ef3d720acefdb893ffbe629534e94653ecac28bba0fe9446e": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + }, + "tests/yupana_release_live.rs": { + "lines": { + "3877e42d591a66f920ffc7b311581b7884ee96272b93bf53e28a21aa9a7df644": 1, + "eb514e44540e5b7a21aa5a1c0e89080f9937cc8bcdd8aae25571d16df881384a": 1 + }, + "reason": "Explicit command/library ABI, state/environment/configuration/provenance identity, workflow/archive identity or compatibility/negative-test control." + } + }, + "version": 1 +} diff --git a/docs/demos/tambo-branding/README.md b/docs/demos/tambo-branding/README.md new file mode 100644 index 0000000..e5550fa --- /dev/null +++ b/docs/demos/tambo-branding/README.md @@ -0,0 +1,17 @@ +# Tambo branding comparison + +The header and logo use a waystation motif; the footer retains the woven cords +and the stack diagram names Tambo. Each image was rendered at its SVG viewBox +size against light and dark backgrounds with animation paused at time zero. +A fresh isolated Chrome profile rendered local SVGs with HTTP(S) blocked. + +| Asset | Before (light / dark) | After (light / dark) | +|---|---|---| +| Header | [light](before/header-light.png) / [dark](before/header-dark.png) | [light](after/header-light.png) / [dark](after/header-dark.png) | +| Logo | [light](before/logo-light.png) / [dark](before/logo-dark.png) | [light](after/logo-light.png) / [dark](after/logo-dark.png) | +| Footer | [light](before/footer-light.png) / [dark](before/footer-dark.png) | [light](after/footer-light.png) / [dark](after/footer-dark.png) | +| Stack loop | [light](before/stack-loop-light.png) / [dark](before/stack-loop-dark.png) | [light](after/stack-loop-light.png) / [dark](after/stack-loop-dark.png) | + +These are visual controls, not installation or deployment evidence. The +footer's visible cord artwork is unchanged; its accessible product name changes. +The stack diagram retains its dark panel in both surrounding themes. diff --git a/docs/demos/tambo-branding/after/footer-dark.png b/docs/demos/tambo-branding/after/footer-dark.png new file mode 100644 index 0000000..395c23b Binary files /dev/null and b/docs/demos/tambo-branding/after/footer-dark.png differ diff --git a/docs/demos/tambo-branding/after/footer-light.png b/docs/demos/tambo-branding/after/footer-light.png new file mode 100644 index 0000000..b07600c Binary files /dev/null and b/docs/demos/tambo-branding/after/footer-light.png differ diff --git a/docs/demos/tambo-branding/after/header-dark.png b/docs/demos/tambo-branding/after/header-dark.png new file mode 100644 index 0000000..17b3fab Binary files /dev/null and b/docs/demos/tambo-branding/after/header-dark.png differ diff --git a/docs/demos/tambo-branding/after/header-light.png b/docs/demos/tambo-branding/after/header-light.png new file mode 100644 index 0000000..5da1a5b Binary files /dev/null and b/docs/demos/tambo-branding/after/header-light.png differ diff --git a/docs/demos/tambo-branding/after/logo-dark.png b/docs/demos/tambo-branding/after/logo-dark.png new file mode 100644 index 0000000..1fa3525 Binary files /dev/null and b/docs/demos/tambo-branding/after/logo-dark.png differ diff --git a/docs/demos/tambo-branding/after/logo-light.png b/docs/demos/tambo-branding/after/logo-light.png new file mode 100644 index 0000000..c8f6faf Binary files /dev/null and b/docs/demos/tambo-branding/after/logo-light.png differ diff --git a/docs/demos/tambo-branding/after/stack-loop-dark.png b/docs/demos/tambo-branding/after/stack-loop-dark.png new file mode 100644 index 0000000..878fa56 Binary files /dev/null and b/docs/demos/tambo-branding/after/stack-loop-dark.png differ diff --git a/docs/demos/tambo-branding/after/stack-loop-light.png b/docs/demos/tambo-branding/after/stack-loop-light.png new file mode 100644 index 0000000..540f1e1 Binary files /dev/null and b/docs/demos/tambo-branding/after/stack-loop-light.png differ diff --git a/docs/demos/tambo-branding/before/footer-dark.png b/docs/demos/tambo-branding/before/footer-dark.png new file mode 100644 index 0000000..395c23b Binary files /dev/null and b/docs/demos/tambo-branding/before/footer-dark.png differ diff --git a/docs/demos/tambo-branding/before/footer-light.png b/docs/demos/tambo-branding/before/footer-light.png new file mode 100644 index 0000000..b07600c Binary files /dev/null and b/docs/demos/tambo-branding/before/footer-light.png differ diff --git a/docs/demos/tambo-branding/before/header-dark.png b/docs/demos/tambo-branding/before/header-dark.png new file mode 100644 index 0000000..1e51515 Binary files /dev/null and b/docs/demos/tambo-branding/before/header-dark.png differ diff --git a/docs/demos/tambo-branding/before/header-light.png b/docs/demos/tambo-branding/before/header-light.png new file mode 100644 index 0000000..261fd8c Binary files /dev/null and b/docs/demos/tambo-branding/before/header-light.png differ diff --git a/docs/demos/tambo-branding/before/logo-dark.png b/docs/demos/tambo-branding/before/logo-dark.png new file mode 100644 index 0000000..e90cf75 Binary files /dev/null and b/docs/demos/tambo-branding/before/logo-dark.png differ diff --git a/docs/demos/tambo-branding/before/logo-light.png b/docs/demos/tambo-branding/before/logo-light.png new file mode 100644 index 0000000..0fa50c9 Binary files /dev/null and b/docs/demos/tambo-branding/before/logo-light.png differ diff --git a/docs/demos/tambo-branding/before/stack-loop-dark.png b/docs/demos/tambo-branding/before/stack-loop-dark.png new file mode 100644 index 0000000..72002f0 Binary files /dev/null and b/docs/demos/tambo-branding/before/stack-loop-dark.png differ diff --git a/docs/demos/tambo-branding/before/stack-loop-light.png b/docs/demos/tambo-branding/before/stack-loop-light.png new file mode 100644 index 0000000..36c310f Binary files /dev/null and b/docs/demos/tambo-branding/before/stack-loop-light.png differ diff --git a/docs/knowledge/repository-knowledge.json b/docs/knowledge/repository-knowledge.json index c2df035..ef6b529 100644 --- a/docs/knowledge/repository-knowledge.json +++ b/docs/knowledge/repository-knowledge.json @@ -8,7 +8,7 @@ "source": "README.md", "subject": "http://aegis.gastown.local/ontology/doc/tambo/README.md", "summary": "Tambo installs and verifies the knowledge-tool stack from a reviewable plan. The transition retains the caboodle command and existing plan/state paths; publication and installed verification remain separate.", - "source_sha256": "ca22562a35bf26d17fd4e9d9ce34d8309768898bf8d714775fe79df713a31264", + "source_sha256": "8e7fe053df1662e5ac87ae4285d421db2d1abe3885734cc70a6c731834bef50f", "type": "Concept" }, { @@ -16,7 +16,7 @@ "source": "docs/book/src/architecture.md", "subject": "http://aegis.gastown.local/ontology/doc/tambo/docs%2Fbook%2Fsrc%2Farchitecture.md", "summary": "The architecture separates plan, apply and verify. Guided intended-use answers become reviewable plan data and executable reader-path contracts rather than implicit permission to install.", - "source_sha256": "21fb4ce1e2827a14a6550a5154c7b9f15e92435dd265721ab4d4ed6f819ba97e", + "source_sha256": "5a1f2354e5cf75cac27b0aafaebbc0ced96f8cfcdcd44837af1f7f41266d6e39", "type": "Concept" }, { @@ -24,7 +24,7 @@ "source": "src/main.rs", "subject": "http://aegis.gastown.local/ontology/code/tambo/src%2Fmain.rs", "summary": "The Clap command tree defines quickstart, plan, apply, verify and doctor, with explicit plan/state paths and opt-in remote credential provisioning.", - "source_sha256": "1062af6157fec196ffe42ea259c8714573bcdb0964e00d1ab9b96e40abb1c1da", + "source_sha256": "906f1ab1f6458120456e593b124c252742bca0d82f7189725d9fd4a630c28e59", "properties": { "interfaceKind": "CLI", "publicName": "tambo and compatible caboodle command tree" @@ -35,7 +35,7 @@ "source": "src/model.rs", "subject": "http://aegis.gastown.local/ontology/code/tambo/src%2Fmodel.rs", "summary": "The serialized Plan schema defines profiles, ordered tools, optional shares and destination database, intended-use contracts and host exclusions. Unknown plan fields are rejected.", - "source_sha256": "8cde1e7890d525cb5f38f8ff5bebccb69a0489699435dc68d6a843618f9f8932", + "source_sha256": "6df656921ea4b7423f0ff8c2b2bb96a2a79bdf91bd6063b663f402451748c660", "properties": { "interfaceKind": "file-format", "publicName": "caboodle-plan.toml Plan and JSON State" @@ -46,7 +46,7 @@ "source": "src/adapter.rs", "subject": "http://aegis.gastown.local/ontology/code/tambo/src%2Fadapter.rs", "summary": "The Adapter trait separates desired version, installation, version read-back and functional verification. Built-in adapters integrate the selected stack tools; package adapters may bind verification to PATH executables.", - "source_sha256": "7ff5434afe2a2fbcdaf600341127447316498c6f211ff804621e9f6f77b9b343", + "source_sha256": "88ad05b97e3a7f3a0760482c567d49034da4148abcfc1aba48488fd01aa51386", "properties": { "interfaceKind": "library", "publicName": "caboodle::adapter::Adapter" @@ -72,7 +72,7 @@ "source": "README.md", "subject": "http://aegis.gastown.local/ontology/doc/tambo/README.md", "summary": "Start with the local single-user quickstart and its verified-tool success checks before selecting remote service mode.", - "source_sha256": "ca22562a35bf26d17fd4e9d9ce34d8309768898bf8d714775fe79df713a31264", + "source_sha256": "8e7fe053df1662e5ac87ae4285d421db2d1abe3885734cc70a6c731834bef50f", "properties": { "startHereOrder": 1, "glossaryTerm": "https://scbrown.github.io/quechua/ns#Tool" @@ -83,7 +83,7 @@ "source": "docs/book/src/configuration.md", "subject": "http://aegis.gastown.local/ontology/doc/tambo/docs%2Fbook%2Fsrc%2Fconfiguration.md", "summary": "Read the TOML plan, JSON progress state and explicit remote credential boundaries before changing installation targets or endpoint configuration.", - "source_sha256": "45754e285dd180793bc1c1daf866d5d8455512d96aa4dbec4050e90cc8115fda", + "source_sha256": "2ebb34b38d876434dbedb48fd58009dd95da962a856568791ba38dd42623a216", "properties": { "startHereOrder": 2 } diff --git a/docs/stack/README-STANDARD.md b/docs/stack/README-STANDARD.md index 7235bfc..440d65d 100644 --- a/docs/stack/README-STANDARD.md +++ b/docs/stack/README-STANDARD.md @@ -1,7 +1,7 @@ -# The caboodle stack README standard +# The Tambo stack README standard One README shape and one theme for the six public repos of the stack: -**caboodle, quipu, camayoc, bobbin, yupana, desire-path.** +**Tambo, quipu, camayoc, bobbin, yupana, desire-path.** A stranger who lands on any of them should, within one screen, know what the tool is and whether it is for them. Within five minutes they should have @@ -41,10 +41,10 @@ lacks is omitted. It is never renamed and never moved. **Length budget: the first install command appears within the first 60 lines, and the README stays under 250 lines.** Anything that does not fit is a book page with a one-line link left behind. Today the first install appears at -line 49 in caboodle, 96 in bobbin, 108 in desire-path, 188 in yupana, 197 in +line 49 in Tambo, 96 in bobbin, 108 in desire-path, 188 in yupana, 197 in quipu, and 245 in camayoc (measured on `main`, 2026-09-24). -Caboodle is the one repo where installing *is* the first success. Its §3 and +Tambo is the one repo where installing *is* the first success. Its §3 and §4 may be a single `## Install and prove it` section. That is the only permitted merge. @@ -72,7 +72,7 @@ three lines. Leave one sentence and a link. "Know what a change will break before you make it", not "Live per-tenant code structure and a change-time policy engine". - **One emoji per repo, used in the tagline and nowhere else in the body.** It - is the repo's mark. Current marks, kept: caboodle 🧰, quipu 🪢, yupana 🧵; + is the repo's mark. Current marks, kept: Tambo 🧰, quipu 🪢, yupana 🧵; bobbin, camayoc and desire-path choose theirs in their rollout PRs. - **Emoji in headings: only the two shared closing sections**, `🧺 The stack` and `📜 License`, which are identical in every repo and so read as the @@ -80,7 +80,7 @@ three lines. Leave one sentence and a link. `🚀 Quick Start`. - **Badges: at most 3, in this order**: License, then CI status (or the latest release), then `stack-quipu`. The stack badge is the shared mark: - `https://img.shields.io/badge/stack-quipu-8B5E3C.svg`, linking to caboodle. + `https://img.shields.io/badge/stack-quipu-8B5E3C.svg`, linking to Tambo. No language, toolchain or vanity badges. The platform table carries that. quipu may add its DOI as a fourth badge, because citation is a real use. - **Footer**: `assets/footer.svg` under the license line if the repo has one. @@ -94,7 +94,7 @@ each book, and diverging from it is a review finding. ## 3. The shared stack block (identical everywhere) The canonical table is [docs/stack-table.md](../stack-table.md). Copy its complete -marked block verbatim into the nine stack READMEs: Caboodle, Quipu, Camayoc, +marked block verbatim into the nine stack READMEs: Tambo, Quipu, Camayoc, Bobbin, Yupana, Desire Path, Seeds, Shantytown and Rikuy. Keep the Shuttle row. Do not add a repository-specific self marker; every copy must remain byte-identical. diff --git a/docs/stack/README-TEMPLATE.md b/docs/stack/README-TEMPLATE.md index 3b8975b..57aa4a9 100644 --- a/docs/stack/README-TEMPLATE.md +++ b/docs/stack/README-TEMPLATE.md @@ -1,5 +1,5 @@ diff --git a/justfile b/justfile index 5efbac9..51dbf23 100644 --- a/justfile +++ b/justfile @@ -1,4 +1,4 @@ -# caboodle — the whole kit +# Tambo — the stack installer default: @just --list @@ -16,6 +16,8 @@ verify plan="caboodle-plan.toml": cargo run -- verify --plan "{{plan}}" check: + python3 scripts/check-product-name.py + python3 scripts/test-product-name.py sh -n scripts/install.sh scripts/check-release-assets.sh scripts/test-release-install.sh scripts/check-crate-version.sh scripts/setup-environment.sh scripts/build-stack-packs.sh cargo fmt --check cargo clippy --all-targets --all-features -- -D warnings diff --git a/packs/src/stack-map.ttl b/packs/src/stack-map.ttl index 4b020b4..2321e0e 100644 --- a/packs/src/stack-map.ttl +++ b/packs/src/stack-map.ttl @@ -6,12 +6,12 @@ # ── The stack map ─────────────────────────────────────────────────────────── # What each tool IS and how the pieces relate. Facts true at write time: # roles and repository locations, not versions or health — those decay, and -# caboodle's verify proofs exist to measure them live instead. +# Tambo's verify proofs exist to measure them live instead. stack:caboodle a caboodle:StackComponent ; - rdfs:label "caboodle" ; + rdfs:label "tambo" ; rdfs:comment "The whole kit — an AI-installable install wizard that installs the stack, proves it works with paired negative controls, and watches it run." ; - caboodle:repository ; + caboodle:repository ; caboodle:language "Rust" ; caboodle:installs stack:quipu, stack:camayoc, stack:bobbin, stack:yupana, stack:shantytown ; caboodle:observes stack:prometheus . @@ -63,5 +63,5 @@ stack:creel a caboodle:StackComponent ; stack:prometheus a caboodle:StackComponent ; rdfs:label "prometheus" ; - rdfs:comment "Every tool's metrics, consolidated. Caboodle's third proof: observable means Prometheus actually scrapes each tool's declared exporter." ; + rdfs:comment "Every tool's metrics, consolidated. Tambo's third proof: observable means Prometheus actually scrapes each tool's declared exporter." ; caboodle:roleInStack "observability" . diff --git a/packs/src/stack-operations.ttl b/packs/src/stack-operations.ttl index f54588c..7d7c938 100644 --- a/packs/src/stack-operations.ttl +++ b/packs/src/stack-operations.ttl @@ -53,9 +53,9 @@ stack:creel stack:caboodle caboodle:buildCommand "just check" ; - caboodle:installMethod "curl -fsSL https://raw.githubusercontent.com/scbrown/caboodle/main/scripts/install.sh | sh (prebuilt release binary, sha256-verified)" ; + caboodle:installMethod "curl -fsSL https://raw.githubusercontent.com/intigraph/tambo/main/scripts/install.sh | sh (prebuilt release binary, sha256-verified)" ; caboodle:verifyProof "three proofs, not one: installed (version read-back), working (functional round-trip with a paired negative control), observable (Prometheus actually scrapes)" ; - caboodle:operationalNote "caboodle install --plan caboodle-plan.toml applies a reviewed plan; caboodle verify re-proves an installed stack" . + caboodle:operationalNote "tambo install --plan caboodle-plan.toml applies a reviewed plan; tambo verify re-proves an installed stack" . # Cross-cutting: how knowledge itself moves through the stack. stack:quipu caboodle:knowledgeFlow diff --git a/packs/stack-map/pendant/export.nt b/packs/stack-map/pendant/export.nt index 99d3e30..7b2923f 100644 --- a/packs/stack-map/pendant/export.nt +++ b/packs/stack-map/pendant/export.nt @@ -7,7 +7,7 @@ "retrieval index" . . "The whole kit — an AI-installable install wizard that installs the stack, proves it works with paired negative controls, and watches it run." . - "caboodle" . + "tambo" . . . . @@ -15,7 +15,7 @@ . "Rust" . . - . + . . "The knot-keeper: bootstrap ontology, knowledge ingress discipline, and knowledge-pack production. Owns what facts MEAN and how they earn their way into the graph; runs the governed RML executor for structured sources." . "camayoc" . @@ -30,7 +30,7 @@ . "browser harness" . . - "Every tool's metrics, consolidated. Caboodle's third proof: observable means Prometheus actually scrapes each tool's declared exporter." . + "Every tool's metrics, consolidated. Tambo's third proof: observable means Prometheus actually scrapes each tool's declared exporter." . "prometheus" . "observability" . . diff --git a/packs/stack-map/pendant/manifest.json b/packs/stack-map/pendant/manifest.json index 653341d..4432cce 100644 --- a/packs/stack-map/pendant/manifest.json +++ b/packs/stack-map/pendant/manifest.json @@ -1 +1 @@ -{"canonicalization":"RDFC-1.0","created_at":"2026-10-14T06:11:32Z","files":{"graph":"export.nt","shapes":"shapes.ttl","turtle_view":null},"graph_hash":"sha256:1313fb139aa9e473e7eccce0a89384fbd353f151e5442d11c26f5dabe416f736","pack_dir":"pendant","parent_share":null,"producer":{"name":"quipu","version":"0.13.0"},"schema":"https://github.com/scbrown/quipu/share-manifest/v1","scope":{"kind":"graph","value":"https://caboodle.dev/graph/stack-map"},"shapes_hash":"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","share_id":"sha256:d642306e0071aa8dd82e22d0bff55a0021edc233ad2fe90cc62582bcf6eeb5eb","store_id":"urn:uuid:9ce55c5d-24e1-453e-9487-11fabf1482ab","tx_anchor":2} +{"canonicalization":"RDFC-1.0","created_at":"2026-10-23T10:11:22Z","files":{"graph":"export.nt","shapes":"shapes.ttl","turtle_view":null},"graph_hash":"sha256:6735bbcce7b0816e6b82883d47b6b6f09be418163be1767925228dd63a05b23e","pack_dir":"pendant","parent_share":null,"producer":{"name":"quipu","version":"0.16.0"},"schema":"https://github.com/scbrown/quipu/share-manifest/v1","scope":{"kind":"graph","value":"https://caboodle.dev/graph/stack-map"},"shapes_hash":"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","share_id":"sha256:1e8a818b408bf6cec382cd116400fa0348f493f4bdfcff1cfd25a0f6beb65285","store_id":"urn:uuid:92beca03-a167-493f-bb13-ea11568badec","tx_anchor":2} diff --git a/packs/stack-map/pendant/manifest.ttl b/packs/stack-map/pendant/manifest.ttl index 5ce09fe..3bad629 100644 --- a/packs/stack-map/pendant/manifest.ttl +++ b/packs/stack-map/pendant/manifest.ttl @@ -5,16 +5,16 @@ @prefix xsd: . @prefix quipu: . - a dcat:Dataset, prov:Entity ; - dct:identifier "sha256:d642306e0071aa8dd82e22d0bff55a0021edc233ad2fe90cc62582bcf6eeb5eb" ; - prov:generatedAtTime "2026-10-14T06:11:32Z"^^xsd:dateTime ; + a dcat:Dataset, prov:Entity ; + dct:identifier "sha256:1e8a818b408bf6cec382cd116400fa0348f493f4bdfcff1cfd25a0f6beb65285" ; + prov:generatedAtTime "2026-10-23T10:11:22Z"^^xsd:dateTime ; prov:wasAttributedTo [ a prov:SoftwareAgent ; - dct:title "quipu" ; quipu:version "0.13.0" ] ; + dct:title "quipu" ; quipu:version "0.16.0" ] ; dcat:distribution [ a dcat:Distribution ; dcat:mediaType "application/n-triples" ; dcat:downloadURL ; spdx:checksum [ a spdx:Checksum ; spdx:algorithm spdx:checksumAlgorithm_sha256 ; - spdx:checksumValue "1313fb139aa9e473e7eccce0a89384fbd353f151e5442d11c26f5dabe416f736" ] ], + spdx:checksumValue "6735bbcce7b0816e6b82883d47b6b6f09be418163be1767925228dd63a05b23e" ] ], [ a dcat:Distribution ; dcat:mediaType "text/turtle" ; dcat:downloadURL ; spdx:checksum [ a spdx:Checksum ; spdx:algorithm spdx:checksumAlgorithm_sha256 ; diff --git a/packs/stack-operations/pendant/export.nt b/packs/stack-operations/pendant/export.nt index 4781a8d..5b17347 100644 --- a/packs/stack-operations/pendant/export.nt +++ b/packs/stack-operations/pendant/export.nt @@ -4,8 +4,8 @@ "just test" . "bobbin indexes a fixture and search returns it" . "just check" . - "curl -fsSL https://raw.githubusercontent.com/scbrown/caboodle/main/scripts/install.sh | sh (prebuilt release binary, sha256-verified)" . - "caboodle install --plan caboodle-plan.toml applies a reviewed plan; caboodle verify re-proves an installed stack" . + "curl -fsSL https://raw.githubusercontent.com/intigraph/tambo/main/scripts/install.sh | sh (prebuilt release binary, sha256-verified)" . + "tambo install --plan caboodle-plan.toml applies a reviewed plan; tambo verify re-proves an installed stack" . "three proofs, not one: installed (version read-back), working (functional round-trip with a paired negative control), observable (Prometheus actually scrapes)" . "just check" . "trunk-based, straight to main; quality gates are the only gate; never force-push main" . diff --git a/packs/stack-operations/pendant/manifest.json b/packs/stack-operations/pendant/manifest.json index 4edf858..10637d0 100644 --- a/packs/stack-operations/pendant/manifest.json +++ b/packs/stack-operations/pendant/manifest.json @@ -1 +1 @@ -{"canonicalization":"RDFC-1.0","created_at":"2026-10-14T06:11:33Z","files":{"graph":"export.nt","shapes":"shapes.ttl","turtle_view":null},"graph_hash":"sha256:33e81d931820da7227d04182072e04d51da1e770f9199b66a058d68cc147d44c","pack_dir":"pendant","parent_share":null,"producer":{"name":"quipu","version":"0.13.0"},"schema":"https://github.com/scbrown/quipu/share-manifest/v1","scope":{"kind":"graph","value":"https://caboodle.dev/graph/stack-operations"},"shapes_hash":"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","share_id":"sha256:22299cef86ce042f8e57864ec9021875355d89ce17a1d94a6721e9e454995221","store_id":"urn:uuid:9ce55c5d-24e1-453e-9487-11fabf1482ab","tx_anchor":4} +{"canonicalization":"RDFC-1.0","created_at":"2026-10-23T10:11:23Z","files":{"graph":"export.nt","shapes":"shapes.ttl","turtle_view":null},"graph_hash":"sha256:eb3e4a01d0233e1a2b4781c88d893b7b7a5831df2237943ec848edec24cfa5a2","pack_dir":"pendant","parent_share":null,"producer":{"name":"quipu","version":"0.16.0"},"schema":"https://github.com/scbrown/quipu/share-manifest/v1","scope":{"kind":"graph","value":"https://caboodle.dev/graph/stack-operations"},"shapes_hash":"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","share_id":"sha256:796da339b003af37389d902514408a29da1390ddba7b93e2508e9b64e252e60f","store_id":"urn:uuid:92beca03-a167-493f-bb13-ea11568badec","tx_anchor":4} diff --git a/packs/stack-operations/pendant/manifest.ttl b/packs/stack-operations/pendant/manifest.ttl index f4c7d01..6fe203c 100644 --- a/packs/stack-operations/pendant/manifest.ttl +++ b/packs/stack-operations/pendant/manifest.ttl @@ -5,16 +5,16 @@ @prefix xsd: . @prefix quipu: . - a dcat:Dataset, prov:Entity ; - dct:identifier "sha256:22299cef86ce042f8e57864ec9021875355d89ce17a1d94a6721e9e454995221" ; - prov:generatedAtTime "2026-10-14T06:11:33Z"^^xsd:dateTime ; + a dcat:Dataset, prov:Entity ; + dct:identifier "sha256:796da339b003af37389d902514408a29da1390ddba7b93e2508e9b64e252e60f" ; + prov:generatedAtTime "2026-10-23T10:11:23Z"^^xsd:dateTime ; prov:wasAttributedTo [ a prov:SoftwareAgent ; - dct:title "quipu" ; quipu:version "0.13.0" ] ; + dct:title "quipu" ; quipu:version "0.16.0" ] ; dcat:distribution [ a dcat:Distribution ; dcat:mediaType "application/n-triples" ; dcat:downloadURL ; spdx:checksum [ a spdx:Checksum ; spdx:algorithm spdx:checksumAlgorithm_sha256 ; - spdx:checksumValue "33e81d931820da7227d04182072e04d51da1e770f9199b66a058d68cc147d44c" ] ], + spdx:checksumValue "eb3e4a01d0233e1a2b4781c88d893b7b7a5831df2237943ec848edec24cfa5a2" ] ], [ a dcat:Distribution ; dcat:mediaType "text/turtle" ; dcat:downloadURL ; spdx:checksum [ a spdx:Checksum ; spdx:algorithm spdx:checksumAlgorithm_sha256 ; diff --git a/scripts/check-product-name.py b/scripts/check-product-name.py new file mode 100644 index 0000000..1a9b5fd --- /dev/null +++ b/scripts/check-product-name.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 +"""Keep reviewed legacy contracts exact while rejecting new old-brand references.""" +# arming: ci just check +import argparse +from collections import Counter +import hashlib +import json +from pathlib import Path +import re +import subprocess + +PATTERN = re.compile('caboodle', re.IGNORECASE) +LEDGER = 'docs/compatibility/legacy-name-contracts.json' + + +def inventory(root): + result = {} + names = subprocess.check_output( + ['git', 'ls-files', '-z', '--cached', '--others', '--exclude-standard'], cwd=root + ).decode().split('\0') + for name in sorted(set(filter(None, names)) - {LEDGER}): + path = root / name + if not path.is_file() or path.is_symlink(): + continue + try: + text = path.read_text(encoding='utf-8') + except UnicodeDecodeError: + continue + matches = Counter( + hashlib.sha256(line.encode()).hexdigest() + for line in text.splitlines() if PATTERN.search(line) + ) + if matches: + result[name] = dict(sorted(matches.items())) + return result + + +def check(root, ledger): + document = json.loads(ledger.read_text()) + if document.get('version') != 1: + raise ValueError('unsupported compatibility inventory version') + contracts = document['files'] + if any(not entry.get('reason', '').strip() for entry in contracts.values()): + raise ValueError('every retained file needs a compatibility reason') + actual = inventory(root) + expected = {path: entry['lines'] for path, entry in contracts.items()} + changed = sorted(path for path in actual.keys() | expected.keys() + if actual.get(path) != expected.get(path)) + return changed, sum(sum(lines.values()) for lines in actual.values()) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--root', type=Path, default=Path(__file__).resolve().parents[1]) + args = parser.parse_args() + changed, count = check(args.root, args.root / LEDGER) + if changed: + print('Unreviewed legacy-name inventory changes:') + print('\n'.join(changed)) + return 1 + print(f'Reviewed compatibility inventory: {count} references; no unclassified changes') + return 0 + + +if __name__ == '__main__': + raise SystemExit(main()) diff --git a/scripts/test-product-name.py b/scripts/test-product-name.py new file mode 100644 index 0000000..1150cb4 --- /dev/null +++ b/scripts/test-product-name.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +"""Exercise the real inventory against new branding leaks and retained contracts.""" +import importlib.util +import json +from pathlib import Path +import subprocess +import tempfile +import unittest + +spec = importlib.util.spec_from_file_location('product_name', Path(__file__).with_name('check-product-name.py')) +checker = importlib.util.module_from_spec(spec) +spec.loader.exec_module(checker) + + +class ProductName(unittest.TestCase): + def test_exact_contract_and_new_current_or_untracked_reference(self): + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + subprocess.run(['git', 'init', '-q', root], check=True) + (root / 'state.md').write_text('Keep .caboodle/state.json\n') + ledger = root / checker.LEDGER + ledger.parent.mkdir(parents=True) + ledger.write_text(json.dumps({'version': 1, 'files': { + name: {'reason': 'Existing state path', 'lines': lines} + for name, lines in checker.inventory(root).items() + }})) + self.assertEqual(checker.check(root, ledger)[0], []) + (root / 'README.md').write_text('# Caboodle\n') + self.assertEqual(checker.check(root, ledger)[0], ['README.md']) + (root / 'README.md').write_text('# Tambo\n') + self.assertEqual(checker.check(root, ledger)[0], []) + (root / 'state.md').write_text('Keep .caboodle/other.json\n') + self.assertEqual(checker.check(root, ledger)[0], ['state.md']) + + def test_reason_is_required(self): + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + subprocess.run(['git', 'init', '-q', root], check=True) + ledger = root / 'ledger.json' + ledger.write_text(json.dumps({'version': 1, 'files': {'fixture': {'lines': {}}}})) + with self.assertRaises(ValueError): + checker.check(root, ledger) + + +if __name__ == '__main__': + unittest.main() diff --git a/skills/caboodle/SKILL.md b/skills/caboodle/SKILL.md deleted file mode 100644 index 84b5420..0000000 --- a/skills/caboodle/SKILL.md +++ /dev/null @@ -1,157 +0,0 @@ ---- -name: caboodle -description: Install, verify, diagnose, resume, or update the Quipu-stack tool corpus with CABOODLE. Use when an agent or human wants a review-first guided installation of Quipu, Camayoc, Bobbin, Yupana, and Desire Path, needs to resume an interrupted CABOODLE interview or apply, or needs functional proof that the installed stack works. ---- - -# CABOODLE - -Use the local quickstart for a default install. Customized installs follow -interview → plan review → apply → verify. Use the same CLI in every harness. - -## Bootstrap and preflight - -For CABOODLE itself, prefer the reviewed checksummed release path documented in -`docs/book/src/installing.md`. A source install must pin a reviewed commit. - -1. If `caboodle` is absent and the request authorizes installation, install the public source with: - `cargo install --git https://github.com/intigraph/tambo --locked`. - Otherwise stop and request authorization; bootstrapping CABOODLE is itself an - installation. -2. Prove the binary answers: `caboodle --version`. -3. Run `skills/caboodle/scripts/check-surface.sh "$(command -v caboodle)"` - when this skill directory is available. A failed surface check is a bootstrap - failure; do not continue with guessed commands. -4. For an existing or customized plan, run `caboodle doctor` before apply or - install. Without a plan doctor checks all tools, so it is not a prerequisite - for the default quickstart. It is read-only. Report every `FAIL` line with its fix and - stop until each is resolved; report `warn` lines to the operator. - -Do not print credentials or introduce private endpoints. Do not delete -`.caboodle/` to recover from an error: it contains the resumable interview and -last-proven state. - -## Default local install - -When installation is already authorized, use a persistent empty work directory -and run `caboodle quickstart`. It saves a retrieval plan, installs Quipu, Camayoc -and Bobbin, and verifies each with isolated functional controls. There is no -interview, issued token or running-server prerequisite. Recheck with -`caboodle verify`; keep `caboodle-plan.toml` and `.caboodle/` to resume. -Quickstart reuses an existing plan and never overwrites it. - -Remote access is advanced and opt-in: `QUIPU_SERVER` or a plan's `quipu_mcp` -selects authenticated remote verification. That path still requires an issued -credential, canonical permissions, and an accepted server probe. Never invent -or auto-mint an issued credential. Local signing-key enrollment is not an -installation prerequisite. - -The interview below is for customized profiles and intended-use contracts; -it is not required for the default single-user install. - -## Interview and plan review - -For a guided install, run: - -```sh -caboodle init --guided -``` - -Run from the same working directory throughout: default session, plan, and -state paths are relative. Before resuming, inspect `.caboodle/interview.toml` to -confirm the accepted answers. An older `caboodle-plan.toml` or state file is not -evidence that this interview completed. If custom paths or the original working -directory are unknown, stop and ask; do not search broadly or start a new -session that could fork the plan. - -If input ends, rerun the exact command. Accepted answers resume from -`.caboodle/interview.toml`; no install has happened. For automation with choices -already supplied, use `caboodle plan --profile kg|retrieval|code-intel|everything`. Crew plans may be -generated with `--profile crew --crew shantytown|creel|both|standalone`. - -The interview must elicit intended use, each desired crew member's theme/domain/ -role, and at least one question the finished ontology must answer. For an -unattended run, write the same reviewed schema to `caboodle-intent.toml` and run -`caboodle plan --intent caboodle-intent.toml`; do not substitute install flags -for the use interview. - -Read `caboodle-plan.toml` back to the operator. Confirm the selected profile, -tools, crew themes, and anticipated-question contracts. Never apply a -conversational answer directly: the plan file is the -review boundary. If the request did not already authorize installation, stop -after presenting the plan. Do not run `apply`, `install`, `verify`, or -`project-settings` at that boundary: verify performs functional writes and -updates state, while settings projection writes configuration artifacts. - -## Apply and verify - -After plan approval: - -```sh -caboodle apply -caboodle verify -caboodle verify-questions -``` - -`apply` proves each installed binary by version read-back. `verify` then runs an -isolated negative control, functional write/index, and reader-path proof for -each selected adapter. Both commands update `.caboodle/state.json` atomically, -so rerunning converges. - -Use `caboodle install` only as shorthand for apply + verify after the plan has -already been reviewed. Use `--skip-install` only when an external package -manager owns installation; it still requires version and functional proof. - -For a Creel or `both` plan, `apply` installs the checksum-pinned static browser -bundle, but verification additionally requires browser-owned capability -evidence: - -```sh -caboodle verify \ - --creel-doctor creel-doctor.json \ - --creel-admission creel-admission.json -``` - -Those files must come from Creel's doctor and governor interfaces. Never invent -them or translate a human-readable banner into them. Missing evidence, an -unknown required doctor check, stale/unknown policy signals, or a refusal -verdict must stop the install. - -`verify-questions` executes every planned `SELECT`/`ASK` through Quipu and -requires its expected marker. A query that runs but answers the wrong shape is -not a pass. - -Report the selected profile, each applied version, each verified adapter, and -the retained plan/state paths. Exit status or an “installed” banner alone is -not proof. - -When observability is requested, collect explicit `host:port` targets only for -selected tools whose versioned contract declares a metrics endpoint. Run -`caboodle render-observability`, then `caboodle validate-observability`, and -present all four generated artifacts for review. Rendering is not deployment -and is not evidence that Prometheus scraped a target. - -Applied and verified transitions queue automatically under -`.caboodle/episodes`. For bead snapshots, run `caboodle queue-br `. -Never put a token in a plan or queue: `flush-episodes` reads only -`QUIPU_AUTH_TOKEN`, requires HTTPS or explicit localhost, and must leave an -identical file pending on any ambiguous response. Report queued and delivered -counts separately. - -## Diagnose and resume - -- Interview paused at EOF: rerun `caboodle init --guided` with the same - `--session` and `--output` paths if custom paths were used. -- Apply failed before version read-back: keep the state file, fix the named - installer or PATH problem, and rerun `caboodle apply`. -- Apply succeeds with `--skip-install` but normal apply fails: the external - package manager boundary is the likely cause; state that as inferred until - its own logs prove it. -- Verify names an adapter: run `caboodle verify` again only after addressing - that adapter. Do not mark the stack healthy because another adapter passed. -- Plan parsing fails: repair or regenerate the plan; never bypass validation by - editing state. - -CABOODLE 0.1 has no `upgrade` subcommand. Do not invent one. Update the -`caboodle` binary through its documented install path, prove `--version`, then -rerun apply and verify against the existing reviewed plan. A changed tool -version clears its prior verified state until functional verification passes. diff --git a/skills/caboodle/agents/openai.yaml b/skills/caboodle/agents/openai.yaml deleted file mode 100644 index 8340418..0000000 --- a/skills/caboodle/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "CABOODLE" - short_description: "Install and prove the AI tool corpus" - default_prompt: "Use $caboodle to create, review, install, and verify a CABOODLE stack plan." diff --git a/skills/caboodle/scripts/check-surface.sh b/skills/caboodle/scripts/check-surface.sh deleted file mode 100755 index 077f0c8..0000000 --- a/skills/caboodle/scripts/check-surface.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh -set -eu - -caboodle_bin=${1:-caboodle} - -"$caboodle_bin" --version >/dev/null -for command in quickstart init plan apply verify install project-settings verify-questions render-observability validate-observability queue-br flush-episodes; do - "$caboodle_bin" "$command" --help >/dev/null -done - -"$caboodle_bin" init --help | grep -q -- '--guided' -"$caboodle_bin" plan --help | grep -q -- '--profile' -"$caboodle_bin" plan --help | grep -q -- '--intent' -"$caboodle_bin" apply --help | grep -q -- '--skip-install' -"$caboodle_bin" verify --help | grep -q -- '--state' -"$caboodle_bin" verify --help | grep -q -- '--creel-doctor' -"$caboodle_bin" verify --help | grep -q -- '--creel-admission' -"$caboodle_bin" install --help | grep -q -- '--creel-doctor' -"$caboodle_bin" install --help | grep -q -- '--creel-admission' -"$caboodle_bin" verify-questions --help | grep -q -- '--plan' - -printf '%s\n' 'caboodle skill surface: verified' diff --git a/skills/tambo/SKILL.md b/skills/tambo/SKILL.md index 8f2b62f..f092570 100644 --- a/skills/tambo/SKILL.md +++ b/skills/tambo/SKILL.md @@ -5,9 +5,8 @@ description: Install, verify, diagnose, resume, or update the Quipu-stack tool c # Tambo -Tambo is the renamed Caboodle installer. The `caboodle` command and skill remain -compatibility entry points for the transition release. Keep the existing plan -and state paths below; renaming the command does not migrate user state. +Install, inspect, resume and verify the stack through the `tambo` CLI. +Preserve the plan and state paths below. Use the local quickstart for a default install. Customized installs follow interview → plan review → apply → verify. Use the same CLI in every harness. @@ -18,8 +17,7 @@ For Tambo itself, prefer the reviewed checksummed release path documented in `docs/book/src/installing.md`. A source install must pin a reviewed commit. 1. If `tambo` is absent and the request authorizes installation, install the public source with: - `cargo install --git https://github.com/intigraph/tambo --bin tambo --locked`. - The compatibility repository URL remains valid through the repository rename. + `cargo install --git https://github.com/intigraph/tambo --rev --bin tambo --locked`. Otherwise stop and request authorization; bootstrapping Tambo is itself an installation. 2. Prove the binary answers: `tambo --version`. diff --git a/src/adapter.rs b/src/adapter.rs index 9e22e4b..8d6ff14 100644 --- a/src/adapter.rs +++ b/src/adapter.rs @@ -20,7 +20,7 @@ pub(crate) use manifest::{ pub trait Adapter { fn name(&self) -> ToolName; - /// Release identity reviewed and pinned by this Caboodle build. + /// Release identity reviewed and pinned by this Tambo build. fn desired_version(&self) -> String; fn install(&self) -> Result<()>; fn version(&self) -> Result; @@ -333,7 +333,7 @@ fn require_minimum_version(output: &str, minimum: (u64, u64, u64), program: &str }; if found < minimum { bail!( - "{program} {}.{}.{} is too old; CABOODLE requires at least {}.{}.{}", + "{program} {}.{}.{} is too old; Tambo requires at least {}.{}.{}", found.0, found.1, found.2, @@ -402,7 +402,7 @@ impl Adapter for Quipu { fn install(&self) -> Result<()> { if self.external.is_some() { - bail!("external Quipu is not owned by Caboodle; installation refused"); + bail!("external Quipu is not owned by Tambo; installation refused"); } preflight_owned_quipu_alias()?; match self.flavor { @@ -569,7 +569,7 @@ fn quipu_release_target_for(arch: &str, os: &str) -> Result<&'static str> { ("aarch64", "linux") => Ok("aarch64-unknown-linux-gnu"), ("x86_64", "macos") => Ok("x86_64-apple-darwin"), ("aarch64", "macos") => Ok("aarch64-apple-darwin"), - (arch, os) => bail!("Quipu has no checksummed CABOODLE release for {arch}-{os}"), + (arch, os) => bail!("Quipu has no checksummed Tambo release for {arch}-{os}"), } } @@ -909,7 +909,7 @@ impl Adapter for Bobbin { fs::write( root.path().join("fixture.rs"), format!( - "/// A unique CABOODLE verification routine.\npub fn {marker}() -> &'static str {{\n \"indexed\"\n}}\n" + "/// A unique Tambo verification routine.\npub fn {marker}() -> &'static str {{\n \"indexed\"\n}}\n" ), ) .context("write bobbin verification fixture")?; @@ -1022,7 +1022,7 @@ fn yupana_release_for(arch: &str, os: &str) -> Result<(&'static str, &'static st "x86_64-apple-darwin", "94b872a6cd3ea9de4bf4271b1d16fa569f1979b4d216e0fd307d88e1b66364a2", )), - _ => bail!("Yupana v{YUPANA_VERSION} has no checksummed CABOODLE release for {arch}-{os}"), + _ => bail!("Yupana v{YUPANA_VERSION} has no checksummed Tambo release for {arch}-{os}"), } } @@ -1239,7 +1239,7 @@ fn bobbin_release_target() -> Result<&'static str> { ("aarch64", "linux") => Ok("aarch64-unknown-linux-gnu"), ("x86_64", "macos") => Ok("x86_64-apple-darwin"), ("aarch64", "macos") => Ok("aarch64-apple-darwin"), - (arch, os) => bail!("bobbin has no CABOODLE release target for {arch}-{os}"), + (arch, os) => bail!("bobbin has no Tambo release target for {arch}-{os}"), } } diff --git a/src/apt_owned.rs b/src/apt_owned.rs index c060f4d..83190e8 100644 --- a/src/apt_owned.rs +++ b/src/apt_owned.rs @@ -1,10 +1,10 @@ -//! Tools installed by a system package manager are not CABOODLE's to replace. +//! Tools installed by a system package manager are not Tambo's to replace. //! //! A host can install a stack tool from the signed apt repository and keep its //! user path (for example `~/.local/bin/sd`) as a symlink to the packaged //! `/usr/bin/sd`. Replacing that path would turn the symlink into a regular //! file and silently shadow the package: apt would keep upgrading a binary -//! nobody runs. So before replacing or re-aliasing a binary, CABOODLE resolves +//! nobody runs. So before replacing or re-aliasing a binary, Tambo resolves //! the path and asks dpkg who owns the result. An owned binary is refused with //! the package name, and the package manager stays the only updater. //! diff --git a/src/doctor.rs b/src/doctor.rs index e7a76e2..f87fc6d 100644 --- a/src/doctor.rs +++ b/src/doctor.rs @@ -1,4 +1,4 @@ -//! Read-only preflight: what will stop `caboodle install` on this host, before +//! Read-only preflight: what will stop `tambo install` on this host, before //! anything is downloaded, built, or started. //! //! Every check here inspects the platform, PATH, the MCP registrations the agent @@ -133,11 +133,11 @@ fn prerequisite_hint(command: &str) -> &'static str { "cargo" => "install Rust from https://rustup.rs", "python3" => "install Python 3.9+ from your package manager", "git" | "curl" | "tar" | "bash" => "install it from your package manager", - _ => "install it and rerun `caboodle doctor`", + _ => "install it and rerun `tambo doctor`", } } -/// This build, as `caboodle --version` prints it. +/// This build, as `tambo --version` prints it. pub const SELF_VERSION: &str = concat!( "caboodle ", env!("CARGO_PKG_VERSION"), @@ -306,7 +306,7 @@ pub(crate) fn mcp_findings( None if work_dir => Finding::new( Level::Ok, format!("mcp {want}"), - format!("not registered here, as expected: registration is per repository, and this is the caboodle work directory. In each repository you want searchable, run: `{}`", mcp_add_command(want)), + format!("not registered here, as expected: registration is per repository, and this is the Tambo work directory. In each repository you want searchable, run: `{}`", mcp_add_command(want)), ), None => Finding::new( Level::Warn, @@ -563,7 +563,7 @@ fn check_tool(tool: ToolName, flavor: QuipuFlavor, path: Option<&std::ffi::OsStr Level::Warn, tool.as_str(), format!( - "installed ({}) differs from the reviewed {desired}; `caboodle check-updates` explains the drift", + "installed ({}) differs from the reviewed {desired}; `tambo check-updates` explains the drift", one_line(&installed) ), )), @@ -662,7 +662,7 @@ pub fn report(findings: &[Finding], installed: bool, output: &mut W) - if failures == 0 && installed { writeln!( output, - "doctor: installed and verified ({warnings} warning{plural}); recheck with `caboodle verify`" + "doctor: installed and verified ({warnings} warning{plural}); recheck with `tambo verify`" )?; } else if failures == 0 { writeln!( @@ -679,7 +679,7 @@ pub fn report(findings: &[Finding], installed: bool, output: &mut W) - }; writeln!( output, - "doctor: {earlier}{failures} blocker{} — fix the FAIL lines, then rerun `caboodle doctor`", + "doctor: {earlier}{failures} blocker{} — fix the FAIL lines, then rerun `tambo doctor`", if failures == 1 { "" } else { "s" } )?; } diff --git a/src/dp_alias.rs b/src/dp_alias.rs index e62aa23..f4013ae 100644 --- a/src/dp_alias.rs +++ b/src/dp_alias.rs @@ -155,7 +155,7 @@ pub fn verify(dp: Option<&Path>, db: Option<&Path>) -> Result { Existing::Ours => Ok(Outcome::AlreadySet), Existing::Other(target) => Ok(Outcome::KeptLocal(target)), Existing::Absent => bail!( - "Desire Path has no {FROM} command alias; `caboodle apply` sets {FROM} -> {TO} for plans with seeds and desire-path" + "Desire Path has no {FROM} command alias; `tambo apply` sets {FROM} -> {TO} for plans with seeds and desire-path" ), } } diff --git a/src/emission.rs b/src/emission.rs index 41cc073..4e59600 100644 --- a/src/emission.rs +++ b/src/emission.rs @@ -34,7 +34,7 @@ pub fn queue_transition( &queue, transition, tool, - &format!("CABOODLE {transition}: {tool} at {version}"), + &format!("Tambo {transition}: {tool} at {version}"), ) } diff --git a/src/engine.rs b/src/engine.rs index 965cc6e..06638e2 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -26,7 +26,7 @@ struct ImportResult { } /// What `apply` should do about an installed tool whose version is not the one -/// this Caboodle build reviewed (aegis-5ctwu3). +/// this Tambo build reviewed (aegis-5ctwu3). /// /// Split out as a pure function ON PURPOSE: the act it decides is a network /// download, so a test that drove `apply` end to end would be measuring GitHub @@ -83,7 +83,7 @@ pub fn apply(plan: &Plan, state_path: &Path, skip_install: bool) -> Result Result { match decide_convergence(&installed, &desired, false, skip_install) { - Convergence::Current => installed, - Convergence::RefuseSkipInstall => bail!( - "{} is installed at {installed} but this Caboodle build reviewed {desired}; \ + Convergence::Current => installed, + Convergence::RefuseSkipInstall => bail!( + "{} is installed at {installed} but this Tambo build reviewed {desired}; \ --skip-install refuses to converge it. Install {desired}, or drop \ --skip-install to let apply converge it.", name.as_str() ), - Convergence::Decline => { - println!( - "{}: NOT converged — installed {installed}, reviewed {desired}. \ + Convergence::Decline => { + println!( + "{}: NOT converged — installed {installed}, reviewed {desired}. \ Apply does not downgrade or replace an unrecognised version; \ - use `caboodle update-release` deliberately if that is what you want.", - name.as_str() - ); - installed - } - Convergence::Converge => { - eprintln!( - "{}: stale ({installed}); converging to reviewed {desired}", - name.as_str() - ); - adapter.install().with_context(|| { - format!("{} convergence to reviewed {desired}", name.as_str()) - })?; - let after = adapter.version().with_context(|| { - format!("{} version read-back after convergence", name.as_str()) - })?; - // The read-back is the proof, not the install's exit code. - if !adapter.is_current(&after) { - bail!( - "{} did not reach reviewed release {desired} (got {after}); \ - refusing to record it as applied", + use `tambo update-release` deliberately if that is what you want.", name.as_str() ); + installed + } + Convergence::Converge => { + eprintln!( + "{}: stale ({installed}); converging to reviewed {desired}", + name.as_str() + ); + adapter.install().with_context(|| { + format!("{} convergence to reviewed {desired}", name.as_str()) + })?; + let after = adapter.version().with_context(|| { + format!("{} version read-back after convergence", name.as_str()) + })?; + // The read-back is the proof, not the install's exit code. + if !adapter.is_current(&after) { + bail!( + "{} did not reach reviewed release {desired} (got {after}); \ + refusing to record it as applied", + name.as_str() + ); + } + println!("{}: converged {installed} -> {after}", name.as_str()); + after } - println!("{}: converged {installed} -> {after}", name.as_str()); - after } } - } Err(error) if !skip_install @@ -149,7 +149,7 @@ pub fn apply(plan: &Plan, state_path: &Path, skip_install: bool) -> Result Result Result } else { format!( "{} functional verification — VERSION SKEW: {version} is installed, \ - this Caboodle build reviewed and verifies against {desired}. The error \ + this Tambo build reviewed and verifies against {desired}. The error \ below is most likely that skew, not a broken tool. Converge with \ - `caboodle apply` (or `caboodle update`), then re-verify.", + `tambo apply` (or `tambo update`), then re-verify.", name.as_str() ) } @@ -539,7 +539,7 @@ pub fn verify(plan: &Plan, state_path: &Path, evidence: &CrewEvidence) -> Result Ok(state) } -/// Compare the running toolchain to the releases reviewed by this Caboodle +/// Compare the running toolchain to the releases reviewed by this Tambo /// build. Returns true only when every selected tool is current. pub(crate) fn reviewed_drift_status(installed: &str, desired: &str) -> &'static str { match crate::release_update::behind_reviewed(installed, desired) { diff --git a/src/hook_bundles.rs b/src/hook_bundles.rs index 1471b9c..d4578df 100644 --- a/src/hook_bundles.rs +++ b/src/hook_bundles.rs @@ -1,7 +1,7 @@ //! The Quipu stack's hook bundles, and the verification that st renders them. //! //! Each tool's hooks are declared as a bundle (schema `st.hook-bundle/1`) under -//! `hook-bundles/`. CABOODLE ships them; st owns rendering them into every +//! `hook-bundles/`. Tambo ships them; st owns rendering them into every //! emitted role file and checking them (aegis-u1ybxo, aegis-68j0ys). Here //! verification asks st's own check whether each bundle is configured. @@ -10,7 +10,7 @@ use std::process::Command; use anyhow::{bail, Context, Result}; use serde_json::Value; -/// The bundles CABOODLE ships, as `(name, bundle JSON)`. +/// The bundles Tambo ships, as `(name, bundle JSON)`. pub const BUNDLES: &[(&str, &str)] = &[ ("bobbin", include_str!("../hook-bundles/bobbin.json")), ( @@ -87,7 +87,7 @@ pub fn missing_executables(bundle: &str, home: Option<&std::path::Path>) -> Vec< /// registered copy and answers `unchanged` without re-rendering anything. /// /// When `st` is not installed this is a NOTE, not a failure: st is optional on -/// a host, and `caboodle verify` reports the bundles as unregistered there. A +/// a host, and `tambo verify` reports the bundles as unregistered there. A /// bundle st REFUSES, or an answer outside st's contract, fails: that is a /// defect in the shipped bundle or a changed contract, never something to /// skip. Returns one report line per bundle. @@ -123,7 +123,7 @@ pub fn register(bundles: &[(&str, &str)], st: &str) -> Result> { Err(error) if error.kind() == std::io::ErrorKind::NotFound => { return Ok(vec![format!( "NOT registered: `{st}` (shantytown) is not installed on this host. \ - Install it and rerun `caboodle apply`; verify reports the bundles until then" + Install it and rerun `tambo apply`; verify reports the bundles until then" )]); } Err(error) => { @@ -591,7 +591,7 @@ mod tests { } /// Against the host's real st (`cargo test -- --ignored live_register`): - /// registers every shipped bundle, exactly the step `caboodle apply` runs. + /// registers every shipped bundle, exactly the step `tambo apply` runs. /// It WRITES the host's st registry; a second run must print `unchanged` /// for every bundle (idempotence on the real st). #[test] @@ -603,7 +603,7 @@ mod tests { } /// Against the host's real st (`cargo test -- --ignored live_`): prints the - /// verdict so an operator can see what `caboodle verify` would say. + /// verdict so an operator can see what `tambo verify` would say. #[test] fn evidence_is_well_formed_and_fails_closed_without_its_source() { let mut seen = 0; diff --git a/src/main.rs b/src/main.rs index f210d21..cf8d878 100644 --- a/src/main.rs +++ b/src/main.rs @@ -160,7 +160,7 @@ enum Commands { #[arg(long)] host_profile: Option, }, - /// Report drift from the releases reviewed by this Caboodle build + /// Report drift from the releases reviewed by this Tambo build CheckUpdates { #[arg(short, long, default_value = "caboodle-plan.toml")] plan: PathBuf, diff --git a/src/model.rs b/src/model.rs index 4f953b0..4768c6f 100644 --- a/src/model.rs +++ b/src/model.rs @@ -292,7 +292,7 @@ pub struct Plan { pub quipu_db: Option, #[serde(default, skip_serializing_if = "QuipuFlavor::is_release")] pub quipu_flavor: QuipuFlavor, - /// Quipu is owned outside Caboodle; prove the executables selected by PATH. + /// Quipu is owned outside Tambo; prove the executables selected by PATH. #[serde(default, skip_serializing_if = "std::ops::Not::not")] pub external_quipu: bool, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -482,7 +482,7 @@ impl InstallIntent { pub fn read(path: &Path) -> Result { if !path.exists() { bail!( - "no intent file at {}; run `caboodle init --guided` to answer the interview instead, or write one (see the \"Using caboodle\" chapter of docs/book)", + "no intent file at {}; run `tambo init --guided` to answer the interview instead, or write one (see the \"Using caboodle\" chapter of docs/book)", path.display() ); } @@ -594,7 +594,7 @@ impl Plan { pub fn read(path: &Path) -> Result { if !path.exists() { bail!( - "no plan at {}; run `caboodle init --guided` (or `caboodle plan`) first", + "no plan at {}; run `tambo init --guided` (or `tambo plan`) first", path.display() ); } @@ -621,7 +621,7 @@ impl Plan { ); } if self.external_quipu && self.quipu_flavor != QuipuFlavor::Release { - bail!("external_quipu cannot request a Caboodle build flavor"); + bail!("external_quipu cannot request a Tambo build flavor"); } if self.tools.is_empty() { bail!("plan selects no tools"); diff --git a/src/observability.rs b/src/observability.rs index 3679e4c..9b7127a 100644 --- a/src/observability.rs +++ b/src/observability.rs @@ -147,7 +147,7 @@ pub fn render(plan: &Plan, targets_path: &Path, output: &Path) -> Result<()> { output.join("dashboard.json"), serde_json::to_vec_pretty(&json!({ "schemaVersion": 39, - "title": "CABOODLE selected corpus", + "title": "Tambo selected corpus", "panels": panels }))?, )?; diff --git a/src/package.rs b/src/package.rs index 96b1c3c..49bcf51 100644 --- a/src/package.rs +++ b/src/package.rs @@ -2,7 +2,7 @@ //! //! On a host whose stack is delivered by a package manager, that manager is //! the only writer. On apt hosts that is the root unattended-upgrades lane; -//! automated caboodle runs never call apt or sudo. Caboodle still has to judge +//! automated caboodle runs never call apt or sudo. Tambo still has to judge //! such a tool, so it reads the package receipt (the package that owns the //! binary PATH runs, and its version) and compares the upstream version with //! the reviewed pin: current, ahead (never downgraded) or behind (the package diff --git a/src/quipu_credential.rs b/src/quipu_credential.rs index 9119c04..0807b68 100644 --- a/src/quipu_credential.rs +++ b/src/quipu_credential.rs @@ -3,7 +3,7 @@ use std::{env, fs, path::Path, process::Command}; use anyhow::{bail, Context, Result}; -const FIX: &str = "install the issued token with `install -d -m 700 \"$HOME/.config/quipu\" && install -m 400 /secure/issued-token \"$HOME/.config/quipu/token\"`; run `caboodle doctor`"; +const FIX: &str = "install the issued token with `install -d -m 700 \"$HOME/.config/quipu\" && install -m 400 /secure/issued-token \"$HOME/.config/quipu/token\"`; run `tambo doctor`"; fn check_file(home: &Path) -> Result<()> { let path = home.join(".config/quipu/token"); @@ -35,7 +35,7 @@ fn classify(code: u16) -> Result<()> { match code { 200..=299 => Ok(()), 401 => bail!("Quipu credential rejected by authenticated /shapes read; checked QUIPU_AUTH_TOKEN > QUIPU_AUTH_TOKEN_FILE > ~/.config/quipu/token; verify issuer and server; {FIX}"), - other => bail!("Quipu credential acceptance unproven: /shapes HTTP {other}; check server/connectivity; run `caboodle doctor`"), + other => bail!("Quipu credential acceptance unproven: /shapes HTTP {other}; check server/connectivity; run `tambo doctor`"), } } @@ -56,7 +56,7 @@ fn verify_current(server: &str) -> Result<()> { ))?; let control = read_status(server, None, "auth-negative-probe")?; if control != 401 { - bail!("Quipu credential acceptance unproven: unauthenticated /shapes control returned HTTP {control}, expected 401; run `caboodle doctor`"); + bail!("Quipu credential acceptance unproven: unauthenticated /shapes control returned HTTP {control}, expected 401; run `tambo doctor`"); } classify(read_status(server, Some(auth.path()), "caboodle-verify")?) } @@ -144,7 +144,7 @@ fn read_status(server: &str, auth: Option<&Path>, client: &str) -> Result { .output() .context("cannot run authenticated Quipu credential read")?; if !output.status.success() { - bail!("Quipu credential acceptance unproven: authenticated read transport failed; check server/connectivity; run `caboodle doctor`"); + bail!("Quipu credential acceptance unproven: authenticated read transport failed; check server/connectivity; run `tambo doctor`"); } Ok(String::from_utf8_lossy(&output.stdout) .trim() diff --git a/src/quipu_mcp.rs b/src/quipu_mcp.rs index e295ede..f330b09 100644 --- a/src/quipu_mcp.rs +++ b/src/quipu_mcp.rs @@ -439,12 +439,12 @@ pub fn verify(url: &str) -> Result> { let config = read_claude_config()?; let entries = quipu_entries(&config); match entries.iter().find(|(scope, _)| scope == "user scope") { - None => bail!("FAIL: no user-scope quipu MCP entry is registered; run `caboodle apply`"), + None => bail!("FAIL: no user-scope quipu MCP entry is registered; run `tambo apply`"), Some((_, entry)) if entry.get("headersHelper").is_none() => bail!( - "FAIL: the user-scope quipu MCP entry has no headersHelper, so MCP writes carry no bearer; run `caboodle apply`" + "FAIL: the user-scope quipu MCP entry has no headersHelper, so MCP writes carry no bearer; run `tambo apply`" ), Some((_, entry)) if entry != &desired => bail!( - "FAIL: the user-scope quipu MCP entry differs from the plan (expected {desired}, found {}); run `caboodle apply`", + "FAIL: the user-scope quipu MCP entry differs from the plan (expected {desired}, found {}); run `tambo apply`", redact(entry) ), Some(_) => {} diff --git a/src/release_update.rs b/src/release_update.rs index 8835f07..14301fe 100644 --- a/src/release_update.rs +++ b/src/release_update.rs @@ -99,7 +99,7 @@ fn names_for_platform( ("linux", "x86_64") => "x86_64-unknown-linux-gnu", ("macos", "x86_64") => "x86_64-apple-darwin", ("macos", "aarch64") => "aarch64-apple-darwin", - _ => bail!("Caboodle self-update has no published target for {os}/{arch}"), + _ => bail!("Tambo self-update has no published target for {os}/{arch}"), }; let archive = format!("caboodle-{tag}-{target}.tar.gz"); return Ok(( @@ -268,7 +268,7 @@ pub fn guard_reviewed_update(tool: ToolName, desired: &str) -> Result<()> { pub fn update(plan: &Plan, tool: ToolName, state_path: &Path, check_only: bool) -> Result<()> { plan.validate()?; if tool == ToolName::Quipu && plan.external_quipu { - bail!("external Quipu is not owned by Caboodle; release update refused"); + bail!("external Quipu is not owned by Tambo; release update refused"); } if !plan.tools.contains(&tool) { bail!("tool is not selected by the reviewed plan"); @@ -448,7 +448,7 @@ fn update_member( Ok(()) } -/// Update Caboodle itself from a published checksummed release. +/// Update Tambo itself from a published checksummed release. pub fn update_self(state_path: &Path, check_only: bool) -> Result<()> { update_binary(None, None, state_path, check_only, None, None) } @@ -737,7 +737,7 @@ fn update_binary( } let help = text(destination.to_str().unwrap(), &["update-release", "--help"])?; if !help.contains("--tool") { - bail!("updated Caboodle omitted release-update command contract"); + bail!("updated Tambo omitted release-update command contract"); } } Ok(()) @@ -885,7 +885,7 @@ mod tests { ] { assert!(names_for_platform(None, "v0.2.13", os, arch).is_err()); } - // Do not infer the other tools' asset layouts from Caboodle's layout. + // Do not infer the other tools' asset layouts from Tambo's layout. assert!(names_for_platform(Some(ToolName::Bobbin), "v0.2.13", "macos", "aarch64").is_err()); } #[test] diff --git a/src/release_update/quipu.rs b/src/release_update/quipu.rs index fd0b931..73f786a 100644 --- a/src/release_update/quipu.rs +++ b/src/release_update/quipu.rs @@ -36,7 +36,7 @@ fn owned_pair() -> Result<[PathBuf; 2]> { let home = env::var_os("CARGO_HOME") .map(PathBuf::from) .or_else(|| env::var_os("HOME").map(|p| PathBuf::from(p).join(".cargo"))) - .context("Quipu requires its Caboodle-owned cargo bin directory")?; + .context("Quipu requires its Tambo-owned cargo bin directory")?; let directory = home.join("bin").canonicalize()?; let mut paths = Vec::new(); for binary in ["quipu", "quipu-server"] { diff --git a/src/tool_bundles.rs b/src/tool_bundles.rs index 788887c..ec97745 100644 --- a/src/tool_bundles.rs +++ b/src/tool_bundles.rs @@ -2,10 +2,10 @@ //! //! The stack tools now ship their hook definitions themselves: //! ` hooks bundle` prints the tool's `st.hook-bundle/1`, versioned with -//! the tool. CABOODLE registers that bundle, so the hooks a host runs are the +//! the tool. Tambo registers that bundle, so the hooks a host runs are the //! ones its installed tool version declares. An older tool without the command //! (or one that prints something that is not its own bundle) falls back to the -//! copy CABOODLE ships in `hook-bundles/`. The source is reported either way. +//! copy Tambo ships in `hook-bundles/`. The source is reported either way. use serde_json::Value; @@ -14,7 +14,7 @@ use serde_json::Value; pub enum Source { /// ` hooks bundle` on this host. Tool, - /// The copy shipped in CABOODLE's `hook-bundles/`. + /// The copy shipped in Tambo's `hook-bundles/`. Shipped, } diff --git a/tests/cli.rs b/tests/cli.rs index 0d0516b..5c56cba 100644 --- a/tests/cli.rs +++ b/tests/cli.rs @@ -802,7 +802,7 @@ fn brew_owned_desire_path_ahead_of_the_pin_is_read_not_refused() { // aegis-fv4 2026-10-16: the Mac's brew desire-path 0.7.1 (090ec88) is ahead // of the dp pin. `version()` refused any non-pinned identity, so the // package-owned "ahead" verdict could not read it back and the member failed - // with "dp version is not the CABOODLE-pinned revision". + // with "dp version is not the Tambo-pinned revision". let brew_body = r#"echo "$*" >> "$HOME/brew.log" case "$*" in "update --quiet") exit 0;; @@ -841,7 +841,7 @@ exit 1"#; "{stdout}\n{stderr}" ); assert!( - !format!("{stdout}{stderr}").contains("CABOODLE-pinned"), + !format!("{stdout}{stderr}").contains("Tambo-pinned"), "{stdout}\n{stderr}" ); let log = fs::read_to_string(root.path().join("brew.log")).unwrap_or_default(); @@ -2714,7 +2714,7 @@ fn missing_plan_points_at_the_interview() { .arg("install") .assert() .failure() - .stderr(predicate::str::contains("caboodle init --guided")); + .stderr(predicate::str::contains("tambo init --guided")); } /// aegis-70qlhs: a stale copy earlier on PATH must turn verify RED even when @@ -4386,6 +4386,18 @@ exit 2 .unwrap(); assert!(!bin.join("quipu").exists()); assert!(!bin.join("quipu-server").exists()); + // This fixture deliberately removes Quipu. Do not discover an installed + // host copy through the inherited PATH instead of exercising the missing pair. + for utility in [ + "cp", "chmod", "ln", "touch", "cat", "rm", "mkdir", "dirname", "basename", "sed", "grep", + "head", "sleep", + ] { + let source = std::env::split_paths(&std::env::var_os("PATH").unwrap()) + .map(|directory| directory.join(utility)) + .find(|candidate| candidate.is_file()) + .unwrap_or_else(|| panic!("fixture utility is missing: {utility}")); + fs::copy(source, bin.join(utility)).unwrap(); + } assert!(std::process::Command::new("quipu") .env("PATH", &bin) .output()