Skip to content

feat(toride): setup bundles — license-labeled, OS-conditional toolchain setup - #24

Merged
hmziqrs merged 12 commits into
masterfrom
feat/setup-bundles
Oct 12, 2026
Merged

hmziqrs merged 12 commits into
masterfrom
feat/setup-bundles

Conversation

@hmziqagent

Copy link
Copy Markdown
Collaborator

What

Implements docs/setup-bundles-plan.md phases 0–4 (the plan and its machine-checked citation gate are included): a declarative setup-bundles layer — opinionated, OS-conditional toolchain setup recommendations with first-class license labeling.

Data model + registry (1c7c2a2, c8088fe) — 8 bundles / 65 recommendations. LicenseKind carries the commercial-use axis (Free / FreePersonal / PaidForCommercial / FreeWithTerms); every row carries a terms URL and a verified date. Invariant tests pin unique ids, resolvable alternatives/default-picks, the three consent rows, and coverage of the nine gate tools (sccache, mold, orbstack, docker, colima, podman, uv, opentofu, terraform).

Evaluation + planning (97daf08) — host-conditional evaluate: on macOS the containers bundle offers colima (default pick, FOSS) + podman + OrbStack (paid-for-commercial) + Docker Desktop (free-with-terms) and hides mold; Linux flips that set. plan_row produces real InstallPlans through toride-apps (e.g. brew install --cask orbstack); planner refusals are Err values, never panics. The consent gate refuses Pending on the three paid/terms rows; dry-run plans are refused by the backend guard; installs record into InstallManifest.

Config hints (db895db, 2197551) — seeded hints (sccache → cargo rustc-wrapper, direnv hook) applied through toride-fs atomic writes: exact bytes, skip-if-exists (metadata-based, non-UTF-8-safe, mode preserved), no append path (tripwire-enforced; hint code isolated in setup_bundles/hints.rs).

TUI (a7fd2d0, 185e374) — read-only Setup section (sidebar ⚒, mirrors the ToolsContent/collector patterns): license badges with verified dates, consent modal for non-Free rows showing price + terms URL, default selection always the bundle's FOSS default_pick, session dismissal on namespaced setup.suggest.* ids (single constructor, divergence-pinned).

Doctor adoption (c30f701) — info-level, dismissible setup.suggest.* findings + sidebar badge; the tools screen's tools.missing.* warnings are byte-identical to pre-feature behavior.

Docs (a307b5c, e101c0b, bfd156f, 0112fd9) — the plan with scripts/check_plan_citations.sh (84 citations / 42 license rows machine-checked), the implementation record with the divergence ledger, and the ⚒ icon registered in CLAUDE.md.

Verification

  • cargo test -p toride: 1747 passed / 0 failed (5 ignored). All pre-existing snapshots byte-identical except one dashboard cell (sidebar section count — unavoidable when adding a section; diff reviewed).
  • cargo clippy -p toride --all-targets -- -D warnings clean; cargo fmt --check clean.
  • bash scripts/check_plan_citations.sh green (the plan doc cannot rot silently against the code).

Out of scope (plan §10 open questions)

Persisted dismissal (v1 is session-only by design), the install executor behind approved() (Setup screen read-only in v1), Windows bundles.

@hmziqrs
hmziqrs merged commit 033e969 into master Oct 12, 2026
13 checks passed
@hmziqrs
hmziqrs deleted the feat/setup-bundles branch October 12, 2026 20:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants