Tier defaults: a tier is a role, not a model - #384
Open
woltspace-jerpint[bot] wants to merge 5 commits into
Open
Tier defaults: a tier is a role, not a model#384woltspace-jerpint[bot] wants to merge 5 commits into
woltspace-jerpint[bot] wants to merge 5 commits into
Conversation
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>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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>
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
The tier's model then comes from the resolved engine's tier defaults (
harness.models.<engine>.tiersoverlay, as before). Everything stays seed-in-Python +woltspace.jsonoverlay — model names live in config and live UI, never in copy.Pieces
get/set_tier_harness,set_tier_model,KNOWN_TIERSinharnesses.py; one-line tier step instart_sessionresolution.POST /harness/tiers({tier, harness?, model?}, null clears; validates tier/engine/model, returns effective state)./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.ds-selectgets 44px touch targets + 16px text on small screens (16px also stops iOS zoom-on-focus); newds-control/ds-tier-gridprimitives.CREATURE_MODELSbackwards-compat alias (sessions.py/bot; membership check now usesKNOWN_TIERS, tests moved tocreature_model()).docs/switching-models.md.Notes
harness.tiersin woltspace.json, behavior is byte-identical to today.provider/modelstrings can still be pinned per wolt via wolt.json.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