npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

acyclic-eval

v0.1.4

Published

Evaluate LLM and rule-based judges with mutation cases whose generation does not depend on the judge under test.

Readme

acyclic-eval

Evaluate an LLM or rule-based judge with mutation cases whose generation never consults the judge under test.

CI npm license Node.js >=18

acyclic-eval is a local-first TypeScript framework for teams that need to test whether a judge handles structurally meaningful changes in a corpus. It does not supply a universal judge or claim a general accuracy score. Instead, you write domain-specific mutation operators and compare recorded judge output against expectations that were established without calling that judge.

The bundled demo is credential-free and makes no network requests after installation. The framework adds no telemetry and sends no artifacts anywhere; any external traffic is owned by the Judge implementation you provide.

What problem does this solve?

An ordinary evaluation can become circular when the same detector, extractor, or upstream pipeline both influences which cases are admitted and is later scored on those cases. A defect can then remove the very examples that would have exposed it. acyclic-eval keeps generation, judgement, and comparison as separate roles so an observed pass rate has a clear, inspectable scope.

See it in action

corpus + MutationOperator ──generate──> manifest + artifacts
                                             │
                                          Judge
                                             │
                                     observations.jsonl
                                             │
                                       Comparator ──score──> report

The Judge sees only an input case. The MutationOperator never receives the Judge or its output; the Comparator can re-score recorded observations without calling the Judge again.

Quick start

Requires Node.js 18 or later. The current checkout is the immediately runnable path while the next npm release is prepared:

git clone https://github.com/shiki-yusuke/acyclic-eval.git
cd acyclic-eval
npm ci
npm run demo

npm run demo creates and removes a temporary output directory. It runs the self-contained rule-based transcript Judge with three mutation operators and needs no credentials or network after npm ci.

Packaged quick start (next npm release)

The following sequence is verified against the freshly packed tarball from this checkout. At verification time, the public latest package was 0.1.3 and its npm-bin symlink entrypoint did not execute; the fix is in this checkout but has not been published. Do not present this as a current registry command until a newer version has been released.

npm install acyclic-eval
npx acyclic-eval generate --config ./node_modules/acyclic-eval/dist/examples/toy/config.js --out ./acyclic-eval-out
npx acyclic-eval evaluate --config ./node_modules/acyclic-eval/dist/examples/toy/config.js --out ./acyclic-eval-out --samples 1
npx acyclic-eval score --config ./node_modules/acyclic-eval/dist/examples/toy/config.js --out ./acyclic-eval-out --min-coverage 1

Expected output

generated 9 case(s) into ./acyclic-eval-out
"okSamples": 9
- overall: 9/9 passed (100.0%), 0 infra errors, 9 total cases
- gate: PASS

The score timestamp is intentionally omitted above. See the complete, regenerable demo output.

Is this for me?

Use acyclic-eval when you own a corpus and can define structurally valid mutations plus expected behavior independently of the judge being tested. It works for deterministic rules, local models, and hosted-model adapters.

It is not a benchmark suite, a replacement for human gold labels, or a way to prove a judge is semantically correct. Do not use it when your only expected answer is produced by the same system under evaluation, or when an operator cannot be made independent of that system.

How it works

generate writes content-addressed case artifacts and a manifest. evaluate records raw judge observations (with resume and integrity checks). score compares those existing observations, so changing a comparator never re-runs a potentially expensive or non-deterministic judge. Run generation and evaluation as separate processes and keep judge credentials out of the generation environment; the threat model explains why.

Examples

For a local clone, npm ci && npm run demo runs the same pipeline in a new temporary directory and cleans it up afterwards.

Evaluation and evidence

The bundled toy run produces 9/9 on its own three-operator corpus. That is a reproducibility demonstration only, not an accuracy claim. The documented 0.1.0 evigate adapter validation compared 113 generated cases across eight operators to its pre-adapter implementation case by case. It establishes adapter-parity for that corpus and comparison, not the correctness of evigate, other judges, or LLMs generally. One operator (M4) had 0/0 coverage in that run and must not be interpreted as passing. See evaluation for the corpus counts, scope, and limits.

Privacy and security

Artifacts and observations are written only to the output directory you choose. Do not publish raw transcripts, prompts, command output, credentials, or local paths in issues. Read security for reporting guidance and the threat model before trusting a score.

Limitations

The framework provides API and process-boundary protections, not proof of semantic independence. Closure capture, a judge-derived corpus, a malformed operator, a non-cooperative timeout, and an unsuitable comparator can all undermine an evaluation. See limitations.

Documentation

Related projects

  • evigate — verifies whether coding-agent completion claims have execution evidence; its mutation adapter is the documented real-world integration of acyclic-eval.
  • agent-cost — measures Claude Code and Codex CLI token usage and estimated cost.
  • spec-lane — controls intent, specification, verification, and human decision gates in delivery work.
  • ai-agent-skills-playbook — reusable workflows and guardrails for AI-assisted development.

Each project can be used independently. Together they form an evidence-first AI coding toolkit: measure cost, verify claims, evaluate the verifier, control delivery, and reuse the patterns.

Contributing

Contributions and sanitized reproductions are welcome. See CONTRIBUTING.md, CODE_OF_CONDUCT.md, and SECURITY.md.

License

MIT

日本語ドキュメント

README.ja.md に日本語の導入、Quick start、制約をまとめています。