Swept the tyr dataset (planning-and-learning/planning-benchmarks-numeric, the suite tyr itself uses) with the translator, smallest instance per domain, 30 s budget each.
261 of 329 domains translated so far (sweep still running over ~470). One class already fixed in 11e5c26. The rest group into five.
What the dataset needs, and what we accept
The dataset ships repaired requirement declarations (strict_clean) plus committed requirements.*.json. Across all 468 domains exactly 11 requirements appear:
:strips :typing :negative-preconditions :action-costs :numeric-fluents
:equality :disjunctive-preconditions :existential-preconditions
:universal-preconditions :conditional-effects :derived-predicates
All 11 are in SUPPORTED_REQUIREMENTS. Nothing in the dataset is out of scope by declaration; :adl never appears because strict_clean expands it into its constituents.
1. Parameterised static cost functions — 19 domains
The largest class, and it is mainstream rather than exotic: elevators (4), agricola (2), data-network (2), cavediving, and more.
panicked at translate.rs:740:
cost expression PNE travel-slow(?f1, ?f2) of action (move-up-slow slow0-0 n2 n3)
has no numeric variable
The action is ground but its cost expression still carries ?f1, ?f2. The idiom is the standard one for IPC action costs:
(:functions (total-cost) - number (travel-slow ?f1 - count ?f2 - count) - number)
(:action move-up-slow :parameters (?lift ?f1 ?f2)
:effect (and ... (increase (total-cost) (travel-slow ?f1 ?f2))))
travel-slow is static: assigned in :init, never modified. Action::instantiate does pass var_mapping to the cost, and instantiate_expression substitutes and folds a static PNE with a known init value into a constant. So the substitution is written but something on this path is not applying it. Worth checking whether the cost reaching sas_operator_cost is the lifted one.
2. Condition atom with no SAS variable — 11 domains
caldera (4), caldera-split, folding (2), others.
panicked at translate.rs:354:
condition atom Atom { predicate: "prop_host", args: ["id_birat", "id_zhost"] }
has no SAS variable; it is neither reachable nor statically decided
The assertion is right to fire; the question is why an atom survives Condition::instantiate_action without being resolved either way.
3. settlers — 2 domains
panicked at translate.rs:283. Not examined.
4. either types — 1 domain
storage: Expected atom, got list: List([Atom("either"), Atom("storearea"), Atom("crate")]). PDDL's disjunctive type (either t1 t2) in a typed list is unsupported by the type parser. Fast Downward supports it.
5. pipesworld-tankage, schedule — 2 domains
panicked at parsing_functions.rs:703. Not examined.
6. Grounding blow-up — 31 timeouts
All 16 mine-pddl (Minecraft) domains plus large classical instances. Not a support gap: mine-pddl/Bridge_Easy reaches 30.7 M relevant atoms, 70.7 M auxiliary, 101 M queue entries and is still going after two minutes. The repository already excludes two Minecraft fixtures as too slow for test builds. Worth a separate issue about grounding scale rather than lumping with the correctness bugs above.
Fixed already
normalize.rs:964 (2 Minecraft domains) was a regression from the silent-skip sweep: the new assertion rejected a conjunction nested in a conjunction, which is harmless. Fixed in 11e5c26.
Suggested test
A test that translates one instance per domain from this dataset, skipped when the checkout is absent. Every bug in this list was invisible to the repository's own fixtures.
Swept the tyr dataset (
planning-and-learning/planning-benchmarks-numeric, the suitetyritself uses) with the translator, smallest instance per domain, 30 s budget each.261 of 329 domains translated so far (sweep still running over ~470). One class already fixed in
11e5c26. The rest group into five.What the dataset needs, and what we accept
The dataset ships repaired requirement declarations (
strict_clean) plus committedrequirements.*.json. Across all 468 domains exactly 11 requirements appear:All 11 are in
SUPPORTED_REQUIREMENTS. Nothing in the dataset is out of scope by declaration;:adlnever appears becausestrict_cleanexpands it into its constituents.1. Parameterised static cost functions — 19 domains
The largest class, and it is mainstream rather than exotic:
elevators(4),agricola(2),data-network(2),cavediving, and more.The action is ground but its cost expression still carries
?f1, ?f2. The idiom is the standard one for IPC action costs:travel-slowis static: assigned in:init, never modified.Action::instantiatedoes passvar_mappingto the cost, andinstantiate_expressionsubstitutes and folds a static PNE with a known init value into a constant. So the substitution is written but something on this path is not applying it. Worth checking whether the cost reachingsas_operator_costis the lifted one.2. Condition atom with no SAS variable — 11 domains
caldera(4),caldera-split,folding(2), others.The assertion is right to fire; the question is why an atom survives
Condition::instantiate_actionwithout being resolved either way.3.
settlers— 2 domainspanicked at translate.rs:283. Not examined.4.
eithertypes — 1 domainstorage:Expected atom, got list: List([Atom("either"), Atom("storearea"), Atom("crate")]). PDDL's disjunctive type(either t1 t2)in a typed list is unsupported by the type parser. Fast Downward supports it.5.
pipesworld-tankage,schedule— 2 domainspanicked at parsing_functions.rs:703. Not examined.6. Grounding blow-up — 31 timeouts
All 16
mine-pddl(Minecraft) domains plus large classical instances. Not a support gap:mine-pddl/Bridge_Easyreaches 30.7 M relevant atoms, 70.7 M auxiliary, 101 M queue entries and is still going after two minutes. The repository already excludes two Minecraft fixtures as too slow for test builds. Worth a separate issue about grounding scale rather than lumping with the correctness bugs above.Fixed already
normalize.rs:964(2 Minecraft domains) was a regression from the silent-skip sweep: the new assertion rejected a conjunction nested in a conjunction, which is harmless. Fixed in11e5c26.Suggested test
A test that translates one instance per domain from this dataset, skipped when the checkout is absent. Every bug in this list was invisible to the repository's own fixtures.