Home / FAQ

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

  1. Byte-determinism
  2. AI Act boundary
  3. Sector coverage
  4. CN code routing
  5. Portal export (XSD v23.00)
  6. Verifier acceptance
  7. Tokens, top-ups & billing
  8. Self-hosting
  9. MCP server & AI agents
  10. Definitive Period (2026+)

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.

[ADR-0001] [fastcbam-wasm/tests-js/smoke.mjs] [iai_scope3_byte_equivalence.rs]

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.

[AIAct:Art13] [ADR-AI-03] [AI_ACT_CONFORMITY.md]

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):

[CBAM:CELEX_32023R1773:Annex_II] [CBAM:CELEX_32023R1773:Annex_III] [IPCC19R:V3:Ch04]

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").

[CBAM:Self-Assessment_v1.1] [FactorSnapshot:SHA-256-pinned]

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.

[PORTAL:DECLARANT_V23.00] [scripts/xsd-watch]

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.

[ISO:14064-1] [ISO:14065] [fastcbam-trace]

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.

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.

[MCP:2025-11-25] [ADR-AI-03]

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.

[CBAM:DEFINITIVE_ACTS_PENDING] [ADR-0001]