The pack or the license file does not exist at the path given.
Fix the path. load_pack never falls back to the built-in pack.
UnsupportedPackDeclarationError at compile or load
The playbook declares something a compiled pack does not execute: your own codons or hard_rules, a rule type other than regex or luhn_checksum, an action other than block or redact, a rule without id, or an invalid pattern.
Read the listed problems; express the logic as supported rules. See Playbooks.
EnclaveCapabilityError from compile_custom_rule
The engine runs a sealed pack, whose rules are fixed. In the next release the method is removed and the call raises RemovedCapabilityError.
Add the rule to the playbook and compile again.
UnsupportedPackDeclarationError at compile, or PackDeclarationUnsealError at load: "actions does not declare …" (next release)
The playbook lists actions but leaves out an action the pack can return, often the built-in ones.
List every action named in the error, or omit actions, and compile again. See Playbook schema.
DecisionBudgetExceededError (next release)
A decision took longer than the pack's budget.max_latency_ms. The result is withheld.
Treat it as no decision. Raise the budget if it is tighter than your host can meet.
Two different inputs have the same receipt
Known issue in 0.2.1: compiled-pack receipts hash clean_text, which is the same for every input a block rule replaces whole. Fixed in the next release.
Several triggers, but the action names only one rule
Every match is reported; the first fatal match decides the action. By design.
Explain with action and reason; report everything found from triggers.
CodonRuntimeError from evaluate() on a dict
The dict has no text, message or payload key, or its value is not a string.
Pass a string, or put the text under one of those keys. See Evaluating decisions.
AmbiguousPayloadError from evaluate() on a dict (next release)
The dict has more than one key, so evaluating one field would leave the others unchecked.
Pass the text as a string, or a dict with exactly one of text, message, payload.
LicenseExpiredError from evaluate() on a running compiled pack
The license passed its grace period while the process was running.
Deploy a renewed license and packs recompiled for it.
A 16-digit number is not treated as a card
It fails the Luhn check.
Expected. Use a real test number such as 4111-1111-1111-1111.
CommunityEditionRestrictionError
compile_custom_rule on the Community tier.
Put the rule in a playbook and compile it with a Developer license. See Add custom rules.
DeveloperQuotaExceededError
Per-minute or lifetime limit reached on a strict Developer license. In 0.2.1 only the built-in example pack enforces the limits; in the next release compiled packs enforce them too.
Slow down, or move to a tier without limits.
Wall-clock time is much higher than latency_us
latency_us covers evaluation only. The first call in a process is also slower.
Measure end to end; warm the engine at startup with one clean evaluation.
Every defect documented for 0.2.1, and its status. "Fixed on main" means the fix is merged in the source and ships in the next runtime release; no release has been cut, so a 0.2.1 install still behaves as described on the page linked, and the workaround there still applies.
WebSocket stream continues after a blocked token (Services)
Yes
Fixed on main
A blocked value can stay in a compiled pack's clean_text (Playbook schema)
Yes
Fixed on main
A regex rule with capturing groups reports and redacts only the first group
Yes
Fixed on main
Compiled-pack receipts hash clean_text, so different inputs share a receipt (Receipts)
Yes
Fixed on main: one receipt recipe for both engines
compile_custom_rule() has no public engine it runs on, and does not redact its match
Yes
Fixed on main: removed, raises RemovedCapabilityError
evaluate(dict) evaluates one text field and ignores the rest (Evaluating decisions)
Yes
Fixed on main: a dict with more than one key raises AmbiguousPayloadError
Compiled packs accept actions, default_action and budget without enforcing them
Yes
Fixed on main
Compiled packs do not enforce the license's per-minute and lifetime decision limits
Yes
Fixed on main
Manifest merkle_root is a placeholder; the contact rule's factor names one field (Pack manifest)
Yes
Fixed on main
Package metadata does not match the code: distribution name and version
Yes
Fixed on main: helixor-runtime, version taken from __version__. Publishing to the public index is still Planned
Importing the runtime loads the GPU solver's libraries, about 0.9 s (Benchmarks)
Yes
Fixed on main: import measured at 107 to 109 ms
Cold start above the 100 ms target
Yes
Open: still above 100 ms on main
HelixorBeliefLedger has no snapshot or restore (Outcome memory)
Yes
Fixed on main: snapshot() and restore()
Generated Python and Java clients: caller-supplied action, one cause in the counterfactual, Java isApproved() false for clean payloads, placeholder proof (Java)
Yes
Fixed in the SDK generator. The client bundled with the runtime has not been regenerated, so it is still open there
/v1/decide: p_correct not calibrated, abstentions reported as answers, composed built on abstained questions, require.* and unknown questions ignored (Reasoning service)
Service builds before 2026-09-28
Fixed on main
Learning loop: a version whose disposition_bands keys are not alphabetical becomes unreadable after a restart (Learning loop)
Service builds before 2026-09-28
Fixed on main
Learning loop: built-in default golden cases and exception clause
Service builds before 2026-09-28
Fixed on main: both come from the pack or the request
Playbook turn response does not name the pack version that decided
Service builds before 2026-09-28
Fixed on main: pack_version, pack_digest, pack_source
Playbook turn takes tenant_id from the request body; outcomes and evolve not scoped to the tenant
Service builds before 2026-09-28
Fixed on main: tenant from your credentials, conflicting tenant refused with 403tenant_mismatch
Email hello@helixor.ai with the runtime version (helixor_runtime.__version__), Python version, the exception type and message, and the output of helixor-pack inspect-license (it shows no key material; remove the contact email line). Never include license files, packs or real payloads.