Skip to content

Tier defaults: a tier is a role, not a model - #384

Open
woltspace-jerpint[bot] wants to merge 5 commits into
mainfrom
uxw/tier-defaults
Open

Tier defaults: a tier is a role, not a model#384
woltspace-jerpint[bot] wants to merge 5 commits into
mainfrom
uxw/tier-defaults

Conversation

@woltspace-jerpint

Copy link
Copy Markdown
Contributor

What

Reframes the rodent tiers as roles (raccoon = thinker, beaver = builder, otter = quick) that can each follow their own engine — e.g. a gpt-5.6 raccoon orchestrating claude-sonnet beavers while otters run a local model. Includes the settings UX to configure it without touching config files.

Resolution order

wolt.json "harness" pin  >  harness.tiers[tier]  >  harness.default

The tier's model then comes from the resolved engine's tier defaults (harness.models.<engine>.tiers overlay, as before). Everything stays seed-in-Python + woltspace.json overlay — model names live in config and live UI, never in copy.

Pieces

  • Plumbingget/set_tier_harness, set_tier_model, KNOWN_TIERS in harnesses.py; one-line tier step in start_session resolution.
  • APIPOST /harness/tiers ({tier, harness?, model?}, null clears; validates tier/engine/model, returns effective state).
  • Settings UI — "Tier defaults" card on /settings: three tier rows, engine dropdown ("Follow lodge default" + engines) and catalog-cascading model dropdown, effective pill, existing save/toast plumbing. Lodge-default changes live-refresh tiers that follow it.
  • Mobile passds-select gets 44px touch targets + 16px text on small screens (16px also stops iOS zoom-on-focus); new ds-control / ds-tier-grid primitives.
  • Role-first copy — create-modal hints ("quick - fast and light" instead of "quick - haiku"), seed CLAUDE.md ("Raccoon wolt (thinker)"), starter-site label ("raccoon · thinker"). The actual engine/model shows up only as live data.
  • Cleanup — removed the CREATURE_MODELS backwards-compat alias (sessions.py/bot; membership check now uses KNOWN_TIERS, tests moved to creature_model()).
  • Docs — tier defaults section in docs/switching-models.md.

Notes

  • Additive: with no harness.tiers in woltspace.json, behavior is byte-identical to today.
  • Freeform engines (opencode) show their catalog as suggestions in the tier model dropdown; arbitrary provider/model strings can still be pinned per wolt via wolt.json.
  • Tests: 470 pass; the only 2 failures are the pre-existing env pair (test_sessions_all_dead, test_stale_state_cleaned) that Sites: serve directly from FastAPI — no per-wolt servers, no ports #383 removes.

🤖 Generated with Claude Code

Each tier (raccoon/beaver/otter) can now follow its own engine lodge-wide
- a codex raccoon can orchestrate claude beavers while otters run a local
model. Resolution: wolt.json pin > harness.tiers[tier] > harness.default.

- harnesses.py: get/set_tier_harness (woltspace.json harness.tiers),
  set_tier_model (per-engine tiers overlay), KNOWN_TIERS
- sessions.py: tier step in harness resolution; drop the CREATURE_MODELS
  backwards-compat alias (membership check now uses KNOWN_TIERS)
- POST /harness/tiers + Tier defaults card on /settings (engine + model
  selects per tier, catalog-cascading, effective pill)
- design-system.css: ds-control/ds-tier-grid + mobile pass on ds-select
  (44px target, 16px text - stops iOS zoom-on-focus)
- role-first copy: create-modal hints, seed CLAUDE.md, starter-site label
  no longer name models - engines/models are config, shown as live data
- docs: tier defaults section in switching-models.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 4, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
woltspace Ready Ready Preview Aug 5, 2026 12:05pm

From the adversarial review pass:
- legacy rodent/wolf wolts follow raccoon/beaver tier entries (TIER_ALIASES)
- POST /harness/tiers validates the whole body before writing - a bad model
  no longer leaves a half-applied engine change
- reject non-string harness/model values (a stored list would 500 the
  endpoint or crash shlex.quote at spawn)
- settings.js keeps its page-load catalog map fresh after tier saves so
  lodge-default flips show current models

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
UXwolt and others added 2 commits August 5, 2026 12:03
Alias drift bug (hit live 2026-08-05): the claude catalog stored CLI
aliases ("sonnet") with version labels ("Sonnet 5"), but the claude CLI
resolves aliases to ITS idea of the model - "sonnet" served
claude-sonnet-4-6. Picking "Sonnet 5" in the tier card was a lie: you
can't choose 4.6 vs 5 through one floating alias.

- claude seed models + catalog now use explicit real ids
  (claude-opus-5 / claude-sonnet-5 / claude-sonnet-4-6 /
  claude-haiku-4-5 / claude-fable-5), all bench-verified spawning the
  exact model. codex/opencode already used real ids - claude was the
  only aliased engine.
- tests updated; seed-assertion tests now isolate WOLTS_DIR so the real
  woltspace.json overlay can't leak into them
- switching-models.md example updated

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.

0 participants