🌍 Discover our global repository of countries, states, and cities! 🏙️ Get comprehensive data in JSON, SQL, PSQL, SQLSERVER, MONGODB, SQLITE, XML, YAML, and CSV formats. Access ISO2, ISO3 codes, country code, capital, native language, timezones (for countries), and more. #countries #states #cities
This report summarizes scanner evidence for dr5hn/countries-states-cities-database, a Python project with 9,916 GitHub stars. SynthScan examined 2,121,190 lines of code across 837 source files, recording 2675 pattern matches distributed across 17 syntactic categories. The legacy adjusted pattern signal is 2.0 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 271 finding(s).
Are imports declared and package/API names verified? 140 finding(s).
Are wrappers, guards, and repeated structures necessary? 2411 finding(s).
Which changes need focused human review? 2675 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 2675 distinct pattern matches across 17 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 147 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 148 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 149 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 150 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 152 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 158 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 159 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 162 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 163 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 166 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 168 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 171 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 172 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 175 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 179 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 180 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 181 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 183 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 184 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 185 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 186 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 187 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 188 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 190 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 229 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 230 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 231 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 232 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 233 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 234 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 239 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 242 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 243 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 244 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 260 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 263 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 264 | CODE | |
| MEDIUM | bin/scripts/sync/import_taiwan_postcodes.py | 268 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 73 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 74 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 75 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 76 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 78 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 83 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 84 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 87 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 88 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 91 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 93 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 96 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 97 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 100 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 101 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 103 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 104 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 105 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 106 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 107 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 109 | CODE | |
| MEDIUM | bin/scripts/sync/import_turkey_postcodes.py | 147 | CODE | |
| 2164 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/scripts/fixes/spain_drop_provincia_placeholders.py | 82 | def matches_cross_state_alicante(row: dict) -> bool: | CODE |
| LOW | …ripts/fixes/test_france_fix_copyforward_wikidataids.py | 92 | def test_applies_plan_and_rerun_changes_nothing(self): | CODE |
| LOW | …ripts/fixes/test_france_fix_copyforward_wikidataids.py | 111 | def test_aborts_when_file_changes_during_planning(self): | CODE |
| LOW | bin/scripts/release/test_ledger_workflow.py | 12 | def test_triggers_and_path_filter(self): | CODE |
| LOW | bin/scripts/release/test_release_migrations.py | 60 | def test_github_association_and_disagreement(self): | CODE |
| LOW | bin/scripts/release/test_release_migrations.py | 75 | def test_pending_api_preview_parity(self): | CODE |
| LOW | bin/scripts/release/test_release_migrations.py | 103 | def test_legacy_pr_metadata_needs_no_api(self): | CODE |
| LOW⚡ | bin/scripts/release/test_release_migrations.py | 114 | def test_before_the_major_is_cut(self): | CODE |
| LOW⚡ | bin/scripts/release/test_release_migrations.py | 118 | def test_after_the_major_is_cut(self): | CODE |
| LOW⚡ | bin/scripts/release/test_release_migrations.py | 124 | def test_numbers_compare_as_numbers(self): | CODE |
| LOW⚡ | bin/scripts/release/test_migrations.py | 277 | def test_mixed_keys_and_duplicate_resolved_key(self): | CODE |
| LOW⚡ | bin/scripts/release/test_migrations.py | 287 | def test_explicit_commit_keeps_legacy_pr_metadata(self): | CODE |
| LOW⚡ | bin/scripts/release/test_migrations.py | 297 | def test_resolved_removal_keeps_all_guards(self): | CODE |
| LOW⚡ | bin/scripts/release/test_migrations.py | 846 | def test_events_off_the_release_line_are_refused(self): | CODE |
| LOW⚡ | bin/scripts/release/test_migrations.py | 856 | def test_earlier_events_are_checked_against_history(self): | CODE |
| LOW⚡ | bin/scripts/release/test_migrations.py | 866 | def test_earlier_events_get_the_same_checks(self): | CODE |
| LOW⚡ | bin/scripts/release/test_migrations.py | 1043 | def test_future_event_when_to_is_the_root(self): | CODE |
| LOW⚡ | bin/scripts/release/test_migrations.py | 1051 | def test_held_identity_with_malformed_prior_entity(self): | CODE |
| LOW⚡ | bin/scripts/release/test_migrations.py | 1061 | def test_seat_target_only_for_city_rows(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 160 | def test_batch_parity_and_existing_gates(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 197 | def test_multirow_batch_expansion(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 210 | def test_schema_requires_a_valid_key(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 221 | def test_association_resolution_and_published_sha(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 235 | def test_subjects_are_never_proof(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 263 | def test_mapping_is_authoritative_and_unambiguous(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 308 | def test_pending_pr_binds_merge_preview_only_for_own_events(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 326 | def test_pending_and_export_parity(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 363 | def test_future_pr_events_use_pinned_ledger_tip(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 388 | def test_repurpose_keyed_by_pr_still_needs_retirement(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 411 | def test_restoration_keyed_by_pr_and_pending_pr(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 434 | def test_baseline_conflict_after_pr_resolution(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 468 | def test_dataset_move_keeps_separate_reviewed_seat(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 478 | def test_unsafe_redirects_and_targets_are_refused(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 494 | def test_provenance_is_required(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 508 | def test_retiring_a_repurpose_is_declared_in_full(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 536 | def test_merge_addition_and_files(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 556 | def test_event_must_match_the_removal(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 569 | def test_target_checked_at_the_event_commit_and_chains_followed(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 581 | def test_created_and_removed_between_releases(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 605 | def test_events_outside_the_interval(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 615 | def test_ids_must_be_final_unique_and_integers(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 629 | def test_fixed_files_may_appear(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 661 | def test_repurpose_needs_remediation_and_maps_to_the_earlier_identity(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 683 | def test_no_record_repurpose_schema(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 707 | def test_no_record_repurpose_still_needs_complete_remediation(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 741 | def test_recorded_later_schema(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 754 | def test_recorded_later_is_temporal_hash_checked_and_follows_later_events(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 800 | def test_fresh_replacement_must_be_new(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 813 | def test_restored_replacement_is_not_fresh(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 831 | def test_second_repurpose_needs_the_first_remediated(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 888 | def test_restoration_brings_back_the_same_entity(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 910 | def test_restoration_cannot_undo_a_repurpose_retirement(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 928 | def test_restoration_must_name_the_latest_retirement(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 947 | def test_restored_id_that_leaves_again_needs_a_new_restoration(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 960 | def test_restoration_needs_a_matching_stable_identifier(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 974 | def test_unreviewed_return_before_from_is_refused(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 987 | def test_restoration_retirement_is_read_over_the_whole_table(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 996 | def test_restoration_resumes_target_resolution(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 1018 | def test_runs_from_a_subdirectory(self): | CODE |
| LOW | bin/scripts/release/test_migrations.py | 1030 | def test_reads_use_the_resolved_sha(self): | CODE |
| 87 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | bin/scripts/sync/city_states.py | 112 | state_code set, no states list) or spans several regions (both null, and states lists two or more distinct | STRING |
| HIGH | bin/scripts/sync/import_panama_postcodes.py | 29 | 2. Skips 65 'POR DEFINIR' (undefined) features without an | STRING |
| HIGH | bin/scripts/sync/test_city_states.py | 203 | """All-null, mixed, all-present and late values give the declared type; a sample never relaxes country_id.""" | STRING |
| HIGH⚡ | bin/scripts/export/test_json_to_toon.py | 20 | """A null value (e.g. the state of a city in a country with no states) encodes as null, not a blank cell.""" | STRING |
| HIGH⚡ | bin/scripts/export/test_json_to_toon.py | 21 | out = json_to_toon('[{"id": 1, "state_id": null, "state_code": null}, {"id": 2, "state_id": 7, "state_code": "LA | CODE |
| HIGH⚡ | bin/scripts/export/test_json_to_toon.py | 22 | self.assertEqual(out.splitlines()[1:], [" 1,null,null", " 2,7,LA"]) | CODE |
| HIGH⚡ | bin/scripts/export/test_json_to_toon.py | 25 | """A string spelled null, true or false is quoted so it decodes as a string.""" | STRING |
| HIGH | bin/scripts/export/test_json_to_parquet.py | 1 | """Parquet read-back of integer columns with nulls (v5: a city's state_id can be null). Needs pandas and pyarrow.""" | STRING |
| HIGH | bin/scripts/export/test_json_to_parquet.py | 26 | """A null state next to real ones reads back as null, the others as integers.""" | STRING |
| HIGH⚡ | bin/db/tests/test_check_null_state_exports.py | 97 | self.assertProblem(f'{rel}: cannot be read', change=null) | CODE |
| HIGH⚡ | bin/db/tests/check_county_states_exports.py | 87 | """A state code from a text cell: '' is null; a missing cell (None) is BAD.""" | STRING |
| HIGH⚡ | bin/db/tests/check_county_states_exports.py | 92 | """A nullable id from a typed format: null, or a positive int (never a boolean or a fraction).""" | STRING |
| HIGH⚡ | bin/db/tests/check_county_states_exports.py | 97 | """A nullable state code from a typed format: null, or a non-empty string.""" | STRING |
| HIGH | bin/db/tests/check_county_states_exports.py | 157 | """doc as a list of record dicts; null, another root or a non-object row is an error.""" | STRING |
| HIGH | bin/db/tests/check_county_states_exports.py | 363 | positive integers within JavaScript's exact range (state_id may be the literal null), so 9.0000000000000001 is | STRING |
| HIGH | bin/db/tests/check_county_states_exports.py | 398 | id and state_id; string storage (or null storage when every value is null) for state_code and states.""" | STRING |
| HIGH | bin/db/tests/check_county_states_exports.py | 437 | """A state code from a SQL Server VALUES row: NULL is null, non-empty quoted text is the code, anything else BAD.""" | STRING |
| HIGH | bin/db/tests/check_county_states_exports.py | 772 | """A list stored as JSON text (Parquet, TOON): None for null, the regions, or INVALID (repeated keys included)." | STRING |
| HIGH | bin/db/tests/check_null_state_exports.py | 32 | """The JSON array of record objects in a generated file; null, an object root or a non-object row is a ValueError."" | STRING |
| HIGH | bin/db/tests/check_null_state_exports.py | 90 | 'mongodb/cities.json: state fields are not explicitly null, or a state reference exists') | CODE |
| HIGH⚡ | bin/db/tests/test_check_county_states_exports.py | 943 | # 4. the text "null" is never a null, in any format | COMMENT |
| HIGH⚡ | bin/db/tests/test_check_county_states_exports.py | 951 | ('csv_state_id_text_null', T('csv/counties.csv', '9,Waitomo District,,', '9,Waitomo District,null,'), 'r | CODE |
| HIGH⚡ | bin/db/tests/test_check_county_states_exports.py | 958 | ('toon_state_id_text_null', T('toon/counties.toon', ' 9,Waitomo District,null,', ' 9,Waitomo District, | CODE |
| HIGH | bin/db/tests/test_check_county_states_exports.py | 727 | out.append(('json_missing_normal_states', T('json/counties.json', '"states": null, ', ''), 'refuse')) | CODE |
| HIGH | bin/db/tests/test_check_county_states_exports.py | 28 | """A county as CSV and PLIST write it: strings, empty for null, no list.""" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/scripts/fixes/italy_remap_cities.py | 45 | CODE | |
| LOW | bin/scripts/fixes/italy_restore_native.py | 22 | CODE | |
| LOW | bin/scripts/fixes/italy_restore_native.py | 28 | CODE | |
| LOW | bin/scripts/fixes/italy_restore_native.py | 30 | CODE | |
| LOW | bin/scripts/fixes/states_level_normalise.py | 48 | CODE | |
| LOW | bin/scripts/fixes/spain_drop_provincia_placeholders.py | 35 | CODE | |
| LOW | bin/scripts/fixes/italy_dedup_flagged_pairs.py | 21 | CODE | |
| LOW | bin/scripts/fixes/spain_retag_admin_types.py | 35 | CODE | |
| LOW | bin/scripts/fixes/france_cities_diff.py | 33 | CODE | |
| LOW | bin/scripts/fixes/italy_drop_provincia_placeholders.py | 27 | CODE | |
| LOW | bin/scripts/analysis/timezone_summary.py | 14 | CODE | |
| LOW | bin/scripts/sync/import_taiwan_postcodes.py | 67 | CODE | |
| LOW | bin/scripts/sync/import_turkey_postcodes.py | 44 | CODE | |
| LOW | bin/scripts/sync/import_eu_batch1_postcodes.py | 40 | CODE | |
| LOW | bin/scripts/sync/import_nigeria_postcodes.py | 40 | CODE | |
| LOW | bin/scripts/sync/import_portugal_postcodes.py | 52 | CODE | |
| LOW | bin/scripts/sync/import_caribbean_postcodes.py | 62 | CODE | |
| LOW | bin/scripts/sync/import_cambodia_postcodes.py | 48 | CODE | |
| LOW | bin/scripts/sync/normalize_json.py | 34 | CODE | |
| LOW | bin/scripts/sync/import_au_territory_postcodes.py | 45 | CODE | |
| LOW | bin/scripts/sync/import_spain_postcodes.py | 48 | CODE | |
| LOW | bin/scripts/sync/import_spain_postcodes.py | 55 | CODE | |
| LOW | bin/scripts/sync/import_french_polynesia_postcodes.py | 50 | CODE | |
| LOW | bin/scripts/sync/import_faroe_islands_postcodes.py | 50 | CODE | |
| LOW | bin/scripts/sync/import_denmark_postcodes.py | 37 | CODE | |
| LOW | bin/scripts/sync/import_guam_postcodes.py | 34 | CODE | |
| LOW | bin/scripts/sync/import_costa_rica_postcodes.py | 39 | CODE | |
| LOW | bin/scripts/sync/import_belgium_postcodes.py | 61 | CODE | |
| LOW | bin/scripts/sync/import_uruguay_postcodes.py | 48 | CODE | |
| LOW | bin/scripts/sync/import_dominican_republic_postcodes.py | 43 | CODE | |
| LOW | bin/scripts/sync/import_venezuela_postcodes.py | 40 | CODE | |
| LOW | bin/scripts/sync/import_australia_post_postcodes.py | 41 | CODE | |
| LOW | bin/scripts/sync/import_canada_postcodes.py | 61 | CODE | |
| LOW | bin/scripts/sync/import_brazil_postcodes.py | 60 | CODE | |
| LOW | bin/scripts/sync/import_mauritius_postcodes.py | 43 | CODE | |
| LOW | bin/scripts/sync/import_tunisia_postcodes.py | 51 | CODE | |
| LOW | bin/scripts/sync/import_mozambique_postcodes.py | 47 | CODE | |
| LOW | bin/scripts/sync/import_colombia_postcodes.py | 45 | CODE | |
| LOW | bin/scripts/sync/import_latvia_postcodes.py | 39 | CODE | |
| LOW | bin/scripts/sync/import_latvia_postcodes.py | 47 | CODE | |
| LOW | bin/scripts/sync/import_puerto_rico_postcodes.py | 41 | CODE | |
| LOW | bin/scripts/sync/import_puerto_rico_postcodes.py | 49 | CODE | |
| LOW | bin/scripts/sync/import_mongolia_postcodes.py | 51 | CODE | |
| LOW | bin/scripts/sync/import_ukraine_postcodes.py | 39 | CODE | |
| LOW | bin/scripts/sync/import_china_postcodes.py | 65 | CODE | |
| LOW | bin/scripts/sync/import_thailand_postcodes.py | 42 | CODE | |
| LOW | bin/scripts/sync/import_croatia_postcodes.py | 53 | CODE | |
| LOW | bin/scripts/sync/import_nepal_postcodes.py | 43 | CODE | |
| LOW | bin/scripts/sync/import_laposte_postcodes.py | 57 | CODE | |
| LOW | …n/scripts/sync/import_singleton_territory_postcodes.py | 50 | CODE | |
| LOW | bin/scripts/sync/import_mexico_postcodes.py | 58 | CODE | |
| LOW | bin/scripts/sync/import_netherlands_postcodes.py | 69 | CODE | |
| LOW | bin/scripts/sync/import_iran_postcodes.py | 61 | CODE | |
| LOW | bin/scripts/sync/import_madagascar_postcodes.py | 40 | CODE | |
| LOW | bin/scripts/sync/import_indonesia_postcodes.py | 46 | CODE | |
| LOW | bin/scripts/sync/import_json_to_mysql.py | 28 | CODE | |
| LOW | bin/scripts/sync/import_aland_postcodes.py | 36 | CODE | |
| LOW | bin/scripts/sync/import_el_salvador_postcodes.py | 42 | CODE | |
| LOW | bin/scripts/sync/import_moldova_postcodes.py | 43 | CODE | |
| LOW | bin/scripts/sync/import_malaysia_postcodes.py | 42 | CODE | |
| 52 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/AUTOMATION_README.md | 5 | ### Step 1: Copy files to your repository | COMMENT |
| LOW | .github/AUTOMATION_README.md | 14 | ### Step 2: Push the files | COMMENT |
| LOW⚡ | .github/AUTOMATION_README.md | 26 | ### Step 3: Add Slack webhook (optional but recommended) | COMMENT |
| LOW⚡ | .github/AUTOMATION_README.md | 34 | ### Step 4: Verify Copilot access | COMMENT |
| LOW⚡ | .github/AUTOMATION_README.md | 41 | ### Step 5: Install dependencies (for local testing) | COMMENT |
| LOW⚡ | …/fixes-docs/NORTH_KOREA_MISSING_METROPOLITAN_CITIES.md | 278 | # Step 1: Import JSON to MySQL (assigns IDs) | COMMENT |
| LOW⚡ | …/fixes-docs/NORTH_KOREA_MISSING_METROPOLITAN_CITIES.md | 281 | # Step 2: Sync MySQL back to JSON (updates IDs) | COMMENT |
| LOW⚡ | …/fixes-docs/NORTH_KOREA_MISSING_METROPOLITAN_CITIES.md | 284 | # Step 3: Add timezones | COMMENT |
| LOW⚡ | …/fixes-docs/NORTH_KOREA_MISSING_METROPOLITAN_CITIES.md | 287 | # Step 4: Sync timezone updates | COMMENT |
| LOW⚡ | …/fixes-docs/NORTH_KOREA_MISSING_METROPOLITAN_CITIES.md | 290 | # Step 5: Add translations | COMMENT |
| LOW⚡ | …/fixes-docs/NORTH_KOREA_MISSING_METROPOLITAN_CITIES.md | 293 | # Step 6: Import translations to MySQL | COMMENT |
| LOW⚡ | .github/agent-docs/AI_AGENT_BEST_PRACTICES.md | 35 | # Step 1: Add your data to contributions/ (without timezone/translations) | COMMENT |
| LOW⚡ | .github/agent-docs/AI_AGENT_BEST_PRACTICES.md | 36 | # Step 2: Run timezone enrichment | COMMENT |
| LOW⚡ | .github/agent-docs/AI_AGENT_BEST_PRACTICES.md | 41 | # Step 3: Run translation enrichment | COMMENT |
| LOW⚡ | .github/agent-docs/AI_AGENT_BEST_PRACTICES.md | 47 | # Step 4: Validate with Wikipedia | COMMENT |
| LOW⚡ | .github/skills/validate-contribution/SKILL.md | 18 | ### Step 1: Identify the Entity Type | COMMENT |
| LOW⚡ | .github/skills/validate-contribution/SKILL.md | 22 | ### Step 2: Check for Auto-Managed Fields | COMMENT |
| LOW⚡ | .github/skills/validate-contribution/SKILL.md | 32 | ### Step 3: Validate Required Fields | COMMENT |
| LOW⚡ | .github/skills/validate-contribution/SKILL.md | 40 | ### Step 4: Validate Field Formats | COMMENT |
| LOW⚡ | .github/skills/validate-contribution/SKILL.md | 49 | ### Step 5: Cross-Reference Validation | COMMENT |
| LOW⚡ | .github/skills/validate-contribution/SKILL.md | 57 | ### Step 6: Coordinate Plausibility | COMMENT |
| LOW⚡ | .github/skills/validate-contribution/SKILL.md | 62 | ### Step 7: Duplicate Detection | COMMENT |
| LOW | .github/skills/triage-issue/SKILL.md | 16 | ### Step 1: Classify the Issue | COMMENT |
| LOW⚡ | .github/skills/triage-issue/SKILL.md | 29 | ### Step 2: Add Entity Labels | COMMENT |
| LOW⚡ | .github/skills/triage-issue/SKILL.md | 36 | ### Step 3: Assess Severity | COMMENT |
| LOW⚡ | .github/skills/triage-issue/SKILL.md | 45 | ### Step 4: Determine Action | COMMENT |
| LOW | .github/skills/triage-issue/SKILL.md | 65 | ### Step 5: Respond to the Issue | COMMENT |
| LOW | .github/skills/fix-contribution/SKILL.md | 24 | ### Step 1: Identify the Issues | COMMENT |
| LOW | .github/skills/fix-contribution/SKILL.md | 32 | ### Step 2: Apply Fixes | COMMENT |
| LOW | .github/skills/fix-contribution/SKILL.md | 61 | ### Step 3: Commit the Fix | COMMENT |
| LOW | .github/skills/fix-contribution/SKILL.md | 74 | ### Step 4: Explain Changes | COMMENT |
| LOW⚡ | .github/skills/review-data-pr/SKILL.md | 18 | ### Step 1: Read the PR Context | COMMENT |
| LOW⚡ | .github/skills/review-data-pr/SKILL.md | 24 | ### Step 2: Check Geographical Plausibility | COMMENT |
| LOW⚡ | .github/skills/review-data-pr/SKILL.md | 32 | ### Step 3: Look for Suspicious Patterns | COMMENT |
| LOW⚡ | .github/skills/review-data-pr/SKILL.md | 42 | ### Step 4: Verify Data Source | COMMENT |
| LOW⚡ | .github/skills/review-data-pr/SKILL.md | 49 | ### Step 5: Check for Completeness | COMMENT |
| LOW⚡ | .github/skills/review-data-pr/SKILL.md | 56 | ### Step 6: Assess Overall Quality | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/scripts/fixes/italy_remap_cities.py | 153 | CODE | |
| LOW | bin/scripts/fixes/italy_remap_cities.py | 370 | CODE | |
| LOW | bin/scripts/fixes/italy_restore_native.py | 68 | CODE | |
| LOW | bin/scripts/fixes/france_fix_copyforward_wikidataids.py | 323 | CODE | |
| LOW | bin/scripts/fixes/france_cities_diff.py | 155 | CODE | |
| LOW | bin/scripts/release/test_ledger_workflow.py | 12 | CODE | |
| LOW | bin/scripts/release/migrations.py | 323 | CODE | |
| LOW | bin/scripts/release/migrations.py | 798 | CODE | |
| LOW | bin/scripts/release/migrations.py | 1022 | CODE | |
| LOW | bin/scripts/release/migrations.py | 608 | CODE | |
| LOW | bin/scripts/release/migrations.py | 692 | CODE | |
| LOW | bin/scripts/sync/import_nigeria_postcodes.py | 69 | CODE | |
| LOW | bin/scripts/sync/import_cambodia_postcodes.py | 73 | CODE | |
| LOW | bin/scripts/sync/normalize_json.py | 123 | CODE | |
| LOW | bin/scripts/sync/import_au_territory_postcodes.py | 68 | CODE | |
| LOW | bin/scripts/sync/import_guam_postcodes.py | 58 | CODE | |
| LOW | bin/scripts/sync/import_colombia_postcodes.py | 110 | CODE | |
| LOW | bin/scripts/sync/import_puerto_rico_postcodes.py | 65 | CODE | |
| LOW | bin/scripts/sync/import_thailand_postcodes.py | 67 | CODE | |
| LOW | …n/scripts/sync/import_singleton_territory_postcodes.py | 76 | CODE | |
| LOW | bin/scripts/sync/import_netherlands_postcodes.py | 108 | CODE | |
| LOW | bin/scripts/sync/import_json_to_mysql.py | 52 | CODE | |
| LOW | bin/scripts/sync/import_json_to_mysql.py | 147 | CODE | |
| LOW | bin/scripts/sync/import_json_to_mysql.py | 401 | CODE | |
| LOW | bin/scripts/sync/import_json_to_mysql.py | 625 | CODE | |
| LOW | bin/scripts/sync/import_aland_postcodes.py | 58 | CODE | |
| LOW | bin/scripts/sync/import_moldova_postcodes.py | 87 | CODE | |
| LOW | bin/scripts/sync/import_malaysia_postcodes.py | 76 | CODE | |
| LOW | bin/scripts/sync/import_small_territory_postcodes.py | 126 | CODE | |
| LOW | bin/scripts/sync/city_states.py | 32 | CODE | |
| LOW | bin/scripts/sync/city_states.py | 56 | CODE | |
| LOW | bin/scripts/sync/city_states.py | 110 | CODE | |
| LOW | bin/scripts/sync/import_philippines_postcodes.py | 87 | CODE | |
| LOW | bin/scripts/sync/import_census_zcta_postcodes.py | 65 | CODE | |
| LOW | bin/scripts/sync/import_census_zcta_postcodes.py | 118 | CODE | |
| LOW | bin/scripts/sync/import_norway_postcodes.py | 54 | CODE | |
| LOW | bin/scripts/sync/import_malta_postcodes.py | 71 | CODE | |
| LOW | bin/scripts/sync/import_south_africa_postcodes.py | 73 | CODE | |
| LOW | bin/scripts/sync/import_tanzania_postcodes.py | 108 | CODE | |
| LOW | bin/scripts/sync/import_finland_postcodes.py | 106 | CODE | |
| LOW | bin/scripts/sync/import_us_virgin_islands_postcodes.py | 59 | CODE | |
| LOW | bin/scripts/sync/check_round_trip.py | 30 | CODE | |
| LOW | bin/scripts/sync/import_japan_post_postcodes.py | 116 | CODE | |
| LOW | bin/scripts/sync/sync_mysql_to_json.py | 66 | CODE | |
| LOW | bin/scripts/export/import_duckdb.py | 78 | CODE | |
| LOW | bin/scripts/export/import_duckdb.py | 169 | CODE | |
| LOW | bin/scripts/validation/add_timezones.py | 296 | CODE | |
| LOW | bin/scripts/validation/analyze_missing_timezones.py | 91 | CODE | |
| LOW | bin/scripts/validation/analyze_missing_timezones.py | 119 | CODE | |
| LOW | bin/scripts/validation/validate_timezones.py | 27 | CODE | |
| LOW | bin/scripts/validation/validate_timezones.py | 67 | CODE | |
| LOW | bin/scripts/validation/translation_enricher.py | 186 | CODE | |
| LOW | bin/db/tests/check_county_states_exports.py | 192 | CODE | |
| LOW | bin/db/tests/check_county_states_exports.py | 336 | CODE | |
| LOW | bin/db/tests/check_county_states_exports.py | 441 | CODE | |
| LOW | bin/db/tests/check_county_states_exports.py | 480 | CODE | |
| LOW | bin/db/tests/check_county_states_exports.py | 548 | CODE | |
| LOW | bin/db/tests/check_county_states_exports.py | 634 | CODE | |
| LOW | bin/db/tests/test_check_county_states_exports.py | 52 | CODE | |
| LOW | bin/db/tests/test_check_county_states_exports.py | 294 | CODE | |
| 5 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | bin/scripts/sync/import_eu_batch1_postcodes.py | 77 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bin/scripts/sync/import_eu_batch1_postcodes.py | 79 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bin/scripts/sync/import_eu_batch1_postcodes.py | 121 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bin/scripts/sync/import_eu_batch1_postcodes.py | 123 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bin/scripts/sync/import_eu_batch1_postcodes.py | 186 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bin/scripts/sync/import_eu_batch1_postcodes.py | 188 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bin/scripts/sync/import_eu_batch1_postcodes.py | 233 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bin/scripts/sync/import_eu_batch1_postcodes.py | 235 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/weekly-digest.yml | 95 | // ─── Batched Changelog ─────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/weekly-digest.yml | 190 | // ─── Commit Changelog via PR ───────────────────────── | COMMENT |
| MEDIUM | .github/workflows/weekly-digest.yml | 226 | // ─── Slack Digest ──────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | bin/scripts/fixes/spain_drop_provincia_placeholders.py | 0 | read the cities json file and verify the top-level shape. | STRING |
| HIGH | bin/scripts/fixes/spain_retag_admin_types.py | 0 | read the cities json file and verify the top-level shape. | STRING |
| HIGH | bin/scripts/fixes/italy_drop_provincia_placeholders.py | 0 | read the cities json file and verify the top-level shape. | STRING |
| HIGH | bin/scripts/sync/test_check_round_trip.py | 0 | assert one of the problems contains the expected text. | STRING |
| HIGH | bin/db/tests/test_check_null_state_exports.py | 0 | assert one of the problems contains the expected text. | STRING |
| HIGH | bin/db/tests/test_check_county_states_exports.py | 0 | assert one of the problems contains the expected text. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | bin/scripts/sync/import_moldova_postcodes.py | 161 | except (TypeError, ValueError, IndexError): | CODE |
| HIGH | bin/scripts/sync/import_malta_postcodes.py | 135 | except (TypeError, ValueError): | CODE |
| HIGH | bin/scripts/sync/import_greece_postcodes.py | 129 | except (TypeError, ValueError): | CODE |
| HIGH | bin/scripts/sync/import_ecuador_postcodes.py | 163 | except (TypeError, ValueError): | CODE |
| HIGH | bin/scripts/sync/import_algeria_postcodes.py | 147 | except (TypeError, ValueError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/scripts/sync/normalize_json.py | 164 | except Exception as e: | CODE |
| LOW | bin/scripts/sync/normalize_json.py | 190 | except Exception as e: | CODE |
| LOW | bin/scripts/sync/normalize_json.py | 249 | except Exception as e: | CODE |
| LOW | bin/scripts/sync/import_json_to_mysql.py | 431 | except Exception as e: | CODE |
| LOW | bin/scripts/sync/import_json_to_mysql.py | 666 | except Exception as e: | CODE |
| LOW | bin/scripts/sync/import_json_to_mysql.py | 777 | except Exception as e: | CODE |
| LOW | bin/scripts/sync/sync_mysql_to_json.py | 567 | except Exception as e: | CODE |
| LOW | bin/scripts/export/import_duckdb.py | 93 | except Exception as e: | CODE |
| LOW | bin/scripts/export/import_duckdb.py | 239 | except Exception as e: | CODE |
| MEDIUM | bin/scripts/export/import_duckdb.py | 254 | print(f"Error: Input file {args.input} not found") | CODE |
| LOW | bin/scripts/export/import_duckdb.py | 299 | except Exception as e: | CODE |
| MEDIUM | bin/scripts/export/import_duckdb.py | 300 | print(f"Error: {e}") | CODE |
| LOW | bin/scripts/validation/add_timezones.py | 206 | except Exception as e: | CODE |
| LOW | bin/scripts/validation/add_timezones.py | 470 | except Exception as e: | CODE |
| LOW | bin/scripts/validation/validate_timezones.py | 209 | except Exception as e: | STRING |
| LOW | bin/scripts/validation/translation_enricher.py | 123 | except Exception as e: | CODE |
| LOW | bin/scripts/validation/wikipedia_validator.py | 99 | except Exception as e: | CODE |
| LOW | bin/db/tests/check_null_state_exports.py | 26 | except Exception as e: # any parse failure is a failed check, reported with the file | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/workflows/pullfrog.yml | 41 | # BEDROCK_MODEL_ID: <bedrock-model-id> | COMMENT |
| LOW | .github/workflows/export.yml | 861 | if (!noticeFiles.includes('Unicode-3.0.txt')) { // required while country translations carry CLDR names | COMMENT |
| LOW | …es-docs/EQUATORIAL_GUINEA_MISSING_DJIBLOHO_PROVINCE.md | 81 | WHERE country_code = 'GQ' AND name = 'Djibloho'; | COMMENT |
| LOW | …es-docs/PERU_MISSING_METROPOLITAN_LIMA_MUNICIPALITY.md | 121 | FROM states | COMMENT |
| LOW | .github/fixes-docs/BANGLADESH_MISSING_DISTRICTS.md | 161 | s1.name as division, | COMMENT |
| LOW | .github/fixes-docs/FRANCE_MISSING_NEW_CALEDONIA.md | 61 | jq '[.[] | select(.country_code == "FR")] | length' contributions/states/states.json | COMMENT |
| LOW | .github/fixes-docs/FRANCE_MISSING_NEW_CALEDONIA.md | 101 | ```bash | COMMENT |
| LOW | …docs/WALLIS_FUTUNA_MISSING_ADMINISTRATIVE_PRECINCTS.md | 81 | - **Change:** +3 cities (Mata Utu, Leava, Ono) | COMMENT |
| LOW | …es-docs/SLOVENIA_MISSING_VELENJE_URBAN_MUNICIPALITY.md | 81 | mysql> SELECT id, name, iso3166_2, iso2, type FROM states | COMMENT |
| LOW | …es-docs/SLOVENIA_MISSING_VELENJE_URBAN_MUNICIPALITY.md | 101 | # 5. Ljubljana (061) | COMMENT |
| LOW | …thub/fixes-docs/AFGHANISTAN_MISSING_WARDAK_PROVINCE.md | 101 | ### 2. Verified Wardak Province Details | COMMENT |
| LOW | …es-docs/SIERRA_LEONE_MISSING_NORTH_WESTERN_PROVINCE.md | 121 | COMMENT | |
| LOW | …hub/fixes-docs/TAJIKISTAN_MISSING_CAPITAL_TERRITORY.md | 81 | # id: 5706 | COMMENT |
| LOW | .github/fixes-docs/FIX_ANGOLA_MISSING_NAMIBE.md | 101 | # Results match ISO 3166-2:AO: | COMMENT |
| LOW | .github/fixes-docs/MOLDOVA_MISSING_LEOVA_DISTRICT.md | 101 | ```bash | COMMENT |
| LOW | …fixes-docs/CABO_VERDE_MISSING_SAO_SALVADOR_DO_MUNDO.md | 81 | ### 2. Verified São Salvador do Mundo Municipality Details | COMMENT |
| LOW | .github/fixes-docs/PANAMA_MISSING_NASO_TJER_DI.md | 101 | # Naso Tjër Di | NT | indigenous region ← NEW | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | README.md | 45 | -H "X-CSCAPI-KEY: $YOUR_API_KEY" | CODE |
| HIGH | README.md | 52 | export CSC_API_KEY="YOUR_API_KEY" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | bin/scripts/fixes/italy_remap_cities.py | 80 | # vote across the cluster is more robust at province borders than picking the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/scripts/validation/add_timezones.py | 184 | # Check if the timezone belongs to this country | COMMENT |
| LOW | bin/scripts/validation/translation_enricher.py | 141 | # Check if translations already exist | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | bin/db/tests/test_check_county_states_exports.py | 90 | # the scaffold, DDL declarations and statement order ExportSqlServer.php writes (other county columns left out) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/export.yml | 397 | # Create a MongoDB dump | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/agent-docs/CHANGELOG_SYSTEM.md | 172 | "author": "John Doe", | CODE |