Taskwarrior - Command line Task Management
This report summarizes scanner evidence for GothenburgBitFactory/taskwarrior, a C++ project with 6,109 GitHub stars. SynthScan examined 74,030 lines of code across 470 source files, recording 1090 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 15.7 (Elevated 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? 1065 finding(s).
Are imports declared and package/API names verified? 19 finding(s).
Are wrappers, guards, and repeated structures necessary? 435 finding(s).
Which changes need focused human review? 1090 finding(s).
Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.
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 1090 distinct pattern matches across 11 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 | test/stats.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/tempdir.cpp | 1 | //////////////////////////////////////////////////////////////////////////////// | COMMENT |
| LOW | test/import-v2.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/undo.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/debug.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/tc_cpp_test.cpp | 1 | //////////////////////////////////////////////////////////////////////////////// | COMMENT |
| LOW | test/tc_cpp_test.cpp | 21 | // SOFTWARE. | COMMENT |
| LOW | test/tw-1999.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/eval_test.cpp | 1 | //////////////////////////////////////////////////////////////////////////////// | COMMENT |
| LOW | test/eval_test.cpp | 21 | // SOFTWARE. | COMMENT |
| LOW | test/overdue.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/special.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/project.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/variant_inequal_test.cpp | 1 | //////////////////////////////////////////////////////////////////////////////// | COMMENT |
| LOW | test/variant_inequal_test.cpp | 21 | // SOFTWARE. | COMMENT |
| LOW | test/timesheet.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/timesheet.test.py | 41 | @classmethod | COMMENT |
| LOW | test/summary.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/hooks.on-modify.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/tw-20.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/make_tc_task.cpp | 1 | //////////////////////////////////////////////////////////////////////////////// | COMMENT |
| LOW | test/make_tc_task.cpp | 21 | // SOFTWARE. | COMMENT |
| LOW | test/delete.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/unique.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/math.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/denotate.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/tw_2689_test.cpp | 1 | //////////////////////////////////////////////////////////////////////////////// | COMMENT |
| LOW | test/tw_2689_test.cpp | 21 | // SOFTWARE. | COMMENT |
| LOW | test/hooks.on-exit.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/bash_tap_tw.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | test/wait.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/color.rules.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/gc.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/uda_report.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/uda_sort.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/unicode.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/bulk.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/variant_not_test.cpp | 1 | //////////////////////////////////////////////////////////////////////////////// | COMMENT |
| LOW | test/variant_not_test.cpp | 21 | // SOFTWARE. | COMMENT |
| LOW | test/append.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/show.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/dependencies.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/feature.559.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/datetime-negative.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/datetime-negative.test.py | 401 | # datetime-negative.t tests. | COMMENT |
| LOW | test/datetime-negative.test.py | 421 | # 12:12-24:00 | COMMENT |
| LOW | test/helpers.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/variant_or_test.cpp | 1 | //////////////////////////////////////////////////////////////////////////////// | COMMENT |
| LOW | test/variant_or_test.cpp | 21 | // SOFTWARE. | COMMENT |
| LOW | test/count.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/uda.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/export.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/test.cpp | 1 | //////////////////////////////////////////////////////////////////////////////// | COMMENT |
| LOW | test/test.cpp | 21 | // SOFTWARE. | COMMENT |
| LOW | test/news.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/recurrence.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/variant_lte_test.cpp | 1 | //////////////////////////////////////////////////////////////////////////////// | COMMENT |
| LOW | test/variant_lte_test.cpp | 21 | // SOFTWARE. | COMMENT |
| LOW | test/test.h | 1 | //////////////////////////////////////////////////////////////////////////////// | COMMENT |
| LOW | test/import.test.py | 1 | #!/usr/bin/env python3 | COMMENT |
| 560 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/undo.test.py | 65 | def test_modify_multiple_tasks(self): | CODE |
| LOW | test/undo.test.py | 110 | def test_undo_no_confirmation(self): | CODE |
| LOW | test/debug.test.py | 66 | def test_debug_parser_eval_output(self): | CODE |
| LOW | test/project.test.py | 47 | def test_project_summary_count(self): | CODE |
| LOW | test/project.test.py | 96 | def test_project_someday_filter(self): | CODE |
| LOW | test/project.test.py | 152 | def test_project_indentation_in_summary(self): | CODE |
| LOW | test/project.test.py | 231 | def test_project_exclusion_isnt(self): | CODE |
| LOW | test/project.test.py | 246 | def test_project_exclusion_hasnt(self): | CODE |
| LOW | test/project.test.py | 266 | def test_log_with_project_segfault(self): | CODE |
| LOW | test/project.test.py | 282 | def test_delete_task_for_empty_project(self): | CODE |
| LOW | test/project.test.py | 302 | def test_project_hierarchy_filter(self): | CODE |
| LOW | test/project.test.py | 317 | def test_project_hierarchy_filter(self): | CODE |
| LOW | test/project.test.py | 351 | def test_project_hierarchy_filter(self): | CODE |
| LOW | test/project.test.py | 376 | def test_project_hierarchy_filter(self): | CODE |
| LOW | test/project.test.py | 392 | def test_project_hierarchy_filter(self): | CODE |
| LOW | test/project.test.py | 429 | def test_add_task_no_project_with_default(self): | CODE |
| LOW | test/project.test.py | 436 | def test_add_task_no_project_with_default_rcfile(self): | CODE |
| LOW | test/project.test.py | 449 | def test_project_names_with_dots(self): | CODE |
| LOW | test/project.test.py | 455 | def test_project_names_with_slashes(self): | CODE |
| LOW | test/hooks.on-modify.test.py | 44 | def test_onmodify_builtin_accept(self): | CODE |
| LOW | test/hooks.on-modify.test.py | 63 | def test_onmodify_builtin_reject(self): | CODE |
| LOW | test/hooks.on-modify.test.py | 161 | def test_onmodify_revert_changes(self): | CODE |
| LOW | test/hooks.on-modify.test.py | 179 | def test_onmodify_escaped_backslash(self): | CODE |
| LOW | test/tw-20.test.py | 51 | def test_annotate_edit_does_not_delete(self): | CODE |
| LOW | test/delete.test.py | 89 | def test_delete_single_prompt_loop(self): | CODE |
| LOW | test/delete.test.py | 102 | def test_delete_multiple_prompt_loop(self): | CODE |
| LOW | test/delete.test.py | 111 | def test_delete_bulk_prompt_loop(self): | CODE |
| LOW | test/math.test.py | 62 | def test_compact_value_quoted(self): | CODE |
| LOW | test/math.test.py | 82 | def test_sparse_arg_quoted_literal(self): | CODE |
| LOW | test/math.test.py | 99 | def test_attribute_before_with_math(self): | CODE |
| LOW | test/math.test.py | 105 | def test_attribute_after_with_math(self): | CODE |
| LOW | test/hooks.on-exit.test.py | 59 | def test_onexit_builtin_good_gets_changed_tasks(self): | CODE |
| LOW⚡ | test/bulk.test.py | 49 | def test_bulk_confirmations_single_confirmation_off(self): | CODE |
| LOW⚡ | test/bulk.test.py | 58 | def test_bulk_confirmations_single_confirmation_on(self): | CODE |
| LOW⚡ | test/bulk.test.py | 67 | def test_bulk_confirmations_double_confirmation_off(self): | CODE |
| LOW⚡ | test/bulk.test.py | 77 | def test_bulk_confirmations_double_confirmation_on(self): | CODE |
| LOW⚡ | test/bulk.test.py | 87 | def test_bulk_confirmations_bulk_confirmation_off(self): | CODE |
| LOW | test/bulk.test.py | 112 | def test_bulk_confirmations_bulk_confirmation_on(self): | CODE |
| LOW | test/bulk.test.py | 123 | def test_bulk_delete_no_tests(self): | CODE |
| LOW | test/bulk.test.py | 152 | def test_bulk_delete_all_tests(self): | CODE |
| LOW | test/bulk.test.py | 163 | def test_bulk_delete_quit_tests(self): | CODE |
| LOW | test/append.test.py | 56 | def test_append_error_on_empty(self): | CODE |
| LOW | test/append.test.py | 73 | def test_subst_and_append_at_once(self): | CODE |
| LOW⚡ | test/show.test.py | 63 | def test_show_error_on_multi_args(self): | CODE |
| LOW⚡ | test/show.test.py | 68 | def test_show_no_unrecognized(self): | CODE |
| LOW⚡ | test/show.test.py | 76 | def test_show_uda_urgency_for_non_uda(self): | CODE |
| LOW | test/show.test.py | 87 | def test_show_uda_urgency_for_uda(self): | CODE |
| LOW | test/dependencies.test.py | 46 | def test_removing_missing_dep(self): | CODE |
| LOW | test/dependencies.test.py | 56 | def test_add_dep_to_missing_task(self): | CODE |
| LOW | test/dependencies.test.py | 99 | def test_completed_not_circular(self): | CODE |
| LOW | test/dependencies.test.py | 109 | def test_circular_with_visited_sibling(self): | CODE |
| LOW | test/dependencies.test.py | 121 | def test_dependency_modify_with_cold_pending_cache(self): | CODE |
| LOW | test/dependencies.test.py | 175 | def test_dependency_bulk_removal(self): | CODE |
| LOW | test/dependencies.test.py | 263 | def test_blocking_to_recurring(self): | CODE |
| LOW | test/dependencies.test.py | 314 | def test_dependency_contains_not_matches_other(self): | CODE |
| LOW | test/dependencies.test.py | 369 | def test_set_dependency_on_first_completed_task(self): | CODE |
| LOW | test/dependencies.test.py | 379 | def test_set_dependency_on_second_completed_task(self): | CODE |
| LOW | test/dependencies.test.py | 394 | def test_set_dependency_on_two_completed_tasks(self): | CODE |
| LOW⚡ | test/datetime-negative.test.py | 123 | def test_set_incorrect_datetime_hour_overflow_in_hh_mm(self): | CODE |
| LOW⚡ | test/datetime-negative.test.py | 126 | def test_set_incorrect_datetime_huge_hour_overflow_in_hh_mm(self): | CODE |
| 369 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/hooks.on-modify.test.py | 181 | # Create a task with a slash-escaped tab in it, avoiding TaskWarrior to ensure | COMMENT |
| MEDIUM | test/bash_tap_tw.sh | 56 | # This function is called by bash_tap.sh before running tests, or before | COMMENT |
| MEDIUM | test/uda.test.py | 75 | # Create a task with a UDA. | COMMENT |
| MEDIUM | test/tw-2550.test.sh | 8 | # Create a task outside of the context | COMMENT |
| MEDIUM | test/custom.test.py | 88 | # Create a task directly with TC, avoiding TaskWarrior's creation of the deprecated | COMMENT |
| MEDIUM⚡ | test/info.test.py | 130 | # Create a task directly with TC, avoiding TaskWarrior's creation of the deprecated | COMMENT |
| MEDIUM | test/basetest/task.py | 173 | # Create a copy of the command | COMMENT |
| MEDIUM | test/basetest/task.py | 206 | # Create a copy of the command | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/import-v2.test.py | 31 | CODE | |
| LOW | test/import-v2.test.py | 37 | CODE | |
| LOW | test/undo.test.py | 30 | CODE | |
| LOW | test/version.test.py | 38 | CODE | |
| LOW | test/color.cmd.test.py | 31 | CODE | |
| LOW | test/tw-2575.test.py | 6 | CODE | |
| LOW | test/tw-3527.test.py | 6 | CODE | |
| LOW | test/unusual_task.test.py | 30 | CODE | |
| LOW | test/purge.test.py | 37 | CODE | |
| LOW | test/verbose.test.py | 32 | CODE | |
| LOW | test/read-only.test.py | 30 | CODE | |
| LOW | test/basetest/hooks.py | 1 | CODE | |
| LOW | test/basetest/__init__.py | 1 | CODE | |
| LOW | test/basetest/__init__.py | 2 | CODE | |
| LOW | test/basetest/utils.py | 1 | CODE | |
| LOW | test/basetest/utils.py | 5 | CODE | |
| LOW | test/basetest/meta.py | 1 | CODE | |
| LOW | test/basetest/meta.py | 1 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | test/basetest/hooks.py | 210 | except AttributeError: | CODE |
| HIGH | test/basetest/hooks.py | 219 | except AttributeError: | CODE |
| HIGH | test/basetest/utils.py | 389 | except OSError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/limit.test.py | 96 | # ------------ | COMMENT |
| MEDIUM | .devcontainer/reinstall-cmake.sh | 2 | #------------------------------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .devcontainer/reinstall-cmake.sh | 5 | #------------------------------------------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/dependencies.test.py | 307 | # NOTE: A more robust test is needed as alternative to this | COMMENT |
| LOW | test/basetest/utils.py | 348 | # what file suffixes are executable, so just pass on cmd as-is. | COMMENT |
| MEDIUM | src/sort.cpp | 115 | // Essentially a static implementation of a dynamic operator<. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/basetest/hooks.py | 383 | CODE | |
| LOW | test/basetest/utils.py | 300 | CODE | |
| LOW | test/simpletap/__init__.py | 123 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/basetest/hooks.py | 51 | # Check if the hooks dir already exists | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/enpassant.test.py | 99 | def perform_action(self, action): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | doc/devel/rfcs/client.md | 58 | Example 'John Doe'. | CODE |