Files

180 lines
7.4 KiB
Plaintext

=== deporder EVIDENCE ===
Wed Oct 21 10:30:31 UTC 2026
Python 3.14.7
=== 1. full suite: python3 test_deporder.py ===
test_bad_spec_exit_4 (__main__.CliTests.test_bad_spec_exit_4) ... ok
test_bad_subcommand_exit_4 (__main__.CliTests.test_bad_subcommand_exit_4) ... ok
test_cycle_exit_2 (__main__.CliTests.test_cycle_exit_2) ... ok
test_missing_file_exit_4 (__main__.CliTests.test_missing_file_exit_4) ... ok
test_ok_exit_0 (__main__.CliTests.test_ok_exit_0) ... ok
test_unknown_dep_exit_3 (__main__.CliTests.test_unknown_dep_exit_3) ... ok
test_workers_flag_overrides_spec (__main__.CliTests.test_workers_flag_overrides_spec) ... ok
test_known_length (__main__.CriticalPathTests.test_known_length) ... ok
test_matches_reference (__main__.CriticalPathTests.test_matches_reference) ... ok
test_path_is_precedence_chained (__main__.CriticalPathTests.test_path_is_precedence_chained) ... ok
test_single_node (__main__.CriticalPathTests.test_single_node) ... ok
test_tie_break_is_lexicographic (__main__.CriticalPathTests.test_tie_break_is_lexicographic) ... ok
test_acyclic_has_no_cycle (__main__.GraphTests.test_acyclic_has_no_cycle) ... ok
test_cycle_error_message (__main__.GraphTests.test_cycle_error_message) ... ok
test_cycle_in_one_component_only (__main__.GraphTests.test_cycle_in_one_component_only) ... ok
test_self_loop (__main__.GraphTests.test_self_loop) ... ok
test_three_cycle_path_is_a_real_cycle (__main__.GraphTests.test_three_cycle_path_is_a_real_cycle) ... ok
test_two_cycle (__main__.GraphTests.test_two_cycle) ... ok
test_unknown_dep_reports_sorted_pairs (__main__.GraphTests.test_unknown_dep_reports_sorted_pairs) ... ok
test_chain (__main__.OrderTests.test_chain) ... ok
test_diamond_is_lexicographic (__main__.OrderTests.test_diamond_is_lexicographic) ... ok
test_disconnected_components_interleave (__main__.OrderTests.test_disconnected_components_interleave) ... ok
test_order_prefix_property_on_random_dags (__main__.OrderTests.test_order_prefix_property_on_random_dags) ... ok
test_20k_node_graph_under_budget (__main__.PerfTests.test_20k_node_graph_under_budget) ...
[perf] 20k nodes / 39987 edges: 0.92s (critical path 20000)
ok
test_key_insertion_order_does_not_change_output (__main__.PlanTests.test_key_insertion_order_does_not_change_output) ... ok
test_plan_fields (__main__.PlanTests.test_plan_fields) ... ok
test_plan_is_repeatable (__main__.PlanTests.test_plan_is_repeatable) ... ok
test_empty (__main__.ScheduleTests.test_empty) ... ok
test_schedule_invariants_on_random_dags (__main__.ScheduleTests.test_schedule_invariants_on_random_dags) ... ok
test_single_worker_equals_serial (__main__.ScheduleTests.test_single_worker_equals_serial) ... ok
test_two_workers_never_exceed_capacity (__main__.ScheduleTests.test_two_workers_never_exceed_capacity) ... ok
test_unbounded_workers_equals_critical_path (__main__.ScheduleTests.test_unbounded_workers_equals_critical_path) ... ok
test_defaults (__main__.SpecTests.test_defaults) ... ok
test_duplicate_deps_collapse (__main__.SpecTests.test_duplicate_deps_collapse) ... ok
test_est_coerced_to_float (__main__.SpecTests.test_est_coerced_to_float) ... ok
test_rejects_malformed (__main__.SpecTests.test_rejects_malformed) ... ok
test_workers_override (__main__.SpecTests.test_workers_override) ... ok
test_chain (__main__.WaveTests.test_chain) ... ok
test_diamond (__main__.WaveTests.test_diamond) ... ok
test_parallel_roots_and_skew (__main__.WaveTests.test_parallel_roots_and_skew) ... ok
test_single_node (__main__.WaveTests.test_single_node) ... ok
test_waves_match_reference_and_cover_every_task (__main__.WaveTests.test_waves_match_reference_and_cover_every_task) ... ok
----------------------------------------------------------------------
Ran 42 tests in 1.902s
OK
SUITE_EXIT=0
=== 2. CLI on examples/pipeline.json ===
{
"critical_path": {
"length": 14.0,
"tasks": [
"fetch_sources",
"compile_core",
"unit_tests",
"package"
]
},
"makespan": 14.0,
"order": [
"fetch_sources",
"compile_core",
"compile_plugins",
"lint",
"unit_tests",
"package"
],
"schedule": [
{
"end": 2.0,
"start": 0.0,
"task": "fetch_sources",
"worker": 0
},
{
"end": 8.0,
"start": 2.0,
"task": "compile_core",
"worker": 1
},
{
"end": 5.0,
"start": 2.0,
"task": "compile_plugins",
"worker": 2
},
{
"end": 9.0,
"start": 8.0,
"task": "lint",
"worker": 0
},
{
"end": 12.0,
"start": 8.0,
"task": "unit_tests",
"worker": 2
},
{
"end": 14.0,
"start": 12.0,
"task": "package",
"worker": 1
}
],
"serial_time": 18.0,
"tasks": [
"compile_core",
"compile_plugins",
"fetch_sources",
"lint",
"package",
"unit_tests"
],
"waves": [
[
"fetch_sources"
],
[
"compile_core",
"compile_plugins"
],
[
"lint",
"unit_tests"
],
[
"package"
]
],
"workers": 3
}
CLI_EXIT=0
=== 3. CLI on examples/cycle.json ===
dependency cycle: draft -> review -> publish -> draft
CYCLE_EXIT=2
=== 4. CLI on examples/ghost.json ===
unknown dependencies: app -> missing_module
GHOST_EXIT=3
=== 5. mutation harness: python3 mutate_teeth.py ===
deporder mutation harness: 11 mutations
----------------------------------------------------------------------------------------------------
waves: drop the +1 level bump CAUGHT exit 1 | FAILED (failures=5)
why: every task collapses into wave 0
order: pop the heap tail instead of the min CAUGHT exit 1 | FAILED (failures=5)
why: lexicographic tie-break lost in Kahn
cycles: disable the residual-node check CAUGHT exit 1 | FAILED (failures=5)
why: cycle silently yields a partial order
cycle path: report a single node CAUGHT exit 1 | FAILED (failures=3)
why: reported 'cycle' is not a cycle
unknown deps: stop validating CAUGHT exit 1 | FAILED (failures=1, errors=1)
why: ghost dependency accepted
spec: allow est == 0 CAUGHT exit 1 | FAILED (failures=1)
why: zero-duration task accepted
critical path: break the predecessor tie-break CAUGHT exit 1 | FAILED (failures=1)
why: path no longer lexicographically canonical
schedule: release completions strictly before now CAUGHT exit 1 | FAILED (failures=1, errors=8)
why: worker never freed / clock stalls
schedule: double every task duration CAUGHT exit 1 | FAILED (failures=4)
why: makespan and critical-path bound violated
schedule: pin the clock to itself (kill the stall guard) CAUGHT exit 1 | FAILED (failures=1, errors=8)
why: guard fires: stalled scheduler must not spin
graph: drop the redundant set() in build_graph SURVIVED suite PASSED on mutant (not caught)
why: parse_spec already deduplicates; guard is redundant
----------------------------------------------------------------------------------------------------
caught 10/11 mutants that must die; 0 problem(s)
MUT_EXIT=0