Skip to content

Releases: in-lockstep/lockstep

in-lockstep 0.3.1

Choose a tag to compare

@github-actions github-actions released this 08 Sep 16:59
83ede9a
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 --review scaffolds 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...
Read more

in-lockstep 0.3.0

Choose a tag to compare

@github-actions github-actions released this 05 Sep 15:26
3ee7433
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 run can 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

Choose a tag to compare

@github-actions github-actions released this 03 Sep 13:08
c4a3203
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

Choose a tag to compare

@tpouyer tpouyer released this 02 Sep 16:41
886353e

The first published version of the framework line whose shipped replay runs on a clean install.

Fixed

  • in-lockstep review --offline in 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.