Repository navigation
Releases: in-lockstep/lockstep
Releases · in-lockstep/lockstep
Release list
in-lockstep 0.3.1
uv tool install 'in-lockstep[anthropic]'
Provider extras: anthropic, openai, google, bedrock, all. Python 3.11 or newer.
What's Changed
- feat(workflows): the shipped processes are framework code, not copied source by @tpouyer in #261
- feat(cli): show-workflow replaces --eject, because reading is not forking by @tpouyer in #262
- docs: a documented snippet raised DuplicateWorkflow, and --eject is gone by @tpouyer in #276
- feat(detect): read Cargo.toml, go.mod, pom.xml and build.gradle, and decline by name by @tpouyer in #277
- fix(config): probe full ref paths, so a base branch with a slash resolves by @tpouyer in #278
- fix(review): check a finding's path and line against the change, not against nothing by @tpouyer in #279
- fix(ci): run provision here, and stop discarding doctor's verdict by @tpouyer in #280
- fix(record): every model call is kept, through a binding we did not build by @tpouyer in #281
- The mission named two things no objective carried, and Policy carried five fields nothing enforced by @tpouyer in #282
- feat(ci): the write verbs run under GitLab, and a citation that resolves by @tpouyer in #283
- fix(status): a control refusing is not the work going wrong, and a replay is not a judgment by @tpouyer in #284
- refactor(cli): name the composition root, and pin what it may decide by @tpouyer in #285
- fix(eval): harvest reads the shipped sidecar, and the first case is promoted by @tpouyer in #286
- feat(improve): the learning loop drafts one body, measures it against the corpus, and proposes it by @tpouyer in #287
- feat(report): group by asker, so a team can see whether people get consistent results by @tpouyer in #288
- fix(ai): a malformed structured reply is re-prompted once, with the parser's own words by @tpouyer in #290
- docs(extending): every documented snippet type-checks under the mypy an adopter runs by @tpouyer in #291
- fix(examples): the worked examples type-check, one invocation each, and the exemption is gone by @tpouyer in #292
- fix(tests): the suite type-checks under strict less disallow_untyped_defs, and the override that said so matches by @tpouyer in #293
- docs(needs): the closing section reads the ledger, and a test keeps it agreeing with the table by @tpouyer in #296
- fix(ruff): the default path list is a typed tuple, so a string there is refused before it unpacks by @tpouyer in #297
- feat(review): a lens is a declared object, and
init --reviewscaffolds a lens on request by @tpouyer in #298 - fix(retry): retire the action-level Retry middleware, which nothing constructed by @tpouyer in #299
- fix(outcome): GATE-OUT-2 holds on the clause that is real, and SKIPPED goes with the cache nobody wrote by @tpouyer in #300
- docs(objectives): the held gates no objective cites are counted, and the count is a two-sided ratchet by @tpouyer in #301
- fix(registry): a verb that needs a model capability is refused a model registered without it, by name by @tpouyer in #302
- fix(review): a mistyped --aspect is an error before the run id exists, and the marker escapes its argument by @tpouyer in #303
- feat(ledger): an opt-in local identity, so a team's local runs can be compared (GATE-TEAM-2) by @tpouyer in #304
- fix(ledger): a CI review's record reaches lockstep-history, or report says how many have not by @tpouyer in #305
- fix(history): a flagged rewrite can be acknowledged by name, and only then stops being an alarm by @tpouyer in #306
- docs(plan): the plan that completes the mission by @tpouyer in #320
- fix(ledger): a checkout with only the remote-tracking ref reads the shared ledger, and history --pull merges it by @tpouyer in #321
- fix(pytest): a run that reports nothing decides nothing, and run_tests refuses option-shaped paths by @tpouyer in #322
- fix(ledger): the sweep absorbs every bundle, not one per run by @tpouyer in #324
- fix(registry): the endpoint refusal compares what the client will dial by @tpouyer in #325
- fix(improve): a harvested case names its provider, and the after arm is re-asked through the shipped factory by @tpouyer in #326
- fix(docs): the documented body path resolves, doctor sees a bound body that cannot, and skills and contexts are documented by @tpouyer in #327
- fix(init): scaffolds decline where detection declined, derive the image, and stop lagging our own workflows by @tpouyer in #328
- fix(sandbox): model-staged tests run in a container or the run refuses by name by @tpouyer in #329
- fix(gitlab): four verbs on GitLab, parity in both directions, and no logic in any lifecycle workflow by @tpouyer in #330
- chore(dogfood): the Test container carries git, or no fix here can go green by @tpouyer in #331
- fix(dogfood): what this repository's first /fix on itself found by @tpouyer in #333
- fix(sandbox): a staged test's killed children are reaped, and the container sees the suite's tools by @tpouyer in #334
- fix(tests): the lifecycle module's ruff check resolves ruff the way selfcheck does by @tpouyer in #335
- fix(sandbox): the container runs as the host user, so the tree it is handed is writable by @tpouyer in #336
- fix(sandbox): the host uid inside the container has a name by @tpouyer in #338
- feat(ai): a session that makes no progress stops, instead of running to whichever ceiling comes first by @tpouyer in #339
- fix(ai): the idle ceiling is doubled before the first write, so reading is not cut off by @tpouyer in #340
- feat(ai): edit_file replaces one passage of a file and stages the result by @tpouyer in #341
- fix(fix): red is a claim about the tests alone, and a session reads what it staged by @tpouyer in #342
- fix(ledger): a reconcile or absorb refuses a run-id collision with different content instead of replacing the record by @github-actions[bot] in #343
- fix(propose): a fix's cover note reaches its pull request, and the title is the ticket's by @tpouyer in #344
- feat(review): each lens of the required check posts its own sticky comment on the pull request by @tpouyer in #345
- chore(dogfood): the loop has closed here, and a gate keeps it closed by @tpouyer in #346
- fix(review): the review-on-request job hands gh its token, and a gh that could not ask is not "not a pull request" by @tpouyer in #347
- feat(core): JoinResult and in-run fan-out, machine branches only by @tpouyer in #348
- chore(dogfood): the chat-ops review clause closed, and every bundle is uploaded under the name the sweep lists by @tpouyer in #349
- feat(ledger): GitLedger(shared=True) provides compare-and-set over the remote ref by @tpouyer in #350
- feat(core): ctx.park, ctx.human and the barrier tick by @tpouyer in #351
- feat(dogfood): the required review check is one fan-out over every bound lens, and improve parks on its own draft by @tpouyer in #352
- fix(ledger): the fixture refusal asks the remote what the branch already holds by @tpouyer in #353
- feat(dogfood): the required check runs review/all-lenses by @tpouyer in #354
- feat(evaluation): a rubric is parsed, and a verdict handed in settles it by @tpouyer in #355
- feat(judge): a routed, priced, recorded judge call by @tpouyer in #356
- feat(improve): the measuring arms judge their rubrics by @tpouy...
in-lockstep 0.3.0
uv tool install 'in-lockstep[anthropic]'
Provider extras: anthropic, openai, google, bedrock, all. Python 3.11 or newer.
What's Changed
- fix(scaffold): a repository scaffolded for /implement or /fix can run its own selfcheck, and the module it gets passes ruff by @tpouyer in #193
- fix(eval): a case that expects "at least one" can never pass, and five of the nine review cases say it by @tpouyer in #195
- feat(improve): read the ledger for a trend, and say which ceiling would stop a proposal by @tpouyer in #197
- fix(scaffold): the implement block keeps the test runner detection already bound by @tpouyer in #198
- fix(lockstep): fix/propose says on the ticket that it opened the change by @tpouyer in #199
- feat(review): a comment can name a lens, resolved against the ones that exist by @tpouyer in #205
- fix(trial): a pack can be measured on a lens it invented, not only one it overrides by @tpouyer in #207
- docs: the ten objectives every change is measured against by @tpouyer in #209
- feat(review): /review on a pull request, posted from a job that holds no key by @tpouyer in #208
- fix(cli): a replay cannot also be a recording by @tpouyer in #210
- fix(cli): an unfetched base ref is a message, not a traceback by @tpouyer in #211
- fix(eval): a harvested case can pass, and can reward a better answer by @tpouyer in #212
- fix(gates): one property per id, and five rows that overstated what runs by @tpouyer in #215
- feat(record): every CI review keeps what it paid for, and says what it keeps by @tpouyer in #216
- feat(eval): a harvested case carries the answer it was derived from by @tpouyer in #217
- feat(evidence): a promoted case has a home, a ceiling, and a person deciding by @tpouyer in #218
- feat(ledger): a run says which subject it measured, so two runs can be compared by @tpouyer in #219
- fix(replay): a recording can find itself once redaction has fired by @tpouyer in #224
- fix(redact): a credential named rather than prefixed is still a credential by @tpouyer in #225
- fix(tools): what a model may read is its own question, answered by its own list by @tpouyer in #226
- fix(eval): one session harvests into more than one file by @tpouyer in #227
- feat(record):
in-lockstep runcan keep what it paid for by @tpouyer in #228 - feat(record): a session is one case, and what leaves the runner is addresses by @tpouyer in #230
- docs(objectives): the objectives get a ledger, and the ledger gets a ratchet by @tpouyer in #231
- feat(packaging): ship py.typed, and make what init writes survive it by @tpouyer in #242
- feat(record): recording is what a run does, not a flag a run is given by @tpouyer in #244
- fix(ci): the required review check reads the diff through every lens, not one by @tpouyer in #245
- fix(ci): this repository's own lifecycle module is checked by its own gates by @tpouyer in #250
- fix(scaffold): a control that stopped a run is not a failure to announce by @tpouyer in #253
- chore(release): 0.3.0 by @tpouyer in #257
Full Changelog: v0.2.2...v0.3.0
in-lockstep 0.2.2
uv tool install 'in-lockstep[anthropic]'
Provider extras: anthropic, openai, google, bedrock, all. Python 3.11 or newer.
What's Changed
- docs(adr): the compiler archive exists now, and the record says when it did not by @tpouyer in #180
- feat(release): the workflow creates the GitHub Release, from a job that cannot publish by @tpouyer in #181
- docs(adr): the compiler-era ledger, image and tag are gone, and the record says so by @tpouyer in #182
- feat(detect): bind build and run to the commands the scan already found by @tpouyer in #183
- fix(ledger): a workflow's record derives its status from its steps, so a red selfcheck is not reported as 0% failed by @tpouyer in #184
- fix(adapters): the deterministic adapters run the repository's tools, not the interpreter running in-lockstep by @tpouyer in #186
- feat(provision): the scaffolded work jobs build the repository's own environment before anything runs in it by @tpouyer in #187
- chore(release): 0.2.2 by @tpouyer in #188
Full Changelog: v0.2.1...v0.2.2
in-lockstep 0.2.1
The first published version of the framework line whose shipped replay runs on a clean install.
Fixed
in-lockstep review --offlinein an empty directory no longer refuses for spend a cassette cannot incur. A run that cannot spend now states a ceiling of zero, which the budget gate accepts and the per-run check enforces (#174, #177).- The release proof installs the wheel into a bare venv and runs that replay from an empty directory before anything is uploaded, so this cannot ship again unnoticed.
Install
uv tool install 'in-lockstep[anthropic]'
Provider extras: anthropic, openai, google, bedrock, all. Python 3.11 or newer.
History
Through 0.1.x this name was a compiler for GitHub Agentic Workflows; that line is archived on the compiler-v0.1.x branch. From 0.2.0 it is the framework. ADR 0001 records the pivot.