A time-series database for high-performance real-time analytics packaged as a Postgres extension
This report summarizes scanner evidence for timescale/timescaledb, a C project with 23,777 GitHub stars. SynthScan examined 332,633 lines of code across 1449 source files, recording 406 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 1.5 (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? 389 finding(s).
Are imports declared and package/API names verified? 0 finding(s).
Are wrappers, guards, and repeated structures necessary? 21 finding(s).
Which changes need focused human review? 406 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 406 distinct pattern matches across 15 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/pg_regress.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | test/runner_isolation.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | test/pg_prove.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | test/t/001_replication_telemetry.pl | 1 | # This file and its contents are licensed under the Timescale License. | COMMENT |
| LOW | test/t/002_compressed_chunk_apache.pl | 1 | # This file and its contents are licensed under the Apache License 2.0. | COMMENT |
| LOW | test/src/test_with_clause_parser.c | 1 | /* | COMMENT |
| LOW | test/src/test_utils.c | 1 | /* | COMMENT |
| LOW | test/src/loader/init.c | 1 | /* | COMMENT |
| LOW | test/src/telemetry/test_telemetry.c | 1 | /* | COMMENT |
| LOW | test/src/bgw/log.c | 1 | /* | COMMENT |
| LOW | test/src/bgw/timer_mock.c | 1 | /* | COMMENT |
| LOW | test/src/bgw/test_job_refresh.c | 1 | /* | COMMENT |
| LOW | test/src/bgw/scheduler_mock.c | 1 | /* | COMMENT |
| LOW | test/src/bgw/scheduler_mock.c | 21 | #include <utils/guc.h> | COMMENT |
| LOW | test/src/bgw/params.c | 1 | /* | COMMENT |
| LOW | tsl/test/t/006_granular_refresh_restart.pl | 1 | # This file and its contents are licensed under the Timescale License. | COMMENT |
| LOW | tsl/test/t/007_custom_toaster.pl | 1 | # This file and its contents are licensed under the Timescale License. | COMMENT |
| LOW | tsl/test/src/decompress_arithmetic_test_impl.c | 1 | /* | COMMENT |
| LOW | tsl/test/src/decompress_arithmetic_test_impl.c | 281 | COMMENT | |
| LOW | tsl/test/src/compression_sql_test.c | 61 | */ | COMMENT |
| LOW | tsl/test/src/compression_sql_test.c | 81 | #define ALGO AIC | COMMENT |
| LOW | tsl/test/src/compression_sql_test.c | 101 | #define CTYPE pg_uuid_t | COMMENT |
| LOW | tsl/test/src/compression_unit_test.c | 1 | /* | COMMENT |
| LOW | tsl/test/src/compression_unit_test.c | 21 | #include <utils/typcache.h> | COMMENT |
| LOW | tsl/src/chunkwise_agg.c | 1 | /* | COMMENT |
| LOW | tsl/src/process_utility.c | 1 | /* | COMMENT |
| LOW | tsl/src/process_utility.c | 21 | #include "bgw_policy/policies_v2.h" | COMMENT |
| LOW | tsl/src/chunk_merge.c | 1 | /* | COMMENT |
| LOW | tsl/src/chunk_merge.c | 21 | #include <executor/spi.h> | COMMENT |
| LOW | tsl/src/chunk_merge.c | 41 | #include "chunk.h" | COMMENT |
| LOW | tsl/src/init.c | 1 | /* | COMMENT |
| LOW | tsl/src/init.c | 21 | #include "compression/algorithms/array.h" | COMMENT |
| LOW | tsl/src/init.c | 41 | #include "continuous_aggs/utils.h" | COMMENT |
| LOW | tsl/src/chunk.c | 1 | /* | COMMENT |
| LOW | tsl/src/chunk.c | 21 | #include <nodes/nodes.h> | COMMENT |
| LOW | tsl/src/chunk_split.c | 1 | /* | COMMENT |
| LOW | tsl/src/chunk_split.c | 21 | #include <utils/syscache.h> | COMMENT |
| LOW | tsl/src/reorder.c | 21 | #include <access/transam.h> | COMMENT |
| LOW | tsl/src/reorder.c | 41 | #include <storage/bufmgr.h> | COMMENT |
| LOW | tsl/src/chunk_api.c | 1 | /* | COMMENT |
| LOW | tsl/src/chunk_api.c | 21 | #include <funcapi.h> | COMMENT |
| LOW | tsl/src/planner.c | 1 | /* | COMMENT |
| LOW | tsl/src/continuous_aggs/materialize.c | 1 | /* | COMMENT |
| LOW | tsl/src/continuous_aggs/insert.c | 1 | /* | COMMENT |
| LOW | tsl/src/continuous_aggs/add_column.c | 1 | /* | COMMENT |
| LOW | tsl/src/continuous_aggs/add_column.c | 21 | #include <utils/rel.h> | COMMENT |
| LOW | tsl/src/continuous_aggs/invalidation.c | 1 | /* | COMMENT |
| LOW | tsl/src/continuous_aggs/invalidation.c | 21 | #include <scanner.h> | COMMENT |
| LOW | tsl/src/continuous_aggs/rewrite_with_caggs.c | 1 | /* | COMMENT |
| LOW | tsl/src/continuous_aggs/create.c | 21 | #include <access/sysattr.h> | COMMENT |
| LOW | tsl/src/continuous_aggs/create.c | 41 | #include <optimizer/clauses.h> | COMMENT |
| LOW | tsl/src/continuous_aggs/create.c | 61 | #include <utils/ruleutils.h> | COMMENT |
| LOW | tsl/src/continuous_aggs/refresh.c | 1 | /* | COMMENT |
| LOW | tsl/src/continuous_aggs/refresh.c | 21 | #include <utils/snapmgr.h> | COMMENT |
| LOW | tsl/src/continuous_aggs/utils.c | 1 | /* | COMMENT |
| LOW | tsl/src/continuous_aggs/common.h | 1 | /* | COMMENT |
| LOW | tsl/src/continuous_aggs/common.h | 21 | #include <nodes/pg_list.h> | COMMENT |
| LOW | tsl/src/continuous_aggs/tenant_tracker.c | 181 | #include <storage/lwlock.h> | COMMENT |
| LOW | tsl/src/continuous_aggs/finalize.h | 1 | /* | COMMENT |
| LOW | tsl/src/continuous_aggs/invalidation_threshold.c | 1 | /* | COMMENT |
| 271 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tsl/test/t/006_granular_refresh_restart.pl | 38 | # =========================================================================== | COMMENT |
| MEDIUM | tsl/test/t/006_granular_refresh_restart.pl | 40 | # =========================================================================== | COMMENT |
| MEDIUM | tsl/test/t/006_granular_refresh_restart.pl | 150 | # =========================================================================== | COMMENT |
| MEDIUM | tsl/test/t/006_granular_refresh_restart.pl | 152 | # =========================================================================== | COMMENT |
| MEDIUM | tsl/test/t/006_granular_refresh_restart.pl | 182 | # =========================================================================== | COMMENT |
| MEDIUM | tsl/test/t/006_granular_refresh_restart.pl | 185 | # =========================================================================== | COMMENT |
| MEDIUM | tsl/test/t/006_granular_refresh_restart.pl | 296 | # =========================================================================== | COMMENT |
| MEDIUM | tsl/test/t/006_granular_refresh_restart.pl | 305 | # =========================================================================== | COMMENT |
| MEDIUM | .github/workflows/release_feature_freeze_ceremony.yaml | 122 | # ------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/release_feature_freeze_ceremony.yaml | 126 | # ------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/release_feature_freeze_ceremony.yaml | 173 | # ------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/release_feature_freeze_ceremony.yaml | 177 | # ------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | README.md | 35 | ### Step 1: Start TimescaleDB | COMMENT |
| LOW | README.md | 72 | ### Step 2: Connect to TimescaleDB | COMMENT |
| LOW | README.md | 96 | ### Step 3: Create Your First Hypertable | COMMENT |
| LOW | README.md | 123 | ### Step 4: Insert Sample Data | COMMENT |
| LOW | README.md | 167 | ### Step 5: Run Your First Analytical Queries | COMMENT |
| LOW | README.md | 252 | #### Step 1: Create the Continuous Aggregate | COMMENT |
| LOW | README.md | 272 | #### Step 2: Add a Refresh Policy | COMMENT |
| LOW | README.md | 290 | #### Step 3: Query the Continuous Aggregate | COMMENT |
| LOW | docs/getting-started/nyc-taxi/README.md | 21 | ### Step 1: Start TimescaleDB | COMMENT |
| LOW | docs/getting-started/nyc-taxi/README.md | 58 | ### Step 2: Connect to TimescaleDB | COMMENT |
| LOW | docs/getting-started/nyc-taxi/README.md | 82 | ### Step 3: Create the Schema | COMMENT |
| LOW | docs/getting-started/nyc-taxi/README.md | 128 | ### Step 4: Load Sample Data | COMMENT |
| LOW | docs/getting-started/nyc-taxi/README.md | 199 | ### Step 5: Run Sample Queries | COMMENT |
| LOW | docs/getting-started/financial-ticks/README.md | 54 | ### Step 1: Start TimescaleDB | COMMENT |
| LOW | docs/getting-started/financial-ticks/README.md | 91 | ### Step 2: Connect to TimescaleDB | COMMENT |
| LOW | docs/getting-started/financial-ticks/README.md | 114 | ### Step 3: Create the Schema | COMMENT |
| LOW | docs/getting-started/financial-ticks/README.md | 139 | ### Step 4: Load Sample Data into TimescaleDB | COMMENT |
| LOW | docs/getting-started/financial-ticks/README.md | 156 | ### Step 5: Run Sample Queries | COMMENT |
| LOW | docs/getting-started/events-uuidv7/README.md | 20 | ### Step 1: Start TimescaleDB | COMMENT |
| LOW | docs/getting-started/events-uuidv7/README.md | 57 | ### Step 2: Connect to TimescaleDB | COMMENT |
| LOW | docs/getting-started/events-uuidv7/README.md | 81 | ### Step 3: Create the Schema | COMMENT |
| LOW | docs/getting-started/events-uuidv7/README.md | 122 | ### Step 4: Load Sample Data | COMMENT |
| LOW | docs/getting-started/events-uuidv7/README.md | 193 | ### Step 5: Run Sample Queries | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/label-released.py | 61 | # Create the label if needed | COMMENT |
| MEDIUM | scripts/upload_ci_stats.sh | 74 | # Create the job record. | COMMENT |
| MEDIUM | scripts/test_update_smoke.sh | 136 | # Create a 1.7.5 version Upgrade | COMMENT |
| MEDIUM | scripts/backport.py | 573 | # Create the backport PR. | COMMENT |
| MEDIUM | .github/workflows/libfuzzer.yaml | 242 | # Create the fuzzing functions | COMMENT |
| MEDIUM | .github/workflows/sanitizer-build-and-test.yaml | 112 | # Create a directory for sanitizer logs. This directory is referenced by | COMMENT |
| MEDIUM | .github/workflows/llm-fuzzer.yaml | 134 | # Create a directory for sanitizer logs. This directory is referenced by | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/label-released.py | 0 | a simple function to use requests.post to make the graphql api call. | STRING |
| HIGH | scripts/backport.py | 0 | a simple function to use requests.post to make the graphql api call. | STRING |
| HIGH | scripts/check_changelog_format.py | 0 | a simple function to use requests.post to make the graphql api call. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tsl/src/compression/algorithms/fastlanes/README.md | 126 | Compared to the C++ implementation, where the kernel is auto-generated code and C++ templates or the Rust | CODE |
| HIGH | scripts/check_license.sh | 9 | # - test/sql/dump which contains auto-generated code | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/pg_prove.sh | 10 | # Note that you can also use regular expressions to run multiple | COMMENT |
| LOW | tsl/src/import/access/heap/heapam.c | 291 | * If heaptup is a private copy, release it. Don't forget to copy t_self | COMMENT |
| LOW | scripts/upload_ci_stats.sh | 17 | # don't forget to append the needed migration code below. | COMMENT |
| LOW | scripts/upload_ci_stats.sh | 17 | # don't forget to append the needed migration code below. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tsl/test/t/002_logrepl_decomp_marker.pl | 17 | # Set max_process_workers to 0 before starting the node. wal_level has to be | COMMENT |
| LOW | scripts/delete_released_change_logs.sh | 3 | # Check if both old_version and new_version have been provided | COMMENT |
| LOW | scripts/check_changelog_format.py | 66 | # Check if a line matches any of the specified patterns | STRING |
| LOW | scripts/check_changelog_format.py | 98 | # Check if the file exists | STRING |
| LOW | scripts/check_changelog_format.py | 106 | # Read the file and check non-empty lines | STRING |
| LOW | .github/gh_matrix_builder.py | 341 | # Check if we need to check for the flaky tests. Determine which test files | COMMENT |
| LOW | .github/workflows/changelog-check.yaml | 8 | # Check if the PR creates a separate file with changelog entry in the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/test_memory_spikes.py | 60 | CODE | |
| LOW | scripts/check_updates.py | 18 | CODE | |
| LOW | scripts/check_updates.py | 60 | CODE | |
| LOW | scripts/check_updates.py | 97 | CODE | |
| LOW | scripts/check_changelog_format.py | 82 | CODE | |
| LOW | scripts/githooks/commit_msg.py | 23 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/check_changelog_format.py | 129 | except github.UnknownObjectException: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tsl/src/continuous_aggs/refresh.c | 1620 | * In order to don't produce unnecessary batches we need to check if the start and end of the | COMMENT |
| LOW | tsl/src/compression/recompress.c | 896 | * compressed. But we need to check if there are any uncompressed tuples in the | COMMENT |
| LOW | src/process_utility.c | 1857 | * If it is a "GRANT/REVOKE ON ALL TABLES IN SCHEMA" operation then we need to check if | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/backport.py | 217 | def should_backport_by_labels(number, title, labels): | CODE |
| LOW | scripts/backport.py | 242 | def should_backport_by_milestone(number, title, milestone): | CODE |
| LOW | scripts/githooks/commit_msg.py | 59 | def check_subject_body_separtor(self): | CODE |
| LOW | scripts/githooks/commit_msg.py | 70 | def check_subject_capitalized(self): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/pgspot.yaml | 1 | # Test our extension sql scripts are following security best practices | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/test_update_smoke.sh | 8 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/check_updates.py | 219 | except Exception: # pylint: disable=broad-except | CODE |