Public scan — anyone with this URL can view this analysis. Sign up to track your own repos privately, run scheduled re-scans, and get AI fix prompts via your dashboard.

posit-dev/great-tables

https://github.com/posit-dev/great-tables · scanned 2026-05-16 13:30 UTC (1 day, 8 hours ago) · 10 languages

85 findings (1 legacy + 84 scanner) 8/10 scanners ran 87th percentile · Python · medium (20-100K LoC) Scanner says 91 (lower by 11)

UNIFIED Repobility · multi-layer engine · AI coders

Complete repo analysis

Last scanned 2 days, 2 hours ago · v1 · 85 findings from 2 sources. Findings combine the legacy security pipeline AND the multi-layer engine (atlas, wiring, flows, ranked) AND verified AI agent contributions.

JSON
{# ── 2026-05-17 R27 #5: score breakdown panel ────────────────────── Surfaces the score_breakdown JSON that's been silently stored on Repository for months. Turns hidden math into a trust signal. #}
Score breakdown â 2026-05-17-v4 calibration-aware
Component Sub-score Weight Contribution
structure_score 60.0 0.15 9.00
security_score 100.0 0.25 25.00
testing_score 85.0 0.20 17.00
documentation_score 83.0 0.15 12.45
practices_score 65.0 0.15 9.75
code_quality 70.0 0.10 7.00
Overall 1.00 80.2
Severity distribution — click a segment to filter
Active filters: excluding tests × Reset all
Severity: Critical 0 High 0 Medium 6 Low 68 Source: Legacy 1 9-layer 84 Crowd 0 Layer: Quality 42 Software 32 Api 1 Frontend 1 Security 1 Cicd 8
Scan summary Repository scanned at 91.4/100 with 100.0% coverage. It contains 1649 nodes across 0 cross-layer flows, written primarily in mixed languages. Engine surfaced 84 findings — concentrated in quality (41), software (32), cicd (8). Risk profile is low: 0 critical, 0 high, 5 medium. Recommended next step: open the quality layer findings first — that's where the highest-impact wins live.

Showing 79 of 85 findings. Click TP / FP to vote on a finding's accuracy — votes adjust the confidence weighting and improve detection across the platform.

medium Legacy quality practices conf 1.00 [CFG006] Missing .gitignore: No .gitignore file. Risk of committing secrets and build artifacts.
Add a .gitignore appropriate for your language/framework.
practiceslegacy
medium 9-layer cicd supply-chain conf 1.00 GitHub Action is tag-pinned rather than SHA-pinned
bobheadxi/deployments@v1 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA.
.github/workflows/ci-docs.yaml:49 supply-chaingithub-actionspinned-dependencies
medium 9-layer cicd supply-chain conf 1.00 GitHub Action is tag-pinned rather than SHA-pinned
bobheadxi/deployments@v1 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA.
.github/workflows/ci-docs.yaml:77 supply-chaingithub-actionspinned-dependencies
medium 9-layer security coverage conf 1.00 No auth library detected
The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). Either auth lives in custom code, in a separate service, or is missing.
coverageauth
low 9-layer quality maintenance conf 1.00 145 TODO/FIXME markers
High count of TODO/FIXME/HACK markers — track them as issues so they're not forgotten.
maintenance
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: great_tables/_data_color/constants.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: great_tables/_row_groups.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: great_tables/_types.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: great_tables/loc.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: great_tables/style.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: great_tables/vals.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: tests/test_body.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer software dead-code-candidate conf 1.00 File has no detected symbols: tests/test_shiny.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
dead-code-candidate
low 9-layer quality integrity conf 1.00 Legacy-named symbol `test_cols_width_non_str_deprecated` in tests/test_spanners.py:252
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
integritylegacy-markerdead-code
low 9-layer quality integrity conf 1.00 Legacy-named symbol `test_opt_all_caps_string_deprecated` in tests/test_options.py:769
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
integritylegacy-markerdead-code
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 2 places
Functions with the same first-5-line body hash: great_tables/_locations.py:resolve_vector_i, great_tables/_locations.py:resolve This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate.
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 2 places
Functions with the same first-5-line body hash: great_tables/_substitution.py:to_html, great_tables/_substitution.py:to_html This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate.
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 2 places
Functions with the same first-5-line body hash: great_tables/_gt_data.py:from_data, great_tables/_gt_data.py:from_data This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate.
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 2 places
Functions with the same first-5-line body hash: great_tables/_gt_data.py:reorder, great_tables/_gt_data.py:reorder This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate.
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 2 places
Functions with the same first-5-line body hash: great_tables/_gt_data.py:resolve, great_tables/_gt_data.py:resolve This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate.
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 2 places
Functions with the same first-5-line body hash: great_tables/_data_color/palettes.py:lookup, great_tables/_data_color/palettes.py:lookup This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate.
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 2 places
Functions with the same first-5-line body hash: .github/scripts/no_pandas.py:report_details, .github/scripts/no_pandas.py:report This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate.
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 3 places
Functions with the same first-5-line body hash: great_tables/_formats.py:fmt_number, great_tables/_formats.py:fmt_scientific, great_tables/_formats.py:fmt_engineering This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or d…
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 3 places
Functions with the same first-5-line body hash: great_tables/_formats.py:fmt_number_context, great_tables/_formats.py:fmt_scientific_context, great_tables/_formats.py:fmt_engineering_context This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hy…
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 3 places
Functions with the same first-5-line body hash: great_tables/_formats.py:get_color, great_tables/_formats.py:get_color, great_tables/_formats.py:get_color This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or document why …
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 3 places
Functions with the same first-5-line body hash: great_tables/_formats.py:to_html, great_tables/_formats.py:to_html, great_tables/_formats.py:to_html This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or document why they'r…
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 3 places
Functions with the same first-5-line body hash: great_tables/_formats.py:to_latex, great_tables/_formats.py:to_latex, great_tables/_formats.py:to_latex This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or document why the…
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 3 places
Functions with the same first-5-line body hash: great_tables/_helpers.py:to_html, great_tables/_helpers.py:to_html, great_tables/_helpers.py:to_html This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or document why they'r…
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 3 places
Functions with the same first-5-line body hash: great_tables/_formats_vals.py:wrapper, great_tables/_formats_vals.py:wrapper, great_tables/_formats_vals.py:wrapper This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or docu…
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 3 places
Functions with the same first-5-line body hash: great_tables/_formats_vals.py:val_fmt_number, great_tables/_formats_vals.py:val_fmt_scientific, great_tables/_formats_vals.py:val_fmt_engineering This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code…
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 3 places
Functions with the same first-5-line body hash: great_tables/shiny.py:render_gt, great_tables/shiny.py:render_gt, great_tables/shiny.py:render_gt This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or document why they're s…
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 4 places
Functions with the same first-5-line body hash: great_tables/_utils_selenium.py:add_arguments, great_tables/_utils_selenium.py:add_arguments, great_tables/_utils_selenium.py:add_arguments, great_tables/_utils_selenium.py:add_arguments This is *the* AI-coder failure mode (4× more duplication in vib…
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 4 places
Functions with the same first-5-line body hash: great_tables/_text.py:to_html, great_tables/_text.py:to_html, great_tables/_text.py:to_html, great_tables/_text.py:to_html This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate …
integrityduplicatedry
low 9-layer quality integrity conf 1.00 Near-duplicate function bodies in 4 places
Functions with the same first-5-line body hash: great_tables/_text.py:to_latex, great_tables/_text.py:to_latex, great_tables/_text.py:to_latex, great_tables/_text.py:to_latex This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolid…
integrityduplicatedry
low 9-layer software dead-code conf 1.00 Possibly dead Python function: expressive
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_formats_vals.py:29 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: fmt_bytes_context
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_formats.py:2048 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: fmt_currency_context
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_formats.py:1663 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: fmt_date_context
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_formats.py:2250 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: fmt_datetime_context
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_formats.py:2574 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: fmt_engineering_context
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_formats.py:1085 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: fmt_integer_context
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_formats.py:533 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: fmt_markdown_context
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_formats.py:3015 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: fmt_nanoplot_fn
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_formats.py:5350 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: fmt_number_context
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_formats.py:332 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: fmt_percent_context
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_formats.py:1388 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: fmt_roman_context
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_formats.py:1829 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: fmt_scientific_context
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_formats.py:759 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: fmt_tf_context
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_formats.py:2765 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: fmt_time_context
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_formats.py:2394 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: fmt_units_fn
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_formats.py:3169 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: register_backend
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_databackend.py:25 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: reorder_rows
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_gt_data.py:621 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: replace_column_label
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_gt_data.py:260 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: rtl_modern_unicode_charset
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_utils_render_html.py:1370 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: show
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_export.py:74 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: visit_Import
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
.github/scripts/no_pandas.py:12 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: visit_ImportFrom
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
.github/scripts/no_pandas.py:17 dead-code
low 9-layer software dead-code conf 1.00 Possibly dead Python function: wrapper
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
great_tables/_utils_selenium.py:72 dead-code
low 9-layer quality complexity conf 1.00 Very large file: great_tables/_formats.py (5555 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
complexity
low 9-layer quality complexity conf 1.00 Very large file: great_tables/_formats_vals.py (1311 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
complexity
low 9-layer quality complexity conf 1.00 Very large file: great_tables/_gt_data.py (1417 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
complexity
low 9-layer quality complexity conf 1.00 Very large file: great_tables/_helpers.py (1488 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
complexity
low 9-layer quality complexity conf 1.00 Very large file: great_tables/_options.py (2201 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
complexity
low 9-layer quality complexity conf 1.00 Very large file: great_tables/_utils_nanoplots.py (1526 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
complexity
low 9-layer quality complexity conf 1.00 Very large file: great_tables/_utils_render_html.py (1485 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
complexity
low 9-layer quality complexity conf 1.00 Very large file: tests/test__utils_nanoplots.py (2093 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
complexity
low 9-layer quality complexity conf 1.00 Very large file: tests/test_footnotes.py (1387 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
complexity
low 9-layer quality complexity conf 1.00 Very large file: tests/test_formats.py (2904 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
complexity
info 9-layer quality integrity conf 1.00 Commented-code block (5 lines) in great_tables/_formats.py:2081
A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest.
integritycommented-codedead-code
info 9-layer quality integrity conf 1.00 Commented-code block (5 lines) in great_tables/_gt_data.py:250
A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest.
integritycommented-codedead-code
info 9-layer quality integrity conf 1.00 Commented-code block (5 lines) in great_tables/_helpers.py:680
A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest.
integritycommented-codedead-code
info 9-layer quality integrity conf 1.00 Commented-code block (5 lines) in great_tables/_spanners.py:839
A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest.
integritycommented-codedead-code
info 9-layer quality integrity conf 1.00 Commented-code block (5 lines) in great_tables/_utils_nanoplots.py:723
A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest.
integritycommented-codedead-code
info 9-layer quality integrity conf 1.00 Commented-code block (5 lines) in great_tables/_utils_render_html.py:179
A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest.
integritycommented-codedead-code
info 9-layer quality integrity conf 1.00 Commented-code block (6 lines) in great_tables/_locations.py:646
A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest.
integritycommented-codedead-code
info 9-layer quality integrity conf 1.00 Commented-code block (6 lines) in great_tables/_utils_render_latex.py:291
A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest.
integritycommented-codedead-code
info 9-layer quality integrity conf 1.00 Commented-code block (7 lines) in great_tables/_options.py:128
A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest.
integritycommented-codedead-code
info 9-layer api coverage conf 1.00 No API endpoints detected
The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported.
coverage
info 9-layer frontend coverage conf 1.00 No frontend routes/components detected
No React/Vue/Next routes were found. This is fine for backend-only repos.
coverage
{# ── 2026-05-17 Round 14: AI-agent bridge footer ────────────────────── Discoverability: the /agents/voting/ guide + MCP manifest exist but aren't linked from anywhere users actually land. Small, opt-in footer. #}
For AI agents: Voting guide (TP/FP) MCP manifest Stdio wrapper SARIF Integrate Findings queue Vote TP/FP on findings to calibrate the engine.
For AI agents + API integrations
Email me when this repo regresses
Free. We re-scan periodically; new criticals → your inbox. No signup required for the scan itself.
API access

This page is publicly accessible at: https://repobility.com/scan/146b82ad-5bdb-4418-b4b8-95e62ed9b3c7/

To check status programmatically (no auth required):

curl -s https://repobility.com/api/v1/public/scan/146b82ad-5bdb-4418-b4b8-95e62ed9b3c7/

Important — please don't re-submit the same URL repeatedly. The submission endpoint is idempotent: re-submitting the same git URL returns this same scan_token, not a new one. To re-scan this repo, sign up free and use the dashboard.