Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
81383fb
feat(gpu): support RTX PRO 6000 Blackwell benchmark data (#618)
Oseltamivir Jul 24, 2026
4734350
fix(overview): clarify platform result coverage / 修正总览页的平台结果覆盖 (#621)
edwingao28 Jul 25, 2026
2e236b3
fix(overview): refine responsive comparison layout / 优化总览页响应式对比布局 (#622)
edwingao28 Jul 25, 2026
6d298ec
chore(specs): set real RTX PRO 6000 all-in power and cost tiers (#627)
functionstackx Jul 27, 2026
fb7dfb6
chore: bump deps (#626)
adibarra Jul 27, 2026
dde2422
ci: remove workflow cache warnings / CI:消除工作流缓存警告 (#628)
adibarra Jul 27, 2026
25f93cd
Migrate workspace tooling from pnpm to Bun / 将工作区工具链从 pnpm 迁移到 Bun (#…
adibarra Jul 27, 2026
5304b23
feat(calculator): show unofficial-run overlays in the TCO calculator …
Oseltamivir Jul 27, 2026
9319afc
feat(blog): port Vera Rubin NVL72 vs GB200 NVL72 inference article fr…
functionstackx Jul 27, 2026
776d585
fix(inference): default DeepSeek V4 agentic charts to vLLM (#632)
cquil11 Jul 27, 2026
a3f5574
feat(models): add Kimi-K3 as its own model bucket / 新增 Kimi-K3 独立模型分桶…
Oseltamivir Jul 28, 2026
0b60f75
feat(inference): show pipeline parallelism (PP) in chart labels and t…
functionstackx Jul 28, 2026
f88dccc
. (#637)
Oseltamivir Jul 28, 2026
dfec69b
Fix DeepSeek V4 agentic calculator support / 修复 DeepSeek V4 智能体计算器支持 …
Oseltamivir Jul 28, 2026
5ade243
Hide branded watermarks on unofficial domains / 在非官方域名隐藏品牌水印 (#635)
adibarra Jul 28, 2026
f6db0a3
Show selected percentile in agentic x-axis titles for Interactivity /…
cquil11 Jul 28, 2026
9d40e84
feat(landing): feature Kimi K3 on launch banner, modal, and first-loo…
functionstackx Jul 29, 2026
e0af651
CollectiveX explorer backed by a lazy-ingest Neon database (#497)
Oseltamivir Jul 29, 2026
4bfcc84
. (#641)
Oseltamivir Jul 29, 2026
12e1175
feat(inference): explain offload halo in chart legends (#642)
Oseltamivir Jul 29, 2026
09ebdaa
fix(staging): preserve staged benchmark runs (#643)
cquil11 Jul 29, 2026
56678ff
docs: remove temporary language override (#646)
edwingao28 Jul 29, 2026
8ec82ef
feat(overview): add scenario-aware comparisons / 添加场景感知对比 (#645)
edwingao28 Jul 30, 2026
71b59d1
fix(db): honor explicit Dynamo disagg state (#648)
cquil11 Jul 30, 2026
56fa357
Remove Normalized E2E / Session Time / Prefill TPS x-axis modes / 移除 …
cquil11 Jul 30, 2026
0c543dc
chore(db): purge run 30405836523 (Kimi-K3 B300 AgentX non-DSpark) (#649)
functionstackx Jul 30, 2026
08e6a98
fix(inference): separate multinode aggregate deployments (#650)
cquil11 Jul 30, 2026
92b1bec
fix(overview): clarify speculative decode labels (#647)
edwingao28 Jul 30, 2026
753052f
feat(quotes): add SambaNova supporter quote to carousel (#652)
cquil11 Jul 30, 2026
bd9a436
chore(pricing): update RTX PRO 6000 hyperscaler and neocloud $/GPU/hr…
functionstackx Jul 30, 2026
446e2f4
fix(overview): hyperscaler cost per 1M total tokens + cell-state and …
edwingao28 Jul 31, 2026
805650b
feat(overview): curated scenario rows, 150/200 service levels, trimme…
functionstackx Jul 31, 2026
a52847e
chore(overview): label the tier control SLO and enlarge the column he…
functionstackx Jul 31, 2026
2d5b195
Explain clipped inference chart lines / 说明推理图表的截断曲线 (#655)
Oseltamivir Jul 31, 2026
5a6f918
fix: keep overflow labels within bounds (#658)
adibarra Jul 31, 2026
ae3a240
Update TCO to July / 将 TCO 更新至 7 月 (#659)
Oseltamivir Jul 31, 2026
6040e97
fix(inference): correct CSV latency metadata and overlay rows (#660)
Oseltamivir Jul 31, 2026
715c965
chore(pricing): state July 2026 TCO rates to two decimals (#661)
functionstackx Jul 31, 2026
87407cd
chore(db): purge MiniMax M3 AMD run 30346826643 / 清理 MiniMax M3 AMD 运…
cquil11 Jul 31, 2026
11d559a
Promote Overview to top-level navigation / 将总览提升至顶层导航 (#663)
functionstackx Aug 2, 2026
30968a4
Add audited benchmark point purges / 添加可审计的基准测试点删除机制 (#665)
adibarra Aug 3, 2026
3d83528
Port Kimi K3 architecture article from Substack / 移植 Kimi K3 架构文章 (#666)
functionstackx Aug 4, 2026
7067f0c
feat: update CollectiveX run controls (#667)
Oseltamivir Aug 4, 2026
621d078
ci: use 8 vCPU runner for agentic ingest (#669)
cquil11 Aug 4, 2026
5da72c8
refactor(ui): rename user-facing "GPU" to "Chip" across the site / 将全…
functionstackx Aug 4, 2026
2bfa3b6
ci: use 16 vCPU runner for agentic ingest (#670)
cquil11 Aug 4, 2026
a7c5a57
Optimize agentic trace ingestion (#672)
cquil11 Aug 5, 2026
21dec9d
perf(db): accelerate parallel trace ingestion / 加速并行 trace 摄取 (#673)
cquil11 Aug 5, 2026
bc4c9b1
Add E2E Normalized Interactivity x-axis metric as the agentic default…
cquil11 Aug 5, 2026
e67785f
fix(agentic): intersect canonical and local Pareto frontiers (#674)
cquil11 Aug 5, 2026
bc86e2a
feat(overview): add 30-day cost comparison / 总览页新增 30 天成本对比 (#676)
edwingao28 Aug 5, 2026
1cf3017
fix(cache): bound blob keys for bulk API requests (#679)
cquil11 Aug 6, 2026
1590c0f
chore(nav): move CollectiveX into the Hidden tab menu (#678)
functionstackx Aug 7, 2026
2a96b01
fix(inference): block cross-engine STP comparisons at 8K/1K (#681)
functionstackx Aug 7, 2026
989d148
fix(inference): exempt ATOM from the 8K/1K engine guard (#682)
functionstackx Aug 7, 2026
c7d0313
fix(inference): guard only vLLM and SGLang on 8K/1K (#683)
functionstackx Aug 7, 2026
529925a
feat(overview): add soft navigation and selectable reference / 总览页支持软…
edwingao28 Aug 7, 2026
1ac9ce4
fix(agentx): use full-response interactivity (#677)
cquil11 Aug 7, 2026
92e0018
Remove stage results concurrency lock (#684)
cquil11 Aug 7, 2026
f4be238
Fix trace replay JSONB metric merge (#685)
cquil11 Aug 7, 2026
24eac12
feat(collectivex): show KV-cache transfer cases on the CollectiveX ta…
Oseltamivir Aug 7, 2026
30393bc
chore(db): purge run 29741710665 (GLM-5.2 B300 SGLang AgentX non-MTP)…
functionstackx Aug 7, 2026
3957e8f
Gate full E2E suite in CI / 将完整 E2E 套件交给 CI 门禁 (#675)
adibarra Aug 7, 2026
4b2fdc0
chore(db): purge attempt 1 of run 29651235293 (#691)
cquil11 Aug 7, 2026
8ce927b
chore(models): deprecate Kimi K2.5/2.6/2.7-Code (#692)
functionstackx Aug 7, 2026
5e629b7
chore(db): purge GLM-5.2 B300 SGLang HiCache attempt / 清除 GLM-5.2 B30…
cquil11 Aug 7, 2026
b1f11f5
chore(db): clean up outdated non-MTP AgentX benchmark runs / 清理过时的非 M…
cquil11 Aug 7, 2026
dbae565
perf(overview): avoid RSC selector round trips / 总览页选择器避免 RSC 往返 (#687)
edwingao28 Aug 7, 2026
4097c8c
feat(overview): link history cells to exact curves / 总览历史单元格链接精确对比曲线 …
edwingao28 Aug 8, 2026
00291ca
feat(overview): bottom toggle to show deprecated & maintenance models…
edwingao28 Aug 8, 2026
0e176e1
feat(collectivex): chart KV-transfer scaling and lead kv-only runs wi…
Oseltamivir Aug 8, 2026
1244341
feat(constants): register the tilert framework so legends read TileRT…
Oseltamivir Aug 8, 2026
25e1464
fix(charts): scope the disagg cost caveat to per-token-type cost (#698)
functionstackx Aug 8, 2026
8927aff
Remove the Performance Over Time popup / 移除性能趋势弹窗
functionstackx Aug 9, 2026
be80a91
feat(calculator): default-hide SKUs above config limit (#703)
Oseltamivir Aug 9, 2026
d17bfbe
Label singleton unofficial overlay series / 为单点 unofficial overlay se…
Oseltamivir Aug 9, 2026
e9b1ed6
Label singleton (#706)
Oseltamivir Aug 9, 2026
ed5c889
fix(calculator): use clamped endpoint metadata (#707)
Oseltamivir Aug 9, 2026
9c1cee2
fix(inference): retain clipped rows in table view (#708)
Oseltamivir Aug 9, 2026
0fcff6d
chore(db): purge outdated DSV4 GB300 AgentX attempt (#709)
cquil11 Aug 9, 2026
27bfaa6
feat(inference): guard only vLLM vs SGLang, per hardware SKU (#711)
functionstackx Aug 9, 2026
d525d9e
Export displayed metrics in inference CSV downloads (#712)
Oseltamivir Aug 10, 2026
bc1fa04
fix(ui): support multi-select kernel modes / fix(ui):支持内核模式多选 (#714)
Oseltamivir Aug 10, 2026
4501bc6
perf(api): add compact calculator benchmarks (#715)
Oseltamivir Aug 10, 2026
6323304
feat(inference): default to the best line per SKU / feat(inference):默…
Oseltamivir Aug 10, 2026
6619144
feat(blog): port "Ultra-High Interactivity on NVIDIA GPUs? TileRT on …
functionstackx Aug 10, 2026
ce0aaee
Add synchronized public API reference / 新增同步维护的公开 API 参考文档 (#718)
adibarra Aug 10, 2026
3051dcb
feat(agentic): put the latency percentile selector behind the feature…
functionstackx Aug 10, 2026
054a9d3
fix(inference): stop flagging a complete comparison date range / 修复对比…
edwingao28 Aug 10, 2026
c4224c1
docs update (#721)
Oseltamivir Aug 11, 2026
40be975
perf(overview): derive the reference client-side and harden soft navi…
edwingao28 Aug 11, 2026
1fd5e8d
fix(inference): ungate Measured Energy axes and give them a Pareto di…
edwingao28 Aug 11, 2026
1c1c7d9
chore(db): purge DSV4 GB300 Dynamo-vLLM AgentX attempt (#722)
cquil11 Aug 11, 2026
da43592
chore(db): clean up unsupported AgentX results (#723)
cquil11 Aug 11, 2026
763db2a
feat(quotes): add TileRT Team supporter quote(#724)
Oseltamivir Aug 12, 2026
bec218d
chore(quotes): update TileRT logo mark (#725)
Oseltamivir Aug 12, 2026
e3af595
fix(inference): derive $/M tok and J/token from throughput instead of…
Oseltamivir Aug 12, 2026
ebcd38d
ci: sync staging database from production (#727)
cquil11 Aug 12, 2026
f3c582d
ci: report staging workflow start (#728)
cquil11 Aug 12, 2026
c8b87de
feat(inference): split gradient labels by KV offload state / 渐变标签按 KV…
functionstackx Aug 12, 2026
2e1a813
Merge mixed speculative decoding points on agentic curves (#695)
cquil11 Aug 12, 2026
03cd96e
chore(quotes): drop four orgs from the landing quote carousel (#730)
functionstackx Aug 12, 2026
ac41a81
feat(agentic): nest the latency x-axis modes under an Advanced menu /…
functionstackx Aug 12, 2026
12e72c3
feat(overview): selectable history comparison window / 总览历史对比支持可选时间窗口…
edwingao28 Aug 13, 2026
08e1f7d
Remove stage results concurrency lock (#733)
cquil11 Aug 13, 2026
43fa9b2
Merge remote-tracking branch 'upstream/master' into sync/upstream-202…
Aug 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
79 changes: 79 additions & 0 deletions .agents/skills/neon/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
---
name: neon
description: >-
Repository-specific guidance for working with InferenceX's Neon PostgreSQL
databases, connection variables, migrations, and query code. Use when Neon,
Postgres, DATABASE_URL, database, schema, migration, or backend data access is
mentioned.
---

# Neon PostgreSQL in InferenceX

Use this skill for database work in this repository. InferenceX runs on Vercel
and uses Neon as PostgreSQL; do not introduce Neon Auth, Object Storage,
Functions, AI Gateway, an ORM, or new infrastructure unless the user asks.

## Start with the repository

Read the relevant local documentation before changing code:

- `docs/index.md`
- `docs/architecture.md` for the API and cache boundaries
- `docs/data-pipeline.md` for ingestion and schema flow
- `docs/collectivex.md` for the separate CollectiveX database

Existing database code lives in `packages/db/`. Reuse its connection helpers,
tagged SQL patterns, migrations, and scripts instead of creating a parallel
client or configuration layer.

## Connections and credentials

- Main read path: `DATABASE_READONLY_URL`
- Main administrative writes: `DATABASE_WRITE_URL`
- CollectiveX read path: `DATABASE_COLLECTIVEX_READONLY_URL`
- CollectiveX writes and migrations: `DATABASE_COLLECTIVEX_WRITE_URL`

Keep credentials in environment variables. Never print, commit, copy into
source, or expose connection strings in logs or responses. Use the read-only
connection for diagnostics and normal reads; use a write connection only when
the requested task authorizes mutation.

The application uses `@neondatabase/serverless` for serverless reads and
`postgres` for administrative or transaction-heavy scripts. Preserve that
split unless runtime requirements clearly demand a change.

## Schema and query changes

1. Inspect the current migration and query code before proposing a schema
change.
2. Add an append-only migration; never rewrite a migration that may have
already run.
3. Keep raw database rows in API responses unless a documented route is an
explicit exception.
4. Make multi-step writes atomic and safe under concurrent Vercel requests.
5. Verify indexes and bounded query behavior for new filters or ordering.
6. Add focused query/migration tests and run the repository checks.

Useful commands:

```bash
bun run admin:db:migrate
bun run admin:db:migrate:collectivex
bun run admin:db:verify
bun run typecheck
bun run test:unit
```

Do not run migrations, destructive SQL, or production writes during a review
or diagnostic request. For authorized schema work, prefer an isolated Neon
branch and confirm the target before applying changes.

## Current Neon documentation

Neon changes over time. For platform-specific behavior, verify against the
official documentation index rather than relying on this compact skill:

- https://neon.com/docs/llms.txt
- https://neon.com/docs/connect/choose-connection
- https://neon.com/docs/serverless/serverless-driver
- https://neon.com/docs/introduction/branching
8 changes: 4 additions & 4 deletions .claude/agents/ingest.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ You ingest benchmark runs from `SemiAnalysisAI/InferenceX` GitHub Actions into t
cd /Users/quilicic/InferenceX-app/packages/db
DATABASE_WRITE_URL='<provided direct non-pooled write URL>' \
GITHUB_TOKEN=$(gh auth token) \
pnpm exec tsx src/ingest-ci-run.ts --download <RUN_ID> SemiAnalysisAI/InferenceX
bun src/ingest-ci-run.ts --download <RUN_ID> SemiAnalysisAI/InferenceX
```

Then refresh the materialized view (the script's auto-refresh sometimes races):
Expand Down Expand Up @@ -118,7 +118,7 @@ cd /Users/quilicic/InferenceX-app/packages/db
INGEST_RUN_ID=$RID INGEST_RUN_ATTEMPT=1 INGEST_ARTIFACTS_PATH=$TMPDIR INGEST_REPO=SemiAnalysisAI/InferenceX \
DATABASE_WRITE_URL='<provided direct non-pooled write URL>' \
GITHUB_TOKEN=$(gh auth token) \
pnpm exec tsx src/ingest-ci-run.ts
bun src/ingest-ci-run.ts
rm -rf $TMPDIR
```

Expand Down Expand Up @@ -162,7 +162,7 @@ If the user doesn't specify a description, DO NOT skip the entry and DO NOT bloc
- **Multi-attempt artifacts**: a single GitHub run can spill across runners (`h200-cw_00` + `h200-dgxc-slurm_1`); the logical-name dedup strips the `_<runner>_<attempt>` suffix.
- **Materialized view dedup tiebreaker**: `latest_benchmarks` picks rows by `date DESC, wr.run_started_at DESC`. Backfilling old data may not surface unless dates align with the user's date picker selection.
- **Date alignment for partial runs**: when a re-run only covers a subset of concs (`replace ONLY the points this run produces`), align dates with prior full sweep via `UPDATE benchmark_results.date = '<full-sweep-date>'` so the frontend's max-date-per-group dedup doesn't drop the older sweep.
- **Agentic interactivity normalization (`*_intvty`)**: for `agentic_traces` runs, interactivity MUST be the slow-tail reciprocal of the ITL percentile — `*_intvty = 1/*_itl` (so `p90_intvty = 1/p90_itl`). Some harness versions emit `*_intvty` as `p(1/ITL)` instead (fast-tail — inverts percentile order, e.g. p90 shows ~`1/p10(ITL)`), which silently contaminates cross-run Pareto comparisons. The ingest mapper (`benchmark-mapper.ts`) now **derives `*_intvty` from `*_itl` and discards the artifact's value** for agentic rows, so a normal ingest is self-correcting — no manual step needed. The frontend `agenticAliases` does the same for overlay / `?unofficialrun=` rows. If you ever load agentic data through a path that bypasses the mapper, run `pnpm --filter @semianalysisai/inferencex-db db:backfill-agentic-intvty --yes` (idempotent; rewrites `mean/p75/p90/p95 _intvty = 1/_itl`) then refresh the MV + purge cache. `std_intvty` is intentionally left alone (the reciprocal of a std is meaningless; the API strips it anyway).
- **Agentic interactivity normalization (`*_intvty`)**: for `agentic_traces` runs, interactivity MUST be the slow-tail reciprocal of the ITL percentile, so `p90_intvty = 1/p90_itl`. Some harness versions emit `p(1/ITL)` instead, which inverts percentile order and contaminates cross-run Pareto comparisons. The ingest mapper derives `*_intvty` from `*_itl` and discards the artifact value for agentic rows. The frontend `agenticAliases` does the same for overlay and `?unofficialrun=` rows. Do not ingest through a path that bypasses these normalizers; the retired one-shot backfill is no longer available. `std_intvty` stays unchanged because the reciprocal of a standard deviation is meaningless, and the API strips it.

## Process

Expand All @@ -180,7 +180,7 @@ This agent ingests **benchmark runs**. The HF agentic trace **datasets** (`semia

```bash
cd packages/db && DATABASE_WRITE_URL='<direct write url>' \
pnpm exec tsx src/ingest-weka-dataset.ts <hf-dataset-id> \
bun src/ingest-weka-dataset.ts <hf-dataset-id> \
[--label "…"] [--variant full|256k] [--description "…"] [--limit N]
```

Expand Down
4 changes: 2 additions & 2 deletions .claude/commands/debug.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
allowed-tools: Bash(git log:*), Bash(git diff:*), Bash(git blame:*), Bash(pnpm test:*), Bash(pnpm typecheck*), Bash(pnpm lint*), Bash(pnpm dev*), Bash(curl:*), Read, Glob, Grep
allowed-tools: Bash(git log:*), Bash(git diff:*), Bash(git blame:*), Bash(bun run test:*), Bash(bun run typecheck*), Bash(bun run lint*), Bash(bun run dev*), Bash(curl:*), Read, Glob, Grep
description: Systematic debugging — root cause before fixes
---

Expand Down Expand Up @@ -57,7 +57,7 @@ BEFORE attempting ANY fix:

1. **Create Failing Test** — regression test reproducing the bug with exact triggering input (per CLAUDE.md testing requirements)
2. **Implement Single Fix** — address root cause, ONE change, no "while I'm here" improvements
3. **Verify Fix** — run `pnpm test:unit` and `pnpm typecheck`, confirm no other tests broken
3. **Verify Fix** — run `bun run test:unit` and `bun run typecheck`, confirm no other tests broken

## Red Flags — STOP and Return to Phase 1

Expand Down
10 changes: 5 additions & 5 deletions .claude/commands/fix.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
allowed-tools: Bash(pnpm build*), Bash(pnpm typecheck*), Bash(pnpm lint*), Bash(pnpm fmt*), Read, Edit, Glob, Grep
allowed-tools: Bash(bun run build*), Bash(bun run typecheck*), Bash(bun run lint*), Bash(bun run fmt*), Read, Edit, Glob, Grep
description: Incrementally fix build, type, and lint errors with minimal safe changes
---

Expand All @@ -12,14 +12,14 @@ Incrementally fix build and type errors with minimal, safe changes.
Run all checks and capture errors:

```bash
pnpm typecheck 2>&1
pnpm lint 2>&1
bun run typecheck 2>&1
bun run lint 2>&1
```

If both pass, run the full build:

```bash
pnpm build 2>&1
bun run build 2>&1
```

If everything passes, announce "All checks pass — nothing to fix." and stop.
Expand Down Expand Up @@ -47,7 +47,7 @@ For each error:
- A fix introduces **more errors than it resolves**
- The **same error persists after 3 attempts**
- The fix requires **architectural changes** or touching >3 files
- Errors stem from **missing dependencies** (need `pnpm install`)
- Errors stem from **missing dependencies** (need `bun install`)

## Step 5: Summary

Expand Down
14 changes: 7 additions & 7 deletions .claude/commands/verify.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
allowed-tools: Bash(pnpm test:*), Bash(pnpm typecheck*), Bash(pnpm lint*), Bash(pnpm build*), Bash(pnpm dev*), Bash(pnpm fmt*), Bash(curl:*), Bash(git diff:*), Bash(git status*), Read, Glob, Grep
allowed-tools: Bash(bun run test:*), Bash(bun run typecheck*), Bash(bun run lint*), Bash(bun run build*), Bash(bun run dev*), Bash(bun run fmt*), Bash(curl:*), Bash(git diff:*), Bash(git status*), Read, Glob, Grep
description: Verify work is complete before committing — evidence before claims
---

Expand Down Expand Up @@ -34,39 +34,39 @@ Run each step. Report the actual output — not what you expect.
### 1. Type checking

```bash
pnpm typecheck
bun run typecheck
```

Required: exit 0, no errors

### 2. Linting

```bash
pnpm lint
bun run lint
```

Required: exit 0, no errors

### 3. Formatting

```bash
pnpm fmt
bun run fmt
```

Required: exit 0, no formatting issues

### 4. Unit tests

```bash
pnpm test:unit
bun run test:unit
```

Required: all tests pass, 0 failures

### 5. Dev server starts

```bash
pnpm dev --hostname 0.0.0.0 --port 3000 &
bun run dev -- --hostname 0.0.0.0 --port 3000 &
curl --retry 10 --retry-delay 2 --retry-connrefused -sSf http://localhost:3000 >/dev/null
```

Expand All @@ -75,7 +75,7 @@ Required: server responds successfully
### 6. E2E tests

```bash
pnpm test:e2e
bun run test:e2e
```

Required: all tests pass
Expand Down
4 changes: 2 additions & 2 deletions .claude/commands/write-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,14 @@ Use this format:
[Exact test code]

- [ ] **Step 2: Run test to verify it fails**
Run: `pnpm test:unit -- path/to/test`
Run: `bun run test:unit -- path/to/test`
Expected: FAIL

- [ ] **Step 3: Write minimal implementation**
[Exact implementation code]

- [ ] **Step 4: Run test to verify it passes**
Run: `pnpm test:unit -- path/to/test`
Run: `bun run test:unit -- path/to/test`
Expected: PASS

- [ ] **Step 5: Commit**
Expand Down
2 changes: 1 addition & 1 deletion .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"hooks": [
{
"type": "command",
"command": "pnpm fmt:fix; pnpm lint:fix; true",
"command": "bun run fmt:fix; bun run lint:fix; true",
"timeout": 10,
"async": true
}
Expand Down
4 changes: 2 additions & 2 deletions .claude/skills/write-inferencex-blog/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,7 @@ The editor runs as a background Node process on `127.0.0.1:4747`, reads from and

While the user reviews in the browser, you can:

- Run `pnpm lint && pnpm typecheck` against the working tree to catch any MDX errors that would block the pre-commit hook later.
- Run `bun run lint && bun run typecheck` against the working tree to catch any MDX errors that would block the pre-commit hook later.
- Save the chart image into `packages/app/public/images/{slug}/benchmark-light.png` (and `benchmark-dark.png` if the user provided both) so the `<Figure>` placeholder in the preview shows a real path.

**Concurrent-edit collision warning.** The browser editor auto-saves the user's textarea ~800 ms after their last keystroke. If you re-edit a paragraph the user has open in CodeMirror, your `Edit` call writes to disk first, then the editor's debounced save overwrites your change with the user's stale buffer the next time they type or the timer fires. Failure mode: user asks you to expand a paragraph, you expand it on disk, user types one more character in the browser, the one-liner comes back. When you need to edit a section the user is actively working on, **tell the user explicitly to either close the browser tab or hit the "↻ Reload from disk" button before resuming editing**. Don't rely on them noticing the collision — it looks like nothing happened from their side.
Expand All @@ -342,7 +342,7 @@ git push -u origin blog/{slug}
gh pr create --title "feat(blog): ..." --body "..."
```

The pre-commit hook runs `oxlint`, `oxfmt`, and `tsc --noEmit`. All three must pass. If lint/format fails, run `pnpm lint:fix && pnpm fmt:fix` and re-commit (don't `--no-verify`).
The pre-commit hook runs `oxlint`, `oxfmt`, and `tsc --noEmit`. All three must pass. If lint/format fails, run `bun run lint:fix && bun run fmt:fix` and re-commit (don't `--no-verify`).

After the PR opens, expect Cursor Bugbot to flag correctness issues in the prose (numeric overstatement, claims contradicted by tables, wrong attribution). Treat its findings as real review comments — fix them in a follow-up commit, then resolve the threads. Branch protection on master requires resolved review threads before auto-merge fires.

Expand Down
Loading
Loading