A skill to stop your coding agent from burying the answer. ADHD-friendly output.
This report summarizes scanner evidence for ayghri/i-have-adhd, a Python project with 56,418 GitHub stars. SynthScan examined 13,088 lines of code across 64 source files, recording 79 pattern matches distributed across 5 syntactic categories. The legacy adjusted pattern signal is 7.1 (Moderate 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.
Can maintainers explain intent, assumptions, and trade-offs? 77 finding(s).
Are imports declared and package/API names verified? 1 finding(s).
Are wrappers, guards, and repeated structures necessary? 72 finding(s).
Which changes need focused human review? 79 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 79 distinct pattern matches across 5 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 |
|---|---|---|---|---|
| LOW | tests/test_judge.py | 16 | def test_labels_are_a_stable_bijection_over_conditions(self): | CODE |
| LOW | tests/test_judge.py | 26 | def test_labels_vary_across_groups_so_position_never_leaks_condition(self): | CODE |
| LOW | tests/test_judge.py | 38 | def test_responses_group_by_case_and_trial(self): | CODE |
| LOW | tests/test_judge.py | 50 | def test_groups_missing_a_condition_are_partitioned_out_not_dropped(self): | CODE |
| LOW | tests/test_judge.py | 75 | def test_labels_are_mapped_back_to_their_conditions(self): | CODE |
| LOW⚡ | tests/test_judge.py | 89 | def test_out_of_range_score_names_the_case_it_came_from(self): | CODE |
| LOW⚡ | tests/test_judge.py | 97 | def test_json_wrapped_in_code_fences_is_still_parsed(self): | CODE |
| LOW⚡ | tests/test_judge.py | 106 | def test_missing_label_names_the_label_the_judge_skipped(self): | CODE |
| LOW⚡ | tests/test_judge.py | 116 | def test_only_the_marked_grader_section_is_extracted(self): | CODE |
| LOW | tests/test_judge.py | 127 | def test_rubric_without_markers_is_used_whole(self): | CODE |
| LOW | tests/test_judge.py | 130 | def test_shipped_rubric_grader_section_never_names_a_condition(self): | CODE |
| LOW | tests/test_judge.py | 148 | def test_prompt_carries_responses_under_labels_and_never_names_conditions(self): | CODE |
| LOW | tests/test_judge.py | 162 | def test_runner_cwd_is_fresh_and_outside_the_repository(self): | CODE |
| LOW | tests/test_judge.py | 190 | def test_judging_produces_paired_rows_the_scorer_accepts(self): | CODE |
| LOW | tests/test_judge.py | 259 | def test_a_malformed_verdict_skips_its_group_instead_of_killing_the_run(self): | CODE |
| LOW | tests/test_judge.py | 320 | def test_missing_entire_condition_fails_before_judging(self): | CODE |
| LOW | tests/test_judge.py | 360 | def test_runner_failure_skips_its_group_and_continues(self): | CODE |
| LOW⚡ | tests/test_run_evals.py | 146 | def test_conditions_judged_on_different_cases_are_rejected(self): | CODE |
| LOW⚡ | tests/test_run_evals.py | 156 | def test_duplicate_score_rows_are_rejected(self): | CODE |
| LOW⚡ | tests/test_run_evals.py | 166 | def test_usage_summary_reports_token_and_cost_deltas(self): | CODE |
| LOW⚡ | tests/test_run_evals.py | 217 | def test_usage_summary_rejects_mixed_runners(self): | CODE |
| LOW⚡ | tests/test_run_evals.py | 226 | def test_usage_summary_rejects_unpaired_conditions(self): | CODE |
| LOW⚡ | tests/test_run_evals.py | 236 | def test_usage_summary_marks_unreported_cost(self): | CODE |
| LOW | tests/test_run_evals.py | 18 | def test_case_catalog_is_valid_and_balanced(self): | CODE |
| LOW | tests/test_run_evals.py | 27 | def test_parse_response_tolerates_output_after_the_json_document(self): | CODE |
| LOW | tests/test_run_evals.py | 40 | def test_runner_invocation_closes_child_stdin(self): | CODE |
| LOW | tests/test_run_evals.py | 99 | def test_score_summary_applies_weights_and_release_gates(self): | CODE |
| LOW | tests/test_run_evals.py | 123 | def test_candidate_blocker_fails_release_gate(self): | CODE |
| LOW | tests/test_run_evals.py | 252 | def test_usage_tokens_handles_both_runner_shapes(self): | CODE |
| LOW | tests/test_run_evals.py | 272 | def test_usage_rejects_invalid_measurements(self): | CODE |
| LOW | tests/test_run_evals.py | 288 | def test_usage_rejects_overflowing_cost_total(self): | CODE |
| LOW | tests/test_run_evals.py | 294 | def test_usage_distinguishes_missing_counts_from_zero(self): | CODE |
| LOW | tests/test_run_evals.py | 310 | def test_usage_rejects_duplicate_or_invalid_rows(self): | CODE |
| LOW | tests/test_run_evals.py | 324 | def test_usage_checks_model_metadata_when_available(self): | CODE |
| LOW | tests/test_run_evals.py | 337 | def test_measure_cli_reports_increased_input_and_cost(self): | CODE |
| LOW | tests/test_run_evals.py | 386 | def test_duplicate_case_ids_are_rejected(self): | CODE |
| LOW | tests/test_run_evals.py | 397 | def test_jsonl_loader_reports_invalid_rows(self): | CODE |
| LOW | tests/test_run_evals.py | 404 | def test_condition_prompt_injects_the_skill_body_without_frontmatter(self): | CODE |
| LOW | tests/test_run_evals.py | 430 | def test_condition_prompt_keeps_a_skill_body_that_has_no_frontmatter(self): | CODE |
| LOW | tests/test_run_evals.py | 439 | def test_unmetered_runner_is_rejected_before_any_call(self): | CODE |
| LOW | tests/test_run_evals.py | 482 | def test_generation_runs_outside_the_repository(self): | CODE |
| LOW | tests/test_run_evals.py | 513 | def test_completed_keys_support_resuming_partial_runs(self): | CODE |
| LOW | tests/test_omp_package.py | 13 | def test_omp_and_pi_extension_manifests_are_declared(self): | CODE |
| LOW | tests/test_omp_package.py | 21 | def test_skill_remains_explicitly_invoked(self): | CODE |
| LOW | tests/test_always_on_hooks.py | 88 | def test_hook_is_silent_without_opt_in_flag(self): | CODE |
| LOW | tests/test_always_on_hooks.py | 98 | def test_runtimes_strip_frontmatter_with_trailing_whitespace(self): | CODE |
| LOW | tests/test_always_on_hooks.py | 116 | def test_runtimes_keep_content_when_frontmatter_is_unclosed(self): | CODE |
| LOW⚡ | tests/test_always_on_hooks.py | 136 | def test_codex_command_runs_the_hook_instead_of_parsing_session_json(self): | CODE |
| LOW⚡ | tests/test_always_on_hooks.py | 145 | def test_codex_command_is_silent_without_opt_in_flag(self): | CODE |
| LOW⚡ | tests/test_always_on_hooks.py | 152 | def test_codex_command_swallows_missing_plugin_errors(self): | CODE |
| LOW⚡ | tests/test_always_on_hooks.py | 159 | def test_hook_uses_a_shared_claude_and_codex_launcher(self): | CODE |
| LOW | tests/test_run_scenario_eval.py | 41 | def test_invalid_turns_are_rejected(self): | CODE |
| LOW | tests/test_run_scenario_eval.py | 53 | def test_capture_is_compatible_with_existing_blind_judge(self, run): | CODE |
| LOW | tests/test_run_scenario_eval.py | 101 | def test_failed_capture_cannot_be_judged_as_complete(self, run): | CODE |
| LOW | tests/test_run_scenario_eval.py | 119 | def test_invalid_costs_and_payloads_fail_closed(self, run): | CODE |
| LOW | tests/test_run_scenario_eval.py | 131 | def test_invalid_inputs_and_existing_output_do_not_start_provider(self, run): | CODE |
| LOW | tests/test_run_scenario_eval.py | 144 | def test_remaining_budget_is_rounded_down_and_stops_further_calls(self, run): | CODE |
| LOW | tests/test_run_scenario_eval.py | 155 | def test_actual_child_gets_no_inherited_input_and_times_out(self): | CODE |
| LOW | tests/test_install_docs.py | 12 | def test_marketplace_refresh_is_paired_with_plugin_update(self): | CODE |
| LOW | tests/test_install_docs.py | 52 | def test_grok_install_commands(self): | CODE |
| 11 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_judge.py | 164 | # in the repo and it starts inspecting the eval harness instead of | COMMENT |
| MEDIUM | tests/test_run_evals.py | 484 | # in this checkout and it answers prompts by inspecting the harness, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/run_evals.py | 449 | except (ValueError, json.JSONDecodeError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_run_evals.py | 272 | CODE | |
| LOW | tests/test_install_docs.py | 12 | CODE | |
| LOW | scripts/run_evals.py | 379 | CODE | |
| LOW | scripts/run_evals.py | 514 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/check_pi_extension.py | 4 | CODE |