Repository navigation
Releases
ledger 0.2.0
- See what kind of change broke a pinned claim.
ledger pinnow keeps the cited lines next to the file's SHA-256. When the file changes, the broken claim says whether only other lines changed, the cited lines moved (naming the new lines), or the cited lines themselves changed. (#245)
claude plugin marketplace update lim claude plugin update ledger@lim
- Count how often pinning is too strict.
ledger checkrecords each break once inledger-breaks.tsvnext to the ledger and ends the checklist with the totals. If breaks with the cited lines unchanged keep piling up, that is the signal to anchor evidence to its lines instead of the whole file. Claims still break exactly as before. (#245)
gap-map 0.3.0
- A pointer must still hold what it was written for. An obligation can carry
anchors(owner,source), and abasisfile entry can carrytext: a short literal the pointed lines must hold. When code moves, the obligation stays open and the reason names where the text sits now, for exampleowner bend2/bend.ts:3373 does not contain "term_descend"; it is now at bend2/bend.ts:3291, 3311, 3320. On Bend, anchors caught 16 of 17 owners that still resolved after the checkout moved fromb2fe9ce0to9e8d7b79. The skill now tells Claude to anchor every pointer. Maps without anchors work as before. (#240)
claude plugin marketplace update lim claude plugin update gap-map@lim
- Internal: the verifier runner (spawning, timeouts, merged output, comparing with the fixture's lines) lives in
scripts/run.mjs, apart from the decision rules. (#238)
gap-map 0.2.0
- A design question has to show what it rests on. An obligation with a
questionnow needsbasis: the file lines it rests on, and a literal-text search with its scope and hit count for every claim that something is absent. A map without it is refused. (#219)
claude plugin marketplace update lim claude plugin update gap-map@lim
- A question that went stale says so. The script reruns each search and checks each line on every run. When a basis no longer holds, the obligation stays open and
gaps.mdmarks the question(stale, recheck before deciding)with the reason. On the real Bend repository, the first map's wrong question about argument order fails at once:searching guide/GUIDE.md for "left to right" now finds 1, the question says 0. (#219)
Maps written for 0.1.x need a basis on each obligation that has a question.
ledger 0.1.0
- Keep what you saw apart from what you reasoned out.
/ledger:ledgerhas Claude write the questions an answer depends on, each markedstaticorruntime, then answer them with claims markedobservedorinferred, each tied to evidence, with unknowns kept open until a probe settles them. (#208)
claude plugin marketplace update lim claude plugin install ledger@lim
-
Evidence is checked again on every run. A file line must exist and, once pinned, keep its SHA-256; a command saved with
ledger.mjs savemust keep its SHA-256 and be the record the claim cited; a literal search is rerun within its stated scope without following links; an REA Evidence ID must be anevidence_idin the exported bundle. A stale conclusion shows up before anyone reads it. (#208) -
Only the script marks a question answered. An inference never answers one, static evidence never answers a runtime question, the latest revision of an open unknown keeps it partial, and two holding claims that contradict each other mark both questions contradicted. The rules come from REA's skill. (#208)
gap-map 0.1.0
- Find what a language still needs, with evidence.
/gap-map:gap-maphas Claude writegap-map.jsonfor a language implementation: the stages a program passes through, and one obligation per promised behavior with the line that promises it, the code that owns it, the case kinds it needs, and existing tests as fixtures. (#207)
claude plugin marketplace update lim claude plugin install gap-map@lim
-
Only a script marks an obligation proven.
gapmap.mjs runruns each fixture's verifier without a shell and with a time limit. An obligation closes only when its pointers resolve, every case has a fixture, and every fixture passed a run that can observe the claim on the current bytes of the fixture, the owner file, and the verifier's scripts. A contradiction, an unknown, or a stale result keeps it open; a won't-fix item is shown but never counted. The rule follows REA's reconstruction obligation ledgers. (#207) -
A map you can read at a glance.
map.svgis a statechart in a dark blueprint style: grid, legend, dashed regions titled with their owning file, labeled transitions, and each stage's count of proven obligations. (#207) -
Bend ships as the first target. The Bend reference lists its truth sources and lanes, with verifiers that match
gates/test.ts(merged stderr, trimmed lines,exit Ntail). The first Bend map, from 39 real tests: 11 of 24 obligations proven, 10 open, 2 contradicted, 1 blocked, 4 won't fix. (#207)
verify 0.6.0
- A slow regular expression can no longer hang a run. Every
matchesrule is evaluated with a deadline: the check's time limit or 2 seconds, whichever is shorter, and never past the 9-minute budget for the whole run. Map validation shares one 30-second budget. A pattern that backtracks without end makes its check not verified, or is refused when the map is read, instead of stopping verify; a pattern that throws is reported with its error. A map that relied on such a pattern now needs a simpler one. (#173)
claude plugin marketplace update lim claude plugin update verify@lim
-
Paths stay inside the repository, links included. A
cwd,stdin.file, or expected file path that leads outside the repository through a symbolic link is refused, and the check is repeated right before each check runs, so a link made by an earlier check is caught too. A link to a file that does not exist yet is followed to where it points. (#170) -
Output that was cut off is not judged. When a stream passes the 1 MiB capture limit, its rules make the check not verified with a reason, instead of passing against the part verify kept. (#171)
-
verify last --idreports only what you selected. The totals, status, report lines, and duration cover only the chosen checks, and an id the last run did not have is an error. (#172)
verify 0.5.0
- A check can no longer pass by repeating its own input. An
equalsormatchesrule that one argument inrunalready satisfies is refused, asincludesalready was, so a program that only echoes its argument cannot pass. A map that relied on this now asks Claude for a different input. (#140)
claude plugin marketplace update lim claude plugin update verify@lim
-
No binaries through
node. A compiled.nodeaddon or a file with NUL bytes is refused as the scriptnoderuns, as python3 scripts already were. (#140) -
Programs come from PATH only, on every system. On macOS and Linux,
node,python3, andgitare looked up only in absolute PATH folders, and the check's PATH loses relative entries, so anodein the repository never runs in place of the installed one. Windows already worked this way. (#140) -
"Changed after it failed" sticks. A check edited after it failed stays marked on every later run until its new definition fails once or it passes unchanged, also after removing and adding it back or running another map. review-loop no longer sees a clean run as the only evidence. (#140)
-
One unreadable file no longer stops the run. A script, a file named in
run, or astdinfile that cannot be read makes only that check not verified. When git cannot record the working tree, the run keeps its results and the report says review-loop cannot use it as evidence. (#140)
verify 0.4.0
- Windows. verify runs on Windows with the same guarantees: a check still runs only
nodeorpython3on the project's own script, and on Windows those interpreters and git are started fromPATHonly, never from the repository folder. A#!script runs through the interpreter its first line names.envnames are refused in any letter case, sonode_optionsorPathcannot slip through, and inheritedPYTHONPATHis removed in any case. A Windows job in CI runs every test. (#112)
claude plugin marketplace update lim claude plugin update verify@lim
- Measured. The benchmark ran three times per case (#99): the broken feature was caught in all 18 broken-case runs, with no working feature reported as failing in the 9 working-case runs.
review-loop 0.11.0
- Windows. review-loop runs on Windows: checks find their program through
PATHandPATHEXT,npmand other.cmdprograms run throughcmd.exewith safe quoting, Gradle and Maven usegradlew.batandmvnw.cmd, and the commit gate reads Git Bash paths such as/c/repo. Programs, including git, are started fromPATHonly, never from the repository folder. A Windows job in CI runs every test. (#112)
claude plugin marketplace update lim claude plugin update review-loop@lim
-
Unattended reviews fix things. Whole headless sessions showed that an unattended review deferred every finding and fixed nothing. Now the reviewer's
touchesTestsflag no longer counts the regression test every fix gets, a finding whose only question is which fix to use gets the smallest one (logged), deferred findings go to the next reviewer, and a failing check that waits stays one finding. In the same session as before, an unattended review now reproduces the bug with verify, fixes it, proves it with a regression test, reruns the verify check, and resolves it as measured. (#114) -
No silent no-op rounds.
loop nextrefuses when nothing changed since the review. When nothing should change, such as a finding you chose to keep or a check that fails only because of the environment,loop next --unchanged "<why>"continues and logs the reason. (#114) -
Measured. 215 behaviors in
evals/review-loop/behaviors.csv, 204 checked by unit tests in CI on Linux and Windows. On the detection benchmark the reviewer still found 36 of 36 and 30 of 30 seeded bugs, and settouchesTestson 0 of 100 P1 or P2 findings, against 29 of 50 before.
review-loop 0.10.0
- .NET and Ruby projects. .NET projects run
dotnet test(a project under a solution is tested by the solution, and a folder with several solution or project files passes one). Ruby projects run only the tools they use:rspec, orrake test, andrubocop, throughbundle execwhen there is aGemfile. A failing build or test becomes a P1, at the root or in a subfolder project. (#94)
claude plugin marketplace update lim claude plugin update review-loop@lim
-
The report names what is missing. A check that could not run says which program or gem is missing, such as "java is not installed" behind a Gradle wrapper or "nokogiri is not installed" behind
bundle exec, and it is never a P1. (#94) -
Measured. 207 behaviors in
evals/review-loop/behaviors.csv, 196 checked by unit tests in CI, none of which need .NET or Ruby. review-loop now detects checks in Node.js, Go, Rust, Python, Gradle, Maven, .NET, Ruby, and Makefile projects.