Repository Analysis

paperless-ngx/paperless-ngx

A community-supported supercharged document management system: scan, index and archive all your documents

13.4 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of paperless-ngx/paperless-ngx, a Python project with 44,670 GitHub stars. SynthScan v2.0 examined 255,673 lines of code across 1038 source files, recording 2900 pattern matches distributed across 20 syntactic categories. The overall adjusted score of 13.4 places this repository in the Low AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

13.4
Adjusted Score
13.4
Raw Score
100%
Time Factor
2026-08-28
Last Push
44.7K
Stars
Python
Language
255.7K
Lines of Code
1.0K
Files
2.9K
Pattern Hits
2026-08-29
Scan Date
0.03
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 13HIGH 20MEDIUM 256LOW 2611

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 2900 distinct pattern matches across 20 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers2190 hits · 1952 pts
SeverityFileLineSnippetContext
LOWsrc-ui/src/app/utils/query-params.ts60export function transformLegacyFilterRules(CODE
LOWsrc-ui/src/app/utils/query-params.ts103export function filterRulesFromQueryParams(CODE
LOWsrc-ui/src/app/utils/query-params.ts151export function queryParamsFromFilterRules(filterRules: FilterRule[]): Params {CODE
LOWsrc-ui/src/app/utils/http.ts1export function getFilenameFromContentDisposition(header: string): string {CODE
LOWsrc-ui/src/app/utils/color.ts122export function estimateBrightnessForColor(colorHex: string) {CODE
LOWsrc/paperless_ai/embedding.py105def get_configured_model_name(config: AIConfig) -> str:CODE
LOWsrc/paperless_ai/embedding.py118def _normalize_llm_index_text(text: str) -> str:CODE
LOWsrc/paperless_ai/vector_store.py384 def _delete_chunks_by_document_id(self, document_id: int) -> None:CODE
LOWsrc/paperless_ai/vector_store.py736 def _run_structural_migration(self, migration: Migration) -> None:CODE
LOWsrc/paperless_ai/matching.py49def resolve_correspondent_ids(CODE
LOWsrc/paperless_ai/matching.py56def resolve_document_type_ids(ids: list[int], user: User | None) -> list[DocumentType]:CODE
LOWsrc/paperless_ai/matching.py82def match_correspondents_by_name(CODE
LOWsrc/paperless_ai/matching.py89def match_document_types_by_name(CODE
LOWsrc/paperless_ai/matching.py96def match_storage_paths_by_name(CODE
LOWsrc/paperless_ai/chat.py38def _build_document_reference(CODE
LOWsrc/paperless_ai/chat.py88def _format_chat_metadata_trailer(references: list[dict[str, int | str]]) -> str:CODE
LOWsrc/paperless_ai/chat.py95def stream_chat_with_documents(CODE
LOWsrc/paperless_ai/chat.py111def _stream_chat_with_documents(CODE
LOWsrc/paperless_ai/taxonomy.py50def empty_taxonomy_candidates() -> TaxonomyCandidates:CODE
LOWsrc/paperless_ai/taxonomy.py127def _visible_ranked_candidates(CODE
LOWsrc/paperless_ai/taxonomy.py159def build_taxonomy_candidates(CODE
LOWsrc/paperless_ai/taxonomy.py246def format_taxonomy_for_prompt(CODE
LOWsrc/paperless_ai/indexing.py44def queue_llm_index_update_if_needed(*, rebuild: bool, reason: str) -> bool:CODE
LOWsrc/paperless_ai/indexing.py219def _check_and_run_migrations(CODE
LOWsrc/paperless_ai/indexing.py382def _exclude_document_id_filter(document_id: int | str):CODE
LOWsrc/paperless_ai/indexing.py495def llm_index_add_or_update_document(document: Document):CODE
LOWsrc/paperless_ai/indexing.py562def llm_index_remove_document(document: Document):CODE
LOWsrc/paperless_ai/ai_classifier.py123def build_localization_prompt(CODE
LOWsrc/paperless_ai/ai_classifier.py230def _restrict_to_shown_candidates(CODE
LOWsrc/paperless_ai/ai_classifier.py273def get_ai_document_classification(CODE
LOWsrc/paperless_ai/tests/test_lazy_imports.py9 def test_importing_tasks_does_not_load_ai_libraries(self) -> None:CODE
LOWsrc/paperless_ai/tests/test_tables.py25 def test_create_is_idempotent(self, conn: sqlite3.Connection) -> None:CODE
LOWsrc/paperless_ai/tests/test_tables.py39 def test_insert_many_then_lookup_by_document_id(CODE
LOWsrc/paperless_ai/tests/test_tables.py63 def test_delete_for_document_removes_only_that_document(CODE
LOWsrc/paperless_ai/tests/test_tables.py84 def test_delete_all_clears_every_row(self, conn: sqlite3.Connection) -> None:CODE
LOWsrc/paperless_ai/tests/test_tables.py101 def test_count_reflects_live_rows(self, conn: sqlite3.Connection) -> None:CODE
LOWsrc/paperless_ai/tests/test_tables.py121 def test_upsert_many_then_all_modified_times(CODE
LOWsrc/paperless_ai/tests/test_tables.py146 def test_upsert_many_overwrites_existing_value(CODE
LOWsrc/paperless_ai/tests/test_tables.py164 def test_delete_for_document_removes_only_that_row(CODE
LOWsrc/paperless_ai/tests/test_tables.py184 def test_delete_all_clears_every_row(self, conn: sqlite3.Connection) -> None:CODE
LOWsrc/paperless_ai/tests/test_tables.py201 def test_copy_all_streams_every_row_to_destination(CODE
LOWsrc/paperless_ai/tests/test_tables.py241 def test_typed_accessor_roundtrip(CODE
LOWsrc/paperless_ai/tests/test_tables.py263 def test_total_inserts_starts_at_zero(self, conn: sqlite3.Connection) -> None:CODE
LOWsrc/paperless_ai/tests/test_tables.py275 def test_increment_total_inserts_accumulates(CODE
LOWsrc/paperless_ai/tests/test_tables.py292 def test_increment_total_inserts_is_a_single_statement(CODE
LOWsrc/paperless_ai/tests/test_tables.py325 def test_reset_total_inserts_sets_absolute_value(CODE
LOWsrc/paperless_ai/tests/test_prompts.py15 def test_renders_assigned_block_with_all_fields_set(self) -> None:CODE
LOWsrc/paperless_ai/tests/test_prompts.py39 def test_renders_assigned_block_defaults_for_empty_fields(self) -> None:CODE
LOWsrc/paperless_ai/tests/test_prompts.py62 def test_renders_taxonomy_block_empty_when_both_fields_empty(self) -> None:CODE
LOWsrc/paperless_ai/tests/test_prompts.py113 def test_render_prompt_resolves_every_prompt_name(CODE
LOWsrc/paperless_ai/tests/test_embedding.py63def test_get_embedding_model_openai(mock_ai_config):CODE
LOWsrc/paperless_ai/tests/test_embedding.py85def test_get_embedding_model_openai_without_api_key_sends_placeholder(CODE
LOWsrc/paperless_ai/tests/test_embedding.py103def test_get_embedding_model_openai_prefers_embedding_endpoint(mock_ai_config):CODE
LOWsrc/paperless_ai/tests/test_embedding.py125def test_get_embedding_model_openai_blocks_internal_endpoint_when_disallowed(CODE
LOWsrc/paperless_ai/tests/test_embedding.py138def test_get_embedding_model_huggingface(mock_ai_config):CODE
LOWsrc/paperless_ai/tests/test_embedding.py155def test_get_embedding_model_ollama(mock_ai_config):CODE
LOWsrc/paperless_ai/tests/test_embedding.py172def test_get_embedding_model_ollama_prefers_embedding_endpoint(mock_ai_config):CODE
LOWsrc/paperless_ai/tests/test_embedding.py190def test_get_embedding_model_ollama_blocks_internal_endpoint_when_disallowed(CODE
LOWsrc/paperless_ai/tests/test_embedding.py202def test_get_embedding_model_invalid_backend(mock_ai_config):CODE
LOWsrc/paperless_ai/tests/test_embedding.py220def test_get_configured_model_name_falls_back_to_backend_default(CODE
2130 more matches not shown…
Decorative Section Separators216 hits · 726 pts
SeverityFileLineSnippetContext
MEDIUM.github/workflows/ci-release.yml192 # ---------------------------------------------------------------------------COMMENT
MEDIUM.github/workflows/ci-release.yml194 # ---------------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/celery.py13# ---------------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/celery.py19# ---------------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/mail.py451 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/mail.py453 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/mail.py99 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/mail.py101 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/mail.py141 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/mail.py143 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/mail.py169 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/mail.py171 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/mail.py195 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/mail.py197 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/mail.py287 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/mail.py289 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/mail.py322 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/mail.py324 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tesseract.py96 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tesseract.py98 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tesseract.py108 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tesseract.py110 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tesseract.py135 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tesseract.py137 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tesseract.py142 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tesseract.py144 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tesseract.py77 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tesseract.py79 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tesseract.py155 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tesseract.py157 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tika.py90 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tika.py92 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tika.py137 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tika.py139 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tika.py164 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tika.py166 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tika.py205 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tika.py207 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tika.py278 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tika.py280 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tika.py313 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tika.py315 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tika.py394 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/tika.py396 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/remote.py117 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/remote.py119 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/remote.py172 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/remote.py174 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/remote.py203 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/remote.py205 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/remote.py228 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/remote.py230 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/remote.py282 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/remote.py284 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/remote.py304 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/remote.py306 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/remote.py393 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/remote.py395 # ------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/registry.py47# ---------------------------------------------------------------------------COMMENT
MEDIUMsrc/paperless/parsers/registry.py49# ---------------------------------------------------------------------------COMMENT
156 more matches not shown…
Hallucination Indicators13 hits · 130 pts
SeverityFileLineSnippetContext
CRITICALsrc-ui/src/app/services/document-list-view.service.ts283 if (!this.router.routerState.snapshot.url.includes('/view/')) {CODE
CRITICALsrc-ui/src/app/services/document-list-view.service.ts348 replaceUrl: !this.router.routerState.snapshot.url.includes('?'), // in case navigating from params-less /dCODE
CRITICALsrc/paperless/validators.py4from django.core.exceptions import ValidationErrorCODE
CRITICALsrc/paperless_mail/tests/test_mail.py1649 self.mailMocker.bogus_mailbox.folder.list.assert_called_once()CODE
CRITICALsrc/paperless_mail/tests/test_mail.py1682 self.mailMocker.bogus_mailbox.folder.list.assert_called_once()CODE
CRITICALsrc/documents/models.py9from django.core.exceptions import ValidationErrorCODE
CRITICALsrc/documents/validators.py3from django.core.exceptions import ValidationErrorCODE
CRITICALsrc/documents/serialisers.py19from django.core.exceptions import ValidationErrorCODE
CRITICALsrc/documents/filters.py15from django.core.exceptions import FieldErrorCODE
CRITICALsrc/documents/views.py343 ) and self.request.user.ui_settings.settings.get("language"):CODE
CRITICALsrc/documents/views.py344 lang = self.request.user.ui_settings.settings.get("language")CODE
CRITICALsrc/documents/tests/test_bulk_edit.py734 mock_consume_file.return_value.set.return_value.apply_async.assert_called_once()CODE
CRITICALsrc/documents/tests/test_api_document_versions.py12from django.core.exceptions import FieldErrorCODE
Excessive Try-Catch Wrapping130 hits · 129 pts
SeverityFileLineSnippetContext
LOWdocker/rootfs/usr/local/bin/wait-for-redis.py44 except Exception as e:CODE
LOWdocs/development.md558 except Exception as e:CODE
LOWsrc/paperless_ai/client.py164 except Exception as exc:CODE
MEDIUMsrc/paperless_ai/client.py159def _normalize_timeouts(self) -> Iterator[None]:CODE
LOWsrc/paperless_ai/chat.py106 except Exception as e:CODE
LOWsrc/paperless_ai/ai_classifier.py194 except Exception:CODE
LOWsrc/paperless/utils.py151 except Exception:CODE
LOWsrc/paperless/utils.py160 except Exception as e:CODE
LOWsrc/paperless/parsers/mail.py497 except Exception as err:CODE
LOWsrc/paperless/parsers/mail.py534 except Exception as err:CODE
LOWsrc/paperless/parsers/mail.py607 except Exception as err:CODE
LOWsrc/paperless/parsers/mail.py738 except Exception as err:CODE
LOWsrc/paperless/parsers/mail.py836 except Exception as err:CODE
LOWsrc/paperless/parsers/tesseract.py218 except Exception as e:CODE
LOWsrc/paperless/parsers/tesseract.py231 except Exception as e:CODE
LOWsrc/paperless/parsers/tesseract.py362 except Exception as e:CODE
LOWsrc/paperless/parsers/tesseract.py405 except Exception as e:CODE
LOWsrc/paperless/parsers/tesseract.py428 except Exception as e:CODE
LOWsrc/paperless/parsers/tesseract.py548 except Exception as e:CODE
LOWsrc/paperless/parsers/tesseract.py561 except Exception as e:CODE
LOWsrc/paperless/parsers/tesseract.py646 except Exception as e:CODE
LOWsrc/paperless/parsers/tesseract.py649 except Exception as e:CODE
LOWsrc/paperless/parsers/tika.py262 except Exception as err:CODE
LOWsrc/paperless/parsers/tika.py386 except Exception as e:CODE
LOWsrc/paperless/parsers/tika.py452 except Exception as err:CODE
LOWsrc/paperless/parsers/remote.py469 except Exception as e:CODE
LOWsrc/paperless/parsers/registry.py239 except Exception:CODE
LOWsrc/paperless/parsers/utils.py63 except Exception:CODE
LOWsrc/paperless/parsers/utils.py106 except Exception:CODE
LOWsrc/paperless/parsers/utils.py263 except Exception as e:CODE
LOWsrc/paperless/parsers/utils.py303 except Exception as e:CODE
LOWsrc/paperless/parsers/utils.py335 except Exception as e:CODE
LOWsrc/paperless_mail/mail.py243 except Exception as e:CODE
LOWsrc/paperless_mail/mail.py308 except Exception:CODE
LOWsrc/paperless_mail/mail.py587 except Exception as e:CODE
LOWsrc/paperless_mail/mail.py636 except Exception as e:CODE
LOWsrc/paperless_mail/mail.py726 except Exception as e:CODE
LOWsrc/paperless_mail/mail.py732 except Exception as e:CODE
LOWsrc/paperless_mail/mail.py768 except Exception as e:CODE
LOWsrc/paperless_mail/mail.py791 except Exception as err:CODE
LOWsrc/paperless_mail/mail.py827 except Exception as err:CODE
LOWsrc/paperless_mail/mail.py877 except Exception as e:CODE
LOWsrc/documents/classifier.py88 except Exception as e: # pragma: no coverCODE
LOWsrc/documents/classifier.py171 except Exception as err:CODE
LOWsrc/documents/tasks.py263 except Exception as e:CODE
LOWsrc/documents/tasks.py464 except Exception:CODE
LOWsrc/documents/tasks.py498 except Exception as e: # pragma: no coverCODE
LOWsrc/documents/tasks.py833 except Exception as exc:CODE
LOWsrc/documents/tasks.py871 except Exception as exc:CODE
LOWsrc/documents/validators.py43 except Exception as e:CODE
LOWsrc/documents/parsers.py119 except Exception as e: # pragma: no coverCODE
LOWsrc/documents/consumer.py323 except Exception as e:CODE
LOWsrc/documents/consumer.py392 except Exception as e:CODE
LOWsrc/documents/consumer.py452 except Exception as e:CODE
LOWsrc/documents/consumer.py571 except Exception as e:CODE
LOWsrc/documents/consumer.py775 except Exception as e:CODE
LOWsrc/documents/consumer.py864 except Exception as e:CODE
LOWsrc/documents/consumer.py965 except Exception: # pragma: no coverCODE
LOWsrc/documents/barcodes.py356 except Exception as e: # pragma: no coverCODE
LOWsrc/documents/barcodes.py441 except Exception as e:CODE
70 more matches not shown…
Unused Imports99 hits · 90 pts
SeverityFileLineSnippetContext
LOWsrc/paperless_ai/db.py1CODE
LOWsrc/paperless_ai/embedding.py7CODE
LOWsrc/paperless_ai/vector_store.py750CODE
LOWsrc/paperless_ai/taxonomy.py23CODE
LOWsrc/paperless_ai/indexing.py27CODE
LOWsrc/paperless_ai/indexing.py28CODE
LOWsrc/paperless/logging.py1CODE
LOWsrc/paperless/consumers.py1CODE
LOWsrc/paperless/__init__.py1CODE
LOWsrc/paperless/__init__.py2CODE
LOWsrc/paperless/__init__.py3CODE
LOWsrc/paperless/__init__.py4CODE
LOWsrc/paperless/__init__.py5CODE
LOWsrc/paperless/parsers/mail.py14CODE
LOWsrc/paperless/parsers/tesseract.py1CODE
LOWsrc/paperless/parsers/tika.py10CODE
LOWsrc/paperless/parsers/remote.py15CODE
LOWsrc/paperless/parsers/registry.py33CODE
LOWsrc/paperless/parsers/__init__.py36CODE
LOWsrc/paperless/parsers/utils.py9CODE
LOWsrc/paperless/parsers/text.py9CODE
LOWsrc/paperless/tests/test_registry.py10CODE
LOWsrc/paperless/tests/conftest.py11CODE
LOWsrc/paperless/tests/test_checks_v3.py3CODE
LOWsrc/paperless/tests/test_ocr_config.py3CODE
LOWsrc/paperless/tests/test_parser_utils.py3CODE
LOWsrc/paperless/tests/test_remote_ocr_config.py3CODE
LOWsrc/paperless/tests/parsers/conftest.py7CODE
LOWsrc/paperless/tests/parsers/test_remote_parser.py16CODE
LOWsrc/paperless/tests/parsers/test_text_parser.py8CODE
LOWsrc/paperless/tests/parsers/test_tesseract_parser.py9CODE
LOW…/paperless/tests/parsers/test_convert_image_to_pdfa.py12CODE
LOWsrc/paperless/tests/parsers/test_parse_modes.py12CODE
LOWsrc/paperless_mail/tests/factories.py1CODE
LOWsrc/documents/mail.py1CODE
LOWsrc/documents/classifier.py1CODE
LOWsrc/documents/__init__.py2CODE
LOWsrc/documents/parsers.py1CODE
LOWsrc/documents/apps.py36CODE
LOWsrc/documents/bulk_download.py1CODE
LOWsrc/documents/caching.py1CODE
LOWsrc/documents/consumer.py187CODE
LOWsrc/documents/utils.py19CODE
LOWsrc/documents/utils.py20CODE
LOWsrc/documents/versioning.py1CODE
LOWsrc/documents/barcodes.py1CODE
LOWsrc/documents/serialisers.py1CODE
LOWsrc/documents/bulk_edit.py1CODE
LOWsrc/documents/regex.py1CODE
LOWsrc/documents/signals/handlers.py1CODE
LOWsrc/documents/tests/test_share_link_bundles.py1CODE
LOWsrc/documents/tests/test_management_consumer.py14CODE
LOWsrc/documents/tests/conftest.py21CODE
LOWsrc/documents/tests/test_consumer_archive.py3CODE
LOWsrc/documents/tests/test_version_conditionals.py21CODE
LOWsrc/documents/tests/test_sanity_check.py7CODE
LOWsrc/documents/tests/test_management.py1CODE
LOWsrc/documents/tests/test_api_chat.py1CODE
LOWsrc/documents/tests/factories.py5CODE
LOWsrc/documents/tests/test_api_document_versions.py1CODE
39 more matches not shown…
Self-Referential Comments28 hits · 82 pts
SeverityFileLineSnippetContext
MEDIUMdocker/compose/docker-compose.sqlite.yml2# This file contains everything paperless needs to run.COMMENT
MEDIUMdocker/compose/docker-compose.mariadb.yml2# This file contains everything paperless needs to run.COMMENT
MEDIUMdocker/compose/docker-compose.postgres-tika.yml2# This file contains everything paperless needs to run.COMMENT
MEDIUMdocker/compose/docker-compose.postgres.yml2# This file contains everything paperless needs to run.COMMENT
MEDIUMdocker/compose/docker-compose.sqlite-tika.yml2# This file contains everything paperless needs to run.COMMENT
MEDIUMdocker/compose/docker-compose.mariadb-tika.yml2# This file contains everything paperless needs to run.COMMENT
MEDIUMdocker/compose/docker-compose.portainer.yml2# This file contains everything paperless needs to run.COMMENT
MEDIUM…vcontainer/docker-compose.devcontainer.sqlite-tika.yml2# This file contains everything Paperless NGX needs to run.COMMENT
MEDIUM…vcontainer/docker-compose.devcontainer.sqlite-tika.yml21# This file is intended only to be used through VSCOde devcontainers. See README.mdCOMMENT
MEDIUMsrc/paperless/auth.py36 """This class is here to provide authentication to the angular dev serverSTRING
MEDIUMsrc/paperless/tests/test_registry.py171 # Create a subclass and delete the specified method to break compliance.COMMENT
MEDIUM…c/paperless/tests/settings/test_environment_parsers.py102 # Create a dummy file to resolve againstCOMMENT
MEDIUMsrc/documents/consumer.py638 # Create a log entry for the version addition, if enabledCOMMENT
MEDIUMsrc/documents/barcodes.py209 # Create the split document tasksCOMMENT
MEDIUMsrc/documents/barcodes.py231 # This file is now two or more filesCOMMENT
MEDIUMsrc/documents/barcodes.py354 # This file is really borked, allow the consumption to continueCOMMENT
MEDIUMsrc/documents/bulk_edit.py915 # Create a new version from the edited PDF rather than replacing in-placeCOMMENT
MEDIUMsrc/documents/bulk_edit.py1049 # Create a new version rather than modifying the root/original in place.COMMENT
MEDIUMsrc/documents/bulk_edit.py1135 # Create an instance if target doc doesn't have this field or append it to an existing oneCOMMENT
MEDIUMsrc/documents/tests/test_workflows.py4867 # Create a test file to be consumedCOMMENT
MEDIUMsrc/documents/tests/test_workflows.py4875 # Create a ConsumableDocumentCOMMENT
MEDIUMsrc/documents/tests/test_workflows.py4931 # Create a test file to be consumedCOMMENT
MEDIUMsrc/documents/tests/test_workflows.py4939 # Create a ConsumableDocumentCOMMENT
MEDIUMsrc/documents/tests/test_api_app_config.py757 # Define a custom namespace "my:hack" and try to use itCOMMENT
MEDIUMsrc/documents/tests/test_management_importer.py382 # Create the zip fileCOMMENT
MEDIUMsrc/documents/tests/test_file_handling.py379 # Create an identical document and ensure it is trashed under a new nameCOMMENT
MEDIUMsrc/documents/management/commands/document_importer.py461 # Create a temporary directory for extracting a zip file into it, even if supplied source is no zip file to keepCOMMENT
MEDIUMsrc/documents/templating/filepath.py364 # Create the dummy document object with all fields filled in for validation purposesCOMMENT
Deep Nesting81 hits · 64 pts
SeverityFileLineSnippetContext
LOWdocker/rootfs/usr/local/bin/deduplicate.py52CODE
LOWsrc/paperless_ai/vector_store.py109CODE
LOWsrc/paperless_ai/indexing.py399CODE
LOWsrc/paperless/validators.py183CODE
LOWsrc/paperless/checks.py25CODE
LOWsrc/paperless/utils.py118CODE
LOWsrc/paperless/serialisers.py230CODE
LOWsrc/paperless/settings/parsers.py61CODE
LOWsrc/paperless/parsers/tesseract.py265CODE
LOWsrc/paperless/parsers/tika.py398CODE
LOWsrc/paperless_mail/mail.py382CODE
LOWsrc/paperless_mail/mail.py642CODE
LOWsrc/paperless_mail/mail.py670CODE
LOWsrc/paperless_mail/views.py88CODE
LOWsrc/paperless_mail/tests/test_mail.py86CODE
LOWsrc/paperless_mail/tests/test_mail.py197CODE
LOWsrc/paperless_mail/tests/test_mail.py356CODE
LOWsrc/documents/mail.py19CODE
LOWsrc/documents/tasks.py182CODE
LOWsrc/documents/tasks.py343CODE
LOWsrc/documents/tasks.py508CODE
LOWsrc/documents/double_sided.py39CODE
LOWsrc/documents/matching.py165CODE
LOWsrc/documents/matching.py637CODE
LOWsrc/documents/consumer.py400CODE
LOWsrc/documents/sanity_checker.py240CODE
LOWsrc/documents/permissions.py103CODE
LOWsrc/documents/barcodes.py397CODE
LOWsrc/documents/serialisers.py232CODE
LOWsrc/documents/serialisers.py909CODE
LOWsrc/documents/serialisers.py1187CODE
LOWsrc/documents/serialisers.py1521CODE
LOWsrc/documents/serialisers.py1899CODE
LOWsrc/documents/serialisers.py2153CODE
LOWsrc/documents/serialisers.py2990CODE
LOWsrc/documents/bulk_edit.py294CODE
LOWsrc/documents/bulk_edit.py446CODE
LOWsrc/documents/bulk_edit.py735CODE
LOWsrc/documents/bulk_edit.py867CODE
LOWsrc/documents/bulk_edit.py997CODE
LOWsrc/documents/bulk_edit.py1109CODE
LOWsrc/documents/filters.py258CODE
LOWsrc/documents/filters.py479CODE
LOWsrc/documents/filters.py645CODE
LOWsrc/documents/views.py1740CODE
LOWsrc/documents/views.py3006CODE
LOWsrc/documents/views.py4837CODE
LOWsrc/documents/views.py5410CODE
LOWsrc/documents/signals/handlers.py343CODE
LOWsrc/documents/signals/handlers.py434CODE
LOWsrc/documents/signals/handlers.py751CODE
LOWsrc/documents/signals/handlers.py856CODE
LOWsrc/documents/signals/handlers.py1074CODE
LOWsrc/documents/tests/test_management_exporter.py197CODE
LOWsrc/documents/tests/test_consumer.py143CODE
LOWsrc/documents/tests/test_consumer.py1378CODE
LOWsrc/documents/tests/test_consumer.py1533CODE
LOWsrc/documents/tests/test_api_bulk_edit.py1533CODE
LOWsrc/documents/tests/export/test_sinks.py365CODE
LOWsrc/documents/management/commands/document_retagger.py230CODE
21 more matches not shown…
Cross-File Repetition10 hits · 50 pts
SeverityFileLineSnippetContext
HIGHsrc/paperless/parsers/mail.py0return the mime types this parser handles. returns ------- dict[str, str] mapping of mime type to preferred file extensiSTRING
HIGHsrc/paperless/parsers/tika.py0return the mime types this parser handles. returns ------- dict[str, str] mapping of mime type to preferred file extensiSTRING
HIGHsrc/paperless/parsers/text.py0return the mime types this parser handles. returns ------- dict[str, str] mapping of mime type to preferred file extensiSTRING
HIGHsrc/paperless/parsers/mail.py0return the plain-text content extracted during parse. returns ------- str extracted text, or an empty string if no text STRING
HIGHsrc/paperless/parsers/tika.py0return the plain-text content extracted during parse. returns ------- str extracted text, or an empty string if no text STRING
HIGHsrc/paperless/parsers/__init__.py0return the plain-text content extracted during parse. returns ------- str extracted text, or an empty string if no text STRING
HIGHsrc/paperless/parsers/text.py0return the plain-text content extracted during parse. returns ------- str extracted text, or an empty string if no text STRING
HIGHsrc/paperless/tests/test_ocr_config.py0mock applicationconfiguration with all fields none → falls back to django settings.STRING
HIGHsrc/paperless/tests/test_remote_ocr_config.py0mock applicationconfiguration with all fields none → falls back to django settings.STRING
HIGHsrc/documents/tests/test_consumer_archive.py0mock applicationconfiguration with all fields none → falls back to django settings.STRING
Docstring Block Structure7 hits · 35 pts
SeverityFileLineSnippetContext
HIGHsrc/paperless/settings/parsers.py14 Converts a string representation of truth to a boolean value. Recognizes 'true', '1', 't', 'y', 'yes' as True,STRING
HIGHsrc/paperless/settings/parsers.py67 Parses a key-value string into a dictionary, applying defaults and casting types. Supports nested keys via dotSTRING
HIGHsrc/paperless/settings/parsers.py224 Get and parse a list from an environment variable or return a default. Args: key: Environment variableSTRING
HIGHsrc/paperless/settings/parsers.py289 Gets and validates an environment variable against a set of allowed choices. Args: env_key: The enviroSTRING
HIGHsrc/documents/utils.py190 Compute the SHA-256 checksum of a file. Reads the file in chunks to avoid loading the entire file into memory.STRING
HIGHsrc/documents/templating/filters.py11 Format a date, datetime or str object into a localized string using Babel. Args: value (date | datetimSTRING
HIGHsrc/documents/search/_backend.py954 Get a batch context manager for bulk index operations. Use this for efficient bulk document updates/deSTRING
Fake / Example Data35 hits · 34 pts
SeverityFileLineSnippetContext
LOWdocs/changelog.md8393 thinking that everything is in Catalan because we had _Lorem ipsum_CODE
LOWdocs/development.md414 author = "Acme Corp" # author / organisationCODE
LOWdocs/development.md680 author = "Acme Corp"CODE
LOWsrc-ui/src/app/components/chat/chat/chat.component.html38 [placeholder]="placeholder"CODE
LOW…il/document-history/document-history.component.spec.ts76 const correspondentName = 'John Doe'CODE
LOW…il/document-history/document-history.component.spec.ts92 .mockReturnValue(of({ name: 'John Doe' }))CODE
LOW…file-edit-dialog/profile-edit-dialog.component.spec.ts28 email: 'foo@bar.com',CODE
LOW…c/app/components/common/input/date/date.component.html13 <input #inputField class="form-control" [class.is-invalid]="error" [placeholder]="placeholder" [id]="inputId" CODE
LOW…ommon/input/document-link/document-link.component.html30 [placeholder]="placeholder"CODE
LOW…mponents/common/input/textarea/textarea.component.html22 [placeholder]="placeholder"CODE
LOW…c/app/components/common/input/text/text.component.html14 <input #inputField type="text" class="form-control" [class.is-invalid]="error" [id]="inputId" [(ngModel)]="valueCODE
LOW…p/components/common/input/select/select.component.html27 [placeholder]="placeholder"CODE
LOW…stions-dropdown/suggestions-dropdown.component.spec.ts26 suggested_correspondents: ['John Doe'],CODE
LOW…s/common/preview-popup/preview-popup.component.spec.ts21 content: 'Cupcake ipsum dolor sit amet ice cream.',CODE
LOW…ument-card-large/document-card-large.component.spec.ts37 'Cupcake ipsum dolor sit amet ice cream. Donut shortbread cheesecake caramels tiramisu pastry caramels chocolate barCODE
LOW…ument-card-small/document-card-small.component.spec.ts26 'Cupcake ipsum dolor sit amet ice cream. Donut shortbread cheesecake caramels tiramisu pastry caramels chocolate barCODE
LOWsrc-ui/src/app/services/profile.service.spec.ts42 service.update({ email: 'foo@bar.com' }).subscribe()CODE
LOWsrc-ui/src/app/services/profile.service.spec.ts48 email: 'foo@bar.com',CODE
LOWsrc/paperless_ai/tests/test_prompts.py27 correspondent="Acme Corp",CODE
LOWsrc/paperless_ai/tests/test_ai_classifier.py67 "correspondents": {"existing_ids": [], "new_names": ["John Doe"]},CODE
LOWsrc/paperless_ai/tests/test_ai_classifier.py96 "correspondents": {"existing_ids": [], "new_names": ["Jane Doe"]},CODE
LOWsrc/paperless_ai/tests/test_ai_classifier.py109 assert result["correspondents"]["new_names"] == ["John Doe"]CODE
LOWsrc/paperless_ai/tests/test_ai_classifier.py151 assert result["correspondents"]["new_names"] == ["John Doe"]CODE
LOWsrc/paperless_ai/tests/test_client.py127 "correspondents": {"existing_ids": [], "new_names": ["John Doe"]},CODE
LOWsrc/paperless_ai/tests/test_client.py160 "correspondents": {"existing_ids": [], "new_names": ["John Doe"]},CODE
LOWsrc/paperless/parsers/__init__.py20 author = "Acme Corp"STRING
LOWsrc/paperless/tests/test_adapter.py100 "email": "user@example.com",CODE
LOWsrc/documents/tests/test_workflows.py3517 to="user@example.com",CODE
LOWsrc/documents/tests/test_workflows.py3804 to="user@example.com",CODE
LOWsrc/documents/tests/test_workflows.py4601 to="user@example.com",CODE
LOWsrc/documents/tests/test_workflows.py4735 to="user@example.com",CODE
LOWsrc/documents/tests/test_api_search.py186 content="Lorem ipsum dolor sit amet, consectetur adipiscing elit.",CODE
LOWsrc/documents/tests/test_api_search.py186 content="Lorem ipsum dolor sit amet, consectetur adipiscing elit.",CODE
LOWsrc/documents/tests/search/test_backend.py238 content="Lorem ipsum dolor sit amet, consectetur adipiscing elit.",CODE
LOWsrc/documents/tests/search/test_backend.py238 content="Lorem ipsum dolor sit amet, consectetur adipiscing elit.",CODE
Redundant / Tautological Comments18 hits · 27 pts
SeverityFileLineSnippetContext
LOWinstall-paperless-ngx.sh64# Check if user has permissions to run Docker by trying to get the status of Docker (docker status).COMMENT
LOWdocker/rootfs/usr/local/bin/deduplicate.py19 # Read file in chunks to handle large files efficientlyCOMMENT
LOWsrc/paperless/validators.py234 # Check if any dangerous pattern is a substring of the styleCOMMENT
LOWsrc/paperless/validators.py245 # Check if value starts with any dangerous schemeCOMMENT
LOWsrc/paperless/tests/parsers/test_mail_parser.py94 # Check if exception is raised when parsing fails.COMMENT
LOWsrc/paperless/tests/parsers/test_mail_parser.py115 # Check if exception is raised when the mail is faulty.COMMENT
LOWsrc/paperless/tests/parsers/test_mail_parser.py444 # Check if exception is raised when Tika cannot be reached.COMMENT
LOWsrc/documents/classifier.py285 # Check if retraining is actually required.COMMENT
LOWsrc/documents/matching.py373 # Check if any tag filters exist to determine if we need to load document tagsCOMMENT
LOWsrc/documents/bulk_edit.py1121 # Check if any documents are going to be removed from the current list of links and remove the symmetrical linksCOMMENT
LOWsrc/documents/filters.py574 # Check if 1) custom field name matches, and 2) value satisfies conditionCOMMENT
LOWsrc/documents/filters.py616 # Check if the operator is supported for the current data_type.COMMENT
LOWsrc/documents/filters.py736 # Check if any of the requested IDs are missing.COMMENT
LOWsrc/documents/signals/handlers.py914 # Check if document was soft deleted (moved to trash)COMMENT
LOWsrc/documents/tests/date_parsing/test_date_parsing.py85 # Check if an error was loggedCOMMENT
LOWsrc/documents/tests/date_parsing/test_date_parsing.py89 # Check if the specific error message is presentCOMMENT
LOWsrc/documents/management/commands/manage_superuser.py33 # Check if there's already a user called adminCOMMENT
LOWsrc/documents/management/commands/manage_superuser.py42 # Check if any superuseruserCOMMENT
Structural Annotation Overuse11 hits · 20 pts
SeverityFileLineSnippetContext
LOW.devcontainer/README.md44### Step 1: Running the DevContainerCOMMENT
LOW.devcontainer/README.md54### Step 2: Initial SetupCOMMENT
LOWsrc/paperless_ai/tests/test_ai_indexing.py562 # Step 2: delete all documentsCOMMENT
LOWsrc/paperless_ai/tests/test_ai_indexing.py566 # Step 3: rebuild with no documents — drop_table is called so the tableCOMMENT
LOWsrc/paperless_ai/tests/test_ai_indexing.py570 # Step 4: the table must be absent (no rows) — phantom vectors goneCOMMENT
LOWsrc/paperless_ai/tests/test_ai_indexing.py548 # Step 1: create a document and build a non-empty indexCOMMENT
LOWsrc/documents/classifier.py246 # Step 1: Extract and preprocess training data from the database.COMMENT
LOWsrc/documents/classifier.py324 # Step 2: vectorize dataCOMMENT
LOWsrc/documents/classifier.py350 # Step 3: train the classifiersCOMMENT
LOWsrc/documents/templating/utils.py13 # Step 1: Match placeholders with single curly braces but not those with double bracesCOMMENT
LOWsrc/documents/templating/utils.py16 # Step 2: Replace the placeholders with {{ var }} or {{ }}COMMENT
Over-Commented Block21 hits · 19 pts
SeverityFileLineSnippetContext
LOWdocker/compose/docker-compose.sqlite.yml1# Docker Compose file for running paperless from the Docker Hub.COMMENT
LOWdocker/compose/docker-compose.mariadb.yml1# Docker Compose file for running paperless from the Docker Hub.COMMENT
LOWdocker/compose/docker-compose.postgres-tika.yml1# Docker Compose file for running paperless from the docker container registry.COMMENT
LOWdocker/compose/docker-compose.postgres.yml1# Docker Compose file for running paperless from the Docker Hub.COMMENT
LOWdocker/compose/docker-compose.sqlite-tika.yml1# Docker Compose file for running paperless from the docker container registry.COMMENT
LOWdocker/compose/docker-compose.mariadb-tika.yml1# docker compose file for running paperless from the Docker Hub.COMMENT
LOWdocker/compose/docker-compose.portainer.yml1# Docker Compose file for running paperless from the Docker Hub.COMMENT
LOW…vcontainer/docker-compose.devcontainer.sqlite-tika.yml1# Docker Compose file for developing Paperless NGX in VSCode DevContainers.COMMENT
LOW.github/workflows/codeql-analysis.yml1# For most projects, this workflow file will not need changing; you simply needCOMMENT
LOWsrc-ui/playwright.config.ts41 use: { ...devices['Desktop Chrome'] },COMMENT
LOWsrc-ui/playwright.config.ts61 // use: { ...devices['iPhone 12'] },COMMENT
LOWsrc/paperless_ai/vector_store.py41# this to decide which migrations to run on an existing store.COMMENT
LOWsrc/paperless_ai/vector_store.py221 IndexMetaTable.create(conn)COMMENT
LOWsrc/paperless_ai/indexing.py81 )COMMENT
LOWsrc/paperless_ai/tests/test_vector_store.py1041 PaperlessSqliteVecVectorStore,COMMENT
LOWsrc/paperless/settings/__init__.py41 load_dotenv(path)COMMENT
LOWsrc/documents/views.py1081 # A correlated subquery avoids the LEFT JOIN + Count() this used toCOMMENT
LOWsrc/documents/signals/handlers.py461 msg = f"Document {instance!s}: Cannot rename file since target path {new_path} already exists."COMMENT
LOWsrc/documents/signals/handlers.py1001 from documents.tasks import apply_ai_suggestionsCOMMENT
LOWsrc/documents/search/_backend.py221 time.sleep(sleep_s)COMMENT
LOWsrc/documents/search/_translate.py21COMMENT
Modern Structural Boilerplate16 hits · 18 pts
SeverityFileLineSnippetContext
LOWsrc/paperless_ai/tables.py192 def set_dim(conn: sqlite3.Connection, dim: int) -> None:CODE
LOWsrc/paperless_ai/tables.py200 def set_embed_model(conn: sqlite3.Connection, name: str) -> None:CODE
LOWsrc/paperless_ai/tables.py209 def set_schema_version(conn: sqlite3.Connection, version: int) -> None:CODE
LOWsrc/paperless/__init__.py7__all__ = [CODE
LOWsrc/paperless/settings/custom.py15logger = logging.getLogger(__name__)CODE
LOWsrc/paperless/settings/parsers.py88 def _set_nested(d: dict, keys: list[str], value: Any) -> None:CODE
LOWsrc/paperless/parsers/__init__.py50__all__ = [CODE
LOWsrc/documents/classifier.py130 def _update_data_vectorizer_hash(self) -> None:CODE
LOWsrc/documents/tasks.py648def update_document_parent_tags(tag: Tag, new_parent: Tag) -> None:CODE
LOWsrc/documents/tasks.py758def update_document_in_llm_index(document) -> None:CODE
LOWsrc/documents/__init__.py4__all__ = ["parser_check"]CODE
LOWsrc/documents/serialisers.py254 def _set_permissions(self, permissions, object) -> None:CODE
LOWsrc/documents/plugins/date_parsing/__init__.py16logger = logging.getLogger(__name__)CODE
LOWsrc/documents/plugins/date_parsing/__init__.py96__all__ = [CODE
LOWsrc/documents/plugins/date_parsing/base.py12logger = logging.getLogger(__name__)CODE
LOWsrc/documents/search/__init__.py14__all__ = [CODE
Cross-Language Confusion3 hits · 18 pts
SeverityFileLineSnippetContext
HIGHsrc/documents/classifier.py305 # subtract 1 since -1 (null) is also part of the classes.COMMENT
HIGH…/documents/management/commands/convert_mariadb_uuid.py21 old_field = models.CharField(null=null, max_length=36)CODE
HIGH…/documents/management/commands/convert_mariadb_uuid.py24 new_field = models.UUIDField(null=null)CODE
Verbosity Indicators9 hits · 17 pts
SeverityFileLineSnippetContext
LOWsrc/paperless_ai/tests/test_ai_indexing.py562 # Step 2: delete all documentsCOMMENT
LOWsrc/paperless_ai/tests/test_ai_indexing.py566 # Step 3: rebuild with no documents — drop_table is called so the tableCOMMENT
LOWsrc/paperless_ai/tests/test_ai_indexing.py570 # Step 4: the table must be absent (no rows) — phantom vectors goneCOMMENT
LOWsrc/paperless_ai/tests/test_ai_indexing.py548 # Step 1: create a document and build a non-empty indexCOMMENT
LOWsrc/documents/classifier.py246 # Step 1: Extract and preprocess training data from the database.COMMENT
LOWsrc/documents/classifier.py324 # Step 2: vectorize dataCOMMENT
LOWsrc/documents/classifier.py350 # Step 3: train the classifiersCOMMENT
LOWsrc/documents/templating/utils.py13 # Step 1: Match placeholders with single curly braces but not those with double bracesCOMMENT
LOWsrc/documents/templating/utils.py16 # Step 2: Replace the placeholders with {{ var }} or {{ }}COMMENT
Modern AI Meta-Vocabulary4 hits · 11 pts
SeverityFileLineSnippetContext
MEDIUMdocs/advanced_usage.md146### The LLM index (RAG) and similar documentsCOMMENT
MEDIUMdocs/usage.md332See [AI features](advanced_usage.md#ai-features) for how to enable and configure these features, including choosing an LCODE
MEDIUMsrc-ui/README.md9## Code scaffoldingCOMMENT
MEDIUMsrc/paperless_ai/ai_classifier.py32# neighbours get their text spliced into the RAG context block). A widerCOMMENT
AI Slop Vocabulary3 hits · 8 pts
SeverityFileLineSnippetContext
MEDIUMpyproject.toml14# TODO: Move certain things to groups and then utilize that furtherCOMMENT
MEDIUMsrc/paperless/parsers/tesseract.py242 # the whole text, so do not utilize it in that caseCOMMENT
LOWsrc/documents/views.py2781 # if all is not true, just pass through the provided document idsCOMMENT
AI Structural Patterns5 hits · 4 pts
SeverityFileLineSnippetContext
LOWsrc/paperless/settings/__init__.py743CODE
LOWsrc/paperless_mail/tests/test_mail.py234CODE
LOWsrc/documents/parsers.py71CODE
LOWsrc/documents/views.py2337CODE
LOWsrc/documents/tests/test_management_exporter.py157CODE
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOWsrc/paperless/network.py155 def handle_request(self, request: httpx.Request) -> httpx.Response:CODE