Skip to content

Establish a repository-wide standard for solution extraction - #1119

Merged
isPANN merged 12 commits into
1075-growth-domainfrom
codex/issue-1118-extraction-standard
Aug 6, 2026
Merged

Establish a repository-wide standard for solution extraction#1119
isPANN merged 12 commits into
1075-growth-domainfrom
codex/issue-1118-extraction-standard

Conversation

@isPANN

@isPANN isPANN commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • validate the exact target shape and each value domain before direct witness decoding across all reduction rules
  • replace missing-index defaults, truncation, clamping, and extraction panics with explicit ExtractionErrors
  • decode one-hot rows and permutation matrices exactly, including missing, multiple, and repeated selections
  • preserve mathematical branches: partial mappings retain their explicit unmatched sentinel, while an edge covered by several cliques deterministically chooses one covering clique
  • document the repository-wide extraction contract in maintainer guidance and design documentation
  • preserve every existing test and add focused shape/domain and structured-decoding cases

Verification

  • make check
  • 5,441 library tests
  • 75 integration tests
  • 161 CLI unit tests
  • 331 CLI integration tests
  • 153 documentation tests
  • no test files or test cases deleted

Fixes #1118

Stacked on #1083.

@isPANN
isPANN marked this pull request as ready for review August 6, 2026 14:35
@isPANN
isPANN requested a lite review from Copilot August 6, 2026 17:30

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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, new one_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), because num_periods() - 1 will wrap in usize and the slice will panic. The previous implementation used saturating_sub(1), which suggests 0 was considered. Consider restoring a safe computation (e.g., checked_sub(1) + early return, or saturating_sub(1) with behavior aligned to the reduction’s math).
    src/rules/partition_openshopscheduling.rs:1
  • This change can panic on num_jobs() == 0 due to usize underflow (num_jobs() - 1). The removed saturating_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 if alpha_index is out of bounds. Since alpha ultimately derives from target_solution, malformed configurations should be rejected with ExtractionError rather than panicking. Consider using a bounds-checked access (get) and returning an ExtractionError when the expected sign entry is missing.
    src/rules/minimumexternalmacrodatacompression_ilp.rs:1
  • This collects all active pointers at pos into a Vec, 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())
@isPANN
isPANN merged commit 9e6960e into 1075-growth-domain Aug 6, 2026
1 check failed
@isPANN
isPANN deleted the codex/issue-1118-extraction-standard branch August 6, 2026 17:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants