Repository navigation
Releases: nathanramoscfa/roadmodel
Release list
v0.2.86
[0.2.86] — 2026-10-14
- A recommendation names the latest version of a series. The operator's rule is GPT-6.1 Sol, never GPT-6 Sol where both run, and Opus 5.5, never Opus 5. It is not a benchmark judgment, so it holds even where the older version scores higher or costs less. It is enforced in code at every surface that recommends:
- The scorer drops an older version from every platform that offers a newer one, so /recommend,
roadmodel scoreand the ladder never pick it. - The selector the engines read lists only the latest version per access method: the /recommend prompt, the planning kit's
model-selector.txtand the MCP catalog. - A parameter count (
20b,120b) names a different model, not a version.roadmodel backup'sMODELline now names the newest version unconditionally.
- The scorer drops an older version from every platform that offers a newer one, so /recommend,
- Roadmap Settings carry the full ladder.
roadmodel ladder --category C --complexity X [--novel] [--phase](MCP:roadmap_settings) prints a step's or phase's Settings table as /recommend shows it. The three columns are Cost, Balanced and Quality, each with its effort and a backup from another maker, read with every usage pool at headroom. A Runs: line names the column the step runs: the Budget priority's, or Quality for a phase-roadmap session./roadmap-steppicks the column from the pools on the day. Atightpool moves the run to the column's Backup (or the Cost column), and anexhaustedone to its Backup. A change in pool state no longer means refreshing roadmaps./roadmap-phase,/roadmap-projectand/roadmap-refreshwrite the ladder wherever roadmodel is installed. The refresh converts single-column tables.
- The
roadmodelon PATH is upgraded too. A pipx oruv toolinstall is the one agent sessions call, and neither a project env nor the MCP env reaches it. One sat at 0.2.83 while the fleet ran 0.2.85, so roadmap writers there fell back to the selector's letters.roadmodel-upgradenow upgrades it and reports aPATH roadmodel:line.
v0.2.85
[0.2.85] — 2026-10-14
- A roadmap step runs the newer version of its model.
roadmodel backupnow checks the step's own model first. A newer release in the same series (GPT-6 Sol → GPT-6.1 Sol) replaces it when that release is from the same maker, on the same platform and no dearer, and, at the step's effort, is level in the step's category and no lower on the AA Intelligence Index. The command prints the replacement on aMODELline, then that model's backup./roadmap-phaseand/roadmap-refreshwrite theMODELcell into the step's Settings.- Why: the selector's letters are measured at each model's top effort. At max, a 3-point SciCode gap letters GPT-6 Sol S in coding and GPT-6.1 Sol A. So a phase roadmap put GPT-6 Sol on its Medium Codex steps, though at Medium GPT-6.1 Sol leads it on Terminal-Bench 4.0 (48.0% vs 18.7%), HLE and the AA Index at the same price.
v0.2.84
[0.2.84] — 2026-10-14
- Measured models are scored on the measurement. In coding, planning, agentic, long-context and knowledge, a model's S→D letter is derived from the very benchmark the scorer reads, so blending it in (30%) only added a cliff at each band edge: GPT-6 Astra's 52.7 on the AA Index read S and GPT-6.1 Sol's 51.8 read A, six quality points for 0.9 of index. A measured model's quality there is now its evidence alone; letters stand in only where AA has not measured. Speed keeps its blend (its letter is an estimate, not a reading of tokens/s). On the maintainer's context 12 of 84 picks move, each to the model the benchmarks favour at the effort it runs.
- Near-tied backups go to the cheaper model. Where the benchmarks cannot tell two cross-maker substitutes apart (level both ways in the category and within the AA Index's noise band), the backup is the cheaper, at any budget posture, on /recommend and in
roadmodel score. GPT-6 Astra backs up 5 of 84 rungs instead of 30, all where it leads beyond the noise; GPT-6.1 Sol takes the rest at a quarter of the price. roadmodel backup. Names the backup for a pick made outside the ladder (a roadmap step's model and effort) by the same rule, and prints the Settings Backup cell./roadmap-phaseand/roadmap-refreshcopy it into each step's Backup row where roadmodel is installed, instead of the selector prose's letter-first choice.
v0.2.83
[0.2.83] — 2026-10-12
- Private automation boundaries. Bundled context synchronization verifies its private destination before transferring saved context. Local credentials, job logs and diagnostic outputs use protected transport and file handling; authenticated maintenance clients reject redirects.
v0.2.82
[0.2.82] — 2026-10-12
Security
- Private Windows files and bounded context parsing. Private writes use
protected Windows ACLs and validated directory handles. Atomic replacement,
appending and lock access preserve the private-file boundary. Existing
broader log and lock permissions require explicit repair while their old
processes are stopped; existing memory migration repairs selected files
with exclusive access. Global rule adapters and backups use the same helper. - Context tier and jurisdiction parsing use linear scans. Concurrent updater
startup acquires the file lock before writing its initial marker.
v0.2.81
[0.2.81] — 2026-10-12
Security
- Private exports and released updater resources. Planning-kit exports
validate destinations and Git protection before writing private context.
Private files use atomic writes and owner-only POSIX modes. Upgrades install
commands and companions from the published wheel, with isolated Python
execution. The shell wrapper uses a released CLI by default; reviewed
checkout mode remains available through--local, and--refis retired. - Provider errors and SDK diagnostics keep credentials and request content out
of CLI/MCP error output. Hosted requests make one attempt with finite
timeouts. MCP tools bound input, context and output sizes, including errors
from malformed protocol messages. Builds use an explicit file inventory
and reject symlinked inputs.
Added
- Authenticated usage-pool sync from the Mac into the saved web profile.
Only normalized observations are uploaded using a rotating per-user session
in Keychain. Settings saves preserve pool states, and both recommendation
lanes apply them to scoring and funding annotations. Stale or missing
observations preserve saved states; known subscription resets clear them.
v0.2.80
[0.2.80] — 2026-10-10
Fixed
-
Metered pools affect their funded platforms and empty reserves stop funding.
Generic Claude subscription, Codex weekly/five-hour and Antigravity rows map
to their funded surfaces. Split windows use the worst live state, while
Claude's cap never consumes the independent Antigravity allowance. An
exhausted OpenRouter prepaid reserve makes its key unfunded until credits
are restored; a reset date cannot refill a fixed reserve. The CLI, MCP and
recommender scoring share these checks. Hourly stdlib collectors and a
preserved Claude status line supply private usage observations; stale or
mismatched-account data retains the declared state. -
/roadmap-stepand/roadmap-phaseno longer stop a Codex session on a
correctly picked model. Codex's instructions tell the agent only that it is
"based on GPT-6", so the settings gate could not tell GPT-6 Sol from any
other GPT-6 and stopped with "cannot verify the required Sol model" even
with Sol selected (pyeconomics Step 2, 2026-10-09). The gate now has the
agent read its exact model and effort from the session's rollout file
(turn_context.model/.effort), asks the operator when no source names
the model instead of stopping, and lists GPT-6 Sol → GPT-6.1 Sol as a newer
version in the same line, as it already did for Opus and Fable. -
The Codex rollout lookup works from PowerShell on Windows. There the
rollout records the repo ase:\Code\…while the shell printsE:\Code\…
orE:/Code/…, so a literal path match found no rollout and the gate fell
back to asking. The live session also holds its rollout open, so .NET's
ReadAllTextfails on it. The gate now names the Windows Codex home,
compares the paths case- and slash-insensitively, says which readers can
share the open file, and never falls back to a rollout from another
directory, because sessions in other repos write there too. -
A pick's Score charges it for the tokens it draws at its effort. The
/recommend matrix read a pick's AA Index at its effort but compared it with
the bare list price, so a higher effort was credited its higher index for
free. The Score now prices the pick as the frontier chart places it: the
blended price times its measured token use there. The breakdown card shows
that price and why. For the agentic/high picks: GPT-6.1 Sol · Medium
+12.1 → +16.9, Sonnet 5.5 · Extra high +16.2 → +16.8, Opus 5.5 · Extra
high +11.6 → +11.3. /models still scores each model at list price and its
labelled top effort. Web only.
v0.2.79
[0.2.79] — 2026-10-09
Changed
- Every AA figure names the effort it was measured at.
- /models shows the headline AA Index with its effort ("57.6 Max"), in the
cell, the hover card and the screen-reader label. The headline is each
model's top measured effort. - The /recommend matrix rates each pick at the effort it runs.
update/derive_ratings.py --writenow also writes
docs/effort-ratings.json: the letters a model's run at each of its other
measured efforts earns. That run takes its headline row's place among the
live models, andderive()is unchanged. Both crons commit the file, and
--checkfails when it is stale. - For example, Sonnet 5.5 at Medium reads A in coding, planning, agentic and
long-context and B in knowledge, where its headline (Max) reads S, S, S,
A and A. A category AA did not measure at that effort keeps its headline
letter. - Display only: the scorer already reads evidence at the pick's effort.
- /models shows the headline AA Index with its effort ("57.6 Max"), in the
Fixed
- A model's headline benchmark row is its top measured effort. That was
true of 55 of 56 models; AA's default row for Grok 4.6 is High although it
measured XHigh.update/fetch_aa_benchmarks.pynow re-bases any such model
on its top effort, and the default row becomes one of its levels. Grok 4.6
reads 44.2 at XHigh (was 44.3 at High). By rank, Opus 5 moves up to an S
in coding, and the generated prose follows. No ladder row changes. - Muse Spark 1.3 is token-measured (#1028): 2.449 at XHigh and at Max,
replacing the uniform 1.6 and 2.5. No ladder row changes.
v0.2.78
[0.2.78] — 2026-10-09
Changed
-
Each model's efforts are priced by the tokens it was measured drawing
there. The frontier placed a model at an effort at its blended price
times one table for every model (low 0.6 … max 2.5). A per-token price is
the same at every effort, so what an effort costs is the tokens it draws,
and measured, models differ in that more than efforts do:- Sonnet 5.5 draws about the same tokens from low to xhigh, then 3x at max.
- At medium it draws 1.7x what GPT-6.1 Sol does.
- GPT-6 Luna draws the same at low and medium.
update/measure_effort_tokens.pyruns every model AA measured at several
efforts through eight short tasks, twice, at each of those efforts: Claude
models on Claude Code, the GPT models a ChatGPT sign-in runs on Codex, the
rest on OpenRouter. OpenRouter's figures are scaled by a measured lane
factor (0.78: the same model draws about 1.3x the tokens through the bare
API). Each model's figures are fitted to rise with its effort.
docs/effort-tokens.json(bundled) holds the result for 29 models;
scoring.token_multiplierreads it, and the uniform table remains the
fallback. AA's own token counts are not in its API, and its terms forbid
scraping them. The first run cost $9.24 on OpenRouter.For the operator's context, 7 of 28 ladder rows change:
- COST on the low rows runs GPT-6 Luna at medium.
- BALANCED on low coding, planning and knowledge work is GPT-6.1 Sol at
medium.
For an anonymous visitor, 11 rows change. Among them, Grok 4.7 (3.6x a
typical model's tokens) leaves COST on high coding, planning and
long-context work. The agentic/high row stands: GPT-6.1 Sol · Medium,
Sonnet 5.5 · Extra high, Opus 5.5 · Extra high. -
QUALITY may run its model at a higher effort that left the frontier.
Where a category rates a model's efforts alike (multimodal), measured
token use pushed Gemini 3.8 Flash's medium and high off the AA-Index
frontier, which would have left QUALITY at Flash · Low. QUALITY now also
reads the top point's own model at each higher effort that meets the bar
(_higher_efforts); speed work keeps the lower, faster effort. Under the
uniform table this changes no row. -
The daily benchmark refresh keeps one issue open, "chore(effort-tokens):
model efforts not yet token-measured", while AA measures a model or effort
that the file lacks. It closes the issue when there are none.
v0.2.77
[0.2.77] — 2026-10-07
Fixed
- A ladder table is built once per user-context. The hosted service
rebuilt the 28-row table on every request, and the scorer re-parsed the
catalog JSON about a thousand times while doing it (cost.model_provider
loaded it per candidate). For a well-funded signed-in user that cost about
a second a request, enough to push signed-in latency over the Phase 4.5
bar.model_providernow takes the caller's catalog, and
recommend_structured_ladderkeeps each context's table for the life of
the process (a cold build 0.34 s -> 0.14 s locally; a warm one free).