Skip to content

fix: update take and hold mirror map#103

Open
wn-mitch wants to merge 1 commit into
mainfrom
wnmitch/update-take-and-hold-mirror-1
Open

fix: update take and hold mirror map#103
wn-mitch wants to merge 1 commit into
mainfrom
wnmitch/update-take-and-hold-mirror-1

Conversation

@wn-mitch

Copy link
Copy Markdown
Owner

Updates the Take and Hold Mirror 1 terrain layout with the supplied geometry and regenerates all embedded data bundles.\n\nValidation: ▸ TS: build + unit tests + data validation

@alpaca-software/40kdc-data@1.2.0 build
npm run codegen:data && tsc

@alpaca-software/40kdc-data@1.2.0 codegen:data
tsx src/codegen-data.ts

Wrote /Users/will.mitchell/40kdc-data/tools/src/data/bundle.generated.ts
units=1093, targetProfiles=11, weapons=3098, weaponKeywords=34, unitKeywords=13, factions=35, abilities=3123, phaseMappings=3745, detachments=470, alliedRules=19, stratagems=2246, enhancements=1623, leaderAttachments=286, unitCompositions=995, wargearOptions=1295, wargear=194, gameVersions=2, missions=25, missionMatchups=25, missionCards=43, deploymentPatterns=7, forceDispositions=5, terrainTemplates=19, terrainLayouts=46, hullShapes=1, resourcePools=3, interactionFlags=0
Wrote /Users/will.mitchell/40kdc-data/tools/src/share/registry.generated.ts

@alpaca-software/40kdc-data@1.2.0 postbuild
npm run audit:coverage

@alpaca-software/40kdc-data@1.2.0 audit:coverage
tsx src/cli.ts audit-coverage --write

40kdc Ability Coverage Audit
──────────────────────────────────────────────────────────────────────────────
faction total off def inert stub leak
_core 1 0 1 0 0 0
adepta-sororitas 100 29 10 64 0 0
adeptus-astartes 364 112 38 228 3 0
adeptus-custodes 90 21 12 61 0 0
adeptus-mechanicus 111 27 12 76 0 0
aeldari 180 39 13 133 3 0
agents-of-the-imperium 133 34 13 89 0 0
astra-militarum 205 44 16 147 2 0
chaos-daemons 157 39 14 110 0 0
chaos-knights 115 28 9 79 2 0
chaos-space-marines 236 69 17 157 5 0
death-guard 119 24 6 91 4 0
drukhari 100 25 7 70 1 0
emperors-children 87 23 3 62 3 0
genestealer-cults 88 21 7 63 2 0
grey-knights 61 16 5 41 1 0
imperial-knights 76 29 6 43 0 0
leagues-of-votann 76 22 7 49 0 0
necrons 158 30 23 113 1 0
orks 159 34 14 116 2 0
tau-empire 129 29 6 96 0 0
thousand-sons 130 32 9 94 7 0
tyranids 115 22 8 88 1 0
world-eaters 133 17 10 107 3 0
──────────────────────────────────────────────────────────────────────────────
TOTAL 3123 766 266 2177 40 0

