Skip to main content

Zenodotus

An OSS release-readiness gate: deterministic pre-gates + a no-context reviewer panel.

Most "is this repo open-source ready?" checks are mechanical and already solved by great tools (OpenSSF Scorecard, REUSE, Gitleaks, pyroma, twine, GitHub Community Standards). Zenodotus composes those as a hard floor, then adds the part tools don't do: a panel of independent, no-context reviewers that judge the things a linter can't — is the README coherent to an outsider, is the scope and naming sensible, is there internal/proprietary leakage that isn't a "secret", is this actually useful and finished?

The novel piece is the reviewer-panel-as-gate, not the checklist.

Status

Core pipeline (deterministic gates → no-context reviewer panel → discovery log → verdict) is wired end to end via zenodotus review. Still pre-1.0 and under the "prove itself" milestone (docs/CONCEPT.md) — it stays private until the discovery log demonstrates the panel earns its keep.

How it works

zenodotus review <path-or-repo>
  ├─ 1. Deterministic pre-gates (must all pass)  ── gates.py
  │      license · community files · secrets · packaging · security posture
  ├─ 2. No-context reviewer panel (judgment)      ── panel.py
  │      N independent reviewers, each blind to the others, render go/no-go
  └─ 3. Discovery log + verdict                    ── discovery_log.py
         every panel-only finding (something the deterministic gates MISSED)
         is logged — this is how the panel earns its keep.

The command short-circuits: the panel only runs once the deterministic floor passes. The final verdict is floor AND panel-consensus, and the process exits non-zero on a no-go so it fails closed in CI.

Prerequisites & setup

Zenodotus composes existing tools. Some ship with the package; others are separate binaries you install out of band. Every external tool is optional: if it is absent, its gate reports skipped and the floor still runs — see Skipped is not passed below for why that matters.

1. Install the package (+ optional extras)

pip install "zenodotus[llm,tools]"   # or: pipx install "zenodotus[llm,tools]"
Extra Provides Needed for
(base) the zenodotus CLI and deterministic gates always
llm the default reviewer provider (Anthropic Claude) a live panel run
tools pyroma + twine (the packaging_ok gate) packaging checks

A live panel run also needs an API key: export ANTHROPIC_API_KEY=sk-....

2. Install the out-of-band binaries (optional)

These are Go/Ruby tools that are not pip-installable. Install only the ones whose gate you want to run:

Binary Gate it enables Install Skipped if absent
gitleaks no_secrets brew install gitleaks / releases secret scan does not run
licensee license_present (enrichment only — a pure-Python check still runs) gem install licensee license enrichment does not run
scorecard security_posture (optional, off unless --include-optional) ossf/scorecard posture check does not run

The exact versions and invocations are documented in docs/CONCEPT.md → Tools wired.

Skipped is not passed

A gate whose tool is absent reports skipped, which is neither passed nor failed — the check simply did not run. floor_passed() treats a skipped gate as non-blocking (so a missing optional tool never fails your build), which means a green-looking verdict can still hide checks that never executed. If you need a specific gate enforced, install its tool above and confirm the gate reports passed (not skipped) — zenodotus review . --json lists each gate's status explicitly.

Usage

Local

pipx install zenodotus            # or: pip install "zenodotus[llm]"
export ANTHROPIC_API_KEY=sk-...   # the default reviewer provider (Claude); your own key
zenodotus review /path/to/repo                     # human-readable verdict
zenodotus review /path/to/repo --json              # machine-readable
python -m zenodotus review . --reviewers 5 --log discoveries.jsonl

Options:

  • --json — machine-readable output (includes each gate's skipped/passed status).
  • --reviewers N — panel size (default 3).
  • --log PATH — discovery-log JSONL path; --log '' disables logging.
  • --include-optional — also run heavier optional gates such as OpenSSF Scorecard.
  • --shadow — advisory, non-blocking run (see Shadow mode below).

Exit code is 0 on go, non-zero on no-go.

Shadow mode (recommended for accumulating evidence)

zenodotus review . --shadow --log discoveries.jsonl

--shadow runs Zenodotus on real release candidates without blocking them: the reviewer panel runs even when the deterministic floor fails, every panel-only finding is appended to the discovery log, and the process always exits 0 — the verdict is reported but advisory. This is the recommended way to accumulate "prove-itself" evidence on live RCs (docs/CONCEPT.md): gather a meaningful set of panel-only discoveries safely, before Zenodotus ever gates anything. Add it as a non-required CI step first, review the accumulated log, and only promote it to a blocking gate (drop --shadow) once the evidence justifies it.

Deployable routine (container / CI job)

Run the same command in a container or CI step to gate a release candidate. A minimal container:

FROM python:3.11-slim
RUN pip install "zenodotus[llm,tools]"
ENTRYPOINT ["zenodotus", "review"]
docker run --rm -e ANTHROPIC_API_KEY -v "$PWD:/repo" zenodotus /repo --json

As a GitHub Actions step (fails the job on a no-go via the non-zero exit):

- name: Zenodotus release-readiness gate
  env:
    ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
  run: |
    pip install "zenodotus[llm,tools]"
    zenodotus review . --json --log discoveries.jsonl

The deterministic floor (gates.py) composes external tools as optional subprocesses and degrades gracefully when one is absent. The exact tools, pinned versions, and invocations are documented in docs/CONCEPT.md → Tools wired. Install the pip-installable helpers with pip install "zenodotus[tools]".

Why the discovery log matters

Zenodotus only justifies its existence if the panel finds things the free deterministic tools do not. Every such finding is recorded to a structured discovery log (discovery_log.py). The repo does not graduate to public / published until the log proves the panel earns its keep — see docs/CONCEPT.md and the "prove itself" issues.

License

Apache-2.0 — chosen for its explicit patent grant (see docs/POSITIONING.md).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zenodotus-0.1.0.tar.gz (49.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zenodotus-0.1.0-py3-none-any.whl (29.8 kB view details)

Uploaded Python 3

File details

Details for the file zenodotus-0.1.0.tar.gz.

File metadata

  • Download URL: zenodotus-0.1.0.tar.gz
  • Upload date:
  • Size: 49.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for zenodotus-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9b8d9da5bc65383fd0f861757df81cec2a4500aec577a262a804874ca0cdc054
MD5 4178f35784c320ee0f0249f75b98f103
BLAKE2b-256 c2cac0cfa72ba6a124a03211e39b690d5d7b33fc74306f00efef4f4e9263a292

See more details on using hashes here.

Provenance

The following attestation bundles were made for zenodotus-0.1.0.tar.gz:

Publisher: release.yml on Kromatic-Innovation/zenodotus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zenodotus-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: zenodotus-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 29.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for zenodotus-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 657b0be3e2a820acfc60c30120980fa9eb92e1857b3165248769cbd6abe0c0f0
MD5 75bab2a07889fd14739a006a907c8feb
BLAKE2b-256 4abead3ff4f6a6cc259ca24f9163c6bf32f2bebb63fccdf2be01400b012a3338

See more details on using hashes here.

Provenance

The following attestation bundles were made for zenodotus-0.1.0-py3-none-any.whl:

Publisher: release.yml on Kromatic-Innovation/zenodotus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.3.0

2 files

0.2.0

2 files

0.1.1

2 files

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page