Establish a repository-wide standard for solution extraction - #1119
Merged
Conversation
isPANN
marked this pull request as ready for review
August 6, 2026 14:35
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
This PR standardizes and hardens extract_solution() across the ruleset by introducing a shared target-configuration validator and stricter one-hot/permutation decoders, plus expanding tests/docs to enforce the new extraction contract.
Changes:
- Add
validate_target_solution()and call it from many direct extractors to reject wrong-length/out-of-domain configurations early. - Make one-hot decoders fallible (
one_hot_decode, newone_hot_decode_rows) and update extractors to reject malformed one-hot structure instead of defaulting. - Expand unit/CLI tests and documentation to codify the “fail-fast, no panics/defaulting” extraction contract.
Reviewed changes
Copilot reviewed 278 out of 278 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| src/unit_tests/rules/traits.rs | Adds a focused unit test for validate_target_solution() shape/domain failures. |
| src/unit_tests/rules/satisfiability_naesatisfiability.rs | Updates expected extraction error message to match new validator wording. |
| src/unit_tests/rules/sat_minimumdominatingset.rs | Tightens tests for dominating-set gadget decoding invariants and clause-vertex rejection. |
| src/unit_tests/rules/optimallineararrangement_consecutiveonesmatrixaugmentation.rs | Adds malformed empty-config assertions and aligns error message text. |
| src/unit_tests/rules/ksatisfiability_quadraticcongruences.rs | Adds a test ensuring extraction rejects missing sign information. |
| src/unit_tests/rules/ksatisfiability_acyclicpartition.rs | Adds a malformed empty-config rejection test for a nested extractor. |
| src/unit_tests/rules/ilp_helpers.rs | Updates one-hot decode tests for new Result API and adds negative-structure tests. |
| src/unit_tests/example_db.rs | Adds generic wrong-length and out-of-domain regression checks for every example rule extraction. |
| src/rules/undirectedtwocommodityintegralflow_ilp.rs | Adds validate_target_solution() guard before slicing target solutions. |
| src/rules/undirectedflowlowerbounds_ilp.rs | Adds validate_target_solution() guard before indexing/slicing. |
| src/rules/travelingsalesman_qubo.rs | Switches to one_hot_decode, validates solutions, and errors on absent edges in decoded tours. |
| src/rules/travelingsalesman_ilp.rs | Switches to one_hot_decode, validates solutions, and errors on absent edges in decoded tours. |
| src/rules/traits.rs | Introduces validate_target_solution() and applies it to autoconversion extraction. |
| src/rules/timetabledesign_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/threepartition_sequencingwithreleasetimesanddeadlines.rs | Adds precheck and replaces panic on Lehmer decode with ExtractionError. |
| src/rules/threepartition_resourceconstrainedscheduling.rs | Adds validate_target_solution() precheck. |
| src/rules/threedimensionalmatching_threepartition.rs | Adds validate_target_solution() precheck. |
| src/rules/threedimensionalmatching_threematroidintersection.rs | Adds validate_target_solution() precheck. |
| src/rules/threedimensionalmatching_minimumweightdecoding.rs | Replaces bespoke length check with validate_target_solution(). |
| src/rules/threedimensionalmatching_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/test_helpers.rs | Updates test helper extractors to validate target solutions. |
| src/rules/sumofsquarespartition_ilp.rs | Validates then decodes one-hot rows with one_hot_decode_rows. |
| src/rules/subsetsum_partition.rs | Adds validate_target_solution() precheck. |
| src/rules/subsetsum_integerexpressionmembership.rs | Adds validate_target_solution() precheck. |
| src/rules/subsetsum_closestvectorproblem.rs | Adds validate_target_solution() precheck. |
| src/rules/subgraphisomorphism_ilp.rs | Validates then decodes one-hot rows with one_hot_decode_rows. |
| src/rules/strongconnectivityaugmentation_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/stringtostringcorrection_ilp.rs | Adds validation and rejects multiple/no selected operations per edit step. |
| src/rules/steinertreeingraphs_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/steinertree_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/stackercrane_ilp.rs | Adds validation and propagates errors from one_hot_decode. |
| src/rules/spinglass_qubo.rs | Adds validation on both direction extractors. |
| src/rules/spinglass_maxcut.rs | Adds validation on both direction extractors. |
| src/rules/sparsematrixcompression_ilp.rs | Validates then decodes one-hot rows with one_hot_decode_rows. |
| src/rules/shortestweightconstrainedpath_ilp.rs | Adds validation then switches to direct indexing (no defaulting). |
| src/rules/shortestcommonsupersequence_ilp.rs | Validates then decodes one-hot rows with one_hot_decode_rows. |
| src/rules/setsplitting_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/setsplitting_betweenness.rs | Replaces asserts with validator + safe error handling. |
| src/rules/sequencingwithreleasetimesanddeadlines_ilp.rs | Validates then decodes one-hot starts and sorts schedule deterministically. |
| src/rules/sequencingwithinintervals_ilp.rs | Adds validation and rejects multiple/no selected start time per task. |
| src/rules/sequencingwithdeadlinesandsetuptimes_ilp.rs | Adds validation and propagates permutation decode errors. |
| src/rules/sequencingtominimizeweightedtardiness_ilp.rs | Adds validation and removes defaulting via get(...).unwrap_or(0). |
| src/rules/sequencingtominimizeweightedcompletiontime_ilp.rs | Adds validation and removes defaulting via get(...).unwrap_or(0). |
| src/rules/sequencingtominimizetardytaskweight_ilp.rs | Adds validation and propagates permutation decode errors. |
| src/rules/sequencingtominimizemaximumcumulativecost_ilp.rs | Adds validation and propagates permutation decode errors. |
| src/rules/schedulingwithindividualdeadlines_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/schedulingtominimizeweightedcompletiontime_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/satisfiability_nontautology.rs | Adds validate_target_solution() precheck. |
| src/rules/satisfiability_naesatisfiability.rs | Replaces bespoke checks with validate_target_solution() + simplified logic. |
| src/rules/satisfiability_maximum2satisfiability.rs | Adds validate_target_solution() precheck. |
| src/rules/satisfiability_integralflowhomologousarcs.rs | Adds validation and switches to direct indexing (no defaulting). |
| src/rules/sat_minimumdominatingset.rs | Adds validation and enforces exact-one gadget selection + clause-vertex rejection. |
| src/rules/sat_maximumindependentset.rs | Adds validate_target_solution() precheck. |
| src/rules/sat_ksat.rs | Adds validation in both directions. |
| src/rules/sat_coloring.rs | Adds validation and replaces panicking asserts with structured ExtractionErrors. |
| src/rules/sat_circuitsat.rs | Adds validate_target_solution() precheck. |
| src/rules/ruralpostman_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/rootedtreestorageassignment_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/rootedtreearrangement_rootedtreestorageassignment.rs | Adds validate_target_solution() precheck. |
| src/rules/resourceconstrainedscheduling_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/registersufficiency_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/rectilinearpicturecompression_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/qubo_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/quadraticassignment_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/prizecollectingsteinerforest_steinertree.rs | Adds validation and removes optional-index defaulting in edge extraction. |
| src/rules/preemptivescheduling_ilp.rs | Adds validation and removes truncation fallback in returned prefix. |
| src/rules/precedenceconstrainedscheduling_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/pathconstrainednetworkflow_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/partitionintotriangles_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/partitionintopathsoflength2_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/partitionintopathsoflength2_boundedcomponentspanningforest.rs | Adds validate_target_solution() precheck. |
| src/rules/partitionintocliques_minimumcoveringbycliques.rs | Adds validation and replaces panics with errors when labels are missing. |
| src/rules/partition_sumofsquarespartition.rs | Replaces bespoke length check with validate_target_solution(). |
| src/rules/partition_subsetsum.rs | Adds validate_target_solution() precheck. |
| src/rules/partition_sequencingtominimizetardytaskweight.rs | Adds validation; rejects duplicates; replaces overflow panics with ExtractionError. |
| src/rules/partition_productionplanning.rs | Adds validation and switches from saturating logic to strict slicing. |
| src/rules/partition_openshopscheduling.rs | Adds validation and replaces multiple panics with ExtractionErrors + checked arithmetic. |
| src/rules/partition_multiprocessorscheduling.rs | Adds validate_target_solution() precheck. |
| src/rules/partition_knapsack.rs | Adds validate_target_solution() precheck. |
| src/rules/partition_integralflowwithmultipliers.rs | Replaces “at least N” length check with validate_target_solution(). |
| src/rules/partition_cosineproductintegration.rs | Adds validate_target_solution() precheck. |
| src/rules/partition_binpacking.rs | Adds validate_target_solution() precheck. |
| src/rules/partiallyorderedknapsack_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/paintshop_qubo.rs | Adds validate_target_solution() precheck. |
| src/rules/paintshop_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/optimumcommunicationspanningtree_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/optimallineararrangement_sequencingtominimizeweightedcompletiontime.rs | Adds validation and replaces Lehmer decode panic with ExtractionError. |
| src/rules/optimallineararrangement_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/optimallineararrangement_consecutiveonesmatrixaugmentation.rs | Adds validation and simplifies permutation checks relying on validator for bounds/length. |
| src/rules/openshopscheduling_ilp.rs | Adds validation and removes defaulting on start-time access. |
| src/rules/numericalmatchingwithtargetsums_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/numerical3dimensionalmatching_numericalmatchingwithtargetsums.rs | Adds validation and replaces overflow/expect panics with ExtractionErrors. |
| src/rules/naesatisfiability_setsplitting.rs | Replaces asserts with validate_target_solution() + strict slicing. |
| src/rules/naesatisfiability_partitionintoperfectmatchings.rs | Adds validate_target_solution() precheck. |
| src/rules/naesatisfiability_maxcut.rs | Adds validate_target_solution() precheck. |
| src/rules/naesatisfiability_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/multiprocessorscheduling_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/multiplecopyfileallocation_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/monochromatictriangle_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/mod.rs | Re-exports validate_target_solution for crate-wide use. |
| src/rules/mixedchinesepostman_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minmaxmulticenter_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumweightdecoding_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumvertexcover_minimumweightandorgraph.rs | Adds validation and removes defaulting using get(). |
| src/rules/minimumvertexcover_minimumsetcovering.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumvertexcover_minimumhittingset.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumvertexcover_minimumfeedbackvertexset.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumvertexcover_minimumfeedbackarcset.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumvertexcover_maximumindependentset.rs | Adds validation in both directions. |
| src/rules/minimumvertexcover_longestcommonsubsequence.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumvertexcover_ensemblecomputation.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumvertexcover_comparativecontainment.rs | Adds validation and tightens iteration range. |
| src/rules/minimumtardinesssequencing_ilp.rs | Adds validation and propagates permutation decode errors. |
| src/rules/minimumsummulticenter_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumsetcovering_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minimummultiwaycut_qubo.rs | Adds validation and decodes one-hot rows via helper. |
| src/rules/minimummultiwaycut_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minimummetricdimension_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minimummaximalmatching_minimummatrixdomination.rs | Adds validation and replaces panics/unreachable with ExtractionErrors; removes helper that panicked. |
| src/rules/minimummaximalmatching_maximumachromaticnumber.rs | Adds validate_target_solution() precheck. |
| src/rules/minimummaximalmatching_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minimummatrixcover_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minimuminternalmacrodatacompression_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumhittingset_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumgraphbandwidth_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/minimumfeedbackvertexset_minimumcodegenerationunlimitedregisters.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumfeedbackvertexset_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumfeedbackarcset_maximumlikelihoodranking.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumfeedbackarcset_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumfaultdetectiontestset_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumexternalmacrodatacompression_ilp.rs | Adds validation and replaces fallback decoding with strict “exactly one” structure checks. |
| src/rules/minimumedgecostflow_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumdominatingset_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumdiscreteplanarinversekinematics_qubo.rs | Adds validation and rejects missing/multiple one-hot selections per link. |
| src/rules/minimumcutintoboundedsets_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumcoveringbycliques_minimumintersectiongraphbasis.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumcoveringbycliques_ilp.rs | Adds validation and rejects edges not covered instead of defaulting. |
| src/rules/minimumcostmaximumflow_minimumcostcirculation.rs | Adds validate_target_solution() precheck. |
| src/rules/minimumcapacitatedspanningtree_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/maximumsetpacking_qubo.rs | Adds validate_target_solution() precheck. |
| src/rules/maximumsetpacking_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/maximummatching_maximumsetpacking.rs | Adds validate_target_solution() precheck. |
| src/rules/maximummatching_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/maximumlikelihoodranking_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/maximumleafspanningtree_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/maximumindependentset_triangular.rs | Adds validate_target_solution() precheck. |
| src/rules/maximumindependentset_maximumsetpacking.rs | Adds validation in both directions. |
| src/rules/maximumindependentset_maximumclique.rs | Adds validate_target_solution() precheck. |
| src/rules/maximumindependentset_integralflowbundles.rs | Adds validation and removes defaulting when reading bits. |
| src/rules/maximumindependentset_gridgraph.rs | Adds validate_target_solution() precheck. |
| src/rules/maximumedgeweightedkclique_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/maximumdomaticnumber_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/maximumcontactmapoverlap_ilp.rs | Adds validation and rejects multi-mappings per residue. |
| src/rules/maximumcommonedgesubgraph_ilp.rs | Adds validation and rejects multi-mappings per vertex. |
| src/rules/maximumcokplex_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/maximumclique_maximumindependentset.rs | Adds validate_target_solution() precheck. |
| src/rules/maximumclique_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/maximum2satisfiability_maxcut.rs | Adds validate_target_solution() precheck. |
| src/rules/maximum2satisfiability_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/maximalis_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/maxcut_minimummatrixcover.rs | Adds validate_target_solution() precheck. |
| src/rules/maxcut_minimumcutintoboundedsets.rs | Adds validate_target_solution() precheck. |
| src/rules/longestpath_ilp.rs | Adds validation and removes defaulting index access. |
| src/rules/longestcommonsubsequence_maximumindependentset.rs | Adds validate_target_solution() precheck. |
| src/rules/longestcommonsubsequence_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/longestcircuit_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/lengthboundeddisjointpaths_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/ksatisfiability_timetabledesign.rs | Adds validate_target_solution() precheck. |
| src/rules/ksatisfiability_subsetsum.rs | Adds validate_target_solution() precheck. |
| src/rules/ksatisfiability_simultaneousincongruences.rs | Adds validation and removes empty-solution defaulting. |
| src/rules/ksatisfiability_registersufficiency.rs | Adds validation and rejects contradictory cutoff ordering instead of debug-asserting. |
| src/rules/ksatisfiability_qubo.rs | Adds validation in both directions. |
| src/rules/ksatisfiability_quadraticdiophantineequations.rs | Adds validate_target_solution() precheck. |
| src/rules/ksatisfiability_quadraticcongruences.rs | Adds validation and tightens sign decoding with explicit errors. |
| src/rules/ksatisfiability_preemptivescheduling.rs | Adds validate_target_solution() precheck. |
| src/rules/ksatisfiability_oneinthreesatisfiability.rs | Adds validate_target_solution() precheck. |
| src/rules/ksatisfiability_monochromatictriangle.rs | Adds validation and removes defaulting in edge-bit decoding. |
| src/rules/ksatisfiability_minimumvertexcover.rs | Adds validate_target_solution() precheck. |
| src/rules/ksatisfiability_kernel.rs | Adds validation and removes defaulting in bit reads. |
| src/rules/ksatisfiability_kclique.rs | Adds validate_target_solution() precheck. |
| src/rules/ksatisfiability_feasibleregisterassignment.rs | Adds validate_target_solution() precheck. |
| src/rules/ksatisfiability_directedtwocommodityintegralflow.rs | Adds validation and removes defaulting in arc reads. |
| src/rules/ksatisfiability_cyclicordering.rs | Adds validate_target_solution() precheck. |
| src/rules/ksatisfiability_bicliquecover.rs | Replaces bespoke checks with validate_target_solution(). |
| src/rules/ksatisfiability_acyclicpartition.rs | Adds validation and converts debug-assert to error; validates in composed extractor too. |
| src/rules/knapsack_qubo.rs | Adds validate_target_solution() precheck. |
| src/rules/knapsack_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/kcoloring_twodimensionalconsecutivesets.rs | Adds validate_target_solution() precheck. |
| src/rules/kcoloring_partitionintocliques.rs | Adds validate_target_solution() precheck. |
| src/rules/kcoloring_clustering.rs | Adds validation; removes truncation fallback. |
| src/rules/kcoloring_bicliquecover.rs | Adds validation and rejects uncovered diagonal gadgets / too many bicliques. |
| src/rules/kclique_subgraphisomorphism.rs | Adds validate_target_solution() precheck. |
| src/rules/kclique_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/kclique_conjunctivebooleanquery.rs | Adds validate_target_solution() precheck. |
| src/rules/kclique_balancedcompletebipartitesubgraph.rs | Adds validate_target_solution() precheck. |
| src/rules/isomorphicspanningtree_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/integralflowwithmultipliers_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/integralflowhomologousarcs_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/integralflowbundles_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/integerknapsack_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/ilp_qubo.rs | Adds validate_target_solution() precheck. |
| src/rules/ilp_i32_ilp_bool.rs | Adds validate_target_solution() precheck. |
| src/rules/ilp_helpers.rs | Makes one_hot_decode fallible and adds one_hot_decode_rows helper. |
| src/rules/ilp_bool_ilp_i32.rs | Adds validate_target_solution() precheck. |
| src/rules/highlyconnecteddeletion_ilp.rs | Replaces bespoke length check with validate_target_solution(). |
| src/rules/hamiltonianpathbetweentwovertices_longestpath.rs | Adds validate_target_solution() precheck. |
| src/rules/hamiltonianpath_isomorphicspanningtree.rs | Adds validate_target_solution() precheck. |
| src/rules/hamiltonianpath_ilp.rs | Adds validation and propagates errors from one_hot_decode. |
| src/rules/hamiltonianpath_degreeconstrainedspanningtree.rs | Adds validation and removes redundant edge-length check. |
| src/rules/hamiltoniancircuit_travelingsalesman.rs | Adds validate_target_solution() precheck. |
| src/rules/hamiltoniancircuit_strongconnectivityaugmentation.rs | Adds validate_target_solution() precheck. |
| src/rules/hamiltoniancircuit_stackercrane.rs | Adds validate_target_solution() precheck. |
| src/rules/hamiltoniancircuit_ruralpostman.rs | Adds validation and removes defaulting when reading multiplicities. |
| src/rules/hamiltoniancircuit_quadraticassignment.rs | Adds validate_target_solution() precheck. |
| src/rules/hamiltoniancircuit_longestcircuit.rs | Adds validate_target_solution() precheck. |
| src/rules/hamiltoniancircuit_hamiltonianpath.rs | Adds validation and removes redundant length check. |
| src/rules/hamiltoniancircuit_bottlenecktravelingsalesman.rs | Adds validate_target_solution() precheck. |
| src/rules/hamiltoniancircuit_biconnectivityaugmentation.rs | Adds validation and removes bounds-guarded indexing. |
| src/rules/graphpartitioning_qubo.rs | Adds validate_target_solution() precheck. |
| src/rules/graphpartitioning_maxcut.rs | Adds validate_target_solution() precheck. |
| src/rules/graphpartitioning_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/flowshopscheduling_ilp.rs | Adds validation and removes defaulting when reading objective-related vars. |
| src/rules/feasibleregisterassignment_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/factoring_ilp.rs | Adds validation and removes defaulting on bit reads. |
| src/rules/factoring_circuit.rs | Adds validation and rejects missing factor variables in the circuit. |
| src/rules/expectedretrievalcost_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/exactcoverby3sets_subsetproduct.rs | Adds validate_target_solution() precheck. |
| src/rules/exactcoverby3sets_staffscheduling.rs | Adds validate_target_solution() precheck. |
| src/rules/exactcoverby3sets_minimumfaultdetectiontestset.rs | Adds validate_target_solution() precheck. |
| src/rules/exactcoverby3sets_minimumaxiomset.rs | Adds validation and removes defaulting when reading set-membership vars. |
| src/rules/exactcoverby3sets_maximumsetpacking.rs | Adds validate_target_solution() precheck. |
| src/rules/exactcoverby3sets_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/exactcoverby3sets_boundeddiameterspanningtree.rs | Adds validation and removes defaulting in selector reads. |
| src/rules/exactcoverby3sets_algebraicequationsovergf2.rs | Adds validate_target_solution() precheck. |
| src/rules/eulerianpath_ilp.rs | Adds validation and removes defaulting when reading start/next indicators. |
| src/rules/disjointconnectingpaths_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/directedtwocommodityintegralflow_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/directedhamiltonianpath_ilp.rs | Adds validation and propagates errors from one_hot_decode. |
| src/rules/decisionminimumvertexcover_hamiltoniancircuit.rs | Renames internal decode helper and adds validate_target_solution() call in extractor. |
| src/rules/decisionminimumdominatingset_minmaxmulticenter.rs | Adds validate_target_solution() precheck. |
| src/rules/decisionminimumdominatingset_minimumsummulticenter.rs | Adds validate_target_solution() precheck. |
| src/rules/consistencyofdatabasefrequencytables_ilp.rs | Adds validation and rejects missing/multiple one-hot selections per object-attribute. |
| src/rules/consecutiveonessubmatrix_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/consecutiveonesmatrixaugmentation_ilp.rs | Adds validation and propagates errors from one_hot_decode. |
| src/rules/consecutiveblockminimization_ilp.rs | Adds validation and propagates errors from one_hot_decode. |
| src/rules/coloring_qubo.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/coloring_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/clustering_ilp.rs | Adds validation and decodes one-hot matrix rows via helper. |
| src/rules/closestvectorproblem_qubo.rs | Adds validation and removes defaulting when reading encoded bits. |
| src/rules/closestsubstring_ilp.rs | Replaces bespoke ILP-length check with validate_target_solution(). |
| src/rules/closeststring_ilp.rs | Replaces bespoke ILP-length check with validate_target_solution(). |
| src/rules/circuit_spinglass.rs | Adds validation and removes defaulting/missing-variable fallback. |
| src/rules/circuit_sat.rs | Adds validation and switches to strict slicing. |
| src/rules/circuit_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/capacityassignment_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/boundedcomponentspanningforest_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/bottlenecktravelingsalesman_ilp.rs | Adds validation and uses one_hot_decode; errors on absent edges. |
| src/rules/bmf_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/bmf_bicliquecover.rs | Adds validate_target_solution() precheck. |
| src/rules/binpacking_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/rules/biconnectivityaugmentation_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/bicliquecover_bmf.rs | Adds validate_target_solution() precheck. |
| src/rules/balancedcompletebipartitesubgraph_ilp.rs | Adds validate_target_solution() precheck. |
| src/rules/acyclicpartition_ilp.rs | Adds validation and uses one_hot_decode_rows. |
| src/models/decision.rs | Adds validate_target_solution() upon extraction for decision wrapper reductions. |
| problemreductions-cli/tests/cli_tests.rs | Adds CLI regression ensuring pred extract rejects structurally invalid one-hot configs. |
| docs/src/design.md | Documents the “solution extraction contract” and validator usage. |
| docs/paper/reductions.typ | Updates example-db comment to reflect generated data path. |
| docs/agent-profiles/SKILLS.md | Updates canonical example generation guidance and paths. |
| Makefile | Updates paper target description to include data generation. |
| .claude/skills/write-rule-in-paper/SKILL.md | Updates rule-paper authoring instructions for generated data + new step numbering. |
| .claude/skills/write-model-in-paper/SKILL.md | Updates model-paper authoring instructions for generated data path. |
| .claude/skills/review-structural/SKILL.md | Updates structural checklist for rule-local canonical examples + extraction contract. |
| .claude/skills/review-paper/SKILL.md | Updates paper review checklist to reference generated example data path. |
| .claude/skills/issue-to-pr/SKILL.md | Updates step numbering and canonical example guidance. |
| .claude/skills/final-review/SKILL.md | Updates blacklisted-file guidance around generated example data. |
| .claude/skills/add-rule/SKILL.md | Updates extraction guidance + canonical example guidance + export steps. |
| .claude/CLAUDE.md | Updates repo guidance to reflect generated example data and extraction contract. |
Suppressed comments (4)
src/rules/partition_productionplanning.rs:1
- This introduces a potential underflow/panic when
self.target.num_periods()is 0 (or 1 if other invariants change), becausenum_periods() - 1will wrap inusizeand the slice will panic. The previous implementation usedsaturating_sub(1), which suggests0was considered. Consider restoring a safe computation (e.g.,checked_sub(1)+ early return, orsaturating_sub(1)with behavior aligned to the reduction’s math).
src/rules/partition_openshopscheduling.rs:1 - This change can panic on
num_jobs() == 0due tousizeunderflow (num_jobs() - 1). The removedsaturating_sub(1)indicates empty instances may be possible or at least were previously guarded. Please use a non-underflowing computation (e.g.,checked_sub(1)with a well-defined error or empty result) consistent with the reduction’s intended edge-case behavior.
src/rules/ksatisfiability_quadraticcongruences.rs:1 - Indexing
alpha[alpha_index]can panic ifalpha_indexis out of bounds. Sincealphaultimately derives fromtarget_solution, malformed configurations should be rejected withExtractionErrorrather than panicking. Consider using a bounds-checked access (get) and returning anExtractionErrorwhen the expected sign entry is missing.
src/rules/minimumexternalmacrodatacompression_ilp.rs:1 - This collects all active pointers at
posinto aVec, which can be a large O(n^2) scan and allocation per position. The previous nested-loop implementation short-circuited upon finding a pointer. Since the logic only needs to distinguish {0,1,>1} pointers, prefer a streaming approach that tracks the first match and stops early once a second match is found (returning an error), avoiding the full collection.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+205
to
+209
| Ok(self | ||
| .source_variables | ||
| .iter() | ||
| .map(|variable| target_solution[self.variable_map[variable]]) | ||
| .collect()) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
ExtractionErrorsVerification
make checkFixes #1118
Stacked on #1083.