chore: import upstream snapshot with attribution
Deploy site to GitHub Pages / build (push) Failing after 1s
Deploy site to GitHub Pages / deploy (push) Has been skipped

This commit is contained in:
wehub-resource-sync
2026-07-13 12:02:56 +08:00
commit 5f98960d22
495 changed files with 149129 additions and 0 deletions
+219
View File
@@ -0,0 +1,219 @@
---
name: add-lang
description: Add tree-sitter language support to codegraph end-to-end — wire the grammar + extractor, write tests, then benchmark extraction quality and retrieval value on 3 popular real-world repos. Use when the user runs /add-lang <language> or asks to add/support a new language (e.g. Lua, Elixir, Zig, OCaml) in codegraph.
---
# Add a language to CodeGraph
Wire a new tree-sitter language into codegraph's extraction pipeline, prove it
extracts real symbols on popular repos, and prove it beats no-codegraph for an
agent. Runs **fully autonomously** — pick repos, benchmark, update docs, then
report. **Never commit, push, publish, or tag** (house rule); leave all changes
for the user to review.
The argument is the language token used throughout the `Language` union, e.g.
`lua`, `elixir`, `zig`. If none was given, ask which language. Use the lowercase
single-token form everywhere (`csharp`, not `c#`).
## Prerequisites
- Run from the codegraph repo root. `node`, `git`, `gh`, and a logged-in
`claude` CLI (the benchmark spawns real `claude -p` runs).
- The benchmark uses the local dev build — Step 8 builds + links it on PATH.
## Workflow
Copy this checklist and work through it in order:
```
- [ ] 1. Resolve language; bail early if already supported (just benchmark)
- [ ] 2. Find a grammar + health-check it (ABI / heap corruption)
- [ ] 3. Discover the grammar's AST node types (dump-ast.mjs)
- [ ] 4. Wire the language (4 files; sometimes a 5th core touch)
- [ ] 5. Build + verify-extraction loop until PASS
- [ ] 6. Add extraction tests; make them green
- [ ] 7. Auto-pick 3 popular repos by size tier; add to corpus.json
- [ ] 8. Benchmark all 3: extraction + with/without A/B
- [ ] 9. Update README + CHANGELOG
- [ ] 10. Report; do NOT commit
```
### Step 1 — Resolve + short-circuit
Check whether the language is already wired: look for the token in the
`LANGUAGES` const (`src/types.ts`) and the `EXTRACTORS` map
(`src/extraction/languages/index.ts`). If it is already supported (e.g.
`typescript`, `rust`), **skip Steps 26** and go straight to benchmarking
(Steps 78) to validate/measure it — note in the report that no code changed.
### Step 2 — Find a grammar, then health-check it
```bash
ls node_modules/tree-sitter-wasms/out/ | grep -i <lang> # csharp -> c_sharp
```
- **Present** → likely off-the-shelf; `grammars.ts` resolves it from
`tree-sitter-wasms` automatically. (Many languages: elixir, zig, ocaml,
solidity, toml, yaml, …)
- **Absent** → vendor a `.wasm` into `src/extraction/wasm/` (like `pascal` /
`scala` / `lua`) and add the token to the vendored branch in Step 4.
**Always health-check before writing an extractor — a *present* grammar can
still be unusable:**
```bash
node scripts/add-lang/check-grammar.mjs <lang> path/to/valid-sample.<ext>
```
It prints the grammar's ABI version and parses a valid sample many times in a
multi-grammar runtime. If it **FAILs** (ERROR trees on valid code — an old ABI
corrupting the shared WASM heap, which silently drops nested calls/imports on
every file after the first; e.g. the tree-sitter-wasms **Lua** grammar is ABI 13
and fails), do NOT use that wasm. **Vendor a newer (ABI 14/15) build instead:**
```bash
npm pack @tree-sitter-grammars/tree-sitter-<lang> # often ships a prebuilt *.wasm
# or build one: npx tree-sitter build --wasm (needs Docker/emscripten)
cp <the>.wasm src/extraction/wasm/tree-sitter-<lang>.wasm
```
then add the token to the vendored branch in Step 4 and re-run check-grammar on
the vendored path until it PASSes. **If you cannot obtain a healthy wasm, STOP
and tell the user.**
### Step 3 — Discover AST node types
Get a representative source file (write a small sample covering functions,
classes/structs, imports, enums; or `curl` a raw file from a known repo), then:
```bash
node scripts/add-lang/dump-ast.mjs <lang> path/to/sample.<ext>
# vendored grammar: pass the wasm path instead of the token
node scripts/add-lang/dump-ast.mjs src/extraction/wasm/tree-sitter-<lang>.wasm sample.<ext>
```
The frequency table + field names (`name:`, `parameters:`, `body:`,
`return_type:`) tell you what to map. Open the existing extractor closest to the
language's paradigm as a model: `rust.ts`/`scala.ts` (functional, traits),
`java.ts`/`csharp.ts` (OO), `python.ts`/`ruby.ts` (scripting), `go.ts`
(top-level methods + receivers).
### Step 4 — Wire the language (4 files)
These are exact, fragile wiring — match the existing style precisely:
1. **`src/types.ts`** — TWO edits:
- add `'<lang>',` to the `LANGUAGES` const (before `'unknown'`);
- add `'**/*.<ext>',` to `DEFAULT_CONFIG.include`. **Don't skip this** — it's
the file-scan allowlist; without the glob, `codegraph init` finds **0
files** even though detection/extraction are wired.
2. **`src/extraction/grammars.ts`** — three maps:
- `WASM_GRAMMAR_FILES`: `<lang>: 'tree-sitter-<lang>.wasm',`
- `EXTENSION_MAP`: each file extension → `'<lang>'` (e.g. `'.lua': 'lua',`)
- `getLanguageDisplayName`: `<lang>: '<Display Name>',`
- **vendored only**: add `<lang>` to the
`(lang === 'pascal' || lang === 'scala' || …)` wasm-path branch.
3. **`src/extraction/languages/<lang>.ts`** — new file exporting
`export const <lang>Extractor: LanguageExtractor = { … }`. Map the node types
from Step 3. Required fields: `functionTypes`, `classTypes`, `methodTypes`,
`interfaceTypes`, `structTypes`, `enumTypes`, `typeAliasTypes`,
`importTypes`, `callTypes`, `variableTypes`, `nameField`, `bodyField`,
`paramsField`. Add hooks as the grammar needs them (`getSignature`,
`getVisibility`, `isExported`, `extractImport`, `visitNode`, `getReceiverType`,
`interfaceKind`, `enumMemberTypes`, etc. — see
`src/extraction/tree-sitter-types.ts`).
4. **`src/extraction/languages/index.ts`** — `import { <lang>Extractor } from
'./<lang>';` and add `<lang>: <lang>Extractor,` to `EXTRACTORS`.
**Sometimes a 5th, core touch in `src/extraction/tree-sitter.ts`** — variable
extraction has per-language branches in `extractVariable` (the generic fallback
only finds direct `identifier`/`variable_declarator` children). If the grammar
nests declared names (e.g. Lua's `variable_declaration → variable_list`), add a
`} else if (this.language === '<lang>')` branch there, mirroring the existing
ts/python/go ones. Import forms that aren't a distinct node (Lua/Ruby `require`
is a *call*) are handled in the extractor's `visitNode` hook instead.
### Step 5 — Build + verify loop
```bash
npm run build # tsc + copy-assets (copies any vendored *.wasm into dist/)
```
Index a small sample repo and check extraction:
```bash
( cd <sample-repo> && codegraph init -i )
node scripts/add-lang/verify-extraction.mjs <sample-repo> <lang>
```
`verify-extraction.mjs` fails (exit 1) if the language isn't detected or only
`file`/`import` nodes were produced — the classic symptom of wrong node-type
names. On FAIL or a thin WARN: re-run `dump-ast.mjs` on a richer file, fix the
mappings in `<lang>.ts`, `npm run build`, re-index, re-verify. **Repeat until
PASS.**
### Step 6 — Tests
Add to `__tests__/extraction.test.ts`, modeled on the `Rust Extraction` block:
- a `detectLanguage` assertion in `describe('Language Detection')`
- a `describe('<Lang> Extraction')` block asserting functions/classes/imports
are extracted from an inline source string.
```bash
npx vitest run __tests__/extraction.test.ts
```
Green before continuing.
### Step 7 — Auto-pick 3 repos + corpus
Pick **without asking**. Find candidates, then curate 3 that are genuinely
`<lang>`-dominant, one per size tier:
```bash
gh search repos --language=<lang> --sort=stars --limit 40 \
--json fullName,stargazerCount,description
```
Tiers (match `corpus.json`): **Small** <~150 files · **Medium** ~1501500 ·
**Large** >~1500. Skip repos that are tagged `<lang>` but mostly another
language. Write one cross-file architecture **question** per repo (the kind that
needs tracing across files). Add a `"<Language>"` block to
`.claude/skills/agent-eval/corpus.json` (fields: `name`, `repo`, `size`,
`files`, `question`) so `/agent-eval` can reuse them.
### Step 8 — Benchmark all 3 (extraction + A/B)
Make the dev build the codegraph on PATH **once**, then loop:
```bash
npm run build && ./scripts/local-install.sh
scripts/add-lang/bench.sh <lang> <name> <url> "<question>" headless # ×3
```
`bench.sh` clones (shared `/tmp/codegraph-corpus`), wipes + indexes, runs
`verify-extraction.mjs`, then the with/without retrieval A/B via
`scripts/agent-eval/run-all.sh` (skips the paid A/B if extraction is broken).
Read each `parse-run.mjs` summary printed by `run-all.sh`: tool calls, file
`Read`s, Grep/Bash, codegraph-tool calls, duration, and **cost** — for both the
`with` and `without` arms. After the loop, restore the dev link if needed:
`./scripts/local-install.sh`.
### Step 9 — Docs + CHANGELOG
- **README.md**: add `<Lang>` to the "19+ Languages" feature bullet, and add a
row to the **Supported Languages** table:
`| <Lang> | \`.ext\` | Full support (classes, methods, …) |`.
- **CHANGELOG.md**: add an `## [Unreleased]` section at the top (above the
latest version) with `### Added` → a user-perspective bullet, e.g.
*"CodeGraph now indexes **<Lang>** (`.ext`) — functions, classes, imports, and
call edges."* If `## [Unreleased]` already exists, append under it. (It's
folded into the next versioned block at release time.)
### Step 10 — Report (do NOT commit)
Summarize for review:
- **Files changed**: the 4 wiring edits + new extractor + tests + README +
CHANGELOG + corpus.json (+ any vendored `.wasm`).
- **Extraction** per repo: files / nodes / edges / `verify-extraction` result.
- **A/B** per repo: `with` vs `without` (tool calls, file Reads, cost) and a
one-line verdict — did codegraph reduce effort, and did both arms reach a
correct answer?
- **Gaps / follow-ups** (node types not yet mapped, resolution edges missing,
framework routes, etc.).
Hand the changes to the user. **Do not** run `git commit`/`push` or publish —
releases go through the GitHub Actions Release workflow.
## Notes
- The A/B spawns real **paid** `claude -p` runs (opus, `--max-budget-usd`),
2 arms × 3 repos. The corpus dir `/tmp/codegraph-corpus` is shared with
`/agent-eval`, so clones are reused across runs.
- Any new `*.wasm` must live in `src/extraction/wasm/` — `copy-assets` (run by
`npm run build`) ships it; otherwise it won't be in `dist/`.
- An index must be served by the **same** binary that built it. Step 8 builds +
links the dev build first, so this holds.
- If a grammar can't be obtained, or extraction can't reach PASS, **STOP and
report** — don't ship a half-wired language.
+74
View File
@@ -0,0 +1,74 @@
---
name: agent-eval
description: Benchmark CodeGraph retrieval quality on a real codebase by comparing agent behavior with vs without CodeGraph. Use when the user runs /agent-eval or asks to test, benchmark, audit, or validate a codegraph version (the local dev build or a published npm version) against a language's repo.
---
# CodeGraph Quality Audit
Measures how much CodeGraph helps an agent versus plain grep/read, for a chosen
codegraph version on a chosen real-world repo. Drives the harness in
`scripts/agent-eval/`.
## Prerequisites
- `tmux` 3+, a logged-in `claude` CLI, `node`, `git` (macOS/Linux).
- Run from the codegraph repo root.
## Workflow
Copy this checklist:
```
- [ ] 1. Pick version (local or npm)
- [ ] 2. Pick language
- [ ] 3. Pick repo by size
- [ ] 4. Pick harness (headless / tmux / both)
- [ ] 5. Run audit.sh in the background
- [ ] 6. Report results
```
**Step 1 — version.** Ask with `AskUserQuestion`: which codegraph version to test.
Offer "Local dev build" and "Latest published"; the free-text "Other" lets the
user type a specific version (e.g. `0.7.10`). Map the answer to a VERSION token:
- "Local dev build" → `local`
- "Latest published" → `latest`
- a typed version → that string (e.g. `0.7.10`)
**Step 2 — language.** Read `.claude/skills/agent-eval/corpus.json`. Ask with
`AskUserQuestion` which language to test, listing the languages that have entries.
**Step 3 — repo.** From the chosen language's entries, ask which repo. Label each
option with its size and file count, e.g. `excalidraw — Medium (~600 files)`.
Each entry carries the `repo` URL and a representative `question`.
**Step 4 — harness.** Ask with `AskUserQuestion` which harness to run, and map
the answer to a MODE token:
- "Headless" → `headless``claude -p` with stream-json: exact tokens/cost and a
clean tool sequence (2 runs, fast, no TTY).
- "Interactive (tmux)" → `tmux` — drives the real Claude TUI in tmux: faithful
Explore-subagent behavior, metrics from session logs (2 runs, slower).
- "Both" → `all` — headless + interactive (4 runs).
**Step 5 — run.** Launch in the background (sets the version, clones if missing,
wipes + re-indexes, runs the chosen arms — several minutes):
```bash
scripts/agent-eval/audit.sh <VERSION> <repo-name> <repo-url> "<question>" <MODE>
```
**Step 6 — report.** When the job finishes, read the log and report per arm:
- Headless (`parse-run.mjs`): total tool calls, file `Read`s, Grep/Bash,
codegraph-tool calls, duration, **total cost**.
- Interactive (`parse-session.mjs`): the `VERDICT: codegraph_explore used Nx |
Read N | Grep/Bash N` and `TOKENS:` lines.
Lead with cost + tool/Read counts — they are the reliable signals; raw token
in/out are confounded by subagent delegation and prompt caching. State whether
codegraph reduced effort and whether both arms reached a correct answer.
## Notes
- The index is rebuilt every run (`audit.sh` wipes `.codegraph`) — different
versions extract differently, so an index must be served by the same binary
that built it.
- `audit.sh` temporarily mutates the global `codegraph` install for the test,
then restores your dev link via `local-install.sh`.
- Corpus repos are cloned to `/tmp/codegraph-corpus` (reused if already present).
- Add or edit repos in `corpus.json` (fields: `name`, `repo`, `size`, `files`,
`question`).
+611
View File
@@ -0,0 +1,611 @@
{
"_comment": "Test corpus for /agent-eval. Add entries freely. size: Small (<~150 files), Medium (~150-1500), Large (>~1500). 'question' is a representative architectural question that exercises cross-file understanding.",
"TypeScript": [
{
"name": "ky",
"repo": "https://github.com/sindresorhus/ky",
"size": "Small",
"files": "~25",
"question": "How does ky implement request retries and timeouts?"
},
{
"name": "excalidraw",
"repo": "https://github.com/excalidraw/excalidraw",
"size": "Medium",
"files": "~600",
"question": "How does Excalidraw render and update canvas elements?"
},
{
"name": "vscode",
"repo": "https://github.com/microsoft/vscode",
"size": "Large",
"files": "~10000",
"question": "How does the extension host communicate with the main process?"
}
],
"JavaScript": [
{
"name": "express",
"repo": "https://github.com/expressjs/express",
"size": "Small",
"files": "~50",
"question": "How does Express route a request through its middleware stack?"
}
],
"Go": [
{
"name": "cobra",
"repo": "https://github.com/spf13/cobra",
"size": "Small",
"files": "~50",
"question": "How does cobra parse commands and flags?"
},
{
"name": "gin",
"repo": "https://github.com/gin-gonic/gin",
"size": "Medium",
"files": "~150",
"question": "How does gin route requests through its middleware chain?"
},
{
"name": "terraform",
"repo": "https://github.com/hashicorp/terraform",
"size": "Large",
"files": "~4000",
"question": "How does Terraform build and walk the resource dependency graph?"
},
{
"name": "cosmos-sdk",
"repo": "https://github.com/cosmos/cosmos-sdk",
"size": "Large",
"files": "~5000",
"question": "How does a bank module MsgSend message reach the account balance update? Trace the cross-module call path from the bank keeper's Send handler through to the account/balance store update."
}
],
"Python": [
{
"name": "click",
"repo": "https://github.com/pallets/click",
"size": "Small",
"files": "~60",
"question": "How does click parse command-line arguments into commands?"
},
{
"name": "flask",
"repo": "https://github.com/pallets/flask",
"size": "Medium",
"files": "~90",
"question": "How does Flask dispatch a request to a view function?"
},
{
"name": "django",
"repo": "https://github.com/django/django",
"size": "Large",
"files": "~2700",
"question": "How does Django's ORM build and execute a query from a QuerySet?"
}
],
"Rust": [
{
"name": "clap",
"repo": "https://github.com/clap-rs/clap",
"size": "Medium",
"files": "~200",
"question": "How does clap parse arguments against a derived command definition?"
},
{
"name": "tokio",
"repo": "https://github.com/tokio-rs/tokio",
"size": "Large",
"files": "~700",
"question": "How does tokio schedule and run async tasks on its runtime?"
},
{
"name": "deno",
"repo": "https://github.com/denoland/deno",
"size": "Large",
"files": "~1500",
"question": "How does Deno load and execute a TypeScript module?"
}
],
"Java": [
{
"name": "gson",
"repo": "https://github.com/google/gson",
"size": "Medium",
"files": "~200",
"question": "How does Gson serialize an object to JSON?"
},
{
"name": "okhttp",
"repo": "https://github.com/square/okhttp",
"size": "Medium",
"files": "~640",
"question": "How does OkHttp process a request through its interceptor chain?"
},
{
"name": "guava",
"repo": "https://github.com/google/guava",
"size": "Large",
"files": "~3000",
"question": "How does Guava's CacheBuilder build and configure a cache?"
}
],
"Kotlin": [
{
"name": "koin",
"repo": "https://github.com/InsertKoinIO/koin",
"size": "Medium",
"files": "~300",
"question": "How does Koin resolve and inject dependencies?"
},
{
"name": "leakcanary",
"repo": "https://github.com/square/leakcanary",
"size": "Medium",
"files": "~250",
"question": "How does LeakCanary detect and analyze a memory leak?"
}
],
"Swift": [
{
"name": "alamofire",
"repo": "https://github.com/Alamofire/Alamofire",
"size": "Small",
"files": "~100",
"question": "How does Alamofire build, send, and validate a request?"
}
],
"C#": [
{
"name": "serilog",
"repo": "https://github.com/serilog/serilog",
"size": "Medium",
"files": "~250",
"question": "How does Serilog route a log event to its sinks?"
},
{
"name": "jellyfin",
"repo": "https://github.com/jellyfin/jellyfin",
"size": "Large",
"files": "~2500",
"question": "How does Jellyfin scan and identify items in a media library?"
}
],
"Ruby": [
{
"name": "sinatra",
"repo": "https://github.com/sinatra/sinatra",
"size": "Small",
"files": "~60",
"question": "How does Sinatra match a request to a route handler?"
},
{
"name": "discourse",
"repo": "https://github.com/discourse/discourse",
"size": "Large",
"files": "~3000",
"question": "How does Discourse create and render a new post?"
}
],
"PHP": [
{
"name": "slim",
"repo": "https://github.com/slimphp/Slim",
"size": "Small",
"files": "~80",
"question": "How does Slim handle a request through its middleware?"
},
{
"name": "laravel",
"repo": "https://github.com/laravel/framework",
"size": "Large",
"files": "~3000",
"question": "How does Laravel resolve and dispatch a route to a controller?"
}
],
"C": [
{
"name": "redis",
"repo": "https://github.com/redis/redis",
"size": "Large",
"files": "~600",
"question": "How does Redis parse and dispatch a client command?"
}
],
"C++": [
{
"name": "json",
"repo": "https://github.com/nlohmann/json",
"size": "Small",
"files": "~100",
"question": "How does nlohmann::json parse a JSON string into a value?"
},
{
"name": "grpc",
"repo": "https://github.com/grpc/grpc",
"size": "Large",
"files": "~3000",
"question": "How does gRPC dispatch an incoming RPC to its handler?"
}
],
"Dart": [
{
"name": "flutter",
"repo": "https://github.com/flutter/flutter",
"size": "Large",
"files": "~6000",
"question": "How does Flutter build and lay out a widget tree?"
}
],
"Svelte": [
{
"name": "shadcn-svelte",
"repo": "https://github.com/huntabyte/shadcn-svelte",
"size": "Medium",
"files": "~600",
"question": "How do shadcn-svelte components compose and apply their styling?"
}
],
"Lua": [
{
"name": "lualine.nvim",
"repo": "https://github.com/nvim-lualine/lualine.nvim",
"size": "Small",
"files": "~120",
"question": "How does lualine assemble and render its statusline sections and components?"
},
{
"name": "telescope.nvim",
"repo": "https://github.com/nvim-telescope/telescope.nvim",
"size": "Medium",
"files": "~80",
"question": "How does Telescope wire a picker to its finder, sorter, and previewer?"
},
{
"name": "kong",
"repo": "https://github.com/Kong/kong",
"size": "Large",
"files": "~1330",
"question": "How does Kong execute plugins across a request's lifecycle phases?"
}
],
"Luau": [
{
"name": "Knit",
"repo": "https://github.com/Sleitnick/Knit",
"size": "Small",
"files": "~10",
"question": "How does Knit register services and expose them to clients?"
},
{
"name": "vide",
"repo": "https://github.com/centau/vide",
"size": "Small",
"files": "~40",
"question": "How does vide track reactive sources and re-run effects when state changes?"
},
{
"name": "Fusion",
"repo": "https://github.com/dphfox/Fusion",
"size": "Medium",
"files": "~115",
"question": "How does Fusion build and update its reactive UI graph from state objects?"
}
],
"Objective-C": [
{
"name": "Masonry",
"repo": "https://github.com/SnapKit/Masonry",
"size": "Small",
"files": "~50",
"question": "How does Masonry build and activate Auto Layout constraints from its block DSL?"
},
{
"name": "FMDB",
"repo": "https://github.com/ccgus/fmdb",
"size": "Medium",
"files": "~80",
"question": "How does FMDB execute a prepared SQL statement and bind parameters?"
},
{
"name": "SDWebImage",
"repo": "https://github.com/SDWebImage/SDWebImage",
"size": "Large",
"files": "~400",
"question": "How does SDWebImage download, cache, and decode an image for a UIImageView?"
}
],
"Mixed iOS (Swift+ObjC)": [
{
"name": "Charts",
"repo": "https://github.com/danielgindi/Charts",
"size": "Small",
"files": "~270",
"question": "How does the ChartsDemo ObjC demo controller drive the Swift Charts library to animate and notify a data update?"
},
{
"name": "realm-swift",
"repo": "https://github.com/realm/realm-swift",
"size": "Medium",
"files": "~370",
"question": "How does a Swift `Realm.write { realm.add(obj) }` reach the Objective-C persistence layer?"
},
{
"name": "wikipedia-ios",
"repo": "https://github.com/wikimedia/wikipedia-ios",
"size": "Large",
"files": "~1700",
"question": "How does tapping a search result reach the article-fetch network call across the Swift / ObjC boundary?"
}
],
"React Native (legacy bridge + TurboModule)": [
{
"name": "@react-native-async-storage",
"repo": "https://github.com/react-native-async-storage/async-storage",
"size": "Small",
"files": "~60",
"question": "How does `setItem` in JS reach the native `legacy_multiSet` implementation?"
},
{
"name": "react-native-svg",
"repo": "https://github.com/software-mansion/react-native-svg",
"size": "Medium",
"files": "~700",
"question": "How does a JS `Svg.getTotalLength(...)` reach the iOS / Android native implementation via TurboModule?"
},
{
"name": "react-native-firebase",
"repo": "https://github.com/invertase/react-native-firebase",
"size": "Large",
"files": "~1100",
"question": "How does a native iOS push notification reach the JS `messaging().onMessage(...)` listener?"
}
],
"Expo Modules": [
{
"name": "expo-haptics",
"repo": "https://github.com/expo/expo/tree/main/packages/expo-haptics",
"size": "Small",
"files": "~15",
"question": "How does `Haptics.notificationAsync(...)` in JS reach `UINotificationFeedbackGenerator` in the Swift Module?"
},
{
"name": "expo-camera",
"repo": "https://github.com/expo/expo/tree/main/packages/expo-camera",
"size": "Medium",
"files": "~70",
"question": "How does a JS `CameraView.takePictureAsync(options)` reach the native AVCaptureSession / CameraDevice call?"
}
],
"React Native Fabric (view components)": [
{
"name": "react-native-segmented-control",
"repo": "https://github.com/react-native-segmented-control/segmented-control",
"size": "Small",
"files": "~25",
"question": "How does JSX `<SegmentedControl onChange={cb}/>` reach the native onChange handler on iOS/Android?"
},
{
"name": "react-native-screens",
"repo": "https://github.com/software-mansion/react-native-screens",
"size": "Medium",
"files": "~1200",
"question": "How does JSX `<ScreenStack>` reach the native RNSScreenStackView component?"
},
{
"name": "react-native-skia",
"repo": "https://github.com/Shopify/react-native-skia",
"size": "Large",
"files": "~1000",
"question": "How does a `<SkiaPictureView/>` JSX usage reach the iOS / Android native renderer?"
}
],
"R": [
{
"name": "AnomalyDetection",
"repo": "https://github.com/twitter/AnomalyDetection",
"size": "Small",
"files": "~24",
"question": "How does AnomalyDetectionTs go from the exported entry function to the underlying S-H-ESD statistical test? Name the functions on the path in order."
},
{
"name": "dplyr",
"repo": "https://github.com/tidyverse/dplyr",
"size": "Medium",
"files": "~450",
"question": "When mutate() is called on a grouped data frame, which functions handle the grouping and expression evaluation, in order, from mutate() down?"
},
{
"name": "ggplot2",
"repo": "https://github.com/tidyverse/ggplot2",
"size": "Large",
"files": "~1150",
"question": "When a ggplot object is printed, how does the plot actually get built and drawn — trace the path from print/plot to where geoms render. Name the key functions in order."
}
],
"COBOL": [
{
"name": "cics-genapp",
"repo": "https://github.com/cicsdev/cics-genapp",
"size": "Small",
"files": "~60",
"question": "When a new insurance policy is added through the LGTESTP1 CICS test harness, which programs handle the request on the way to the DB2 insert? Trace the path and name the programs in order."
},
{
"name": "carddemo",
"repo": "https://github.com/aws-samples/aws-mainframe-modernization-carddemo",
"size": "Medium",
"files": "~75",
"question": "How does the online bill-payment flow work — from the COBIL00C screen program to the transaction record being written? Name the paragraphs performed in order and the copybooks that define the records involved."
},
{
"name": "CobolCraft",
"repo": "https://github.com/meyfa/CobolCraft",
"size": "Medium",
"files": "~270",
"question": "How does an incoming player chat message travel from packet handling to being broadcast to the other connected players? Name the programs on the path in order."
}
],
"VB.NET": [
{
"name": "policyplus",
"repo": "https://github.com/Fleex255/PolicyPlus",
"size": "Small",
"files": "~94",
"question": "When the user toggles a policy to Enabled in the policy-setting editor and clicks OK, how does the new state end up written into the loaded policy source (POL file or registry)? Trace the path from the EditSetting dialog to the concrete write."
},
{
"name": "scrawler",
"repo": "https://github.com/AAndyProgram/SCrawler",
"size": "Medium",
"files": "~320",
"question": "When a user download is started for a Reddit user, how does the request flow from the user-level download entry point through the shared downloader base into the Reddit site plugin, and where do downloaded media items get appended to the user's content list?"
},
{
"name": "staxrip",
"repo": "https://github.com/staxrip/staxrip",
"size": "Medium",
"files": "~145",
"question": "When a job finishes video encoding, how does staxrip decide which muxer runs and how does the muxer command line get built and executed? Trace from job processing to the mkvmerge invocation."
}
],
"Erlang": [
{
"name": "cowboy",
"repo": "https://github.com/ninenines/cowboy",
"size": "Small",
"files": "~190",
"question": "How does an incoming HTTP request travel from cowboy's connection process to a user-defined handler's init/2 callback? Trace the path through the stream handler and middleware chain."
},
{
"name": "ejabberd",
"repo": "https://github.com/processone/ejabberd",
"size": "Medium",
"files": "~410",
"question": "When a client sends a chat message, how does the stanza get from the receiving C2S process to the recipient's session on the same node? Trace the path through the router and session manager."
},
{
"name": "emqx",
"repo": "https://github.com/emqx/emqx",
"size": "Large",
"files": "~2450",
"question": "How does a PUBLISH packet from an MQTT client reach the sessions of matching subscribers? Trace the flow from the connection/channel layer through the broker's routing to session delivery."
}
],
"Solidity": [
{
"name": "solmate",
"repo": "https://github.com/transmissions11/solmate",
"size": "Small",
"files": "~60",
"question": "How does solmate's ERC20 transferFrom enforce allowance and update balances? Trace the flow including the permit() signature path."
},
{
"name": "solady",
"repo": "https://github.com/Vectorized/solady",
"size": "Medium",
"files": "~270",
"question": "How does solady's ERC20 implementation handle a permit() call — from signature recovery through nonce update to allowance write?"
},
{
"name": "openzeppelin-contracts",
"repo": "https://github.com/OpenZeppelin/openzeppelin-contracts",
"size": "Large",
"files": "~400",
"question": "How does an OpenZeppelin AccessControl-protected function check the caller's role? Trace from the onlyRole modifier through hasRole to the role storage."
}
],
"CUDA": [
{
"name": "llm.c",
"repo": "https://github.com/karpathy/llm.c",
"size": "Small",
"files": "~76",
"question": "How does the attention forward pass reach the GPU in the CUDA training path? Trace from attention_forward to the kernels it launches, and explain where softmax happens."
},
{
"name": "flash-attention",
"repo": "https://github.com/Dao-AILab/flash-attention",
"size": "Medium",
"files": "~900",
"question": "How does a Python call to flash_attn_func reach the CUDA kernel that computes forward attention? Trace the dispatch path from the Python API through the C++ binding to the kernel launch."
},
{
"name": "cutlass",
"repo": "https://github.com/NVIDIA/cutlass",
"size": "Large",
"files": "~2700",
"question": "When a cutlass device-level GEMM (cutlass::gemm::device::Gemm) is invoked, how does it reach the GPU kernel? Trace from the operator() call to the kernel entry point and its launch site."
}
],
"Terraform": [
{
"name": "terraform-aws-vpc",
"repo": "https://github.com/terraform-aws-modules/terraform-aws-vpc",
"size": "Small",
"files": "~77",
"question": "How does the private_subnets variable shape the NAT gateway setup? Trace from the variable through the subnet and NAT gateway resources to the outputs that expose the private subnets."
},
{
"name": "cloud-foundation-fabric",
"repo": "https://github.com/GoogleCloudPlatform/cloud-foundation-fabric",
"size": "Medium",
"files": "~990",
"question": "In the project module (modules/project), how does the iam variable turn into actual IAM bindings on the project, and what depends on the module's project_id output elsewhere in the repo?"
},
{
"name": "terraform-aws-components",
"repo": "https://github.com/cloudposse/terraform-aws-components",
"size": "Large",
"files": "~1800",
"question": "In the eks/cluster component, how does the cluster IAM role get created and reach the EKS cluster resource, and which outputs expose cluster identity to other components?"
}
],
"ArkTS": [
{
"name": "HarmoneyOpenEye",
"repo": "https://github.com/WinWang/HarmoneyOpenEye",
"size": "Small",
"files": "~82",
"question": "How does the home page get its feed data from the network layer, and how does that data end up rendered as the list on screen? Trace the flow from the HTTP request through the view model into the home page UI."
},
{
"name": "CoolMallArkTS",
"repo": "https://github.com/Joker-x-dev/CoolMallArkTS",
"size": "Medium",
"files": "~528",
"question": "When the user adds a product to the cart from the goods detail page, how does the item travel from the UI action to persistent storage? Trace the flow across the feature and core modules."
},
{
"name": "applications_app_samples",
"repo": "https://github.com/openharmony/applications_app_samples",
"size": "Large",
"files": "~9500",
"question": "In the OrangeShopping sample app, how does the product detail page's bottom bar (add to cart / buy) lead to the order placement flow? Trace from the bottom navigation component to where the order is created."
}
],
"Nix": [
{
"name": "agenix",
"repo": "https://github.com/ryantm/agenix",
"size": "Small",
"files": "~13",
"question": "When a NixOS system activates, how does a secret declared under age.secrets get decrypted and installed at its runtime path? Trace the flow from the age.secrets option definition to the activation machinery that performs the decryption."
},
{
"name": "nix-darwin",
"repo": "https://github.com/nix-darwin/nix-darwin",
"size": "Medium",
"files": "~207",
"question": "How does setting services.yabai.enable = true become a running launchd service? Trace the flow from the yabai module's options to the launchd daemon definition that generates the plist."
},
{
"name": "home-manager",
"repo": "https://github.com/nix-community/home-manager",
"size": "Large",
"files": "~3390",
"question": "How does programs.git.enable produce the final git config file in the user's home directory? Trace the flow from the git program module to the home-files machinery that links generated files into place."
}
]
}