Skip to content

Lodestar 1.3.0 — start always runs

Choose a tag to compare

@github-actions github-actions released this 14 Aug 21:44
· 21 commits to main since this release
Immutable release. Only release title and notes can be modified.
9c5bdd9

Lodestar 1.3.0

start cannot refuse to run any more, and nothing it drops disappears.

Lodestar 1.3.0

npm install --global lodestar-agent-context@1.3.0
lodestar start --cwd .

The budget was working against its own purpose

The 16 KiB startup budget exists to stop three things: losing context, thrashing, and
reading more than a session needs. It was causing all three.

It refused to run. Required records totalling more than the budget threw
resource_limit. start is the first command of every session, so that stopped all
work in the project — over a record someone marked required, often in a different
project entirely, since a global required record is charged to all of them.

It dropped context and told the agent to go looking. Shed records vanished from the
projection, leaving a count and lodestar find --limit 50. The agent then ran a broad
search and re-read up to fifty records to find one it had a moment earlier. The budget
saved a few kilobytes and spent far more getting them back.

Demote, don't delete

Everything the projection cannot carry is now named:

"available": [
  { "id": "p:sunosavvy:regression", "name": "Regression surface", "kind": "rule" }
],
"omitted": { "context": 54, "required": 2, "hidden": 3 }

A stub costs about a twentieth of a record. The agent sees everything that exists in
scope and fetches the one thing it needs with a single lodestar get — no search, no
re-reading.

A fixed order, by value

1  optional context records      demoted to stubs
2  advisory work                 demoted to stubs
3  stubs of optional records     dropped, counted in omitted.hidden
4  required records              demoted to stubs
5  the governance record         last, only if nothing else remains

A required record's content outranks an optional record's name, so step 3 comes before
step 4. Startup always returns.

Verified against 48 KiB of required records inside a 16 KiB budget: start succeeds,
carries four in full, names the other nine, and reports {"required": 9}.

The cost is now visible where it is spent

Marking a record required is where the budget is committed, and it used to say nothing:

lodestar doctor — required records in project:p:sunosavvy now total 17204 of the
16384 startup budget, so start will demote some

Reported, never refused — a bulk import must not fail on its last record.

Upgrading

Schema unchanged since 1.2.0. data.available is new; data.omitted gains
required and hidden counts. Nothing was removed.

npm install --global lodestar-agent-context@1.3.0
codex plugin add lodestar@personal

Requires Node.js 24.15.0 or newer.