# Graph Report - /home/scheianu/digiserver-v2 (2026-08-16) ## Corpus Check - 49 files · ~210,805 words - Verdict: corpus is large enough that graph structure adds value. ## Summary - 631 nodes · 1162 edges · 41 communities detected - Extraction: 56% EXTRACTED · 44% INFERRED · 0% AMBIGUOUS · INFERRED: 512 edges (avg confidence: 0.62) - Token cost: 0 input · 0 output ## Community Hubs (Navigation) - [[_COMMUNITY_Community 0|Community 0]] - [[_COMMUNITY_Community 1|Community 1]] - [[_COMMUNITY_Community 2|Community 2]] - [[_COMMUNITY_Community 3|Community 3]] - [[_COMMUNITY_Community 4|Community 4]] - [[_COMMUNITY_Community 5|Community 5]] - [[_COMMUNITY_Community 6|Community 6]] - [[_COMMUNITY_Community 7|Community 7]] - [[_COMMUNITY_Community 8|Community 8]] - [[_COMMUNITY_Community 9|Community 9]] - [[_COMMUNITY_Community 10|Community 10]] - [[_COMMUNITY_Community 11|Community 11]] - [[_COMMUNITY_Community 12|Community 12]] - [[_COMMUNITY_Community 13|Community 13]] - [[_COMMUNITY_Community 14|Community 14]] - [[_COMMUNITY_Community 15|Community 15]] - [[_COMMUNITY_Community 16|Community 16]] - [[_COMMUNITY_Community 17|Community 17]] - [[_COMMUNITY_Community 18|Community 18]] - [[_COMMUNITY_Community 19|Community 19]] - [[_COMMUNITY_Community 20|Community 20]] - [[_COMMUNITY_Community 21|Community 21]] - [[_COMMUNITY_Community 22|Community 22]] - [[_COMMUNITY_Community 23|Community 23]] - [[_COMMUNITY_Community 24|Community 24]] - [[_COMMUNITY_Community 25|Community 25]] - [[_COMMUNITY_Community 26|Community 26]] - [[_COMMUNITY_Community 27|Community 27]] - [[_COMMUNITY_Community 28|Community 28]] - [[_COMMUNITY_Community 29|Community 29]] - [[_COMMUNITY_Community 30|Community 30]] - [[_COMMUNITY_Community 31|Community 31]] - [[_COMMUNITY_Community 32|Community 32]] - [[_COMMUNITY_Community 33|Community 33]] - [[_COMMUNITY_Community 34|Community 34]] - [[_COMMUNITY_Community 35|Community 35]] - [[_COMMUNITY_Community 36|Community 36]] - [[_COMMUNITY_Community 37|Community 37]] - [[_COMMUNITY_Community 38|Community 38]] - [[_COMMUNITY_Community 39|Community 39]] - [[_COMMUNITY_Community 40|Community 40]] ## God Nodes (most connected - your core abstractions) 1. `log_action()` - 116 edges 2. `PlayerEdit` - 99 edges 3. `PlayerUser` - 74 edges 4. `Playlist` - 33 edges 5. `CaddyConfigGenerator` - 31 edges 6. `HTTPSConfig` - 30 edges 7. `Content` - 24 edges 8. `User` - 19 edges 9. `create_app()` - 13 edges 10. `Models package for digiserver-v2.` - 13 edges ## Surprising Connections (you probably didn't know these) - `reset_user_password()` --calls--> `log_action()` [INFERRED] /home/scheianu/digiserver-v2/app/blueprints/admin.py → /home/scheianu/digiserver-v2/app/utils/logger.py - `upload_header_logo()` --calls--> `log_action()` [INFERRED] /home/scheianu/digiserver-v2/app/blueprints/admin.py → /home/scheianu/digiserver-v2/app/utils/logger.py - `delete_editing_user()` --calls--> `log_action()` [INFERRED] /home/scheianu/digiserver-v2/app/blueprints/admin.py → /home/scheianu/digiserver-v2/app/utils/logger.py - `delete_playlist()` --calls--> `log_action()` [INFERRED] /home/scheianu/digiserver-v2/app/blueprints/content.py → /home/scheianu/digiserver-v2/app/utils/logger.py - `Main playlist management page.` --uses--> `PlayerEdit` [INFERRED] /home/scheianu/digiserver-v2/app/blueprints/content.py → /home/scheianu/digiserver-v2/app/models/player_edit.py ## Communities ### Community 0 - "Community 0" Cohesion: 0.03 Nodes (80): change_password(), login(), logout(), Authentication Blueprint - Login, Logout, Register, register(), add_content_to_group(), add_player_to_group(), delete_group() (+72 more) ### Community 1 - "Community 1" Cohesion: 0.04 Nodes (72): Add player_user table for user code mappings., admin_panel(), admin_required(), build_player(), change_theme(), change_user_role(), clear_logs(), create_user() (+64 more) ### Community 2 - "Community 2" Cohesion: 0.04 Nodes (61): add_content_to_playlist(), add_weblink(), add_weblink_to_playlist(), assign_player_to_playlist(), bulk_remove_from_playlist(), content_list(), create_fullhd_image(), delete_playlist() (+53 more) ### Community 3 - "Community 3" Cohesion: 0.06 Nodes (57): api_not_found(), authenticate_player(), deploy_player(), get_cached_playlist(), get_logs(), get_player_playlist(), get_player_status(), get_playlist_by_quickconnect() (+49 more) ### Community 4 - "Community 4" Cohesion: 0.07 Nodes (42): add_muted_column(), Add muted column to playlist_content association table., configure_login_manager(), create_app(), DigiServer v2 - Application Factory Modern Flask application with blueprint arch, Configure Flask-Login, Register error handlers, Register CLI commands (+34 more) ### Community 5 - "Community 5" Cohesion: 0.04 Nodes (27): Content, Content model for media files., String representation of Content., Check if content is an image., Check if content is a video., Content model representing media files for display. Attributes:, Check if content is a PDF., Check if content is a web link (URL) rather than an uploaded file. (+19 more) ### Community 6 - "Community 6" Cohesion: 0.05 Nodes (45): Add https_config table for HTTPS configuration management., Write Caddyfile to disk. Args: caddyfile_content: C, Reload Caddy configuration without restart. Note: Caddy monitor, Generate a complete Caddyfile. Behaviour: - HTTPS disabled / no, Write Caddyfile to disk. The default path is /etc/caddy/Caddyfile — the, Push the current Caddyfile to Caddy via its admin API (/load). Caddy ap, HTTPSConfig, String representation of HTTPSConfig. (+37 more) ### Community 7 - "Community 7" Cohesion: 0.06 Nodes (26): create_group(), delete_media(), Delete a media file and remove it from all playlists., Group, Group model for organizing players and content., Group model for organizing players with shared content. Attributes:, String representation of Group., Add a player to this group. Args: player: Player in (+18 more) ### Community 8 - "Community 8" Cohesion: 0.23 Nodes (23): check_database_integrity(), Colors, get_player_auth_code(), get_sample_content(), main(), print_error(), print_info(), print_section() (+15 more) ### Community 9 - "Community 9" Cohesion: 0.11 Nodes (20): Get upload progress for a specific upload., upload_content(), upload_progress_status(), clear_upload_progress(), delete_file(), get_file_size(), get_upload_progress(), process_pdf_file() (+12 more) ### Community 10 - "Community 10" Cohesion: 0.12 Nodes (18): background_player_deployment(), Background task execution for long-running operations., Run a function in a background thread, with a Flask app context pushed., Deploy player code to host in background. Args: hostname: SSH h, run_background_task(), deploy_player_to_host(), generate_app_config(), generate_player_config() (+10 more) ### Community 11 - "Community 11" Cohesion: 0.15 Nodes (18): build_player_action(), Build/refresh the staged player code and/or write its base config., build_player_files(), get_player_server_settings(), get_short_head(), load_build_settings(), make_build_record(), Utilities for building/staging the player files on the server. Admins use the " (+10 more) ### Community 12 - "Community 12" Cohesion: 0.29 Nodes (7): cleanup_libreoffice_processes(), pptx_to_pdf_libreoffice(), PowerPoint to PDF converter using LibreOffice., Clean up any hanging LibreOffice processes., Convert PPTX to PDF using LibreOffice for highest quality. This functio, Validate if file is a valid PowerPoint file. Args: filepath: Pa, validate_pptx_file() ### Community 13 - "Community 13" Cohesion: 0.5 Nodes (3): migrate(), Migration: Add edit_on_player_enabled column to playlist_content table., Add edit_on_player_enabled column to playlist_content. ### Community 14 - "Community 14" Cohesion: 1.0 Nodes (1): Migrate player_user table to remove player_id and make user_code unique globally ### Community 15 - "Community 15" Cohesion: 1.0 Nodes (1): Add original_filename column to content table. This preserves the pristine uplo ### Community 16 - "Community 16" Cohesion: 1.0 Nodes (1): Add url column to content table for weblink support. ### Community 17 - "Community 17" Cohesion: 1.0 Nodes (1): Add deployment tracking columns to player table. ### Community 18 - "Community 18" Cohesion: 1.0 Nodes (1): Add email field to https_config table. ### Community 19 - "Community 19" Cohesion: 1.0 Nodes (1): Flask extensions initialization Centralized extension management for the applica ### Community 20 - "Community 20" Cohesion: 1.0 Nodes (1): Check if feedback indicates an error. ### Community 21 - "Community 21" Cohesion: 1.0 Nodes (1): Get age of feedback in seconds. ### Community 22 - "Community 22" Cohesion: 1.0 Nodes (1): Get most recent feedback for a player. Args: player ### Community 23 - "Community 23" Cohesion: 1.0 Nodes (1): Get the current HTTPS configuration. Returns: HTTPS ### Community 24 - "Community 24" Cohesion: 1.0 Nodes (1): Create or update HTTPS configuration. Args: https_e ### Community 25 - "Community 25" Cohesion: 1.0 Nodes (1): Check if user has admin role. ### Community 26 - "Community 26" Cohesion: 1.0 Nodes (1): Check if player is online (seen in last 5 minutes). ### Community 27 - "Community 27" Cohesion: 1.0 Nodes (1): Authenticate a player by hostname and password or quickconnect code. ### Community 28 - "Community 28" Cohesion: 1.0 Nodes (1): Create an info level log entry. Args: message: Log ### Community 29 - "Community 29" Cohesion: 1.0 Nodes (1): Create a warning level log entry. Args: message: Lo ### Community 30 - "Community 30" Cohesion: 1.0 Nodes (1): Create an error level log entry. Args: message: Log ### Community 31 - "Community 31" Cohesion: 1.0 Nodes (1): Get number of content items in this group. ### Community 32 - "Community 32" Cohesion: 1.0 Nodes (1): Get file size in megabytes. ### Community 33 - "Community 33" Cohesion: 1.0 Nodes (1): Get number of groups containing this content. ### Community 34 - "Community 34" Cohesion: 1.0 Nodes (1): Name of the original (unedited) file for display purposes. ### Community 35 - "Community 35" Cohesion: 1.0 Nodes (1): Path (relative to uploads/) where the original unedited file lives. Whe ### Community 36 - "Community 36" Cohesion: 1.0 Nodes (1): Path (relative to uploads/) of the current/latest version to display. ### Community 37 - "Community 37" Cohesion: 1.0 Nodes (1): Whether this content has been edited on a player. ### Community 38 - "Community 38" Cohesion: 1.0 Nodes (1): Display name of the original (unedited) file. ### Community 39 - "Community 39" Cohesion: 1.0 Nodes (1): uploads/-relative path of the pristine original file. After a player ed ### Community 40 - "Community 40" Cohesion: 1.0 Nodes (0): ## Knowledge Gaps - **178 isolated node(s):** `Migrate player_user table to remove player_id and make user_code unique globally`, `Add original_filename column to content table. This preserves the pristine uplo`, `Add url column to content table for weblink support.`, `Add deployment tracking columns to player table.`, `Add email field to https_config table.` (+173 more) These have ≤1 connection - possible missing edges or undocumented components. - **Thin community `Community 14`** (2 nodes): `migrate_player_user_global.py`, `Migrate player_user table to remove player_id and make user_code unique globally` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 15`** (2 nodes): `Add original_filename column to content table. This preserves the pristine uplo`, `add_original_filename_to_content.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 16`** (2 nodes): `Add url column to content table for weblink support.`, `add_url_to_content.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 17`** (2 nodes): `Add deployment tracking columns to player table.`, `add_deployment_fields_to_player.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 18`** (2 nodes): `Add email field to https_config table.`, `add_email_to_https_config.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 19`** (2 nodes): `Flask extensions initialization Centralized extension management for the applica`, `extensions.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 20`** (1 nodes): `Check if feedback indicates an error.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 21`** (1 nodes): `Get age of feedback in seconds.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 22`** (1 nodes): `Get most recent feedback for a player. Args: player` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 23`** (1 nodes): `Get the current HTTPS configuration. Returns: HTTPS` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 24`** (1 nodes): `Create or update HTTPS configuration. Args: https_e` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 25`** (1 nodes): `Check if user has admin role.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 26`** (1 nodes): `Check if player is online (seen in last 5 minutes).` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 27`** (1 nodes): `Authenticate a player by hostname and password or quickconnect code.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 28`** (1 nodes): `Create an info level log entry. Args: message: Log` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 29`** (1 nodes): `Create a warning level log entry. Args: message: Lo` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 30`** (1 nodes): `Create an error level log entry. Args: message: Log` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 31`** (1 nodes): `Get number of content items in this group.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 32`** (1 nodes): `Get file size in megabytes.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 33`** (1 nodes): `Get number of groups containing this content.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 34`** (1 nodes): `Name of the original (unedited) file for display purposes.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 35`** (1 nodes): `Path (relative to uploads/) where the original unedited file lives. Whe` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 36`** (1 nodes): `Path (relative to uploads/) of the current/latest version to display.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 37`** (1 nodes): `Whether this content has been edited on a player.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 38`** (1 nodes): `Display name of the original (unedited) file.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 39`** (1 nodes): `uploads/-relative path of the pristine original file. After a player ed` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 40`** (1 nodes): `check_fix_player.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted.