A bounty can say “open” and still be a poor place to spend a weekend.
ClaimScope sends three independent Mozaik agents to inspect funding claims, contribution rules and competing pull requests. A fourth agent reviews evidence as it arrives, without waiting for a fixed pipeline. If slower evidence invalidates an early review, that review is discarded and regenerated against the latest shared revision.
Built during the 5–6 September 2026 Mozaik hackathon. Development was AI-assisted using Codex. Runtime analysis uses a local Qwen3 model.
Watch the 25-second demo · Recorded report
The 38.248-second live audit made five model calls, with three overlapping collectors and four overlapping model requests. The first review used revision 1 and was discarded; the accepted review used revision 3. The video replays the actual timestamps at 2× speed. Overlapping requests do not imply simultaneous token generation inside the model server.
Requirements: Node.js 22+, Python 3.12 and an Apple Silicon Mac for the supplied MLX model-server recipe. The TypeScript client also accepts a compatible localhost chat completion server on other platforms. No paid API key is needed.
npm ci
python3.12 -m venv .venv
.venv/bin/pip install mlx-lm==0.31.3
.venv/bin/mlx_lm.server \
--model mlx-community/Qwen3-4B-Instruct-2507-4bit \
--host 127.0.0.1 --port 9878In another terminal:
npm run audit -- https://github.com/Lilly-Protocol/lily-contracts/issues/324The first model run downloads approximately 2.3 GB of public model weights. GitHub reads
are anonymous by default. If rate-limited, set GITHUB_TOKEN; it is sent only to
api.github.com. CLAIMSCOPE_MODEL_URL and CLAIMSCOPE_MODEL can select another
localhost OpenAI-compatible chat-completion server/model. Remote model URLs are rejected
in this build, so an accidental configuration change cannot introduce paid inference.
Outputs: report.md, audit.json, and a timestamped trace.jsonl in output/.
npm test
npm run typecheckTests use an explicitly labelled deterministic model substitute. The recorded demo uses real local-model inference and live GitHub reads; those are different execution modes.
- One
audit.startedsemantic event reaches threecreateAgentparticipants. - Their situation processors begin separate network work without awaiting each other.
- The first returning source publishes
audit.evidence, starting the reviewer'srunLoopwhile other collectors and inference loops are still active. - Every new evidence result increments shared
RuntimeState.revision. - An answer based on an old revision is logged as
review.discarded; the reviewer starts again with the new evidence. A busy reviewer coalesces intermediate revisions. - Completion requires all three workers and a review of the current revision.
The concurrency is observable, not an animation trick: the trace records source intervals, Mozaik inference events, review versions and discarded answers. A barrier-based test would deadlock if collectors were started sequentially. Another test forces evidence to arrive during review and asserts that the stale answer never becomes the final review.
| Check | Evidence | Limit |
|---|---|---|
| Reward claims | Issue and fully paginated comments; mentioned dollar amounts | A textual amount does not establish currency, escrow or payment availability |
| Basic status and rules | Issue state, archive flag, README and CONTRIBUTING | Not legal advice or proof of individual eligibility |
| Existing work | Cross-referenced PRs from a paginated issue timeline | A linked PR may be irrelevant; unlinked/private submissions remain invisible |
| Final assessment | Deterministic facts plus separately labelled model commentary | This version cannot certify a task as payable |
The factual status is calculated in code. Model prose cannot turn an advertised reward into confirmed payment, mark an unknown bounty funded, or authorize a submission. Source errors remain incomplete evidence. All source excerpts are treated as untrusted input. This is a read-only research tool, with no wallet, payment, posting or account tools.
src/team.ts: Mozaik participants, semantic events, shared revisions, completion gate.src/github.ts: public issue parsing, bounded pagination, request sharing, evidence collectors.src/local-model.ts: localhost inference adapter and concurrency counters.src/types.ts: evidence types and deterministic assessment.src/cli.ts: CLI, event stream and reports.test/team.test.ts: concurrency, stale-review, source-failure, URL and pagination checks.demo/: recorded execution evidence, a 2× replay, and still images.scripts/render_demo.py: reproducible trace visualization using Pillow and ffmpeg.
The public trace omits issue bodies and source excerpts; event timing, facts and model answers are unchanged. Individual model notes are preserved even where they are weak: the competition note focuses on one PR despite three open PRs in the facts, and the eligibility note makes an unsupported inference about compliance. Neither controls the factual assessment. The final report leads with the structured evidence.
To regenerate the demo on macOS, install Pillow and ffmpeg and run:
python3 scripts/render_demo.py output/demo-liveThis prototype supports public GitHub issues only. It does not verify smart-contract escrow or promise earnings. Models can still produce incorrect commentary; check the structured facts and linked sources. At most ten pages per GitHub list are scanned; a cap hit is explicit. A whole audit has a three-minute limit and individual source calls have shorter limits. The MLX server is for local development and should stay on loopback.
Mozaik, its providers, and the model retain their own licenses. ClaimScope source is MIT.
