jit-overview
Technical overview of the facet-format JIT deserialization pipeline and its two-tier architecture.
Install
mkdir -p .claude/skills/jit-overview && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/4601" && unzip -o skill.zip -d .claude/skills/jit-overview && rm skill.zipInstalls to .claude/skills/jit-overview
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Orientation to facet-format JIT deserialization (tiering, fallbacks, key types/entry points) and where to look when changing or debugging JIT codeKey capabilities
- →Identifies correct entry points for JIT debugging and performance tuning
- →Distinguishes between Tier 1 shape-based and Tier 2 format-based compilation
- →Locates relevant memory-safety and crash-debugging notes
- →Maps format-neutral pipeline events to output memory offsets
How it works
It provides a navigational framework and mental model map to the codebase, guiding the user to specific modules and trait implementations.
Inputs & outputs
When to use jit-overview
- →Debug JIT deserialization crashes
- →Investigate deserialization performance
- →Understand JIT tiering patterns
About this skill
JIT deserialization overview (facet-format)
Facet’s JIT lives in facet-format and is used by format crates like facet-json.
When to read this
- You’re touching anything under
facet-format/src/jit/or enabling thejitfeature. - You’re investigating performance changes in deserialization (especially “tier2”/JIT benchmarks).
- You’re debugging a JIT crash (SIGSEGV/UB-ish symptoms).
Mental model
facet-format defines a format-neutral deserialization pipeline:
- A
FormatParser(implemented by each format crate) produces a stream ofParseEvents. - A shape-driven layer consumes those events and writes to an output value (often via
facet-reflect).
The JIT accelerates this by compiling deserialization code specialized for:
- the target type (
T/ itsShape), and sometimes - the format parser (
P).
Two-tier architecture (high level)
Tier 1 (shape JIT)
- Compiles code that consumes
ParseEvents and writes directly into the output’s memory at known offsets. - Works with any format that implements
FormatParser(JSON/YAML/TOML/…).
Tier 2 (format JIT)
- For the “entire input slice is available” case, a format crate can provide a
FormatJitParser+JitFormatimplementation. - Tier 2 emits Cranelift IR to parse bytes directly, bypassing the
ParseEventstream for maximum throughput.
Fallbacks are part of the design
- Tier 2 may return “unsupported” for shapes/input it can’t handle, and must be side-effect-free in that case.
- Callers typically try tier 2, then tier 1, then reflection.
Entry points & where to look
- Main docs and contracts:
facet-format/src/jit/mod.rs - JIT-enabled parser trait:
facet-format/src/parser.rs(FormatJitParser) - JIT usage in a format crate:
facet-json/Cargo.tomlfeaturejit = ["facet-format/jit"]- Example:
facet-json/examples/profile_jit_vec(requiresjit)
- Windows crash debugging notes:
.claude/skills/windbg-jit.md - Memory debugging:
.claude/skills/debug-with-valgrind/SKILL.md(uses nextest profiles)
Debugging checklist (practical)
- Reproduce with a minimal type + input (see
.claude/skills/reproduce-reduce-regress/SKILL.md). - Run the failing test under:
- valgrind:
cargo nextest run --profile valgrind …(configured in.config/nextest.toml) - or Miri when applicable (
just miri) for UB/provenance issues outside the JIT itself.
- valgrind:
- If the crash is in JIT codegen/execution:
- Prefer isolating the smallest shape that triggers tier selection and failure.
- Look for tier selection diagnostics and caching behavior in
facet-format/src/jit/mod.rs.
Common pitfalls
- Assuming tier 2 supports “all shapes”: it intentionally supports a performance-focused subset.
- Forgetting that “unsupported” must not advance the parser cursor or partially initialize output.
- Introducing new unsafe paths without tests that exercise drop/cleanup on error paths.
When not to use it
- →For general JSON parsing tasks unrelated to the facet-format JIT
- →When the user is not actively developing on the JIT compiler
Limitations
- →Documentation is specific to the facet-format repository
- →Requires knowledge of the internal facet-format tiering architecture
How it compares
It provides domain-specific architectural context instead of generic debugging advice.
Compared to similar skills
jit-overview side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| jit-overview (this skill) | 2 | 7mo | No flags | Advanced |
| debug-lldb | 1 | 7mo | Review | Intermediate |
| m10-performance | 0 | 6mo | No flags | Advanced |
| rspack-sftrace | 1 | 5mo | Review | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by facet-rs
View all by facet-rs →You might also like
debug-lldb
regenrek
Capture and analyze thread backtraces with LLDB/GDB to debug hangs, deadlocks, UI freezes, IPC stalls, or high-CPU loops across any language or project. Use when an app becomes unresponsive, switching contexts stalls, or you need thread stacks to locate lock inversion or blocking calls.
m10-performance
actionbook
CRITICAL: Use for performance optimization. Triggers: performance, optimization, benchmark, profiling, flamegraph, criterion, slow, fast, allocation, cache, SIMD, make it faster, 性能优化, 基准测试
rspack-sftrace
web-infra-dev
Use sftrace, which is based on LLVM Xray instrumentation, to trace all Rust function calls. This can be used for performance analysis and troubleshooting.
rust-async-patterns
wshobson
Master Rust async programming with Tokio, async traits, error handling, and concurrent patterns. Use when building async Rust applications, implementing concurrent systems, or debugging async code.
memory-safety-patterns
sickn33
Implement memory-safe programming with RAII, ownership, smart pointers, and resource management across Rust, C++, and C. Use when writing safe systems code, managing resources, or preventing memory bugs.
debug-cli
antinomyhq
Use when users need to debug, modify, or extend the code-forge application's CLI commands, argument parsing, or CLI behavior. This includes adding new commands, fixing CLI bugs, updating command options, or troubleshooting CLI-related issues.