Offensive coverage: 25% Defensive coverage: 9% Inert: 70%
57 entries tagged "skipped for damage calc" (defensive worklist, #23).

Top unsupported-effect reasons (offensive walk):
456 effect type "ability-grant" is not modelled by the buff layer
159 effect type "movement-modifier" is not modelled by the buff layer
128 effect type "mortal-wounds" is not modelled by the buff layer
105 conditional: cannot evaluate condition "undefined" against current context
85 effect type "leadership-modifier" is not modelled by the buff layer
62 effect type "attack-restriction" is not modelled by the buff layer
57 effect type "resurrection" is not modelled by the buff layer
53 effect type "cp-refund" is not modelled by the buff layer
52 effect type "objective-control-modifier" is not modelled by the buff layer
38 re-roll on "charge" (subset …) is outside the damage path
33 effect type "deep-strike" is not modelled by the buff layer
33 effect type "unit-keyword" is not modelled by the buff layer
33 effect type "cp-gain" is not modelled by the buff layer
32 effect type "rule-state" is not modelled by the buff layer
31 stat-modifier: operation "set" not supported

Wrote _audit/coverage.json + summary.md

@alpaca-software/40kdc-data@1.2.0 pretest
npm run codegen:data

@alpaca-software/40kdc-data@1.2.0 codegen:data
tsx src/codegen-data.ts

Wrote /Users/will.mitchell/40kdc-data/tools/src/data/bundle.generated.ts
units=1093, targetProfiles=11, weapons=3098, weaponKeywords=34, unitKeywords=13, factions=35, abilities=3123, phaseMappings=3745, detachments=470, alliedRules=19, stratagems=2246, enhancements=1623, leaderAttachments=286, unitCompositions=995, wargearOptions=1295, wargear=194, gameVersions=2, missions=25, missionMatchups=25, missionCards=43, deploymentPatterns=7, forceDispositions=5, terrainTemplates=19, terrainLayouts=46, hullShapes=1, resourcePools=3, interactionFlags=0
Wrote /Users/will.mitchell/40kdc-data/tools/src/share/registry.generated.ts

@alpaca-software/40kdc-data@1.2.0 test
vitest run

RUN v2.1.9 /Users/will.mitchell/40kdc-data/tools

✓ test/from-dsl.test.ts (73 tests) 16ms
✓ test/terrain-solve.test.ts (28 tests) 9ms
✓ test/mfm-bsdata-backstop.test.ts (7 tests) 23ms
✓ test/mfm-wargear.test.ts (36 tests) 10ms
✓ test/author-batch.test.ts (22 tests) 99ms
✓ test/mfm-source-mappings.test.ts (8 tests) 717ms
✓ test/mfm-dump-contract.test.ts (10 tests) 628ms
✓ test/mfm-detachment-fields.test.ts (14 tests) 1260ms
✓ test/missions-ingest.test.ts (13 tests) 1185ms
✓ test/roster-resolve.test.ts (22 tests) 30ms
✓ test/attribution.test.ts (9 tests) 11ms
✓ test/defensive-buffs.test.ts (12 tests) 294ms
✓ test/share.test.ts (12 tests) 153ms
✓ test/loadout.test.ts (38 tests) 259ms
✓ test/import/resolve.test.ts (17 tests) 47ms
✓ test/import/newrecruit-wtc.test.ts (24 tests) 36ms
✓ test/import/gw-headerless.test.ts (15 tests) 88ms
✓ test/import/listforge-text.test.ts (22 tests) 102ms
✓ test/data-model.test.ts (52 tests) 240ms
✓ test/base-size-bridge.test.ts (13 tests) 12ms
✓ test/mfm-enhancements.test.ts (8 tests) 40ms
✓ test/scoring.test.ts (28 tests) 17ms
✓ test/mfm-invulnerable-save.test.ts (16 tests) 11ms
✓ test/cruncher.test.ts (10 tests) 149ms
✓ test/seed-units.test.ts (9 tests) 552ms
✓ runSeedUnits over the real dump > creates, holds back, and skips nothing once every datasheet is seeded (idempotent) 543ms
✓ test/resolve-buffs.test.ts (13 tests) 9ms
✓ test/audit-mfm-contract.test.ts (12 tests) 31ms
✓ test/mfm-loader.test.ts (7 tests) 6ms
✓ test/author-ingest.test.ts (10 tests) 9ms
✓ test/import/newrecruit-simple.test.ts (13 tests) 9ms
✓ test/terrain-resolve.test.ts (9 tests) 9ms
✓ test/schema-loader.test.ts (6 tests) 416ms
✓ test/port-10e-faction.test.ts (15 tests) 12ms
✓ test/stackable-buffs.test.ts (11 tests) 47ms
✓ test/export/atc-2026.test.ts (11 tests) 379ms
✓ EXPORT_FORMATS picker descriptor > every listed format is actually dispatchable 344ms
✓ test/import/gw.test.ts (17 tests) 12ms
✓ test/mfm-stratagems.test.ts (15 tests) 2381ms
✓ test/audit-coverage.test.ts (8 tests) 16ms
✓ test/mfm-points.test.ts (7 tests) 4ms
✓ test/mfm-completeness.test.ts (37 tests) 120ms
✓ test/conformance.test.ts (485 tests) 2195ms
✓ test/runner.test.ts (18 tests) 732ms
✓ test/chapter-scope-ingest.test.ts (4 tests) 7ms
✓ test/link-abilities.test.ts (7 tests) 53ms
✓ test/scrub-defensive-flag.test.ts (9 tests) 5ms
✓ test/eligible-abilities.test.ts (10 tests) 42ms
✓ test/audit-phrasing.test.ts (14 tests) 35ms
✓ test/import/newrecruit-json.test.ts (9 tests) 19ms
✓ test/import/rosterizer.test.ts (17 tests) 14ms
✓ test/author-seed.test.ts (6 tests) 15ms
✓ test/export/rosterizer.test.ts (8 tests) 83ms
✓ test/translate-shapes.test.ts (10 tests) 8ms
✓ test/pricing.test.ts (11 tests) 13ms
✓ test/import/try-import-roster.test.ts (18 tests) 1321ms
✓ tryImportRoster — positive auto-detect > detects listforge from ListForge JSON (gk-banishers) 315ms
✓ tryImportRoster — positive auto-detect > detects listforge from ListForge JSON (gk-allied-multiforce) 530ms
✓ test/referential-integrity.test.ts (8 tests) 2542ms
✓ referential integrity > passes on the real dataset (no dangling ability_ids, no foreign faction_keywords) 1146ms
✓ referential integrity > the real dataset satisfies the collision policy table 1171ms
✓ test/mfm-base-sizes.test.ts (7 tests) 1508ms
✓ test/mfm-sync.test.ts (6 tests) 8ms
✓ test/export/yellowscribe.test.ts (11 tests) 73ms
✓ test/mfm-dispositions.test.ts (6 tests) 52ms
✓ test/translate-scoring.test.ts (12 tests) 14ms
✓ test/terrain-keystones.test.ts (5 tests) 6ms
✓ test/author-input.test.ts (6 tests) 8ms
✓ test/views-profile.test.ts (11 tests) 19ms
✓ test/mfm-mission-matchups.test.ts (6 tests) 1147ms
✓ mission-matchup reconcile over the real dump > derives every dump pairing (the 5x5 disposition matrix) 592ms
✓ test/author-input-pack.test.ts (4 tests) 14ms
✓ test/mfm-keywords.test.ts (5 tests) 52ms
✓ test/weapon-keywords.test.ts (5 tests) 73ms
✓ test/import/listforge.test.ts (7 tests) 10ms
✓ test/mfm-faction-fields.test.ts (6 tests) 1399ms
✓ test/from-keyword.test.ts (13 tests) 13ms
✓ test/mfm-attachment.test.ts (3 tests) 4ms
✓ test/mfm-faction-map.test.ts (6 tests) 5ms
✓ test/compact-json.test.ts (7 tests) 11ms
✓ test/bundle-schemas.test.ts (4 tests) 86ms
✓ test/base-size-coverage.test.ts (6 tests) 19ms
✓ test/scrub-ip.test.ts (6 tests) 6ms
✓ test/import/roster-json.test.ts (1 test) 174ms
✓ test/keystone-pairing.test.ts (2 tests) 245ms
✓ test/import/decode.test.ts (7 tests) 7ms
✓ test/export/round-trip.test.ts (7 tests) 138ms
✓ test/audit-atc.test.ts (6 tests) 4ms
✓ test/import/ip-safety.test.ts (2 tests) 135ms
✓ test/applies-to.test.ts (14 tests) 10ms
✓ test/seed-detachments.test.ts (5 tests) 4150ms
✓ seed-detachments over the real dump > derives one CP detachment per faction with a valid DP, disposition, and dir 1263ms
✓ seed-detachments over the real dump > authors every CP enhancement at cost 0, unique, combat-patrol, scoped to its detachment 1179ms
✓ seed-detachments over the real dump > reproduces the World Eaters frenzied-reavers pilot exactly 884ms
✓ seed-detachments over the real dump > derives a non-WE detachment (Sanctuary Guardians) from the dump 560ms
✓ test/import/import-listforge.test.ts (2 tests) 200ms
✓ test/validate.test.ts (5 tests) 2279ms
✓ validate > validates valid core example data without errors 1289ms
✓ validate > validates valid enrichment example data without errors 421ms
✓ test/runner-cli.test.ts (3 tests) 8007ms
✓ runner CLI subprocess > handshakes, answers a few ops, exits 0 4899ms
✓ runner CLI subprocess > dispatches the attribution op end-to-end 2016ms
✓ runner CLI subprocess > preserves request/response ordering under pipelined input 1090ms
stdout | test/mfm-apply.test.ts > applyWrites — dry-run rehearsal fidelity > accepts a valid projection and writes nothing in dry-run
[test] projected dataset valid — 1 file(s), 18518 entities checked.

✓ test/mfm-apply.test.ts (4 tests) 8212ms
✓ applyWrites — dry-run rehearsal fidelity > rejects a schema-invalid projection in dry-run (the real faction_id bug) 4344ms
✓ applyWrites — dry-run rehearsal fidelity > rejects a referential-integrity violation in dry-run (faction_keyword membership) 1746ms
✓ applyWrites — dry-run rehearsal fidelity > accepts a valid projection and writes nothing in dry-run 1073ms
✓ applyWrites — atomic, all-or-nothing persist > writes NO file when the projection fails, even with write=true 1047ms

Test Files 88 passed (88)
Tests 1543 passed (1543)
Start at 13:48:00
Duration 19.80s (transform 7.91s, setup 0ms, collect 125.58s, tests 44.62s, environment 17ms, prepare 11.06s)

@alpaca-software/40kdc-data@1.2.0 validate
tsx src/cli.ts validate-all

40kdc Data Validation Report
────────────────────────────────────────
Files scanned: 404
Items validated: 18518
Passed: 18518
Failed: 0

All validations passed.

40kdc Referential Integrity Report
────────────────────────────────────────
Files scanned: 75
Items validated: 3576
Passed: 3576
Failed: 0

All validations passed.

▸ Rust: fmt-check + build + test

running 78 tests
test cruncher::engine::tests::wound_thresholds_follow_the_table ... ok
test data::battle_sizes::tests::caps_match_the_reference ... ok
test cruncher::engine::tests::parses_bare_numbers ... ok
test cruncher::engine::tests::parses_dice_notation ... ok
test cruncher::engine::tests::unparseable_stat_is_error ... ok
test data::normalize::tests::strips_diacritics ... ok
test data::normalize::tests::collapses_whitespace_and_hyphens ... ok
test data::normalize::tests::removes_quote_variants ... ok
test import::decode::tests::decodes_raw_json ... ok
test import::decode::tests::rejects_empty ... ok
test data::normalize::tests::distinct_names_stay_distinct ... ok
test import::decode::tests::rejects_non_payload ... ok
test import::decode::tests::decodes_full_url ... ok
test import::decode::tests::decodes_bare_base64_segment ... ok
test data::loadout::tests::maximal_loadout_applies_every_swap_at_cap_plus_addon ... ok
test data::loadout::tests::single_weapon_flat_budget_caps_bounds_and_maximal ... ok
test data::loadout::tests::validate_flags_swap_conflict ... ok
test import::gw::tests::detects_gw_text_but_not_wtc ... ok
test import::gw_headerless::tests::detects_only_headerless_bullet_text ... ok
test import::listforge_text::tests::aggregates_squad_wide_wargear_from_child_and_leaf_bullets ... ok
test import::gw::tests::parses_header_and_units ... ok
test import::listforge_text::tests::attached_bodyguard_is_a_plain_unit_with_a_null_attachment ... ok
test import::gw_headerless::tests::parses_md_fixture_model_count ... ok
test import::listforge_text::tests::attached_leader_is_a_character_linked_to_its_bodyguard ... ok
test import::listforge_text::tests::attached_units_skips_the_marker_and_emits_leader_and_bodyguard ... ok
test import::listforge_text::tests::attachment_state_resets_when_a_normal_section_follows ... ok
test import::listforge_text::tests::captures_units_in_declaration_order ... ok
test import::listforge_text::tests::derives_model_counts_from_bulleted_model_groups ... ok
test import::listforge_text::tests::flags_characters_from_epic_hero_and_character_sections ... ok
test import::listforge_text::tests::keeps_single_detachment_four_segment_header_as_one ... ok
test import::listforge_text::tests::legacy_three_segment_header_has_no_disposition ... ok
test import::listforge_text::tests::parses_disposition_and_comma_splits_the_detachment_tail ... ok
test import::listforge_text::tests::recognises_the_listforge_text_export ... ok
test import::listforge_text::tests::reads_enhancement_annotation_without_claiming_points ... ok
test import::listforge_text::tests::reads_header_from_the_first_line ... ok
test import::listforge_text::tests::rejects_non_string_payloads_and_other_text_formats ... ok
test import::listforge_text::tests::sums_total_computed_from_unit_points ... ok
test import::listforge_text::tests::requires_bullets_and_refuses_wtc_with_bodies ... ok
test import::newrecruit_simple::tests::matches_simple_text_only ... ok
test import::gw_headerless::tests::parses_nr_text_dialect ... ok
test import::gw_headerless::tests::parses_gw_app_export ... ok
test import::gw_headerless::tests::parses_gw_v2_attached_format ... ok
test import::newrecruit_text::tests::classify_inline_enhancement ... ok
test import::newrecruit_text::tests::classify_nx_prefix ... ok
test import::newrecruit_simple::tests::treats_a_unit_line_directly_after_configuration_as_ending_that_section ... ok
test import::newrecruit_simple::tests::parses_name_faction_limit_and_units ... ok
test import::newrecruit_simple::tests::parses_points_brackets_with_comma_separated_faction_resources ... ok
test import::newrecruit_simple::tests::matches_exports_that_omit_the_army_roster_line_but_carry_sections ... ok
test import::newrecruit_text::tests::classify_warlord_and_character ... ok
test import::newrecruit_text::tests::infer_battle_size_buckets ... ok
test import::newrecruit_text::tests::points_from_variants ... ok
test import::newrecruit_text::tests::split_wargear ... ok
test import::newrecruit_text::tests::strip_paren ... ok
test scoring::tests::caps_grand_total_at_100 ... ok
test scoring::tests::player_game_round_trips_through_json ... ok
test import::newrecruit_wtc::tests::header_without_disposition_is_explicit_null ... ok
test import::newrecruit_wtc::tests::header_captures_force_disposition ... ok
test scoring::tests::score_secondary_logs_and_discards_and_remove_undoes ... ok
test scoring::tests::set_primary_respects_round_and_game_caps ... ok
test scoring::tests::wtc_bands ... ok
test terrain::keystone_tests::empty_when_no_keystones ... ok
test terrain::keystone_tests::propagates_resolver_errors ... ok
test terrain::keystone_tests::rejects_face_axis_mismatch ... ok
test terrain::keystone_tests::rejects_vertex_index_out_of_range ... ok
test translate::tests::trigger_phrases ... ok
test translate::tests::condition_phrases ... ok
test scoring::tests::score_award_flat_and_per ... ok
test scoring::tests::primary_event_clamps_to_round_cap ... ok
test data::pricing::tests::range_priced_tier_venatari ... ok
test data::pricing::tests::unbanded_unit_ignores_ordinal ... ok
test data::pricing::tests::tier_missing_below_smallest_band_tier ... ok
test data::pricing::tests::ordinal_bands_we_chaos_terminators ... ok
test data::loadout::tests::option_cap_floors_a_ratio ... ok
test data::loadout::tests::validate_flags_over_cap_and_accepts_base ... ok
test scoring::tests::cumulative_and_independent_sum ... ok
test scoring::tests::caps_tactical_at_five_and_fixed_at_vp_max ... ok
test scoring::tests::exclusive_group_takes_highest ... ok
test data::loadout::tests::base_loadout_berzerkers_at_10_is_the_legal_default ... ok

test result: ok. 78 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.97s

running 1 test
test self_tests::spec_version_loads ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 1 test
test applies_to_conformance ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 1 test
test attribution_corpus_matches_reference ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.27s

running 7 tests
test normalize_name_matches_reference_corpus ... ok
test parsed_stage_matches_reference_goldens ... ok
test roster_json_goldens_reimport_to_roster_goldens ... ok
test exported_yellowscribe_matches_reference_goldens ... ok
test try_import_roster_detects_format_of_every_fixture ... ok
test imported_rosters_match_reference_goldens ... ok
test exported_rosters_match_reference_goldens ... ok

test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.50s

running 1 test
test cruncher_corpus_stages_match_reference_within_tolerance ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.76s

running 43 tests
test bodyguards_attachable_from_is_empty_for_non_leader_and_unknown ... ok
test find_matches_by_exact_id ... ok
test bodyguards_attachable_from_is_the_inverse_of_leaders_attachable_to ... ok
test exposes_the_embedded_data ... ok
test ability_reverse_links_to_units ... ok
test by_faction_disambiguates_a_shared_unit ... ok
test diacritic_and_punctuation_insensitive_lookup ... ok
test find_falls_back_to_substring ... ok
test faction_links_units_and_weapons ... ok
test collection_is_iterable ... ok
test find_all_surfaces_every_match_for_a_shared_name ... ok
test does_not_over_collapse_distinct_names ... ok
test bodyguards_attachable_from_lists_body_units_sorted ... ok
test find_matches_by_exact_normalized_name ... ok
test folds_shared_core_abilities_into_the_collection ... ok
test get_any_is_the_explicit_first_wins_opt_out ... ok
test find_returns_none_on_miss ... ok
test get_still_works_for_unambiguous_ids_on_a_guarded_collection ... ok
test kharn_links_faction_weapons_abilities ... ok
test leaders_attachable_to_is_empty_for_unknown_id ... ok
test kharn_filters_abilities_by_phase ... ok
test leaders_attachable_to_lists_eligible_leaders_sorted ... ok
test leaders_attachable_to_is_empty_for_a_leader_unit ... ok
test lookup_is_case_insensitive ... ok
test normalize_collapses_whitespace_and_hyphens ... ok
test normalize_is_idempotent ... ok
test get_panics_for_a_shared_ability_id_without_a_faction - should panic ... ok
test normalize_removes_quote_variants ... ok
test normalize_strips_diacritics ... ok
test phases_empty_for_ability_without_a_mapping ... ok
test get_panics_for_a_shared_detachment_id_without_a_faction - should panic ... ok
test sm_successor_faction_resolves_without_panicking ... ok
test deduplicates_abilities_by_faction_and_id ... ok
test get_panics_for_a_shared_unit_id_without_a_faction - should panic ... ok
test get_panics_for_a_shared_weapon_id_without_a_faction - should panic ... ok
test resolves_a_shared_ability_id_to_the_units_own_factions_copy ... ok
test teq_profile_resolves_to_terminator_stats ... ok
test weapon_reverse_links_to_carriers ... ok
test terrain_catalog_and_layouts_are_embedded ... ok
test target_profiles_reference_real_units ... ok
test phases_union_across_a_mapping ... ok
test resolve_terrain_produces_board_vertices ... ok
test skips_dangling_link_ids_rather_than_panicking ... ok

test result: ok. 43 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.23s

running 3 tests
test top_level_core_data_deserializes_into_generated_types ... ok
test enrichment_data_deserializes_into_generated_types ... ok
test core_data_deserializes_into_generated_types ... ok

test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.28s

running 26 tests
test detects_a_listforge_payload ... ok
test parse_sums_computed_total_across_cost_lines ... ok
test parsed_output_leaks_no_prose_field_names ... ok
test parse_flags_warlord_and_enhancement ... ok
test parse_collects_wargear_without_enhancement_or_warlord ... ok
test parse_extracts_units_with_model_counts ... ok
test parse_extracts_faction_detachment_and_battle_size ... ok
test retains_unresolved_unit_with_candidates_and_warning ... ok
test primary_detachment_is_none_when_no_detachment ... ok
test flags_multi_force_lists_and_resolves_primary_faction ... ok
test resolves_wargear_to_weapon_ids ... ok
test attachment_partners_for_resolves_from_either_end ... ok
test infers_a_provisional_leader_attachment ... ok
test resolves_faction_detachment_and_battle_size ... ok
test support_attachment_renders_supported_by_in_atc ... ok
test does_not_auto_attach_a_solo_capable_leader ... ok
test attached_leader_for_looks_up_by_body_unit ... ok
test resolved_roster_validates_against_roster_schema ... ok
test reports_clean_diagnostics_for_fully_resolved_list ... ok
test resolves_units_to_entity_ids ... ok
test resolves_enhancement_scoped_to_detachment ... ok
test primary_detachment_is_the_first_in_source_order ... ok
test wtc_force_disposition_resolves_to_an_id ... ok
test wargear_item_resolves_via_the_wargear_fallback ... ok
test wtc_full_body_keeps_single_line_characters ... ok
test wtc_unknown_disposition_warns_and_stays_null ... ok

test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.07s

running 2 tests
test still_resolves_the_unit_despite_prose_laden_payload ... ok
test never_emits_reproduced_rules_or_ability_prose ... ok

test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.96s

running 1 test
test linked_api_corpus_matches_reference ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.00s

running 1 test
test roster_legality_corpus_matches_reference ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.66s

running 2 tests
test affordability_corpus_matches_reference ... ok
test roster_validation_corpus_matches_reference ... ok

test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.45s

running 16 tests
test detects_a_rosterizer_envelope ... ok
test accepts_history_only_envelope ... ok
test parse_reads_points_from_stats_and_sums_total ... ok
test parsed_output_leaks_no_prose_field_canaries ... ok
test parse_extracts_faction_detachment_and_battle_size ... ok
test parse_flags_warlord_and_enhancement ... ok
test parse_extracts_units_with_quantity_as_model_count ... ok
test parse_collects_wargear_with_counts ... ok
test resolves_faction_detachment_and_battle_size ... ok
test resolves_enhancement_scoped_to_detachment ... ok
test export_never_emits_prose_fields ... ok
test export_dispatch_matches_direct_serializer ... ok
test resolves_units_to_entity_ids ... ok
test resolves_wargear_counts_after_resolution ... ok
test exports_a_rosterizer_envelope_with_faction_and_detachment ... ok
test round_trip_export_then_import_preserves_resolved_ids ... ok

test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.26s

running 16 tests
test shutdown_returns_ok_null ... ok
test init_must_come_first ... ok
test preserves_pipelined_response_ordering ... ok
test init_rejects_spec_version_mismatch ... ok
test init_accepts_current_spec_version ... ok
test init_rejects_non_c_locale ... ok
test normalize_matches_library_function ... ok
test unknown_op_returns_unknown_op ... ok
test malformed_json_returns_invalid_input_without_crashing ... ok
test version_op_reports_impl_identity ... ok
test validate_emits_closed_enum_errors ... ok
test attribution_returns_per_stage_decomposition ... ok
test linked_query_unknown_unit_returns_unknown_entity ... ok
test linked_query_find_unit_resolves_diacritics ... ok
test crunch_returns_seven_canonical_stages ... ok
test linked_query_abilities_of_returns_ordered_ids ... ok

test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.55s

running 1 test
test scoring_corpus_matches_reference ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.11s

running 3 tests
test share_corpus_is_non_empty ... ok
test negative_decode_cases_match_verdict ... ok
test round_trip_cases_match_golden_tokens ... ok

test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s

running 1 test
test terrain_keystones_corpus_matches ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 1 test
test terrain_resolver_corpus_matches ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 9 tests
test adapter_matchers_are_disjoint_per_fixture ... ok
test rejects_empty_input ... ok
test rejects_unknown_json_shape ... ok
test rejects_base64_shaped_but_not_gzip ... ok
test rejects_malformed_json ... ok
test rejects_freeform_text ... ok
test decodes_a_gzipped_listforge_url ... ok
test positive_auto_detect_per_format ... ok
test roster_json_export_round_trips ... ok

test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.75s

running 1 test
test validator_conformance ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 9 tests
test crates/wh40kdc/src/lib.rs - import (line 120) - compile ... ok
test crates/wh40kdc/src/import/decode.rs - import::decode::decode_listforge (line 88) ... ok
test crates/wh40kdc/src/lib.rs - (line 8) ... ok
test crates/wh40kdc/src/lib.rs - cruncher (line 130) ... ok
test crates/wh40kdc/src/data/normalize.rs - data::normalize::normalize_name (line 30) ... ok
test crates/wh40kdc/src/data/dataset.rs - data::dataset::Dataset (line 131) ... ok
test crates/wh40kdc/src/lib.rs - (line 19) ... ok
test crates/wh40kdc/src/lib.rs - data (line 83) ... ok
test crates/wh40kdc/src/import/resolve.rs - import::resolve::resolve (line 153) ... ok

test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 5.80s

▸ Python: ruff + mypy + pytest (with an isolated Python virtual environment).

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.

1 participant