S57: spawn fix + bypass updates + Dockerfile auth (#134)

* fix(security): enable auth on code-server container

Unauthenticated code-server exposed to all network interfaces.
Changed --auth none to --auth password. Auto-generates random
password on first run.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(seedgo): checker consolidation: testing→error_handling, test_coverage merged into test_quality v4.0

Co-Authored-By: @seedgo <seedgo@aipass>

* S57: spawn .spawn/README.md fix, bypass updates, Dockerfile auth, README stats

- Spawn: fixed .spawn/ skip in regenerate_registry_ops + meta_ops (was blocking .spawn/README.md push)
- Bypass updates: cli, flow, trigger — testing→error_handling, test_coverage→test_quality refs
- Dockerfile: auth enabled on code-server container
- README: updated stats (130+ PRs, 56 sessions, 1600+ tests, 96% compliance)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: @seedgo <seedgo@aipass>
This commit is contained in:
AIPass
2026-03-27 23:05:00 -07:00
committed by GitHub
co-authored by Claude Opus 4.6 @seedgo
parent 24b6391c90
commit 88bd97a687
8 changed files with 198 additions and 223 deletions
+14 -14
View File
@@ -8,64 +8,64 @@
{
"file": "apps/handlers/init/bootstrap.py",
"standard": "json_structure",
"reason": "Pure Python bootstrap — no branch imports by design"
"reason": "Pure Python bootstrap \u2014 no branch imports by design"
},
{
"file": "apps/modules/display.py",
"standard": "silent_catch",
"reason": "Circular import — display.py cannot import prax (prax depends on cli). Silent catches are ImportError guard for optional trigger and __main__ error handler."
"reason": "Circular import \u2014 display.py cannot import prax (prax depends on cli). Silent catches are ImportError guard for optional trigger and __main__ error handler."
},
{
"file": "apps/handlers/json/json_handler.py",
"standard": "silent_catch",
"reason": "Dependency-free by design — json_handler cannot import prax (circular: json_handler → prax → cli.display → json_handler). Catch regenerates corrupted JSON silently."
"reason": "Dependency-free by design \u2014 json_handler cannot import prax (circular: json_handler \u2192 prax \u2192 cli.display \u2192 json_handler). Catch regenerates corrupted JSON silently."
},
{
"file": "apps/modules/display.py",
"standard": "naming",
"pattern": "__all__",
"reason": "Python dunder convention — __all__ controls public API exports, not a constant to uppercase"
"reason": "Python dunder convention \u2014 __all__ controls public API exports, not a constant to uppercase"
},
{
"file": "apps/modules/init_project.py",
"standard": "naming",
"pattern": "__all__",
"reason": "Python dunder convention — __all__ controls public API exports, not a constant to uppercase"
"reason": "Python dunder convention \u2014 __all__ controls public API exports, not a constant to uppercase"
},
{
"file": "drone_adapter.py",
"standard": "unused_function",
"reason": "get_help() and get_introspective() are external API — called by drone, not from within CLI branch"
"reason": "get_help() and get_introspective() are external API \u2014 called by drone, not from within CLI branch"
},
{
"file": "drone_adapter.py",
"standard": "silent_catch",
"reason": "Drone adapter cannot import prax (circular: drone_adapter → cli.main → prax → cli). Catches return graceful fallbacks."
"reason": "Drone adapter cannot import prax (circular: drone_adapter \u2192 cli.main \u2192 prax \u2192 cli). Catches return graceful fallbacks."
},
{
"file": "apps/modules/display.py",
"standard": "testing",
"reason": "Testing flags same silent catch as silent_catch standard — already bypassed (circular import prevents prax logger)"
"standard": "error_handling",
"reason": "Testing flags same silent catch as silent_catch standard \u2014 already bypassed (circular import prevents prax logger)"
},
{
"file": "apps/handlers/json/json_handler.py",
"standard": "testing",
"reason": "Testing flags same silent catch as silent_catch standard — already bypassed (dependency-free by design)"
"standard": "error_handling",
"reason": "Testing flags same silent catch as silent_catch standard \u2014 already bypassed (dependency-free by design)"
},
{
"file": "apps/modules/display.py",
"standard": "imports",
"reason": "Cannot import prax — circular import (prax depends on cli). Documented in code comment."
"reason": "Cannot import prax \u2014 circular import (prax depends on cli). Documented in code comment."
},
{
"file": "apps/modules/templates.py",
"standard": "imports",
"reason": "Cannot import prax — circular import (prax depends on cli). Documented in code comment."
"reason": "Cannot import prax \u2014 circular import (prax depends on cli). Documented in code comment."
},
{
"file": "system_logs",
"standard": "log_structure",
"reason": "Prax branch detection bug — CLI logs land as unknown_branch. Prax confirmed known limitation (2026-03-23), fix pending on prax side."
"reason": "Prax branch detection bug \u2014 CLI logs land as unknown_branch. Prax confirmed known limitation (2026-03-23), fix pending on prax side."
}
],
"notes": {
+42 -42
View File
@@ -45,73 +45,73 @@
"file": "apps/handlers/mbank/process.py",
"standard": "handlers",
"category": "architectural",
"reason": "Cross-handler import of plan_type_loader.discover_plan_types — mbank needs plan type discovery to process closed plans across all registered types"
"reason": "Cross-handler import of plan_type_loader.discover_plan_types \u2014 mbank needs plan type discovery to process closed plans across all registered types"
},
{
"file": "apps/handlers/dashboard/push_central.py",
"standard": "handlers",
"category": "architectural",
"reason": "Cross-handler import of aggregate_ops — push_central calls aggregate_central_impl after pushing data to central"
"reason": "Cross-handler import of aggregate_ops \u2014 push_central calls aggregate_central_impl after pushing data to central"
},
{
"file": "apps/handlers/dashboard/push_central.py",
"standard": "imports",
"category": "architectural",
"reason": "Parent module import needed — push_central invokes aggregate_central for dashboard data"
"reason": "Parent module import needed \u2014 push_central invokes aggregate_central for dashboard data"
},
{
"file": "apps/handlers/registry/monitor_ops.py",
"standard": "handlers",
"category": "architectural",
"reason": "Handler imports trigger module — monitor_ops fires trigger events for registry health changes"
"reason": "Handler imports trigger module \u2014 monitor_ops fires trigger events for registry health changes"
},
{
"file": "apps/handlers/plan/get_open_plans.py",
"standard": "handlers",
"category": "architectural",
"reason": "Cross-handler import of load_registry — get_open_plans needs registry data to find open plans"
"reason": "Cross-handler import of load_registry \u2014 get_open_plans needs registry data to find open plans"
},
{
"file": "apps/handlers/plan/list_ops.py",
"standard": "handlers",
"category": "architectural",
"reason": "Cross-handler import of plan_type_loader — list_ops needs plan type discovery to merge plans from all registries"
"reason": "Cross-handler import of plan_type_loader \u2014 list_ops needs plan type discovery to merge plans from all registries"
},
{
"file": "apps/handlers/plan/close_ops.py",
"standard": "handlers",
"category": "architectural",
"reason": "Cross-handler imports of load_registry, plan_type_loader, display — close needs registry access, type resolution, and formatting"
"reason": "Cross-handler imports of load_registry, plan_type_loader, display \u2014 close needs registry access, type resolution, and formatting"
},
{
"file": "apps/handlers/plan/display.py",
"standard": "handlers",
"category": "architectural",
"reason": "Cross-handler import of load_registry — display needs registry data for plan status formatting"
"reason": "Cross-handler import of load_registry \u2014 display needs registry data for plan status formatting"
},
{
"file": "apps/handlers/plan/create.py",
"standard": "handlers",
"category": "architectural",
"reason": "Cross-handler import of load_registry — create needs registry to register new plans"
"reason": "Cross-handler import of load_registry \u2014 create needs registry to register new plans"
},
{
"file": "apps/handlers/plan/validate.py",
"standard": "handlers",
"category": "architectural",
"reason": "Cross-handler import of load_registry — validate needs registry data to check plan existence"
"reason": "Cross-handler import of load_registry \u2014 validate needs registry data to check plan existence"
},
{
"file": "apps/handlers/mbank/restore_ops.py",
"standard": "handlers",
"category": "architectural",
"reason": "Cross-handler imports of load_registry, plan_type_loader — restore needs registry and type resolution to recover archived plans"
"reason": "Cross-handler imports of load_registry, plan_type_loader \u2014 restore needs registry and type resolution to recover archived plans"
},
{
"file": "apps/handlers/registry/load_registry.py",
"standard": "handlers",
"category": "architectural",
"reason": "Cross-handler import of plan_type_loader — registry loader needs type discovery for auto-healing orphaned entries"
"reason": "Cross-handler import of plan_type_loader \u2014 registry loader needs type discovery for auto-healing orphaned entries"
},
{
"file": "apps/modules/create_plan.py",
@@ -195,91 +195,91 @@
"file": "apps/handlers/template/registry_ops.py",
"standard": "documentation",
"category": "false_positive",
"reason": "add_type has docstring — checker 5-line lookahead too small for multi-line signature (6 lines to closing paren)"
"reason": "add_type has docstring \u2014 checker 5-line lookahead too small for multi-line signature (6 lines to closing paren)"
},
{
"file": "apps/handlers/template/get_template.py",
"standard": "documentation",
"category": "false_positive",
"reason": "get_template has docstring — checker 5-line lookahead too small for multi-line signature (9 lines to closing paren)"
"reason": "get_template has docstring \u2014 checker 5-line lookahead too small for multi-line signature (9 lines to closing paren)"
},
{
"file": "apps/handlers/plan/list_ops.py",
"standard": "documentation",
"category": "false_positive",
"reason": "list_plans_impl has docstring — checker 5-line lookahead too small for multi-line signature (8 lines to closing paren)"
"reason": "list_plans_impl has docstring \u2014 checker 5-line lookahead too small for multi-line signature (8 lines to closing paren)"
},
{
"file": "apps/handlers/plan/create.py",
"standard": "documentation",
"category": "false_positive",
"reason": "create_registry_entry has docstring — checker 5-line lookahead too small for multi-line signature (6 lines to closing paren)"
"reason": "create_registry_entry has docstring \u2014 checker 5-line lookahead too small for multi-line signature (6 lines to closing paren)"
},
{
"file": "apps/modules/create_plan.py",
"standard": "documentation",
"category": "false_positive",
"reason": "create_plan has docstring — checker 5-line lookahead too small for multi-line signature"
"reason": "create_plan has docstring \u2014 checker 5-line lookahead too small for multi-line signature"
},
{
"file": "apps/handlers/plan/close_ops.py",
"standard": "documentation",
"category": "false_positive",
"reason": "Functions have docstrings — checker 5-line lookahead too small for multi-line signatures"
"reason": "Functions have docstrings \u2014 checker 5-line lookahead too small for multi-line signatures"
},
{
"file": "apps/handlers/mbank/process.py",
"standard": "documentation",
"category": "false_positive",
"reason": "Functions have docstrings — checker 5-line lookahead too small for multi-line signatures"
"reason": "Functions have docstrings \u2014 checker 5-line lookahead too small for multi-line signatures"
},
{
"file": "apps/handlers/mbank/restore_ops.py",
"standard": "documentation",
"category": "false_positive",
"reason": "Functions have docstrings — checker 5-line lookahead too small for multi-line signatures"
"reason": "Functions have docstrings \u2014 checker 5-line lookahead too small for multi-line signatures"
},
{
"file": "apps/handlers/plan/display.py",
"standard": "documentation",
"category": "false_positive",
"reason": "Functions have docstrings — checker 5-line lookahead too small for multi-line signatures"
"reason": "Functions have docstrings \u2014 checker 5-line lookahead too small for multi-line signatures"
},
{
"file": "apps/handlers/plan/aggregate_ops.py",
"standard": "handlers",
"category": "architectural",
"reason": "Handler imports trigger module — aggregate_ops fires trigger events for plan aggregation changes"
"reason": "Handler imports trigger module \u2014 aggregate_ops fires trigger events for plan aggregation changes"
},
{
"file": "apps/handlers/plan/create_ops.py",
"standard": "handlers",
"category": "architectural",
"reason": "Handler imports trigger module — create_ops fires trigger events when plans are created"
"reason": "Handler imports trigger module \u2014 create_ops fires trigger events when plans are created"
},
{
"file": "apps/handlers/plan/get_closed_plans.py",
"standard": "handlers",
"category": "architectural",
"reason": "Cross-handler import of load_registry — get_closed_plans needs registry data to find closed plans"
"reason": "Cross-handler import of load_registry \u2014 get_closed_plans needs registry data to find closed plans"
},
{
"file": "apps/handlers/plan/command_parser.py",
"standard": "handlers",
"category": "architectural",
"reason": "Cross-handler import of registry_ops.get_type_map — parser needs plan type mappings to validate commands"
"reason": "Cross-handler import of registry_ops.get_type_map \u2014 parser needs plan type mappings to validate commands"
},
{
"file": "apps/handlers/plan/restore_ops.py",
"standard": "handlers",
"category": "architectural",
"reason": "Handler imports trigger module — restore_ops fires trigger events when plans are restored"
"reason": "Handler imports trigger module \u2014 restore_ops fires trigger events when plans are restored"
},
{
"file": "apps/handlers/summary/summary_ops.py",
"standard": "handlers",
"category": "architectural",
"reason": "Cross-handler imports — summary_ops needs plan type loader and registry for summarization"
"reason": "Cross-handler imports \u2014 summary_ops needs plan type loader and registry for summarization"
},
{
"file": "apps/handlers/plan/calculate_relative_path.py",
@@ -321,7 +321,7 @@
"file": "apps/handlers/config/load_config.py",
"standard": "handlers",
"category": "architectural",
"reason": "module_name parameter is intentional DI pattern — callers inject module name, auto-detection not needed"
"reason": "module_name parameter is intentional DI pattern \u2014 callers inject module name, auto-detection not needed"
},
{
"file": "apps/handlers/plan/resolve_location.py",
@@ -333,79 +333,79 @@
"file": "apps/modules/close_plan.py",
"standard": "deep_nesting",
"category": "deferred",
"reason": "Deferred per devpulse dispatch — refactoring to reduce nesting planned for future sprint"
"reason": "Deferred per devpulse dispatch \u2014 refactoring to reduce nesting planned for future sprint"
},
{
"file": "apps/modules/create_plan.py",
"standard": "deep_nesting",
"category": "deferred",
"reason": "Deferred per devpulse dispatch — refactoring to reduce nesting planned for future sprint"
"reason": "Deferred per devpulse dispatch \u2014 refactoring to reduce nesting planned for future sprint"
},
{
"file": "apps/modules/restore_plan.py",
"standard": "deep_nesting",
"category": "deferred",
"reason": "Deferred per devpulse dispatch — refactoring to reduce nesting planned for future sprint"
"reason": "Deferred per devpulse dispatch \u2014 refactoring to reduce nesting planned for future sprint"
},
{
"file": "apps/modules/registry_monitor.py",
"standard": "deep_nesting",
"category": "deferred",
"reason": "Deferred per devpulse dispatch — refactoring to reduce nesting planned for future sprint"
"reason": "Deferred per devpulse dispatch \u2014 refactoring to reduce nesting planned for future sprint"
},
{
"file": "apps/handlers/mbank/process.py",
"standard": "deep_nesting",
"category": "deferred",
"reason": "Deferred per devpulse dispatch — 793-line file needs splitting, nesting follows from complex plan processing"
"reason": "Deferred per devpulse dispatch \u2014 793-line file needs splitting, nesting follows from complex plan processing"
},
{
"file": "apps/handlers/dashboard/push_branch_dashboard.py",
"standard": "deep_nesting",
"category": "deferred",
"reason": "Deferred per devpulse dispatch — refactoring to reduce nesting planned for future sprint"
"reason": "Deferred per devpulse dispatch \u2014 refactoring to reduce nesting planned for future sprint"
},
{
"file": "apps/handlers/registry/monitor_ops.py",
"standard": "deep_nesting",
"category": "deferred",
"reason": "Deferred per devpulse dispatch — refactoring to reduce nesting planned for future sprint"
"reason": "Deferred per devpulse dispatch \u2014 refactoring to reduce nesting planned for future sprint"
},
{
"file": "apps/handlers/plan/list_ops.py",
"standard": "deep_nesting",
"category": "deferred",
"reason": "Deferred per devpulse dispatch — refactoring to reduce nesting planned for future sprint"
"reason": "Deferred per devpulse dispatch \u2014 refactoring to reduce nesting planned for future sprint"
},
{
"file": "apps/handlers/plan/display.py",
"standard": "deep_nesting",
"category": "deferred",
"reason": "Deferred per devpulse dispatch — refactoring to reduce nesting planned for future sprint"
"reason": "Deferred per devpulse dispatch \u2014 refactoring to reduce nesting planned for future sprint"
},
{
"file": "apps/handlers/plan/create_ops.py",
"standard": "deep_nesting",
"category": "deferred",
"reason": "Deferred per devpulse dispatch — refactoring to reduce nesting planned for future sprint"
"reason": "Deferred per devpulse dispatch \u2014 refactoring to reduce nesting planned for future sprint"
},
{
"file": "apps/handlers/plan/close_ops.py",
"standard": "deep_nesting",
"category": "deferred",
"reason": "Deferred per devpulse dispatch — refactoring to reduce nesting planned for future sprint"
"reason": "Deferred per devpulse dispatch \u2014 refactoring to reduce nesting planned for future sprint"
},
{
"file": "apps/handlers/plan/restore_ops.py",
"standard": "deep_nesting",
"category": "deferred",
"reason": "Deferred per devpulse dispatch — refactoring to reduce nesting planned for future sprint"
"reason": "Deferred per devpulse dispatch \u2014 refactoring to reduce nesting planned for future sprint"
},
{
"file": "*",
"standard": "test_coverage",
"standard": "test_quality",
"category": "deferred",
"reason": "Deferred per devpulse dispatch — test infrastructure not yet in place for flow branch"
"reason": "Deferred per devpulse dispatch \u2014 test infrastructure not yet in place for flow branch"
}
],
"notes": {
+7 -2
View File
@@ -261,10 +261,15 @@ def generate_branch_meta(branch_dir: Path, template_registry: dict) -> dict:
for item in sorted(scan_path.iterdir()):
rel = str(item.relative_to(branch_dir))
# Skip .spawn internals and __pycache__
if _BRANCH_META_DIR in Path(rel).parts or "__pycache__" in Path(rel).parts:
# Skip __pycache__
if "__pycache__" in Path(rel).parts:
continue
# Skip .spawn tracking files (but allow README.md, .registry_ignore.json)
if _BRANCH_META_DIR in Path(rel).parts and item.is_file():
if item.name in (_BRANCH_META_FILE, _TEMPLATE_REGISTRY_FILE):
continue
if item.is_dir():
branch_dirs.append((item, rel))
elif item.is_file():
@@ -28,7 +28,10 @@ _SPAWN_DIR = ".spawn"
_TEMPLATE_REGISTRY_FILE = ".template_registry.json"
# Directories to skip entirely during scan
_SKIP_DIRS = {"__pycache__", ".git", ".spawn"}
_SKIP_DIRS = {"__pycache__", ".git"}
# Files to skip within .spawn/ (tracking files that shouldn't be in the registry)
_SKIP_SPAWN_FILES = {".template_registry.json", ".branch_meta.json"}
# Placeholder patterns to detect in filenames
_BRANCH_PLACEHOLDERS = ("{{BRANCH}}", "{{BRANCHNAME}}")
@@ -182,6 +185,10 @@ def _scan_template_directory(
if any(part in _SKIP_DIRS for part in rel.parts):
continue
# Skip tracking files within .spawn/ (but allow README.md etc.)
if ".spawn" in rel.parts and item.is_file() and item.name in _SKIP_SPAWN_FILES:
continue
if item.is_dir():
has_placeholder = any(p in item.name for p in _BRANCH_PLACEHOLDERS)
raw_dirs.append({
+39 -39
View File
@@ -9,7 +9,7 @@
"file": "apps/handlers/events/registry.py",
"standard": "trigger",
"pattern": "setup_handlers",
"reason": "setup_handlers() is a wiring function that registers event handlers, not an event handler itself. It does not handle any event — it calls trigger.on() to wire handle_{event} callbacks."
"reason": "setup_handlers() is a wiring function that registers event handlers, not an event handler itself. It does not handle any event \u2014 it calls trigger.on() to wire handle_{event} callbacks."
},
{
"file": "apps/modules/core.py",
@@ -24,55 +24,55 @@
"file": "apps/handlers/events/error_detected.py",
"standard": "silent_catch",
"pattern": "_log_warning except",
"reason": "Meta-logging helper: _log_warning() writes directly to file. Its own except block cannot log — you cannot log a failure to log."
"reason": "Meta-logging helper: _log_warning() writes directly to file. Its own except block cannot log \u2014 you cannot log a failure to log."
},
{
"file": "apps/handlers/events/error_logged.py",
"standard": "silent_catch",
"pattern": "_log_warning except",
"reason": "Meta-logging helper: _log_warning() writes directly to file. Its own except block cannot log — you cannot log a failure to log."
"reason": "Meta-logging helper: _log_warning() writes directly to file. Its own except block cannot log \u2014 you cannot log a failure to log."
},
{
"file": "apps/handlers/events/bulletin_created.py",
"standard": "silent_catch",
"pattern": "_log_warning except",
"reason": "Meta-logging helper: _log_warning() writes directly to file. Its own except block cannot log — you cannot log a failure to log."
"reason": "Meta-logging helper: _log_warning() writes directly to file. Its own except block cannot log \u2014 you cannot log a failure to log."
},
{
"file": "apps/handlers/events/startup.py",
"standard": "silent_catch",
"pattern": "_log_warning except",
"reason": "Meta-logging helper: _log_warning() writes directly to file. Its own except block cannot log — you cannot log a failure to log."
"reason": "Meta-logging helper: _log_warning() writes directly to file. Its own except block cannot log \u2014 you cannot log a failure to log."
},
{
"file": "apps/handlers/events/memory_threshold_exceeded.py",
"standard": "silent_catch",
"pattern": "_log_warning except",
"reason": "Meta-logging helper: _log_warning() writes directly to file. Its own except block cannot log — you cannot log a failure to log."
"reason": "Meta-logging helper: _log_warning() writes directly to file. Its own except block cannot log \u2014 you cannot log a failure to log."
},
{
"file": "apps/handlers/events/plan_file.py",
"standard": "silent_catch",
"pattern": "_log_error except",
"reason": "Meta-logging helper: _log_error() writes directly to file. Its own except block cannot log — you cannot log a failure to log."
"reason": "Meta-logging helper: _log_error() writes directly to file. Its own except block cannot log \u2014 you cannot log a failure to log."
},
{
"file": "apps/handlers/json/json_handler.py",
"standard": "silent_catch",
"pattern": "_log_warning except",
"reason": "Meta-logging helper: _log_warning() writes directly to file. Its own except block cannot log — you cannot log a failure to log."
"reason": "Meta-logging helper: _log_warning() writes directly to file. Its own except block cannot log \u2014 you cannot log a failure to log."
},
{
"file": "apps/handlers/events/registry.py",
"standard": "silent_catch",
"pattern": "_log_warning except",
"reason": "Meta-logging helper: _log_warning() writes directly to file. Its own except block cannot log — you cannot log a failure to log."
"reason": "Meta-logging helper: _log_warning() writes directly to file. Its own except block cannot log \u2014 you cannot log a failure to log."
},
{
"file": "apps/config.py",
"standard": "silent_catch",
"pattern": "_log_warning except",
"reason": "Meta-logging helper: _log_warning() writes directly to file. Its own except block cannot log — you cannot log a failure to log."
"reason": "Meta-logging helper: _log_warning() writes directly to file. Its own except block cannot log \u2014 you cannot log a failure to log."
},
{
"file": "apps/handlers/log_watcher.py",
@@ -80,7 +80,7 @@
"lines": [
75
],
"reason": "log_watcher imports error_registry.report() for Medic v2 dedup. This is a deliberate handler-to-handler dependency — the registry IS the dedup backend."
"reason": "log_watcher imports error_registry.report() for Medic v2 dedup. This is a deliberate handler-to-handler dependency \u2014 the registry IS the dedup backend."
},
{
"file": "apps/handlers/error_reporter.py",
@@ -89,7 +89,7 @@
25,
45
],
"reason": "error_reporter imports error_registry for tracking and ai_mail for email delivery. These are its core dependencies — it's the dispatch endpoint of the error pipeline."
"reason": "error_reporter imports error_registry for tracking and ai_mail for email delivery. These are its core dependencies \u2014 it's the dispatch endpoint of the error pipeline."
},
{
"file": "apps/handlers/watchers/log_watcher.py",
@@ -97,7 +97,7 @@
"lines": [
242
],
"reason": "Watcher imports trigger module to fire events. Handler→module import needed because watcher operates as standalone watchdog callback."
"reason": "Watcher imports trigger module to fire events. Handler\u2192module import needed because watcher operates as standalone watchdog callback."
},
{
"file": "apps/handlers/events/error_detected.py",
@@ -117,105 +117,105 @@
},
{
"file": "apps/config.py",
"standard": "testing",
"standard": "error_handling",
"lines": [
31
],
"pattern": "except Exception: pass",
"reason": "Meta-logging helper _log_warning() — cannot log a failure to log. Same pattern as silent_catch bypass."
"reason": "Meta-logging helper _log_warning() \u2014 cannot log a failure to log. Same pattern as silent_catch bypass."
},
{
"file": "apps/modules/core.py",
"standard": "testing",
"standard": "error_handling",
"lines": [
160
],
"pattern": "except Exception: pass",
"reason": "Deferred event queue handler execution — logging would cause infinite recursion (logger fires events via trigger). Same as silent_catch bypass."
"reason": "Deferred event queue handler execution \u2014 logging would cause infinite recursion (logger fires events via trigger). Same as silent_catch bypass."
},
{
"file": "apps/handlers/json/json_handler.py",
"standard": "testing",
"standard": "error_handling",
"lines": [
24
],
"pattern": "except Exception: pass",
"reason": "Meta-logging helper _log_warning() — cannot log a failure to log. Same pattern as silent_catch bypass."
"reason": "Meta-logging helper _log_warning() \u2014 cannot log a failure to log. Same pattern as silent_catch bypass."
},
{
"file": "apps/handlers/events/plan_file.py",
"standard": "testing",
"standard": "error_handling",
"lines": [
58
],
"pattern": "except Exception: pass",
"reason": "Meta-logging helper _log_error() — cannot log a failure to log. Same pattern as silent_catch bypass."
"reason": "Meta-logging helper _log_error() \u2014 cannot log a failure to log. Same pattern as silent_catch bypass."
},
{
"file": "apps/handlers/events/memory_threshold_exceeded.py",
"standard": "testing",
"standard": "error_handling",
"lines": [
46
],
"pattern": "except Exception: pass",
"reason": "Meta-logging helper _log_warning() — cannot log a failure to log. Same pattern as silent_catch bypass."
"reason": "Meta-logging helper _log_warning() \u2014 cannot log a failure to log. Same pattern as silent_catch bypass."
},
{
"file": "apps/handlers/events/error_logged.py",
"standard": "testing",
"standard": "error_handling",
"lines": [
48
],
"pattern": "except Exception: pass",
"reason": "Meta-logging helper _log_warning() — cannot log a failure to log. Same pattern as silent_catch bypass."
"reason": "Meta-logging helper _log_warning() \u2014 cannot log a failure to log. Same pattern as silent_catch bypass."
},
{
"file": "apps/handlers/events/bulletin_created.py",
"standard": "testing",
"standard": "error_handling",
"lines": [
55
],
"pattern": "except Exception: pass",
"reason": "Meta-logging helper _log_warning() — cannot log a failure to log. Same pattern as silent_catch bypass."
"reason": "Meta-logging helper _log_warning() \u2014 cannot log a failure to log. Same pattern as silent_catch bypass."
},
{
"file": "apps/handlers/events/error_detected.py",
"standard": "testing",
"standard": "error_handling",
"lines": [
54
],
"pattern": "except Exception: pass",
"reason": "Meta-logging helper _log_warning() — cannot log a failure to log. Same pattern as silent_catch bypass."
"reason": "Meta-logging helper _log_warning() \u2014 cannot log a failure to log. Same pattern as silent_catch bypass."
},
{
"file": "apps/handlers/events/startup.py",
"standard": "testing",
"standard": "error_handling",
"lines": [
51
],
"pattern": "except Exception: pass",
"reason": "Meta-logging helper _log_warning() — cannot log a failure to log. Same pattern as silent_catch bypass."
"reason": "Meta-logging helper _log_warning() \u2014 cannot log a failure to log. Same pattern as silent_catch bypass."
},
{
"file": "apps/handlers/events/registry.py",
"standard": "testing",
"standard": "error_handling",
"lines": [
28
],
"pattern": "except Exception: pass",
"reason": "Meta-logging helper _log_warning() — cannot log a failure to log. Same pattern as silent_catch bypass."
"reason": "Meta-logging helper _log_warning() \u2014 cannot log a failure to log. Same pattern as silent_catch bypass."
},
{
"file": "apps/handlers/error_registry.py",
"standard": "architecture",
"pattern": "file_length",
"reason": "Error registry at 870 lines — core dedup engine with fingerprinting, circuit breaker, backoff, and CLI. Splitting would break cohesion of the error tracking lifecycle."
"reason": "Error registry at 870 lines \u2014 core dedup engine with fingerprinting, circuit breaker, backoff, and CLI. Splitting would break cohesion of the error tracking lifecycle."
},
{
"file": "apps/handlers/log_watcher.py",
"standard": "architecture",
"pattern": "file_length",
"reason": "Log watcher at 782 lines — watchdog event handler with position tracking, dedup, and medic integration. Splitting would break the file monitoring pipeline."
"reason": "Log watcher at 782 lines \u2014 watchdog event handler with position tracking, dedup, and medic integration. Splitting would break the file monitoring pipeline."
},
{
"file": "apps/handlers/error_reporter.py",
@@ -243,7 +243,7 @@
243
],
"pattern": "handler importing from parent module",
"reason": "error_detected imports error_registry (line 76) and medic_state — core pipeline dependencies for dispatch gating. Already bypassed under handlers standard."
"reason": "error_detected imports error_registry (line 76) and medic_state \u2014 core pipeline dependencies for dispatch gating. Already bypassed under handlers standard."
},
{
"file": "apps/handlers/events/registry.py",
@@ -273,7 +273,7 @@
34
],
"pattern": "handler imports modules",
"reason": "Registry wiring function imports trigger module to call trigger.on(). Must access the event bus to register handlers — this IS its purpose."
"reason": "Registry wiring function imports trigger module to call trigger.on(). Must access the event bus to register handlers \u2014 this IS its purpose."
},
{
"file": "apps/handlers/error_registry.py",
@@ -315,13 +315,13 @@
"file": "apps/config.py",
"standard": "imports",
"pattern": "prax logger import",
"reason": "config.py cannot import prax logger — circular dependency. Uses _log_warning() file-based pattern instead. Comment on line 26 documents this."
"reason": "config.py cannot import prax logger \u2014 circular dependency. Uses _log_warning() file-based pattern instead. Comment on line 26 documents this."
},
{
"file": "apps/handlers/json/json_handler.py",
"standard": "unused_function",
"pattern": "validate_json_structure, get_json_path, increment_counter, update_data_metrics",
"reason": "JSON handler framework utilities — part of the json_structure standard infrastructure. Available for future use by modules that need JSON validation and metrics."
"reason": "JSON handler framework utilities \u2014 part of the json_structure standard infrastructure. Available for future use by modules that need JSON validation and metrics."
}
],
"notes": {