AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Persistent repository intelligence for humans and AI agents. TraceHound maps TypeScript codebases into evidence-backed architecture graphs, traces issues to affected components, and guides sandboxed agents toward tested fixes.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
TraceHound maps TypeScript codebases into evidence-backed component graphs: every edge on the
canvas points back to a file, symbol and line range in the analyzed code, with the extractor that
found it and how confidently the value was resolved (proven · resolved-default · dynamic).檢視完整 README ↗An open-source GitHub Action that reviews pull requests with NVIDIA Nemotron on Nebius Token Factory.
pnpm install, pnpm fixture, and pnpm test need no key; see Quick start.Running the Action needs a Nebius Token Factory key as the repository secret NEBIUS_API_KEY.
It runs on same-repository pull requests only; pull requests from forks are skipped because forks
don't get repository secrets. Reviews cost about $0.06–0.07 per pull request on 3.5, pre-VAT.
When a chunk returns invalid JSON (about 7 of 40 dev pull requests per run), the review is partial
and says so. Save this as .github/workflows/tracehound-review.yml:
name: TraceHound review
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review, closed]
permissions: {}
jobs:
review:
if: github.event_name == 'pull_request' && github.event.action != 'closed' && github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
timeout-minutes: 20
permissions:
contents: read
pull-requests: write
concurrency:
group: tracehound-review-${{ github.event.pull_request.number }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
persist-credentials: false
# 86fd5d7 is the commit tagged review-freeze-2.1: the measured review pipeline of
# review-freeze-2 (0aeef06) with only the install step changed (decision 072).
# The model runs every review stage (both reviewers and the verifier) on Nemotron 3.5
# Super VL; fixes run on Nemotron 3 Super.
- uses: SunnyBagal/TraceHound/.github/actions/tracehound-review@86fd5d796c901cb20177cda28c4925e8c72d0901 # review-freeze-2.1
with:
nebius-api-key: ${{ secrets.NEBIUS_API_KEY }}
model: 'nvidia/Nemotron-3.5-Super-VL'
This is the review job of the example workflow without its graph-history job. Inputs, permissions and limits are in docs/action/README.md.
flowchart LR
PR["Pull request<br/>title, description, diff"] --> D["review-diff-v1<br/>reads the diff only"]
PR --> C["review-ctx-v1<br/>diff + repository context<br/>(hunk windows, git grep references)"]
D --> P["Pool<br/>every diff finding + context<br/>findings that agree with none"]
C --> P
P --> V["verify-ctx-v1<br/>keep or drop each finding,<br/>reading the code around it"]
V --> L["Maintainer feedback (learn)<br/>drops findings like ones maintainers<br/>rejected; off by default"]
L --> R["One COMMENT review<br/>line comments + fix suggestions"]
K["Cross-file contracts<br/>deterministic, no model"] -.-> R
pool-verify-v1 (decision 059).learn: 'on' suppresses findings similar to comments
maintainers rejected, and records each suppression in the review footer. It is off by default
and the benchmark does not measure it (docs/learn.md).Stages we tried and dropped, each a loss on the dev set: 064, vote across runs and 065, evidence verifier + gate. Every lever we tried is in the levers table.
Every result below is the product: pool-verify-v1 on Nemotron 3.5 Super
(nvidia/Nemotron-3.5-Super-VL) at tag review-freeze-2 (0aeef06), via Nebius Token Factory,
called TraceHound v2 here. The review pipeline at review-freeze-2; the Action at
review-freeze-2.1 fixes installation only. Benchmark: ai-code-review-evaluations/golden_comments (5 repos × 10
PRs). F is scored by bench-judge-v1 (the scorer of record) with bench-judge-x1 as a second judge.
The tools' rows are their recorded reviews in the public dataset, scored with our judges; we did not
run the tools.
Pre-registered before the run; chosen on dev before this look; no tuning after; one run (v2-calcom.md, decision 069).
| reviewer | P | R | F (judge v1, scorer of record) | F (judge x1) |
|---|---|---|---|---|
| TraceHound v2 (pool-verify-v1, 3.5) | 63.2% (12/19) | 52.2% (12/23) | 57.1% | 58.5% |
| TraceHound v1 (3 Super, 062, run 1) | 56.0% | 60.9% | 58.3% | 58.3% |
| Augment | 83.3% | 65.2% | 73.2% | 73.2% |
| Cursor | 81.3% | 56.5% | 66.7% | 66.7% |
| Greptile | 58.8% | 43.5% | 50.0% | 55.0% |
| Copilot | 35.7% | 65.2% | 46.2% | 50.8% |
| CodeRabbit | 34.6% | 39.1% | 36.7% | 37.5% |
On 10 blind Cal.com PRs, TraceHound is statistically tied with four of five commercial reviewers (Augment, Cursor, Greptile, Copilot) and ahead of one (CodeRabbit; only 10 PRs).
v2 is the product config, and this is the second blind look at Cal.com. The first look was v1
(pool-verify-v1 on Nemotron 3 Super, tag review-freeze-1, decision 062). v2's model and pipeline
were chosen on our 40-PR dev set before this run, the plan was pre-registered and pushed before the
first 3.5 call on Cal.com, nothing was tuned after it, and there is no second v2 run. The v1 row is
kept beside it, unchanged, so the two looks can be read together.
| reviewer | F v1 | F x1 |
|---|---|---|
| Augment | 66.3% | 65.9% |
| Cursor | 53.8% | 58.8% |
| TraceHound v2 (dev 7r + Cal.com 4) | 52.2% | 55.4% |
| Greptile | 49.5% | 55.1% |
| CodeRabbit | 40.0% | 45.0% |
| Copilot | 35.2% | 42.0% |
Across all 50 PRs: behind the leading reviewer (Augment), statistically tied with the next two (Cursor, Greptile), ahead of the last two (CodeRabbit, Copilot) (3rd of 6 as a point estimate). Both judges agree (069b paired bootstrap, 10,000 resamples, seed 69; v2-intervals.md). Against v1 (3 Super), v2 is ahead under bench-judge-v1 (+11.0 [+1.8, +20.1]) and statistically tied under bench-judge-x1. 40 of these 50 PRs are our dev set, which the configuration was tuned on.
ReviewBench test runs (25 PRs, one round, ReviewBench's own judge); not a leaderboard submission.
Image 9b9a5127, pre-registered in P008 (reviewbench.md).
| # | config | grounded F1 | G P | G R | augmented F1 | A P | findings |
|---|---|---|---|---|---|---|---|
| 331 | pool-raw-x2 · 3 Super (pre-registered winner) | 21.3 | 76.3 | 12.4 | 30.6 | 50.6 | 222 |
| 333 | pool-raw-missed · 3 Super | 20.4 | 64.5 | 12.1 | 28.9 | 43.9 | 194 |
| 328 | pool-raw · 3 Super | 16.0 | 70.6 | 9.0 | 23.0 | 52.5 | 124 |
| 330 | pool-verify-v1 · 3 Super | 13.9 | 79.5 | 7.6 | 22.3 | 67.2 | 99 |
| 329 | pool-raw · 3.5 | 13.5 | 56.3 | 7.7 | 19.0 | 44.0 | 86 |
| 332 | pool-verify-v1 · 3.5 (= the product) | 12.2 | 69.2 | 6.7 | 17.6 | 57.2 | 60 |
On 30 pre-registered seeded PRs, TraceHound caught 9 of 22 seeded defects and stayed silent on all 8 clean controls. It caught 5 of 6 bugs inside the diff but only 4 of 16 that break files the PR didn't touch, and 3 of those 4 came from the deterministic contract check, not the model.
| class | caught | Recall | Linea |
|---|---|---|---|
| in-diff (D) | 5/6 | 3/3 | 2/3 |
| cross-file, typed | 2/6 | 2/3 | 0/3 |
| cross-file, keyed | 2/6 | 1/3 | 1/3 |
| cross-file, semantic | 0/4 | 0/2 | 0/2 |
| all seeded | 9/22 | 6/11 | 3/11 |
| controls with a comment | 0/8 | 0/4 | 0/4 |
a4a6c83, hashes published before any PR.0aeef06, Linea at 86fd5d7 (the install fix).The rule: every number links to its run record; every loss is published. Full results, losses and limits: docs/bench/results.md.
Nemotron 3 Ultra (report only, free NVIDIA API, not Token Factory, not the product): the 550B Nemotron 3 Ultra did not review better than 3.5 Super on our pipeline. Over dev runs 10 and 11 (judge v1), its pool-verify-v1 mean F was 47.1, against 3.5's 50.4 and 3 Super's 42.3, with no interval-backed difference. Its pool-raw mean F was 43.6 against 3.5's 53.9 (−10.2 [−17.7, −3.2]), the only interval that excludes 0. Under judge x1: pool-verify-v1 54.9, pool-raw 51.4 (docs/bench/dev-ultra.md).
SunnyBagal/tracehound-demo runs the Action pinned
to review-freeze-2.1 (86fd5d7) with the 3.5 model set explicitly. On demo PR #2, the current config posted no
findings (24 Oct). The older reviews posted there came from earlier generators on Nemotron Nano and
are not the current config. Seeded PRs on the current config: 30 on
SunnyBagal/recall-seeded and
SunnyBagal/linea-seeded (results above).
nvidia/Nemotron-3.5-Super-VL) via Nebius Token Factory, the
product model (decision 068) for both reviewers and the verifier. Decision 067 adopted it on 2
dev runs: v1 F 50.4 vs 42.3; the second judge's interval includes 0. Decision 068 made it the
Action's default, with partial reviews when a chunk fails.nvidia/nemotron-3-super-120b-a12b) via Nebius Token Factory, for
the fix suggestions, which were not measured on 3.5. Prices:
config/prices.json (third-party rates, not yet checked in the Nebius
console).TraceHound maps TypeScript codebases into evidence-backed component graphs: every edge on the
canvas points back to a file, symbol and line range in the analyzed code, with the extractor that
found it and how confidently the value was resolved (proven · resolved-default · dynamic).
It also has a repair loop on open NVIDIA Nemotron models whose fixes are verified independently of the agent in a sandbox, and a reproduce stage that writes one failing test for a bug claim and checks it in a fresh sandbox, independently of the agent. The graph did not help the repair agent. In a pre-registered held-out evaluation (8 seeded tasks on one repo, 160 runs), the agent resolved about as many tasks with the graph as without it, and never called a graph tool. See Held-out evaluation.
packages/analyzer) — ts-morph + Zod. Deterministic extraction of imports,
routes, Redis and Prisma usage and env reads. It groups files into responsibility-based
components and writes a snapshot keyed by commit SHA + analyzer version. There's an optional
naming pass with NVIDIA Nemotron (Nebius Token Factory) that works from extracted facts only,
under hard budget caps.viewer/) — static Next.js + React Flow + ELK canvas with node and edge
inspectors, evidence snippets, GitHub permalinks and a warnings panel.This section is the first look, v1 (pool-verify-v1 on Nemotron 3 Super, review-freeze-1,
decisions 062 and 066). The product config's numbers are under Results.
On 10 blind pull requests (Cal.com run 1, n = 23), TraceHound is statistically tied with Greptile and Cursor. Its run-1 F was 58.3% against CodeRabbit's 36.7%, but that is not a significant lead. No gap to another tool is outside its 95% interval. The CodeRabbit gap is the clearest: TraceHound is ahead in 96% of resamples, but its interval still includes 0 (audit-cc01 §3.2). Across all 50 pull requests it is 4th of 6 under both judges (v1 all-50 table). Every loss is published, including every precision lever we tried on dev (levers table); the run-to-run spread at temperature 0 is larger than every effect we tried to measure. Tool numbers come from their recorded reviews in the public benchmark dataset, scored with our judge; we did not run the tools. F under bench-judge-v1; details, losses and limits in docs/bench/results.md.
| reviewer | F, blind (Cal.com run 1, n = 23) | F, dev (run 1, n = 74) |
|---|---|---|
| Augment | 73.2% | 64.1% |
| Cursor | 66.7% | 49.6% |
| TraceHound (pool-verify-v1) | 58.3% | 35.6% |
| Greptile | 50.0% | 49.3% |
| Copilot | 46.2% | 31.3% |
| CodeRabbit | 36.7% | 41.0% |
corepack enable picks up the version pinned in package.json)pnpm install
pnpm fixture # clone the pinned demo repo into fixtures/demo-repo (tests use it)
pnpm test # analyzer + viewer tests (never call a model)
pnpm --filter @tracehound/viewer dev # http://localhost:3000, serving the committed snapshots/
pnpm demo (= pnpm fixture + analyze) re-analyzes the demo repo and overwrites the
committed snapshots/. Without NEBIUS_API_KEY it does not stop: it uses heuristic component
names. The viewer tests, which expect the committed model-written names, then fail;
git checkout -- snapshots/ restores them.
The optional Nemotron naming pass: put NEBIUS_API_KEY=... in .env (see .env.example).
Spend is capped by TRACEHOUND_BUDGET_RUN_USD (default $1) and TRACEHOUND_BUDGET_TOTAL_USD
(default $45). pnpm spend prints the ledger. Re-runs on an unchanged commit hit the response
cache and cost $0.
node eval/fixtures/build-toy-repo.ts # build the toy repo the toy tasks point at (once)
pnpm tracehound repair --task eval/tasks/toy-discount/task.json --agent noop --provider docker
pnpm tracehound repair --task eval/tasks/toy-discount/task.json --agent nemotron --graph off --provider docker
tracehound-sandbox:bun1.4.2-ts5.9.3-2 from harness/sandbox.Dockerfile, which needs
network once.--agent noop makes no model calls and ends UNRESOLVED (the bug isn't fixed). It checks the
setup.--agent nemotron needs NEBIUS_API_KEY; pnpm tracehound loads the workspace .env itself.
It runs agent-v6 (decision 047; prompt harness/prompts/agent-v5.md) on Nemotron Nano with reasoning on (--reasoning off to disable); --graph on
puts a context packet from the graph in the first message and offers the graph tools. In the
held-out evaluation this did not improve repair (below).runs/<runId>.json with the state, the diff, every command, tokens and cost,
and the sandbox it ran in (image id, Docker version, provider version, graph snapshot or
none).packages/analyzer/test/harness-docker.test.ts, run in CI):
no-new-privileges; only /work and /scratch are writable.env never enter; no host
environment variables are passedThe viewer is a fully static export: HTML, JS and snapshots/*.json. No server, API or env
vars are needed at runtime.
Option A: Git integration (recommended)
SunnyBagal/TraceHound.viewer. Vercel detects Next.js and the pnpm workspace from the
root pnpm-lock.yaml.viewer/vercel.json: framework Next.js, build command
pnpm run build, which copies ../snapshots into public/, builds, and verifies the export.
Leave Output Directory unset. Vercel's Next.js builder reads .next/ and serves the
static export itself. Pointing it at out/ fails with "routes-manifest.json couldn't be
found". Files outside the Root Directory must be included in the build (the Vercel default),
because the build reads ../snapshots and ../packages/analyzer.main redeploys. To publish a new snapshot, commit it under
snapshots/ and push.Option B: CLI, prebuilt
pnpm --filter @tracehound/viewer build # → viewer/out/
npx vercel deploy viewer/out --prod # first run: `npx vercel login`
To serve it under a sub-path, build with NEXT_PUBLIC_BASE_PATH=/tracehound.
Pre-registered in docs/eval/protocol.md (with Amendment 1) before any
held-out run; code frozen at tag eval-freeze-2. 8 seeded bug tasks on one repo (Recall), graph
on and off, Nemotron Nano and Super, 5 repeats each: 160 runs. Full tables, validity checks and
disclosures: docs/eval/heldout-results.md.
| Model | Resolved, graph on | Resolved, graph off | Verified at stop, on | Verified at stop, off |
|---|---|---|---|---|
| Nano | 11 of 40 | 13 of 40 | 11 of 40 | 19 of 40 |
| Super | 28 of 40 | 26 of 40 | 30 of 40 | 31 of 40 |
CLAUDE.md — stack, product rule, spending rules, roadmapdocs/decisions.md — every non-obvious choice and the alternative we rejectedFEEDBACK.md — dated observations on Nebius Token Factory + Nemotron@xyflow/react, MIT). The in-canvas attribution is
hidden (proOptions.hideAttribution), so it is credited here.viewer/public/icons/ (sources in
viewer/public/icons/CREDITS.md).MIT