Skip to content

Releases

ledger 0.2.0

Choose a tag to compare

@lee-eojin lee-eojin released this 02 Nov 06:44
30c788a
  • See what kind of change broke a pinned claim. ledger pin now 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 check records each break once in ledger-breaks.tsv next 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

Choose a tag to compare

@lee-eojin lee-eojin released this 02 Nov 02:38
0f062fa
  • A pointer must still hold what it was written for. An obligation can carry anchors (owner, source), and a basis file entry can carry text: 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 example owner 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 from b2fe9ce0 to 9e8d7b79. 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

Choose a tag to compare

@lee-eojin lee-eojin released this 31 Oct 04:20
ec03c73
  • A design question has to show what it rests on. An obligation with a question now needs basis: 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.md marks 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

Choose a tag to compare

@lee-eojin lee-eojin released this 30 Oct 18:32
04444e1
  • Keep what you saw apart from what you reasoned out. /ledger:ledger has Claude write the questions an answer depends on, each marked static or runtime, then answer them with claims marked observed or inferred, 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 save must 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 an evidence_id in 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

Choose a tag to compare

@lee-eojin lee-eojin released this 30 Oct 18:13
efafbfc
  • Find what a language still needs, with evidence. /gap-map:gap-map has Claude write gap-map.json for 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 run runs 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.svg is 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 N tail). 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

Choose a tag to compare

@lee-eojin lee-eojin released this 28 Oct 08:13
d02f136
  • A slow regular expression can no longer hang a run. Every matches rule 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 --id reports 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

Choose a tag to compare

@lee-eojin lee-eojin released this 28 Oct 01:19
713256f
  • A check can no longer pass by repeating its own input. An equals or matches rule that one argument in run already satisfies is refused, as includes already 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 .node addon or a file with NUL bytes is refused as the script node runs, as python3 scripts already were. (#140)

  • Programs come from PATH only, on every system. On macOS and Linux, node, python3, and git are looked up only in absolute PATH folders, and the check's PATH loses relative entries, so a node in 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 a stdin file 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

Choose a tag to compare

@lee-eojin lee-eojin released this 27 Oct 08:22
65760be
  • Windows. verify runs on Windows with the same guarantees: a check still runs only node or python3 on the project's own script, and on Windows those interpreters and git are started from PATH only, never from the repository folder. A #! script runs through the interpreter its first line names. env names are refused in any letter case, so node_options or Path cannot slip through, and inherited PYTHONPATH is 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

Choose a tag to compare

@lee-eojin lee-eojin released this 27 Oct 08:22
65760be
  • Windows. review-loop runs on Windows: checks find their program through PATH and PATHEXT, npm and other .cmd programs run through cmd.exe with safe quoting, Gradle and Maven use gradlew.bat and mvnw.cmd, and the commit gate reads Git Bash paths such as /c/repo. Programs, including git, are started from PATH only, 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 touchesTests flag 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 next refuses 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 set touchesTests on 0 of 100 P1 or P2 findings, against 29 of 50 before.

review-loop 0.10.0

Choose a tag to compare

@lee-eojin lee-eojin released this 27 Oct 02:14
d43cc97
  • .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, or rake test, and rubocop, through bundle exec when there is a Gemfile. 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.