{ "agent": "style", "mode": "check", "started_at": "2026-06-12T00:57:46.956032", "finished_at": "2026-06-12T01:01:12.646284", "summary": { "total": 48, "errors": 13, "warnings": 32, "fixed": 0, "unfixed": 48 }, "findings": [ { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/utils.py", "line": 434, "rule": "forbidden-suffix-_info", "message": "Function name 'badge_info' uses forbidden suffix '_info'", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/push.py", "line": 246, "rule": "forbidden-suffix-_info", "message": "Variable name 'notification_info' uses forbidden suffix '_info'", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/routers/services.py", "line": 44, "rule": "forbidden-suffix-_data", "message": "Function name 'services_data' uses forbidden suffix '_data'", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/routers/services.py", "line": 84, "rule": "forbidden-suffix-_data", "message": "Function name 'service_detail_data' uses forbidden suffix '_data'", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/routers/containers.py", "line": 112, "rule": "forbidden-suffix-_data", "message": "Function name 'containers_data' uses forbidden suffix '_data'", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/routers/containers_admin.py", "line": 70, "rule": "forbidden-suffix-_data", "message": "Function name 'containers_index_data' uses forbidden suffix '_data'", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/routers/admin.py", "line": 109, "rule": "forbidden-suffix-_data", "message": "Function name 'admin_ai_usage_data' uses forbidden suffix '_data'", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/services/devii/actions/catalog.py", "line": 1046, "rule": "forbidden-suffix-_data", "message": "Action name 'admin_services_data' uses forbidden suffix '_data'", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/routers/gists.py", "line": 91, "rule": "forbidden-suffix-_data", "message": "Variable name 'gists_data' uses forbidden suffix '_data'", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/services/jobs/base.py", "line": 109, "rule": "forbidden-suffix-_data", "message": "Parameter name 'result_data' uses forbidden suffix '_data'", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/services/devii/session.py", "line": 264, "rule": "forbidden-prefix-best_", "message": "Variable name 'best_rank' uses forbidden prefix 'best_'", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/schemas.py", "line": 156, "rule": "forbidden-prefix-my_", "message": "Field name 'my_choice' uses forbidden prefix 'my_' (public API field in PollOut schema)", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/schemas.py", "line": 265, "rule": "forbidden-prefix-my_", "message": "Field name 'my_vote' uses forbidden prefix 'my_' (public API field repeated across multiple schemas)", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/database.py", "line": 589, "rule": "forbidden-prefix-my_", "message": "Variable name 'my_placeholders' uses forbidden prefix 'my_'", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/database.py", "line": 589, "rule": "forbidden-prefix-my_", "message": "Variable name 'my_params' uses forbidden prefix 'my_'", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/database.py", "line": 646, "rule": "forbidden-prefix-my_", "message": "Variable name 'my_choice' uses forbidden prefix 'my_'", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "forbidden-names", "file": "devplacepy/database.py", "line": 692, "rule": "forbidden-prefix-my_", "message": "Variable name 'my_votes' uses forbidden prefix 'my_'", "fixed": false, "fix_summary": "" }, { "severity": "error", "dimension": "headers", "file": "devplacepy/main.py", "line": 1, "rule": "missing-retoor-header", "message": "Missing mandatory retoor header as first line in devplacepy core module", "fixed": false, "fix_summary": "" }, { "severity": "error", "dimension": "headers", "file": "devplacepy/database.py", "line": 1, "rule": "missing-retoor-header", "message": "Missing mandatory retoor header as first line", "fixed": false, "fix_summary": "" }, { "severity": "error", "dimension": "headers", "file": "devplacepy/schemas.py", "line": 1, "rule": "missing-retoor-header", "message": "Missing mandatory retoor header as first line", "fixed": false, "fix_summary": "" }, { "severity": "error", "dimension": "headers", "file": "devplacepy/utils.py", "line": 1, "rule": "missing-retoor-header", "message": "Missing mandatory retoor header as first line", "fixed": false, "fix_summary": "" }, { "severity": "error", "dimension": "headers", "file": "devplacepy/models.py", "line": 1, "rule": "missing-retoor-header", "message": "Missing mandatory retoor header as first line", "fixed": false, "fix_summary": "" }, { "severity": "error", "dimension": "headers", "file": "devplacepy/config.py", "line": 1, "rule": "missing-retoor-header", "message": "Missing mandatory retoor header as first line", "fixed": false, "fix_summary": "" }, { "severity": "error", "dimension": "headers", "file": "devplacepy/routers/admin.py", "line": 1, "rule": "missing-retoor-header", "message": "Missing mandatory retoor header - many files in devplacepy/routers/ directory missing header", "fixed": false, "fix_summary": "" }, { "severity": "error", "dimension": "headers", "file": "devplacepy/services/base.py", "line": 1, "rule": "missing-retoor-header", "message": "Missing mandatory retoor header - many files in devplacepy/services/ directory missing header", "fixed": false, "fix_summary": "" }, { "severity": "error", "dimension": "headers", "file": "devplacepy/services/bot/bot.py", "line": 1, "rule": "missing-retoor-header", "message": "Missing mandatory retoor header - bot service files missing header", "fixed": false, "fix_summary": "" }, { "severity": "error", "dimension": "headers", "file": "devplacepy/services/openai_gateway/gateway.py", "line": 1, "rule": "missing-retoor-header", "message": "Missing mandatory retoor header - gateway service files missing header", "fixed": false, "fix_summary": "" }, { "severity": "error", "dimension": "headers", "file": "devplacepy/static/js/ApiDocs.js", "line": 1, "rule": "missing-retoor-header", "message": "Missing mandatory retoor header - many JS files in devplacepy/static/js/ missing header (e.g., ApiDocs.js, ApiKeyManager.js, ApiTester.js, Application.js, etc.)", "fixed": false, "fix_summary": "" }, { "severity": "error", "dimension": "headers", "file": "devplacepy/static/css/base.css", "line": 1, "rule": "missing-retoor-header", "message": "Missing mandatory retoor header - many CSS files missing header (e.g., base.css, variables.css, post.css, auth.css, etc.)", "fixed": false, "fix_summary": "" }, { "severity": "error", "dimension": "headers", "file": "devplacepy/templates/base.html", "line": 1, "rule": "missing-retoor-header", "message": "Missing mandatory retoor header - HTML template files missing header", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "typing", "file": "devplacepy/cli.py", "line": 7, "rule": "missing-type-annotations", "message": "Function '_audit_cli' missing type annotations for all parameters and return type", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "typing", "file": "devplacepy/seo.py", "line": 20, "rule": "missing-type-annotations", "message": "Function 'truncate' missing type annotations for 'text' parameter and return type", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "typing", "file": "devplacepy/attachments.py", "line": 109, "rule": "missing-type-annotations", "message": "Function 'allowed_extensions' missing return type annotation", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "typing", "file": "devplacepy/templating.py", "line": 21, "rule": "missing-type-annotations", "message": "Function 'guest_disabled' missing type annotations for 'user' parameter and return type", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "typing", "file": "devplacepy/templating.py", "line": 27, "rule": "missing-type-annotations", "message": "Function 'login_hint' missing type annotations for 'user' parameter and return type", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "typing", "file": "devplacepy/main.py", "line": 97, "rule": "missing-type-annotations", "message": "Function 'init_lock' missing return type annotation", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "typing", "file": "devplacepy/database.py", "line": 94, "rule": "missing-type-annotations", "message": "Function '_index' missing type annotations for all parameters", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "typing", "file": "devplacepy/database.py", "line": 103, "rule": "missing-type-annotations", "message": "Function 'init_db' missing return type annotation", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "typing", "file": "devplacepy/seo.py", "line": 36, "rule": "missing-type-annotations", "message": "Function 'site_url' missing type annotations for 'request' parameter and return type", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "typing", "file": "devplacepy/cli.py", "line": 7, "rule": "missing-type-annotations-bulk", "message": "Many functions in devplacepy/cli.py, seo.py, attachments.py, templating.py, docs_api.py, docs_examples.py, database.py lack full type annotations on parameters and return types", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "pathlib", "file": "devplacepy/services/jobs/zip_worker.py", "line": 22, "rule": "use-pathlib", "message": "Uses os.path.getsize, os.path.join, os.path.relpath, os.path.isdir instead of pathlib.Path equivalents", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "pathlib", "file": "devplacepy/services/bot/registry.py", "line": 47, "rule": "use-pathlib", "message": "Uses os.path.getsize instead of Path.stat().st_size", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "pathlib", "file": "devplacepy/project_files.py", "line": 528, "rule": "use-pathlib", "message": "Uses os.walk instead of Path.rglob or Path.iterdir", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "pathlib", "file": "devplacepy/services/jobs/zip_worker.py", "line": 18, "rule": "use-pathlib", "message": "Uses os.walk instead of pathlib.Path.rglob", "fixed": false, "fix_summary": "" }, { "severity": "warning", "dimension": "magic-numbers", "file": "devplacepy/routers/avatar.py", "line": 12, "rule": "magic-number", "message": "Magic number 4096 used as cache max_size; should be a named constant", "fixed": false, "fix_summary": "" }, { "severity": "info", "dimension": "magic-numbers", "file": "devplacepy/attachments.py", "line": 106, "rule": "magic-number", "message": "Magic number 1024*1024 used repeatedly for bytes conversion; should use a named constant like BYTES_PER_MB", "fixed": false, "fix_summary": "" }, { "severity": "info", "dimension": "magic-numbers", "file": "devplacepy/attachments.py", "line": 499, "rule": "magic-number", "message": "Repeated literal 1024 in format_file_size; should use named constant", "fixed": false, "fix_summary": "" }, { "severity": "info", "dimension": "version-pinning", "file": "pyproject.toml", "line": 0, "rule": "no-pinning-convention", "message": "No version pinning found in pyproject.toml - dependencies use unversioned constraints (which is the desired pattern)", "fixed": false, "fix_summary": "" } ] }