Frequently asked, fully answered.
Detailed answers with regulatory anchors. Click any section to deep-link. For the marketing summary, see the landing page FAQ.
On this page
Is FastCBAM really byte-deterministic?#
Yes. Five layers enforce it: rust_decimal arithmetic with no f64 in any numeric field; BTreeMap (lex-ordered) iteration for the §G recursive precursor chain; canonical JSON serialisation; SHA-256-pinned factor snapshots per reporting period; and cross-language WASM ↔ Rust byte-equivalence tested on every commit.
Concretely: same inputs always produce the same trace_id and the same content_sha256. Run the engine on your laptop, on the Vercel serverless layer, or inside an MCP host — outputs match bit-for-bit. The repo has 628 tests, including 5/5 WASM cross-language checks and 6/7 byte-equivalence checks against the IAI Scope 3 v2 reference workbook within ±0.001 kg CO₂eq.
Where does AI sit in the calculation path?#
It sits outside. The M25 calculation engine is pure Rust with zero AI dependencies and zero model calls. The boundary is enforced statically — cargo-deny bans LLM crates from the engine workspace, and CI fails if any AI environment variable appears on the engine host.
AI is confined to four assisting modules: M12/M15 (intake NLP), M60 (narrative generation), M65 (anomaly flagging), and M70 (advisory). None of them writes regulatory numbers. Every AI-proposed change to M20/M25/M40 follows the AI → human → code update gate, with three audit logs (AI Call Log, AI-Assisted Decision Log, AI Override Log) preserved in M65 for the full retention period required by the AI Act.
Which CBAM sectors are covered?#
All six Annex II categories, with the §G precursor chain validated end-to-end (SMR H₂ → DRI → EAF → ferroalloys → alloy steel):
- Cement (§3.3–§3.4) — clinker production with §B.9 default-EF + CKD, then clinker-to-cement roll-up.
- Hydrogen (§3.6) — SMR, electrolysis (route-aware), chlor-alkali co-product allocation.
- Fertilisers (§3.7–§3.10) — NH₃, HNO₃ (N₂O abatement-aware), urea (CO₂ uptake netting), NPK blends.
- Ferroalloys (§3.12) — FeSi, FeMn, SiMn, Si, FeCr, FeNi via IPCC §4.3 Tier 1/2 paths plus CH₄.
- Iron & steel (§3.13–§3.16) — DRI-EAF, crude steel, alloy-steel composition rollup.
- Aluminium (§3.17) — Hall-Héroult anode + PFC + §D electricity scope.
How many CN codes can you route?#
573 in-scope CN codes from the Commission's CBAM Self-Assessment Tool v1.1 (28 March 2025). They live as a tamper-detected JSON fixture (cbam_cn_codes_v1_1.json), SHA-256 pinned inside the FactorSnapshot.
The dispatcher resolves any CN code to its sector engine, canonical precursor list, and valid production routes. Spaces in CN codes are rejected — pass the 8-digit form (e.g. "25232900", not "2523 29 00").
Can I export to the CBAM Declarant Portal?#
Yes. The fastcbam-portal-export crate bundles XSD v23.00 plus sample exports as ground truth. Output passes the portal's schema validation (43 rules, 33 conditions, 9 warnings) and ships as a deterministic ZIP via the packaging module.
A weekly xsd-watch GitHub Action monitors the Commission's CBAM Registry page for new XSD/xlsx/sample artifacts and opens a labelled issue within ~7 days of publication — so you hear about a Definitive Period schema bump before your verifier does.
Will an accredited verifier accept the output?#
The engine emits a structured calculation trace per M65: every numeric field carries a trace_id tied to a specific equation, every input is anchored to its source row, every factor is identified by its snapshot SHA-256.
A verifier rerun on a fresh engine host produces a byte-identical trace — the trace_id stays invariant, only engine_artifact metadata changes between placeholder and release builds. Placeholder traces are watermarked and rejected; only signed release artifacts produce verifier-signable output.
How do tokens and top-ups work?#
A token is one engine call: one sector calculation, one CN lookup, one trace assembly. The dispatcher counts as one token regardless of how many precursors it walks.
- Developer (€0) — 500 tokens/month, test-mode (watermarked) traces.
- Starter (€49) — 10,000 tokens/month, verifier-signable. Top-ups: €19 / 5,000 tokens.
- Pro (€299) — 100,000 tokens/month, multi-installation. Top-ups: €99 / 50,000 tokens, 90-day rollover.
- Enterprise (custom) — volume tokens, dedicated capacity, annual commit discounts.
Top-up packs never expire on annual plans. Overages on monthly plans draw from your top-up balance first; if exhausted, requests return HTTP 402 with a clear error code so you can route around them.
Can I self-host the engine?#
On the Enterprise tier, yes. You get the signed Rust core (or the WASM bundle) plus the Postgres DDL for calc_trace_index and the blob-writer for JSONL traces. Run it in your own VPC, in an air-gapped enclave, or wherever your verifier expects to see the artifact.
Signature verification is mandatory: the deploy script pulls the signed artifact, verifies it against the published key, then runs. Any byte that doesn't match the SBOM-attached hash fails the launch.
Does it work with my AI agent?#
Yes — via the Model Context Protocol (spec 2025-11-25). The mcp-server exposes 23 tools (one per WASM export — sector engines, dispatcher, CN lookup, factor snapshot, trace builder, persistence helpers) plus 3 read-only resources (fastcbam://factor-snapshot/canonical, fastcbam://tools/catalogue, fastcbam://policy/standing).
Stdio transport means it drops into Claude Desktop, Continue, or any MCP host without an HTTP hop. The engine-policy resource enumerates the standing rules the LLM must observe — decimal arithmetic only, no LLM substitution, verifier rejection of placeholder traces. Numeric work happens inside the WASM engine, not in the model.
What about the Definitive Period (2026+)?#
v1 ships the CBAM_2026_TRANSITIONAL regime today. CBAM_2026_DEFINITIVE is a parameterised activation — a YAML config that swaps default factors and decision trees, not a code rewrite. M12B / M20 / M40 carry the Regime abstraction from v1, validated by a two-regime CI smoke test.
When the Commission's definitive implementing acts land, the engine picks up new factor tables behind the same API. The XSD watcher catches the portal-format bump in the same week; the schema-divergence regression suite flags any field-level breakage automatically.