diff --git a/BRANCH_REGISTRY.json b/BRANCH_REGISTRY.json index c8617201..238245bd 100644 --- a/BRANCH_REGISTRY.json +++ b/BRANCH_REGISTRY.json @@ -1,8 +1,8 @@ { "metadata": { "version": "1.0.0", - "last_updated": "2026-02-27", - "total_branches": 30 + "last_updated": "2026-03-05", + "total_branches": 31 }, "branches": [ { @@ -246,6 +246,16 @@ "created": "2025-11-12", "last_active": "2025-11-12" }, + { + "name": "SEEDGO", + "path": "/home/aipass/aipass_business/AIPass/src/aipass/seedgo", + "profile": "library", + "description": "Enforce code standards through pluggable standard packs with 3-source discovery", + "email": "@seedgo", + "status": "active", + "created": "2026-03-05", + "last_active": "2026-03-05" + }, { "name": "SPEAKEASY", "alias": "Speakeasy", @@ -338,4 +348,4 @@ "last_active": "2026-02-17" } ] -} \ No newline at end of file +} diff --git a/src/aipass/ai_mail/.agent/.backup_ignore.json b/src/aipass/ai_mail/.agent/.backup_ignore.json new file mode 100644 index 00000000..ad552665 --- /dev/null +++ b/src/aipass/ai_mail/.agent/.backup_ignore.json @@ -0,0 +1,37 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Files and patterns to exclude when creating branch backups" + }, + "ignore_directories": [ + ".backup", + ".venv", + "venv", + "node_modules", + "__pycache__", + ".git", + ".cache", + ".pytest_cache", + ".mypy_cache", + "dist", + "build", + "*.egg-info", + "ai_mail.local", + "logs", + ".aipass", + ".archive", + ".claude", + "htmlcov" + ], + "ignore_patterns": [ + "*.pyc", + "*.pyo", + ".DS_Store", + "*.log", + "*.tmp", + "*.swp", + "*~", + "*.env", + "BRANCH_REGISTRY.json" + ] +} diff --git a/src/aipass/ai_mail/.agent/.migrations.json b/src/aipass/ai_mail/.agent/.migrations.json new file mode 100644 index 00000000..a33f4115 --- /dev/null +++ b/src/aipass/ai_mail/.agent/.migrations.json @@ -0,0 +1,49 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Template structural migrations for branch updates", + "last_updated": "2025-11-07", + "applies_to_versions": ["all"] + }, + "migrations": [ + { + "id": "m001", + "description": "Example: Migrate flat metadata to document_metadata structure", + "version_introduced": "1.0.0", + "applies_to_files": ["*.id.json"], + "operations": [ + { + "type": "key_rename", + "from": "metadata", + "to": "document_metadata" + }, + { + "type": "move_to_nested", + "source_keys": ["branch_name", "path", "profile"], + "target_parent": "branch_info" + }, + { + "type": "add_missing_keys", + "parent": "document_metadata", + "keys": { + "document_type": "branch_identity", + "schema_version": "1.0.0" + } + } + ] + } + ], + "options": { + "skip_if_target_exists": true, + "preserve_unknown_keys": true, + "recursive_application": false + }, + "notes": { + "usage": "This file defines structural transformation rules applied during branch updates", + "pattern_matching": "applies_to_files uses glob patterns (*.json, *.id.json, etc.)", + "operation_order": "Operations execute in order listed within each migration", + "skip_behavior": "Operations skip if already compliant (target exists = success)", + "supported_operations": ["key_rename", "move_to_nested", "add_missing_keys"], + "future_operations": ["split_key", "combine_keys", "delete_key", "transform_value"] + } +} diff --git a/src/aipass/ai_mail/.agent/.registry_ignore.json b/src/aipass/ai_mail/.agent/.registry_ignore.json new file mode 100644 index 00000000..a3bbaed7 --- /dev/null +++ b/src/aipass/ai_mail/.agent/.registry_ignore.json @@ -0,0 +1,43 @@ +{ + "metadata": { + "version": "1.1.0", + "description": "Files and patterns to exclude when updating branches from template", + "last_updated": "2025-11-09" + }, + "ignore_files": [ + ".template_registry.json", + ".registry_ignore.json" + ], + "ignore_patterns": [ + "__pycache__", + "*.pyc", + "#@comments.txt", + ".backup_*" + ], + "notes": { + "how_it_works": "Two types of exclusions during branch updates:", + "ignore_files": { + "description": "Exact filename matches (no wildcards)", + "purpose": "Template-internal management files that branches don't need", + "examples": [ + ".template_registry.json (template's file tracking list)", + ".registry_ignore.json (this config file)" + ] + }, + "ignore_patterns": { + "description": "Glob patterns - matches filenames AND directory names", + "purpose": "Exclude generated files, caches, and user content markers", + "examples": [ + "__pycache__ (Python cache directories)", + "*.pyc (Python compiled bytecode files)", + "#@comments.txt (user comment files)", + ".backup_* (timestamped backup files like .backup_20251109, NOT .backup directory)" + ], + "how_matching_works": [ + "Step 1: Check if filename matches pattern (e.g., file.pyc matches *.pyc)", + "Step 2: Check if any parent directory matches (e.g., files inside __pycache__/ dir)" + ] + }, + "what_gets_ignored": "These files never copy to branches during updates - they stay template-only" + } +} diff --git a/src/aipass/ai_mail/.agent/.template_registry.json b/src/aipass/ai_mail/.agent/.template_registry.json new file mode 100644 index 00000000..b075ef39 --- /dev/null +++ b/src/aipass/ai_mail/.agent/.template_registry.json @@ -0,0 +1,184 @@ +{ + "metadata": { + "description": "Template registry for tracking files", + "generated": true + }, + "files": { + "f001": { + "path": ".aipass/aipass_local_prompt.md", + "name": "aipass_local_prompt.md", + "content_hash": "2658c0af3146e5a3", + "has_branch_placeholder": false + }, + "f002": { + "path": ".claude/settings.local.json", + "name": "settings.local.json", + "content_hash": "6379c5be3fb714ac", + "has_branch_placeholder": false + }, + "f003": { + "path": ".gitignore", + "name": ".gitignore", + "content_hash": "841dedb922da7ddb", + "has_branch_placeholder": false + }, + "f004": { + "path": ".trinity/local.json", + "name": "local.json", + "content_hash": "bf358f3ea5bb2102", + "has_branch_placeholder": false + }, + "f005": { + "path": ".trinity/observations.json", + "name": "observations.json", + "content_hash": "f262954fadc0255c", + "has_branch_placeholder": false + }, + "f006": { + "path": ".trinity/passport.json", + "name": "passport.json", + "content_hash": "5e27bfc842901e85", + "has_branch_placeholder": false + }, + "f007": { + "path": "DASHBOARD.local.json", + "name": "DASHBOARD.local.json", + "content_hash": "a90284523ed31500", + "has_branch_placeholder": false + }, + "f008": { + "path": "README.md", + "name": "README.md", + "content_hash": "cade5edfc7702afc", + "has_branch_placeholder": false + }, + "f009": { + "path": "apps/__init__.py", + "name": "__init__.py", + "content_hash": "468c3775af1fba3f", + "has_branch_placeholder": false + }, + "f010": { + "path": "apps/branch.py", + "name": "branch.py", + "content_hash": "7c2ba42faecb752a", + "has_branch_placeholder": false + }, + "f011": { + "path": "apps/handlers/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f012": { + "path": "apps/modules/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f013": { + "path": "apps/plugins/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f014": { + "path": "artifacts/birth_certificate.json", + "name": "birth_certificate.json", + "content_hash": "6eb88a4189013801", + "has_branch_placeholder": false + }, + "f015": { + "path": "flow.local.md", + "name": "flow.local.md", + "content_hash": "c54c27b66394a741", + "has_branch_placeholder": false + }, + "f016": { + "path": "pytest.ini", + "name": "pytest.ini", + "content_hash": "7b39ba7bca4025c5", + "has_branch_placeholder": false + }, + "f017": { + "path": "tests/__init__.py", + "name": "__init__.py", + "content_hash": "cbf001d73714f7cd", + "has_branch_placeholder": false + }, + "f018": { + "path": "tests/conftest.py", + "name": "conftest.py", + "content_hash": "5e5f2399e0d70978", + "has_branch_placeholder": false + }, + "f019": { + "path": "tools/verify_branch.py", + "name": "verify_branch.py", + "content_hash": "06803a84118e5453", + "has_branch_placeholder": false + } + }, + "directories": { + "d001": { + "path": ".aipass", + "name": ".aipass" + }, + "d002": { + "path": ".archive", + "name": ".archive" + }, + "d003": { + "path": ".claude", + "name": ".claude" + }, + "d004": { + "path": ".trinity", + "name": ".trinity" + }, + "d005": { + "path": "ai_mail_json", + "name": "ai_mail_json" + }, + "d006": { + "path": "apps", + "name": "apps" + }, + "d007": { + "path": "apps/handlers", + "name": "handlers" + }, + "d008": { + "path": "apps/modules", + "name": "modules" + }, + "d009": { + "path": "apps/plugins", + "name": "plugins" + }, + "d010": { + "path": "artifacts", + "name": "artifacts" + }, + "d011": { + "path": "docs", + "name": "docs" + }, + "d012": { + "path": "dropbox", + "name": "dropbox" + }, + "d013": { + "path": "templates", + "name": "templates" + }, + "d014": { + "path": "tests", + "name": "tests" + }, + "d015": { + "path": "tools", + "name": "tools" + } + } +} diff --git a/src/aipass/ai_mail/.gitignore b/src/aipass/ai_mail/.gitignore new file mode 100644 index 00000000..9cf1dfc4 --- /dev/null +++ b/src/aipass/ai_mail/.gitignore @@ -0,0 +1,14 @@ +__pycache__/ +*.pyc +*.pyo +.env +*.egg-info/ +.coverage +htmlcov/ +.pytest_cache/ +.mypy_cache/ +dist/ +build/ +*.log +*.tmp +*.swp diff --git a/src/aipass/ai_mail/.trinity/local.json b/src/aipass/ai_mail/.trinity/local.json new file mode 100644 index 00000000..c89a79fd --- /dev/null +++ b/src/aipass/ai_mail/.trinity/local.json @@ -0,0 +1,34 @@ +{ + "document_metadata": { + "document_type": "session_history", + "document_name": "AI_MAIL.LOCAL", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "AI_MAIL", + "tags": ["session_tracking", "work_log", "AI_MAIL"], + "limits": { + "max_lines": 600, + "note": "Auto-rollover when max_lines exceeded" + }, + "status": { + "health": "healthy", + "current_lines": 0, + "last_health_check": "2026-03-05" + } + }, + "active_tasks": { + "today_focus": "2026-03-05", + "recently_completed": [] + }, + "key_learnings": {}, + "sessions": [ + { + "session_number": 1, + "date": "2026-03-05", + "summary": "Branch initialized - AI_MAIL created by aipass init", + "status": "completed" + } + ] +} diff --git a/src/aipass/ai_mail/.trinity/observations.json b/src/aipass/ai_mail/.trinity/observations.json new file mode 100644 index 00000000..84110b21 --- /dev/null +++ b/src/aipass/ai_mail/.trinity/observations.json @@ -0,0 +1,37 @@ +{ + "document_metadata": { + "document_type": "collaboration_patterns", + "document_name": "AI_MAIL.OBSERVATIONS", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "AI_MAIL", + "tags": ["collaboration", "patterns", "AI_MAIL"], + "limits": { + "max_lines": 600, + "note": "Auto-rollover when max_lines exceeded" + }, + "status": { + "health": "healthy", + "current_lines": 0, + "last_health_check": "2026-03-05" + } + }, + "guidelines": { + "purpose": "Capture collaboration patterns and experiential insights over time", + "chronological_order": "Newest entries at TOP, oldest at BOTTOM - NEVER reorder" + }, + "observations": [ + { + "date": "2026-03-05", + "session": 1, + "entries": [ + { + "title": "First Contact", + "detail": "Branch initialized. Ready to begin capturing collaboration patterns." + } + ] + } + ] +} diff --git a/src/aipass/ai_mail/.trinity/passport.json b/src/aipass/ai_mail/.trinity/passport.json new file mode 100644 index 00000000..27dca9ea --- /dev/null +++ b/src/aipass/ai_mail/.trinity/passport.json @@ -0,0 +1,36 @@ +{ + "document_metadata": { + "document_type": "branch_identity", + "document_name": "AI_MAIL.PASSPORT", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "AI_MAIL", + "tags": ["identity", "passport", "branch_profile"] + }, + "branch_info": { + "branch_name": "AI_MAIL", + "alias": "", + "path": "/home/aipass/aipass_business/AIPass/src/aipass/ai_mail", + "module": "ai_mail", + "created": "2026-03-05" + }, + "identity": { + "role": "Agent Messaging", + "purpose": "", + "what_i_do": [], + "what_i_dont_do": [] + }, + "principles": [ + "Code is truth - fail honestly", + "Memory persists - context survives", + "Simple solutions over complex architecture" + ], + "citizenship": { + "registered": true, + "registry_path": ".aipass/registry.json", + "communications": true, + "memory": true + } +} diff --git a/src/aipass/ai_mail/DASHBOARD.local.json b/src/aipass/ai_mail/DASHBOARD.local.json new file mode 100644 index 00000000..a8b676c3 --- /dev/null +++ b/src/aipass/ai_mail/DASHBOARD.local.json @@ -0,0 +1,62 @@ +{ + "_warning": "AUTO-GENERATED FILE - DO NOT MANUALLY EDIT. This file is 100% automated and will be overwritten. Services update their own sections.", + "branch": "AI_MAIL", + "last_updated": "2026-03-05", + "quick_status": { + "new_mail": 0, + "opened_mail": 0, + "active_plans": 0, + "commons_mentions": 0, + "action_required": false, + "summary": "" + }, + "sections": { + "ai_mail": { + "managed_by": "ai_mail", + "new": 0, + "opened": 0, + "total": 0, + "oldest_unread_age": null, + "last_dispatch_received": null, + "last_updated": "2026-03-05" + }, + "flow": { + "managed_by": "flow", + "active_plans": 0, + "recently_closed": [], + "last_updated": "2026-03-05" + }, + "memory_bank": { + "managed_by": "memory_bank", + "vectors_stored": 0, + "notes": {}, + "last_updated": "2026-03-05" + }, + "devpulse": { + "managed_by": "devpulse", + "summary": { + "issues": 0, + "todos": 0 + }, + "dplan_counts": {}, + "recent_activity": "", + "last_updated": "2026-03-05" + }, + "commons_activity": { + "managed_by": "the_commons", + "new_posts_since_last_visit": 0, + "new_comments_since_last_visit": 0, + "mentions": 0, + "trending": "None", + "last_checked": null, + "last_updated": "2026-03-05" + }, + "agent_status": { + "managed_by": "prax", + "active_agents": [], + "agent_count": 0, + "stale_agents": [], + "last_updated": "2026-03-05" + } + } +} diff --git a/src/aipass/ai_mail/README.md b/src/aipass/ai_mail/README.md new file mode 100644 index 00000000..285c67ae --- /dev/null +++ b/src/aipass/ai_mail/README.md @@ -0,0 +1,51 @@ +# AI_MAIL + +**Purpose:** Inter-agent messaging, inbox management, dispatch delivery +**Module:** `aipass.ai_mail` +**Created:** 2026-03-05 + +--- + +## Overview + +### What I Do + + +### How I Work +- **Entry Point:** `apps/ai_mail.py` +- **Pattern:** Auto-discovers and routes to modules + +--- + +## Architecture + +``` +AI_MAIL/ +├── apps/ +│ ├── ai_mail.py # Entry point +│ ├── modules/ # Business logic +│ ├── handlers/ # Implementation +│ └── plugins/ # Extensions +├── docs/ +├── tests/ +├── passport.json # Identity +├── local.json # Session history +├── observations.json # Collaboration patterns +└── README.md +``` + +--- + +## Commands + +*Configure after initialization* + +--- + +## Integration Points + +### Depends On + + +### Provides To + diff --git a/src/aipass/ai_mail/apps/__init__.py b/src/aipass/ai_mail/apps/__init__.py new file mode 100644 index 00000000..6a64245b --- /dev/null +++ b/src/aipass/ai_mail/apps/__init__.py @@ -0,0 +1 @@ +# AI_MAIL apps package diff --git a/src/aipass/ai_mail/apps/branch.py b/src/aipass/ai_mail/apps/branch.py new file mode 100644 index 00000000..af39291c --- /dev/null +++ b/src/aipass/ai_mail/apps/branch.py @@ -0,0 +1,86 @@ +""" +AI_MAIL Branch - Main Orchestrator + +Auto-discovery architecture: +- Scans modules/ directory for .py files with handle_command() +- Routes commands to discovered modules automatically +- No manual imports or routing needed +""" + +import sys +import importlib +from pathlib import Path +from typing import List, Any + +from aipass.prax import logger + +# ============================================================================= +# MODULE DISCOVERY +# ============================================================================= + +MODULES_DIR = Path(__file__).parent / "modules" + + +def discover_modules() -> List[Any]: + """Auto-discover modules in modules/ directory.""" + modules = [] + + if not MODULES_DIR.exists(): + return modules + + for file_path in MODULES_DIR.glob("*.py"): + if file_path.name.startswith("_"): + continue + + module_name = f"apps.modules.{file_path.stem}" + + try: + module = importlib.import_module(module_name) + if hasattr(module, "handle_command"): + modules.append(module) + except Exception as e: + logger.error(f"[AI_MAIL] Failed to load module {module_name}: {e}") + + return modules + + +def route_command(command: str, args: List[str], modules: List[Any]) -> bool: + """Route command to appropriate module.""" + for module in modules: + try: + if module.handle_command(command, args): + return True + except Exception as e: + logger.error(f"[AI_MAIL] Module {module.__name__} error: {e}") + return False + + +# ============================================================================= +# MAIN ENTRY POINT +# ============================================================================= + +def main(): + """Main entry point - routes commands or shows help.""" + modules = discover_modules() + args = sys.argv[1:] + + if len(args) == 0 or args[0] in ["--help", "-h", "help"]: + print(f"AI_MAIL - {len(modules)} modules discovered") + for module in modules: + name = module.__name__.split(".")[-1] + desc = (module.__doc__ or "").strip().split("\n")[0] if module.__doc__ else "No description" + print(f" {name:20} {desc}") + return 0 + + command = args[0] + remaining = args[1:] if len(args) > 1 else [] + + if route_command(command, remaining, modules): + return 0 + + print(f"Unknown command: {command}") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/aipass/ai_mail/apps/handlers/__init__.py b/src/aipass/ai_mail/apps/handlers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/ai_mail/apps/modules/__init__.py b/src/aipass/ai_mail/apps/modules/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/ai_mail/apps/plugins/__init__.py b/src/aipass/ai_mail/apps/plugins/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/ai_mail/artifacts/birth_certificate.json b/src/aipass/ai_mail/artifacts/birth_certificate.json new file mode 100644 index 00000000..77bac0ad --- /dev/null +++ b/src/aipass/ai_mail/artifacts/birth_certificate.json @@ -0,0 +1,15 @@ +{ + "id": "32", + "name": "AI_MAIL Birth Certificate", + "type": "birth_certificate", + "creator": "SYSTEM", + "owner": "AI_MAIL", + "rarity": "unique", + "description": "Official birth certificate for AI_MAIL. Citizen #32, registered using 'library' template. Purpose: Inter-agent messaging, inbox management, dispatch delivery", + "metadata": { + "citizen_number": "32", + "template": "library", + "purpose": "Inter-agent messaging, inbox management, dispatch delivery" + }, + "created_at": "2026-03-05" +} diff --git a/src/aipass/ai_mail/flow.local.md b/src/aipass/ai_mail/flow.local.md new file mode 100644 index 00000000..d0765b5a --- /dev/null +++ b/src/aipass/ai_mail/flow.local.md @@ -0,0 +1,15 @@ +# flow.local.md - AI_MAIL +``` +Branch: /home/aipass/aipass_business/AIPass/src/aipass/ai_mail +Created: 2026-03-05 +``` + +## Issues + +- + +--- + +## Todos + +- diff --git a/src/aipass/ai_mail/pytest.ini b/src/aipass/ai_mail/pytest.ini new file mode 100644 index 00000000..c3f21db6 --- /dev/null +++ b/src/aipass/ai_mail/pytest.ini @@ -0,0 +1,21 @@ +[pytest] +# Test discovery paths +testpaths = tests + +# Test file patterns +python_files = test_*.py +python_functions = test_* +python_classes = Test* + +# Command-line options (always applied) +addopts = + -v # Verbose output + --tb=short # Short traceback format + --strict-markers # Raise error on unknown markers + -ra # Show summary of all test outcomes + +# Test markers (for categorizing tests) +markers = + unit: Unit tests + integration: Integration tests + slow: Tests that take significant time diff --git a/src/aipass/ai_mail/tests/__init__.py b/src/aipass/ai_mail/tests/__init__.py new file mode 100644 index 00000000..1d1383f7 --- /dev/null +++ b/src/aipass/ai_mail/tests/__init__.py @@ -0,0 +1 @@ +# Tests package for ai_mail diff --git a/src/aipass/ai_mail/tests/conftest.py b/src/aipass/ai_mail/tests/conftest.py new file mode 100644 index 00000000..a87088fd --- /dev/null +++ b/src/aipass/ai_mail/tests/conftest.py @@ -0,0 +1,43 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: tests/conftest.py +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/tests +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Shared pytest fixtures +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +"""Shared pytest fixtures for cortex tests""" +import pytest +import shutil +import tempfile +from pathlib import Path +from typing import Generator + + +@pytest.fixture +def temp_test_dir() -> Generator[Path, None, None]: + """Creates temporary directory for testing, cleans up after""" + test_dir = Path(tempfile.mkdtemp()) + yield test_dir + if test_dir.exists(): + shutil.rmtree(test_dir) + + +@pytest.fixture +def sample_test_data() -> dict: + """Provides sample test data + + Customize this fixture for your module's needs + """ + return { + "test_key": "test_value", + "sample_data": "example" + } diff --git a/src/aipass/ai_mail/tools/verify_branch.py b/src/aipass/ai_mail/tools/verify_branch.py new file mode 100644 index 00000000..4464af6d --- /dev/null +++ b/src/aipass/ai_mail/tools/verify_branch.py @@ -0,0 +1,159 @@ +#!/home/aipass/.venv/bin/python3 +# -*- coding: utf-8 -*- + +# ===================AIPASS==================== +# META DATA HEADER +# Name: verify_branch.py - Branch Template Verification +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/modules +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Compare template vs branch +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +""" +Branch Template Verification Tool + +Compares template directory with created branch to identify: +- Files in template but missing in branch +- Files in branch but not in template +- Renamed files +""" + +import sys +import json +from pathlib import Path +from typing import Set, List, Tuple +from fnmatch import fnmatch + +# INFRASTRUCTURE IMPORT PATTERN +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) + +# Get template directory +TEMPLATE_DIR = AIPASS_ROOT / "cortex" / "templates" / "branch_template" + + +def load_ignore_patterns() -> Tuple[List[str], List[str]]: + """Load ignore patterns from .registry_ignore.json""" + ignore_file = TEMPLATE_DIR / ".registry_ignore.json" + + if not ignore_file.exists(): + return [], [] + + try: + with open(ignore_file, 'r', encoding='utf-8') as f: + data = json.load(f) + ignore_files = data.get("ignore_files", []) + ignore_patterns = data.get("ignore_patterns", []) + return ignore_files, ignore_patterns + except Exception as e: + print(f"Warning: Could not load .registry_ignore.json: {e}") + return [], [] + + +def should_exclude(path: Path, base_dir: Path, ignore_files: List[str], ignore_patterns: List[str]) -> bool: + """Check if path should be excluded based on ignore patterns""" + rel_path = path.relative_to(base_dir) + filename = path.name + path_str = str(rel_path) + + # Check exact filename matches + if filename in ignore_files: + return True + + # Check glob patterns + for pattern in ignore_patterns: + if fnmatch(filename, pattern): + return True + # Check if any parent directory matches + for part in rel_path.parts: + if fnmatch(part, pattern): + return True + + return False + + +def get_file_set(directory: Path, ignore_files: List[str], ignore_patterns: List[str]) -> Set[str]: + """Get set of all file paths in directory (relative)""" + files = set() + + for item in directory.rglob("*"): + if item.is_file() and not should_exclude(item, directory, ignore_files, ignore_patterns): + rel_path = str(item.relative_to(directory)) + files.add(rel_path) + + return files + + +def verify_branch(branch_dir: Path) -> Tuple[List[str], List[str], List[str]]: + """ + Compare template with branch + + Returns: + Tuple of (in_template_only, in_branch_only, in_both) + """ + # Load ignore patterns from .registry_ignore.json + ignore_files, ignore_patterns = load_ignore_patterns() + + template_files = get_file_set(TEMPLATE_DIR, ignore_files, ignore_patterns) + branch_files = get_file_set(branch_dir, ignore_files, ignore_patterns) + + in_template_only = sorted(template_files - branch_files) + in_branch_only = sorted(branch_files - template_files) + in_both = sorted(template_files & branch_files) + + return in_template_only, in_branch_only, in_both + + +def main(): + if len(sys.argv) < 2: + print("Usage: python3 verify_branch.py ") + print("Example: python3 verify_branch.py test_branch002") + sys.exit(1) + + branch_path = Path(sys.argv[1]) + if not branch_path.is_absolute(): + # Assume it's relative to cortex directory + branch_path = Path.cwd() / branch_path + + if not branch_path.exists(): + print(f"❌ ERROR: Branch directory not found: {branch_path}") + sys.exit(1) + + print(f"\n=== Branch Verification ===") + print(f"Template: {TEMPLATE_DIR}") + print(f"Branch: {branch_path}") + print() + + in_template_only, in_branch_only, in_both = verify_branch(branch_path) + + print(f"Files in both: {len(in_both)}") + print(f"Files in template only: {len(in_template_only)}") + print(f"Files in branch only: {len(in_branch_only)}") + print() + + if in_template_only: + print("❌ Missing from branch (expected from template):") + for file in in_template_only: + print(f" - {file}") + print() + + if in_branch_only: + print("✅ Additional files in branch (renamed or new):") + for file in in_branch_only: + print(f" + {file}") + print() + + if not in_template_only and not in_branch_only: + print("✅ Branch matches template perfectly") + + print("="*70) + + +if __name__ == "__main__": + main() diff --git a/src/aipass/api/.agent/.backup_ignore.json b/src/aipass/api/.agent/.backup_ignore.json new file mode 100644 index 00000000..ad552665 --- /dev/null +++ b/src/aipass/api/.agent/.backup_ignore.json @@ -0,0 +1,37 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Files and patterns to exclude when creating branch backups" + }, + "ignore_directories": [ + ".backup", + ".venv", + "venv", + "node_modules", + "__pycache__", + ".git", + ".cache", + ".pytest_cache", + ".mypy_cache", + "dist", + "build", + "*.egg-info", + "ai_mail.local", + "logs", + ".aipass", + ".archive", + ".claude", + "htmlcov" + ], + "ignore_patterns": [ + "*.pyc", + "*.pyo", + ".DS_Store", + "*.log", + "*.tmp", + "*.swp", + "*~", + "*.env", + "BRANCH_REGISTRY.json" + ] +} diff --git a/src/aipass/api/.agent/.migrations.json b/src/aipass/api/.agent/.migrations.json new file mode 100644 index 00000000..a33f4115 --- /dev/null +++ b/src/aipass/api/.agent/.migrations.json @@ -0,0 +1,49 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Template structural migrations for branch updates", + "last_updated": "2025-11-07", + "applies_to_versions": ["all"] + }, + "migrations": [ + { + "id": "m001", + "description": "Example: Migrate flat metadata to document_metadata structure", + "version_introduced": "1.0.0", + "applies_to_files": ["*.id.json"], + "operations": [ + { + "type": "key_rename", + "from": "metadata", + "to": "document_metadata" + }, + { + "type": "move_to_nested", + "source_keys": ["branch_name", "path", "profile"], + "target_parent": "branch_info" + }, + { + "type": "add_missing_keys", + "parent": "document_metadata", + "keys": { + "document_type": "branch_identity", + "schema_version": "1.0.0" + } + } + ] + } + ], + "options": { + "skip_if_target_exists": true, + "preserve_unknown_keys": true, + "recursive_application": false + }, + "notes": { + "usage": "This file defines structural transformation rules applied during branch updates", + "pattern_matching": "applies_to_files uses glob patterns (*.json, *.id.json, etc.)", + "operation_order": "Operations execute in order listed within each migration", + "skip_behavior": "Operations skip if already compliant (target exists = success)", + "supported_operations": ["key_rename", "move_to_nested", "add_missing_keys"], + "future_operations": ["split_key", "combine_keys", "delete_key", "transform_value"] + } +} diff --git a/src/aipass/api/.agent/.registry_ignore.json b/src/aipass/api/.agent/.registry_ignore.json new file mode 100644 index 00000000..a3bbaed7 --- /dev/null +++ b/src/aipass/api/.agent/.registry_ignore.json @@ -0,0 +1,43 @@ +{ + "metadata": { + "version": "1.1.0", + "description": "Files and patterns to exclude when updating branches from template", + "last_updated": "2025-11-09" + }, + "ignore_files": [ + ".template_registry.json", + ".registry_ignore.json" + ], + "ignore_patterns": [ + "__pycache__", + "*.pyc", + "#@comments.txt", + ".backup_*" + ], + "notes": { + "how_it_works": "Two types of exclusions during branch updates:", + "ignore_files": { + "description": "Exact filename matches (no wildcards)", + "purpose": "Template-internal management files that branches don't need", + "examples": [ + ".template_registry.json (template's file tracking list)", + ".registry_ignore.json (this config file)" + ] + }, + "ignore_patterns": { + "description": "Glob patterns - matches filenames AND directory names", + "purpose": "Exclude generated files, caches, and user content markers", + "examples": [ + "__pycache__ (Python cache directories)", + "*.pyc (Python compiled bytecode files)", + "#@comments.txt (user comment files)", + ".backup_* (timestamped backup files like .backup_20251109, NOT .backup directory)" + ], + "how_matching_works": [ + "Step 1: Check if filename matches pattern (e.g., file.pyc matches *.pyc)", + "Step 2: Check if any parent directory matches (e.g., files inside __pycache__/ dir)" + ] + }, + "what_gets_ignored": "These files never copy to branches during updates - they stay template-only" + } +} diff --git a/src/aipass/api/.agent/.template_registry.json b/src/aipass/api/.agent/.template_registry.json new file mode 100644 index 00000000..171bd345 --- /dev/null +++ b/src/aipass/api/.agent/.template_registry.json @@ -0,0 +1,184 @@ +{ + "metadata": { + "description": "Template registry for tracking files", + "generated": true + }, + "files": { + "f001": { + "path": ".aipass/aipass_local_prompt.md", + "name": "aipass_local_prompt.md", + "content_hash": "c3820174d35b6196", + "has_branch_placeholder": false + }, + "f002": { + "path": ".claude/settings.local.json", + "name": "settings.local.json", + "content_hash": "6379c5be3fb714ac", + "has_branch_placeholder": false + }, + "f003": { + "path": ".gitignore", + "name": ".gitignore", + "content_hash": "841dedb922da7ddb", + "has_branch_placeholder": false + }, + "f004": { + "path": ".trinity/local.json", + "name": "local.json", + "content_hash": "163f753b4ca6b91e", + "has_branch_placeholder": false + }, + "f005": { + "path": ".trinity/observations.json", + "name": "observations.json", + "content_hash": "50b6b9667f536132", + "has_branch_placeholder": false + }, + "f006": { + "path": ".trinity/passport.json", + "name": "passport.json", + "content_hash": "72fea4e37901fc92", + "has_branch_placeholder": false + }, + "f007": { + "path": "DASHBOARD.local.json", + "name": "DASHBOARD.local.json", + "content_hash": "adf8583e2e9f9638", + "has_branch_placeholder": false + }, + "f008": { + "path": "README.md", + "name": "README.md", + "content_hash": "742a7cf14d085a2f", + "has_branch_placeholder": false + }, + "f009": { + "path": "apps/__init__.py", + "name": "__init__.py", + "content_hash": "436dab8c706a5c20", + "has_branch_placeholder": false + }, + "f010": { + "path": "apps/branch.py", + "name": "branch.py", + "content_hash": "ec1b725be2b76957", + "has_branch_placeholder": false + }, + "f011": { + "path": "apps/handlers/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f012": { + "path": "apps/modules/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f013": { + "path": "apps/plugins/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f014": { + "path": "artifacts/birth_certificate.json", + "name": "birth_certificate.json", + "content_hash": "6804a2f6aa7900df", + "has_branch_placeholder": false + }, + "f015": { + "path": "flow.local.md", + "name": "flow.local.md", + "content_hash": "3eb19b2da09318ad", + "has_branch_placeholder": false + }, + "f016": { + "path": "pytest.ini", + "name": "pytest.ini", + "content_hash": "7b39ba7bca4025c5", + "has_branch_placeholder": false + }, + "f017": { + "path": "tests/__init__.py", + "name": "__init__.py", + "content_hash": "ae4d4d2b382cf7b2", + "has_branch_placeholder": false + }, + "f018": { + "path": "tests/conftest.py", + "name": "conftest.py", + "content_hash": "5e5f2399e0d70978", + "has_branch_placeholder": false + }, + "f019": { + "path": "tools/verify_branch.py", + "name": "verify_branch.py", + "content_hash": "06803a84118e5453", + "has_branch_placeholder": false + } + }, + "directories": { + "d001": { + "path": ".aipass", + "name": ".aipass" + }, + "d002": { + "path": ".archive", + "name": ".archive" + }, + "d003": { + "path": ".claude", + "name": ".claude" + }, + "d004": { + "path": ".trinity", + "name": ".trinity" + }, + "d005": { + "path": "api_json", + "name": "api_json" + }, + "d006": { + "path": "apps", + "name": "apps" + }, + "d007": { + "path": "apps/handlers", + "name": "handlers" + }, + "d008": { + "path": "apps/modules", + "name": "modules" + }, + "d009": { + "path": "apps/plugins", + "name": "plugins" + }, + "d010": { + "path": "artifacts", + "name": "artifacts" + }, + "d011": { + "path": "docs", + "name": "docs" + }, + "d012": { + "path": "dropbox", + "name": "dropbox" + }, + "d013": { + "path": "templates", + "name": "templates" + }, + "d014": { + "path": "tests", + "name": "tests" + }, + "d015": { + "path": "tools", + "name": "tools" + } + } +} diff --git a/src/aipass/api/.gitignore b/src/aipass/api/.gitignore new file mode 100644 index 00000000..9cf1dfc4 --- /dev/null +++ b/src/aipass/api/.gitignore @@ -0,0 +1,14 @@ +__pycache__/ +*.pyc +*.pyo +.env +*.egg-info/ +.coverage +htmlcov/ +.pytest_cache/ +.mypy_cache/ +dist/ +build/ +*.log +*.tmp +*.swp diff --git a/src/aipass/api/.trinity/local.json b/src/aipass/api/.trinity/local.json new file mode 100644 index 00000000..9a243051 --- /dev/null +++ b/src/aipass/api/.trinity/local.json @@ -0,0 +1,34 @@ +{ + "document_metadata": { + "document_type": "session_history", + "document_name": "API.LOCAL", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "API", + "tags": ["session_tracking", "work_log", "API"], + "limits": { + "max_lines": 600, + "note": "Auto-rollover when max_lines exceeded" + }, + "status": { + "health": "healthy", + "current_lines": 0, + "last_health_check": "2026-03-05" + } + }, + "active_tasks": { + "today_focus": "2026-03-05", + "recently_completed": [] + }, + "key_learnings": {}, + "sessions": [ + { + "session_number": 1, + "date": "2026-03-05", + "summary": "Branch initialized - API created by aipass init", + "status": "completed" + } + ] +} diff --git a/src/aipass/api/.trinity/observations.json b/src/aipass/api/.trinity/observations.json new file mode 100644 index 00000000..2524cff5 --- /dev/null +++ b/src/aipass/api/.trinity/observations.json @@ -0,0 +1,37 @@ +{ + "document_metadata": { + "document_type": "collaboration_patterns", + "document_name": "API.OBSERVATIONS", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "API", + "tags": ["collaboration", "patterns", "API"], + "limits": { + "max_lines": 600, + "note": "Auto-rollover when max_lines exceeded" + }, + "status": { + "health": "healthy", + "current_lines": 0, + "last_health_check": "2026-03-05" + } + }, + "guidelines": { + "purpose": "Capture collaboration patterns and experiential insights over time", + "chronological_order": "Newest entries at TOP, oldest at BOTTOM - NEVER reorder" + }, + "observations": [ + { + "date": "2026-03-05", + "session": 1, + "entries": [ + { + "title": "First Contact", + "detail": "Branch initialized. Ready to begin capturing collaboration patterns." + } + ] + } + ] +} diff --git a/src/aipass/api/.trinity/passport.json b/src/aipass/api/.trinity/passport.json new file mode 100644 index 00000000..44c1c3df --- /dev/null +++ b/src/aipass/api/.trinity/passport.json @@ -0,0 +1,36 @@ +{ + "document_metadata": { + "document_type": "branch_identity", + "document_name": "API.PASSPORT", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "API", + "tags": ["identity", "passport", "branch_profile"] + }, + "branch_info": { + "branch_name": "API", + "alias": "", + "path": "/home/aipass/aipass_business/AIPass/src/aipass/api", + "module": "api", + "created": "2026-03-05" + }, + "identity": { + "role": "LLM Access", + "purpose": "", + "what_i_do": [], + "what_i_dont_do": [] + }, + "principles": [ + "Code is truth - fail honestly", + "Memory persists - context survives", + "Simple solutions over complex architecture" + ], + "citizenship": { + "registered": true, + "registry_path": ".aipass/registry.json", + "communications": true, + "memory": true + } +} diff --git a/src/aipass/api/DASHBOARD.local.json b/src/aipass/api/DASHBOARD.local.json new file mode 100644 index 00000000..baf16aaf --- /dev/null +++ b/src/aipass/api/DASHBOARD.local.json @@ -0,0 +1,62 @@ +{ + "_warning": "AUTO-GENERATED FILE - DO NOT MANUALLY EDIT. This file is 100% automated and will be overwritten. Services update their own sections.", + "branch": "API", + "last_updated": "2026-03-05", + "quick_status": { + "new_mail": 0, + "opened_mail": 0, + "active_plans": 0, + "commons_mentions": 0, + "action_required": false, + "summary": "" + }, + "sections": { + "ai_mail": { + "managed_by": "ai_mail", + "new": 0, + "opened": 0, + "total": 0, + "oldest_unread_age": null, + "last_dispatch_received": null, + "last_updated": "2026-03-05" + }, + "flow": { + "managed_by": "flow", + "active_plans": 0, + "recently_closed": [], + "last_updated": "2026-03-05" + }, + "memory_bank": { + "managed_by": "memory_bank", + "vectors_stored": 0, + "notes": {}, + "last_updated": "2026-03-05" + }, + "devpulse": { + "managed_by": "devpulse", + "summary": { + "issues": 0, + "todos": 0 + }, + "dplan_counts": {}, + "recent_activity": "", + "last_updated": "2026-03-05" + }, + "commons_activity": { + "managed_by": "the_commons", + "new_posts_since_last_visit": 0, + "new_comments_since_last_visit": 0, + "mentions": 0, + "trending": "None", + "last_checked": null, + "last_updated": "2026-03-05" + }, + "agent_status": { + "managed_by": "prax", + "active_agents": [], + "agent_count": 0, + "stale_agents": [], + "last_updated": "2026-03-05" + } + } +} diff --git a/src/aipass/api/README.md b/src/aipass/api/README.md new file mode 100644 index 00000000..ef58fc72 --- /dev/null +++ b/src/aipass/api/README.md @@ -0,0 +1,51 @@ +# API + +**Purpose:** Model routing, provider abstraction, LLM API access layer +**Module:** `aipass.api` +**Created:** 2026-03-05 + +--- + +## Overview + +### What I Do + + +### How I Work +- **Entry Point:** `apps/api.py` +- **Pattern:** Auto-discovers and routes to modules + +--- + +## Architecture + +``` +API/ +├── apps/ +│ ├── api.py # Entry point +│ ├── modules/ # Business logic +│ ├── handlers/ # Implementation +│ └── plugins/ # Extensions +├── docs/ +├── tests/ +├── passport.json # Identity +├── local.json # Session history +├── observations.json # Collaboration patterns +└── README.md +``` + +--- + +## Commands + +*Configure after initialization* + +--- + +## Integration Points + +### Depends On + + +### Provides To + diff --git a/src/aipass/api/apps/__init__.py b/src/aipass/api/apps/__init__.py new file mode 100644 index 00000000..f3a372eb --- /dev/null +++ b/src/aipass/api/apps/__init__.py @@ -0,0 +1 @@ +# API apps package diff --git a/src/aipass/api/apps/branch.py b/src/aipass/api/apps/branch.py new file mode 100644 index 00000000..d7deb952 --- /dev/null +++ b/src/aipass/api/apps/branch.py @@ -0,0 +1,86 @@ +""" +API Branch - Main Orchestrator + +Auto-discovery architecture: +- Scans modules/ directory for .py files with handle_command() +- Routes commands to discovered modules automatically +- No manual imports or routing needed +""" + +import sys +import importlib +from pathlib import Path +from typing import List, Any + +from aipass.prax import logger + +# ============================================================================= +# MODULE DISCOVERY +# ============================================================================= + +MODULES_DIR = Path(__file__).parent / "modules" + + +def discover_modules() -> List[Any]: + """Auto-discover modules in modules/ directory.""" + modules = [] + + if not MODULES_DIR.exists(): + return modules + + for file_path in MODULES_DIR.glob("*.py"): + if file_path.name.startswith("_"): + continue + + module_name = f"apps.modules.{file_path.stem}" + + try: + module = importlib.import_module(module_name) + if hasattr(module, "handle_command"): + modules.append(module) + except Exception as e: + logger.error(f"[API] Failed to load module {module_name}: {e}") + + return modules + + +def route_command(command: str, args: List[str], modules: List[Any]) -> bool: + """Route command to appropriate module.""" + for module in modules: + try: + if module.handle_command(command, args): + return True + except Exception as e: + logger.error(f"[API] Module {module.__name__} error: {e}") + return False + + +# ============================================================================= +# MAIN ENTRY POINT +# ============================================================================= + +def main(): + """Main entry point - routes commands or shows help.""" + modules = discover_modules() + args = sys.argv[1:] + + if len(args) == 0 or args[0] in ["--help", "-h", "help"]: + print(f"API - {len(modules)} modules discovered") + for module in modules: + name = module.__name__.split(".")[-1] + desc = (module.__doc__ or "").strip().split("\n")[0] if module.__doc__ else "No description" + print(f" {name:20} {desc}") + return 0 + + command = args[0] + remaining = args[1:] if len(args) > 1 else [] + + if route_command(command, remaining, modules): + return 0 + + print(f"Unknown command: {command}") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/aipass/api/apps/handlers/__init__.py b/src/aipass/api/apps/handlers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/api/apps/modules/__init__.py b/src/aipass/api/apps/modules/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/api/apps/plugins/__init__.py b/src/aipass/api/apps/plugins/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/api/artifacts/birth_certificate.json b/src/aipass/api/artifacts/birth_certificate.json new file mode 100644 index 00000000..ce8508a6 --- /dev/null +++ b/src/aipass/api/artifacts/birth_certificate.json @@ -0,0 +1,15 @@ +{ + "id": "32", + "name": "API Birth Certificate", + "type": "birth_certificate", + "creator": "SYSTEM", + "owner": "API", + "rarity": "unique", + "description": "Official birth certificate for API. Citizen #32, registered using 'library' template. Purpose: Model routing, provider abstraction, LLM API access layer", + "metadata": { + "citizen_number": "32", + "template": "library", + "purpose": "Model routing, provider abstraction, LLM API access layer" + }, + "created_at": "2026-03-05" +} diff --git a/src/aipass/api/flow.local.md b/src/aipass/api/flow.local.md new file mode 100644 index 00000000..199b95cc --- /dev/null +++ b/src/aipass/api/flow.local.md @@ -0,0 +1,15 @@ +# flow.local.md - API +``` +Branch: /home/aipass/aipass_business/AIPass/src/aipass/api +Created: 2026-03-05 +``` + +## Issues + +- + +--- + +## Todos + +- diff --git a/src/aipass/api/pytest.ini b/src/aipass/api/pytest.ini new file mode 100644 index 00000000..c3f21db6 --- /dev/null +++ b/src/aipass/api/pytest.ini @@ -0,0 +1,21 @@ +[pytest] +# Test discovery paths +testpaths = tests + +# Test file patterns +python_files = test_*.py +python_functions = test_* +python_classes = Test* + +# Command-line options (always applied) +addopts = + -v # Verbose output + --tb=short # Short traceback format + --strict-markers # Raise error on unknown markers + -ra # Show summary of all test outcomes + +# Test markers (for categorizing tests) +markers = + unit: Unit tests + integration: Integration tests + slow: Tests that take significant time diff --git a/src/aipass/api/tests/__init__.py b/src/aipass/api/tests/__init__.py new file mode 100644 index 00000000..711dba10 --- /dev/null +++ b/src/aipass/api/tests/__init__.py @@ -0,0 +1 @@ +# Tests package for api diff --git a/src/aipass/api/tests/conftest.py b/src/aipass/api/tests/conftest.py new file mode 100644 index 00000000..a87088fd --- /dev/null +++ b/src/aipass/api/tests/conftest.py @@ -0,0 +1,43 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: tests/conftest.py +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/tests +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Shared pytest fixtures +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +"""Shared pytest fixtures for cortex tests""" +import pytest +import shutil +import tempfile +from pathlib import Path +from typing import Generator + + +@pytest.fixture +def temp_test_dir() -> Generator[Path, None, None]: + """Creates temporary directory for testing, cleans up after""" + test_dir = Path(tempfile.mkdtemp()) + yield test_dir + if test_dir.exists(): + shutil.rmtree(test_dir) + + +@pytest.fixture +def sample_test_data() -> dict: + """Provides sample test data + + Customize this fixture for your module's needs + """ + return { + "test_key": "test_value", + "sample_data": "example" + } diff --git a/src/aipass/api/tools/verify_branch.py b/src/aipass/api/tools/verify_branch.py new file mode 100644 index 00000000..4464af6d --- /dev/null +++ b/src/aipass/api/tools/verify_branch.py @@ -0,0 +1,159 @@ +#!/home/aipass/.venv/bin/python3 +# -*- coding: utf-8 -*- + +# ===================AIPASS==================== +# META DATA HEADER +# Name: verify_branch.py - Branch Template Verification +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/modules +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Compare template vs branch +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +""" +Branch Template Verification Tool + +Compares template directory with created branch to identify: +- Files in template but missing in branch +- Files in branch but not in template +- Renamed files +""" + +import sys +import json +from pathlib import Path +from typing import Set, List, Tuple +from fnmatch import fnmatch + +# INFRASTRUCTURE IMPORT PATTERN +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) + +# Get template directory +TEMPLATE_DIR = AIPASS_ROOT / "cortex" / "templates" / "branch_template" + + +def load_ignore_patterns() -> Tuple[List[str], List[str]]: + """Load ignore patterns from .registry_ignore.json""" + ignore_file = TEMPLATE_DIR / ".registry_ignore.json" + + if not ignore_file.exists(): + return [], [] + + try: + with open(ignore_file, 'r', encoding='utf-8') as f: + data = json.load(f) + ignore_files = data.get("ignore_files", []) + ignore_patterns = data.get("ignore_patterns", []) + return ignore_files, ignore_patterns + except Exception as e: + print(f"Warning: Could not load .registry_ignore.json: {e}") + return [], [] + + +def should_exclude(path: Path, base_dir: Path, ignore_files: List[str], ignore_patterns: List[str]) -> bool: + """Check if path should be excluded based on ignore patterns""" + rel_path = path.relative_to(base_dir) + filename = path.name + path_str = str(rel_path) + + # Check exact filename matches + if filename in ignore_files: + return True + + # Check glob patterns + for pattern in ignore_patterns: + if fnmatch(filename, pattern): + return True + # Check if any parent directory matches + for part in rel_path.parts: + if fnmatch(part, pattern): + return True + + return False + + +def get_file_set(directory: Path, ignore_files: List[str], ignore_patterns: List[str]) -> Set[str]: + """Get set of all file paths in directory (relative)""" + files = set() + + for item in directory.rglob("*"): + if item.is_file() and not should_exclude(item, directory, ignore_files, ignore_patterns): + rel_path = str(item.relative_to(directory)) + files.add(rel_path) + + return files + + +def verify_branch(branch_dir: Path) -> Tuple[List[str], List[str], List[str]]: + """ + Compare template with branch + + Returns: + Tuple of (in_template_only, in_branch_only, in_both) + """ + # Load ignore patterns from .registry_ignore.json + ignore_files, ignore_patterns = load_ignore_patterns() + + template_files = get_file_set(TEMPLATE_DIR, ignore_files, ignore_patterns) + branch_files = get_file_set(branch_dir, ignore_files, ignore_patterns) + + in_template_only = sorted(template_files - branch_files) + in_branch_only = sorted(branch_files - template_files) + in_both = sorted(template_files & branch_files) + + return in_template_only, in_branch_only, in_both + + +def main(): + if len(sys.argv) < 2: + print("Usage: python3 verify_branch.py ") + print("Example: python3 verify_branch.py test_branch002") + sys.exit(1) + + branch_path = Path(sys.argv[1]) + if not branch_path.is_absolute(): + # Assume it's relative to cortex directory + branch_path = Path.cwd() / branch_path + + if not branch_path.exists(): + print(f"❌ ERROR: Branch directory not found: {branch_path}") + sys.exit(1) + + print(f"\n=== Branch Verification ===") + print(f"Template: {TEMPLATE_DIR}") + print(f"Branch: {branch_path}") + print() + + in_template_only, in_branch_only, in_both = verify_branch(branch_path) + + print(f"Files in both: {len(in_both)}") + print(f"Files in template only: {len(in_template_only)}") + print(f"Files in branch only: {len(in_branch_only)}") + print() + + if in_template_only: + print("❌ Missing from branch (expected from template):") + for file in in_template_only: + print(f" - {file}") + print() + + if in_branch_only: + print("✅ Additional files in branch (renamed or new):") + for file in in_branch_only: + print(f" + {file}") + print() + + if not in_template_only and not in_branch_only: + print("✅ Branch matches template perfectly") + + print("="*70) + + +if __name__ == "__main__": + main() diff --git a/src/aipass/cli/.agent/.backup_ignore.json b/src/aipass/cli/.agent/.backup_ignore.json new file mode 100644 index 00000000..ad552665 --- /dev/null +++ b/src/aipass/cli/.agent/.backup_ignore.json @@ -0,0 +1,37 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Files and patterns to exclude when creating branch backups" + }, + "ignore_directories": [ + ".backup", + ".venv", + "venv", + "node_modules", + "__pycache__", + ".git", + ".cache", + ".pytest_cache", + ".mypy_cache", + "dist", + "build", + "*.egg-info", + "ai_mail.local", + "logs", + ".aipass", + ".archive", + ".claude", + "htmlcov" + ], + "ignore_patterns": [ + "*.pyc", + "*.pyo", + ".DS_Store", + "*.log", + "*.tmp", + "*.swp", + "*~", + "*.env", + "BRANCH_REGISTRY.json" + ] +} diff --git a/src/aipass/cli/.agent/.migrations.json b/src/aipass/cli/.agent/.migrations.json new file mode 100644 index 00000000..a33f4115 --- /dev/null +++ b/src/aipass/cli/.agent/.migrations.json @@ -0,0 +1,49 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Template structural migrations for branch updates", + "last_updated": "2025-11-07", + "applies_to_versions": ["all"] + }, + "migrations": [ + { + "id": "m001", + "description": "Example: Migrate flat metadata to document_metadata structure", + "version_introduced": "1.0.0", + "applies_to_files": ["*.id.json"], + "operations": [ + { + "type": "key_rename", + "from": "metadata", + "to": "document_metadata" + }, + { + "type": "move_to_nested", + "source_keys": ["branch_name", "path", "profile"], + "target_parent": "branch_info" + }, + { + "type": "add_missing_keys", + "parent": "document_metadata", + "keys": { + "document_type": "branch_identity", + "schema_version": "1.0.0" + } + } + ] + } + ], + "options": { + "skip_if_target_exists": true, + "preserve_unknown_keys": true, + "recursive_application": false + }, + "notes": { + "usage": "This file defines structural transformation rules applied during branch updates", + "pattern_matching": "applies_to_files uses glob patterns (*.json, *.id.json, etc.)", + "operation_order": "Operations execute in order listed within each migration", + "skip_behavior": "Operations skip if already compliant (target exists = success)", + "supported_operations": ["key_rename", "move_to_nested", "add_missing_keys"], + "future_operations": ["split_key", "combine_keys", "delete_key", "transform_value"] + } +} diff --git a/src/aipass/cli/.agent/.registry_ignore.json b/src/aipass/cli/.agent/.registry_ignore.json new file mode 100644 index 00000000..a3bbaed7 --- /dev/null +++ b/src/aipass/cli/.agent/.registry_ignore.json @@ -0,0 +1,43 @@ +{ + "metadata": { + "version": "1.1.0", + "description": "Files and patterns to exclude when updating branches from template", + "last_updated": "2025-11-09" + }, + "ignore_files": [ + ".template_registry.json", + ".registry_ignore.json" + ], + "ignore_patterns": [ + "__pycache__", + "*.pyc", + "#@comments.txt", + ".backup_*" + ], + "notes": { + "how_it_works": "Two types of exclusions during branch updates:", + "ignore_files": { + "description": "Exact filename matches (no wildcards)", + "purpose": "Template-internal management files that branches don't need", + "examples": [ + ".template_registry.json (template's file tracking list)", + ".registry_ignore.json (this config file)" + ] + }, + "ignore_patterns": { + "description": "Glob patterns - matches filenames AND directory names", + "purpose": "Exclude generated files, caches, and user content markers", + "examples": [ + "__pycache__ (Python cache directories)", + "*.pyc (Python compiled bytecode files)", + "#@comments.txt (user comment files)", + ".backup_* (timestamped backup files like .backup_20251109, NOT .backup directory)" + ], + "how_matching_works": [ + "Step 1: Check if filename matches pattern (e.g., file.pyc matches *.pyc)", + "Step 2: Check if any parent directory matches (e.g., files inside __pycache__/ dir)" + ] + }, + "what_gets_ignored": "These files never copy to branches during updates - they stay template-only" + } +} diff --git a/src/aipass/cli/.agent/.template_registry.json b/src/aipass/cli/.agent/.template_registry.json new file mode 100644 index 00000000..edb34cb4 --- /dev/null +++ b/src/aipass/cli/.agent/.template_registry.json @@ -0,0 +1,184 @@ +{ + "metadata": { + "description": "Template registry for tracking files", + "generated": true + }, + "files": { + "f001": { + "path": ".aipass/aipass_local_prompt.md", + "name": "aipass_local_prompt.md", + "content_hash": "3fafa4a0b2f17a91", + "has_branch_placeholder": false + }, + "f002": { + "path": ".claude/settings.local.json", + "name": "settings.local.json", + "content_hash": "6379c5be3fb714ac", + "has_branch_placeholder": false + }, + "f003": { + "path": ".gitignore", + "name": ".gitignore", + "content_hash": "841dedb922da7ddb", + "has_branch_placeholder": false + }, + "f004": { + "path": ".trinity/local.json", + "name": "local.json", + "content_hash": "bfa9a120289a7236", + "has_branch_placeholder": false + }, + "f005": { + "path": ".trinity/observations.json", + "name": "observations.json", + "content_hash": "a79a11aef223c463", + "has_branch_placeholder": false + }, + "f006": { + "path": ".trinity/passport.json", + "name": "passport.json", + "content_hash": "89cfad8c5a2afd7b", + "has_branch_placeholder": false + }, + "f007": { + "path": "DASHBOARD.local.json", + "name": "DASHBOARD.local.json", + "content_hash": "7c28e6d7882a1596", + "has_branch_placeholder": false + }, + "f008": { + "path": "README.md", + "name": "README.md", + "content_hash": "a4ff66d38c173a77", + "has_branch_placeholder": false + }, + "f009": { + "path": "apps/__init__.py", + "name": "__init__.py", + "content_hash": "8d538bbb15bc3a5c", + "has_branch_placeholder": false + }, + "f010": { + "path": "apps/branch.py", + "name": "branch.py", + "content_hash": "934981946063d189", + "has_branch_placeholder": false + }, + "f011": { + "path": "apps/handlers/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f012": { + "path": "apps/modules/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f013": { + "path": "apps/plugins/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f014": { + "path": "artifacts/birth_certificate.json", + "name": "birth_certificate.json", + "content_hash": "9b003e8b9280d29f", + "has_branch_placeholder": false + }, + "f015": { + "path": "flow.local.md", + "name": "flow.local.md", + "content_hash": "8cc213d5a2618e84", + "has_branch_placeholder": false + }, + "f016": { + "path": "pytest.ini", + "name": "pytest.ini", + "content_hash": "7b39ba7bca4025c5", + "has_branch_placeholder": false + }, + "f017": { + "path": "tests/__init__.py", + "name": "__init__.py", + "content_hash": "f54fee90f1ed1d75", + "has_branch_placeholder": false + }, + "f018": { + "path": "tests/conftest.py", + "name": "conftest.py", + "content_hash": "5e5f2399e0d70978", + "has_branch_placeholder": false + }, + "f019": { + "path": "tools/verify_branch.py", + "name": "verify_branch.py", + "content_hash": "06803a84118e5453", + "has_branch_placeholder": false + } + }, + "directories": { + "d001": { + "path": ".aipass", + "name": ".aipass" + }, + "d002": { + "path": ".archive", + "name": ".archive" + }, + "d003": { + "path": ".claude", + "name": ".claude" + }, + "d004": { + "path": ".trinity", + "name": ".trinity" + }, + "d005": { + "path": "apps", + "name": "apps" + }, + "d006": { + "path": "apps/handlers", + "name": "handlers" + }, + "d007": { + "path": "apps/modules", + "name": "modules" + }, + "d008": { + "path": "apps/plugins", + "name": "plugins" + }, + "d009": { + "path": "artifacts", + "name": "artifacts" + }, + "d010": { + "path": "cli_json", + "name": "cli_json" + }, + "d011": { + "path": "docs", + "name": "docs" + }, + "d012": { + "path": "dropbox", + "name": "dropbox" + }, + "d013": { + "path": "templates", + "name": "templates" + }, + "d014": { + "path": "tests", + "name": "tests" + }, + "d015": { + "path": "tools", + "name": "tools" + } + } +} diff --git a/src/aipass/cli/.gitignore b/src/aipass/cli/.gitignore new file mode 100644 index 00000000..9cf1dfc4 --- /dev/null +++ b/src/aipass/cli/.gitignore @@ -0,0 +1,14 @@ +__pycache__/ +*.pyc +*.pyo +.env +*.egg-info/ +.coverage +htmlcov/ +.pytest_cache/ +.mypy_cache/ +dist/ +build/ +*.log +*.tmp +*.swp diff --git a/src/aipass/cli/.trinity/local.json b/src/aipass/cli/.trinity/local.json new file mode 100644 index 00000000..0faf5936 --- /dev/null +++ b/src/aipass/cli/.trinity/local.json @@ -0,0 +1,34 @@ +{ + "document_metadata": { + "document_type": "session_history", + "document_name": "CLI.LOCAL", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "CLI", + "tags": ["session_tracking", "work_log", "CLI"], + "limits": { + "max_lines": 600, + "note": "Auto-rollover when max_lines exceeded" + }, + "status": { + "health": "healthy", + "current_lines": 0, + "last_health_check": "2026-03-05" + } + }, + "active_tasks": { + "today_focus": "2026-03-05", + "recently_completed": [] + }, + "key_learnings": {}, + "sessions": [ + { + "session_number": 1, + "date": "2026-03-05", + "summary": "Branch initialized - CLI created by aipass init", + "status": "completed" + } + ] +} diff --git a/src/aipass/cli/.trinity/observations.json b/src/aipass/cli/.trinity/observations.json new file mode 100644 index 00000000..a5f5bce5 --- /dev/null +++ b/src/aipass/cli/.trinity/observations.json @@ -0,0 +1,37 @@ +{ + "document_metadata": { + "document_type": "collaboration_patterns", + "document_name": "CLI.OBSERVATIONS", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "CLI", + "tags": ["collaboration", "patterns", "CLI"], + "limits": { + "max_lines": 600, + "note": "Auto-rollover when max_lines exceeded" + }, + "status": { + "health": "healthy", + "current_lines": 0, + "last_health_check": "2026-03-05" + } + }, + "guidelines": { + "purpose": "Capture collaboration patterns and experiential insights over time", + "chronological_order": "Newest entries at TOP, oldest at BOTTOM - NEVER reorder" + }, + "observations": [ + { + "date": "2026-03-05", + "session": 1, + "entries": [ + { + "title": "First Contact", + "detail": "Branch initialized. Ready to begin capturing collaboration patterns." + } + ] + } + ] +} diff --git a/src/aipass/cli/.trinity/passport.json b/src/aipass/cli/.trinity/passport.json new file mode 100644 index 00000000..f11aa8ea --- /dev/null +++ b/src/aipass/cli/.trinity/passport.json @@ -0,0 +1,36 @@ +{ + "document_metadata": { + "document_type": "branch_identity", + "document_name": "CLI.PASSPORT", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "CLI", + "tags": ["identity", "passport", "branch_profile"] + }, + "branch_info": { + "branch_name": "CLI", + "alias": "", + "path": "/home/aipass/aipass_business/AIPass/src/aipass/cli", + "module": "cli", + "created": "2026-03-05" + }, + "identity": { + "role": "Display Formatting", + "purpose": "", + "what_i_do": [], + "what_i_dont_do": [] + }, + "principles": [ + "Code is truth - fail honestly", + "Memory persists - context survives", + "Simple solutions over complex architecture" + ], + "citizenship": { + "registered": true, + "registry_path": ".aipass/registry.json", + "communications": true, + "memory": true + } +} diff --git a/src/aipass/cli/DASHBOARD.local.json b/src/aipass/cli/DASHBOARD.local.json new file mode 100644 index 00000000..dca152fb --- /dev/null +++ b/src/aipass/cli/DASHBOARD.local.json @@ -0,0 +1,62 @@ +{ + "_warning": "AUTO-GENERATED FILE - DO NOT MANUALLY EDIT. This file is 100% automated and will be overwritten. Services update their own sections.", + "branch": "CLI", + "last_updated": "2026-03-05", + "quick_status": { + "new_mail": 0, + "opened_mail": 0, + "active_plans": 0, + "commons_mentions": 0, + "action_required": false, + "summary": "" + }, + "sections": { + "ai_mail": { + "managed_by": "ai_mail", + "new": 0, + "opened": 0, + "total": 0, + "oldest_unread_age": null, + "last_dispatch_received": null, + "last_updated": "2026-03-05" + }, + "flow": { + "managed_by": "flow", + "active_plans": 0, + "recently_closed": [], + "last_updated": "2026-03-05" + }, + "memory_bank": { + "managed_by": "memory_bank", + "vectors_stored": 0, + "notes": {}, + "last_updated": "2026-03-05" + }, + "devpulse": { + "managed_by": "devpulse", + "summary": { + "issues": 0, + "todos": 0 + }, + "dplan_counts": {}, + "recent_activity": "", + "last_updated": "2026-03-05" + }, + "commons_activity": { + "managed_by": "the_commons", + "new_posts_since_last_visit": 0, + "new_comments_since_last_visit": 0, + "mentions": 0, + "trending": "None", + "last_checked": null, + "last_updated": "2026-03-05" + }, + "agent_status": { + "managed_by": "prax", + "active_agents": [], + "agent_count": 0, + "stale_agents": [], + "last_updated": "2026-03-05" + } + } +} diff --git a/src/aipass/cli/README.md b/src/aipass/cli/README.md new file mode 100644 index 00000000..4d0f6dfe --- /dev/null +++ b/src/aipass/cli/README.md @@ -0,0 +1,51 @@ +# CLI + +**Purpose:** Terminal display formatting - headers, success, error, warning helpers +**Module:** `aipass.cli` +**Created:** 2026-03-05 + +--- + +## Overview + +### What I Do + + +### How I Work +- **Entry Point:** `apps/cli.py` +- **Pattern:** Auto-discovers and routes to modules + +--- + +## Architecture + +``` +CLI/ +├── apps/ +│ ├── cli.py # Entry point +│ ├── modules/ # Business logic +│ ├── handlers/ # Implementation +│ └── plugins/ # Extensions +├── docs/ +├── tests/ +├── passport.json # Identity +├── local.json # Session history +├── observations.json # Collaboration patterns +└── README.md +``` + +--- + +## Commands + +*Configure after initialization* + +--- + +## Integration Points + +### Depends On + + +### Provides To + diff --git a/src/aipass/cli/apps/__init__.py b/src/aipass/cli/apps/__init__.py new file mode 100644 index 00000000..ebc51438 --- /dev/null +++ b/src/aipass/cli/apps/__init__.py @@ -0,0 +1 @@ +# CLI apps package diff --git a/src/aipass/cli/apps/branch.py b/src/aipass/cli/apps/branch.py new file mode 100644 index 00000000..7085d0c4 --- /dev/null +++ b/src/aipass/cli/apps/branch.py @@ -0,0 +1,86 @@ +""" +CLI Branch - Main Orchestrator + +Auto-discovery architecture: +- Scans modules/ directory for .py files with handle_command() +- Routes commands to discovered modules automatically +- No manual imports or routing needed +""" + +import sys +import importlib +from pathlib import Path +from typing import List, Any + +from aipass.prax import logger + +# ============================================================================= +# MODULE DISCOVERY +# ============================================================================= + +MODULES_DIR = Path(__file__).parent / "modules" + + +def discover_modules() -> List[Any]: + """Auto-discover modules in modules/ directory.""" + modules = [] + + if not MODULES_DIR.exists(): + return modules + + for file_path in MODULES_DIR.glob("*.py"): + if file_path.name.startswith("_"): + continue + + module_name = f"apps.modules.{file_path.stem}" + + try: + module = importlib.import_module(module_name) + if hasattr(module, "handle_command"): + modules.append(module) + except Exception as e: + logger.error(f"[CLI] Failed to load module {module_name}: {e}") + + return modules + + +def route_command(command: str, args: List[str], modules: List[Any]) -> bool: + """Route command to appropriate module.""" + for module in modules: + try: + if module.handle_command(command, args): + return True + except Exception as e: + logger.error(f"[CLI] Module {module.__name__} error: {e}") + return False + + +# ============================================================================= +# MAIN ENTRY POINT +# ============================================================================= + +def main(): + """Main entry point - routes commands or shows help.""" + modules = discover_modules() + args = sys.argv[1:] + + if len(args) == 0 or args[0] in ["--help", "-h", "help"]: + print(f"CLI - {len(modules)} modules discovered") + for module in modules: + name = module.__name__.split(".")[-1] + desc = (module.__doc__ or "").strip().split("\n")[0] if module.__doc__ else "No description" + print(f" {name:20} {desc}") + return 0 + + command = args[0] + remaining = args[1:] if len(args) > 1 else [] + + if route_command(command, remaining, modules): + return 0 + + print(f"Unknown command: {command}") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/aipass/cli/apps/handlers/__init__.py b/src/aipass/cli/apps/handlers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/cli/apps/modules/__init__.py b/src/aipass/cli/apps/modules/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/cli/apps/plugins/__init__.py b/src/aipass/cli/apps/plugins/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/cli/artifacts/birth_certificate.json b/src/aipass/cli/artifacts/birth_certificate.json new file mode 100644 index 00000000..13f35f65 --- /dev/null +++ b/src/aipass/cli/artifacts/birth_certificate.json @@ -0,0 +1,15 @@ +{ + "id": "32", + "name": "CLI Birth Certificate", + "type": "birth_certificate", + "creator": "SYSTEM", + "owner": "CLI", + "rarity": "unique", + "description": "Official birth certificate for CLI. Citizen #32, registered using 'library' template. Purpose: Terminal display formatting - headers, success, error, warning helpers", + "metadata": { + "citizen_number": "32", + "template": "library", + "purpose": "Terminal display formatting - headers, success, error, warning helpers" + }, + "created_at": "2026-03-05" +} diff --git a/src/aipass/cli/flow.local.md b/src/aipass/cli/flow.local.md new file mode 100644 index 00000000..a1957f57 --- /dev/null +++ b/src/aipass/cli/flow.local.md @@ -0,0 +1,15 @@ +# flow.local.md - CLI +``` +Branch: /home/aipass/aipass_business/AIPass/src/aipass/cli +Created: 2026-03-05 +``` + +## Issues + +- + +--- + +## Todos + +- diff --git a/src/aipass/cli/pytest.ini b/src/aipass/cli/pytest.ini new file mode 100644 index 00000000..c3f21db6 --- /dev/null +++ b/src/aipass/cli/pytest.ini @@ -0,0 +1,21 @@ +[pytest] +# Test discovery paths +testpaths = tests + +# Test file patterns +python_files = test_*.py +python_functions = test_* +python_classes = Test* + +# Command-line options (always applied) +addopts = + -v # Verbose output + --tb=short # Short traceback format + --strict-markers # Raise error on unknown markers + -ra # Show summary of all test outcomes + +# Test markers (for categorizing tests) +markers = + unit: Unit tests + integration: Integration tests + slow: Tests that take significant time diff --git a/src/aipass/cli/tests/__init__.py b/src/aipass/cli/tests/__init__.py new file mode 100644 index 00000000..8f90c630 --- /dev/null +++ b/src/aipass/cli/tests/__init__.py @@ -0,0 +1 @@ +# Tests package for cli diff --git a/src/aipass/cli/tests/conftest.py b/src/aipass/cli/tests/conftest.py new file mode 100644 index 00000000..a87088fd --- /dev/null +++ b/src/aipass/cli/tests/conftest.py @@ -0,0 +1,43 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: tests/conftest.py +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/tests +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Shared pytest fixtures +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +"""Shared pytest fixtures for cortex tests""" +import pytest +import shutil +import tempfile +from pathlib import Path +from typing import Generator + + +@pytest.fixture +def temp_test_dir() -> Generator[Path, None, None]: + """Creates temporary directory for testing, cleans up after""" + test_dir = Path(tempfile.mkdtemp()) + yield test_dir + if test_dir.exists(): + shutil.rmtree(test_dir) + + +@pytest.fixture +def sample_test_data() -> dict: + """Provides sample test data + + Customize this fixture for your module's needs + """ + return { + "test_key": "test_value", + "sample_data": "example" + } diff --git a/src/aipass/cli/tools/verify_branch.py b/src/aipass/cli/tools/verify_branch.py new file mode 100644 index 00000000..4464af6d --- /dev/null +++ b/src/aipass/cli/tools/verify_branch.py @@ -0,0 +1,159 @@ +#!/home/aipass/.venv/bin/python3 +# -*- coding: utf-8 -*- + +# ===================AIPASS==================== +# META DATA HEADER +# Name: verify_branch.py - Branch Template Verification +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/modules +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Compare template vs branch +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +""" +Branch Template Verification Tool + +Compares template directory with created branch to identify: +- Files in template but missing in branch +- Files in branch but not in template +- Renamed files +""" + +import sys +import json +from pathlib import Path +from typing import Set, List, Tuple +from fnmatch import fnmatch + +# INFRASTRUCTURE IMPORT PATTERN +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) + +# Get template directory +TEMPLATE_DIR = AIPASS_ROOT / "cortex" / "templates" / "branch_template" + + +def load_ignore_patterns() -> Tuple[List[str], List[str]]: + """Load ignore patterns from .registry_ignore.json""" + ignore_file = TEMPLATE_DIR / ".registry_ignore.json" + + if not ignore_file.exists(): + return [], [] + + try: + with open(ignore_file, 'r', encoding='utf-8') as f: + data = json.load(f) + ignore_files = data.get("ignore_files", []) + ignore_patterns = data.get("ignore_patterns", []) + return ignore_files, ignore_patterns + except Exception as e: + print(f"Warning: Could not load .registry_ignore.json: {e}") + return [], [] + + +def should_exclude(path: Path, base_dir: Path, ignore_files: List[str], ignore_patterns: List[str]) -> bool: + """Check if path should be excluded based on ignore patterns""" + rel_path = path.relative_to(base_dir) + filename = path.name + path_str = str(rel_path) + + # Check exact filename matches + if filename in ignore_files: + return True + + # Check glob patterns + for pattern in ignore_patterns: + if fnmatch(filename, pattern): + return True + # Check if any parent directory matches + for part in rel_path.parts: + if fnmatch(part, pattern): + return True + + return False + + +def get_file_set(directory: Path, ignore_files: List[str], ignore_patterns: List[str]) -> Set[str]: + """Get set of all file paths in directory (relative)""" + files = set() + + for item in directory.rglob("*"): + if item.is_file() and not should_exclude(item, directory, ignore_files, ignore_patterns): + rel_path = str(item.relative_to(directory)) + files.add(rel_path) + + return files + + +def verify_branch(branch_dir: Path) -> Tuple[List[str], List[str], List[str]]: + """ + Compare template with branch + + Returns: + Tuple of (in_template_only, in_branch_only, in_both) + """ + # Load ignore patterns from .registry_ignore.json + ignore_files, ignore_patterns = load_ignore_patterns() + + template_files = get_file_set(TEMPLATE_DIR, ignore_files, ignore_patterns) + branch_files = get_file_set(branch_dir, ignore_files, ignore_patterns) + + in_template_only = sorted(template_files - branch_files) + in_branch_only = sorted(branch_files - template_files) + in_both = sorted(template_files & branch_files) + + return in_template_only, in_branch_only, in_both + + +def main(): + if len(sys.argv) < 2: + print("Usage: python3 verify_branch.py ") + print("Example: python3 verify_branch.py test_branch002") + sys.exit(1) + + branch_path = Path(sys.argv[1]) + if not branch_path.is_absolute(): + # Assume it's relative to cortex directory + branch_path = Path.cwd() / branch_path + + if not branch_path.exists(): + print(f"❌ ERROR: Branch directory not found: {branch_path}") + sys.exit(1) + + print(f"\n=== Branch Verification ===") + print(f"Template: {TEMPLATE_DIR}") + print(f"Branch: {branch_path}") + print() + + in_template_only, in_branch_only, in_both = verify_branch(branch_path) + + print(f"Files in both: {len(in_both)}") + print(f"Files in template only: {len(in_template_only)}") + print(f"Files in branch only: {len(in_branch_only)}") + print() + + if in_template_only: + print("❌ Missing from branch (expected from template):") + for file in in_template_only: + print(f" - {file}") + print() + + if in_branch_only: + print("✅ Additional files in branch (renamed or new):") + for file in in_branch_only: + print(f" + {file}") + print() + + if not in_template_only and not in_branch_only: + print("✅ Branch matches template perfectly") + + print("="*70) + + +if __name__ == "__main__": + main() diff --git a/src/aipass/drone/.agent/.backup_ignore.json b/src/aipass/drone/.agent/.backup_ignore.json new file mode 100644 index 00000000..ad552665 --- /dev/null +++ b/src/aipass/drone/.agent/.backup_ignore.json @@ -0,0 +1,37 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Files and patterns to exclude when creating branch backups" + }, + "ignore_directories": [ + ".backup", + ".venv", + "venv", + "node_modules", + "__pycache__", + ".git", + ".cache", + ".pytest_cache", + ".mypy_cache", + "dist", + "build", + "*.egg-info", + "ai_mail.local", + "logs", + ".aipass", + ".archive", + ".claude", + "htmlcov" + ], + "ignore_patterns": [ + "*.pyc", + "*.pyo", + ".DS_Store", + "*.log", + "*.tmp", + "*.swp", + "*~", + "*.env", + "BRANCH_REGISTRY.json" + ] +} diff --git a/src/aipass/drone/.agent/.migrations.json b/src/aipass/drone/.agent/.migrations.json new file mode 100644 index 00000000..a33f4115 --- /dev/null +++ b/src/aipass/drone/.agent/.migrations.json @@ -0,0 +1,49 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Template structural migrations for branch updates", + "last_updated": "2025-11-07", + "applies_to_versions": ["all"] + }, + "migrations": [ + { + "id": "m001", + "description": "Example: Migrate flat metadata to document_metadata structure", + "version_introduced": "1.0.0", + "applies_to_files": ["*.id.json"], + "operations": [ + { + "type": "key_rename", + "from": "metadata", + "to": "document_metadata" + }, + { + "type": "move_to_nested", + "source_keys": ["branch_name", "path", "profile"], + "target_parent": "branch_info" + }, + { + "type": "add_missing_keys", + "parent": "document_metadata", + "keys": { + "document_type": "branch_identity", + "schema_version": "1.0.0" + } + } + ] + } + ], + "options": { + "skip_if_target_exists": true, + "preserve_unknown_keys": true, + "recursive_application": false + }, + "notes": { + "usage": "This file defines structural transformation rules applied during branch updates", + "pattern_matching": "applies_to_files uses glob patterns (*.json, *.id.json, etc.)", + "operation_order": "Operations execute in order listed within each migration", + "skip_behavior": "Operations skip if already compliant (target exists = success)", + "supported_operations": ["key_rename", "move_to_nested", "add_missing_keys"], + "future_operations": ["split_key", "combine_keys", "delete_key", "transform_value"] + } +} diff --git a/src/aipass/drone/.agent/.registry_ignore.json b/src/aipass/drone/.agent/.registry_ignore.json new file mode 100644 index 00000000..a3bbaed7 --- /dev/null +++ b/src/aipass/drone/.agent/.registry_ignore.json @@ -0,0 +1,43 @@ +{ + "metadata": { + "version": "1.1.0", + "description": "Files and patterns to exclude when updating branches from template", + "last_updated": "2025-11-09" + }, + "ignore_files": [ + ".template_registry.json", + ".registry_ignore.json" + ], + "ignore_patterns": [ + "__pycache__", + "*.pyc", + "#@comments.txt", + ".backup_*" + ], + "notes": { + "how_it_works": "Two types of exclusions during branch updates:", + "ignore_files": { + "description": "Exact filename matches (no wildcards)", + "purpose": "Template-internal management files that branches don't need", + "examples": [ + ".template_registry.json (template's file tracking list)", + ".registry_ignore.json (this config file)" + ] + }, + "ignore_patterns": { + "description": "Glob patterns - matches filenames AND directory names", + "purpose": "Exclude generated files, caches, and user content markers", + "examples": [ + "__pycache__ (Python cache directories)", + "*.pyc (Python compiled bytecode files)", + "#@comments.txt (user comment files)", + ".backup_* (timestamped backup files like .backup_20251109, NOT .backup directory)" + ], + "how_matching_works": [ + "Step 1: Check if filename matches pattern (e.g., file.pyc matches *.pyc)", + "Step 2: Check if any parent directory matches (e.g., files inside __pycache__/ dir)" + ] + }, + "what_gets_ignored": "These files never copy to branches during updates - they stay template-only" + } +} diff --git a/src/aipass/drone/.agent/.template_registry.json b/src/aipass/drone/.agent/.template_registry.json new file mode 100644 index 00000000..af0b44f1 --- /dev/null +++ b/src/aipass/drone/.agent/.template_registry.json @@ -0,0 +1,184 @@ +{ + "metadata": { + "description": "Template registry for tracking files", + "generated": true + }, + "files": { + "f001": { + "path": ".aipass/aipass_local_prompt.md", + "name": "aipass_local_prompt.md", + "content_hash": "3355bfa2a158034a", + "has_branch_placeholder": false + }, + "f002": { + "path": ".claude/settings.local.json", + "name": "settings.local.json", + "content_hash": "6379c5be3fb714ac", + "has_branch_placeholder": false + }, + "f003": { + "path": ".gitignore", + "name": ".gitignore", + "content_hash": "841dedb922da7ddb", + "has_branch_placeholder": false + }, + "f004": { + "path": ".trinity/local.json", + "name": "local.json", + "content_hash": "ea83c9972a157754", + "has_branch_placeholder": false + }, + "f005": { + "path": ".trinity/observations.json", + "name": "observations.json", + "content_hash": "b11c5e097705281c", + "has_branch_placeholder": false + }, + "f006": { + "path": ".trinity/passport.json", + "name": "passport.json", + "content_hash": "8644c91fe4a8246f", + "has_branch_placeholder": false + }, + "f007": { + "path": "DASHBOARD.local.json", + "name": "DASHBOARD.local.json", + "content_hash": "8b8594e36158acd4", + "has_branch_placeholder": false + }, + "f008": { + "path": "README.md", + "name": "README.md", + "content_hash": "c39108bde9346c58", + "has_branch_placeholder": false + }, + "f009": { + "path": "apps/__init__.py", + "name": "__init__.py", + "content_hash": "093ad65fa80094da", + "has_branch_placeholder": false + }, + "f010": { + "path": "apps/branch.py", + "name": "branch.py", + "content_hash": "ef22ee28aac325ac", + "has_branch_placeholder": false + }, + "f011": { + "path": "apps/handlers/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f012": { + "path": "apps/modules/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f013": { + "path": "apps/plugins/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f014": { + "path": "artifacts/birth_certificate.json", + "name": "birth_certificate.json", + "content_hash": "40d1eece6992b3c6", + "has_branch_placeholder": false + }, + "f015": { + "path": "flow.local.md", + "name": "flow.local.md", + "content_hash": "2969274f045ff065", + "has_branch_placeholder": false + }, + "f016": { + "path": "pytest.ini", + "name": "pytest.ini", + "content_hash": "7b39ba7bca4025c5", + "has_branch_placeholder": false + }, + "f017": { + "path": "tests/__init__.py", + "name": "__init__.py", + "content_hash": "c93579434ecce5bd", + "has_branch_placeholder": false + }, + "f018": { + "path": "tests/conftest.py", + "name": "conftest.py", + "content_hash": "5e5f2399e0d70978", + "has_branch_placeholder": false + }, + "f019": { + "path": "tools/verify_branch.py", + "name": "verify_branch.py", + "content_hash": "06803a84118e5453", + "has_branch_placeholder": false + } + }, + "directories": { + "d001": { + "path": ".aipass", + "name": ".aipass" + }, + "d002": { + "path": ".archive", + "name": ".archive" + }, + "d003": { + "path": ".claude", + "name": ".claude" + }, + "d004": { + "path": ".trinity", + "name": ".trinity" + }, + "d005": { + "path": "apps", + "name": "apps" + }, + "d006": { + "path": "apps/handlers", + "name": "handlers" + }, + "d007": { + "path": "apps/modules", + "name": "modules" + }, + "d008": { + "path": "apps/plugins", + "name": "plugins" + }, + "d009": { + "path": "artifacts", + "name": "artifacts" + }, + "d010": { + "path": "docs", + "name": "docs" + }, + "d011": { + "path": "drone_json", + "name": "drone_json" + }, + "d012": { + "path": "dropbox", + "name": "dropbox" + }, + "d013": { + "path": "templates", + "name": "templates" + }, + "d014": { + "path": "tests", + "name": "tests" + }, + "d015": { + "path": "tools", + "name": "tools" + } + } +} diff --git a/src/aipass/drone/.gitignore b/src/aipass/drone/.gitignore new file mode 100644 index 00000000..9cf1dfc4 --- /dev/null +++ b/src/aipass/drone/.gitignore @@ -0,0 +1,14 @@ +__pycache__/ +*.pyc +*.pyo +.env +*.egg-info/ +.coverage +htmlcov/ +.pytest_cache/ +.mypy_cache/ +dist/ +build/ +*.log +*.tmp +*.swp diff --git a/src/aipass/drone/.trinity/local.json b/src/aipass/drone/.trinity/local.json new file mode 100644 index 00000000..bf930864 --- /dev/null +++ b/src/aipass/drone/.trinity/local.json @@ -0,0 +1,34 @@ +{ + "document_metadata": { + "document_type": "session_history", + "document_name": "DRONE.LOCAL", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "DRONE", + "tags": ["session_tracking", "work_log", "DRONE"], + "limits": { + "max_lines": 600, + "note": "Auto-rollover when max_lines exceeded" + }, + "status": { + "health": "healthy", + "current_lines": 0, + "last_health_check": "2026-03-05" + } + }, + "active_tasks": { + "today_focus": "2026-03-05", + "recently_completed": [] + }, + "key_learnings": {}, + "sessions": [ + { + "session_number": 1, + "date": "2026-03-05", + "summary": "Branch initialized - DRONE created by aipass init", + "status": "completed" + } + ] +} diff --git a/src/aipass/drone/.trinity/observations.json b/src/aipass/drone/.trinity/observations.json new file mode 100644 index 00000000..bc818037 --- /dev/null +++ b/src/aipass/drone/.trinity/observations.json @@ -0,0 +1,37 @@ +{ + "document_metadata": { + "document_type": "collaboration_patterns", + "document_name": "DRONE.OBSERVATIONS", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "DRONE", + "tags": ["collaboration", "patterns", "DRONE"], + "limits": { + "max_lines": 600, + "note": "Auto-rollover when max_lines exceeded" + }, + "status": { + "health": "healthy", + "current_lines": 0, + "last_health_check": "2026-03-05" + } + }, + "guidelines": { + "purpose": "Capture collaboration patterns and experiential insights over time", + "chronological_order": "Newest entries at TOP, oldest at BOTTOM - NEVER reorder" + }, + "observations": [ + { + "date": "2026-03-05", + "session": 1, + "entries": [ + { + "title": "First Contact", + "detail": "Branch initialized. Ready to begin capturing collaboration patterns." + } + ] + } + ] +} diff --git a/src/aipass/drone/.trinity/passport.json b/src/aipass/drone/.trinity/passport.json new file mode 100644 index 00000000..f3f68a0e --- /dev/null +++ b/src/aipass/drone/.trinity/passport.json @@ -0,0 +1,36 @@ +{ + "document_metadata": { + "document_type": "branch_identity", + "document_name": "DRONE.PASSPORT", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "DRONE", + "tags": ["identity", "passport", "branch_profile"] + }, + "branch_info": { + "branch_name": "DRONE", + "alias": "", + "path": "/home/aipass/aipass_business/AIPass/src/aipass/drone", + "module": "drone", + "created": "2026-03-05" + }, + "identity": { + "role": "Command Router", + "purpose": "", + "what_i_do": [], + "what_i_dont_do": [] + }, + "principles": [ + "Code is truth - fail honestly", + "Memory persists - context survives", + "Simple solutions over complex architecture" + ], + "citizenship": { + "registered": true, + "registry_path": ".aipass/registry.json", + "communications": true, + "memory": true + } +} diff --git a/src/aipass/drone/DASHBOARD.local.json b/src/aipass/drone/DASHBOARD.local.json new file mode 100644 index 00000000..f327319e --- /dev/null +++ b/src/aipass/drone/DASHBOARD.local.json @@ -0,0 +1,62 @@ +{ + "_warning": "AUTO-GENERATED FILE - DO NOT MANUALLY EDIT. This file is 100% automated and will be overwritten. Services update their own sections.", + "branch": "DRONE", + "last_updated": "2026-03-05", + "quick_status": { + "new_mail": 0, + "opened_mail": 0, + "active_plans": 0, + "commons_mentions": 0, + "action_required": false, + "summary": "" + }, + "sections": { + "ai_mail": { + "managed_by": "ai_mail", + "new": 0, + "opened": 0, + "total": 0, + "oldest_unread_age": null, + "last_dispatch_received": null, + "last_updated": "2026-03-05" + }, + "flow": { + "managed_by": "flow", + "active_plans": 0, + "recently_closed": [], + "last_updated": "2026-03-05" + }, + "memory_bank": { + "managed_by": "memory_bank", + "vectors_stored": 0, + "notes": {}, + "last_updated": "2026-03-05" + }, + "devpulse": { + "managed_by": "devpulse", + "summary": { + "issues": 0, + "todos": 0 + }, + "dplan_counts": {}, + "recent_activity": "", + "last_updated": "2026-03-05" + }, + "commons_activity": { + "managed_by": "the_commons", + "new_posts_since_last_visit": 0, + "new_comments_since_last_visit": 0, + "mentions": 0, + "trending": "None", + "last_checked": null, + "last_updated": "2026-03-05" + }, + "agent_status": { + "managed_by": "prax", + "active_agents": [], + "agent_count": 0, + "stale_agents": [], + "last_updated": "2026-03-05" + } + } +} diff --git a/src/aipass/drone/README.md b/src/aipass/drone/README.md new file mode 100644 index 00000000..19697d22 --- /dev/null +++ b/src/aipass/drone/README.md @@ -0,0 +1,51 @@ +# DRONE + +**Purpose:** Command routing, @ resolution, module discovery and dispatch +**Module:** `aipass.drone` +**Created:** 2026-03-05 + +--- + +## Overview + +### What I Do + + +### How I Work +- **Entry Point:** `apps/drone.py` +- **Pattern:** Auto-discovers and routes to modules + +--- + +## Architecture + +``` +DRONE/ +├── apps/ +│ ├── drone.py # Entry point +│ ├── modules/ # Business logic +│ ├── handlers/ # Implementation +│ └── plugins/ # Extensions +├── docs/ +├── tests/ +├── passport.json # Identity +├── local.json # Session history +├── observations.json # Collaboration patterns +└── README.md +``` + +--- + +## Commands + +*Configure after initialization* + +--- + +## Integration Points + +### Depends On + + +### Provides To + diff --git a/src/aipass/drone/apps/__init__.py b/src/aipass/drone/apps/__init__.py new file mode 100644 index 00000000..c288a799 --- /dev/null +++ b/src/aipass/drone/apps/__init__.py @@ -0,0 +1 @@ +# DRONE apps package diff --git a/src/aipass/drone/apps/branch.py b/src/aipass/drone/apps/branch.py new file mode 100644 index 00000000..b6689951 --- /dev/null +++ b/src/aipass/drone/apps/branch.py @@ -0,0 +1,86 @@ +""" +DRONE Branch - Main Orchestrator + +Auto-discovery architecture: +- Scans modules/ directory for .py files with handle_command() +- Routes commands to discovered modules automatically +- No manual imports or routing needed +""" + +import sys +import importlib +from pathlib import Path +from typing import List, Any + +from aipass.prax import logger + +# ============================================================================= +# MODULE DISCOVERY +# ============================================================================= + +MODULES_DIR = Path(__file__).parent / "modules" + + +def discover_modules() -> List[Any]: + """Auto-discover modules in modules/ directory.""" + modules = [] + + if not MODULES_DIR.exists(): + return modules + + for file_path in MODULES_DIR.glob("*.py"): + if file_path.name.startswith("_"): + continue + + module_name = f"apps.modules.{file_path.stem}" + + try: + module = importlib.import_module(module_name) + if hasattr(module, "handle_command"): + modules.append(module) + except Exception as e: + logger.error(f"[DRONE] Failed to load module {module_name}: {e}") + + return modules + + +def route_command(command: str, args: List[str], modules: List[Any]) -> bool: + """Route command to appropriate module.""" + for module in modules: + try: + if module.handle_command(command, args): + return True + except Exception as e: + logger.error(f"[DRONE] Module {module.__name__} error: {e}") + return False + + +# ============================================================================= +# MAIN ENTRY POINT +# ============================================================================= + +def main(): + """Main entry point - routes commands or shows help.""" + modules = discover_modules() + args = sys.argv[1:] + + if len(args) == 0 or args[0] in ["--help", "-h", "help"]: + print(f"DRONE - {len(modules)} modules discovered") + for module in modules: + name = module.__name__.split(".")[-1] + desc = (module.__doc__ or "").strip().split("\n")[0] if module.__doc__ else "No description" + print(f" {name:20} {desc}") + return 0 + + command = args[0] + remaining = args[1:] if len(args) > 1 else [] + + if route_command(command, remaining, modules): + return 0 + + print(f"Unknown command: {command}") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/aipass/drone/apps/handlers/__init__.py b/src/aipass/drone/apps/handlers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/drone/apps/modules/__init__.py b/src/aipass/drone/apps/modules/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/drone/apps/plugins/__init__.py b/src/aipass/drone/apps/plugins/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/drone/artifacts/birth_certificate.json b/src/aipass/drone/artifacts/birth_certificate.json new file mode 100644 index 00000000..a98960e8 --- /dev/null +++ b/src/aipass/drone/artifacts/birth_certificate.json @@ -0,0 +1,15 @@ +{ + "id": "32", + "name": "DRONE Birth Certificate", + "type": "birth_certificate", + "creator": "SYSTEM", + "owner": "DRONE", + "rarity": "unique", + "description": "Official birth certificate for DRONE. Citizen #32, registered using 'library' template. Purpose: Command routing, @ resolution, module discovery and dispatch", + "metadata": { + "citizen_number": "32", + "template": "library", + "purpose": "Command routing, @ resolution, module discovery and dispatch" + }, + "created_at": "2026-03-05" +} diff --git a/src/aipass/drone/flow.local.md b/src/aipass/drone/flow.local.md new file mode 100644 index 00000000..91ffa40b --- /dev/null +++ b/src/aipass/drone/flow.local.md @@ -0,0 +1,15 @@ +# flow.local.md - DRONE +``` +Branch: /home/aipass/aipass_business/AIPass/src/aipass/drone +Created: 2026-03-05 +``` + +## Issues + +- + +--- + +## Todos + +- diff --git a/src/aipass/drone/pytest.ini b/src/aipass/drone/pytest.ini new file mode 100644 index 00000000..c3f21db6 --- /dev/null +++ b/src/aipass/drone/pytest.ini @@ -0,0 +1,21 @@ +[pytest] +# Test discovery paths +testpaths = tests + +# Test file patterns +python_files = test_*.py +python_functions = test_* +python_classes = Test* + +# Command-line options (always applied) +addopts = + -v # Verbose output + --tb=short # Short traceback format + --strict-markers # Raise error on unknown markers + -ra # Show summary of all test outcomes + +# Test markers (for categorizing tests) +markers = + unit: Unit tests + integration: Integration tests + slow: Tests that take significant time diff --git a/src/aipass/drone/tests/__init__.py b/src/aipass/drone/tests/__init__.py new file mode 100644 index 00000000..39985bc8 --- /dev/null +++ b/src/aipass/drone/tests/__init__.py @@ -0,0 +1 @@ +# Tests package for drone diff --git a/src/aipass/drone/tests/conftest.py b/src/aipass/drone/tests/conftest.py new file mode 100644 index 00000000..a87088fd --- /dev/null +++ b/src/aipass/drone/tests/conftest.py @@ -0,0 +1,43 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: tests/conftest.py +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/tests +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Shared pytest fixtures +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +"""Shared pytest fixtures for cortex tests""" +import pytest +import shutil +import tempfile +from pathlib import Path +from typing import Generator + + +@pytest.fixture +def temp_test_dir() -> Generator[Path, None, None]: + """Creates temporary directory for testing, cleans up after""" + test_dir = Path(tempfile.mkdtemp()) + yield test_dir + if test_dir.exists(): + shutil.rmtree(test_dir) + + +@pytest.fixture +def sample_test_data() -> dict: + """Provides sample test data + + Customize this fixture for your module's needs + """ + return { + "test_key": "test_value", + "sample_data": "example" + } diff --git a/src/aipass/drone/tools/verify_branch.py b/src/aipass/drone/tools/verify_branch.py new file mode 100644 index 00000000..4464af6d --- /dev/null +++ b/src/aipass/drone/tools/verify_branch.py @@ -0,0 +1,159 @@ +#!/home/aipass/.venv/bin/python3 +# -*- coding: utf-8 -*- + +# ===================AIPASS==================== +# META DATA HEADER +# Name: verify_branch.py - Branch Template Verification +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/modules +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Compare template vs branch +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +""" +Branch Template Verification Tool + +Compares template directory with created branch to identify: +- Files in template but missing in branch +- Files in branch but not in template +- Renamed files +""" + +import sys +import json +from pathlib import Path +from typing import Set, List, Tuple +from fnmatch import fnmatch + +# INFRASTRUCTURE IMPORT PATTERN +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) + +# Get template directory +TEMPLATE_DIR = AIPASS_ROOT / "cortex" / "templates" / "branch_template" + + +def load_ignore_patterns() -> Tuple[List[str], List[str]]: + """Load ignore patterns from .registry_ignore.json""" + ignore_file = TEMPLATE_DIR / ".registry_ignore.json" + + if not ignore_file.exists(): + return [], [] + + try: + with open(ignore_file, 'r', encoding='utf-8') as f: + data = json.load(f) + ignore_files = data.get("ignore_files", []) + ignore_patterns = data.get("ignore_patterns", []) + return ignore_files, ignore_patterns + except Exception as e: + print(f"Warning: Could not load .registry_ignore.json: {e}") + return [], [] + + +def should_exclude(path: Path, base_dir: Path, ignore_files: List[str], ignore_patterns: List[str]) -> bool: + """Check if path should be excluded based on ignore patterns""" + rel_path = path.relative_to(base_dir) + filename = path.name + path_str = str(rel_path) + + # Check exact filename matches + if filename in ignore_files: + return True + + # Check glob patterns + for pattern in ignore_patterns: + if fnmatch(filename, pattern): + return True + # Check if any parent directory matches + for part in rel_path.parts: + if fnmatch(part, pattern): + return True + + return False + + +def get_file_set(directory: Path, ignore_files: List[str], ignore_patterns: List[str]) -> Set[str]: + """Get set of all file paths in directory (relative)""" + files = set() + + for item in directory.rglob("*"): + if item.is_file() and not should_exclude(item, directory, ignore_files, ignore_patterns): + rel_path = str(item.relative_to(directory)) + files.add(rel_path) + + return files + + +def verify_branch(branch_dir: Path) -> Tuple[List[str], List[str], List[str]]: + """ + Compare template with branch + + Returns: + Tuple of (in_template_only, in_branch_only, in_both) + """ + # Load ignore patterns from .registry_ignore.json + ignore_files, ignore_patterns = load_ignore_patterns() + + template_files = get_file_set(TEMPLATE_DIR, ignore_files, ignore_patterns) + branch_files = get_file_set(branch_dir, ignore_files, ignore_patterns) + + in_template_only = sorted(template_files - branch_files) + in_branch_only = sorted(branch_files - template_files) + in_both = sorted(template_files & branch_files) + + return in_template_only, in_branch_only, in_both + + +def main(): + if len(sys.argv) < 2: + print("Usage: python3 verify_branch.py ") + print("Example: python3 verify_branch.py test_branch002") + sys.exit(1) + + branch_path = Path(sys.argv[1]) + if not branch_path.is_absolute(): + # Assume it's relative to cortex directory + branch_path = Path.cwd() / branch_path + + if not branch_path.exists(): + print(f"❌ ERROR: Branch directory not found: {branch_path}") + sys.exit(1) + + print(f"\n=== Branch Verification ===") + print(f"Template: {TEMPLATE_DIR}") + print(f"Branch: {branch_path}") + print() + + in_template_only, in_branch_only, in_both = verify_branch(branch_path) + + print(f"Files in both: {len(in_both)}") + print(f"Files in template only: {len(in_template_only)}") + print(f"Files in branch only: {len(in_branch_only)}") + print() + + if in_template_only: + print("❌ Missing from branch (expected from template):") + for file in in_template_only: + print(f" - {file}") + print() + + if in_branch_only: + print("✅ Additional files in branch (renamed or new):") + for file in in_branch_only: + print(f" + {file}") + print() + + if not in_template_only and not in_branch_only: + print("✅ Branch matches template perfectly") + + print("="*70) + + +if __name__ == "__main__": + main() diff --git a/src/aipass/flow/.agent/.backup_ignore.json b/src/aipass/flow/.agent/.backup_ignore.json new file mode 100644 index 00000000..ad552665 --- /dev/null +++ b/src/aipass/flow/.agent/.backup_ignore.json @@ -0,0 +1,37 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Files and patterns to exclude when creating branch backups" + }, + "ignore_directories": [ + ".backup", + ".venv", + "venv", + "node_modules", + "__pycache__", + ".git", + ".cache", + ".pytest_cache", + ".mypy_cache", + "dist", + "build", + "*.egg-info", + "ai_mail.local", + "logs", + ".aipass", + ".archive", + ".claude", + "htmlcov" + ], + "ignore_patterns": [ + "*.pyc", + "*.pyo", + ".DS_Store", + "*.log", + "*.tmp", + "*.swp", + "*~", + "*.env", + "BRANCH_REGISTRY.json" + ] +} diff --git a/src/aipass/flow/.agent/.migrations.json b/src/aipass/flow/.agent/.migrations.json new file mode 100644 index 00000000..a33f4115 --- /dev/null +++ b/src/aipass/flow/.agent/.migrations.json @@ -0,0 +1,49 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Template structural migrations for branch updates", + "last_updated": "2025-11-07", + "applies_to_versions": ["all"] + }, + "migrations": [ + { + "id": "m001", + "description": "Example: Migrate flat metadata to document_metadata structure", + "version_introduced": "1.0.0", + "applies_to_files": ["*.id.json"], + "operations": [ + { + "type": "key_rename", + "from": "metadata", + "to": "document_metadata" + }, + { + "type": "move_to_nested", + "source_keys": ["branch_name", "path", "profile"], + "target_parent": "branch_info" + }, + { + "type": "add_missing_keys", + "parent": "document_metadata", + "keys": { + "document_type": "branch_identity", + "schema_version": "1.0.0" + } + } + ] + } + ], + "options": { + "skip_if_target_exists": true, + "preserve_unknown_keys": true, + "recursive_application": false + }, + "notes": { + "usage": "This file defines structural transformation rules applied during branch updates", + "pattern_matching": "applies_to_files uses glob patterns (*.json, *.id.json, etc.)", + "operation_order": "Operations execute in order listed within each migration", + "skip_behavior": "Operations skip if already compliant (target exists = success)", + "supported_operations": ["key_rename", "move_to_nested", "add_missing_keys"], + "future_operations": ["split_key", "combine_keys", "delete_key", "transform_value"] + } +} diff --git a/src/aipass/flow/.agent/.registry_ignore.json b/src/aipass/flow/.agent/.registry_ignore.json new file mode 100644 index 00000000..a3bbaed7 --- /dev/null +++ b/src/aipass/flow/.agent/.registry_ignore.json @@ -0,0 +1,43 @@ +{ + "metadata": { + "version": "1.1.0", + "description": "Files and patterns to exclude when updating branches from template", + "last_updated": "2025-11-09" + }, + "ignore_files": [ + ".template_registry.json", + ".registry_ignore.json" + ], + "ignore_patterns": [ + "__pycache__", + "*.pyc", + "#@comments.txt", + ".backup_*" + ], + "notes": { + "how_it_works": "Two types of exclusions during branch updates:", + "ignore_files": { + "description": "Exact filename matches (no wildcards)", + "purpose": "Template-internal management files that branches don't need", + "examples": [ + ".template_registry.json (template's file tracking list)", + ".registry_ignore.json (this config file)" + ] + }, + "ignore_patterns": { + "description": "Glob patterns - matches filenames AND directory names", + "purpose": "Exclude generated files, caches, and user content markers", + "examples": [ + "__pycache__ (Python cache directories)", + "*.pyc (Python compiled bytecode files)", + "#@comments.txt (user comment files)", + ".backup_* (timestamped backup files like .backup_20251109, NOT .backup directory)" + ], + "how_matching_works": [ + "Step 1: Check if filename matches pattern (e.g., file.pyc matches *.pyc)", + "Step 2: Check if any parent directory matches (e.g., files inside __pycache__/ dir)" + ] + }, + "what_gets_ignored": "These files never copy to branches during updates - they stay template-only" + } +} diff --git a/src/aipass/flow/.agent/.template_registry.json b/src/aipass/flow/.agent/.template_registry.json new file mode 100644 index 00000000..99f05d3d --- /dev/null +++ b/src/aipass/flow/.agent/.template_registry.json @@ -0,0 +1,184 @@ +{ + "metadata": { + "description": "Template registry for tracking files", + "generated": true + }, + "files": { + "f001": { + "path": ".aipass/aipass_local_prompt.md", + "name": "aipass_local_prompt.md", + "content_hash": "d9f30eec94323dce", + "has_branch_placeholder": false + }, + "f002": { + "path": ".claude/settings.local.json", + "name": "settings.local.json", + "content_hash": "6379c5be3fb714ac", + "has_branch_placeholder": false + }, + "f003": { + "path": ".gitignore", + "name": ".gitignore", + "content_hash": "841dedb922da7ddb", + "has_branch_placeholder": false + }, + "f004": { + "path": ".trinity/local.json", + "name": "local.json", + "content_hash": "73802b130cf702c0", + "has_branch_placeholder": false + }, + "f005": { + "path": ".trinity/observations.json", + "name": "observations.json", + "content_hash": "ca99db1e971f87b8", + "has_branch_placeholder": false + }, + "f006": { + "path": ".trinity/passport.json", + "name": "passport.json", + "content_hash": "401de7ee8be708f2", + "has_branch_placeholder": false + }, + "f007": { + "path": "DASHBOARD.local.json", + "name": "DASHBOARD.local.json", + "content_hash": "84bbf1dcba695ba9", + "has_branch_placeholder": false + }, + "f008": { + "path": "README.md", + "name": "README.md", + "content_hash": "d6db2cf386aadb48", + "has_branch_placeholder": false + }, + "f009": { + "path": "apps/__init__.py", + "name": "__init__.py", + "content_hash": "d21e6e1e683010c4", + "has_branch_placeholder": false + }, + "f010": { + "path": "apps/branch.py", + "name": "branch.py", + "content_hash": "b57c3cacbc7ceed6", + "has_branch_placeholder": false + }, + "f011": { + "path": "apps/handlers/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f012": { + "path": "apps/modules/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f013": { + "path": "apps/plugins/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f014": { + "path": "artifacts/birth_certificate.json", + "name": "birth_certificate.json", + "content_hash": "f67445a5ca0421e2", + "has_branch_placeholder": false + }, + "f015": { + "path": "flow.local.md", + "name": "flow.local.md", + "content_hash": "aa99b6d661fcc117", + "has_branch_placeholder": false + }, + "f016": { + "path": "pytest.ini", + "name": "pytest.ini", + "content_hash": "7b39ba7bca4025c5", + "has_branch_placeholder": false + }, + "f017": { + "path": "tests/__init__.py", + "name": "__init__.py", + "content_hash": "8d879ba57a180e9b", + "has_branch_placeholder": false + }, + "f018": { + "path": "tests/conftest.py", + "name": "conftest.py", + "content_hash": "5e5f2399e0d70978", + "has_branch_placeholder": false + }, + "f019": { + "path": "tools/verify_branch.py", + "name": "verify_branch.py", + "content_hash": "06803a84118e5453", + "has_branch_placeholder": false + } + }, + "directories": { + "d001": { + "path": ".aipass", + "name": ".aipass" + }, + "d002": { + "path": ".archive", + "name": ".archive" + }, + "d003": { + "path": ".claude", + "name": ".claude" + }, + "d004": { + "path": ".trinity", + "name": ".trinity" + }, + "d005": { + "path": "apps", + "name": "apps" + }, + "d006": { + "path": "apps/handlers", + "name": "handlers" + }, + "d007": { + "path": "apps/modules", + "name": "modules" + }, + "d008": { + "path": "apps/plugins", + "name": "plugins" + }, + "d009": { + "path": "artifacts", + "name": "artifacts" + }, + "d010": { + "path": "docs", + "name": "docs" + }, + "d011": { + "path": "dropbox", + "name": "dropbox" + }, + "d012": { + "path": "flow_json", + "name": "flow_json" + }, + "d013": { + "path": "templates", + "name": "templates" + }, + "d014": { + "path": "tests", + "name": "tests" + }, + "d015": { + "path": "tools", + "name": "tools" + } + } +} diff --git a/src/aipass/flow/.gitignore b/src/aipass/flow/.gitignore new file mode 100644 index 00000000..9cf1dfc4 --- /dev/null +++ b/src/aipass/flow/.gitignore @@ -0,0 +1,14 @@ +__pycache__/ +*.pyc +*.pyo +.env +*.egg-info/ +.coverage +htmlcov/ +.pytest_cache/ +.mypy_cache/ +dist/ +build/ +*.log +*.tmp +*.swp diff --git a/src/aipass/flow/.trinity/local.json b/src/aipass/flow/.trinity/local.json new file mode 100644 index 00000000..d60b3fd3 --- /dev/null +++ b/src/aipass/flow/.trinity/local.json @@ -0,0 +1,34 @@ +{ + "document_metadata": { + "document_type": "session_history", + "document_name": "FLOW.LOCAL", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "FLOW", + "tags": ["session_tracking", "work_log", "FLOW"], + "limits": { + "max_lines": 600, + "note": "Auto-rollover when max_lines exceeded" + }, + "status": { + "health": "healthy", + "current_lines": 0, + "last_health_check": "2026-03-05" + } + }, + "active_tasks": { + "today_focus": "2026-03-05", + "recently_completed": [] + }, + "key_learnings": {}, + "sessions": [ + { + "session_number": 1, + "date": "2026-03-05", + "summary": "Branch initialized - FLOW created by aipass init", + "status": "completed" + } + ] +} diff --git a/src/aipass/flow/.trinity/observations.json b/src/aipass/flow/.trinity/observations.json new file mode 100644 index 00000000..4a62214b --- /dev/null +++ b/src/aipass/flow/.trinity/observations.json @@ -0,0 +1,37 @@ +{ + "document_metadata": { + "document_type": "collaboration_patterns", + "document_name": "FLOW.OBSERVATIONS", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "FLOW", + "tags": ["collaboration", "patterns", "FLOW"], + "limits": { + "max_lines": 600, + "note": "Auto-rollover when max_lines exceeded" + }, + "status": { + "health": "healthy", + "current_lines": 0, + "last_health_check": "2026-03-05" + } + }, + "guidelines": { + "purpose": "Capture collaboration patterns and experiential insights over time", + "chronological_order": "Newest entries at TOP, oldest at BOTTOM - NEVER reorder" + }, + "observations": [ + { + "date": "2026-03-05", + "session": 1, + "entries": [ + { + "title": "First Contact", + "detail": "Branch initialized. Ready to begin capturing collaboration patterns." + } + ] + } + ] +} diff --git a/src/aipass/flow/.trinity/passport.json b/src/aipass/flow/.trinity/passport.json new file mode 100644 index 00000000..6d783476 --- /dev/null +++ b/src/aipass/flow/.trinity/passport.json @@ -0,0 +1,36 @@ +{ + "document_metadata": { + "document_type": "branch_identity", + "document_name": "FLOW.PASSPORT", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "FLOW", + "tags": ["identity", "passport", "branch_profile"] + }, + "branch_info": { + "branch_name": "FLOW", + "alias": "", + "path": "/home/aipass/aipass_business/AIPass/src/aipass/flow", + "module": "flow", + "created": "2026-03-05" + }, + "identity": { + "role": "Planning & Workflow", + "purpose": "", + "what_i_do": [], + "what_i_dont_do": [] + }, + "principles": [ + "Code is truth - fail honestly", + "Memory persists - context survives", + "Simple solutions over complex architecture" + ], + "citizenship": { + "registered": true, + "registry_path": ".aipass/registry.json", + "communications": true, + "memory": true + } +} diff --git a/src/aipass/flow/DASHBOARD.local.json b/src/aipass/flow/DASHBOARD.local.json new file mode 100644 index 00000000..1f3190b4 --- /dev/null +++ b/src/aipass/flow/DASHBOARD.local.json @@ -0,0 +1,62 @@ +{ + "_warning": "AUTO-GENERATED FILE - DO NOT MANUALLY EDIT. This file is 100% automated and will be overwritten. Services update their own sections.", + "branch": "FLOW", + "last_updated": "2026-03-05", + "quick_status": { + "new_mail": 0, + "opened_mail": 0, + "active_plans": 0, + "commons_mentions": 0, + "action_required": false, + "summary": "" + }, + "sections": { + "ai_mail": { + "managed_by": "ai_mail", + "new": 0, + "opened": 0, + "total": 0, + "oldest_unread_age": null, + "last_dispatch_received": null, + "last_updated": "2026-03-05" + }, + "flow": { + "managed_by": "flow", + "active_plans": 0, + "recently_closed": [], + "last_updated": "2026-03-05" + }, + "memory_bank": { + "managed_by": "memory_bank", + "vectors_stored": 0, + "notes": {}, + "last_updated": "2026-03-05" + }, + "devpulse": { + "managed_by": "devpulse", + "summary": { + "issues": 0, + "todos": 0 + }, + "dplan_counts": {}, + "recent_activity": "", + "last_updated": "2026-03-05" + }, + "commons_activity": { + "managed_by": "the_commons", + "new_posts_since_last_visit": 0, + "new_comments_since_last_visit": 0, + "mentions": 0, + "trending": "None", + "last_checked": null, + "last_updated": "2026-03-05" + }, + "agent_status": { + "managed_by": "prax", + "active_agents": [], + "agent_count": 0, + "stale_agents": [], + "last_updated": "2026-03-05" + } + } +} diff --git a/src/aipass/flow/README.md b/src/aipass/flow/README.md new file mode 100644 index 00000000..f544e9f0 --- /dev/null +++ b/src/aipass/flow/README.md @@ -0,0 +1,51 @@ +# FLOW + +**Purpose:** Plan lifecycle management - DPLAN/FPLAN/MPLAN creation, tracking, closure +**Module:** `aipass.flow` +**Created:** 2026-03-05 + +--- + +## Overview + +### What I Do + + +### How I Work +- **Entry Point:** `apps/flow.py` +- **Pattern:** Auto-discovers and routes to modules + +--- + +## Architecture + +``` +FLOW/ +├── apps/ +│ ├── flow.py # Entry point +│ ├── modules/ # Business logic +│ ├── handlers/ # Implementation +│ └── plugins/ # Extensions +├── docs/ +├── tests/ +├── passport.json # Identity +├── local.json # Session history +├── observations.json # Collaboration patterns +└── README.md +``` + +--- + +## Commands + +*Configure after initialization* + +--- + +## Integration Points + +### Depends On + + +### Provides To + diff --git a/src/aipass/flow/apps/__init__.py b/src/aipass/flow/apps/__init__.py new file mode 100644 index 00000000..f5f27db4 --- /dev/null +++ b/src/aipass/flow/apps/__init__.py @@ -0,0 +1 @@ +# FLOW apps package diff --git a/src/aipass/flow/apps/branch.py b/src/aipass/flow/apps/branch.py new file mode 100644 index 00000000..a982edb8 --- /dev/null +++ b/src/aipass/flow/apps/branch.py @@ -0,0 +1,86 @@ +""" +FLOW Branch - Main Orchestrator + +Auto-discovery architecture: +- Scans modules/ directory for .py files with handle_command() +- Routes commands to discovered modules automatically +- No manual imports or routing needed +""" + +import sys +import importlib +from pathlib import Path +from typing import List, Any + +from aipass.prax import logger + +# ============================================================================= +# MODULE DISCOVERY +# ============================================================================= + +MODULES_DIR = Path(__file__).parent / "modules" + + +def discover_modules() -> List[Any]: + """Auto-discover modules in modules/ directory.""" + modules = [] + + if not MODULES_DIR.exists(): + return modules + + for file_path in MODULES_DIR.glob("*.py"): + if file_path.name.startswith("_"): + continue + + module_name = f"apps.modules.{file_path.stem}" + + try: + module = importlib.import_module(module_name) + if hasattr(module, "handle_command"): + modules.append(module) + except Exception as e: + logger.error(f"[FLOW] Failed to load module {module_name}: {e}") + + return modules + + +def route_command(command: str, args: List[str], modules: List[Any]) -> bool: + """Route command to appropriate module.""" + for module in modules: + try: + if module.handle_command(command, args): + return True + except Exception as e: + logger.error(f"[FLOW] Module {module.__name__} error: {e}") + return False + + +# ============================================================================= +# MAIN ENTRY POINT +# ============================================================================= + +def main(): + """Main entry point - routes commands or shows help.""" + modules = discover_modules() + args = sys.argv[1:] + + if len(args) == 0 or args[0] in ["--help", "-h", "help"]: + print(f"FLOW - {len(modules)} modules discovered") + for module in modules: + name = module.__name__.split(".")[-1] + desc = (module.__doc__ or "").strip().split("\n")[0] if module.__doc__ else "No description" + print(f" {name:20} {desc}") + return 0 + + command = args[0] + remaining = args[1:] if len(args) > 1 else [] + + if route_command(command, remaining, modules): + return 0 + + print(f"Unknown command: {command}") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/aipass/flow/apps/handlers/__init__.py b/src/aipass/flow/apps/handlers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/flow/apps/modules/__init__.py b/src/aipass/flow/apps/modules/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/flow/apps/plugins/__init__.py b/src/aipass/flow/apps/plugins/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/flow/artifacts/birth_certificate.json b/src/aipass/flow/artifacts/birth_certificate.json new file mode 100644 index 00000000..25e4076f --- /dev/null +++ b/src/aipass/flow/artifacts/birth_certificate.json @@ -0,0 +1,15 @@ +{ + "id": "32", + "name": "FLOW Birth Certificate", + "type": "birth_certificate", + "creator": "SYSTEM", + "owner": "FLOW", + "rarity": "unique", + "description": "Official birth certificate for FLOW. Citizen #32, registered using 'library' template. Purpose: Plan lifecycle management - DPLAN/FPLAN/MPLAN creation, tracking, closure", + "metadata": { + "citizen_number": "32", + "template": "library", + "purpose": "Plan lifecycle management - DPLAN/FPLAN/MPLAN creation, tracking, closure" + }, + "created_at": "2026-03-05" +} diff --git a/src/aipass/flow/flow.local.md b/src/aipass/flow/flow.local.md new file mode 100644 index 00000000..01018f41 --- /dev/null +++ b/src/aipass/flow/flow.local.md @@ -0,0 +1,15 @@ +# flow.local.md - FLOW +``` +Branch: /home/aipass/aipass_business/AIPass/src/aipass/flow +Created: 2026-03-05 +``` + +## Issues + +- + +--- + +## Todos + +- diff --git a/src/aipass/flow/pytest.ini b/src/aipass/flow/pytest.ini new file mode 100644 index 00000000..c3f21db6 --- /dev/null +++ b/src/aipass/flow/pytest.ini @@ -0,0 +1,21 @@ +[pytest] +# Test discovery paths +testpaths = tests + +# Test file patterns +python_files = test_*.py +python_functions = test_* +python_classes = Test* + +# Command-line options (always applied) +addopts = + -v # Verbose output + --tb=short # Short traceback format + --strict-markers # Raise error on unknown markers + -ra # Show summary of all test outcomes + +# Test markers (for categorizing tests) +markers = + unit: Unit tests + integration: Integration tests + slow: Tests that take significant time diff --git a/src/aipass/flow/tests/__init__.py b/src/aipass/flow/tests/__init__.py new file mode 100644 index 00000000..2331f4c1 --- /dev/null +++ b/src/aipass/flow/tests/__init__.py @@ -0,0 +1 @@ +# Tests package for flow diff --git a/src/aipass/flow/tests/conftest.py b/src/aipass/flow/tests/conftest.py new file mode 100644 index 00000000..a87088fd --- /dev/null +++ b/src/aipass/flow/tests/conftest.py @@ -0,0 +1,43 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: tests/conftest.py +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/tests +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Shared pytest fixtures +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +"""Shared pytest fixtures for cortex tests""" +import pytest +import shutil +import tempfile +from pathlib import Path +from typing import Generator + + +@pytest.fixture +def temp_test_dir() -> Generator[Path, None, None]: + """Creates temporary directory for testing, cleans up after""" + test_dir = Path(tempfile.mkdtemp()) + yield test_dir + if test_dir.exists(): + shutil.rmtree(test_dir) + + +@pytest.fixture +def sample_test_data() -> dict: + """Provides sample test data + + Customize this fixture for your module's needs + """ + return { + "test_key": "test_value", + "sample_data": "example" + } diff --git a/src/aipass/flow/tools/verify_branch.py b/src/aipass/flow/tools/verify_branch.py new file mode 100644 index 00000000..4464af6d --- /dev/null +++ b/src/aipass/flow/tools/verify_branch.py @@ -0,0 +1,159 @@ +#!/home/aipass/.venv/bin/python3 +# -*- coding: utf-8 -*- + +# ===================AIPASS==================== +# META DATA HEADER +# Name: verify_branch.py - Branch Template Verification +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/modules +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Compare template vs branch +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +""" +Branch Template Verification Tool + +Compares template directory with created branch to identify: +- Files in template but missing in branch +- Files in branch but not in template +- Renamed files +""" + +import sys +import json +from pathlib import Path +from typing import Set, List, Tuple +from fnmatch import fnmatch + +# INFRASTRUCTURE IMPORT PATTERN +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) + +# Get template directory +TEMPLATE_DIR = AIPASS_ROOT / "cortex" / "templates" / "branch_template" + + +def load_ignore_patterns() -> Tuple[List[str], List[str]]: + """Load ignore patterns from .registry_ignore.json""" + ignore_file = TEMPLATE_DIR / ".registry_ignore.json" + + if not ignore_file.exists(): + return [], [] + + try: + with open(ignore_file, 'r', encoding='utf-8') as f: + data = json.load(f) + ignore_files = data.get("ignore_files", []) + ignore_patterns = data.get("ignore_patterns", []) + return ignore_files, ignore_patterns + except Exception as e: + print(f"Warning: Could not load .registry_ignore.json: {e}") + return [], [] + + +def should_exclude(path: Path, base_dir: Path, ignore_files: List[str], ignore_patterns: List[str]) -> bool: + """Check if path should be excluded based on ignore patterns""" + rel_path = path.relative_to(base_dir) + filename = path.name + path_str = str(rel_path) + + # Check exact filename matches + if filename in ignore_files: + return True + + # Check glob patterns + for pattern in ignore_patterns: + if fnmatch(filename, pattern): + return True + # Check if any parent directory matches + for part in rel_path.parts: + if fnmatch(part, pattern): + return True + + return False + + +def get_file_set(directory: Path, ignore_files: List[str], ignore_patterns: List[str]) -> Set[str]: + """Get set of all file paths in directory (relative)""" + files = set() + + for item in directory.rglob("*"): + if item.is_file() and not should_exclude(item, directory, ignore_files, ignore_patterns): + rel_path = str(item.relative_to(directory)) + files.add(rel_path) + + return files + + +def verify_branch(branch_dir: Path) -> Tuple[List[str], List[str], List[str]]: + """ + Compare template with branch + + Returns: + Tuple of (in_template_only, in_branch_only, in_both) + """ + # Load ignore patterns from .registry_ignore.json + ignore_files, ignore_patterns = load_ignore_patterns() + + template_files = get_file_set(TEMPLATE_DIR, ignore_files, ignore_patterns) + branch_files = get_file_set(branch_dir, ignore_files, ignore_patterns) + + in_template_only = sorted(template_files - branch_files) + in_branch_only = sorted(branch_files - template_files) + in_both = sorted(template_files & branch_files) + + return in_template_only, in_branch_only, in_both + + +def main(): + if len(sys.argv) < 2: + print("Usage: python3 verify_branch.py ") + print("Example: python3 verify_branch.py test_branch002") + sys.exit(1) + + branch_path = Path(sys.argv[1]) + if not branch_path.is_absolute(): + # Assume it's relative to cortex directory + branch_path = Path.cwd() / branch_path + + if not branch_path.exists(): + print(f"❌ ERROR: Branch directory not found: {branch_path}") + sys.exit(1) + + print(f"\n=== Branch Verification ===") + print(f"Template: {TEMPLATE_DIR}") + print(f"Branch: {branch_path}") + print() + + in_template_only, in_branch_only, in_both = verify_branch(branch_path) + + print(f"Files in both: {len(in_both)}") + print(f"Files in template only: {len(in_template_only)}") + print(f"Files in branch only: {len(in_branch_only)}") + print() + + if in_template_only: + print("❌ Missing from branch (expected from template):") + for file in in_template_only: + print(f" - {file}") + print() + + if in_branch_only: + print("✅ Additional files in branch (renamed or new):") + for file in in_branch_only: + print(f" + {file}") + print() + + if not in_template_only and not in_branch_only: + print("✅ Branch matches template perfectly") + + print("="*70) + + +if __name__ == "__main__": + main() diff --git a/src/aipass/prax/.agent/.backup_ignore.json b/src/aipass/prax/.agent/.backup_ignore.json new file mode 100644 index 00000000..ad552665 --- /dev/null +++ b/src/aipass/prax/.agent/.backup_ignore.json @@ -0,0 +1,37 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Files and patterns to exclude when creating branch backups" + }, + "ignore_directories": [ + ".backup", + ".venv", + "venv", + "node_modules", + "__pycache__", + ".git", + ".cache", + ".pytest_cache", + ".mypy_cache", + "dist", + "build", + "*.egg-info", + "ai_mail.local", + "logs", + ".aipass", + ".archive", + ".claude", + "htmlcov" + ], + "ignore_patterns": [ + "*.pyc", + "*.pyo", + ".DS_Store", + "*.log", + "*.tmp", + "*.swp", + "*~", + "*.env", + "BRANCH_REGISTRY.json" + ] +} diff --git a/src/aipass/prax/.agent/.migrations.json b/src/aipass/prax/.agent/.migrations.json new file mode 100644 index 00000000..a33f4115 --- /dev/null +++ b/src/aipass/prax/.agent/.migrations.json @@ -0,0 +1,49 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Template structural migrations for branch updates", + "last_updated": "2025-11-07", + "applies_to_versions": ["all"] + }, + "migrations": [ + { + "id": "m001", + "description": "Example: Migrate flat metadata to document_metadata structure", + "version_introduced": "1.0.0", + "applies_to_files": ["*.id.json"], + "operations": [ + { + "type": "key_rename", + "from": "metadata", + "to": "document_metadata" + }, + { + "type": "move_to_nested", + "source_keys": ["branch_name", "path", "profile"], + "target_parent": "branch_info" + }, + { + "type": "add_missing_keys", + "parent": "document_metadata", + "keys": { + "document_type": "branch_identity", + "schema_version": "1.0.0" + } + } + ] + } + ], + "options": { + "skip_if_target_exists": true, + "preserve_unknown_keys": true, + "recursive_application": false + }, + "notes": { + "usage": "This file defines structural transformation rules applied during branch updates", + "pattern_matching": "applies_to_files uses glob patterns (*.json, *.id.json, etc.)", + "operation_order": "Operations execute in order listed within each migration", + "skip_behavior": "Operations skip if already compliant (target exists = success)", + "supported_operations": ["key_rename", "move_to_nested", "add_missing_keys"], + "future_operations": ["split_key", "combine_keys", "delete_key", "transform_value"] + } +} diff --git a/src/aipass/prax/.agent/.registry_ignore.json b/src/aipass/prax/.agent/.registry_ignore.json new file mode 100644 index 00000000..a3bbaed7 --- /dev/null +++ b/src/aipass/prax/.agent/.registry_ignore.json @@ -0,0 +1,43 @@ +{ + "metadata": { + "version": "1.1.0", + "description": "Files and patterns to exclude when updating branches from template", + "last_updated": "2025-11-09" + }, + "ignore_files": [ + ".template_registry.json", + ".registry_ignore.json" + ], + "ignore_patterns": [ + "__pycache__", + "*.pyc", + "#@comments.txt", + ".backup_*" + ], + "notes": { + "how_it_works": "Two types of exclusions during branch updates:", + "ignore_files": { + "description": "Exact filename matches (no wildcards)", + "purpose": "Template-internal management files that branches don't need", + "examples": [ + ".template_registry.json (template's file tracking list)", + ".registry_ignore.json (this config file)" + ] + }, + "ignore_patterns": { + "description": "Glob patterns - matches filenames AND directory names", + "purpose": "Exclude generated files, caches, and user content markers", + "examples": [ + "__pycache__ (Python cache directories)", + "*.pyc (Python compiled bytecode files)", + "#@comments.txt (user comment files)", + ".backup_* (timestamped backup files like .backup_20251109, NOT .backup directory)" + ], + "how_matching_works": [ + "Step 1: Check if filename matches pattern (e.g., file.pyc matches *.pyc)", + "Step 2: Check if any parent directory matches (e.g., files inside __pycache__/ dir)" + ] + }, + "what_gets_ignored": "These files never copy to branches during updates - they stay template-only" + } +} diff --git a/src/aipass/prax/.agent/.template_registry.json b/src/aipass/prax/.agent/.template_registry.json new file mode 100644 index 00000000..c98f8cf5 --- /dev/null +++ b/src/aipass/prax/.agent/.template_registry.json @@ -0,0 +1,184 @@ +{ + "metadata": { + "description": "Template registry for tracking files", + "generated": true + }, + "files": { + "f001": { + "path": ".aipass/aipass_local_prompt.md", + "name": "aipass_local_prompt.md", + "content_hash": "836a9c4f62d5ec6e", + "has_branch_placeholder": false + }, + "f002": { + "path": ".claude/settings.local.json", + "name": "settings.local.json", + "content_hash": "6379c5be3fb714ac", + "has_branch_placeholder": false + }, + "f003": { + "path": ".gitignore", + "name": ".gitignore", + "content_hash": "841dedb922da7ddb", + "has_branch_placeholder": false + }, + "f004": { + "path": ".trinity/local.json", + "name": "local.json", + "content_hash": "9b01f5764c4a11a3", + "has_branch_placeholder": false + }, + "f005": { + "path": ".trinity/observations.json", + "name": "observations.json", + "content_hash": "90f3eac9cfecbdc5", + "has_branch_placeholder": false + }, + "f006": { + "path": ".trinity/passport.json", + "name": "passport.json", + "content_hash": "dd0c31d62f8346ea", + "has_branch_placeholder": false + }, + "f007": { + "path": "DASHBOARD.local.json", + "name": "DASHBOARD.local.json", + "content_hash": "582b1255579b0d83", + "has_branch_placeholder": false + }, + "f008": { + "path": "README.md", + "name": "README.md", + "content_hash": "47ec20ec7d1b0adc", + "has_branch_placeholder": false + }, + "f009": { + "path": "apps/__init__.py", + "name": "__init__.py", + "content_hash": "4fa2507b6fa50d85", + "has_branch_placeholder": false + }, + "f010": { + "path": "apps/branch.py", + "name": "branch.py", + "content_hash": "295827994998c02c", + "has_branch_placeholder": false + }, + "f011": { + "path": "apps/handlers/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f012": { + "path": "apps/modules/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f013": { + "path": "apps/plugins/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f014": { + "path": "artifacts/birth_certificate.json", + "name": "birth_certificate.json", + "content_hash": "6854cefa934717e5", + "has_branch_placeholder": false + }, + "f015": { + "path": "flow.local.md", + "name": "flow.local.md", + "content_hash": "224aeadf8bff97ff", + "has_branch_placeholder": false + }, + "f016": { + "path": "pytest.ini", + "name": "pytest.ini", + "content_hash": "7b39ba7bca4025c5", + "has_branch_placeholder": false + }, + "f017": { + "path": "tests/__init__.py", + "name": "__init__.py", + "content_hash": "c49fcc8b6a3c8370", + "has_branch_placeholder": false + }, + "f018": { + "path": "tests/conftest.py", + "name": "conftest.py", + "content_hash": "5e5f2399e0d70978", + "has_branch_placeholder": false + }, + "f019": { + "path": "tools/verify_branch.py", + "name": "verify_branch.py", + "content_hash": "06803a84118e5453", + "has_branch_placeholder": false + } + }, + "directories": { + "d001": { + "path": ".aipass", + "name": ".aipass" + }, + "d002": { + "path": ".archive", + "name": ".archive" + }, + "d003": { + "path": ".claude", + "name": ".claude" + }, + "d004": { + "path": ".trinity", + "name": ".trinity" + }, + "d005": { + "path": "apps", + "name": "apps" + }, + "d006": { + "path": "apps/handlers", + "name": "handlers" + }, + "d007": { + "path": "apps/modules", + "name": "modules" + }, + "d008": { + "path": "apps/plugins", + "name": "plugins" + }, + "d009": { + "path": "artifacts", + "name": "artifacts" + }, + "d010": { + "path": "docs", + "name": "docs" + }, + "d011": { + "path": "dropbox", + "name": "dropbox" + }, + "d012": { + "path": "prax_json", + "name": "prax_json" + }, + "d013": { + "path": "templates", + "name": "templates" + }, + "d014": { + "path": "tests", + "name": "tests" + }, + "d015": { + "path": "tools", + "name": "tools" + } + } +} diff --git a/src/aipass/prax/.gitignore b/src/aipass/prax/.gitignore new file mode 100644 index 00000000..9cf1dfc4 --- /dev/null +++ b/src/aipass/prax/.gitignore @@ -0,0 +1,14 @@ +__pycache__/ +*.pyc +*.pyo +.env +*.egg-info/ +.coverage +htmlcov/ +.pytest_cache/ +.mypy_cache/ +dist/ +build/ +*.log +*.tmp +*.swp diff --git a/src/aipass/prax/.trinity/local.json b/src/aipass/prax/.trinity/local.json new file mode 100644 index 00000000..b19270e3 --- /dev/null +++ b/src/aipass/prax/.trinity/local.json @@ -0,0 +1,34 @@ +{ + "document_metadata": { + "document_type": "session_history", + "document_name": "PRAX.LOCAL", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "PRAX", + "tags": ["session_tracking", "work_log", "PRAX"], + "limits": { + "max_lines": 600, + "note": "Auto-rollover when max_lines exceeded" + }, + "status": { + "health": "healthy", + "current_lines": 0, + "last_health_check": "2026-03-05" + } + }, + "active_tasks": { + "today_focus": "2026-03-05", + "recently_completed": [] + }, + "key_learnings": {}, + "sessions": [ + { + "session_number": 1, + "date": "2026-03-05", + "summary": "Branch initialized - PRAX created by aipass init", + "status": "completed" + } + ] +} diff --git a/src/aipass/prax/.trinity/observations.json b/src/aipass/prax/.trinity/observations.json new file mode 100644 index 00000000..ae89692c --- /dev/null +++ b/src/aipass/prax/.trinity/observations.json @@ -0,0 +1,37 @@ +{ + "document_metadata": { + "document_type": "collaboration_patterns", + "document_name": "PRAX.OBSERVATIONS", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "PRAX", + "tags": ["collaboration", "patterns", "PRAX"], + "limits": { + "max_lines": 600, + "note": "Auto-rollover when max_lines exceeded" + }, + "status": { + "health": "healthy", + "current_lines": 0, + "last_health_check": "2026-03-05" + } + }, + "guidelines": { + "purpose": "Capture collaboration patterns and experiential insights over time", + "chronological_order": "Newest entries at TOP, oldest at BOTTOM - NEVER reorder" + }, + "observations": [ + { + "date": "2026-03-05", + "session": 1, + "entries": [ + { + "title": "First Contact", + "detail": "Branch initialized. Ready to begin capturing collaboration patterns." + } + ] + } + ] +} diff --git a/src/aipass/prax/.trinity/passport.json b/src/aipass/prax/.trinity/passport.json new file mode 100644 index 00000000..9657040e --- /dev/null +++ b/src/aipass/prax/.trinity/passport.json @@ -0,0 +1,36 @@ +{ + "document_metadata": { + "document_type": "branch_identity", + "document_name": "PRAX.PASSPORT", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "PRAX", + "tags": ["identity", "passport", "branch_profile"] + }, + "branch_info": { + "branch_name": "PRAX", + "alias": "", + "path": "/home/aipass/aipass_business/AIPass/src/aipass/prax", + "module": "prax", + "created": "2026-03-05" + }, + "identity": { + "role": "Monitoring & Observability", + "purpose": "", + "what_i_do": [], + "what_i_dont_do": [] + }, + "principles": [ + "Code is truth - fail honestly", + "Memory persists - context survives", + "Simple solutions over complex architecture" + ], + "citizenship": { + "registered": true, + "registry_path": ".aipass/registry.json", + "communications": true, + "memory": true + } +} diff --git a/src/aipass/prax/DASHBOARD.local.json b/src/aipass/prax/DASHBOARD.local.json new file mode 100644 index 00000000..5b35df00 --- /dev/null +++ b/src/aipass/prax/DASHBOARD.local.json @@ -0,0 +1,62 @@ +{ + "_warning": "AUTO-GENERATED FILE - DO NOT MANUALLY EDIT. This file is 100% automated and will be overwritten. Services update their own sections.", + "branch": "PRAX", + "last_updated": "2026-03-05", + "quick_status": { + "new_mail": 0, + "opened_mail": 0, + "active_plans": 0, + "commons_mentions": 0, + "action_required": false, + "summary": "" + }, + "sections": { + "ai_mail": { + "managed_by": "ai_mail", + "new": 0, + "opened": 0, + "total": 0, + "oldest_unread_age": null, + "last_dispatch_received": null, + "last_updated": "2026-03-05" + }, + "flow": { + "managed_by": "flow", + "active_plans": 0, + "recently_closed": [], + "last_updated": "2026-03-05" + }, + "memory_bank": { + "managed_by": "memory_bank", + "vectors_stored": 0, + "notes": {}, + "last_updated": "2026-03-05" + }, + "devpulse": { + "managed_by": "devpulse", + "summary": { + "issues": 0, + "todos": 0 + }, + "dplan_counts": {}, + "recent_activity": "", + "last_updated": "2026-03-05" + }, + "commons_activity": { + "managed_by": "the_commons", + "new_posts_since_last_visit": 0, + "new_comments_since_last_visit": 0, + "mentions": 0, + "trending": "None", + "last_checked": null, + "last_updated": "2026-03-05" + }, + "agent_status": { + "managed_by": "prax", + "active_agents": [], + "agent_count": 0, + "stale_agents": [], + "last_updated": "2026-03-05" + } + } +} diff --git a/src/aipass/prax/README.md b/src/aipass/prax/README.md new file mode 100644 index 00000000..5853c5d9 --- /dev/null +++ b/src/aipass/prax/README.md @@ -0,0 +1,51 @@ +# PRAX + +**Purpose:** System logging, event tracking, and real-time monitoring infrastructure +**Module:** `aipass.prax` +**Created:** 2026-03-05 + +--- + +## Overview + +### What I Do + + +### How I Work +- **Entry Point:** `apps/prax.py` +- **Pattern:** Auto-discovers and routes to modules + +--- + +## Architecture + +``` +PRAX/ +├── apps/ +│ ├── prax.py # Entry point +│ ├── modules/ # Business logic +│ ├── handlers/ # Implementation +│ └── plugins/ # Extensions +├── docs/ +├── tests/ +├── passport.json # Identity +├── local.json # Session history +├── observations.json # Collaboration patterns +└── README.md +``` + +--- + +## Commands + +*Configure after initialization* + +--- + +## Integration Points + +### Depends On + + +### Provides To + diff --git a/src/aipass/prax/__init__.py b/src/aipass/prax/__init__.py deleted file mode 100644 index e3d60d42..00000000 --- a/src/aipass/prax/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -"""aipass.prax — Monitoring, events, and observability. - -Real-time system monitoring, event tracking, and logging infrastructure. -The eyes of the ecosystem. -""" diff --git a/src/aipass/prax/apps/__init__.py b/src/aipass/prax/apps/__init__.py new file mode 100644 index 00000000..9b40196a --- /dev/null +++ b/src/aipass/prax/apps/__init__.py @@ -0,0 +1 @@ +# PRAX apps package diff --git a/src/aipass/prax/apps/branch.py b/src/aipass/prax/apps/branch.py new file mode 100644 index 00000000..4836e0d7 --- /dev/null +++ b/src/aipass/prax/apps/branch.py @@ -0,0 +1,86 @@ +""" +PRAX Branch - Main Orchestrator + +Auto-discovery architecture: +- Scans modules/ directory for .py files with handle_command() +- Routes commands to discovered modules automatically +- No manual imports or routing needed +""" + +import sys +import importlib +from pathlib import Path +from typing import List, Any + +from aipass.prax import logger + +# ============================================================================= +# MODULE DISCOVERY +# ============================================================================= + +MODULES_DIR = Path(__file__).parent / "modules" + + +def discover_modules() -> List[Any]: + """Auto-discover modules in modules/ directory.""" + modules = [] + + if not MODULES_DIR.exists(): + return modules + + for file_path in MODULES_DIR.glob("*.py"): + if file_path.name.startswith("_"): + continue + + module_name = f"apps.modules.{file_path.stem}" + + try: + module = importlib.import_module(module_name) + if hasattr(module, "handle_command"): + modules.append(module) + except Exception as e: + logger.error(f"[PRAX] Failed to load module {module_name}: {e}") + + return modules + + +def route_command(command: str, args: List[str], modules: List[Any]) -> bool: + """Route command to appropriate module.""" + for module in modules: + try: + if module.handle_command(command, args): + return True + except Exception as e: + logger.error(f"[PRAX] Module {module.__name__} error: {e}") + return False + + +# ============================================================================= +# MAIN ENTRY POINT +# ============================================================================= + +def main(): + """Main entry point - routes commands or shows help.""" + modules = discover_modules() + args = sys.argv[1:] + + if len(args) == 0 or args[0] in ["--help", "-h", "help"]: + print(f"PRAX - {len(modules)} modules discovered") + for module in modules: + name = module.__name__.split(".")[-1] + desc = (module.__doc__ or "").strip().split("\n")[0] if module.__doc__ else "No description" + print(f" {name:20} {desc}") + return 0 + + command = args[0] + remaining = args[1:] if len(args) > 1 else [] + + if route_command(command, remaining, modules): + return 0 + + print(f"Unknown command: {command}") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/aipass/prax/apps/handlers/__init__.py b/src/aipass/prax/apps/handlers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/prax/apps/modules/__init__.py b/src/aipass/prax/apps/modules/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/prax/apps/plugins/__init__.py b/src/aipass/prax/apps/plugins/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/prax/artifacts/birth_certificate.json b/src/aipass/prax/artifacts/birth_certificate.json new file mode 100644 index 00000000..09052d57 --- /dev/null +++ b/src/aipass/prax/artifacts/birth_certificate.json @@ -0,0 +1,15 @@ +{ + "id": "32", + "name": "PRAX Birth Certificate", + "type": "birth_certificate", + "creator": "SYSTEM", + "owner": "PRAX", + "rarity": "unique", + "description": "Official birth certificate for PRAX. Citizen #32, registered using 'library' template. Purpose: System logging, event tracking, and real-time monitoring infrastructure", + "metadata": { + "citizen_number": "32", + "template": "library", + "purpose": "System logging, event tracking, and real-time monitoring infrastructure" + }, + "created_at": "2026-03-05" +} diff --git a/src/aipass/prax/flow.local.md b/src/aipass/prax/flow.local.md new file mode 100644 index 00000000..25d07f43 --- /dev/null +++ b/src/aipass/prax/flow.local.md @@ -0,0 +1,15 @@ +# flow.local.md - PRAX +``` +Branch: /home/aipass/aipass_business/AIPass/src/aipass/prax +Created: 2026-03-05 +``` + +## Issues + +- + +--- + +## Todos + +- diff --git a/src/aipass/prax/handlers/__init__.py b/src/aipass/prax/handlers/__init__.py deleted file mode 100644 index a6f31852..00000000 --- a/src/aipass/prax/handlers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""prax.handlers — Log streaming and alert implementation.""" diff --git a/src/aipass/prax/modules/__init__.py b/src/aipass/prax/modules/__init__.py deleted file mode 100644 index 39a53345..00000000 --- a/src/aipass/prax/modules/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""prax.modules — Event processing and monitor logic.""" diff --git a/src/aipass/prax/plugins/__init__.py b/src/aipass/prax/plugins/__init__.py deleted file mode 100644 index 5c9862ef..00000000 --- a/src/aipass/prax/plugins/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""prax.plugins — Extensible plugin interface.""" diff --git a/src/aipass/prax/pytest.ini b/src/aipass/prax/pytest.ini new file mode 100644 index 00000000..c3f21db6 --- /dev/null +++ b/src/aipass/prax/pytest.ini @@ -0,0 +1,21 @@ +[pytest] +# Test discovery paths +testpaths = tests + +# Test file patterns +python_files = test_*.py +python_functions = test_* +python_classes = Test* + +# Command-line options (always applied) +addopts = + -v # Verbose output + --tb=short # Short traceback format + --strict-markers # Raise error on unknown markers + -ra # Show summary of all test outcomes + +# Test markers (for categorizing tests) +markers = + unit: Unit tests + integration: Integration tests + slow: Tests that take significant time diff --git a/src/aipass/prax/tests/__init__.py b/src/aipass/prax/tests/__init__.py new file mode 100644 index 00000000..6d5d63db --- /dev/null +++ b/src/aipass/prax/tests/__init__.py @@ -0,0 +1 @@ +# Tests package for prax diff --git a/src/aipass/prax/tests/conftest.py b/src/aipass/prax/tests/conftest.py new file mode 100644 index 00000000..a87088fd --- /dev/null +++ b/src/aipass/prax/tests/conftest.py @@ -0,0 +1,43 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: tests/conftest.py +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/tests +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Shared pytest fixtures +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +"""Shared pytest fixtures for cortex tests""" +import pytest +import shutil +import tempfile +from pathlib import Path +from typing import Generator + + +@pytest.fixture +def temp_test_dir() -> Generator[Path, None, None]: + """Creates temporary directory for testing, cleans up after""" + test_dir = Path(tempfile.mkdtemp()) + yield test_dir + if test_dir.exists(): + shutil.rmtree(test_dir) + + +@pytest.fixture +def sample_test_data() -> dict: + """Provides sample test data + + Customize this fixture for your module's needs + """ + return { + "test_key": "test_value", + "sample_data": "example" + } diff --git a/src/aipass/prax/tools/verify_branch.py b/src/aipass/prax/tools/verify_branch.py new file mode 100644 index 00000000..4464af6d --- /dev/null +++ b/src/aipass/prax/tools/verify_branch.py @@ -0,0 +1,159 @@ +#!/home/aipass/.venv/bin/python3 +# -*- coding: utf-8 -*- + +# ===================AIPASS==================== +# META DATA HEADER +# Name: verify_branch.py - Branch Template Verification +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/modules +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Compare template vs branch +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +""" +Branch Template Verification Tool + +Compares template directory with created branch to identify: +- Files in template but missing in branch +- Files in branch but not in template +- Renamed files +""" + +import sys +import json +from pathlib import Path +from typing import Set, List, Tuple +from fnmatch import fnmatch + +# INFRASTRUCTURE IMPORT PATTERN +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) + +# Get template directory +TEMPLATE_DIR = AIPASS_ROOT / "cortex" / "templates" / "branch_template" + + +def load_ignore_patterns() -> Tuple[List[str], List[str]]: + """Load ignore patterns from .registry_ignore.json""" + ignore_file = TEMPLATE_DIR / ".registry_ignore.json" + + if not ignore_file.exists(): + return [], [] + + try: + with open(ignore_file, 'r', encoding='utf-8') as f: + data = json.load(f) + ignore_files = data.get("ignore_files", []) + ignore_patterns = data.get("ignore_patterns", []) + return ignore_files, ignore_patterns + except Exception as e: + print(f"Warning: Could not load .registry_ignore.json: {e}") + return [], [] + + +def should_exclude(path: Path, base_dir: Path, ignore_files: List[str], ignore_patterns: List[str]) -> bool: + """Check if path should be excluded based on ignore patterns""" + rel_path = path.relative_to(base_dir) + filename = path.name + path_str = str(rel_path) + + # Check exact filename matches + if filename in ignore_files: + return True + + # Check glob patterns + for pattern in ignore_patterns: + if fnmatch(filename, pattern): + return True + # Check if any parent directory matches + for part in rel_path.parts: + if fnmatch(part, pattern): + return True + + return False + + +def get_file_set(directory: Path, ignore_files: List[str], ignore_patterns: List[str]) -> Set[str]: + """Get set of all file paths in directory (relative)""" + files = set() + + for item in directory.rglob("*"): + if item.is_file() and not should_exclude(item, directory, ignore_files, ignore_patterns): + rel_path = str(item.relative_to(directory)) + files.add(rel_path) + + return files + + +def verify_branch(branch_dir: Path) -> Tuple[List[str], List[str], List[str]]: + """ + Compare template with branch + + Returns: + Tuple of (in_template_only, in_branch_only, in_both) + """ + # Load ignore patterns from .registry_ignore.json + ignore_files, ignore_patterns = load_ignore_patterns() + + template_files = get_file_set(TEMPLATE_DIR, ignore_files, ignore_patterns) + branch_files = get_file_set(branch_dir, ignore_files, ignore_patterns) + + in_template_only = sorted(template_files - branch_files) + in_branch_only = sorted(branch_files - template_files) + in_both = sorted(template_files & branch_files) + + return in_template_only, in_branch_only, in_both + + +def main(): + if len(sys.argv) < 2: + print("Usage: python3 verify_branch.py ") + print("Example: python3 verify_branch.py test_branch002") + sys.exit(1) + + branch_path = Path(sys.argv[1]) + if not branch_path.is_absolute(): + # Assume it's relative to cortex directory + branch_path = Path.cwd() / branch_path + + if not branch_path.exists(): + print(f"❌ ERROR: Branch directory not found: {branch_path}") + sys.exit(1) + + print(f"\n=== Branch Verification ===") + print(f"Template: {TEMPLATE_DIR}") + print(f"Branch: {branch_path}") + print() + + in_template_only, in_branch_only, in_both = verify_branch(branch_path) + + print(f"Files in both: {len(in_both)}") + print(f"Files in template only: {len(in_template_only)}") + print(f"Files in branch only: {len(in_branch_only)}") + print() + + if in_template_only: + print("❌ Missing from branch (expected from template):") + for file in in_template_only: + print(f" - {file}") + print() + + if in_branch_only: + print("✅ Additional files in branch (renamed or new):") + for file in in_branch_only: + print(f" + {file}") + print() + + if not in_template_only and not in_branch_only: + print("✅ Branch matches template perfectly") + + print("="*70) + + +if __name__ == "__main__": + main() diff --git a/src/aipass/seedgo/.agent/.backup_ignore.json b/src/aipass/seedgo/.agent/.backup_ignore.json new file mode 100644 index 00000000..ad552665 --- /dev/null +++ b/src/aipass/seedgo/.agent/.backup_ignore.json @@ -0,0 +1,37 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Files and patterns to exclude when creating branch backups" + }, + "ignore_directories": [ + ".backup", + ".venv", + "venv", + "node_modules", + "__pycache__", + ".git", + ".cache", + ".pytest_cache", + ".mypy_cache", + "dist", + "build", + "*.egg-info", + "ai_mail.local", + "logs", + ".aipass", + ".archive", + ".claude", + "htmlcov" + ], + "ignore_patterns": [ + "*.pyc", + "*.pyo", + ".DS_Store", + "*.log", + "*.tmp", + "*.swp", + "*~", + "*.env", + "BRANCH_REGISTRY.json" + ] +} diff --git a/src/aipass/seedgo/.agent/.migrations.json b/src/aipass/seedgo/.agent/.migrations.json new file mode 100644 index 00000000..a33f4115 --- /dev/null +++ b/src/aipass/seedgo/.agent/.migrations.json @@ -0,0 +1,49 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Template structural migrations for branch updates", + "last_updated": "2025-11-07", + "applies_to_versions": ["all"] + }, + "migrations": [ + { + "id": "m001", + "description": "Example: Migrate flat metadata to document_metadata structure", + "version_introduced": "1.0.0", + "applies_to_files": ["*.id.json"], + "operations": [ + { + "type": "key_rename", + "from": "metadata", + "to": "document_metadata" + }, + { + "type": "move_to_nested", + "source_keys": ["branch_name", "path", "profile"], + "target_parent": "branch_info" + }, + { + "type": "add_missing_keys", + "parent": "document_metadata", + "keys": { + "document_type": "branch_identity", + "schema_version": "1.0.0" + } + } + ] + } + ], + "options": { + "skip_if_target_exists": true, + "preserve_unknown_keys": true, + "recursive_application": false + }, + "notes": { + "usage": "This file defines structural transformation rules applied during branch updates", + "pattern_matching": "applies_to_files uses glob patterns (*.json, *.id.json, etc.)", + "operation_order": "Operations execute in order listed within each migration", + "skip_behavior": "Operations skip if already compliant (target exists = success)", + "supported_operations": ["key_rename", "move_to_nested", "add_missing_keys"], + "future_operations": ["split_key", "combine_keys", "delete_key", "transform_value"] + } +} diff --git a/src/aipass/seedgo/.agent/.registry_ignore.json b/src/aipass/seedgo/.agent/.registry_ignore.json new file mode 100644 index 00000000..a3bbaed7 --- /dev/null +++ b/src/aipass/seedgo/.agent/.registry_ignore.json @@ -0,0 +1,43 @@ +{ + "metadata": { + "version": "1.1.0", + "description": "Files and patterns to exclude when updating branches from template", + "last_updated": "2025-11-09" + }, + "ignore_files": [ + ".template_registry.json", + ".registry_ignore.json" + ], + "ignore_patterns": [ + "__pycache__", + "*.pyc", + "#@comments.txt", + ".backup_*" + ], + "notes": { + "how_it_works": "Two types of exclusions during branch updates:", + "ignore_files": { + "description": "Exact filename matches (no wildcards)", + "purpose": "Template-internal management files that branches don't need", + "examples": [ + ".template_registry.json (template's file tracking list)", + ".registry_ignore.json (this config file)" + ] + }, + "ignore_patterns": { + "description": "Glob patterns - matches filenames AND directory names", + "purpose": "Exclude generated files, caches, and user content markers", + "examples": [ + "__pycache__ (Python cache directories)", + "*.pyc (Python compiled bytecode files)", + "#@comments.txt (user comment files)", + ".backup_* (timestamped backup files like .backup_20251109, NOT .backup directory)" + ], + "how_matching_works": [ + "Step 1: Check if filename matches pattern (e.g., file.pyc matches *.pyc)", + "Step 2: Check if any parent directory matches (e.g., files inside __pycache__/ dir)" + ] + }, + "what_gets_ignored": "These files never copy to branches during updates - they stay template-only" + } +} diff --git a/src/aipass/seedgo/.agent/.template_registry.json b/src/aipass/seedgo/.agent/.template_registry.json new file mode 100644 index 00000000..75a64c91 --- /dev/null +++ b/src/aipass/seedgo/.agent/.template_registry.json @@ -0,0 +1,184 @@ +{ + "metadata": { + "description": "Template registry for tracking files", + "generated": true + }, + "files": { + "f001": { + "path": ".aipass/aipass_local_prompt.md", + "name": "aipass_local_prompt.md", + "content_hash": "6ddaccade6ea86cd", + "has_branch_placeholder": false + }, + "f002": { + "path": ".claude/settings.local.json", + "name": "settings.local.json", + "content_hash": "6379c5be3fb714ac", + "has_branch_placeholder": false + }, + "f003": { + "path": ".gitignore", + "name": ".gitignore", + "content_hash": "841dedb922da7ddb", + "has_branch_placeholder": false + }, + "f004": { + "path": ".trinity/local.json", + "name": "local.json", + "content_hash": "f752386537f73d03", + "has_branch_placeholder": false + }, + "f005": { + "path": ".trinity/observations.json", + "name": "observations.json", + "content_hash": "77cb8745702ab4b0", + "has_branch_placeholder": false + }, + "f006": { + "path": ".trinity/passport.json", + "name": "passport.json", + "content_hash": "90f329b2cf8c99a0", + "has_branch_placeholder": false + }, + "f007": { + "path": "DASHBOARD.local.json", + "name": "DASHBOARD.local.json", + "content_hash": "d427c46b9b264feb", + "has_branch_placeholder": false + }, + "f008": { + "path": "README.md", + "name": "README.md", + "content_hash": "12db8e5498df1ce9", + "has_branch_placeholder": false + }, + "f009": { + "path": "apps/__init__.py", + "name": "__init__.py", + "content_hash": "2cfea12ade722d9f", + "has_branch_placeholder": false + }, + "f010": { + "path": "apps/branch.py", + "name": "branch.py", + "content_hash": "cfc96cd15e2a7f13", + "has_branch_placeholder": false + }, + "f011": { + "path": "apps/handlers/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f012": { + "path": "apps/modules/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f013": { + "path": "apps/plugins/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f014": { + "path": "artifacts/birth_certificate.json", + "name": "birth_certificate.json", + "content_hash": "0c291ca204943b40", + "has_branch_placeholder": false + }, + "f015": { + "path": "flow.local.md", + "name": "flow.local.md", + "content_hash": "13587db54fea0637", + "has_branch_placeholder": false + }, + "f016": { + "path": "pytest.ini", + "name": "pytest.ini", + "content_hash": "7b39ba7bca4025c5", + "has_branch_placeholder": false + }, + "f017": { + "path": "tests/__init__.py", + "name": "__init__.py", + "content_hash": "7f247cff4c3ae2dd", + "has_branch_placeholder": false + }, + "f018": { + "path": "tests/conftest.py", + "name": "conftest.py", + "content_hash": "5e5f2399e0d70978", + "has_branch_placeholder": false + }, + "f019": { + "path": "tools/verify_branch.py", + "name": "verify_branch.py", + "content_hash": "06803a84118e5453", + "has_branch_placeholder": false + } + }, + "directories": { + "d001": { + "path": ".aipass", + "name": ".aipass" + }, + "d002": { + "path": ".archive", + "name": ".archive" + }, + "d003": { + "path": ".claude", + "name": ".claude" + }, + "d004": { + "path": ".trinity", + "name": ".trinity" + }, + "d005": { + "path": "apps", + "name": "apps" + }, + "d006": { + "path": "apps/handlers", + "name": "handlers" + }, + "d007": { + "path": "apps/modules", + "name": "modules" + }, + "d008": { + "path": "apps/plugins", + "name": "plugins" + }, + "d009": { + "path": "artifacts", + "name": "artifacts" + }, + "d010": { + "path": "docs", + "name": "docs" + }, + "d011": { + "path": "dropbox", + "name": "dropbox" + }, + "d012": { + "path": "seedgo_json", + "name": "seedgo_json" + }, + "d013": { + "path": "templates", + "name": "templates" + }, + "d014": { + "path": "tests", + "name": "tests" + }, + "d015": { + "path": "tools", + "name": "tools" + } + } +} diff --git a/src/aipass/seedgo/.gitignore b/src/aipass/seedgo/.gitignore new file mode 100644 index 00000000..9cf1dfc4 --- /dev/null +++ b/src/aipass/seedgo/.gitignore @@ -0,0 +1,14 @@ +__pycache__/ +*.pyc +*.pyo +.env +*.egg-info/ +.coverage +htmlcov/ +.pytest_cache/ +.mypy_cache/ +dist/ +build/ +*.log +*.tmp +*.swp diff --git a/src/aipass/seedgo/.trinity/local.json b/src/aipass/seedgo/.trinity/local.json new file mode 100644 index 00000000..bf5de656 --- /dev/null +++ b/src/aipass/seedgo/.trinity/local.json @@ -0,0 +1,34 @@ +{ + "document_metadata": { + "document_type": "session_history", + "document_name": "SEEDGO.LOCAL", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "SEEDGO", + "tags": ["session_tracking", "work_log", "SEEDGO"], + "limits": { + "max_lines": 600, + "note": "Auto-rollover when max_lines exceeded" + }, + "status": { + "health": "healthy", + "current_lines": 0, + "last_health_check": "2026-03-05" + } + }, + "active_tasks": { + "today_focus": "2026-03-05", + "recently_completed": [] + }, + "key_learnings": {}, + "sessions": [ + { + "session_number": 1, + "date": "2026-03-05", + "summary": "Branch initialized - SEEDGO created by aipass init", + "status": "completed" + } + ] +} diff --git a/src/aipass/seedgo/.trinity/observations.json b/src/aipass/seedgo/.trinity/observations.json new file mode 100644 index 00000000..e02fbfe8 --- /dev/null +++ b/src/aipass/seedgo/.trinity/observations.json @@ -0,0 +1,37 @@ +{ + "document_metadata": { + "document_type": "collaboration_patterns", + "document_name": "SEEDGO.OBSERVATIONS", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "SEEDGO", + "tags": ["collaboration", "patterns", "SEEDGO"], + "limits": { + "max_lines": 600, + "note": "Auto-rollover when max_lines exceeded" + }, + "status": { + "health": "healthy", + "current_lines": 0, + "last_health_check": "2026-03-05" + } + }, + "guidelines": { + "purpose": "Capture collaboration patterns and experiential insights over time", + "chronological_order": "Newest entries at TOP, oldest at BOTTOM - NEVER reorder" + }, + "observations": [ + { + "date": "2026-03-05", + "session": 1, + "entries": [ + { + "title": "First Contact", + "detail": "Branch initialized. Ready to begin capturing collaboration patterns." + } + ] + } + ] +} diff --git a/src/aipass/seedgo/.trinity/passport.json b/src/aipass/seedgo/.trinity/passport.json new file mode 100644 index 00000000..2abdf6e5 --- /dev/null +++ b/src/aipass/seedgo/.trinity/passport.json @@ -0,0 +1,36 @@ +{ + "document_metadata": { + "document_type": "branch_identity", + "document_name": "SEEDGO.PASSPORT", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "SEEDGO", + "tags": ["identity", "passport", "branch_profile"] + }, + "branch_info": { + "branch_name": "SEEDGO", + "alias": "", + "path": "/home/aipass/aipass_business/AIPass/src/aipass/seedgo", + "module": "seedgo", + "created": "2026-03-05" + }, + "identity": { + "role": "Standards & Quality Platform", + "purpose": "", + "what_i_do": [], + "what_i_dont_do": [] + }, + "principles": [ + "Code is truth - fail honestly", + "Memory persists - context survives", + "Simple solutions over complex architecture" + ], + "citizenship": { + "registered": true, + "registry_path": ".aipass/registry.json", + "communications": true, + "memory": true + } +} diff --git a/src/aipass/seedgo/DASHBOARD.local.json b/src/aipass/seedgo/DASHBOARD.local.json new file mode 100644 index 00000000..ffe19902 --- /dev/null +++ b/src/aipass/seedgo/DASHBOARD.local.json @@ -0,0 +1,62 @@ +{ + "_warning": "AUTO-GENERATED FILE - DO NOT MANUALLY EDIT. This file is 100% automated and will be overwritten. Services update their own sections.", + "branch": "SEEDGO", + "last_updated": "2026-03-05", + "quick_status": { + "new_mail": 0, + "opened_mail": 0, + "active_plans": 0, + "commons_mentions": 0, + "action_required": false, + "summary": "" + }, + "sections": { + "ai_mail": { + "managed_by": "ai_mail", + "new": 0, + "opened": 0, + "total": 0, + "oldest_unread_age": null, + "last_dispatch_received": null, + "last_updated": "2026-03-05" + }, + "flow": { + "managed_by": "flow", + "active_plans": 0, + "recently_closed": [], + "last_updated": "2026-03-05" + }, + "memory_bank": { + "managed_by": "memory_bank", + "vectors_stored": 0, + "notes": {}, + "last_updated": "2026-03-05" + }, + "devpulse": { + "managed_by": "devpulse", + "summary": { + "issues": 0, + "todos": 0 + }, + "dplan_counts": {}, + "recent_activity": "", + "last_updated": "2026-03-05" + }, + "commons_activity": { + "managed_by": "the_commons", + "new_posts_since_last_visit": 0, + "new_comments_since_last_visit": 0, + "mentions": 0, + "trending": "None", + "last_checked": null, + "last_updated": "2026-03-05" + }, + "agent_status": { + "managed_by": "prax", + "active_agents": [], + "agent_count": 0, + "stale_agents": [], + "last_updated": "2026-03-05" + } + } +} diff --git a/src/aipass/seedgo/README.md b/src/aipass/seedgo/README.md new file mode 100644 index 00000000..5e2a14ba --- /dev/null +++ b/src/aipass/seedgo/README.md @@ -0,0 +1,51 @@ +# SEEDGO + +**Purpose:** Enforce code standards through pluggable standard packs with 3-source discovery +**Module:** `aipass.seedgo` +**Created:** 2026-03-05 + +--- + +## Overview + +### What I Do + + +### How I Work +- **Entry Point:** `apps/seedgo.py` +- **Pattern:** Auto-discovers and routes to modules + +--- + +## Architecture + +``` +SEEDGO/ +├── apps/ +│ ├── seedgo.py # Entry point +│ ├── modules/ # Business logic +│ ├── handlers/ # Implementation +│ └── plugins/ # Extensions +├── docs/ +├── tests/ +├── passport.json # Identity +├── local.json # Session history +├── observations.json # Collaboration patterns +└── README.md +``` + +--- + +## Commands + +*Configure after initialization* + +--- + +## Integration Points + +### Depends On + + +### Provides To + diff --git a/src/aipass/seedgo/apps/__init__.py b/src/aipass/seedgo/apps/__init__.py new file mode 100644 index 00000000..3066b423 --- /dev/null +++ b/src/aipass/seedgo/apps/__init__.py @@ -0,0 +1 @@ +# SEEDGO apps package diff --git a/src/aipass/seedgo/apps/handlers/__init__.py b/src/aipass/seedgo/apps/handlers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/seedgo/apps/modules/__init__.py b/src/aipass/seedgo/apps/modules/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/seedgo/apps/modules/seedgo_verify.py b/src/aipass/seedgo/apps/modules/seedgo_verify.py new file mode 100755 index 00000000..f609b762 --- /dev/null +++ b/src/aipass/seedgo/apps/modules/seedgo_verify.py @@ -0,0 +1,179 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: standards_verify.py - Seed Sync Verification Module +# Date: 2025-11-25 +# Version: 0.1.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-25): Initial implementation - verify seed sync status +# +# CODE STANDARDS: +# - Checks for deprecated patterns in codebase +# - Verifies file freshness and consistency +# - Validates help text accuracy +# ============================================= + +""" +Standards Verify Module + +Verifies that seed branch is in sync with recent changes. +Checks for stale patterns, file freshness, and help consistency. + +Run: python3 seed.py verify +""" + +import sys +from pathlib import Path +from typing import List +from datetime import datetime + +# ============================================================================= +# INFRASTRUCTURE SETUP +# ============================================================================= + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +# ============================================================================= +# IMPORTS +# ============================================================================= + +# Prax logger (system-wide, always first) +from prax.apps.modules.logger import system_logger as logger + +# JSON handler for tracking +from seed.apps.handlers.json import json_handler + +# CLI services (display/output formatting) +from cli.apps.modules import console + +# Verification orchestrator handler +from seed.apps.handlers.verify.orchestrator import run_verification + + +# ============================================================================= +# COMMAND HANDLER +# ============================================================================= + +def handle_command(command: str, args: List[str]) -> bool: + """ + Handle 'verify' command + + Args: + command: Command name + args: Additional arguments + + Returns: + True if handled, False if not this module's command + """ + if command != "verify": + return False + + # Check for help flag + if args and args[0] in ['--help', '-h', 'help']: + print_help() + return True + + # Log verification start + json_handler.log_operation( + "standards_verify_started", + {"timestamp": datetime.now().isoformat()} + ) + + # Run verification + result = run_verification() + + # Log completion + json_handler.log_operation( + "standards_verify_completed", + { + "passed": result['passed'], + "total": result['total'], + "score": result['score'] + } + ) + + return True + + +def print_help(): + """Print help information""" + console.print() + console.print("[bold cyan]Standards Verify Module[/bold cyan]") + console.print("Seed Sync Verification - Check for stale patterns and outdated files") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: verify, --help") + console.print() + console.print(" [cyan]verify[/cyan] - Run all verification checks") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed verify") + console.print() + console.print(" [dim]# Direct execution[/dim]") + console.print(" python3 seed.py verify") + console.print(" python3 seed.py verify --help") + console.print() + + console.print("[yellow]CHECKS PERFORMED:[/yellow]") + console.print(" [green]1.[/green] Stale Pattern Check") + console.print(" [dim]• Searches for deprecated flags (--verbose, --full)[/dim]") + console.print(" [dim]• Reports file:line where found[/dim]") + console.print() + console.print(" [green]2.[/green] File Freshness Check") + console.print(" [dim]• Compares modification dates of key files[/dim]") + console.print(" [dim]• Checks if README.md is outdated[/dim]") + console.print(" [dim]• Verifies SEED.local.json was updated today[/dim]") + console.print() + console.print(" [green]3.[/green] Help Consistency Check") + console.print(" [dim]• Verifies seed.py doesn't mention removed flags[/dim]") + console.print(" [dim]• Ensures help text is accurate[/dim]") + console.print() + console.print(" [green]4.[/green] Command Consistency Check") + console.print(" [dim]• Validates flag documentation across module.py, handler, README[/dim]") + console.print(" [dim]• Catches flags that exist but aren't documented everywhere[/dim]") + console.print() + console.print(" [green]5.[/green] Checker-Doc Sync Check") + console.print(" [dim]• Verifies checker count matches README, SEED.id.json, seed.py[/dim]") + console.print(" [dim]• Checks CODE_STANDARDS docs exist for each checker[/dim]") + console.print(" [dim]• Validates trigger_check patterns match trigger_content docs[/dim]") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Quick verification[/dim]") + console.print(" python3 seed.py verify") + console.print() + console.print(" [dim]# Show help[/dim]") + console.print(" python3 seed.py verify --help") + console.print() + + console.print("[yellow]REFERENCE:[/yellow]") + console.print(" Ensures seed branch stays in sync with recent changes.") + console.print(" Detects stale patterns, outdated docs, and inconsistent help text.") + console.print() + + +if __name__ == "__main__": + # Handle help flag + if len(sys.argv) > 1 and sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + # Confirm Prax logger connection + logger.info("Prax logger connected to standards_verify") + + # Log standalone execution + json_handler.log_operation( + "verify_run", + {"command": "standalone", "args": sys.argv[1:]} + ) + + # Run verification + handle_command("verify", sys.argv[1:]) diff --git a/src/aipass/seedgo/apps/plugins/__init__.py b/src/aipass/seedgo/apps/plugins/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/seedgo/apps/seedgo.py b/src/aipass/seedgo/apps/seedgo.py new file mode 100644 index 00000000..defb057c --- /dev/null +++ b/src/aipass/seedgo/apps/seedgo.py @@ -0,0 +1,86 @@ +""" +SEEDGO Branch - Main Orchestrator + +Auto-discovery architecture: +- Scans modules/ directory for .py files with handle_command() +- Routes commands to discovered modules automatically +- No manual imports or routing needed +""" + +import sys +import importlib +from pathlib import Path +from typing import List, Any + +from aipass.prax import logger + +# ============================================================================= +# MODULE DISCOVERY +# ============================================================================= + +MODULES_DIR = Path(__file__).parent / "modules" + + +def discover_modules() -> List[Any]: + """Auto-discover modules in modules/ directory.""" + modules = [] + + if not MODULES_DIR.exists(): + return modules + + for file_path in MODULES_DIR.glob("*.py"): + if file_path.name.startswith("_"): + continue + + module_name = f"apps.modules.{file_path.stem}" + + try: + module = importlib.import_module(module_name) + if hasattr(module, "handle_command"): + modules.append(module) + except Exception as e: + logger.error(f"[SEEDGO] Failed to load module {module_name}: {e}") + + return modules + + +def route_command(command: str, args: List[str], modules: List[Any]) -> bool: + """Route command to appropriate module.""" + for module in modules: + try: + if module.handle_command(command, args): + return True + except Exception as e: + logger.error(f"[SEEDGO] Module {module.__name__} error: {e}") + return False + + +# ============================================================================= +# MAIN ENTRY POINT +# ============================================================================= + +def main(): + """Main entry point - routes commands or shows help.""" + modules = discover_modules() + args = sys.argv[1:] + + if len(args) == 0 or args[0] in ["--help", "-h", "help"]: + print(f"SEEDGO - {len(modules)} modules discovered") + for module in modules: + name = module.__name__.split(".")[-1] + desc = (module.__doc__ or "").strip().split("\n")[0] if module.__doc__ else "No description" + print(f" {name:20} {desc}") + return 0 + + command = args[0] + remaining = args[1:] if len(args) > 1 else [] + + if route_command(command, remaining, modules): + return 0 + + print(f"Unknown command: {command}") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/aipass/seedgo/apps/standards/aipass/__init__.py b/src/aipass/seedgo/apps/standards/aipass/__init__.py new file mode 100644 index 00000000..73ab12a7 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/__init__.py @@ -0,0 +1 @@ +# Apps package - Branch application modules and handlers diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass.py b/src/aipass/seedgo/apps/standards/aipass/aipass.py new file mode 100755 index 00000000..91018e1d --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass.py @@ -0,0 +1,450 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: seed.py - Seed Branch Entry Point [SHOWROOM] +# Date: 2025-11-13 +# Version: 0.2.0 +# Category: seed +# +# CHANGELOG (Max 5 entries): +# - v0.2.0 (2025-11-13): Drone compliance - argparse help, CLI services, command routing +# - v0.1.0 (2025-11-12): Showroom structure - demonstrates architecture +# +# CODE STANDARDS: +# - This is a SHOWROOM/MODEL - demonstrates proper branch structure +# - Not functional - shows how pieces connect +# ============================================= + +""" +Seed Branch - Showroom/Model Branch + +PURPOSE: Demonstrates proper AIPass branch architecture without functional code. +Like a model home - shows structure, connections, imports, but doesn't actually work. + +ARCHITECTURE: +- Entry point auto-discovers modules +- Modules orchestrate workflow by calling handlers +- Handlers implement domain-specific business logic +""" + +import os +import sys +from pathlib import Path +from typing import List, Any +import importlib + +# ============================================================================= +# INFRASTRUCTURE SETUP +# ============================================================================= + +# AIPASS_ROOT pattern - always Path.home(), never hardcode +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) + +# Also add /home/aipass so seed package is importable +sys.path.insert(0, str(Path.home())) + +# Prax logger import - system-wide logging (oldest module, always reliable) +from prax.apps.modules.logger import system_logger as logger + +# CLI services for formatted output +from cli.apps.modules import console, header +from rich.panel import Panel +from rich.table import Table +from rich.columns import Columns + +# JSON handler for seed tracking +from seed.apps.handlers.json import json_handler + +# ============================================================================= +# INTROSPECTION DISPLAY +# ============================================================================= + +def print_introspection(): + """Display discovered modules and handlers""" + console.print() + console.print("[bold cyan]Seed - System Education Evolution Development[/bold cyan]") + console.print() + console.print("[dim]AIPass Code Standards Showroom[/dim]") + console.print() + + # Discover modules + modules = discover_modules() + + console.print(f"[yellow]Discovered Modules:[/yellow] {len(modules)}") + console.print() + + for module in modules: + module_name = module.__name__.split('.')[-1] + console.print(f" [cyan]•[/cyan] {module_name}") + + console.print() + console.print("[dim]Run 'python3 seed.py --help' for usage information[/dim]") + console.print() + + +# ============================================================================= +# DRONE COMPLIANCE - HELP SYSTEM +# ============================================================================= + +def print_help(): + """Display Rich-formatted help - Seed showpiece!""" + + console.print() + + # ========================================================================= + # RICH FORMATTING TIP: Use header() function for main titles + # header() creates a bordered box automatically (imported from cli.apps.modules) + # ========================================================================= + header("Seed - System Education Evolution Development") + + console.print() + + # RICH FORMATTING TIP: [dim] makes text appear dimmed/grayed out + console.print("[dim]Your guide to AIPass architecture patterns and standards[/dim]") + console.print() + console.print("─" * 70) # Separator line (matches handler style) + console.print() + + # ========================================================================= + # RICH FORMATTING TIP: Match handler style - simple [bold cyan]LABEL:[/bold cyan] format + # NO decorative borders (═══), just clean headers like handlers use + # ========================================================================= + console.print("[bold cyan]WHAT IS SEED?[/bold cyan]") + console.print() + console.print("Seed is the [bold]AIPass Code Standards Showroom[/bold] - a reference branch that:") + # RICH FORMATTING TIP: Use [green]✓[/green] for checkmarks in lists + console.print(" [green]✓[/green] Demonstrates proper AIPass architecture patterns") + console.print(" [green]✓[/green] Provides [green]19 queryable code standards[/green] via modules") + console.print(" [green]✓[/green] Serves as a living example for other branches to follow") + console.print() + + # ========================================================================= + # RICH FORMATTING TIP: Tables are powerful for structured data + # Create with Table(), add columns, add rows, then print + # ========================================================================= + console.print("[bold cyan]AVAILABLE STANDARDS (19):[/bold cyan]") + console.print() + + # RICH FORMATTING TIP: Table styling - show_header, header_style, border_style + table = Table(show_header=True, header_style="bold cyan", border_style="dim") + table.add_column("Command", style="green") # Column styling + table.add_column("Standard", style="white") + table.add_column("Description", style="dim") + + table.add_row("architecture", "Architecture", "3-layer pattern, handler independence") + table.add_row("cli", "CLI", "Dual approach (interactive + arguments)") + table.add_row("imports", "Imports", "Import order, AIPASS_ROOT pattern") + table.add_row("handlers", "Handlers", "File sizes, domain organization") + table.add_row("modules", "Modules", "handle_command(), orchestration") + table.add_row("naming", "Naming", "Path = context, name = action") + table.add_row("json_structure", "JSON Structure", "Three-JSON pattern") + table.add_row("error_handling", "Error Handling", "Fail honestly, CLI service") + table.add_row("documentation", "Documentation", "META headers, docstrings") + table.add_row("testing", "Testing", "Error handling, edge cases") + table.add_row("encapsulation", "Encapsulation", "Cross-branch import boundaries") + table.add_row("trigger", "Trigger", "Event bus patterns, inline ops") + table.add_row("log_level", "Log Level", "ERROR vs WARNING hygiene") + table.add_row("cli_flags", "CLI Flags", "Universal --version, --help flags") + table.add_row("log_handler", "Log Handler", "RotatingFileHandler required, no raw handlers") + table.add_row("log_visibility", "Log Visibility", "Prax system_logger required, no raw getLogger") + table.add_row("permission_flags", "Permission Flags", "Only --permission-mode bypassPermissions") + + # RICH FORMATTING TIP: Print the table after adding all rows + console.print(table) + console.print() + console.print("─" * 70) + console.print() + + # ========================================================================= + # RICH FORMATTING TIP: Columns layout for side-by-side content + # Columns([item1, item2, item3], equal=True, expand=True) + # ========================================================================= + console.print("[bold cyan]USAGE:[/bold cyan]") + console.print() + + usage_examples = [ + "[yellow]Quick Reference:[/yellow]\n [dim]python3 seed.py architecture[/dim]\n [dim]python3 seed.py imports[/dim]", + "[yellow]Via Drone:[/yellow]\n [dim]drone @seed cli[/dim]\n [dim]drone @seed error_handling[/dim]", + "[yellow]With Help Flag:[/yellow]\n [dim]python3 seed.py naming --help[/dim]\n [dim]drone @seed handlers --help[/dim]" + ] + + # RICH FORMATTING TIP: Columns creates side-by-side layout + console.print(Columns(usage_examples, equal=True, expand=True)) + console.print() + console.print("─" * 70) + console.print() + + # ========================================================================= + # ========================================================================= + # RICH FORMATTING TIP: Panels are good for highlighted content blocks + # Panel(content, border_style="color", padding=(top/bottom, left/right)) + # ========================================================================= + console.print("[bold cyan]AUTOMATED STANDARDS CHECKER (NEW!):[/bold cyan]") + console.print() + + checker_text = """[bold green]Check your code automatically:[/bold green] + + [yellow]Command:[/yellow] [dim]python3 seed.py checklist [/dim] + + [bold]What it does:[/bold] + • Checks 19/19 standards automatically (95%+ accuracy - v0.3.0 false positives eliminated) + • Scores your file 0-100 on each standard + • Shows specific violations with line numbers + • Fast - runs in seconds + + [bold]Example:[/bold] + [dim]python3 seed.py checklist apps/modules/my_module.py[/dim]""" + + console.print(Panel(checker_text, border_style="yellow", padding=(1, 2))) + console.print() + + # ========================================================================= + # BRANCH AUDIT + # ========================================================================= + console.print("[bold cyan]BRANCH-WIDE AUDIT (NEW!):[/bold cyan]") + console.print() + + audit_text = """[bold green]Check all branches at once:[/bold green] + + [yellow]Command:[/yellow] [dim]python3 seed.py audit[/dim] + + [bold]What it does:[/bold] + • Scans all 11 branches automatically + • Shows compliance dashboard for entire system + • Identifies top improvement areas + • System-wide health at a glance + + [bold]Examples:[/bold] + [dim]python3 seed.py audit # Full audit (all branches, all files)[/dim] + [dim]python3 seed.py audit drone # Audit specific branch[/dim] + [dim]python3 seed.py audit --show-bypasses # Show all bypassed files[/dim] + [dim]python3 seed.py audit drone --bypasses # Bypasses for specific branch[/dim]""" + + console.print(Panel(audit_text, border_style="cyan", padding=(1, 2))) + console.print() + + # ========================================================================= + # SYNC VERIFICATION + # ========================================================================= + console.print("[bold cyan]SYNC VERIFICATION (NEW!):[/bold cyan]") + console.print() + + verify_text = """[bold green]Check Seed's internal documentation consistency:[/bold green] + + [yellow]Command:[/yellow] [dim]python3 seed.py verify[/dim] + + [bold]What it does:[/bold] + • Scans for stale/deprecated patterns + • Checks file freshness + • Verifies help text consistency + + [bold]Example:[/bold] + [dim]python3 seed.py verify[/dim]""" + + console.print(Panel(verify_text, border_style="magenta", padding=(1, 2))) + console.print() + console.print("─" * 70) + console.print() + + console.print("[bold cyan]FOR BRANCHES USING SEED:[/bold cyan]") + console.print() + + workflow_text = """[bold]When building features, query Seed for standards:[/bold] + + [green]✓[/green] Starting new module? → [dim]seed modules[/dim] + [green]✓[/green] Adding handlers? → [dim]seed handlers[/dim] + [green]✓[/green] Naming files/functions? → [dim]seed naming[/dim] + [green]✓[/green] Error handling? → [dim]seed error_handling[/dim] + [green]✓[/green] Imports pattern? → [dim]seed imports[/dim] + [green]✓[/green] JSON structure? → [dim]seed json_structure[/dim]""" + + # RICH FORMATTING TIP: Panel wraps content in a bordered box + console.print(Panel(workflow_text, border_style="green", padding=(1, 2))) + console.print() + console.print("─" * 70) + console.print() + + # ========================================================================= + # IMPORTANT NOTE FOR BRANCHES + # ========================================================================= + console.print("[bold cyan]A NOTE ON STANDARDS CHECKING:[/bold cyan]") + console.print() + + note_text = """[bold yellow]Seed is actively evolving.[/bold yellow] + + The standards checkers are continuously improving. If you encounter a + violation that seems like a [bold]false positive[/bold]: + + [green]✓[/green] Trust your judgment - if your code is correct, it's correct + [green]✓[/green] Report it - your feedback helps improve the checkers + [green]✓[/green] Don't change correct code to satisfy a flawed check + + [dim]Some edge cases we're still refining:[/dim] + • Documentation handlers that legitimately need CLI services + • Branch-specific patterns that differ from the standard model + • Complex structures that look like business logic but aren't + + [bold]Your feedback drives improvement.[/bold] Questions? Ask via ai_mail.""" + + console.print(Panel(note_text, border_style="yellow", padding=(1, 2))) + console.print() + console.print("─" * 70) + console.print() + + # Simple header style (matching handlers) + console.print("[bold cyan]FULL DOCUMENTATION:[/bold cyan]") + console.print() + # RICH FORMATTING TIP: Use [yellow] for labels, [dim] for paths + console.print(" [yellow]Standards (markdown):[/yellow] [dim]/home/aipass/standards/CODE_STANDARDS/[/dim]") + console.print(" [yellow]Handlers (condensed):[/yellow] [dim]/home/aipass/seed/apps/handlers/standards/[/dim]") + console.print(" [yellow]Modules (queryable):[/yellow] [dim]/home/aipass/seed/apps/modules/[/dim]") + console.print() + console.print("─" * 70) + console.print() + + # RICH FORMATTING TIP: Use [bold] for emphasis without color + console.print("[bold]TIP:[/bold] Each standard has two versions:") + console.print(" [dim]•[/dim] Handler = quick reference (~100 lines, Rich formatted)") + console.print(" [dim]•[/dim] Markdown = comprehensive docs (full details)") + console.print() + console.print("─" * 70) + console.print() + + # RICH FORMATTING TIP: Commands line required for drone discovery + # This is how drone finds available commands - keep [dim] style + console.print("[dim]Commands: architecture, cli, documentation, encapsulation, error_handling, handlers, imports, json_structure, log_level, log_handler, modules, naming, permission_flags, testing, trigger, checklist, audit, verify, diagnostics, readme, help, --help[/dim]") + console.print() + + +# ============================================================================= +# MODULE DISCOVERY +# ============================================================================= + +MODULES_DIR = Path(__file__).parent / "modules" + +def discover_modules() -> List[Any]: + """ + Auto-discover modules in modules/ directory + + Pattern from Cortex: Any .py file in modules/ that implements handle_command() + gets automatically discovered and registered. + + Returns: + List of module objects with handle_command() method + """ + modules = [] + + if not MODULES_DIR.exists(): + return modules + + for file_path in MODULES_DIR.glob("*.py"): + if file_path.name.startswith("_"): # Skip __init__.py, __pycache__, etc. + continue + + module_name = f"seed.apps.modules.{file_path.stem}" + + try: + module = importlib.import_module(module_name) + + # Duck typing: If it has handle_command(), it's a module + if hasattr(module, 'handle_command'): + modules.append(module) + logger.info(f"Discovered module: {module_name}") + except Exception as e: + logger.error(f"Failed to load module {module_name}: {e}") + + return modules + + +def route_command(command: str, args: List[str], modules: List[Any]) -> bool: + """ + Route command to appropriate module + + Pattern: Each module's handle_command() returns True if it handled the command + + Args: + command: Command name (e.g., 'create', 'update', 'delete') + args: Additional arguments + modules: List of discovered modules + + Returns: + True if command was handled, False otherwise + """ + for module in modules: + try: + if module.handle_command(command, args): + return True + except BrokenPipeError: + raise + except Exception as e: + logger.error(f"Module {module.__name__} error: {e}") + + return False + + +# ============================================================================= +# MAIN ENTRY POINT +# ============================================================================= + +def main(): + """Main entry point - routes commands or shows help""" + + # Parse arguments + args = sys.argv[1:] + + # Show introspection when run without arguments + if len(args) == 0: + print_introspection() + json_handler.log_operation("seed_introspection_displayed", {"trigger": "no_args"}) + return + + # Show help only for explicit help flags + if args[0] in ['--help', '-h', 'help']: + print_help() + json_handler.log_operation("seed_help_displayed", {"trigger": args[0]}) + return + + # Show version + if args[0] in ['--version', '-V']: + console.print("SEED v0.2.0") + return + + # Command provided - try to route to modules + modules = discover_modules() + command = args[0] + remaining_args = args[1:] if len(args) > 1 else [] + + # Log seed command attempt + json_handler.log_operation( + "seed_command_attempted", + {"command": command, "modules_discovered": len(modules)} + ) + + if route_command(command, remaining_args, modules): + return # Module handled it successfully + else: + console.print() + console.print(f"[red]Unknown command: {command}[/red]") + console.print() + console.print("Run [dim]python3 seed.py --help[/dim] for available commands") + console.print() + return + + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + console.print("\n\nOperation cancelled by user") + sys.exit(0) + except BrokenPipeError: + # Pipe closed by caller (e.g. drone capturing output) - not an error + devnull = os.open(os.devnull, os.O_WRONLY) + os.dup2(devnull, sys.stdout.fileno()) + sys.exit(0) + except Exception as e: + logger.error(f"Seed entry point error: {e}", exc_info=True) + console.print(f"\n❌ Error: {e}") + sys.exit(1) diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/api_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/api_config.json new file mode 100644 index 00000000..fbf5686d --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/api_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "api", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/api_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/api_data.json new file mode 100644 index 00000000..32dac852 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/api_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "api", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/api_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/api_log.json new file mode 100644 index 00000000..435cf9e9 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/api_log.json @@ -0,0 +1,69 @@ +[ + { + "timestamp": "2025-11-17T00:05:57.731080", + "operation": "api_help_displayed", + "data": { + "trigger": "help" + } + }, + { + "timestamp": "2025-11-17T00:06:18.992090", + "operation": "api_command_attempted", + "data": { + "command": "get", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-17T00:06:35.415509", + "operation": "api_command_attempted", + "data": { + "command": "models", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-17T00:06:45.471055", + "operation": "api_command_attempted", + "data": { + "command": "stats", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-17T00:07:02.357360", + "operation": "api_command_attempted", + "data": { + "command": "track", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-17T00:07:59.662347", + "operation": "api_introspection_displayed", + "data": { + "trigger": "no_args" + } + }, + { + "timestamp": "2025-11-19T20:55:45.287752", + "operation": "api_help_displayed", + "data": { + "trigger": "--help" + } + }, + { + "timestamp": "2025-11-22T08:24:53.772763", + "operation": "api_help_displayed", + "data": { + "trigger": "--help" + } + }, + { + "timestamp": "2025-11-22T17:47:50.232480", + "operation": "api_introspection_displayed", + "data": { + "trigger": "no_args" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_check_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_check_config.json new file mode 100644 index 00000000..961604b2 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_check_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "architecture_check", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_check_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_check_data.json new file mode 100644 index 00000000..98e9686e --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_check_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "architecture_check", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_check_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_check_log.json new file mode 100644 index 00000000..b71365c1 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_check_log.json @@ -0,0 +1,898 @@ +[ + { + "timestamp": "2025-11-16T17:43:57.738041", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.741054", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.785753", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.788201", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.829938", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.832342", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.872320", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.874721", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.916251", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.918654", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.958759", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.961169", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:58.007524", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.009977", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:58.056148", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.059020", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.152016", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.154392", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.210195", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.213403", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.258095", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.261048", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.302670", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.305058", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.350020", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.352895", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.395269", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.397922", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.446906", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.449575", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.491369", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.494440", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.534835", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.537355", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.583320", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.586059", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.625203", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.627630", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.530228", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.533040", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.580452", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.583349", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.623780", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.626025", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.662285", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.664455", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.709927", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.713029", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.755059", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.757555", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.798530", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.802017", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.845356", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.848684", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.893203", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.895549", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.947261", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.951066", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.995266", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.998019", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.555656", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.557853", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.600630", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.603382", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.644265", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.646625", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.684734", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.687062", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.728149", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.731403", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.772219", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.774585", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.824212", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.829050", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.877485", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.880402", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.923114", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.925564", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.973232", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.976083", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:08.018198", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:08.020852", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T20:38:09.477532", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py" + } + }, + { + "timestamp": "2025-11-18T20:38:09.480198", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T20:38:19.532048", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py" + } + }, + { + "timestamp": "2025-11-18T20:38:19.534756", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T20:38:29.138856", + "operation": "architecture_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T20:38:29.141364", + "operation": "architecture_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-21T11:54:28.467346", + "operation": "architecture_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:54:28.470447", + "operation": "architecture_check_completed", + "data": { + "module_path": "apps/modules/imports_standard.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-21T11:57:16.460479", + "operation": "architecture_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:16.463117", + "operation": "architecture_check_completed", + "data": { + "module_path": "apps/modules/imports_standard.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-21T11:57:24.317166", + "operation": "architecture_check_started", + "data": { + "module_path": "apps/modules/documentation_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:24.319691", + "operation": "architecture_check_completed", + "data": { + "module_path": "apps/modules/documentation_standard.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-21T11:59:40.692864", + "operation": "architecture_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:40.884018", + "operation": "architecture_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:49.839284", + "operation": "architecture_check_started", + "data": { + "module_path": "apps/modules/standards_audit.py" + } + }, + { + "timestamp": "2025-11-21T11:59:49.841820", + "operation": "architecture_check_completed", + "data": { + "module_path": "apps/modules/standards_audit.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-21T11:59:50.975797", + "operation": "architecture_check_started", + "data": { + "module_path": "apps/modules/standards_checklist.py" + } + }, + { + "timestamp": "2025-11-21T11:59:50.978447", + "operation": "architecture_check_completed", + "data": { + "module_path": "apps/modules/standards_checklist.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_standard_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_standard_config.json new file mode 100644 index 00000000..146628ab --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_standard_config.json @@ -0,0 +1,10 @@ +{ + "module_name": "architecture_standard", + "version": "0.1.0", + "created": "2025-11-12", + "config": { + "enabled": true, + "log_level": "info", + "max_log_entries": 100 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_standard_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_standard_data.json new file mode 100644 index 00000000..5b6d8552 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_standard_data.json @@ -0,0 +1,9 @@ +{ + "created": "2025-11-12", + "last_updated": "2025-11-12", + "metrics": { + "operations_count": 0, + "success_count": 0, + "error_count": 0 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_standard_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_standard_log.json new file mode 100644 index 00000000..5c180649 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/architecture_standard_log.json @@ -0,0 +1,247 @@ +[ + { + "timestamp": "2025-11-21T13:47:24.176002", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-21T23:37:52.225537", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-21T23:42:15.108193", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-21T23:46:02.037429", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-22T08:25:07.514331", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-22T08:25:58.734088", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-22T08:26:38.092006", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-22T08:28:03.536628", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-22T08:28:32.379024", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-22T08:29:40.002505", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-22T08:30:06.219931", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-22T08:47:43.548047", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-22T08:52:39.901585", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-22T09:48:39.974302", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-22T15:14:03.334638", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-22T16:34:04.278865", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-23T00:44:57.023935", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-23T00:44:57.791408", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-23T01:57:15.464462", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-27T11:39:35.625169", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-27T13:14:16.237606", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-27T13:14:22.393549", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-27T13:19:14.689436", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-27T16:25:44.639900", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-29T16:20:49.665073", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-29T17:14:20.888954", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-29T18:41:38.941495", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-29T18:51:39.090768", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-29T19:02:13.197719", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-29T19:02:49.865801", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-29T20:29:10.213536", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-29T21:28:30.401709", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-29T21:28:32.453142", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2025-11-29T23:11:12.781040", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + }, + { + "timestamp": "2026-01-30T22:42:26.774479", + "operation": "standard_displayed", + "data": { + "command": "architecture" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/backup_core_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/backup_core_config.json new file mode 100644 index 00000000..d8558166 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/backup_core_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "backup_core", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/backup_core_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/backup_core_data.json new file mode 100644 index 00000000..7a84b349 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/backup_core_data.json @@ -0,0 +1,32 @@ +{ + "module_name": "backup_core", + "created": "2025-11-13", + "last_updated": "2025-11-18", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0, + "runtime_state": { + "current_status": "completed", + "last_backup": "2025-11-18T19:30:07.237970", + "active_mode": "snapshot", + "total_files_backed_up": 20279, + "backup_in_progress": false + }, + "statistics": { + "total_backups": 1, + "successful_backups": 1, + "failed_backups": 0, + "snapshot_backups": 1, + "versioned_backups": 0, + "total_files_processed": 20279 + }, + "recent_backups": [ + { + "timestamp": "2025-11-18T19:30:07.237984", + "mode": "snapshot", + "success": true, + "files_copied": 20279, + "errors": 0 + } + ] +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/backup_core_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/backup_core_log.json new file mode 100644 index 00000000..042c6ceb --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/backup_core_log.json @@ -0,0 +1,12 @@ +[ + { + "timestamp": "2025-11-18T19:30:07.236764", + "operation": "backup", + "data": { + "mode": "snapshot", + "files_copied": 20279, + "success": true, + "execution_time_ms": 93460 + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_check_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_check_config.json new file mode 100644 index 00000000..6b8f9a89 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_check_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "cli_check", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_check_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_check_data.json new file mode 100644 index 00000000..aba03199 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_check_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "cli_check", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_check_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_check_log.json new file mode 100644 index 00000000..07799da8 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_check_log.json @@ -0,0 +1,898 @@ +[ + { + "timestamp": "2025-11-16T17:43:57.749432", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.752607", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.796024", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.798873", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.839347", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.842030", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.882264", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.884996", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.925720", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.928345", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:43:57.969013", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.971869", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:58.018209", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.021270", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:43:58.067353", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.070615", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.165962", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.169203", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.221266", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.224115", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.269572", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.272268", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 0, + "passed": false, + "total_checks": 3, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-18T17:51:55.312620", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.315650", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.360254", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.363155", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.407038", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.410962", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.456690", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.459461", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.501628", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.504246", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.544864", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.548053", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.593392", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.595960", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.634914", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.637818", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.542247", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.545456", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.590555", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.593234", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.632659", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.635291", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 0, + "passed": false, + "total_checks": 3, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-18T17:52:01.672141", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.675491", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.721079", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.723850", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.764528", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.767604", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.809064", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.811528", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.856712", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.859371", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.903618", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.906786", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.961452", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.964110", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:02.005921", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:02.008858", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.565482", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.568130", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.610402", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.613244", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.653610", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.656267", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 0, + "passed": false, + "total_checks": 3, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-18T17:52:07.694330", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.697294", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.738694", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.741485", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.781544", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.784235", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.839772", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.842652", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.887970", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.890827", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.933068", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.936324", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.983167", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.986005", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:08.028309", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:08.031256", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T20:38:09.496729", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py" + } + }, + { + "timestamp": "2025-11-18T20:38:09.500540", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T20:38:19.549508", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py" + } + }, + { + "timestamp": "2025-11-18T20:38:19.553158", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-18T20:38:29.150353", + "operation": "cli_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T20:38:29.153397", + "operation": "cli_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 0, + "passed": false, + "total_checks": 3, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-21T11:54:28.486301", + "operation": "cli_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:54:28.489131", + "operation": "cli_check_completed", + "data": { + "module_path": "apps/modules/imports_standard.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-21T11:57:16.475690", + "operation": "cli_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:16.478600", + "operation": "cli_check_completed", + "data": { + "module_path": "apps/modules/imports_standard.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-21T11:57:24.331915", + "operation": "cli_check_started", + "data": { + "module_path": "apps/modules/documentation_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:24.334782", + "operation": "cli_check_completed", + "data": { + "module_path": "apps/modules/documentation_standard.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-21T11:59:40.700588", + "operation": "cli_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:40.892859", + "operation": "cli_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:49.854014", + "operation": "cli_check_started", + "data": { + "module_path": "apps/modules/standards_audit.py" + } + }, + { + "timestamp": "2025-11-21T11:59:49.857387", + "operation": "cli_check_completed", + "data": { + "module_path": "apps/modules/standards_audit.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-21T11:59:50.991145", + "operation": "cli_check_started", + "data": { + "module_path": "apps/modules/standards_checklist.py" + } + }, + { + "timestamp": "2025-11-21T11:59:50.994842", + "operation": "cli_check_completed", + "data": { + "module_path": "apps/modules/standards_checklist.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_standard_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_standard_config.json new file mode 100644 index 00000000..af889fda --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_standard_config.json @@ -0,0 +1,10 @@ +{ + "module_name": "cli_standard", + "version": "0.1.0", + "created": "2025-11-12", + "config": { + "enabled": true, + "log_level": "info", + "max_log_entries": 100 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_standard_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_standard_data.json new file mode 100644 index 00000000..5b6d8552 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_standard_data.json @@ -0,0 +1,9 @@ +{ + "created": "2025-11-12", + "last_updated": "2025-11-12", + "metrics": { + "operations_count": 0, + "success_count": 0, + "error_count": 0 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_standard_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_standard_log.json new file mode 100644 index 00000000..a8bf8135 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cli_standard_log.json @@ -0,0 +1,205 @@ +[ + { + "timestamp": "2025-11-21T13:47:38.443746", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-21T18:14:03.850936", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-22T08:52:53.071386", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-22T09:50:18.574797", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-22T14:04:24.785242", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-22T14:22:31.400693", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-22T15:00:52.388060", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-22T15:18:42.289201", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-25T16:46:08.970384", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-25T20:09:35.391455", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-27T11:39:35.615350", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-27T13:14:22.406812", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-27T13:16:10.995123", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-27T13:19:02.720401", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-27T13:19:08.483059", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-27T13:19:21.046256", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-27T13:19:26.290604", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-27T16:26:08.446804", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-27T16:26:28.776432", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-28T20:57:46.633663", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-28T21:08:32.667453", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-28T21:08:52.968788", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-29T09:39:35.833948", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-29T18:41:59.313556", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-29T19:02:15.189314", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-29T19:02:31.642406", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-29T20:29:11.243202", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-29T21:28:32.450301", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + }, + { + "timestamp": "2025-11-29T23:11:15.065272", + "operation": "standard_displayed", + "data": { + "command": "cli" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/cortex_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cortex_config.json new file mode 100644 index 00000000..cfc388db --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cortex_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "cortex", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/cortex_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cortex_data.json new file mode 100644 index 00000000..a0c6c474 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cortex_data.json @@ -0,0 +1,10 @@ +{ + "module_name": "cortex", + "created": "2025-11-13", + "last_updated": "2026-01-21", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0, + "commands_successful": 16, + "commands_failed": 2 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/cortex_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cortex_log.json new file mode 100644 index 00000000..789e1556 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/cortex_log.json @@ -0,0 +1,288 @@ +[ + { + "timestamp": "2025-11-29T23:11:33.299687", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "introspection" + } + }, + { + "timestamp": "2025-11-30T15:07:29.632712", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "sync-registry" + } + }, + { + "timestamp": "2025-11-30T15:07:29.813970", + "operation": "command_routed_successfully", + "data": { + "command": "sync-registry" + } + }, + { + "timestamp": "2025-11-30T15:11:01.766113", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "sync-registry" + } + }, + { + "timestamp": "2025-11-30T15:11:01.942335", + "operation": "command_routed_successfully", + "data": { + "command": "sync-registry" + } + }, + { + "timestamp": "2025-11-30T15:11:08.886460", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "sync-registry" + } + }, + { + "timestamp": "2025-11-30T15:11:09.020283", + "operation": "command_routed_successfully", + "data": { + "command": "sync-registry" + } + }, + { + "timestamp": "2025-11-30T15:11:26.476096", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "regenerate-template-registry" + } + }, + { + "timestamp": "2025-11-30T15:11:26.521888", + "operation": "command_routed_successfully", + "data": { + "command": "regenerate-template-registry" + } + }, + { + "timestamp": "2025-11-30T15:21:59.744863", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "regenerate-template-registry" + } + }, + { + "timestamp": "2025-11-30T15:21:59.773680", + "operation": "command_routed_successfully", + "data": { + "command": "regenerate-template-registry" + } + }, + { + "timestamp": "2025-11-30T15:22:03.142022", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "sync-registry" + } + }, + { + "timestamp": "2025-11-30T15:22:03.283466", + "operation": "command_routed_successfully", + "data": { + "command": "sync-registry" + } + }, + { + "timestamp": "2025-11-30T15:22:14.142397", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "sync-registry" + } + }, + { + "timestamp": "2025-11-30T15:22:14.268549", + "operation": "command_routed_successfully", + "data": { + "command": "sync-registry" + } + }, + { + "timestamp": "2025-11-30T18:35:37.722392", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "egenerate-template-registry" + } + }, + { + "timestamp": "2025-11-30T18:35:37.730026", + "operation": "command_not_handled", + "data": { + "command": "egenerate-template-registry" + } + }, + { + "timestamp": "2025-11-30T18:35:47.867792", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "regenerate-template-registry" + } + }, + { + "timestamp": "2025-11-30T18:35:47.909246", + "operation": "command_routed_successfully", + "data": { + "command": "regenerate-template-registry" + } + }, + { + "timestamp": "2025-11-30T18:38:32.729189", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "create-branch" + } + }, + { + "timestamp": "2025-11-30T18:38:32.793807", + "operation": "command_routed_successfully", + "data": { + "command": "create-branch" + } + }, + { + "timestamp": "2025-11-30T18:42:14.522205", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "create-branch" + } + }, + { + "timestamp": "2025-11-30T18:42:14.590898", + "operation": "command_routed_successfully", + "data": { + "command": "create-branch" + } + }, + { + "timestamp": "2025-11-30T19:06:46.042515", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "sync-registry" + } + }, + { + "timestamp": "2025-11-30T19:06:46.193639", + "operation": "command_routed_successfully", + "data": { + "command": "sync-registry" + } + }, + { + "timestamp": "2025-11-30T21:14:30.078237", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "create-branch" + } + }, + { + "timestamp": "2025-11-30T21:14:30.171509", + "operation": "command_routed_successfully", + "data": { + "command": "create-branch" + } + }, + { + "timestamp": "2025-11-30T21:24:19.358173", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "sync-registry" + } + }, + { + "timestamp": "2025-11-30T21:24:19.488806", + "operation": "command_routed_successfully", + "data": { + "command": "sync-registry" + } + }, + { + "timestamp": "2025-11-30T21:25:02.763854", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "sync-registry" + } + }, + { + "timestamp": "2025-11-30T21:25:02.904572", + "operation": "command_routed_successfully", + "data": { + "command": "sync-registry" + } + }, + { + "timestamp": "2025-12-02T22:39:55.957178", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "status" + } + }, + { + "timestamp": "2025-12-02T22:39:55.964236", + "operation": "command_not_handled", + "data": { + "command": "status" + } + }, + { + "timestamp": "2025-12-08T09:43:41.174196", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "sync-registry" + } + }, + { + "timestamp": "2025-12-08T09:43:41.489820", + "operation": "command_routed_successfully", + "data": { + "command": "sync-registry" + } + }, + { + "timestamp": "2026-01-21T00:29:21.645460", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "introspection" + } + }, + { + "timestamp": "2026-01-21T00:32:01.942283", + "operation": "cortex_startup", + "data": { + "modules_discovered": 5, + "command": "create-branch" + } + }, + { + "timestamp": "2026-01-21T00:32:02.005234", + "operation": "command_routed_successfully", + "data": { + "command": "create-branch" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_branch_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_branch_config.json new file mode 100644 index 00000000..9cf3ebcc --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_branch_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "create_branch", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_branch_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_branch_data.json new file mode 100644 index 00000000..44cd1f0d --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_branch_data.json @@ -0,0 +1,9 @@ +{ + "module_name": "create_branch", + "created": "2025-11-13", + "last_updated": "2026-01-21", + "operations_total": 0, + "operations_successful": 4, + "operations_failed": 0, + "branches_created": 4 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_branch_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_branch_log.json new file mode 100644 index 00000000..f3a0ffee --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_branch_log.json @@ -0,0 +1,279 @@ +[ + { + "timestamp": "2025-11-30T18:38:32.743507", + "operation": "branch_creation_started", + "data": { + "branch": "DEV_CENTRAL", + "path": "/home/aipass/dev_central", + "profile": "Workshop" + } + }, + { + "timestamp": "2025-11-30T18:38:32.792312", + "operation": "branch_creation_completed", + "data": { + "branch": "DEV_CENTRAL", + "success": true, + "files_copied": [ + "BRANCH.ID.json", + "tools/ (directory)", + "dev.local.md", + "docs/ (directory)", + "docs/_template.md", + "tests/ (directory)", + "tests/__init__.py", + "tests/conftest.py", + "apps/ (directory)", + "apps/handlers/ (directory)", + "apps/handlers/json/ (directory)", + "apps/handlers/json/json_handler.py", + "apps/handlers/json/__init__.py", + "apps/handlers/__init__.py", + "apps/BRANCH.py", + "apps/json_templates/ (directory)", + "apps/json_templates/default/ (directory)", + "apps/json_templates/default/data.json", + "apps/json_templates/default/log.json", + "apps/json_templates/default/config.json", + "apps/json_templates/__init__.py", + "apps/plugins/ (directory)", + "apps/plugins/__init__.py", + "apps/__init__.py", + "apps/modules/ (directory)", + "apps/modules/__init__.py", + "apps/extensions/ (directory)", + "apps/extensions/__init__.py", + ".archive/ (directory)", + ".gitignore", + "DASHBOARD.local.json", + "logs/ (directory)", + ".migrations.json", + ".backup/ (directory)", + "{{BRANCH}}_json/ (directory)", + "artifacts/ (directory)", + "notepad.md", + "OBSERVATIONS.json", + "requirements.txt", + "ai_mail.local/ (directory)", + "ai_mail.local/inbox.json", + "ai_mail.local/sent.json", + "ai_mail.local/deleted.json", + "README.md", + "LOCAL.json", + "pytest.ini", + "dropbox/ (directory)" + ], + "files_skipped": [], + "files_renamed": 4, + "modules_migrated": 0 + } + }, + { + "timestamp": "2025-11-30T18:42:14.530642", + "operation": "branch_creation_started", + "data": { + "branch": "DEV_CENTRAL", + "path": "/home/aipass/aipass_os/dev_central", + "profile": "Workshop" + } + }, + { + "timestamp": "2025-11-30T18:42:14.589277", + "operation": "branch_creation_completed", + "data": { + "branch": "DEV_CENTRAL", + "success": true, + "files_copied": [ + "dev.local.md", + "docs/_template.md", + "tests/ (directory)", + "tests/__init__.py", + "tests/conftest.py", + "apps/ (directory)", + "apps/handlers/ (directory)", + "apps/handlers/json/ (directory)", + "apps/handlers/json/json_handler.py", + "apps/handlers/json/__init__.py", + "apps/handlers/__init__.py", + "apps/BRANCH.py", + "apps/json_templates/ (directory)", + "apps/json_templates/default/ (directory)", + "apps/json_templates/default/data.json", + "apps/json_templates/default/log.json", + "apps/json_templates/default/config.json", + "apps/json_templates/__init__.py", + "apps/plugins/ (directory)", + "apps/plugins/__init__.py", + "apps/__init__.py", + "apps/modules/ (directory)", + "apps/modules/__init__.py", + "apps/extensions/ (directory)", + "apps/extensions/__init__.py", + "logs/ (directory)", + ".migrations.json", + "{{BRANCH}}_json/ (directory)", + "notepad.md", + "OBSERVATIONS.json", + "requirements.txt", + "README.md", + "LOCAL.json", + "pytest.ini", + "dropbox/ (directory)" + ], + "files_skipped": [ + "BRANCH.ID.json (renamed version exists)", + "tools", + "docs", + ".archive", + ".gitignore", + "DASHBOARD.local.json", + ".backup", + "artifacts", + "ai_mail.local", + "ai_mail.local/inbox.json", + "ai_mail.local/sent.json", + "ai_mail.local/deleted.json" + ], + "files_renamed": 3, + "modules_migrated": 0 + } + }, + { + "timestamp": "2025-11-30T21:14:30.086422", + "operation": "branch_creation_started", + "data": { + "branch": "TRIGGER", + "path": "/home/aipass/aipass_core/trigger", + "profile": "Workshop" + } + }, + { + "timestamp": "2025-11-30T21:14:30.169484", + "operation": "branch_creation_completed", + "data": { + "branch": "TRIGGER", + "success": true, + "files_copied": [ + "BRANCH.ID.json", + "tools/ (directory)", + "dev.local.md", + "docs/ (directory)", + "docs/_template.md", + "tests/ (directory)", + "tests/__init__.py", + "tests/conftest.py", + "apps/ (directory)", + "apps/handlers/ (directory)", + "apps/handlers/json/ (directory)", + "apps/handlers/json/json_handler.py", + "apps/handlers/json/__init__.py", + "apps/handlers/__init__.py", + "apps/BRANCH.py", + "apps/json_templates/ (directory)", + "apps/json_templates/default/ (directory)", + "apps/json_templates/default/data.json", + "apps/json_templates/default/log.json", + "apps/json_templates/default/config.json", + "apps/json_templates/__init__.py", + "apps/plugins/ (directory)", + "apps/plugins/__init__.py", + "apps/__init__.py", + "apps/modules/ (directory)", + "apps/modules/__init__.py", + "apps/extensions/ (directory)", + "apps/extensions/__init__.py", + ".archive/ (directory)", + ".gitignore", + "DASHBOARD.local.json", + "logs/ (directory)", + ".migrations.json", + ".backup/ (directory)", + "{{BRANCH}}_json/ (directory)", + "artifacts/ (directory)", + "notepad.md", + "OBSERVATIONS.json", + "requirements.txt", + "ai_mail.local/ (directory)", + "ai_mail.local/inbox.json", + "ai_mail.local/sent.json", + "ai_mail.local/deleted.json", + "README.md", + "LOCAL.json", + "pytest.ini", + "dropbox/ (directory)" + ], + "files_skipped": [], + "files_renamed": 4, + "modules_migrated": 0 + } + }, + { + "timestamp": "2026-01-21T00:32:01.952519", + "operation": "branch_creation_started", + "data": { + "branch": "ASSISTANT", + "path": "/home/aipass/aipass_os/dev_central/assistant", + "profile": "Workshop" + } + }, + { + "timestamp": "2026-01-21T00:32:02.003358", + "operation": "branch_creation_completed", + "data": { + "branch": "ASSISTANT", + "success": true, + "files_copied": [ + "BRANCH.ID.json", + "tools/ (directory)", + "dev.local.md", + "docs/ (directory)", + "docs/_template.md", + "tests/ (directory)", + "tests/__init__.py", + "tests/conftest.py", + "apps/ (directory)", + "apps/handlers/ (directory)", + "apps/handlers/json/ (directory)", + "apps/handlers/json/json_handler.py", + "apps/handlers/json/__init__.py", + "apps/handlers/__init__.py", + "apps/BRANCH.py", + "apps/json_templates/ (directory)", + "apps/json_templates/default/ (directory)", + "apps/json_templates/default/data.json", + "apps/json_templates/default/log.json", + "apps/json_templates/default/config.json", + "apps/json_templates/__init__.py", + "apps/plugins/ (directory)", + "apps/plugins/__init__.py", + "apps/__init__.py", + "apps/modules/ (directory)", + "apps/modules/__init__.py", + "apps/extensions/ (directory)", + "apps/extensions/__init__.py", + ".archive/ (directory)", + ".gitignore", + "DASHBOARD.local.json", + "logs/ (directory)", + ".migrations.json", + ".backup/ (directory)", + "{{BRANCH}}_json/ (directory)", + "artifacts/ (directory)", + "notepad.md", + "OBSERVATIONS.json", + "requirements.txt", + "ai_mail.local/ (directory)", + "ai_mail.local/inbox.json", + "ai_mail.local/sent.json", + "ai_mail.local/deleted.json", + "README.md", + "LOCAL.json", + "pytest.ini", + "dropbox/ (directory)" + ], + "files_skipped": [], + "files_renamed": 4, + "modules_migrated": 0 + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_plan_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_plan_config.json new file mode 100644 index 00000000..f6fd0426 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_plan_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "create_plan", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_plan_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_plan_data.json new file mode 100644 index 00000000..365b7e3f --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_plan_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "create_plan", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_plan_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_plan_log.json new file mode 100644 index 00000000..2afd38cf --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_plan_log.json @@ -0,0 +1,253 @@ +[ + { + "timestamp": "2025-11-15T09:37:46.979738", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "@flow", + "Auto-discovery refactor test" + ] + } + }, + { + "timestamp": "2025-11-15T09:38:24.862299", + "operation": "plan_created", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-15T09:38:24.863205", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "@flow", + "Test plan refactor" + ] + } + }, + { + "timestamp": "2025-11-15T09:38:26.931919", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "@flow", + "Final compatibility test" + ] + } + }, + { + "timestamp": "2025-11-15T09:38:30.155186", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "@flow", + "Test via interface" + ] + } + }, + { + "timestamp": "2025-11-15T09:38:41.921446", + "operation": "plan_created", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-15T09:38:41.922268", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "@flow", + "Backward compatibility test" + ] + } + }, + { + "timestamp": "2025-11-15T09:42:58.836638", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "@flow", + "Integration test - auto-discovery pattern" + ] + } + }, + { + "timestamp": "2025-11-15T11:07:17.529433", + "operation": "plan_created", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-15T11:07:17.530253", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "@flow", + "Test refactoring", + "default" + ] + } + }, + { + "timestamp": "2025-11-19T21:13:48.300879", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "--help" + ] + } + }, + { + "timestamp": "2025-11-21T09:04:40.926277", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "@flow", + "Test plan for learning the FLOW system" + ] + } + }, + { + "timestamp": "2025-11-21T09:04:41.676070", + "operation": "plan_created", + "data": { + "command": "create_plan", + "args": [ + "--help" + ] + } + }, + { + "timestamp": "2025-11-21T09:04:46.530846", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "@flow", + "Build user authentication system" + ] + } + }, + { + "timestamp": "2025-11-21T09:04:53.728833", + "operation": "plan_created", + "data": { + "command": "create_plan", + "args": [ + "--help" + ] + } + }, + { + "timestamp": "2025-11-21T09:05:17.956453", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "@flow", + "Add pomodoro timer for focused work sessions" + ] + } + }, + { + "timestamp": "2025-11-21T09:05:28.017494", + "operation": "plan_created", + "data": { + "command": "create_plan", + "args": [ + "--help" + ] + } + }, + { + "timestamp": "2025-11-21T09:05:31.800098", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "--help" + ] + } + }, + { + "timestamp": "2025-11-21T09:21:09.041425", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "--help" + ] + } + }, + { + "timestamp": "2025-11-21T09:43:04.266841", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "@flow", + "Test plan for EOFError fix verification" + ] + } + }, + { + "timestamp": "2025-11-21T10:55:57.741265", + "operation": "plan_created", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-21T10:55:57.742307", + "operation": "plan_created", + "data": { + "command": "create", + "args": [] + } + }, + { + "timestamp": "2025-11-21T11:32:09.461215", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "test", + "Test Plan After Cleanup" + ] + } + }, + { + "timestamp": "2025-11-21T11:32:18.654456", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "@flow", + "Test Plan After Cleanup" + ] + } + }, + { + "timestamp": "2025-11-21T11:35:58.325556", + "operation": "plan_created", + "data": { + "command": "create", + "args": [ + "@flow", + "Logging Test" + ] + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_thing_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_thing_config.json new file mode 100644 index 00000000..6f5921be --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_thing_config.json @@ -0,0 +1,10 @@ +{ + "module_name": "create_thing", + "version": "0.1.0", + "created": "2025-11-12", + "config": { + "enabled": true, + "log_level": "info", + "max_log_entries": 100 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_thing_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_thing_data.json new file mode 100644 index 00000000..5b6d8552 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_thing_data.json @@ -0,0 +1,9 @@ +{ + "created": "2025-11-12", + "last_updated": "2025-11-12", + "metrics": { + "operations_count": 0, + "success_count": 0, + "error_count": 0 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_thing_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_thing_log.json new file mode 100644 index 00000000..b6409ac3 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/create_thing_log.json @@ -0,0 +1,195 @@ +[ + { + "timestamp": "2025-11-12T18:21:57.655123", + "operation": "showroom_displayed", + "data": { + "command": "create", + "args": [ + "example_thing" + ] + } + }, + { + "timestamp": "2025-11-13T13:45:16.230327", + "operation": "showroom_displayed", + "data": { + "command": "create", + "args": [ + "example_thing" + ] + } + }, + { + "timestamp": "2025-11-13T13:45:38.069250", + "operation": "showroom_displayed", + "data": { + "command": "create", + "args": [ + "example_thing" + ] + } + }, + { + "timestamp": "2025-11-13T13:47:30.340582", + "operation": "showroom_displayed", + "data": { + "command": "create", + "args": [ + "example_thing" + ] + } + }, + { + "timestamp": "2025-11-13T13:56:00.974670", + "operation": "showroom_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:56:00.977895", + "operation": "showroom_displayed", + "data": { + "command": "create", + "args": [ + "example_thing" + ] + } + }, + { + "timestamp": "2025-11-13T13:57:09.777485", + "operation": "showroom_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:57:09.780883", + "operation": "showroom_displayed", + "data": { + "command": "create", + "args": [ + "example_thing" + ] + } + }, + { + "timestamp": "2025-11-13T20:57:51.472646", + "operation": "showroom_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T20:57:51.476388", + "operation": "showroom_displayed", + "data": { + "command": "create", + "args": [ + "example_thing" + ] + } + }, + { + "timestamp": "2025-11-13T20:58:43.349208", + "operation": "showroom_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T20:58:43.352415", + "operation": "showroom_displayed", + "data": { + "command": "create", + "args": [ + "example_thing" + ] + } + }, + { + "timestamp": "2025-11-13T21:02:42.532463", + "operation": "showroom_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:02:42.536315", + "operation": "showroom_displayed", + "data": { + "command": "create", + "args": [ + "example_thing" + ] + } + }, + { + "timestamp": "2025-11-13T21:02:43.648778", + "operation": "showroom_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:02:43.652737", + "operation": "showroom_displayed", + "data": { + "command": "create", + "args": [ + "example_thing" + ] + } + }, + { + "timestamp": "2025-11-13T21:05:11.107513", + "operation": "showroom_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:05:11.111326", + "operation": "showroom_displayed", + "data": { + "command": "create", + "args": [ + "example_thing" + ] + } + }, + { + "timestamp": "2025-11-13T21:29:29.593257", + "operation": "showroom_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:29.596510", + "operation": "showroom_displayed", + "data": { + "command": "create", + "args": [ + "example_thing" + ] + } + }, + { + "timestamp": "2025-11-13T21:29:33.044164", + "operation": "showroom_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:33.047930", + "operation": "showroom_displayed", + "data": { + "command": "create", + "args": [ + "example_thing" + ] + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/delete_plan_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/delete_plan_config.json new file mode 100644 index 00000000..b9f04de0 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/delete_plan_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "delete_plan", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/delete_plan_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/delete_plan_data.json new file mode 100644 index 00000000..aaaa94d7 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/delete_plan_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "delete_plan", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/delete_plan_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/delete_plan_log.json new file mode 100644 index 00000000..27c7d75f --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/delete_plan_log.json @@ -0,0 +1,400 @@ +[ + { + "timestamp": "2025-11-15T09:37:44.474899", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [] + } + }, + { + "timestamp": "2025-11-15T09:37:50.380855", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "6", + "--yes" + ] + } + }, + { + "timestamp": "2025-11-15T09:38:27.090929", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "7", + "--yes" + ] + } + }, + { + "timestamp": "2025-11-15T09:38:31.005806", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "8", + "--yes" + ] + } + }, + { + "timestamp": "2025-11-15T09:38:42.362311", + "operation": "plan_deleted", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-15T09:43:06.043552", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "11", + "--yes" + ] + } + }, + { + "timestamp": "2025-11-15T11:06:58.750352", + "operation": "plan_deleted", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-15T11:06:58.751089", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "12", + "--yes" + ] + } + }, + { + "timestamp": "2025-11-15T11:07:09.365912", + "operation": "plan_deleted", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-15T11:07:09.366727", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "13" + ] + } + }, + { + "timestamp": "2025-11-15T11:07:13.521687", + "operation": "plan_deleted", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-15T11:07:13.522518", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "13" + ] + } + }, + { + "timestamp": "2025-11-15T11:07:17.731565", + "operation": "plan_deleted", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-15T11:07:17.732432", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "9999", + "--yes" + ] + } + }, + { + "timestamp": "2025-11-15T11:07:21.944014", + "operation": "plan_deleted", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-15T11:07:21.945144", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [] + } + }, + { + "timestamp": "2025-11-21T09:05:07.490262", + "operation": "plan_deleted", + "data": { + "command": "delete_plan", + "args": [ + "--help" + ] + } + }, + { + "timestamp": "2025-11-21T09:05:09.862141", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "15" + ] + } + }, + { + "timestamp": "2025-11-21T09:05:12.177458", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "16", + "--yes" + ] + } + }, + { + "timestamp": "2025-11-21T09:05:14.857550", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "15", + "--yes" + ] + } + }, + { + "timestamp": "2025-11-21T09:21:13.238219", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "15" + ] + } + }, + { + "timestamp": "2025-11-21T09:21:21.069660", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "--help" + ] + } + }, + { + "timestamp": "2025-11-21T09:21:32.301561", + "operation": "plan_deleted", + "data": { + "command": "delete_plan", + "args": [ + "1" + ] + } + }, + { + "timestamp": "2025-11-21T09:21:36.610788", + "operation": "plan_deleted", + "data": { + "command": "delete_plan", + "args": [ + "1", + "--yes" + ] + } + }, + { + "timestamp": "2025-11-21T09:42:34.813012", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "17" + ] + } + }, + { + "timestamp": "2025-11-21T09:42:35.408310", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "17", + "--yes" + ] + } + }, + { + "timestamp": "2025-11-21T09:43:59.735092", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "18" + ] + } + }, + { + "timestamp": "2025-11-21T09:44:09.507475", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "18", + "--yes" + ] + } + }, + { + "timestamp": "2025-11-21T10:56:17.014948", + "operation": "plan_deleted", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-21T11:27:58.197273", + "operation": "plan_deleted", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-21T11:32:08.234592", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "9999" + ] + } + }, + { + "timestamp": "2025-11-21T11:32:15.404034", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "9999" + ] + } + }, + { + "timestamp": "2025-11-21T11:32:42.333317", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "9999" + ] + } + }, + { + "timestamp": "2025-11-21T11:32:50.061506", + "operation": "plan_deleted", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-21T11:32:50.062722", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "9999" + ] + } + }, + { + "timestamp": "2025-11-21T11:32:53.784377", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "9999" + ] + } + }, + { + "timestamp": "2025-11-21T11:32:57.696432", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "9999" + ] + } + }, + { + "timestamp": "2025-11-21T11:33:15.864461", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "0001" + ] + } + }, + { + "timestamp": "2025-11-21T11:33:28.205329", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "0020", + "--yes" + ] + } + }, + { + "timestamp": "2025-11-21T11:33:38.193820", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "0019" + ] + } + }, + { + "timestamp": "2025-11-21T11:33:42.082335", + "operation": "plan_deleted", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-21T11:33:42.083620", + "operation": "plan_deleted", + "data": { + "command": "delete", + "args": [ + "9999" + ] + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/diagnostics_audit_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/diagnostics_audit_config.json new file mode 100644 index 00000000..b8bfa029 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/diagnostics_audit_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "diagnostics_audit", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/diagnostics_audit_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/diagnostics_audit_data.json new file mode 100644 index 00000000..3fcafa5a --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/diagnostics_audit_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "diagnostics_audit", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/diagnostics_audit_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/diagnostics_audit_log.json new file mode 100644 index 00000000..abc620f9 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/diagnostics_audit_log.json @@ -0,0 +1,446 @@ +[ + { + "timestamp": "2025-11-28T22:53:51.147871", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": "SEED" + } + }, + { + "timestamp": "2025-11-28T22:53:54.829580", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 1, + "total_errors": 61 + } + }, + { + "timestamp": "2025-11-28T22:54:00.372874", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-28T22:54:34.901464", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": "SEED" + } + }, + { + "timestamp": "2025-11-28T22:54:38.888470", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 1, + "total_errors": 61 + } + }, + { + "timestamp": "2025-11-28T22:54:41.027795", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 18, + "total_errors": 183 + } + }, + { + "timestamp": "2025-11-28T22:54:59.692822", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": "SEED" + } + }, + { + "timestamp": "2025-11-28T22:55:03.084280", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 1, + "total_errors": 61 + } + }, + { + "timestamp": "2025-11-28T22:56:42.476664", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": "SEED" + } + }, + { + "timestamp": "2025-11-28T22:56:45.952771", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 1, + "total_errors": 61 + } + }, + { + "timestamp": "2025-11-28T22:56:52.480731", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-28T22:56:53.882372", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": "ALL" + } + }, + { + "timestamp": "2025-11-28T22:57:05.964054", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": "ALL" + } + }, + { + "timestamp": "2025-11-28T22:57:09.619266", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": "SEED" + } + }, + { + "timestamp": "2025-11-28T22:57:13.550526", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 1, + "total_errors": 61 + } + }, + { + "timestamp": "2025-11-28T22:57:38.930231", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-28T22:58:18.911194", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 18, + "total_errors": 150 + } + }, + { + "timestamp": "2025-11-28T22:58:23.157414", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-28T23:23:31.139715", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-28T23:27:07.875813", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-28T23:44:03.223774", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-28T23:45:49.957481", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-28T23:49:56.997576", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-28T23:54:38.851956", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-29T00:03:52.054089", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-29T00:04:33.656734", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 18, + "total_errors": 107 + } + }, + { + "timestamp": "2025-11-29T00:11:52.548880", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-29T00:12:34.712127", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 18, + "total_errors": 60 + } + }, + { + "timestamp": "2025-11-29T00:21:10.279594", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-29T00:21:52.646169", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 18, + "total_errors": 101 + } + }, + { + "timestamp": "2025-11-29T00:27:41.628886", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-29T00:28:23.719168", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 18, + "total_errors": 85 + } + }, + { + "timestamp": "2025-11-29T00:29:08.090409", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-29T00:29:48.406882", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 18, + "total_errors": 85 + } + }, + { + "timestamp": "2025-11-29T00:30:38.838980", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-29T00:31:19.137889", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 18, + "total_errors": 17 + } + }, + { + "timestamp": "2025-11-29T00:31:48.340145", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-29T00:32:26.907833", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 18, + "total_errors": 2 + } + }, + { + "timestamp": "2025-11-29T00:33:16.623979", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-29T00:33:57.784993", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 18, + "total_errors": 0 + } + }, + { + "timestamp": "2025-11-29T02:45:41.269673", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": "FLOW" + } + }, + { + "timestamp": "2025-11-29T02:45:44.092911", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 1, + "total_errors": 2 + } + }, + { + "timestamp": "2025-11-29T18:41:29.113012", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": "SEED" + } + }, + { + "timestamp": "2025-11-29T18:41:33.213156", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 1, + "total_errors": 0 + } + }, + { + "timestamp": "2025-11-29T19:03:54.591105", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-29T20:06:08.247503", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-29T20:06:46.981359", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 18, + "total_errors": 1 + } + }, + { + "timestamp": "2025-11-29T20:17:15.044463", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": "SEED" + } + }, + { + "timestamp": "2025-11-29T20:17:18.869341", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 1, + "total_errors": 1 + } + }, + { + "timestamp": "2025-11-29T20:22:03.136208", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": "SEED" + } + }, + { + "timestamp": "2025-11-29T20:22:06.816410", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 1, + "total_errors": 0 + } + }, + { + "timestamp": "2025-11-29T20:29:12.107297", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": "SEED" + } + }, + { + "timestamp": "2025-11-29T20:29:16.033667", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 1, + "total_errors": 0 + } + }, + { + "timestamp": "2025-11-29T20:29:39.581988", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": "SEED" + } + }, + { + "timestamp": "2025-11-29T20:29:43.359180", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 1, + "total_errors": 0 + } + }, + { + "timestamp": "2025-11-29T20:30:15.237490", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": "SEED" + } + }, + { + "timestamp": "2025-11-29T20:30:18.978466", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 1, + "total_errors": 0 + } + }, + { + "timestamp": "2025-11-29T21:28:28.303737", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2025-11-29T21:29:08.976292", + "operation": "diagnostics_audit_completed", + "data": { + "branches_scanned": 18, + "total_errors": 1 + } + }, + { + "timestamp": "2026-01-30T22:42:42.929535", + "operation": "diagnostics_audit_started", + "data": { + "specific_branch": null + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_check_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_check_config.json new file mode 100644 index 00000000..0dbfb183 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_check_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "documentation_check", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_check_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_check_data.json new file mode 100644 index 00000000..86a1ecc7 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_check_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "documentation_check", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_check_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_check_log.json new file mode 100644 index 00000000..e0001cf4 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_check_log.json @@ -0,0 +1,898 @@ +[ + { + "timestamp": "2025-11-16T17:43:57.759958", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.762528", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-16T17:43:57.805297", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.808171", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-16T17:43:57.848841", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.851246", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-16T17:43:57.891477", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.894271", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:43:57.935196", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.937658", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:43:57.980846", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.983763", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-16T17:43:58.028147", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.031363", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-16T17:43:58.080727", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.083852", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:51:55.180444", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.183283", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:51:55.231403", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.234324", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.279570", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.281997", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.323267", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.326036", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:51:55.370071", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.373117", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:51:55.421382", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.424604", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:51:55.466098", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.469105", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.510643", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.513457", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.557738", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.560358", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:51:55.602250", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.604993", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:51:55.645288", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.647797", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:01.554468", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.557286", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:01.599746", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.602576", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.641879", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.644157", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.683605", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.686461", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:01.730259", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.733227", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:01.774464", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.776837", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:01.818686", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.821964", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.866053", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.869038", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.917638", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.920545", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:01.970478", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.973270", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:02.017026", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:02.019683", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:07.575791", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.578552", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:07.619616", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.622514", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.662909", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.665253", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.704031", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.706412", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:07.747745", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.750466", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:07.791197", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.793616", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:07.852762", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.855744", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.897854", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.900849", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.946396", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.948950", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:07.993954", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.996828", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:08.039098", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:08.041632", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T20:38:09.519870", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py" + } + }, + { + "timestamp": "2025-11-18T20:38:09.523353", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T20:38:19.570752", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py" + } + }, + { + "timestamp": "2025-11-18T20:38:19.575082", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T20:38:29.161385", + "operation": "documentation_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T20:38:29.164381", + "operation": "documentation_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-21T11:54:28.508415", + "operation": "documentation_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:54:28.512246", + "operation": "documentation_check_completed", + "data": { + "module_path": "apps/modules/imports_standard.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-21T11:57:16.493768", + "operation": "documentation_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:16.497205", + "operation": "documentation_check_completed", + "data": { + "module_path": "apps/modules/imports_standard.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-21T11:57:24.350063", + "operation": "documentation_check_started", + "data": { + "module_path": "apps/modules/documentation_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:24.353494", + "operation": "documentation_check_completed", + "data": { + "module_path": "apps/modules/documentation_standard.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-21T11:59:40.712288", + "operation": "documentation_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:40.906386", + "operation": "documentation_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:49.874219", + "operation": "documentation_check_started", + "data": { + "module_path": "apps/modules/standards_audit.py" + } + }, + { + "timestamp": "2025-11-21T11:59:49.877446", + "operation": "documentation_check_completed", + "data": { + "module_path": "apps/modules/standards_audit.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-21T11:59:51.012504", + "operation": "documentation_check_started", + "data": { + "module_path": "apps/modules/standards_checklist.py" + } + }, + { + "timestamp": "2025-11-21T11:59:51.016190", + "operation": "documentation_check_completed", + "data": { + "module_path": "apps/modules/standards_checklist.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_standard_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_standard_config.json new file mode 100644 index 00000000..4f364c44 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_standard_config.json @@ -0,0 +1,10 @@ +{ + "module_name": "documentation_standard", + "version": "0.1.0", + "created": "2025-11-12", + "config": { + "enabled": true, + "log_level": "info", + "max_log_entries": 100 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_standard_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_standard_data.json new file mode 100644 index 00000000..5b6d8552 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_standard_data.json @@ -0,0 +1,9 @@ +{ + "created": "2025-11-12", + "last_updated": "2025-11-12", + "metrics": { + "operations_count": 0, + "success_count": 0, + "error_count": 0 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_standard_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_standard_log.json new file mode 100644 index 00000000..ed5ee5c4 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/documentation_standard_log.json @@ -0,0 +1,296 @@ +[ + { + "timestamp": "2025-11-12T19:39:20.813781", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-12T19:44:05.946590", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:28:41.193109", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:28:49.162958", + "operation": "standard_displayed", + "data": { + "command": "documentation" + } + }, + { + "timestamp": "2025-11-13T12:29:03.840826", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:29:12.495271", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:29:19.250064", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:29:28.739870", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:29:58.436689", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:52:47.351140", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:34:31.095814", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:38:15.708714", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:38:39.097935", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:45:18.367963", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:47:27.226362", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T20:54:20.249174", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T20:55:13.754193", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T20:56:02.254398", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T20:58:38.480458", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T20:58:45.087543", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T20:59:03.652835", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T20:59:26.761306", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:08:22.485421", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:24:58.782007", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:25:31.839514", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:25:54.885484", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:26:07.579356", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:28:14.377168", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:28:24.607444", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:01.619345", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:05.057890", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:07.076336", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-15T10:27:00.985638", + "operation": "standard_displayed", + "data": { + "command": "documentation" + } + }, + { + "timestamp": "2025-11-16T13:35:32.073967", + "operation": "standard_displayed", + "data": { + "command": "documentation" + } + }, + { + "timestamp": "2025-11-16T13:37:03.231793", + "operation": "standard_displayed", + "data": { + "command": "documentation" + } + }, + { + "timestamp": "2025-11-16T14:20:18.291396", + "operation": "standard_displayed", + "data": { + "command": "documentation" + } + }, + { + "timestamp": "2025-11-16T15:11:31.199592", + "operation": "standard_displayed", + "data": { + "command": "documentation" + } + }, + { + "timestamp": "2025-11-16T15:24:02.626341", + "operation": "standard_displayed", + "data": { + "command": "documentation" + } + }, + { + "timestamp": "2025-11-16T15:24:59.853773", + "operation": "standard_displayed", + "data": { + "command": "documentation" + } + }, + { + "timestamp": "2025-11-29T19:02:34.861287", + "operation": "standard_displayed", + "data": { + "command": "documentation" + } + }, + { + "timestamp": "2025-11-29T20:29:27.539051", + "operation": "standard_displayed", + "data": { + "command": "documentation" + } + }, + { + "timestamp": "2025-11-29T21:28:36.056650", + "operation": "standard_displayed", + "data": { + "command": "documentation" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_config.json new file mode 100644 index 00000000..ef522f01 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "drone", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_data.json new file mode 100644 index 00000000..2be4a32f --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "drone", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_loader_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_loader_config.json new file mode 100644 index 00000000..69bb423c --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_loader_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "drone_loader", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_loader_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_loader_data.json new file mode 100644 index 00000000..131f153e --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_loader_data.json @@ -0,0 +1,18 @@ +{ + "module_name": "drone_loader", + "created": "2025-11-13", + "last_updated": "2025-11-23", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0, + "statistics": { + "total_commands_loaded": 0, + "source_files_processed": 17, + "last_build": "2025-11-23T09:10:39.087779+00:00", + "validation_enabled": true, + "build_duration_ms": 0 + }, + "runtime_state": { + "last_update": "2025-11-23T01:10:39.087800" + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_loader_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_loader_log.json new file mode 100644 index 00000000..af4930b4 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_loader_log.json @@ -0,0 +1,20 @@ +[ + { + "timestamp": "2025-11-23T01:10:39.051893", + "operation": "tree_building_started", + "data": { + "success": true, + "details": "Building command tree", + "error": "" + } + }, + { + "timestamp": "2025-11-23T01:10:39.088904", + "operation": "tree_building_completed", + "data": { + "success": true, + "details": "Built command tree with 0 commands", + "error": "" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_log.json new file mode 100644 index 00000000..0d9dd898 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/drone_log.json @@ -0,0 +1,917 @@ +[ + { + "timestamp": "2025-11-22T22:00:58.304996", + "operation": "drone_command_attempted", + "data": { + "command": "list", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-22T22:06:49.261288", + "operation": "drone_activated_command", + "data": { + "drone_command": "seed", + "system": "seed", + "id": 31 + } + }, + { + "timestamp": "2025-11-22T22:13:15.225626", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "help" + ] + } + }, + { + "timestamp": "2025-11-22T22:30:40.338112", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "sync-registry" + ] + } + }, + { + "timestamp": "2025-11-22T22:33:58.887234", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "help" + ] + } + }, + { + "timestamp": "2025-11-22T22:34:45.832376", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "update-branch", + "/home/aipass/.vscode", + "--dry-run" + ] + } + }, + { + "timestamp": "2025-11-22T22:35:13.963159", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "update-branch", + "/home/aipass/.vscode", + "--dry-run" + ] + } + }, + { + "timestamp": "2025-11-22T22:37:23.819534", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "regenerate-template-registry" + ] + } + }, + { + "timestamp": "2025-11-22T22:37:32.889086", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "update-branch", + "/home/aipass/.vscode", + "--dry-run" + ] + } + }, + { + "timestamp": "2025-11-22T22:37:43.813336", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "update-branch", + "/home/aipass/.vscode", + "--dry-run" + ] + } + }, + { + "timestamp": "2025-11-22T22:49:50.849894", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "regenerate-template-registry" + ] + } + }, + { + "timestamp": "2025-11-22T22:50:24.193729", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "update-branch", + "/home/aipass/.vscode", + "--dry-run" + ] + } + }, + { + "timestamp": "2025-11-22T22:50:54.392901", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "update-branch", + "/home/aipass/.vscode", + "--dry-run" + ] + } + }, + { + "timestamp": "2025-11-22T22:54:10.773179", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "help" + ] + } + }, + { + "timestamp": "2025-11-22T23:12:04.595073", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "regenerate-template-registry" + ] + } + }, + { + "timestamp": "2025-11-22T23:13:40.490843", + "operation": "drone_activated_command", + "data": { + "drone_command": "backup", + "system": "backup_system", + "id": 7 + } + }, + { + "timestamp": "2025-11-22T23:14:32.758427", + "operation": "drone_activated_command", + "data": { + "drone_command": "backup", + "system": "backup_system", + "id": 8 + } + }, + { + "timestamp": "2025-11-22T23:17:10.603055", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "regenerate-template-registry" + ] + } + }, + { + "timestamp": "2025-11-22T23:18:49.289125", + "operation": "drone_activated_command", + "data": { + "drone_command": "backup", + "system": "backup_system", + "id": 8 + } + }, + { + "timestamp": "2025-11-22T23:27:00.367186", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "update-branch", + "/home/aipass/.vscode" + ] + } + }, + { + "timestamp": "2025-11-22T23:27:14.385616", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "regenerate-template-registry" + ] + } + }, + { + "timestamp": "2025-11-22T23:28:01.851777", + "operation": "drone_at_command", + "data": { + "target": "@cortex", + "args": [ + "update-branch", + "/home/aipass/.vscode" + ] + } + }, + { + "timestamp": "2025-11-22T23:38:38.867631", + "operation": "drone_activated_command", + "data": { + "drone_command": "seed", + "system": "seed", + "id": 31 + } + }, + { + "timestamp": "2025-11-22T23:43:51.878314", + "operation": "drone_activated_command", + "data": { + "drone_command": "seed", + "system": "seed", + "id": 31 + } + }, + { + "timestamp": "2025-11-22T23:51:14.690690", + "operation": "drone_at_command", + "data": { + "target": "@ai_mail", + "args": [ + "send", + "@backup_system", + "Cleanup Script Disabled - Needs Fix", + "Hi Backup,\n\nDuring Session 27, discovered that file_cleanup.py was deleting template directories from cortex/templates/branch_template despite gitignore exceptions.\n\n**What happened:**\n- Cleanup script checks if directories are in gitignore OR don't exist in source\n- Then recursively deletes them\n- Doesn't respect path-specific exceptions like:\n !**/aipass_core/cortex/templates/branch_template/.archive\n !**/aipass_core/cortex/templates/branch_template/.backup\n\n**Directories deleted:**\n- .archive/, .backup/, tools/, dropbox/, logs/, {{BRANCH}}_json/\n\n**Current state:**\n- file_cleanup.py renamed to file_cleanup.py.disabled\n- Call in backup_core.py commented out (lines 402-407)\n- Template directories restored with .gitkeep files\n\n**Fix needed:**\n- Update should_ignore() logic to check for gitignore exceptions\n- Test against template paths before re-enabling\n- Cleanup script is safe to disable - just won't delete old backup files\n\nLet me know if you need details on the logic or want to pair on the fix.\n\n--Cortex" + ] + } + }, + { + "timestamp": "2025-11-23T00:02:01.405166", + "operation": "drone_at_command", + "data": { + "target": "@seed", + "args": [ + "--help" + ] + } + }, + { + "timestamp": "2025-11-23T00:02:39.774256", + "operation": "drone_command_attempted", + "data": { + "command": "seed", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:02:44.187410", + "operation": "drone_at_command", + "data": { + "target": "@seed", + "args": [ + "naming" + ] + } + }, + { + "timestamp": "2025-11-23T00:13:24.414817", + "operation": "drone_help_displayed", + "data": { + "trigger": "--help" + } + }, + { + "timestamp": "2025-11-23T00:14:01.072966", + "operation": "drone_command_attempted", + "data": { + "command": "systems", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:14:09.061999", + "operation": "drone_command_attempted", + "data": { + "command": "scan", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:14:24.258308", + "operation": "drone_command_attempted", + "data": { + "command": "activate", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:17:19.831072", + "operation": "drone_command_attempted", + "data": { + "command": "scan", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:17:31.882134", + "operation": "drone_command_attempted", + "data": { + "command": "scan", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:19:34.879507", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T00:19:59.075426", + "operation": "drone_command_attempted", + "data": { + "command": "vscode", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:21:05.007567", + "operation": "drone_command_attempted", + "data": { + "command": "vscode", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:22:48.990195", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T00:23:15.810422", + "operation": "drone_command_attempted", + "data": { + "command": "systems", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:23:32.017659", + "operation": "drone_command_attempted", + "data": { + "command": "list", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:24:36.066399", + "operation": "drone_command_attempted", + "data": { + "command": "vscode", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:24:40.472440", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T00:24:44.203372", + "operation": "drone_command_attempted", + "data": { + "command": "vscode", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:24:53.926769", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T00:25:20.872791", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T00:25:25.053610", + "operation": "drone_command_attempted", + "data": { + "command": "vscode", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:25:40.735104", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 76 + } + }, + { + "timestamp": "2025-11-23T00:27:06.906983", + "operation": "drone_command_attempted", + "data": { + "command": "edit", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:28:02.941716", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 77 + } + }, + { + "timestamp": "2025-11-23T00:29:40.522518", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T00:30:05.327052", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 77 + } + }, + { + "timestamp": "2025-11-23T00:30:15.073448", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T00:32:45.495157", + "operation": "drone_command_attempted", + "data": { + "command": "scan", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:33:14.287170", + "operation": "drone_command_attempted", + "data": { + "command": "scan", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:36:40.107028", + "operation": "drone_at_command", + "data": { + "target": "@seed", + "args": [ + "help" + ] + } + }, + { + "timestamp": "2025-11-23T00:36:58.952049", + "operation": "drone_command_attempted", + "data": { + "command": "scan", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:37:31.707406", + "operation": "drone_at_command", + "data": { + "target": "@.vscode", + "args": [] + } + }, + { + "timestamp": "2025-11-23T00:37:39.265070", + "operation": "drone_at_command", + "data": { + "target": "@.vscode", + "args": [ + "--help" + ] + } + }, + { + "timestamp": "2025-11-23T00:38:04.206047", + "operation": "drone_at_command", + "data": { + "target": "@.vscode", + "args": [ + "--help" + ] + } + }, + { + "timestamp": "2025-11-23T00:38:09.859976", + "operation": "drone_at_command", + "data": { + "target": "@.vscode", + "args": [] + } + }, + { + "timestamp": "2025-11-23T00:43:36.341879", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T00:43:40.773632", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 77 + } + }, + { + "timestamp": "2025-11-23T00:43:44.487043", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T00:44:23.585373", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T00:44:31.854065", + "operation": "drone_command_attempted", + "data": { + "command": "seed", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:44:32.641375", + "operation": "drone_command_attempted", + "data": { + "command": "seed", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:44:33.342231", + "operation": "drone_activated_command", + "data": { + "drone_command": "seed", + "system": "seed", + "id": 32 + } + }, + { + "timestamp": "2025-11-23T00:44:51.140396", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T00:44:56.891881", + "operation": "drone_at_command", + "data": { + "target": "@seed", + "args": [ + "architecture" + ] + } + }, + { + "timestamp": "2025-11-23T00:45:25.550384", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T00:45:40.645939", + "operation": "drone_at_command", + "data": { + "target": "@seed", + "args": [ + "help" + ] + } + }, + { + "timestamp": "2025-11-23T00:45:41.696481", + "operation": "drone_at_command", + "data": { + "target": "@seed", + "args": [ + "help" + ] + } + }, + { + "timestamp": "2025-11-23T00:45:45.066670", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T00:49:30.547288", + "operation": "drone_at_command", + "data": { + "target": "@seed", + "args": [ + "json_structure" + ] + } + }, + { + "timestamp": "2025-11-23T00:49:43.082426", + "operation": "drone_command_attempted", + "data": { + "command": "scan", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T00:52:11.171598", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T00:53:27.810138", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T00:54:39.194672", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T00:58:40.014907", + "operation": "drone_activated_command", + "data": { + "drone_command": "seed", + "system": "seed", + "id": 31 + } + }, + { + "timestamp": "2025-11-23T01:00:08.596281", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T01:00:18.358897", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T01:01:09.194241", + "operation": "drone_command_attempted", + "data": { + "command": "list", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T01:01:32.184997", + "operation": "drone_activated_command", + "data": { + "drone_command": "cortex", + "system": "cortex", + "id": 61 + } + }, + { + "timestamp": "2025-11-23T01:01:42.565533", + "operation": "drone_activated_command", + "data": { + "drone_command": "seed", + "system": "seed", + "id": 31 + } + }, + { + "timestamp": "2025-11-23T01:04:16.112363", + "operation": "drone_activated_command", + "data": { + "drone_command": "dev", + "system": "devpulse", + "id": 13 + } + }, + { + "timestamp": "2025-11-23T01:05:42.700439", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T01:06:12.453658", + "operation": "drone_activated_command", + "data": { + "drone_command": "vscode", + "system": ".vscode", + "id": 78 + } + }, + { + "timestamp": "2025-11-23T01:09:30.119383", + "operation": "drone_at_command", + "data": { + "target": "@flow", + "args": [ + "help" + ] + } + }, + { + "timestamp": "2025-11-23T01:10:04.933742", + "operation": "drone_command_attempted", + "data": { + "command": "list", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T01:10:17.250806", + "operation": "drone_command_attempted", + "data": { + "command": "list", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T01:10:39.356533", + "operation": "drone_activated_command", + "data": { + "drone_command": "prax", + "system": "prax", + "id": 23 + } + }, + { + "timestamp": "2025-11-23T01:10:52.911729", + "operation": "drone_activated_command", + "data": { + "drone_command": "prax", + "system": "prax", + "id": 23 + } + }, + { + "timestamp": "2025-11-23T01:11:41.888801", + "operation": "drone_activated_command", + "data": { + "drone_command": "prax", + "system": "prax", + "id": 23 + } + }, + { + "timestamp": "2025-11-23T01:13:33.015832", + "operation": "drone_activated_command", + "data": { + "drone_command": "prax", + "system": "prax", + "id": 23 + } + }, + { + "timestamp": "2025-11-23T01:14:16.084557", + "operation": "drone_activated_command", + "data": { + "drone_command": "prax", + "system": "prax", + "id": 23 + } + }, + { + "timestamp": "2025-11-23T01:14:47.195611", + "operation": "drone_command_attempted", + "data": { + "command": "prax", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T01:14:54.649678", + "operation": "drone_command_attempted", + "data": { + "command": "prax", + "modules_discovered": 3 + } + }, + { + "timestamp": "2025-11-23T01:15:15.596397", + "operation": "drone_activated_command", + "data": { + "drone_command": "prax", + "system": "prax", + "id": 26 + } + }, + { + "timestamp": "2025-11-23T01:25:48.097197", + "operation": "drone_at_command", + "data": { + "target": "@seed", + "args": [ + "--help" + ] + } + }, + { + "timestamp": "2025-11-23T01:25:57.437537", + "operation": "drone_command_attempted", + "data": { + "command": "seed", + "modules_discovered": 3 + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_check_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_check_config.json new file mode 100644 index 00000000..266923d7 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_check_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "error_handling_check", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_check_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_check_data.json new file mode 100644 index 00000000..409a07dd --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_check_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "error_handling_check", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_check_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_check_log.json new file mode 100644 index 00000000..9ce8f4eb --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_check_log.json @@ -0,0 +1,902 @@ +[ + { + "timestamp": "2025-11-16T17:37:01.202027", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:37:01.205087", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:38:21.083832", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:38:21.087194", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-16T17:39:27.202801", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/modules/architecture_standard.py" + } + }, + { + "timestamp": "2025-11-16T17:39:27.205717", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/modules/architecture_standard.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:43:57.634961", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.637613", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.681621", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.684271", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.726480", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.729065", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.775019", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.777605", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.819542", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.821977", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.862493", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.864966", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.905708", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.908223", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.948832", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.951261", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.997034", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.999593", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-16T17:43:58.042923", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.046399", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:58.098931", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.101853", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.199664", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.202222", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.246896", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.249549", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.291810", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.294223", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.339078", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.342070", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.384708", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.387106", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.436232", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.438806", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.481870", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.484319", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.524384", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.526858", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.573227", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.575701", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:51:55.615016", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.617391", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.663659", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.666336", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.570225", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.572695", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.613949", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.616360", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.653101", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.655266", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.699550", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.702082", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.744466", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.747007", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.788431", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.790958", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.835196", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.837983", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.882386", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.885372", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.934652", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.937813", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:01.983350", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.985758", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:02.036120", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:02.038616", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.590911", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.593366", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.633951", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.636380", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.675002", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.677358", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.718181", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.720656", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.761778", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.764199", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.807386", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.811631", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.867674", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.870112", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.912083", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.914496", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.962869", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.965402", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:08.007708", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:08.010134", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:08.058026", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:08.060609", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T20:38:09.548272", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py" + } + }, + { + "timestamp": "2025-11-18T20:38:09.551136", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T20:38:19.594992", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py" + } + }, + { + "timestamp": "2025-11-18T20:38:19.599226", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-18T20:38:29.176549", + "operation": "error_handling_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T20:38:29.179027", + "operation": "error_handling_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_standard_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_standard_config.json new file mode 100644 index 00000000..6c8edae0 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_standard_config.json @@ -0,0 +1,10 @@ +{ + "module_name": "error_handling_standard", + "version": "0.1.0", + "created": "2025-11-12", + "config": { + "enabled": true, + "log_level": "info", + "max_log_entries": 100 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_standard_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_standard_data.json new file mode 100644 index 00000000..5b6d8552 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_standard_data.json @@ -0,0 +1,9 @@ +{ + "created": "2025-11-12", + "last_updated": "2025-11-12", + "metrics": { + "operations_count": 0, + "success_count": 0, + "error_count": 0 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_standard_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_standard_log.json new file mode 100644 index 00000000..04b2cd7c --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/error_handling_standard_log.json @@ -0,0 +1,261 @@ +[ + { + "timestamp": "2025-11-12T19:41:13.476535", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-12T19:44:06.035668", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:27:41.733945", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:28:01.922763", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:35:04.538266", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:45:19.087642", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:47:24.777267", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T16:40:09.853215", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-13T20:53:44.697740", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:05:52.786304", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:28:59.003824", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:01.547461", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:04.631270", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:20.183492", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:30:04.657556", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-15T09:26:49.276948", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-15T09:34:01.031318", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-15T10:27:00.317694", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-15T10:53:52.396650", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-15T12:54:26.450221", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-16T00:30:01.289639", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-16T00:34:57.742379", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-16T13:35:30.261895", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-16T14:17:53.996391", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-16T15:11:19.948832", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-23T00:46:00.930608", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-23T01:26:01.758894", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-24T22:09:01.067214", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-25T20:09:40.813206", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-26T22:25:12.298881", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-29T18:41:58.035354", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-29T19:02:33.348558", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-29T20:29:26.491174", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-29T21:28:34.335961", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2025-11-29T23:11:34.140992", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2026-01-31T17:06:21.815136", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + }, + { + "timestamp": "2026-02-27T16:51:11.059160", + "operation": "standard_displayed", + "data": { + "command": "error_handling" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_check_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_check_config.json new file mode 100644 index 00000000..c9ec22f7 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_check_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "handlers_check", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_check_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_check_data.json new file mode 100644 index 00000000..2c5627b8 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_check_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "handlers_check", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_check_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_check_log.json new file mode 100644 index 00000000..eeee4568 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_check_log.json @@ -0,0 +1,730 @@ +[ + { + "timestamp": "2025-11-16T17:26:43.772188", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-16T17:26:43.817557", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:26:43.868869", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-16T17:26:43.914043", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-16T17:28:31.339533", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-16T17:28:31.386427", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-16T17:28:31.431087", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-16T17:28:31.474187", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-16T17:28:31.519824", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-16T17:28:31.562402", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-16T17:28:31.608761", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-16T17:28:31.652045", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-16T17:28:31.697931", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:28:31.753573", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-16T17:28:31.798961", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-16T17:28:40.844074", + "operation": "handlers_check_started", + "data": { + "module_path": "apps/cortex.py" + } + }, + { + "timestamp": "2025-11-16T17:28:41.662613", + "operation": "handlers_check_started", + "data": { + "module_path": "apps/modules/create_branch.py" + } + }, + { + "timestamp": "2025-11-16T17:28:42.501279", + "operation": "handlers_check_started", + "data": { + "module_path": "apps/modules/update_branch.py" + } + }, + { + "timestamp": "2025-11-16T17:28:44.330347", + "operation": "handlers_check_started", + "data": { + "module_path": "apps/modules/delete_branch.py" + } + }, + { + "timestamp": "2025-11-16T17:28:46.090605", + "operation": "handlers_check_started", + "data": { + "module_path": "apps/modules/regenerate_template_registry.py" + } + }, + { + "timestamp": "2025-11-16T17:28:47.131881", + "operation": "handlers_check_started", + "data": { + "module_path": "apps/handlers/json/handler.py" + } + }, + { + "timestamp": "2025-11-16T17:28:47.134596", + "operation": "handlers_check_completed", + "data": { + "module_path": "apps/handlers/json/handler.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:28:48.390776", + "operation": "handlers_check_started", + "data": { + "module_path": "apps/handlers/branch/file_ops.py" + } + }, + { + "timestamp": "2025-11-16T17:28:48.394085", + "operation": "handlers_check_completed", + "data": { + "module_path": "apps/handlers/branch/file_ops.py", + "score": 50, + "passed": false, + "total_checks": 2, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-16T17:28:49.334349", + "operation": "handlers_check_started", + "data": { + "module_path": "apps/handlers/error/logger.py" + } + }, + { + "timestamp": "2025-11-16T17:28:49.337262", + "operation": "handlers_check_completed", + "data": { + "module_path": "apps/handlers/error/logger.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:28:50.199292", + "operation": "handlers_check_started", + "data": { + "module_path": "apps/handlers/registry/ignore.py" + } + }, + { + "timestamp": "2025-11-16T17:28:50.202114", + "operation": "handlers_check_completed", + "data": { + "module_path": "apps/handlers/registry/ignore.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:30:19.396810", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:32:29.766039", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:32:32.029381", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:32:36.165247", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:32:40.777921", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:33:04.161284", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/modules/architecture_standard.py" + } + }, + { + "timestamp": "2025-11-16T17:35:07.004015", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-16T17:35:08.796285", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/handlers/json/handler.py" + } + }, + { + "timestamp": "2025-11-16T17:35:08.799536", + "operation": "handlers_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/handlers/json/handler.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:35:10.601573", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py" + } + }, + { + "timestamp": "2025-11-16T17:35:10.604807", + "operation": "handlers_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py", + "score": 50, + "passed": false, + "total_checks": 2, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-16T17:36:50.585046", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:36:51.396860", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:37:00.254923", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:37:01.164210", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:38:21.044706", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:39:27.176372", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/modules/architecture_standard.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.613095", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.661529", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.708126", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.754871", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.801022", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.844118", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.887153", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.930477", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.973994", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.023462", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.072885", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.173174", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.226334", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.274362", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.318141", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.365564", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.414467", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.461822", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.506348", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.550417", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.598070", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.639836", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.548797", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.595315", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.637382", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.677899", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.725932", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.769788", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.813643", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.861555", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.909195", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.966246", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:02.010961", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.570896", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.615373", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.658358", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.699364", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.743575", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.786366", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.846273", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.893017", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.938591", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.988885", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:08.033400", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T20:38:09.505813", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py" + } + }, + { + "timestamp": "2025-11-18T20:38:19.557088", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py" + } + }, + { + "timestamp": "2025-11-18T20:38:19.559714", + "operation": "handlers_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py", + "score": 100, + "passed": true, + "total_checks": 2, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T20:38:29.156452", + "operation": "handlers_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-21T11:54:28.495569", + "operation": "handlers_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:16.482940", + "operation": "handlers_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:24.339235", + "operation": "handlers_check_started", + "data": { + "module_path": "apps/modules/documentation_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:59:40.704720", + "operation": "handlers_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:40.896634", + "operation": "handlers_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:49.861847", + "operation": "handlers_check_started", + "data": { + "module_path": "apps/modules/standards_audit.py" + } + }, + { + "timestamp": "2025-11-21T11:59:50.999187", + "operation": "handlers_check_started", + "data": { + "module_path": "apps/modules/standards_checklist.py" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_standard_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_standard_config.json new file mode 100644 index 00000000..01d245ea --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_standard_config.json @@ -0,0 +1,10 @@ +{ + "module_name": "handlers_standard", + "version": "0.1.0", + "created": "2025-11-12", + "config": { + "enabled": true, + "log_level": "info", + "max_log_entries": 100 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_standard_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_standard_data.json new file mode 100644 index 00000000..5b6d8552 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_standard_data.json @@ -0,0 +1,9 @@ +{ + "created": "2025-11-12", + "last_updated": "2025-11-12", + "metrics": { + "operations_count": 0, + "success_count": 0, + "error_count": 0 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_standard_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_standard_log.json new file mode 100644 index 00000000..0575b2b0 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/handlers_standard_log.json @@ -0,0 +1,373 @@ +[ + { + "timestamp": "2025-11-12T19:35:25.658319", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-12T19:44:06.130628", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:27:39.626338", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:27:40.974423", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:27:47.236706", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:28:13.700252", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:28:34.071316", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:36:58.498498", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:39:06.317754", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:45:19.343706", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:47:22.127847", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:57:23.456448", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T15:30:06.581423", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-13T16:08:17.495686", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-13T16:08:17.829242", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-13T16:15:15.995386", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-13T16:15:16.997060", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-13T17:54:13.469123", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-13T20:58:49.456272", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T20:59:10.785395", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:02:48.500658", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:08:16.252164", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:28:59.874935", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:02.803922", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:16.300187", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-15T09:26:43.192572", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-15T09:33:54.509460", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-15T10:09:11.184130", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-15T10:17:06.027457", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-15T10:17:06.341026", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-15T10:17:08.183546", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-15T10:26:51.008705", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-15T10:34:34.005404", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-15T10:53:48.091107", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-15T14:05:55.533133", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-16T00:29:43.495184", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-16T12:38:45.193164", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-16T13:30:17.084724", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-16T13:37:01.196337", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-16T15:11:17.953956", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-16T15:28:40.928614", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-25T20:09:48.866167", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-29T02:39:42.073547", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-29T11:58:44.249835", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-29T12:02:58.795400", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-29T17:14:40.651014", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-29T18:41:35.714357", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-29T19:02:25.829177", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-29T19:04:36.021027", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-29T20:29:19.156355", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-29T21:28:36.033852", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-29T21:28:48.042223", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + }, + { + "timestamp": "2025-11-29T23:11:31.889806", + "operation": "standard_displayed", + "data": { + "command": "handlers" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_check_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_check_config.json new file mode 100644 index 00000000..56704907 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_check_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "imports_check", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_check_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_check_data.json new file mode 100644 index 00000000..4241bf61 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_check_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "imports_check", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_check_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_check_log.json new file mode 100644 index 00000000..4e65f1de --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_check_log.json @@ -0,0 +1,898 @@ +[ + { + "timestamp": "2025-11-16T17:43:57.732149", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.735497", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-16T17:43:57.780612", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.783344", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-16T17:43:57.824568", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.827093", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-16T17:43:57.867588", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.870051", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-16T17:43:57.910900", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.913459", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-16T17:43:57.953867", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.956424", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-16T17:43:58.002278", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.005139", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:43:58.049343", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.052409", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:51:55.145327", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.148290", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:51:55.205040", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.207832", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.252146", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.255135", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:51:55.296781", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.300138", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:51:55.344772", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.347548", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:51:55.389903", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.392508", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:51:55.441495", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.444565", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:51:55.486835", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.489346", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:51:55.529436", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.532202", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:51:55.578275", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.581114", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.619899", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.622445", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:01.524430", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.527453", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:01.575223", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.578075", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.618859", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.621241", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:01.657560", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.660226", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:01.704630", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.707112", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:01.749736", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.752262", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:01.793586", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.796150", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:01.840574", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.843118", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:01.887985", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.890511", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:01.941277", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.944438", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.988229", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.990989", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:07.550794", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.553298", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:07.595922", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.598434", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.638904", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.641673", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:07.679859", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.682605", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:07.723164", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.725935", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:07.766728", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.769269", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:07.815922", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.820243", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:07.872649", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.875180", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:07.917128", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.920118", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T17:52:07.968102", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.970948", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 75, + "passed": true, + "total_checks": 4, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:08.012794", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:08.015262", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T20:38:09.467896", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py" + } + }, + { + "timestamp": "2025-11-18T20:38:09.471055", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T20:38:19.523595", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py" + } + }, + { + "timestamp": "2025-11-18T20:38:19.526430", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py", + "score": 100, + "passed": true, + "total_checks": 5, + "passed_checks": 5 + } + }, + { + "timestamp": "2025-11-18T20:38:29.133416", + "operation": "imports_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T20:38:29.136273", + "operation": "imports_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-21T11:54:28.458399", + "operation": "imports_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:54:28.461133", + "operation": "imports_check_completed", + "data": { + "module_path": "apps/modules/imports_standard.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-21T11:57:16.452228", + "operation": "imports_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:16.455214", + "operation": "imports_check_completed", + "data": { + "module_path": "apps/modules/imports_standard.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-21T11:57:24.308793", + "operation": "imports_check_started", + "data": { + "module_path": "apps/modules/documentation_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:24.312231", + "operation": "imports_check_completed", + "data": { + "module_path": "apps/modules/documentation_standard.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-21T11:59:40.688084", + "operation": "imports_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:40.879395", + "operation": "imports_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:49.829164", + "operation": "imports_check_started", + "data": { + "module_path": "apps/modules/standards_audit.py" + } + }, + { + "timestamp": "2025-11-21T11:59:49.833296", + "operation": "imports_check_completed", + "data": { + "module_path": "apps/modules/standards_audit.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-21T11:59:50.967663", + "operation": "imports_check_started", + "data": { + "module_path": "apps/modules/standards_checklist.py" + } + }, + { + "timestamp": "2025-11-21T11:59:50.970797", + "operation": "imports_check_completed", + "data": { + "module_path": "apps/modules/standards_checklist.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_standard_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_standard_config.json new file mode 100644 index 00000000..c60e1ea2 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_standard_config.json @@ -0,0 +1,10 @@ +{ + "module_name": "imports_standard", + "version": "0.1.0", + "created": "2025-11-12", + "config": { + "enabled": true, + "log_level": "info", + "max_log_entries": 100 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_standard_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_standard_data.json new file mode 100644 index 00000000..5b6d8552 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_standard_data.json @@ -0,0 +1,9 @@ +{ + "created": "2025-11-12", + "last_updated": "2025-11-12", + "metrics": { + "operations_count": 0, + "success_count": 0, + "error_count": 0 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_standard_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_standard_log.json new file mode 100644 index 00000000..355c1bb6 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/imports_standard_log.json @@ -0,0 +1,142 @@ +[ + { + "timestamp": "2025-11-21T13:47:38.308744", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-22T08:25:08.078664", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-22T08:25:59.081852", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-22T08:26:38.451560", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-22T08:28:04.078279", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-22T08:28:32.737090", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-22T08:29:44.332311", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-22T08:30:06.855417", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-22T08:52:44.623095", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-22T09:48:44.617506", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-22T09:50:17.973032", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-22T15:29:21.977444", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-22T15:34:19.624584", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-27T22:00:51.754301", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-29T16:23:41.872416", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-29T18:41:34.301724", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-29T19:02:19.887590", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-29T20:29:15.666466", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2025-11-29T21:28:34.298390", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + }, + { + "timestamp": "2026-02-13T22:48:02.798520", + "operation": "standard_displayed", + "data": { + "command": "imports" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_check_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_check_config.json new file mode 100644 index 00000000..156eebd9 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_check_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "json_structure_check", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_check_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_check_data.json new file mode 100644 index 00000000..f37f3375 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_check_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "json_structure_check", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_check_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_check_log.json new file mode 100644 index 00000000..20f34458 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_check_log.json @@ -0,0 +1,770 @@ +[ + { + "timestamp": "2025-11-16T17:28:31.618185", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-16T17:28:31.661109", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-16T17:28:31.711756", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:28:31.718065", + "operation": "json_structure_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:28:31.762782", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-16T17:28:31.812238", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-16T17:28:40.864329", + "operation": "json_structure_check_started", + "data": { + "module_path": "apps/cortex.py" + } + }, + { + "timestamp": "2025-11-16T17:28:41.682434", + "operation": "json_structure_check_started", + "data": { + "module_path": "apps/modules/create_branch.py" + } + }, + { + "timestamp": "2025-11-16T17:28:42.521652", + "operation": "json_structure_check_started", + "data": { + "module_path": "apps/modules/update_branch.py" + } + }, + { + "timestamp": "2025-11-16T17:28:44.350583", + "operation": "json_structure_check_started", + "data": { + "module_path": "apps/modules/delete_branch.py" + } + }, + { + "timestamp": "2025-11-16T17:28:46.109322", + "operation": "json_structure_check_started", + "data": { + "module_path": "apps/modules/regenerate_template_registry.py" + } + }, + { + "timestamp": "2025-11-16T17:28:46.115858", + "operation": "json_structure_check_completed", + "data": { + "module_path": "apps/modules/regenerate_template_registry.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:28:47.152027", + "operation": "json_structure_check_started", + "data": { + "module_path": "apps/handlers/json/handler.py" + } + }, + { + "timestamp": "2025-11-16T17:28:47.159198", + "operation": "json_structure_check_completed", + "data": { + "module_path": "apps/handlers/json/handler.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:28:48.412416", + "operation": "json_structure_check_started", + "data": { + "module_path": "apps/handlers/branch/file_ops.py" + } + }, + { + "timestamp": "2025-11-16T17:28:48.426321", + "operation": "json_structure_check_completed", + "data": { + "module_path": "apps/handlers/branch/file_ops.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:28:49.354538", + "operation": "json_structure_check_started", + "data": { + "module_path": "apps/handlers/error/logger.py" + } + }, + { + "timestamp": "2025-11-16T17:28:49.359993", + "operation": "json_structure_check_completed", + "data": { + "module_path": "apps/handlers/error/logger.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:28:50.219151", + "operation": "json_structure_check_started", + "data": { + "module_path": "apps/handlers/registry/ignore.py" + } + }, + { + "timestamp": "2025-11-16T17:28:50.223243", + "operation": "json_structure_check_completed", + "data": { + "module_path": "apps/handlers/registry/ignore.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:30:19.412224", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:30:19.419049", + "operation": "json_structure_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:32:29.789687", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:32:29.796625", + "operation": "json_structure_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:32:32.048260", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:32:32.054894", + "operation": "json_structure_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:32:36.186080", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:32:36.194245", + "operation": "json_structure_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:32:40.798838", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:32:40.805491", + "operation": "json_structure_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:33:04.180203", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/modules/architecture_standard.py" + } + }, + { + "timestamp": "2025-11-16T17:35:07.022286", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-16T17:35:08.818131", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/handlers/json/handler.py" + } + }, + { + "timestamp": "2025-11-16T17:35:08.825464", + "operation": "json_structure_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/handlers/json/handler.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:35:10.622545", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py" + } + }, + { + "timestamp": "2025-11-16T17:35:10.636945", + "operation": "json_structure_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:36:50.606796", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:36:50.613892", + "operation": "json_structure_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:36:51.418077", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:36:51.425058", + "operation": "json_structure_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:37:00.277636", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:37:00.284336", + "operation": "json_structure_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:37:01.184203", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:37:01.190768", + "operation": "json_structure_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 0, + "passed": false, + "total_checks": 1, + "passed_checks": 0 + } + }, + { + "timestamp": "2025-11-16T17:38:21.067492", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:39:27.194286", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/modules/architecture_standard.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.624387", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.671688", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.717811", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.764829", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.810435", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.853393", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.896450", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.939776", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.985912", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.033781", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.086246", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.186953", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.236711", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.284129", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.328380", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.375457", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.426856", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.471401", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.515603", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.562663", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.607147", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.649962", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.559711", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.604723", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.646119", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.688962", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.735406", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.778946", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.824496", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.871641", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.923077", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.975435", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:02.021845", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.580967", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.624655", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.667366", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.708529", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.752610", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.795796", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.858084", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.903224", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.951270", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.998968", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:08.043766", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T20:38:09.530200", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py" + } + }, + { + "timestamp": "2025-11-18T20:38:19.581859", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py" + } + }, + { + "timestamp": "2025-11-18T20:38:29.166949", + "operation": "json_structure_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-21T11:54:28.518766", + "operation": "json_structure_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:16.501750", + "operation": "json_structure_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:24.358125", + "operation": "json_structure_check_started", + "data": { + "module_path": "apps/modules/documentation_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:59:40.716230", + "operation": "json_structure_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:40.910763", + "operation": "json_structure_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:49.882132", + "operation": "json_structure_check_started", + "data": { + "module_path": "apps/modules/standards_audit.py" + } + }, + { + "timestamp": "2025-11-21T11:59:51.021446", + "operation": "json_structure_check_started", + "data": { + "module_path": "apps/modules/standards_checklist.py" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_standard_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_standard_config.json new file mode 100644 index 00000000..b873f31d --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_standard_config.json @@ -0,0 +1,10 @@ +{ + "module_name": "json_structure_standard", + "version": "0.1.0", + "created": "2025-11-12", + "config": { + "enabled": true, + "log_level": "info", + "max_log_entries": 100 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_standard_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_standard_data.json new file mode 100644 index 00000000..5b6d8552 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_standard_data.json @@ -0,0 +1,9 @@ +{ + "created": "2025-11-12", + "last_updated": "2025-11-12", + "metrics": { + "operations_count": 0, + "success_count": 0, + "error_count": 0 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_standard_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_standard_log.json new file mode 100644 index 00000000..0f369fc2 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/json_structure_standard_log.json @@ -0,0 +1,198 @@ +[ + { + "timestamp": "2025-11-12T18:00:27.177321", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-12T18:21:57.933375", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-12T19:13:44.240723", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-12T19:15:53.812624", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-12T19:44:06.327106", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:28:19.766578", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:28:37.083959", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:45:19.218455", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:47:16.771827", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T16:40:09.584715", + "operation": "standard_displayed", + "data": { + "command": "json_structure" + } + }, + { + "timestamp": "2025-11-13T17:54:14.368747", + "operation": "standard_displayed", + "data": { + "command": "json_structure" + } + }, + { + "timestamp": "2025-11-13T20:55:19.956711", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T20:58:56.010209", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:08:20.218215", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:02.923235", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:09.637452", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:14.439204", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:27.851597", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-15T09:34:05.533381", + "operation": "standard_displayed", + "data": { + "command": "json_structure" + } + }, + { + "timestamp": "2025-11-15T10:26:59.676240", + "operation": "standard_displayed", + "data": { + "command": "json_structure" + } + }, + { + "timestamp": "2025-11-15T10:53:53.451727", + "operation": "standard_displayed", + "data": { + "command": "json_structure" + } + }, + { + "timestamp": "2025-11-21T18:37:45.243942", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-23T00:45:59.490894", + "operation": "standard_displayed", + "data": { + "command": "json_structure" + } + }, + { + "timestamp": "2025-11-23T00:49:30.681656", + "operation": "standard_displayed", + "data": { + "command": "json_structure" + } + }, + { + "timestamp": "2025-11-29T18:41:50.517414", + "operation": "standard_displayed", + "data": { + "command": "json_structure" + } + }, + { + "timestamp": "2025-11-29T19:02:31.593989", + "operation": "standard_displayed", + "data": { + "command": "json_structure" + } + }, + { + "timestamp": "2025-11-29T20:29:25.127420", + "operation": "standard_displayed", + "data": { + "command": "json_structure" + } + }, + { + "timestamp": "2025-11-29T21:28:32.492736", + "operation": "standard_displayed", + "data": { + "command": "json_structure" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/list_plans_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/list_plans_config.json new file mode 100644 index 00000000..8392dbc7 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/list_plans_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "list_plans", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/list_plans_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/list_plans_data.json new file mode 100644 index 00000000..6eb3017f --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/list_plans_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "list_plans", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/list_plans_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/list_plans_log.json new file mode 100644 index 00000000..15e3f185 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/list_plans_log.json @@ -0,0 +1,183 @@ +[ + { + "timestamp": "2025-11-21T09:43:01.607357", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [] + } + }, + { + "timestamp": "2025-11-21T09:43:07.477922", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [ + "all" + ] + } + }, + { + "timestamp": "2025-11-21T09:43:08.374594", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [ + "closed" + ] + } + }, + { + "timestamp": "2025-11-21T09:43:19.117708", + "operation": "plans_listed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-21T09:43:19.118398", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [ + "open" + ] + } + }, + { + "timestamp": "2025-11-21T09:43:26.160720", + "operation": "plans_listed", + "data": { + "command": "list_plans", + "args": [ + "all" + ] + } + }, + { + "timestamp": "2025-11-21T09:43:30.814009", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [ + "invalid_filter" + ] + } + }, + { + "timestamp": "2025-11-21T09:43:47.209534", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [] + } + }, + { + "timestamp": "2025-11-21T10:56:25.124651", + "operation": "plans_listed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-21T10:56:25.125441", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [] + } + }, + { + "timestamp": "2025-11-21T11:27:59.839568", + "operation": "plans_listed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-21T11:27:59.840430", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [] + } + }, + { + "timestamp": "2025-11-21T11:32:07.299941", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [] + } + }, + { + "timestamp": "2025-11-21T11:32:10.885979", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [] + } + }, + { + "timestamp": "2025-11-21T11:32:11.716254", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [ + "open" + ] + } + }, + { + "timestamp": "2025-11-21T11:32:14.762299", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [ + "closed" + ] + } + }, + { + "timestamp": "2025-11-21T11:32:18.329424", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [ + "all" + ] + } + }, + { + "timestamp": "2025-11-21T11:32:23.975232", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [] + } + }, + { + "timestamp": "2025-11-21T11:33:19.475461", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [] + } + }, + { + "timestamp": "2025-11-21T11:34:03.555657", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [] + } + }, + { + "timestamp": "2025-11-21T11:49:50.552268", + "operation": "plans_listed", + "data": { + "command": "list", + "args": [] + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_check_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_check_config.json new file mode 100644 index 00000000..7bc6c857 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_check_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "modules_check", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_check_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_check_data.json new file mode 100644 index 00000000..bc46c2e1 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_check_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "modules_check", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_check_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_check_log.json new file mode 100644 index 00000000..48e98fd9 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_check_log.json @@ -0,0 +1,802 @@ +[ + { + "timestamp": "2025-11-16T17:28:42.508913", + "operation": "modules_check_completed", + "data": { + "module_path": "apps/modules/update_branch.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:28:44.334016", + "operation": "modules_check_started", + "data": { + "module_path": "apps/modules/delete_branch.py" + } + }, + { + "timestamp": "2025-11-16T17:28:44.337035", + "operation": "modules_check_completed", + "data": { + "module_path": "apps/modules/delete_branch.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:28:46.094098", + "operation": "modules_check_started", + "data": { + "module_path": "apps/modules/regenerate_template_registry.py" + } + }, + { + "timestamp": "2025-11-16T17:28:46.096961", + "operation": "modules_check_completed", + "data": { + "module_path": "apps/modules/regenerate_template_registry.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:28:47.138993", + "operation": "modules_check_started", + "data": { + "module_path": "apps/handlers/json/handler.py" + } + }, + { + "timestamp": "2025-11-16T17:28:48.398759", + "operation": "modules_check_started", + "data": { + "module_path": "apps/handlers/branch/file_ops.py" + } + }, + { + "timestamp": "2025-11-16T17:28:49.341643", + "operation": "modules_check_started", + "data": { + "module_path": "apps/handlers/error/logger.py" + } + }, + { + "timestamp": "2025-11-16T17:28:50.206286", + "operation": "modules_check_started", + "data": { + "module_path": "apps/handlers/registry/ignore.py" + } + }, + { + "timestamp": "2025-11-16T17:30:19.399307", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:30:19.402769", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:32:29.771369", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:32:29.774671", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:32:32.033366", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:32:32.036284", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:32:36.169743", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:32:36.172996", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:32:40.782580", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:32:40.785646", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:33:04.165458", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/modules/architecture_standard.py" + } + }, + { + "timestamp": "2025-11-16T17:33:04.168065", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/modules/architecture_standard.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:35:07.008528", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-16T17:35:08.804024", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/handlers/json/handler.py" + } + }, + { + "timestamp": "2025-11-16T17:35:10.609405", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py" + } + }, + { + "timestamp": "2025-11-16T17:36:50.589518", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:36:50.592547", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:36:51.401210", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:36:51.404352", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:37:00.259857", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:37:00.263397", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:37:01.168488", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:37:01.171739", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:38:21.050028", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:38:21.053016", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:39:27.180280", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/modules/architecture_standard.py" + } + }, + { + "timestamp": "2025-11-16T17:39:27.182804", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/modules/architecture_standard.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.616139", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.663963", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.710288", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.757601", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.803071", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.846172", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.889269", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.932555", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.976063", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.978733", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:43:58.025594", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.075364", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.176636", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.228786", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.276552", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.320879", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.367709", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.417547", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.463920", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.508391", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.552504", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.555612", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.600100", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.641921", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.551743", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.597459", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.639389", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.680815", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.727992", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.771837", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.816044", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.863710", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.911608", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.915048", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.968296", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:02.013108", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.573356", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.617417", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.660374", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.701832", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.745595", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.788513", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.849784", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.895401", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.940694", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.943920", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.991711", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:08.035586", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T20:38:09.510526", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py" + } + }, + { + "timestamp": "2025-11-18T20:38:09.513641", + "operation": "modules_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T20:38:19.565450", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py" + } + }, + { + "timestamp": "2025-11-18T20:38:29.158871", + "operation": "modules_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-21T11:54:28.500344", + "operation": "modules_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:54:28.503163", + "operation": "modules_check_completed", + "data": { + "module_path": "apps/modules/imports_standard.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-21T11:57:16.486553", + "operation": "modules_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:16.489247", + "operation": "modules_check_completed", + "data": { + "module_path": "apps/modules/imports_standard.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-21T11:57:24.342730", + "operation": "modules_check_started", + "data": { + "module_path": "apps/modules/documentation_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:24.345396", + "operation": "modules_check_completed", + "data": { + "module_path": "apps/modules/documentation_standard.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-21T11:59:40.708468", + "operation": "modules_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:40.900620", + "operation": "modules_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:49.865939", + "operation": "modules_check_started", + "data": { + "module_path": "apps/modules/standards_audit.py" + } + }, + { + "timestamp": "2025-11-21T11:59:49.869422", + "operation": "modules_check_completed", + "data": { + "module_path": "apps/modules/standards_audit.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-21T11:59:51.003788", + "operation": "modules_check_started", + "data": { + "module_path": "apps/modules/standards_checklist.py" + } + }, + { + "timestamp": "2025-11-21T11:59:51.007279", + "operation": "modules_check_completed", + "data": { + "module_path": "apps/modules/standards_checklist.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_standard_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_standard_config.json new file mode 100644 index 00000000..e1ed823d --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_standard_config.json @@ -0,0 +1,10 @@ +{ + "module_name": "modules_standard", + "version": "0.1.0", + "created": "2025-11-12", + "config": { + "enabled": true, + "log_level": "info", + "max_log_entries": 100 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_standard_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_standard_data.json new file mode 100644 index 00000000..5b6d8552 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_standard_data.json @@ -0,0 +1,9 @@ +{ + "created": "2025-11-12", + "last_updated": "2025-11-12", + "metrics": { + "operations_count": 0, + "success_count": 0, + "error_count": 0 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_standard_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_standard_log.json new file mode 100644 index 00000000..c300c790 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/modules_standard_log.json @@ -0,0 +1,324 @@ +[ + { + "timestamp": "2025-11-12T19:43:18.071481", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-12T19:44:06.427026", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T00:30:37.712811", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:26:54.817702", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:27:00.722338", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:28:10.993144", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:28:49.909160", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:35:03.763738", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:50:57.555239", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:45:22.863774", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:47:13.677996", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T15:30:05.783080", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-13T16:08:16.912814", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-13T16:08:17.299277", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-13T16:15:15.714711", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-13T16:15:16.705014", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-13T17:54:12.642555", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-13T20:59:01.993393", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:08:18.339471", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:28:54.688129", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:28:55.605157", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:28:56.901192", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:14.142705", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-15T09:26:42.566123", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-15T09:33:53.887201", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-15T09:38:45.656503", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-15T09:40:05.722727", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-15T09:40:05.847402", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-15T10:09:10.458606", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-15T10:15:20.273965", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-15T10:26:51.691305", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-15T10:34:31.711453", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-15T10:53:48.898609", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-16T00:29:42.591039", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-16T12:38:33.948683", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-16T12:43:18.859900", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-16T13:37:00.604158", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-16T15:11:18.778225", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-16T16:31:06.261192", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-23T01:57:12.207513", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-27T11:39:36.358712", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-29T02:38:33.626410", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-29T02:41:17.912948", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-29T19:02:27.525727", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-29T20:29:20.195502", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + }, + { + "timestamp": "2025-11-29T21:28:37.306411", + "operation": "standard_displayed", + "data": { + "command": "modules" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_check_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_check_config.json new file mode 100644 index 00000000..ba367450 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_check_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "naming_check", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_check_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_check_data.json new file mode 100644 index 00000000..7ec55419 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_check_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "naming_check", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_check_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_check_log.json new file mode 100644 index 00000000..3c9cdea9 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_check_log.json @@ -0,0 +1,898 @@ +[ + { + "timestamp": "2025-11-16T17:43:57.743548", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.746847", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.791029", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.793759", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:57.834576", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.837151", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:43:57.877403", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.880050", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:43:57.920887", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.923475", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-16T17:43:57.963863", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.966818", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:58.013096", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.015821", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-16T17:43:58.061566", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.064695", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.158958", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.162338", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.215750", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.218677", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.264208", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.267086", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.307295", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.310229", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.355114", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.357953", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.400182", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.403566", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.451611", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.454486", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.496790", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.499406", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:51:55.539617", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.542602", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.588352", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.591052", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:51:55.629857", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.632710", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.535915", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.539428", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.585599", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.588328", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.628046", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.630476", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.666470", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.669490", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.716056", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.718864", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.759753", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.762324", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.804325", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.806947", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.851546", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.854472", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:01.898007", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.901185", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:01.954137", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.958721", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:02.000641", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:02.003663", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.560192", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.563086", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.605594", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.608206", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.648794", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.651397", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.689251", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.692091", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.733655", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.736488", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.776827", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.779337", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.832936", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.837279", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.882769", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.885515", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T17:52:07.927825", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.930779", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:07.978329", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.980909", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + }, + { + "timestamp": "2025-11-18T17:52:08.023158", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:08.026070", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T20:38:09.485643", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py" + } + }, + { + "timestamp": "2025-11-18T20:38:09.489680", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py", + "score": 100, + "passed": true, + "total_checks": 4, + "passed_checks": 4 + } + }, + { + "timestamp": "2025-11-18T20:38:19.540066", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py" + } + }, + { + "timestamp": "2025-11-18T20:38:19.543547", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-18T20:38:29.144047", + "operation": "naming_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T20:38:29.147570", + "operation": "naming_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-21T11:54:28.476262", + "operation": "naming_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:54:28.480028", + "operation": "naming_check_completed", + "data": { + "module_path": "apps/modules/imports_standard.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-21T11:57:16.467439", + "operation": "naming_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:16.470974", + "operation": "naming_check_completed", + "data": { + "module_path": "apps/modules/imports_standard.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-21T11:57:24.323665", + "operation": "naming_check_started", + "data": { + "module_path": "apps/modules/documentation_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:24.327222", + "operation": "naming_check_completed", + "data": { + "module_path": "apps/modules/documentation_standard.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-21T11:59:40.696832", + "operation": "naming_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:40.888259", + "operation": "naming_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:49.845918", + "operation": "naming_check_started", + "data": { + "module_path": "apps/modules/standards_audit.py" + } + }, + { + "timestamp": "2025-11-21T11:59:49.849457", + "operation": "naming_check_completed", + "data": { + "module_path": "apps/modules/standards_audit.py", + "score": 100, + "passed": true, + "total_checks": 3, + "passed_checks": 3 + } + }, + { + "timestamp": "2025-11-21T11:59:50.982712", + "operation": "naming_check_started", + "data": { + "module_path": "apps/modules/standards_checklist.py" + } + }, + { + "timestamp": "2025-11-21T11:59:50.986429", + "operation": "naming_check_completed", + "data": { + "module_path": "apps/modules/standards_checklist.py", + "score": 66, + "passed": false, + "total_checks": 3, + "passed_checks": 2 + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_standard_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_standard_config.json new file mode 100644 index 00000000..9f27cd0f --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_standard_config.json @@ -0,0 +1,10 @@ +{ + "module_name": "naming_standard", + "version": "0.1.0", + "created": "2025-11-12", + "config": { + "enabled": true, + "log_level": "info", + "max_log_entries": 100 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_standard_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_standard_data.json new file mode 100644 index 00000000..5b6d8552 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_standard_data.json @@ -0,0 +1,9 @@ +{ + "created": "2025-11-12", + "last_updated": "2025-11-12", + "metrics": { + "operations_count": 0, + "success_count": 0, + "error_count": 0 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_standard_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_standard_log.json new file mode 100644 index 00000000..1ca50094 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/naming_standard_log.json @@ -0,0 +1,296 @@ +[ + { + "timestamp": "2025-11-12T18:00:37.616182", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-12T18:21:57.742419", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-12T19:09:59.309155", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-12T19:15:45.331957", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-12T19:44:06.511340", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:27:36.107409", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:27:51.039434", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:37:25.343462", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:37:14.708554", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:39:41.724975", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:45:18.215549", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:46:07.394235", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:47:10.523441", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T20:08:14.440993", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:02:37.166325", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:08:14.294047", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:28:59.187439", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:02.395053", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:05.826709", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:20.067260", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-15T09:26:49.879453", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-15T09:33:59.885521", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-15T09:38:56.848308", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-15T10:26:59.020577", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-15T10:53:49.711530", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-16T13:35:32.611523", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-16T15:11:30.541232", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-22T08:25:08.624988", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-22T08:25:59.425296", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-22T08:26:38.798991", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-22T08:28:04.593522", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-22T08:28:33.086740", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-22T08:29:48.444588", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-22T08:30:07.432064", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-22T08:52:48.421813", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-22T09:48:48.429632", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-23T00:02:44.313251", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-27T13:14:19.683007", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-27T17:56:09.057127", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-29T19:02:29.417914", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-29T20:29:17.967899", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + }, + { + "timestamp": "2025-11-29T21:28:30.400312", + "operation": "standard_displayed", + "data": { + "command": "naming" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/readme_update_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/readme_update_config.json new file mode 100644 index 00000000..cfb9a6a3 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/readme_update_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "readme_update", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/readme_update_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/readme_update_data.json new file mode 100644 index 00000000..8074f58f --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/readme_update_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "readme_update", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/readme_update_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/readme_update_log.json new file mode 100644 index 00000000..7a7efb60 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/readme_update_log.json @@ -0,0 +1,124 @@ +[ + { + "timestamp": "2026-02-21T16:22:12.461335", + "operation": "readme_update_started", + "data": { + "targets": [ + "CORTEX" + ] + } + }, + { + "timestamp": "2026-02-21T16:22:12.646308", + "operation": "readme_update_completed", + "data": { + "branches_processed": 1, + "branches_updated": 0 + } + }, + { + "timestamp": "2026-02-21T16:23:46.362657", + "operation": "readme_update_started", + "data": { + "targets": [ + "CORTEX" + ] + } + }, + { + "timestamp": "2026-02-21T16:23:46.563906", + "operation": "readme_update_completed", + "data": { + "branches_processed": 1, + "branches_updated": 0 + } + }, + { + "timestamp": "2026-02-21T16:24:16.790023", + "operation": "readme_update_started", + "data": { + "targets": [ + "CORTEX" + ] + } + }, + { + "timestamp": "2026-02-21T16:24:16.977738", + "operation": "readme_update_completed", + "data": { + "branches_processed": 1, + "branches_updated": 1 + } + }, + { + "timestamp": "2026-02-21T16:25:06.386050", + "operation": "readme_update_started", + "data": { + "targets": [ + "CORTEX" + ] + } + }, + { + "timestamp": "2026-02-21T16:25:06.582502", + "operation": "readme_update_completed", + "data": { + "branches_processed": 1, + "branches_updated": 1 + } + }, + { + "timestamp": "2026-02-21T18:51:43.057783", + "operation": "readme_update_started", + "data": { + "targets": [ + "SEED" + ] + } + }, + { + "timestamp": "2026-02-21T18:51:46.614687", + "operation": "readme_update_completed", + "data": { + "branches_processed": 1, + "branches_updated": 0 + } + }, + { + "timestamp": "2026-02-21T18:52:36.321947", + "operation": "readme_update_started", + "data": { + "targets": [ + ".VSCODE", + "AI_MAIL", + "API", + "ASSISTANT", + "BACKUP_SYSTEM", + "CLI", + "CORTEX", + "DEVPULSE", + "DEV_CENTRAL", + "DRONE", + "FLOW", + "GIT_REPO", + "GROWTH", + "MCP_SERVERS", + "MEMORY_BANK", + "NEXUS", + "PARTICK_PRIVATE", + "PERMISSIONS", + "PRAX", + "PROJECTS", + "SEED", + "SPEAKEASY", + "TEAM_1", + "TEAM_2", + "TEAM_3", + "TEST", + "THE_COMMONS", + "TRIGGER", + "VERA" + ] + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/seed_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/seed_config.json new file mode 100644 index 00000000..d59166e1 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/seed_config.json @@ -0,0 +1,10 @@ +{ + "module_name": "seed", + "version": "0.1.0", + "created": "2025-11-12", + "config": { + "enabled": true, + "log_level": "info", + "max_log_entries": 100 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/seed_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/seed_data.json new file mode 100644 index 00000000..f77bff83 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/seed_data.json @@ -0,0 +1,11 @@ +{ + "created": "2025-11-12", + "last_updated": "2025-11-29", + "metrics": { + "operations_count": 0, + "success_count": 0, + "error_count": 0 + }, + "test_counter": 2, + "test_metric": "working" +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/seed_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/seed_log.json new file mode 100644 index 00000000..3228aaa8 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/seed_log.json @@ -0,0 +1,802 @@ +[ + { + "timestamp": "2026-03-03T20:25:05.147640", + "operation": "seed_command_attempted", + "data": { + "command": "audit", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-03T20:47:43.202560", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-03T21:05:56.995725", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-03T22:14:03.575473", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-03T22:14:49.776606", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-03T22:16:52.511261", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-03T22:18:02.583608", + "operation": "seed_command_attempted", + "data": { + "command": "audit", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-03T23:34:26.668625", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T03:02:33.964134", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T03:03:40.236227", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T03:05:00.045797", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T04:00:38.702562", + "operation": "seed_command_attempted", + "data": { + "command": "audit", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T04:00:43.909654", + "operation": "seed_command_attempted", + "data": { + "command": "audit", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T04:01:00.474620", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T04:01:20.417304", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T04:01:25.755539", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T04:01:33.713871", + "operation": "seed_command_attempted", + "data": { + "command": "audit", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T04:01:44.051817", + "operation": "seed_command_attempted", + "data": { + "command": "audit", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T07:32:24.178891", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T07:33:26.104790", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T07:34:09.375872", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T07:35:01.666652", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T07:35:42.607443", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T07:36:05.369728", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T07:36:20.618306", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T07:37:46.390563", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T07:38:03.112012", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T17:23:30.092888", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:54:35.138726", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:54:40.736174", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:54:46.405310", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:54:52.037741", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:54:57.730819", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:55:03.291112", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:55:09.014518", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:55:30.512175", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:55:36.286629", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:55:41.950508", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:55:47.665975", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:55:53.279210", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:55:58.822607", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:56:04.688819", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:56:10.382807", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:56:15.979774", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:56:34.568427", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:56:40.408124", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:56:46.198432", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:56:51.868482", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:56:57.816913", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:57:03.501552", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:57:09.278073", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:57:15.074477", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:57:20.811181", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:57:26.533701", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:57:55.874686", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:58:01.715217", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:58:07.396706", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:58:13.121538", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:58:18.923715", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:58:24.710596", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:58:30.439319", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:58:36.231449", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:58:41.949142", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:58:47.964126", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:58:53.788912", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:58:59.679026", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:59:05.409200", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:59:11.178736", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:59:16.768657", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-04T23:59:22.617397", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T00:11:18.102284", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T00:11:24.024031", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T00:11:29.901512", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T00:11:54.485702", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T00:44:33.289529", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T00:44:39.056038", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T01:06:01.842293", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T01:06:07.454499", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T01:06:13.206846", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T01:06:19.096982", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T01:06:24.683932", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:06:12.780146", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:07:11.596579", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:08:45.207915", + "operation": "seed_command_attempted", + "data": { + "command": "audit", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:11:53.660356", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:13:10.228670", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:13:16.157577", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:13:22.083933", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:13:27.914358", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:13:33.766472", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:14:17.876357", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:14:24.070478", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:16:05.148421", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:16:10.994837", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:16:35.482586", + "operation": "seed_command_attempted", + "data": { + "command": "audit", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:22:20.922698", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:22:26.675896", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:22:32.350475", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:22:38.170690", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + }, + { + "timestamp": "2026-03-05T13:22:43.984543", + "operation": "seed_command_attempted", + "data": { + "command": "checklist", + "modules_discovered": 20 + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_audit_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_audit_config.json new file mode 100644 index 00000000..c109c7ee --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_audit_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "standards_audit", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_audit_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_audit_data.json new file mode 100644 index 00000000..c981080a --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_audit_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "standards_audit", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_audit_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_audit_log.json new file mode 100644 index 00000000..b82da68a --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_audit_log.json @@ -0,0 +1,751 @@ +[ + { + "timestamp": "2026-02-28T22:06:22.765525", + "operation": "standards_audit_started", + "data": { + "specific_branch": "SPEAKEASY" + } + }, + { + "timestamp": "2026-02-28T22:06:23.863883", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-02-28T22:06:32.170516", + "operation": "standards_audit_started", + "data": { + "specific_branch": "FLOW" + } + }, + { + "timestamp": "2026-02-28T22:06:37.737093", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 98 + } + }, + { + "timestamp": "2026-02-28T22:07:36.811635", + "operation": "standards_audit_started", + "data": { + "specific_branch": ".VSCODE" + } + }, + { + "timestamp": "2026-02-28T22:07:39.097170", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 92 + } + }, + { + "timestamp": "2026-02-28T22:07:46.314494", + "operation": "standards_audit_started", + "data": { + "specific_branch": "API" + } + }, + { + "timestamp": "2026-02-28T22:07:53.412358", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 93 + } + }, + { + "timestamp": "2026-02-28T22:07:55.190185", + "operation": "standards_audit_started", + "data": { + "specific_branch": "FLOW" + } + }, + { + "timestamp": "2026-02-28T22:07:59.227556", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 98 + } + }, + { + "timestamp": "2026-02-28T22:08:06.892716", + "operation": "standards_audit_started", + "data": { + "specific_branch": "FLOW" + } + }, + { + "timestamp": "2026-02-28T22:08:10.876969", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 98 + } + }, + { + "timestamp": "2026-02-28T22:09:03.753525", + "operation": "standards_audit_started", + "data": { + "specific_branch": "FLOW" + } + }, + { + "timestamp": "2026-02-28T22:09:07.444730", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-02-28T22:09:26.274519", + "operation": "standards_audit_started", + "data": { + "specific_branch": "PRAX" + } + }, + { + "timestamp": "2026-02-28T22:09:29.949149", + "operation": "standards_audit_started", + "data": { + "specific_branch": "NEXUS" + } + }, + { + "timestamp": "2026-02-28T22:09:30.920011", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 100 + } + }, + { + "timestamp": "2026-02-28T22:09:31.403903", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 100 + } + }, + { + "timestamp": "2026-02-28T22:09:40.074739", + "operation": "standards_audit_started", + "data": { + "specific_branch": ".VSCODE" + } + }, + { + "timestamp": "2026-02-28T22:09:42.864658", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 100 + } + }, + { + "timestamp": "2026-02-28T22:10:35.787714", + "operation": "standards_audit_started", + "data": { + "specific_branch": "API" + } + }, + { + "timestamp": "2026-02-28T22:10:42.291239", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-02-28T22:11:32.687304", + "operation": "standards_audit_started", + "data": { + "specific_branch": "API" + } + }, + { + "timestamp": "2026-02-28T22:11:37.688147", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-02-28T22:11:49.227740", + "operation": "standards_audit_started", + "data": { + "specific_branch": "API" + } + }, + { + "timestamp": "2026-02-28T22:11:55.928817", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-02-28T22:11:58.956279", + "operation": "standards_audit_started", + "data": { + "specific_branch": "AI_MAIL" + } + }, + { + "timestamp": "2026-02-28T22:12:02.598242", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 88 + } + }, + { + "timestamp": "2026-02-28T22:12:07.263335", + "operation": "standards_audit_started", + "data": { + "specific_branch": "BACKUP_SYSTEM" + } + }, + { + "timestamp": "2026-02-28T22:12:08.016442", + "operation": "standards_audit_started", + "data": { + "specific_branch": "SPEAKEASY" + } + }, + { + "timestamp": "2026-02-28T22:12:08.715946", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-02-28T22:12:13.376648", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 98 + } + }, + { + "timestamp": "2026-02-28T22:12:22.971723", + "operation": "standards_audit_started", + "data": { + "specific_branch": "SPEAKEASY" + } + }, + { + "timestamp": "2026-02-28T22:12:23.551113", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-02-28T22:12:37.348811", + "operation": "standards_audit_started", + "data": { + "specific_branch": "SPEAKEASY" + } + }, + { + "timestamp": "2026-02-28T22:12:38.057002", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-02-28T22:12:57.399722", + "operation": "standards_audit_started", + "data": { + "specific_branch": "AI_MAIL" + } + }, + { + "timestamp": "2026-02-28T22:13:01.857245", + "operation": "standards_audit_started", + "data": { + "specific_branch": "BACKUP_SYSTEM" + } + }, + { + "timestamp": "2026-02-28T22:13:01.907870", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 93 + } + }, + { + "timestamp": "2026-02-28T22:13:08.368561", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 98 + } + }, + { + "timestamp": "2026-02-28T22:14:24.949268", + "operation": "standards_audit_started", + "data": { + "specific_branch": "SPEAKEASY" + } + }, + { + "timestamp": "2026-02-28T22:14:25.484348", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 100 + } + }, + { + "timestamp": "2026-02-28T22:16:22.984652", + "operation": "standards_audit_started", + "data": { + "specific_branch": "BACKUP_SYSTEM" + } + }, + { + "timestamp": "2026-02-28T22:16:28.961814", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-02-28T22:19:01.075174", + "operation": "standards_audit_started", + "data": { + "specific_branch": "BACKUP_SYSTEM" + } + }, + { + "timestamp": "2026-02-28T22:19:07.327297", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-02-28T22:20:31.318477", + "operation": "standards_audit_started", + "data": { + "specific_branch": "BACKUP_SYSTEM" + } + }, + { + "timestamp": "2026-02-28T22:20:37.323696", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 100 + } + }, + { + "timestamp": "2026-02-28T22:27:17.158379", + "operation": "standards_audit_started", + "data": { + "specific_branch": "PRAX" + } + }, + { + "timestamp": "2026-02-28T22:27:20.152208", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 100 + } + }, + { + "timestamp": "2026-03-01T04:01:00.037815", + "operation": "standards_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2026-03-01T04:01:07.883901", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 22, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-03-01T17:25:00.823039", + "operation": "standards_audit_started", + "data": { + "specific_branch": "FLOW" + } + }, + { + "timestamp": "2026-03-01T17:25:07.013569", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-03-01T17:31:23.175096", + "operation": "standards_audit_started", + "data": { + "specific_branch": "TRIGGER" + } + }, + { + "timestamp": "2026-03-01T17:31:25.761572", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-03-01T18:21:13.823696", + "operation": "standards_audit_started", + "data": { + "specific_branch": "TEST" + } + }, + { + "timestamp": "2026-03-01T18:21:15.498251", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 89 + } + }, + { + "timestamp": "2026-03-01T18:24:35.043837", + "operation": "standards_audit_started", + "data": { + "specific_branch": "TEST" + } + }, + { + "timestamp": "2026-03-01T18:24:36.672116", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-03-01T18:24:46.570245", + "operation": "standards_audit_started", + "data": { + "specific_branch": "TEST" + } + }, + { + "timestamp": "2026-03-01T18:24:48.186080", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-03-01T18:25:28.764631", + "operation": "standards_audit_started", + "data": { + "specific_branch": "TEST" + } + }, + { + "timestamp": "2026-03-01T18:25:30.489066", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 100 + } + }, + { + "timestamp": "2026-03-01T20:34:45.616041", + "operation": "standards_audit_started", + "data": { + "specific_branch": "DRONE" + } + }, + { + "timestamp": "2026-03-01T20:34:48.992618", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-03-01T21:01:24.948932", + "operation": "standards_audit_started", + "data": { + "specific_branch": "API" + } + }, + { + "timestamp": "2026-03-01T21:01:31.139883", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-03-01T21:06:27.234874", + "operation": "standards_audit_started", + "data": { + "specific_branch": "AI_MAIL" + } + }, + { + "timestamp": "2026-03-01T21:06:30.407482", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 93 + } + }, + { + "timestamp": "2026-03-01T22:38:24.564445", + "operation": "standards_audit_started", + "data": { + "specific_branch": "API" + } + }, + { + "timestamp": "2026-03-01T22:38:29.224069", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-03-02T04:01:12.638868", + "operation": "standards_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2026-03-02T04:01:17.629930", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 22, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-03-02T13:10:39.468013", + "operation": "standards_audit_started", + "data": { + "specific_branch": "AI_MAIL" + } + }, + { + "timestamp": "2026-03-02T13:10:42.506386", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 93 + } + }, + { + "timestamp": "2026-03-02T16:09:14.301864", + "operation": "standards_audit_started", + "data": { + "specific_branch": "AI_MAIL" + } + }, + { + "timestamp": "2026-03-02T16:09:17.471698", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 93 + } + }, + { + "timestamp": "2026-03-02T19:00:09.344045", + "operation": "standards_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2026-03-02T19:01:01.081503", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 22, + "average_compliance": 98 + } + }, + { + "timestamp": "2026-03-02T20:28:51.243658", + "operation": "standards_audit_started", + "data": { + "specific_branch": "FLOW" + } + }, + { + "timestamp": "2026-03-02T20:28:53.990804", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-03-02T20:30:11.014174", + "operation": "standards_audit_started", + "data": { + "specific_branch": "MEMORY_BANK" + } + }, + { + "timestamp": "2026-03-02T20:30:12.318814", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 100 + } + }, + { + "timestamp": "2026-03-03T00:10:56.221307", + "operation": "standards_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2026-03-03T20:25:05.150655", + "operation": "standards_audit_started", + "data": { + "specific_branch": "FLOW" + } + }, + { + "timestamp": "2026-03-03T20:25:05.401096", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-03-03T22:18:02.586717", + "operation": "standards_audit_started", + "data": { + "specific_branch": "API" + } + }, + { + "timestamp": "2026-03-03T22:18:07.060734", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-03-04T04:00:38.705144", + "operation": "standards_audit_started", + "data": { + "specific_branch": "ALL" + } + }, + { + "timestamp": "2026-03-04T04:00:43.912438", + "operation": "standards_audit_started", + "data": { + "specific_branch": null + } + }, + { + "timestamp": "2026-03-04T04:00:51.561336", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 22, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-03-04T04:01:33.716331", + "operation": "standards_audit_started", + "data": { + "specific_branch": "ASSISTANT" + } + }, + { + "timestamp": "2026-03-04T04:01:33.885157", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 97 + } + }, + { + "timestamp": "2026-03-04T04:01:44.057495", + "operation": "standards_audit_started", + "data": { + "specific_branch": "PERMISSIONS" + } + }, + { + "timestamp": "2026-03-04T04:01:44.166272", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-03-05T13:08:45.210786", + "operation": "standards_audit_started", + "data": { + "specific_branch": "API" + } + }, + { + "timestamp": "2026-03-05T13:08:49.918121", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 99 + } + }, + { + "timestamp": "2026-03-05T13:16:35.485284", + "operation": "standards_audit_started", + "data": { + "specific_branch": "CORTEX" + } + }, + { + "timestamp": "2026-03-05T13:16:38.693171", + "operation": "standards_audit_completed", + "data": { + "branches_audited": 1, + "average_compliance": 100 + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_checklist_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_checklist_config.json new file mode 100644 index 00000000..647d21d8 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_checklist_config.json @@ -0,0 +1,10 @@ +{ + "module_name": "standards_checklist", + "version": "0.1.0", + "created": "2025-11-12", + "config": { + "enabled": true, + "log_level": "info", + "max_log_entries": 100 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_checklist_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_checklist_data.json new file mode 100644 index 00000000..5b6d8552 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_checklist_data.json @@ -0,0 +1,9 @@ +{ + "created": "2025-11-12", + "last_updated": "2025-11-12", + "metrics": { + "operations_count": 0, + "success_count": 0, + "error_count": 0 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_checklist_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_checklist_log.json new file mode 100644 index 00000000..7b5a7472 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_checklist_log.json @@ -0,0 +1,1002 @@ +[ + { + "timestamp": "2026-03-02T23:25:41.701093", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/seedgo/reporter.py" + ] + } + }, + { + "timestamp": "2026-03-02T23:26:23.683722", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/seedgo/cli.py" + ] + } + }, + { + "timestamp": "2026-03-02T23:27:50.453690", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/seedgo/drone_adapter.py" + ] + } + }, + { + "timestamp": "2026-03-02T23:28:36.890408", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/tests/test_seedgo_cli.py" + ] + } + }, + { + "timestamp": "2026-03-03T20:23:04.580463", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_os/dev_central/devpulse/apps/modules/dev_flow.py" + ] + } + }, + { + "timestamp": "2026-03-03T20:23:19.855290", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_core/flow/apps/modules/close_plan.py" + ] + } + }, + { + "timestamp": "2026-03-03T20:23:23.044903", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_os/dev_central/devpulse/apps/modules/dev_flow.py" + ] + } + }, + { + "timestamp": "2026-03-03T20:23:37.864640", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_core/flow/tools/backfill_closed_plans.py" + ] + } + }, + { + "timestamp": "2026-03-03T20:47:43.205674", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_core/prax/apps/handlers/monitoring/telegram_relay.py" + ] + } + }, + { + "timestamp": "2026-03-03T21:05:56.999024", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_core/prax/apps/handlers/monitoring/monitoring_filters.py" + ] + } + }, + { + "timestamp": "2026-03-03T22:14:03.578961", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py" + ] + } + }, + { + "timestamp": "2026-03-03T22:14:49.778706", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_core/api/apps/handlers/telegram/branch_plugin.py" + ] + } + }, + { + "timestamp": "2026-03-03T22:16:52.513953", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_core/api/tests/test_multi_bot.py" + ] + } + }, + { + "timestamp": "2026-03-03T23:34:26.671368", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py" + ] + } + }, + { + "timestamp": "2026-03-04T03:02:33.967051", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/seedgo/plugins/drone_compliance.py" + ] + } + }, + { + "timestamp": "2026-03-04T03:03:40.238724", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/seedgo/plugins/naming_convention.py" + ] + } + }, + { + "timestamp": "2026-03-04T03:05:00.048222", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/tests/test_drone_compliance.py" + ] + } + }, + { + "timestamp": "2026-03-04T04:01:00.477671", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + ] + } + }, + { + "timestamp": "2026-03-04T04:01:20.420430", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_os/dev_central/assistant/apps/assistant.py" + ] + } + }, + { + "timestamp": "2026-03-04T04:01:25.757778", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_os/dev_central/assistant/apps/assistant.py" + ] + } + }, + { + "timestamp": "2026-03-04T07:32:24.181110", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/seedgo/plugins/silent_failure_detection.py" + ] + } + }, + { + "timestamp": "2026-03-04T07:33:26.108197", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/tests/test_silent_failure_detection.py" + ] + } + }, + { + "timestamp": "2026-03-04T07:34:09.377950", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/seedgo/plugins/file_module_size.py" + ] + } + }, + { + "timestamp": "2026-03-04T07:35:01.669690", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/tests/test_file_module_size.py" + ] + } + }, + { + "timestamp": "2026-03-04T07:35:42.610494", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/seedgo/plugins/silent_failure_detection.py" + ] + } + }, + { + "timestamp": "2026-03-04T07:36:05.371963", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/seedgo/plugins/file_module_size.py" + ] + } + }, + { + "timestamp": "2026-03-04T07:36:20.620451", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/tests/test_file_module_size.py" + ] + } + }, + { + "timestamp": "2026-03-04T07:37:46.392827", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/tmp/test_silent_failure.py" + ] + } + }, + { + "timestamp": "2026-03-04T07:38:03.114926", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/tmp/test_file_size.py" + ] + } + }, + { + "timestamp": "2026-03-04T17:23:30.095206", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/vera/apps/handlers/post_medium.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:54:35.143031", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:54:40.738728", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/drone/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:54:46.407865", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/drone/modules/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:54:52.040014", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/drone/modules/router.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:54:57.733107", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/drone/modules/resolver.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:55:03.293402", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/drone/handlers/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:55:09.017821", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/drone/handlers/dispatch.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:55:30.514570", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/mail/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:55:36.288862", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/mail/modules/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:55:41.952987", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/mail/handlers/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:55:47.668326", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/flow/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:55:53.281385", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/flow/modules/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:55:58.824781", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/flow/handlers/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:56:04.691519", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/devpulse/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:56:10.384960", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/devpulse/modules/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:56:15.982151", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/devpulse/handlers/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:56:34.570664", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/seedgo/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:56:40.411137", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/seedgo/modules/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:56:46.201033", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/seedgo/handlers/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:56:51.870784", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/seedgo/plugins/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:56:57.819301", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/prax/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:57:03.504256", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/prax/modules/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:57:09.280166", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/prax/handlers/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:57:15.076989", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/trigger/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:57:20.813742", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/trigger/modules/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:57:26.536034", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/trigger/handlers/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:57:55.876870", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/api/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:58:01.717449", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/api/modules/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:58:07.399038", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/api/handlers/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:58:13.124019", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/memory/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:58:18.926431", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/memory/modules/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:58:24.713235", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/memory/modules/trinity.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:58:30.441524", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/memory/modules/agents.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:58:36.233830", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/memory/modules/bank.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:58:41.951548", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/memory/handlers/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:58:47.966298", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/assistant/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:58:53.791759", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/assistant/modules/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:58:59.681337", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/assistant/modules/scheduler.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:59:05.411517", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/assistant/plugins/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:59:11.181205", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/assistant/plugins/telegram.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:59:16.770850", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/assistant/plugins/calendar.py" + ] + } + }, + { + "timestamp": "2026-03-04T23:59:22.619569", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/assistant/plugins/gmail.py" + ] + } + }, + { + "timestamp": "2026-03-05T00:11:18.104636", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/devpulse/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-05T00:11:24.026294", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/devpulse/modules/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-05T00:11:29.903679", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/devpulse/handlers/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-05T00:11:54.488140", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/assistant/handlers/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-05T00:44:33.291818", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/skills/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-05T00:44:39.058273", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/templates/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-05T01:06:01.844785", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-05T01:06:07.457067", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/branch.py" + ] + } + }, + { + "timestamp": "2026-03-05T01:06:13.208909", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/modules/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-05T01:06:19.099506", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/handlers/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-05T01:06:24.686325", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/plugins/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:06:12.783284", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:07:11.598859", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_core/api/tests/test_multi_bot.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:11:53.662677", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:13:10.230925", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:13:16.159710", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:13:22.086712", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:13:27.916690", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:13:33.768974", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:14:17.878738", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/spawn/spawn.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:14:24.073548", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:16:05.150848", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/spawn/tests/__init__.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:16:10.997435", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/spawn/tests/test_spawn.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:22:20.925170", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/spawn/spawn.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:22:26.678040", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:22:32.352983", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:22:38.173047", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py" + ] + } + }, + { + "timestamp": "2026-03-05T13:22:43.987078", + "operation": "checklist_run", + "data": { + "command": "checklist", + "args": [ + "/home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py" + ] + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_verify_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_verify_config.json new file mode 100644 index 00000000..c1a995e0 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_verify_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "standards_verify", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_verify_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_verify_data.json new file mode 100644 index 00000000..f6482476 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_verify_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "standards_verify", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_verify_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_verify_log.json new file mode 100644 index 00000000..87ca1b8f --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/standards_verify_log.json @@ -0,0 +1,799 @@ +[ + { + "timestamp": "2025-11-29T20:29:28.886294", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-11-29T20:29:28.885399" + } + }, + { + "timestamp": "2025-11-29T20:29:28.900538", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 4, + "score": 100 + } + }, + { + "timestamp": "2025-11-29T21:28:28.257674", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-11-29T21:28:28.256789" + } + }, + { + "timestamp": "2025-11-29T21:28:28.273159", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 4, + "score": 100 + } + }, + { + "timestamp": "2025-11-29T21:28:56.316226", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-11-29T21:28:56.315341" + } + }, + { + "timestamp": "2025-11-29T21:28:56.331664", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 4, + "score": 100 + } + }, + { + "timestamp": "2025-12-04T16:38:14.198320", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T16:38:14.196738" + } + }, + { + "timestamp": "2025-12-04T16:38:14.215723", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 4, + "score": 100 + } + }, + { + "timestamp": "2025-12-04T16:39:12.744075", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T16:39:12.743192" + } + }, + { + "timestamp": "2025-12-04T16:39:12.761253", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 4, + "score": 100 + } + }, + { + "timestamp": "2025-12-04T16:41:08.532635", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T16:41:08.531320" + } + }, + { + "timestamp": "2025-12-04T16:41:49.569877", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T16:41:49.568967" + } + }, + { + "timestamp": "2025-12-04T16:42:40.907208", + "operation": "verify_run", + "data": { + "command": "standalone", + "args": [] + } + }, + { + "timestamp": "2025-12-04T16:42:40.909828", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T16:42:40.908567" + } + }, + { + "timestamp": "2025-12-04T16:43:00.018826", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T16:43:00.017445" + } + }, + { + "timestamp": "2025-12-04T16:43:00.035932", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2025-12-04T16:43:23.480217", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T16:43:23.479277" + } + }, + { + "timestamp": "2025-12-04T16:43:23.498477", + "operation": "standards_verify_completed", + "data": { + "passed": 5, + "total": 5, + "score": 100 + } + }, + { + "timestamp": "2025-12-04T17:55:57.878389", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T17:55:57.877382" + } + }, + { + "timestamp": "2025-12-04T17:55:57.896986", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2025-12-04T17:56:32.615603", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T17:56:32.614685" + } + }, + { + "timestamp": "2025-12-04T17:56:32.635224", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2025-12-04T17:58:06.724898", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T17:58:06.723964" + } + }, + { + "timestamp": "2025-12-04T17:58:06.748116", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2025-12-04T17:58:18.685554", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T17:58:18.684584" + } + }, + { + "timestamp": "2025-12-04T17:58:18.706318", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2025-12-04T17:59:35.692529", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T17:59:35.691549" + } + }, + { + "timestamp": "2025-12-04T17:59:35.714887", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2025-12-04T17:59:38.505830", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T17:59:38.504856" + } + }, + { + "timestamp": "2025-12-04T17:59:38.532310", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2025-12-04T18:00:06.410443", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T18:00:06.409374" + } + }, + { + "timestamp": "2025-12-04T18:00:06.439471", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2025-12-04T18:00:07.474369", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T18:00:07.472697" + } + }, + { + "timestamp": "2025-12-04T18:00:07.513166", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2025-12-04T18:01:13.041439", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T18:01:13.040469" + } + }, + { + "timestamp": "2025-12-04T18:01:13.063462", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2025-12-04T18:01:22.561043", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T18:01:22.559859" + } + }, + { + "timestamp": "2025-12-04T18:01:22.583932", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2025-12-04T18:05:25.929031", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T18:05:25.928008" + } + }, + { + "timestamp": "2025-12-04T18:05:25.950898", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2025-12-04T18:05:49.695898", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T18:05:49.694509" + } + }, + { + "timestamp": "2025-12-04T18:05:49.718705", + "operation": "standards_verify_completed", + "data": { + "passed": 5, + "total": 5, + "score": 100 + } + }, + { + "timestamp": "2025-12-04T18:20:58.351737", + "operation": "standards_verify_started", + "data": { + "timestamp": "2025-12-04T18:20:58.350693" + } + }, + { + "timestamp": "2025-12-04T18:20:58.374195", + "operation": "standards_verify_completed", + "data": { + "passed": 5, + "total": 5, + "score": 100 + } + }, + { + "timestamp": "2026-01-31T17:06:20.727202", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-01-31T17:06:20.725277" + } + }, + { + "timestamp": "2026-01-31T17:06:20.750021", + "operation": "standards_verify_completed", + "data": { + "passed": 3, + "total": 5, + "score": 60 + } + }, + { + "timestamp": "2026-01-31T17:07:07.178940", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-01-31T17:07:07.177972" + } + }, + { + "timestamp": "2026-01-31T17:07:07.205542", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2026-01-31T17:10:39.383072", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-01-31T17:10:39.382067" + } + }, + { + "timestamp": "2026-01-31T17:10:39.405119", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2026-02-14T00:35:12.771970", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-14T00:35:12.770515" + } + }, + { + "timestamp": "2026-02-14T00:35:12.794998", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2026-02-14T00:37:05.866845", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-14T00:37:05.865735" + } + }, + { + "timestamp": "2026-02-14T00:37:05.889437", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2026-02-14T00:39:33.864132", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-14T00:39:33.862835" + } + }, + { + "timestamp": "2026-02-14T00:39:33.887534", + "operation": "standards_verify_completed", + "data": { + "passed": 5, + "total": 5, + "score": 100 + } + }, + { + "timestamp": "2026-02-14T00:43:55.015810", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-14T00:43:55.014809" + } + }, + { + "timestamp": "2026-02-14T00:43:55.036766", + "operation": "standards_verify_completed", + "data": { + "passed": 5, + "total": 5, + "score": 100 + } + }, + { + "timestamp": "2026-02-14T00:45:02.556082", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-14T00:45:02.555101" + } + }, + { + "timestamp": "2026-02-14T00:45:02.579315", + "operation": "standards_verify_completed", + "data": { + "passed": 5, + "total": 5, + "score": 100 + } + }, + { + "timestamp": "2026-02-14T00:46:02.996014", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-14T00:46:02.994936" + } + }, + { + "timestamp": "2026-02-14T00:46:03.018528", + "operation": "standards_verify_completed", + "data": { + "passed": 5, + "total": 5, + "score": 100 + } + }, + { + "timestamp": "2026-02-14T17:14:00.842248", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-14T17:14:00.840467" + } + }, + { + "timestamp": "2026-02-14T17:14:00.864211", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2026-02-14T17:57:36.487787", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-14T17:57:36.486815" + } + }, + { + "timestamp": "2026-02-14T17:57:36.507491", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2026-02-20T18:49:38.323989", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-20T18:49:38.322363" + } + }, + { + "timestamp": "2026-02-20T18:49:38.350677", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2026-02-21T15:04:44.193664", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-21T15:04:44.191736" + } + }, + { + "timestamp": "2026-02-21T15:04:44.219518", + "operation": "standards_verify_completed", + "data": { + "passed": 3, + "total": 5, + "score": 60 + } + }, + { + "timestamp": "2026-02-21T18:54:51.367371", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-21T18:54:51.364518" + } + }, + { + "timestamp": "2026-02-21T18:54:51.409697", + "operation": "standards_verify_completed", + "data": { + "passed": 3, + "total": 5, + "score": 60 + } + }, + { + "timestamp": "2026-02-21T19:15:36.273301", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-21T19:15:36.268714" + } + }, + { + "timestamp": "2026-02-21T19:15:36.311839", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2026-02-21T19:17:20.011329", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-21T19:17:19.997699" + } + }, + { + "timestamp": "2026-02-21T19:17:20.049622", + "operation": "standards_verify_completed", + "data": { + "passed": 5, + "total": 5, + "score": 100 + } + }, + { + "timestamp": "2026-02-23T04:24:21.826709", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-23T04:24:21.825071" + } + }, + { + "timestamp": "2026-02-23T04:24:21.850645", + "operation": "standards_verify_completed", + "data": { + "passed": 5, + "total": 5, + "score": 100 + } + }, + { + "timestamp": "2026-02-26T17:22:16.199627", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-26T17:22:16.198058" + } + }, + { + "timestamp": "2026-02-26T17:22:16.225537", + "operation": "standards_verify_completed", + "data": { + "passed": 3, + "total": 5, + "score": 60 + } + }, + { + "timestamp": "2026-02-26T17:28:38.593340", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-26T17:28:38.592378" + } + }, + { + "timestamp": "2026-02-26T17:28:38.615650", + "operation": "standards_verify_completed", + "data": { + "passed": 3, + "total": 5, + "score": 60 + } + }, + { + "timestamp": "2026-02-26T17:28:56.088370", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-26T17:28:56.087424" + } + }, + { + "timestamp": "2026-02-26T17:28:56.110953", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2026-02-26T17:34:31.187684", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-26T17:34:31.186737" + } + }, + { + "timestamp": "2026-02-26T17:34:31.215086", + "operation": "standards_verify_completed", + "data": { + "passed": 5, + "total": 5, + "score": 100 + } + }, + { + "timestamp": "2026-02-26T17:57:10.962103", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-26T17:57:10.961147" + } + }, + { + "timestamp": "2026-02-26T17:57:10.987445", + "operation": "standards_verify_completed", + "data": { + "passed": 5, + "total": 5, + "score": 100 + } + }, + { + "timestamp": "2026-02-26T18:02:31.517053", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-26T18:02:31.515907" + } + }, + { + "timestamp": "2026-02-26T18:02:31.539578", + "operation": "standards_verify_completed", + "data": { + "passed": 5, + "total": 5, + "score": 100 + } + }, + { + "timestamp": "2026-02-26T18:06:10.247167", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-26T18:06:10.246191" + } + }, + { + "timestamp": "2026-02-26T18:06:10.269692", + "operation": "standards_verify_completed", + "data": { + "passed": 5, + "total": 5, + "score": 100 + } + }, + { + "timestamp": "2026-02-27T09:47:30.004823", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-27T09:47:30.002676" + } + }, + { + "timestamp": "2026-02-27T09:47:30.027404", + "operation": "standards_verify_completed", + "data": { + "passed": 4, + "total": 5, + "score": 80 + } + }, + { + "timestamp": "2026-02-27T09:48:17.190839", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-27T09:48:17.189877" + } + }, + { + "timestamp": "2026-02-27T09:48:17.215607", + "operation": "standards_verify_completed", + "data": { + "passed": 5, + "total": 5, + "score": 100 + } + }, + { + "timestamp": "2026-02-27T10:53:55.878353", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-27T10:53:55.877400" + } + }, + { + "timestamp": "2026-02-27T10:53:55.900743", + "operation": "standards_verify_completed", + "data": { + "passed": 5, + "total": 5, + "score": 100 + } + }, + { + "timestamp": "2026-02-27T19:01:56.646666", + "operation": "standards_verify_started", + "data": { + "timestamp": "2026-02-27T19:01:56.645540" + } + }, + { + "timestamp": "2026-02-27T19:01:56.672051", + "operation": "standards_verify_completed", + "data": { + "passed": 5, + "total": 5, + "score": 100 + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/test_cli_errors_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/test_cli_errors_config.json new file mode 100644 index 00000000..80ecc3dc --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/test_cli_errors_config.json @@ -0,0 +1,10 @@ +{ + "module_name": "test_cli_errors", + "version": "0.1.0", + "created": "2025-11-12", + "config": { + "enabled": true, + "log_level": "info", + "max_log_entries": 100 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/test_cli_errors_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/test_cli_errors_data.json new file mode 100644 index 00000000..5b6d8552 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/test_cli_errors_data.json @@ -0,0 +1,9 @@ +{ + "created": "2025-11-12", + "last_updated": "2025-11-12", + "metrics": { + "operations_count": 0, + "success_count": 0, + "error_count": 0 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/test_cli_errors_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/test_cli_errors_log.json new file mode 100644 index 00000000..9fa42430 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/test_cli_errors_log.json @@ -0,0 +1,639 @@ +[ + { + "timestamp": "2025-11-12T22:04:05.325609", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-12T22:04:05.328880", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-12T22:06:14.814082", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-12T22:06:14.817649", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-12T22:17:45.787391", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-12T22:17:45.791544", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-12T22:47:08.755832", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-12T22:47:08.760383", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-12T23:16:48.563949", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-12T23:16:48.571988", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-12T23:17:07.316533", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-12T23:17:07.324315", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-12T23:17:36.128958", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-12T23:17:36.138034", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-12T23:22:30.223600", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-12T23:22:30.235898", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-12T23:46:30.759281", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-12T23:46:30.768284", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-12T23:50:34.607769", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-12T23:50:34.616801", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-12T23:53:57.505298", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-12T23:53:57.517001", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-12T23:54:26.805899", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-12T23:54:26.815344", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:12:27.966029", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:12:27.982160", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:14:11.530672", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:14:11.547517", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:14:29.894917", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:14:29.913026", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:14:52.754477", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:14:52.773289", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:14:57.091457", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:14:57.113636", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:15:28.139466", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:15:28.157198", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:25:43.243306", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:25:43.268960", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:25:43.292321", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:25:43.318490", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:26:41.955007", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:26:41.973818", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:28:00.744566", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:28:00.763195", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:28:47.257996", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:28:47.282062", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:29:54.368778", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:29:54.390566", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:30:11.009994", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:30:11.032063", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:30:12.765236", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:30:12.787141", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:30:14.288716", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:30:14.314541", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:31:25.831748", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:31:25.862958", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T00:32:03.710385", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T00:32:03.734936", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T12:59:04.619003", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T12:59:04.644773", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T13:46:11.205713", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T13:46:11.234590", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T13:46:29.456821", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T13:46:29.491121", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T13:47:03.266141", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T13:47:03.291554", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T21:00:20.795101", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T21:00:31.148086", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T21:00:31.191357", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T21:01:07.823512", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T21:01:07.864088", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T21:01:20.978155", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T21:01:21.016911", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T21:29:32.138317", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T21:29:32.179546", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T21:29:37.193926", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T21:29:37.233872", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T21:29:45.666760", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T21:29:45.712594", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T21:29:48.081670", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T21:29:48.124283", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T21:29:49.706650", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T21:29:49.750672", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + }, + { + "timestamp": "2025-11-13T21:29:51.732013", + "operation": "test_cli_errors_run", + "data": { + "status": "started" + } + }, + { + "timestamp": "2025-11-13T21:29:51.776318", + "operation": "test_cli_errors_run", + "data": { + "status": "completed", + "success": true + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_check_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_check_config.json new file mode 100644 index 00000000..5f0a3106 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_check_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "testing_check", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_check_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_check_data.json new file mode 100644 index 00000000..9766b14e --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_check_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "testing_check", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_check_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_check_log.json new file mode 100644 index 00000000..f2b04056 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_check_log.json @@ -0,0 +1,890 @@ +[ + { + "timestamp": "2025-11-16T17:43:57.632230", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-16T17:43:57.676672", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.679245", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-16T17:43:57.721230", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.724056", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-16T17:43:57.770183", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.772742", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-16T17:43:57.814824", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.817304", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-16T17:43:57.857890", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.860278", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-16T17:43:57.900969", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.903401", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-16T17:43:57.944124", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.946554", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-16T17:43:57.991921", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-16T17:43:57.994526", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-16T17:43:58.037757", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.040329", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-16T17:43:58.093604", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-16T17:43:58.096381", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:51:55.193201", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.195652", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:51:55.241639", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.244353", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:51:55.287247", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.289593", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:51:55.334151", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.336779", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:51:55.379958", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.382499", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:51:55.431558", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.433971", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:51:55.476343", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.479522", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:51:55.519702", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.522183", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:51:55.568478", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.570987", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:51:55.610461", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.612805", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:51:55.658703", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:51:55.661250", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:01.565141", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.567723", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:01.609324", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.611739", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:01.648940", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.651089", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:01.694500", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.697276", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:01.739635", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.742023", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:01.783728", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.786227", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:01.829569", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.832419", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:01.876660", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.879475", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:01.929100", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.931970", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:01.978748", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:01.981093", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:02.030877", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:02.033812", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:07.586069", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.588463", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:07.629296", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.631755", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/api/apps/api.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:07.670488", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.672815", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:07.713556", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.715993", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cli/apps/cli.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:07.757091", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.759558", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/cortex/apps/cortex.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:07.800278", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.803396", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/devpulse/apps/devpulse.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:07.862911", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.865451", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/drone/apps/drone.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:07.907482", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.909874", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/flow/apps/flow.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:07.957921", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py" + } + }, + { + "timestamp": "2025-11-18T17:52:07.960616", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/MEMORY_BANK/apps/modules/rollover.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:08.002684", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py" + } + }, + { + "timestamp": "2025-11-18T17:52:08.005386", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/prax/apps/prax.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T17:52:08.052803", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py" + } + }, + { + "timestamp": "2025-11-18T17:52:08.055790", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/seed/apps/seed.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T20:38:09.540315", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py" + } + }, + { + "timestamp": "2025-11-18T20:38:09.543199", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/modules/backup_core.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-18T20:38:19.589007", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py" + } + }, + { + "timestamp": "2025-11-18T20:38:29.171455", + "operation": "testing_check_started", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py" + } + }, + { + "timestamp": "2025-11-18T20:38:29.173993", + "operation": "testing_check_completed", + "data": { + "module_path": "/home/aipass/aipass_core/backup_system/apps/backup_system.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-21T11:54:28.525104", + "operation": "testing_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:16.506615", + "operation": "testing_check_started", + "data": { + "module_path": "apps/modules/imports_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:57:24.362737", + "operation": "testing_check_started", + "data": { + "module_path": "apps/modules/documentation_standard.py" + } + }, + { + "timestamp": "2025-11-21T11:59:40.720541", + "operation": "testing_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:40.914604", + "operation": "testing_check_started", + "data": { + "module_path": "" + } + }, + { + "timestamp": "2025-11-21T11:59:49.892086", + "operation": "testing_check_started", + "data": { + "module_path": "apps/modules/standards_audit.py" + } + }, + { + "timestamp": "2025-11-21T11:59:49.894880", + "operation": "testing_check_completed", + "data": { + "module_path": "apps/modules/standards_audit.py", + "score": 100, + "passed": true, + "total_checks": 1, + "passed_checks": 1 + } + }, + { + "timestamp": "2025-11-21T11:59:51.032523", + "operation": "testing_check_started", + "data": { + "module_path": "apps/modules/standards_checklist.py" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_standard_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_standard_config.json new file mode 100644 index 00000000..8418f41f --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_standard_config.json @@ -0,0 +1,10 @@ +{ + "module_name": "testing_standard", + "version": "0.1.0", + "created": "2025-11-12", + "config": { + "enabled": true, + "log_level": "info", + "max_log_entries": 100 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_standard_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_standard_data.json new file mode 100644 index 00000000..5b6d8552 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_standard_data.json @@ -0,0 +1,9 @@ +{ + "created": "2025-11-12", + "last_updated": "2025-11-12", + "metrics": { + "operations_count": 0, + "success_count": 0, + "error_count": 0 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_standard_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_standard_log.json new file mode 100644 index 00000000..589d9092 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/testing_standard_log.json @@ -0,0 +1,86 @@ +[ + { + "timestamp": "2025-11-12T19:37:23.861497", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-12T19:44:06.606399", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:27:02.480909", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:27:03.324121", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T12:27:48.681210", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:39:22.503537", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:46:12.378504", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T13:46:59.931745", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:01.436690", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:04.506479", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-13T21:29:06.736718", + "operation": "standard_displayed", + "data": { + "command": "standalone" + } + }, + { + "timestamp": "2025-11-15T10:27:01.735595", + "operation": "standard_displayed", + "data": { + "command": "testing" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/trigger_standard_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/trigger_standard_config.json new file mode 100644 index 00000000..517b6a35 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/trigger_standard_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "trigger_standard", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/trigger_standard_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/trigger_standard_data.json new file mode 100644 index 00000000..5b43c1c1 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/trigger_standard_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "trigger_standard", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/trigger_standard_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/trigger_standard_log.json new file mode 100644 index 00000000..4e001527 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/trigger_standard_log.json @@ -0,0 +1,9 @@ +[ + { + "timestamp": "2025-12-04T12:55:03.532325", + "operation": "standard_displayed", + "data": { + "command": "trigger" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/usage_tracker_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/usage_tracker_config.json new file mode 100644 index 00000000..522546d9 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/usage_tracker_config.json @@ -0,0 +1,9 @@ +{ + "module_name": "usage_tracker", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/usage_tracker_data.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/usage_tracker_data.json new file mode 100644 index 00000000..fb272849 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/usage_tracker_data.json @@ -0,0 +1,8 @@ +{ + "module_name": "usage_tracker", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/usage_tracker_log.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/usage_tracker_log.json new file mode 100644 index 00000000..57fb37b1 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/usage_tracker_log.json @@ -0,0 +1,16 @@ +[ + { + "timestamp": "2025-11-17T00:06:45.473398", + "operation": "usage_stats", + "data": { + "command": "stats" + } + }, + { + "timestamp": "2025-11-17T00:07:02.358882", + "operation": "usage_track", + "data": { + "command": "track" + } + } +] \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/aipass_json/user_config.json b/src/aipass/seedgo/apps/standards/aipass/aipass_json/user_config.json new file mode 100644 index 00000000..2a124411 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/aipass_json/user_config.json @@ -0,0 +1,17 @@ +{ + "version": "1.0.0", + "current_user": "seed", + "users": { + "seed": { + "name": "Seed", + "email_address": "@seed", + "display_name": "Seed", + "mailbox_path": "/home/aipass/seed/ai_mail.local" + } + }, + "settings": { + "timestamp_format": "%Y-%m-%d %H:%M:%S", + "max_inbox_display": 20, + "max_sent_display": 20 + } +} \ No newline at end of file diff --git a/src/aipass/seedgo/apps/standards/aipass/extensions/__init__.py b/src/aipass/seedgo/apps/standards/aipass/extensions/__init__.py new file mode 100644 index 00000000..95322c94 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/extensions/__init__.py @@ -0,0 +1 @@ +# Extensions package - Drop-in extensions for branch functionality diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/__init__.py b/src/aipass/seedgo/apps/standards/aipass/handlers/__init__.py new file mode 100755 index 00000000..130bee80 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/__init__.py @@ -0,0 +1,145 @@ +""" +Seed Handlers - Implementation Layer + +Handlers contain ALL business logic. +Organized by domain for clarity and transportability. + +Security: Cross-branch handler imports are blocked. External branches must use +the module API (seed.apps.modules.*) instead. +""" + +import inspect +from pathlib import Path + +MY_BRANCH = "seed" + + +def _find_real_caller(): + """ + Walk the stack to find the actual file that triggered this import. + + Skips: + - This file (handlers/__init__.py) + - Python's importlib internals + - Frozen modules + + Returns tuple: (file_path, import_line) or (None, None) + """ + stack = inspect.stack() + this_file = str(Path(__file__).resolve()) + + for frame_info in stack: + filename = frame_info.filename + + # Skip this file + if this_file in str(Path(filename).resolve()): + continue + + # Skip Python internals + if filename.startswith("<") or "importlib" in filename: + continue + + # Found a real file - try to get the import line + import_line = None + if frame_info.code_context: + import_line = frame_info.code_context[0].strip() + + return str(Path(filename).resolve()), import_line + + return None, None + + +def _extract_branch_name(filepath: str) -> str: + """Extract branch name from a file path.""" + parts = filepath.split("/") + for i, part in enumerate(parts): + # Seed lives at /home/aipass/seed/ (NOT in aipass_core) + if part == "seed": + return "seed" + # Check for other branches in aipass_core, MEMORY_BANK, Nexus + if part in ("aipass_core", "MEMORY_BANK", "Nexus"): + if i + 1 < len(parts): + return parts[i + 1] + return "unknown" + + +def _guard_branch_access(): + """ + Block cross-branch handler imports. + + Only code from within the 'seed' branch can import these handlers. + External branches must use seed.apps.modules instead. + """ + caller_file, import_line = _find_real_caller() + + # DEBUG: Print what we found + import os + if os.environ.get("AIPASS_DEBUG_GUARD"): + import sys + print(f"[GUARD DEBUG] caller_file = {caller_file}", file=sys.stderr) + print(f"[GUARD DEBUG] import_line = {import_line}", file=sys.stderr) + + if caller_file is None: + # Can't determine caller from real files + # Check if we're being run from command line (external) + # by looking at the raw stack for or + stack = inspect.stack() + for frame in stack: + if frame.filename in ("", ""): + # Try to get the import line from the frame + target_line = "unknown" + if frame.code_context: + target_line = frame.code_context[0].strip() + raise ImportError( + f"\n{'='*60}\n" + f"ACCESS DENIED: Cross-branch handler import blocked\n" + f"{'='*60}\n" + f" Caller: interactive/script\n" + f" Blocked: {target_line}\n" + f"\n" + f" Handlers are internal to their branch.\n" + f" Use the module API instead:\n" + f" from {MY_BRANCH}.apps.modules. import \n" + f"\n" + f" Example:\n" + f" from {MY_BRANCH}.apps.modules.logger import logger\n" + f"\n" + f" For full standards guide:\n" + f" drone @seed handlers\n" + f"{'='*60}" + ) + return # Allow if truly can't determine + + # Check if caller is from our branch + # Seed lives at /home/aipass/seed/ (NOT in aipass_core) + if "/seed/" in caller_file: + return # Same branch, allowed + + # External caller - block access + caller_branch = _extract_branch_name(caller_file) + caller_filename = Path(caller_file).name + blocked_import = import_line if import_line else "unknown" + + raise ImportError( + f"\n{'='*60}\n" + f"ACCESS DENIED: Cross-branch handler import blocked\n" + f"{'='*60}\n" + f" Caller branch: {caller_branch}\n" + f" Caller file: {caller_filename}\n" + f" Blocked: {blocked_import}\n" + f"\n" + f" Handlers are internal to their branch.\n" + f" Use the module API instead:\n" + f" from {MY_BRANCH}.apps.modules. import \n" + f"\n" + f" Example:\n" + f" from {MY_BRANCH}.apps.modules.logger import logger\n" + f"\n" + f" For full standards guide:\n" + f" drone @seed handlers\n" + f"{'='*60}" + ) + + +# Run guard at import time +_guard_branch_access() diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/audit/__init__.py b/src/aipass/seedgo/apps/standards/aipass/handlers/audit/__init__.py new file mode 100644 index 00000000..dee52316 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/audit/__init__.py @@ -0,0 +1,21 @@ +""" +Audit handlers - Implementation handlers for standards audit functionality +""" + +from seed.apps.handlers.audit.discovery import discover_branches +from seed.apps.handlers.audit.branch_audit import audit_branch +from seed.apps.handlers.audit.bypass_audit import audit_bypasses +from seed.apps.handlers.audit.display import ( + print_branch_summary, + print_system_summary, + print_bypass_audit +) + +__all__ = [ + 'discover_branches', + 'audit_branch', + 'audit_bypasses', + 'print_branch_summary', + 'print_system_summary', + 'print_bypass_audit' +] diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/audit/branch_audit.py b/src/aipass/seedgo/apps/standards/aipass/handlers/audit/branch_audit.py new file mode 100644 index 00000000..a7afceb5 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/audit/branch_audit.py @@ -0,0 +1,469 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: branch_audit.py - Branch Audit Handler +# Date: 2025-11-29 +# Version: 1.0.0 +# Category: seed/handlers/audit +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-29): Extracted from standards_audit.py module +# +# CODE STANDARDS: +# - Implementation handler for branch auditing +# - Runs all standard checkers on branch files +# ============================================= + +""" +Branch Audit Handler + +Audits a single branch for standards compliance. +""" + +import sys +from pathlib import Path +from typing import Dict + +# ============================================================================= +# INFRASTRUCTURE SETUP +# ============================================================================= + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +# ============================================================================= +# IMPORTS +# ============================================================================= + +from seed.apps.handlers.standards import imports_check +from seed.apps.handlers.standards import architecture_check +from seed.apps.handlers.standards import naming_check +from seed.apps.handlers.standards import cli_check +from seed.apps.handlers.standards import handlers_check +from seed.apps.handlers.standards import modules_check +from seed.apps.handlers.standards import documentation_check +from seed.apps.handlers.standards import json_structure_check +from seed.apps.handlers.standards import testing_check +from seed.apps.handlers.standards import error_handling_check +from seed.apps.handlers.standards import encapsulation_check +from seed.apps.handlers.standards import trigger_check +from seed.apps.handlers.standards import log_level_check +from seed.apps.handlers.standards import cli_flags_check +from seed.apps.handlers.standards import log_handler_check +from seed.apps.handlers.standards import log_visibility_check +from seed.apps.handlers.standards import permission_flags_check +from seed.apps.handlers.standards import readme_check +from seed.apps.handlers.standards import diagnostics_check +from seed.apps.handlers.config import ignore_handler + + +# ============================================================================= +# PUBLIC API +# ============================================================================= + +def audit_branch(branch: Dict[str, str], bypass_rules: list) -> Dict: + """ + Audit a branch - checks ALL Python files (audit = comprehensive by definition) + + Args: + branch: Dict with 'name', 'path', 'entry_file' + bypass_rules: List of bypass rules for this branch + + Returns: + Dict with audit results and scores + """ + file_path = branch['entry_file'] + branch_path = Path(branch['path']) + + # Audit checks ALL Python files in apps/ (not just entry point) + all_file_results = [] + apps_dir = branch_path / 'apps' + + # Get ignore patterns from handler - don't audit archived/backup/artifact files + audit_ignore_patterns = ignore_handler.get_audit_ignore_patterns() + + if apps_dir.exists(): + for py_file in apps_dir.rglob('*.py'): + # Skip __init__.py + if py_file.name == '__init__.py': + continue + # Skip files in ignored directories + file_path_str = str(py_file).lower() + if any(pattern in file_path_str for pattern in audit_ignore_patterns): + continue + all_file_results.append({ + 'file': str(py_file), + 'name': py_file.name + }) + + # Run all checkers + checkers = { + 'imports': imports_check, + 'architecture': architecture_check, + 'naming': naming_check, + 'cli': cli_check, + 'handlers': handlers_check, + 'modules': modules_check, + 'documentation': documentation_check, + 'json_structure': json_structure_check, + 'testing': testing_check, + 'error_handling': error_handling_check, + 'encapsulation': encapsulation_check, + 'trigger': trigger_check, + 'log_level': log_level_check, + 'cli_flags': cli_flags_check, + 'log_handler': log_handler_check, + 'log_visibility': log_visibility_check, + 'permission_flags': permission_flags_check, + 'readme': readme_check + } + + results = {} + scores = {} + + for name, checker in checkers.items(): + try: + result = checker.check_module(file_path, bypass_rules=bypass_rules) + results[name] = result + scores[name] = result.get('score', 0) + except Exception as e: + results[name] = { + 'passed': False, + 'score': 0, + 'error': str(e) + } + scores[name] = 0 + + # Calculate average score + avg_score = int(sum(scores.values()) / len(scores)) if scores else 0 + + # Check CLI standard on ALL files (audit = comprehensive) + cli_violations = [] + cli_scores = [] + if all_file_results: + for file_info in all_file_results: + try: + cli_result = cli_check.check_module(file_info['file'], bypass_rules=bypass_rules) + cli_scores.append(cli_result.get('score', 0)) + if not cli_result.get('passed', True): + # Found a violation + failed_checks = [c for c in cli_result.get('checks', []) if not c.get('passed', False)] + cli_violations.append({ + 'file': file_info['name'], + 'path': file_info['file'], + 'score': cli_result.get('score', 0), + 'issues': [c.get('message', 'Unknown') for c in failed_checks] + }) + except Exception: + pass + + # Update CLI score to reflect ALL files, not just entry point + if cli_scores: + scores['cli'] = int(sum(cli_scores) / len(cli_scores)) + # Recalculate average with updated CLI score + avg_score = int(sum(scores.values()) / len(scores)) if scores else 0 + + # Check MODULES standard on ALL files in apps/modules/ (thin orchestration + business logic) + modules_violations = [] + modules_scores = [] + modules_dir = Path(branch['path']) / 'apps' / 'modules' + if modules_dir.exists(): + for py_file in modules_dir.glob('*.py'): + if py_file.name == '__init__.py': + continue + try: + modules_result = modules_check.check_module(str(py_file), bypass_rules=bypass_rules) + modules_scores.append(modules_result.get('score', 0)) + # Check for thin orchestration AND business logic violations + for check in modules_result.get('checks', []): + # Capture thin orchestration violations + if check['name'] == 'Thin orchestration' and not check['passed']: + modules_violations.append({ + 'file': py_file.name, + 'path': str(py_file), + 'score': modules_result.get('score', 0), + 'message': check.get('message', 'Unknown') + }) + # Capture business logic violations + elif check['name'] == 'No business logic' and not check['passed']: + modules_violations.append({ + 'file': py_file.name, + 'path': str(py_file), + 'score': modules_result.get('score', 0), + 'message': check.get('message', 'Unknown') + }) + except Exception: + pass + + # Update modules score to reflect ALL module files + if modules_scores: + scores['modules'] = int(sum(modules_scores) / len(modules_scores)) + # Recalculate average with updated modules score + avg_score = int(sum(scores.values()) / len(scores)) if scores else 0 + + # Check ENCAPSULATION on ALL files (cross-branch/package handler imports) + encapsulation_violations = [] + encapsulation_scores = [] + if all_file_results: + for file_info in all_file_results: + try: + encap_result = encapsulation_check.check_module(file_info['file'], bypass_rules=bypass_rules) + encapsulation_scores.append(encap_result.get('score', 0)) + if not encap_result.get('passed', True): + failed_checks = [c for c in encap_result.get('checks', []) if not c.get('passed', False)] + encapsulation_violations.append({ + 'file': file_info['name'], + 'path': file_info['file'], + 'score': encap_result.get('score', 0), + 'issues': [c.get('message', 'Unknown') for c in failed_checks] + }) + except Exception: + pass + + # Update encapsulation score to reflect ALL files + if encapsulation_scores: + scores['encapsulation'] = int(sum(encapsulation_scores) / len(encapsulation_scores)) + avg_score = int(sum(scores.values()) / len(scores)) if scores else 0 + + # Check ERROR_HANDLING on ALL files (3-tier: entry/modules/handlers) + error_handling_violations = [] + error_handling_scores = [] + if all_file_results: + for file_info in all_file_results: + try: + eh_result = error_handling_check.check_module(file_info['file'], bypass_rules=bypass_rules) + eh_score = eh_result.get('score', 0) + # Only count if checks were actually run (not skipped entry points) + if eh_result.get('checks', []): + error_handling_scores.append(eh_score) + if not eh_result.get('passed', True): + failed_checks = [c for c in eh_result.get('checks', []) if not c.get('passed', False)] + if failed_checks: # Only add if there are actual failures + error_handling_violations.append({ + 'file': file_info['name'], + 'path': file_info['file'], + 'score': eh_score, + 'issues': [c.get('message', 'Unknown') for c in failed_checks] + }) + except Exception: + pass + + # Update error_handling score to reflect ALL files + if error_handling_scores: + scores['error_handling'] = int(sum(error_handling_scores) / len(error_handling_scores)) + avg_score = int(sum(scores.values()) / len(scores)) if scores else 0 + + # Check TRIGGER on ALL files (event bus patterns) + trigger_violations = [] + trigger_scores = [] + if all_file_results: + for file_info in all_file_results: + try: + trig_result = trigger_check.check_module(file_info['file'], bypass_rules=bypass_rules) + trig_score = trig_result.get('score', 0) + if trig_result.get('checks', []): + trigger_scores.append(trig_score) + if not trig_result.get('passed', True): + failed_checks = [c for c in trig_result.get('checks', []) if not c.get('passed', False)] + if failed_checks: + trigger_violations.append({ + 'file': file_info['name'], + 'path': file_info['file'], + 'score': trig_score, + 'issues': [c.get('message', 'Unknown') for c in failed_checks] + }) + except Exception: + pass + + # Update trigger score to reflect ALL files + if trigger_scores: + scores['trigger'] = int(sum(trigger_scores) / len(trigger_scores)) + avg_score = int(sum(scores.values()) / len(scores)) if scores else 0 + + # Check LOG_LEVEL on ALL files (ERROR vs WARNING hygiene) + log_level_violations = [] + log_level_scores = [] + if all_file_results: + for file_info in all_file_results: + try: + ll_result = log_level_check.check_module(file_info['file'], bypass_rules=bypass_rules) + ll_score = ll_result.get('score', 0) + if ll_result.get('checks', []): + log_level_scores.append(ll_score) + if not ll_result.get('passed', True): + failed_checks = [c for c in ll_result.get('checks', []) if not c.get('passed', False)] + if failed_checks: + log_level_violations.append({ + 'file': file_info['name'], + 'path': file_info['file'], + 'score': ll_score, + 'issues': [c.get('message', 'Unknown') for c in failed_checks] + }) + except Exception: + pass + + # Update log_level score to reflect ALL files + if log_level_scores: + scores['log_level'] = int(sum(log_level_scores) / len(log_level_scores)) + avg_score = int(sum(scores.values()) / len(scores)) if scores else 0 + + # Check JSON_STRUCTURE on json_handler.py files (for misconfiguration) + # Note: Only check json_handler.py files, not all handlers - handlers legitimately + # read JSON files directly for config/registry purposes. The three-JSON pattern + # (json_handler) is for module state persistence, not all JSON operations. + json_structure_violations = [] + json_structure_scores = [] + if all_file_results: + for file_info in all_file_results: + file_path = file_info['file'] + # Only check json_handler.py files for configuration issues + if 'json_handler' not in file_info['name']: + continue + try: + json_result = json_structure_check.check_module(file_path, bypass_rules=bypass_rules) + json_score = json_result.get('score', 0) + checks = json_result.get('checks', []) + if checks and not any('skipped' in c.get('message', '').lower() for c in checks): + json_structure_scores.append(json_score) + if not json_result.get('passed', True): + failed_checks = [c for c in checks if not c.get('passed', False)] + if failed_checks: + json_structure_violations.append({ + 'file': file_info['name'], + 'path': file_path, + 'score': json_score, + 'issues': [c.get('message', 'Unknown') for c in failed_checks] + }) + except Exception: + pass + + # Update json_structure score if we found json_handler files + if json_structure_scores: + scores['json_structure'] = int(sum(json_structure_scores) / len(json_structure_scores)) + avg_score = int(sum(scores.values()) / len(scores)) if scores else 0 + + # Check LOG_HANDLER on ALL files (RotatingFileHandler required) + log_handler_violations = [] + log_handler_scores = [] + if all_file_results: + for file_info in all_file_results: + try: + lh_result = log_handler_check.check_module(file_info['file'], bypass_rules=bypass_rules) + lh_score = lh_result.get('score', 0) + if lh_result.get('checks', []): + log_handler_scores.append(lh_score) + if not lh_result.get('passed', True): + failed_checks = [c for c in lh_result.get('checks', []) if not c.get('passed', False)] + if failed_checks: + log_handler_violations.append({ + 'file': file_info['name'], + 'path': file_info['file'], + 'score': lh_score, + 'issues': [c.get('message', 'Unknown') for c in failed_checks] + }) + except Exception: + pass + + # Update log_handler score to reflect ALL files + if log_handler_scores: + scores['log_handler'] = int(sum(log_handler_scores) / len(log_handler_scores)) + avg_score = int(sum(scores.values()) / len(scores)) if scores else 0 + + # Check LOG_VISIBILITY on ALL files (prax system_logger required) + log_visibility_violations = [] + log_visibility_scores = [] + if all_file_results: + for file_info in all_file_results: + try: + lv_result = log_visibility_check.check_module(file_info['file'], bypass_rules=bypass_rules) + lv_score = lv_result.get('score', 0) + if lv_result.get('checks', []): + log_visibility_scores.append(lv_score) + if not lv_result.get('passed', True): + failed_checks = [c for c in lv_result.get('checks', []) if not c.get('passed', False)] + if failed_checks: + log_visibility_violations.append({ + 'file': file_info['name'], + 'path': file_info['file'], + 'score': lv_score, + 'issues': [c.get('message', 'Unknown') for c in failed_checks] + }) + except Exception: + pass + + # Update log_visibility score to reflect ALL files + if log_visibility_scores: + scores['log_visibility'] = int(sum(log_visibility_scores) / len(log_visibility_scores)) + avg_score = int(sum(scores.values()) / len(scores)) if scores else 0 + + # Check PERMISSION_FLAGS on ALL files (no --skip-permissions) + permission_flags_violations = [] + permission_flags_scores = [] + if all_file_results: + for file_info in all_file_results: + try: + pf_result = permission_flags_check.check_module(file_info['file'], bypass_rules=bypass_rules) + pf_score = pf_result.get('score', 0) + if pf_result.get('checks', []): + permission_flags_scores.append(pf_score) + if not pf_result.get('passed', True): + failed_checks = [c for c in pf_result.get('checks', []) if not c.get('passed', False)] + if failed_checks: + permission_flags_violations.append({ + 'file': file_info['name'], + 'path': file_info['file'], + 'score': pf_score, + 'issues': [c.get('message', 'Unknown') for c in failed_checks] + }) + except Exception: + pass + + # Update permission_flags score to reflect ALL files + if permission_flags_scores: + scores['permission_flags'] = int(sum(permission_flags_scores) / len(permission_flags_scores)) + avg_score = int(sum(scores.values()) / len(scores)) if scores else 0 + + # Run TYPE ERROR diagnostics on the branch (pyright) + diagnostics_result = diagnostics_check.check_branch(str(branch_path)) + type_errors = diagnostics_result.get('total_errors', 0) + type_error_files = diagnostics_result.get('results', []) + + # Type check score: binary - 100% if 0 errors, 0% if any errors + scores['type_check'] = 100 if type_errors == 0 else 0 + avg_score = int(sum(scores.values()) / len(scores)) if scores else 0 + + # Check for deprecated DOCUMENTS/ directory (should be docs/) + deprecated_patterns = [] + documents_dir = branch_path / 'DOCUMENTS' + if documents_dir.exists() and documents_dir.is_dir(): + deprecated_patterns.append({ + 'type': 'directory', + 'old': 'DOCUMENTS/', + 'new': 'docs/', + 'path': str(documents_dir), + 'message': 'Rename DOCUMENTS/ to docs/ (lowercase, no caps)' + }) + + return { + 'branch': branch, + 'results': results, + 'scores': scores, + 'average': avg_score, + 'cli_violations': cli_violations, + 'modules_violations': modules_violations, + 'encapsulation_violations': encapsulation_violations, + 'error_handling_violations': error_handling_violations, + 'trigger_violations': trigger_violations, + 'log_level_violations': log_level_violations, + 'log_handler_violations': log_handler_violations, + 'log_visibility_violations': log_visibility_violations, + 'permission_flags_violations': permission_flags_violations, + 'cli_flags_violations': [], + 'json_structure_violations': json_structure_violations, + 'deprecated_patterns': deprecated_patterns, + 'files_checked': len(all_file_results), + 'type_errors': type_errors, + 'type_error_files': type_error_files + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/audit/bypass_audit.py b/src/aipass/seedgo/apps/standards/aipass/handlers/audit/bypass_audit.py new file mode 100644 index 00000000..168db7c0 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/audit/bypass_audit.py @@ -0,0 +1,162 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: bypass_audit.py - Bypass Audit Handler +# Date: 2025-11-29 +# Version: 1.0.0 +# Category: seed/handlers/audit +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-29): Extracted from standards_audit.py module +# +# CODE STANDARDS: +# - Implementation handler for bypass auditing +# - Checks bypassed files without bypass rules +# ============================================= + +""" +Bypass Audit Handler + +Audits all bypassed files to see their current state. +""" + +import sys +from pathlib import Path +from typing import List, Dict + +# ============================================================================= +# INFRASTRUCTURE SETUP +# ============================================================================= + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +# ============================================================================= +# IMPORTS +# ============================================================================= + +from seed.apps.handlers.standards import imports_check +from seed.apps.handlers.standards import architecture_check +from seed.apps.handlers.standards import naming_check +from seed.apps.handlers.standards import cli_check +from seed.apps.handlers.standards import handlers_check +from seed.apps.handlers.standards import modules_check +from seed.apps.handlers.standards import documentation_check +from seed.apps.handlers.standards import json_structure_check +from seed.apps.handlers.standards import testing_check +from seed.apps.handlers.standards import error_handling_check +from seed.apps.handlers.standards import encapsulation_check + + +# ============================================================================= +# PUBLIC API +# ============================================================================= + +def audit_bypasses(branches: List[Dict], bypass_rules_map: Dict[str, list]) -> List[Dict]: + """ + Audit all bypassed files WITHOUT applying bypass rules. + Shows actual current state of bypassed files. + + Args: + branches: List of branch dicts + bypass_rules_map: Dict mapping branch name to bypass rules + + Returns: + List of bypass audit results + """ + bypass_results = [] + + for branch in branches: + branch_path = Path(branch['path']) + bypass_rules = bypass_rules_map.get(branch['name'], []) + + if not bypass_rules: + continue + + for bypass in bypass_rules: + file_rel = bypass.get('file', '') + standard = bypass.get('standard', '') + reason = bypass.get('reason', '') + + file_path = branch_path / file_rel + if not file_path.exists(): + bypass_results.append({ + 'branch': branch['name'], + 'file': file_rel, + 'standard': standard, + 'reason': reason, + 'status': 'file_missing', + 'current_score': None, + 'would_pass': None + }) + continue + + # Run the specific standard check WITHOUT bypass + checker = None + if standard == 'imports': + checker = imports_check + elif standard == 'architecture': + checker = architecture_check + elif standard == 'naming': + checker = naming_check + elif standard == 'cli': + checker = cli_check + elif standard == 'handlers': + checker = handlers_check + elif standard == 'modules': + checker = modules_check + elif standard == 'documentation': + checker = documentation_check + elif standard == 'json_structure': + checker = json_structure_check + elif standard == 'testing': + checker = testing_check + elif standard == 'error_handling': + checker = error_handling_check + elif standard == 'encapsulation': + checker = encapsulation_check + + if checker: + try: + # Run WITHOUT bypass rules + result = checker.check_module(str(file_path), bypass_rules=[]) + current_score = result.get('score', 0) + would_pass = result.get('passed', False) + + # Get specific violations + violations = [] + for check in result.get('checks', []): + if not check.get('passed', False): + violations.append(check.get('message', 'Unknown')) + + bypass_results.append({ + 'branch': branch['name'], + 'file': file_rel, + 'standard': standard, + 'reason': reason, + 'status': 'checked', + 'current_score': current_score, + 'would_pass': would_pass, + 'violations': violations + }) + except Exception as e: + bypass_results.append({ + 'branch': branch['name'], + 'file': file_rel, + 'standard': standard, + 'reason': reason, + 'status': 'error', + 'error': str(e) + }) + else: + bypass_results.append({ + 'branch': branch['name'], + 'file': file_rel, + 'standard': standard, + 'reason': reason, + 'status': 'unknown_standard' + }) + + return bypass_results diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/audit/discovery.py b/src/aipass/seedgo/apps/standards/aipass/handlers/audit/discovery.py new file mode 100644 index 00000000..4d224be3 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/audit/discovery.py @@ -0,0 +1,179 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: discovery.py - Branch Discovery Handler +# Date: 2025-11-29 +# Version: 1.0.0 +# Category: seed/handlers/audit +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-29): Extracted from standards_audit.py module +# +# CODE STANDARDS: +# - Implementation handler for branch discovery +# - Reads BRANCH_REGISTRY.json to find all branches +# ============================================= + +""" +Branch Discovery Handler + +Discovers all AIPass branches from BRANCH_REGISTRY.json +""" + +import sys +from pathlib import Path +from typing import List, Dict + +# ============================================================================= +# INFRASTRUCTURE SETUP +# ============================================================================= + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +# ============================================================================= +# IMPORTS +# ============================================================================= + +import json + +# ============================================================================= +# PRIVATE BRANCH DETECTION +# ============================================================================= + +def _is_branch_private(branch_name: str) -> bool: + """Check if branch is in the private registry.""" + registry_path = Path.home() / "PRIVATE_BRANCH_REGISTRY.json" + if not registry_path.exists(): + return False + try: + with open(registry_path, 'r', encoding='utf-8') as f: + registry = json.load(f) + for branch in registry.get("branches", []): + if branch.get("name", "").upper() == branch_name.upper(): + return True + except (json.JSONDecodeError, IOError): + pass + return False + + +# ============================================================================= +# PUBLIC API +# ============================================================================= + +def discover_branches(include_private: bool = False) -> List[Dict[str, str]]: + """ + Discover all AIPass branches from BRANCH_REGISTRY.json + + Args: + include_private: If False (default), excludes branches listed in + PRIVATE_BRANCH_REGISTRY.json. Set True to include them. + + Returns: + List of dicts with 'name', 'path', 'entry_file' keys + """ + branches = [] + registry_path = Path.home() / "BRANCH_REGISTRY.json" + + # Try to read from BRANCH_REGISTRY.json (source of truth) + if registry_path.exists(): + try: + with open(registry_path, 'r', encoding='utf-8') as f: + registry_data = json.load(f) + + for branch in registry_data.get('branches', []): + branch_name = branch.get('name', '') + branch_path = Path(branch.get('path', '')) + + if not branch_path.exists(): + continue + + # Determine entry point based on branch name + entry_file = None + + # Most branches: apps/{branch_name}.py (lowercase) + standard_entry = branch_path / "apps" / f"{branch_name.lower()}.py" + if standard_entry.exists(): + entry_file = standard_entry + + # SEED: apps/seed.py + elif branch_name == 'SEED': + seed_entry = branch_path / "apps" / "seed.py" + if seed_entry.exists(): + entry_file = seed_entry + + # MEMORY_BANK: apps/modules/rollover.py + elif branch_name == 'MEMORY_BANK': + rollover_entry = branch_path / "apps" / "modules" / "rollover.py" + if rollover_entry.exists(): + entry_file = rollover_entry + + # .VSCODE: apps/vscode.py (no dot prefix) + elif branch_name == '.VSCODE': + vscode_entry = branch_path / "apps" / "vscode.py" + if vscode_entry.exists(): + entry_file = vscode_entry + + # Add branch if we found an entry point + if entry_file: + branches.append({ + 'name': branch_name, + 'path': str(branch_path), + 'entry_file': str(entry_file) + }) + + if not include_private: + branches = [b for b in branches if not _is_branch_private(b['name'])] + + return sorted(branches, key=lambda x: x['name']) + + except Exception: + # Fall through to manual discovery + pass + + # Fallback: manual directory scanning (if registry doesn't exist) + + # Check aipass_core branches + aipass_core = Path.home() / "aipass_core" + if aipass_core.exists(): + for branch_dir in aipass_core.iterdir(): + if not branch_dir.is_dir() or branch_dir.name.startswith('.'): + continue + + apps_dir = branch_dir / "apps" + if apps_dir.exists(): + entry_file = apps_dir / f"{branch_dir.name}.py" + if entry_file.exists(): + branches.append({ + 'name': branch_dir.name.upper(), + 'path': str(branch_dir), + 'entry_file': str(entry_file) + }) + + # Check SEED branch + seed_dir = Path.home() / "seed" + seed_entry = seed_dir / "apps" / "seed.py" + if seed_entry.exists(): + branches.append({ + 'name': 'SEED', + 'path': str(seed_dir), + 'entry_file': str(seed_entry) + }) + + # Check MEMORY_BANK + memory_bank_dir = Path.home() / "MEMORY_BANK" + if memory_bank_dir.exists(): + rollover_file = memory_bank_dir / "apps" / "modules" / "rollover.py" + if rollover_file.exists(): + branches.append({ + 'name': 'MEMORY_BANK', + 'path': str(memory_bank_dir), + 'entry_file': str(rollover_file) + }) + + if not include_private: + branches = [b for b in branches if not _is_branch_private(b['name'])] + + return sorted(branches, key=lambda x: x['name']) diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/audit/display.py b/src/aipass/seedgo/apps/standards/aipass/handlers/audit/display.py new file mode 100644 index 00000000..f6a0cafc --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/audit/display.py @@ -0,0 +1,357 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: display.py - Audit Display Handler +# Date: 2025-11-29 +# Version: 1.0.0 +# Category: seed/handlers/audit +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-29): Extracted from standards_audit.py module +# +# CODE STANDARDS: +# - Implementation handler for audit display +# - Formats and prints audit results +# ============================================= + +""" +Audit Display Handler + +Formats and prints audit results to console. +""" + +import sys +from pathlib import Path +from typing import List, Dict +from collections import defaultdict + +# ============================================================================= +# INFRASTRUCTURE SETUP +# ============================================================================= + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +# ============================================================================= +# IMPORTS +# ============================================================================= + +from cli.apps.modules import console, header + + +# ============================================================================= +# PUBLIC API +# ============================================================================= + +def print_branch_summary(audit_result: Dict, system_averages: Dict[str, int] | None = None, overall_system_avg: int = 0): + """Print summary for a single branch - always shows full details (audit = comprehensive)""" + branch = audit_result['branch'] + scores = audit_result['scores'] + avg = audit_result['average'] + cli_violations = audit_result.get('cli_violations', []) + modules_violations = audit_result.get('modules_violations', []) + files_checked = audit_result.get('files_checked', 0) + + # Branch header - always show files checked + console.print() + console.print(f"[bold cyan]{branch['name']}[/bold cyan] [dim]({files_checked} files checked)[/dim]") + + # Scores in a grid + score_items = list(scores.items()) + + # Print in rows of 2 + for i in range(0, len(score_items), 2): + left_name, left_score = score_items[i] + left_icon = "✅" if left_score >= 90 else "⚠️" if left_score >= 75 else "❌" + left_display = f" {left_name.title():15} {left_score:3}% {left_icon}" + + if i + 1 < len(score_items): + right_name, right_score = score_items[i + 1] + right_icon = "✅" if right_score >= 90 else "⚠️" if right_score >= 75 else "❌" + right_display = f" {right_name.title():15} {right_score:3}% {right_icon}" + console.print(f"{left_display} {right_display}") + else: + console.print(left_display) + + # Overall score + overall_icon = "✅" if avg >= 90 else "⚠️" if avg >= 75 else "❌" + console.print(f" [bold]Overall:{' ' * 8} {avg:3}% {overall_icon}[/bold]") + + # Always show failures (audit = comprehensive) + results = audit_result['results'] + for standard_name, result in results.items(): + # Show issues if standard failed OR if it's architecture with violations + has_failures = any(not check.get('passed', False) for check in result.get('checks', [])) + + if not result.get('passed', False) or (standard_name == 'architecture' and has_failures): + # Count failures for architecture + if standard_name == 'architecture' and has_failures: + failed_checks = [c for c in result.get('checks', []) if not c.get('passed', False)] + console.print(f" [yellow]└─ Architecture violations ({len(failed_checks)} missing):[/yellow]") + + # Group by type for clarity + missing_dirs = [c for c in failed_checks if 'Directory:' in c.get('name', '')] + missing_files = [c for c in failed_checks if 'File:' in c.get('name', '')] + + if missing_dirs: + console.print(f" [dim]Missing directories ({len(missing_dirs)}):[/dim]") + for check in missing_dirs[:5]: # Show first 5 + name = check.get('name', '').replace('Directory: ', '') + console.print(f" [red]✗[/red] {name}") + if len(missing_dirs) > 5: + console.print(f" [dim]... and {len(missing_dirs) - 5} more[/dim]") + + if missing_files: + console.print(f" [dim]Missing files ({len(missing_files)}):[/dim]") + for check in missing_files[:5]: # Show first 5 + name = check.get('name', '').replace('File: ', '') + console.print(f" [red]✗[/red] {name}") + if len(missing_files) > 5: + console.print(f" [dim]... and {len(missing_files) - 5} more[/dim]") + else: + # Non-architecture failures - show as before + console.print(f" [red]└─ {standard_name.title()} issues:[/red]") + for check in result.get('checks', []): + if not check.get('passed', False): + console.print(f" [dim]• {check.get('message', 'Unknown error')}[/dim]") + + # Always show CLI violations (audit = comprehensive) + # Use absolute paths for reliable VS Code clickability + if cli_violations: + console.print() + console.print(f" [bold red]CLI VIOLATIONS ({len(cli_violations)} files):[/bold red]") + for violation in cli_violations: + console.print(f" [red]✗[/red] {violation['path']} [dim](score: {violation['score']}%)[/dim]") + for issue in violation['issues']: + console.print(f" [dim]• {issue}[/dim]") + elif files_checked > 0 and not cli_violations: + console.print(f" [green]✓ All {files_checked} files pass CLI standard[/green]") + + # Show MODULES violations (business logic in modules) + if modules_violations: + console.print() + console.print(f" [bold red]MODULES VIOLATIONS ({len(modules_violations)} files):[/bold red]") + for violation in modules_violations: + console.print(f" [red]✗[/red] {violation['path']} [dim](score: {violation['score']}%)[/dim]") + console.print(f" [dim]• {violation['message']}[/dim]") + + # Show ENCAPSULATION violations (cross-branch/package handler imports) + encapsulation_violations = audit_result.get('encapsulation_violations', []) + if encapsulation_violations: + console.print() + console.print(f" [bold red]ENCAPSULATION VIOLATIONS ({len(encapsulation_violations)} files):[/bold red]") + for violation in encapsulation_violations: + console.print(f" [red]✗[/red] {violation['path']} [dim](score: {violation['score']}%)[/dim]") + for issue in violation.get('issues', []): + console.print(f" [dim]• {issue}[/dim]") + + # Show ERROR_HANDLING violations (3-tier: entry/modules/handlers) + error_handling_violations = audit_result.get('error_handling_violations', []) + if error_handling_violations: + console.print() + console.print(f" [bold red]ERROR_HANDLING VIOLATIONS ({len(error_handling_violations)} files):[/bold red]") + for violation in error_handling_violations: + console.print(f" [red]✗[/red] {violation['path']} [dim](score: {violation['score']}%)[/dim]") + for issue in violation.get('issues', []): + console.print(f" [dim]• {issue}[/dim]") + + # Show TRIGGER violations (event bus patterns in handlers) + trigger_violations = audit_result.get('trigger_violations', []) + if trigger_violations: + console.print() + console.print(f" [bold red]TRIGGER VIOLATIONS ({len(trigger_violations)} files):[/bold red]") + for violation in trigger_violations: + console.print(f" [red]✗[/red] {violation['path']} [dim](score: {violation['score']}%)[/dim]") + for issue in violation.get('issues', []): + console.print(f" [dim]• {issue}[/dim]") + + # Show LOG_LEVEL violations (ERROR vs WARNING hygiene) + log_level_violations = audit_result.get('log_level_violations', []) + if log_level_violations: + console.print() + console.print(f" [bold red]LOG_LEVEL VIOLATIONS ({len(log_level_violations)} files):[/bold red]") + for violation in log_level_violations: + console.print(f" [red]✗[/red] {violation['path']} [dim](score: {violation['score']}%)[/dim]") + for issue in violation.get('issues', []): + console.print(f" [dim]• {issue}[/dim]") + + # Show LOG_VISIBILITY violations (raw getLogger without prax) + log_visibility_violations = audit_result.get('log_visibility_violations', []) + if log_visibility_violations: + console.print() + console.print(f" [bold red]LOG_VISIBILITY VIOLATIONS ({len(log_visibility_violations)} files):[/bold red]") + for violation in log_visibility_violations: + console.print(f" [red]✗[/red] {violation['path']} [dim](score: {violation['score']}%)[/dim]") + for issue in violation.get('issues', []): + console.print(f" [dim]• {issue}[/dim]") + + # Show JSON_STRUCTURE violations (json_handler misconfiguration) + json_structure_violations = audit_result.get('json_structure_violations', []) + if json_structure_violations: + console.print() + console.print(f" [bold red]JSON_STRUCTURE VIOLATIONS ({len(json_structure_violations)} files):[/bold red]") + for violation in json_structure_violations: + console.print(f" [red]✗[/red] {violation['path']} [dim](score: {violation['score']}%)[/dim]") + for issue in violation.get('issues', []): + console.print(f" [dim]• {issue}[/dim]") + + # Show TYPE ERRORS (pyright diagnostics) + type_errors = audit_result.get('type_errors', 0) + type_error_files = audit_result.get('type_error_files', []) + if type_errors > 0: + console.print() + console.print(f" [bold red]TYPE ERRORS ({type_errors} errors):[/bold red]") + for file_result in type_error_files[:10]: # Top 10 files + if file_result.get('errors', 0) > 0: + console.print(f" [red]✗[/red] {file_result['file']} [dim]({file_result['errors']} errors)[/dim]") + for diag in file_result.get('diagnostics', [])[:3]: # Top 3 per file + msg = diag.get('message', '')[:60] + console.print(f" [dim]L{diag.get('line', '?')}: {msg}[/dim]") + elif files_checked > 0: + console.print(f" [green]✓[/green] No type errors") + + # Show DEPRECATED PATTERNS (DOCUMENTS/ → docs/) + deprecated_patterns = audit_result.get('deprecated_patterns', []) + if deprecated_patterns: + console.print() + console.print(f" [bold yellow]DEPRECATED PATTERNS ({len(deprecated_patterns)}):[/bold yellow]") + for pattern in deprecated_patterns: + console.print(f" [yellow]⚠[/yellow] {pattern['path']}") + console.print(f" [dim]→ {pattern['message']}[/dim]") + + +def print_system_summary(audit_results: List[Dict]): + """Print system-wide summary with standard averages""" + total_branches = len(audit_results) + avg_compliance = int(sum(r['average'] for r in audit_results) / total_branches) if total_branches else 0 + + excellent = sum(1 for r in audit_results if r['average'] >= 90) + good = sum(1 for r in audit_results if 75 <= r['average'] < 90) + needs_work = sum(1 for r in audit_results if r['average'] < 75) + + # Calculate total type errors + total_type_errors = sum(r.get('type_errors', 0) for r in audit_results) + branches_with_type_errors = sum(1 for r in audit_results if r.get('type_errors', 0) > 0) + + console.print() + console.print("─" * 70) + console.print("[bold]SYSTEM SUMMARY:[/bold]") + console.print(f" Total branches: {total_branches}") + console.print(f" Average compliance: {avg_compliance}%") + console.print(f" Branches ≥90%: {excellent} ✅") + console.print(f" Branches 75-89%: {good} ⚠️") + console.print(f" Branches <75%: {needs_work} ❌") + if total_type_errors > 0: + console.print(f" [red]Type errors: {total_type_errors} ({branches_with_type_errors} branches)[/red]") + else: + console.print(f" Type errors: [green]0 ✓[/green]") + console.print() + + # Calculate standard averages + standard_scores = defaultdict(list) + for result in audit_results: + for standard, score in result['scores'].items(): + standard_scores[standard].append(score) + + standard_averages = { + standard: int(sum(scores) / len(scores)) + for standard, scores in standard_scores.items() + } + + # Print standard averages section + console.print("[bold]STANDARD AVERAGES:[/bold]") + standard_items = sorted(standard_averages.items(), key=lambda x: x[0]) + + # Print in rows of 2 + for i in range(0, len(standard_items), 2): + left_name, left_avg = standard_items[i] + left_icon = "✅" if left_avg >= 90 else "⚠️" if left_avg >= 75 else "❌" + left_display = f" {left_name.title():15} {left_avg:3}% {left_icon}" + + if i + 1 < len(standard_items): + right_name, right_avg = standard_items[i + 1] + right_icon = "✅" if right_avg >= 90 else "⚠️" if right_avg >= 75 else "❌" + right_display = f" {right_name.title():15} {right_avg:3}% {right_icon}" + console.print(f"{left_display} {right_display}") + else: + console.print(left_display) + + console.print() + + # Top improvement areas + top_issues = sorted(standard_averages.items(), key=lambda x: x[1])[:3] + + if top_issues: + console.print("[bold]TOP IMPROVEMENT AREAS:[/bold]") + for i, (standard, avg_score) in enumerate(top_issues, 1): + branches_failing = sum(1 for r in audit_results if r['scores'].get(standard, 100) < 75) + console.print(f" {i}. {standard.title():15} (avg: {avg_score}%, {branches_failing} branches <75%)") + + console.print("─" * 70) + console.print() + + +def print_bypass_audit(bypass_results: List[Dict]): + """Print bypass audit results""" + if not bypass_results: + console.print("[green]No bypasses configured in any branch[/green]") + return + + console.print() + header("BYPASS AUDIT - Current State of Bypassed Files") + console.print() + + # Group by branch + by_branch = defaultdict(list) + for result in bypass_results: + by_branch[result['branch']].append(result) + + removable_count = 0 + total_count = len(bypass_results) + + for branch_name, results in sorted(by_branch.items()): + console.print(f"[bold cyan]{branch_name}[/bold cyan] ({len(results)} bypass{'es' if len(results) > 1 else ''})") + + for r in results: + file_name = r['file'] + standard = r['standard'] + reason = r['reason'] + status = r['status'] + + if status == 'file_missing': + console.print(f" [red]✗[/red] {file_name} [{standard}]") + console.print(f" [red]FILE MISSING - bypass can be removed[/red]") + removable_count += 1 + elif status == 'checked': + score = r['current_score'] + would_pass = r['would_pass'] + + if would_pass: + console.print(f" [green]✓[/green] {file_name} [{standard}] → {score}%") + console.print(f" [green]PASSES NOW - bypass can be removed![/green]") + console.print(f" [dim]Reason was: {reason}[/dim]") + removable_count += 1 + else: + console.print(f" [yellow]⚠[/yellow] {file_name} [{standard}] → {score}%") + console.print(f" [dim]Reason: {reason}[/dim]") + for v in r.get('violations', [])[:3]: + console.print(f" [dim]• {v}[/dim]") + elif status == 'error': + console.print(f" [red]✗[/red] {file_name} [{standard}]") + console.print(f" [red]Error: {r.get('error', 'Unknown')}[/red]") + else: + console.print(f" [dim]?[/dim] {file_name} [{standard}]") + console.print(f" [dim]Unknown standard or status[/dim]") + + console.print() + + # Summary + console.print("─" * 70) + console.print(f"[bold]BYPASS SUMMARY:[/bold]") + console.print(f" Total bypasses: {total_count}") + console.print(f" Can be removed: {removable_count} [green]{'← clean these up!' if removable_count > 0 else ''}[/green]") + console.print(f" Still needed: {total_count - removable_count}") + console.print("─" * 70) + console.print() diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/config/__init__.py b/src/aipass/seedgo/apps/standards/aipass/handlers/config/__init__.py new file mode 100644 index 00000000..176ee3e5 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/config/__init__.py @@ -0,0 +1,24 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: __init__.py - Config handlers package +# Date: 2025-11-25 +# Version: 1.0.0 +# Category: handlers +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-25): Initial creation +# * Config handlers package initialization +# +# CODE STANDARDS: +# - Follow seed 3-layer architecture +# - Handlers must be independent and transportable +# - No cross-handler imports except within same domain +# ============================================= + +""" +Config Handlers Package + +Contains configuration handlers for the Seed branch. +""" diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/config/ignore_handler.py b/src/aipass/seedgo/apps/standards/aipass/handlers/config/ignore_handler.py new file mode 100644 index 00000000..b85f7a96 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/config/ignore_handler.py @@ -0,0 +1,263 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: ignore_handler.py - Business logic detection ignore patterns +# Date: 2025-11-25 +# Version: 1.0.0 +# Category: handlers +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-25): Initial creation +# * Provides ignore patterns for business logic detection +# * Filters out known acceptable variable patterns +# * Minimal initial pattern set - expand as needed +# +# CODE STANDARDS: +# - Follow seed 3-layer architecture +# - Handlers must be independent and transportable +# - No cross-handler imports except within same domain +# ============================================= + +""" +Business Logic Detection Ignore Handler + +Provides ignore patterns for the modules checker to skip known acceptable patterns +in business logic detection. Helps reduce false positives. + +Pure configuration with helper functions for pattern access and filtering. +""" + +# ============================================= +# IMPORTS +# ============================================= + +from pathlib import Path +from typing import List, Set, Optional +import fnmatch + +# ============================================= +# AIPASS_ROOT PATTERN +# ============================================= + +AIPASS_ROOT = Path.home() + +# ============================================= +# IGNORE PATTERNS +# ============================================= + +# Variable names to ignore in business logic detection +# Start minimal - add patterns as we discover false positives +IGNORE_PATTERNS = [ + # Common configuration/constant patterns + # "CONFIG_*", # Example: CONFIG_FILE, CONFIG_PATH + # "*_CONFIG", # Example: DATABASE_CONFIG, API_CONFIG + + # Common metadata patterns + # "METADATA", + # "*_METADATA", + + # Version/build info patterns + # "VERSION", + # "BUILD_*", + + # Add patterns here as we discover false positives +] + +# File-specific exceptions +# Format: {file_path_pattern: [variable_names]} +FILE_SPECIFIC_IGNORES = { + # Example: "*/config.py": ["DATABASE_URL", "API_KEY"], +} + +# ============================================= +# TEMPLATE IGNORE PATTERNS +# ============================================= + +# Template files that exist in Cortex template but aren't required in branches +# Used by architecture_check.py when checking template baseline +TEMPLATE_IGNORE_PATTERNS = [ + '.gitkeep', # Git placeholder files - not actual requirements + 'notepad.md', # Optional scratch file + '.gitignore', # Optional - branches inherit from root +] + +# ============================================= +# AUDIT IGNORE PATTERNS +# ============================================= + +# Patterns for files/directories to skip during audit +# Used by standards_audit.py +AUDIT_IGNORE_PATTERNS = [ + '__pycache__', + '/.archive/', # Temp archive directories + '/.backup/', # Temp backup directories + '/backups/', # Actual backup storage (backup_system/backups/) + '/artifacts/', # Build artifacts + '.temp', # Temp files + '.old', # Old files + '/deprecated/', # Deprecated code + '/test/' # Test directories +] + +# ============================================= +# DEPRECATED PATTERNS +# ============================================= + +# Patterns that have been removed from the system +# Used by standards_verify.py to detect leftover usage +DEPRECATED_PATTERNS = { + "--verbose": "removed from audit (v0.4.0)", + "--full": "removed from audit (v0.4.0)" +} + +# ============================================= +# HELPER FUNCTIONS +# ============================================= + +def get_ignore_patterns() -> List[str]: + """Return list of variable names to ignore in business logic detection + + Returns: + Copy of ignore patterns list + + Example: + patterns = get_ignore_patterns() + for pattern in patterns: + if fnmatch.fnmatch(var_name, pattern): + # Skip this variable + """ + return IGNORE_PATTERNS.copy() + + +def get_template_ignore_patterns() -> List[str]: + """Return list of template files to skip in architecture baseline check + + Returns: + Copy of template ignore patterns list + + Example: + patterns = get_template_ignore_patterns() + if template_name in patterns: + # Skip this template file + """ + return TEMPLATE_IGNORE_PATTERNS.copy() + + +def get_audit_ignore_patterns() -> List[str]: + """Return list of patterns for files/directories to skip during audit + + Returns: + Copy of audit ignore patterns list + + Example: + patterns = get_audit_ignore_patterns() + if any(pattern in file_path for pattern in patterns): + # Skip this file + """ + return AUDIT_IGNORE_PATTERNS.copy() + + +def get_deprecated_patterns() -> dict: + """Return dict of deprecated patterns and their removal reasons + + Returns: + Copy of deprecated patterns dict + + Example: + patterns = get_deprecated_patterns() + for pattern, reason in patterns.items(): + # Check if pattern exists in codebase + """ + return DEPRECATED_PATTERNS.copy() + + +def should_ignore_variable(var_name: str, file_path: str = "") -> bool: + """Check if a variable should be ignored in business logic detection + + Checks both global ignore patterns and file-specific exceptions. + + Args: + var_name: Variable name to check + file_path: Optional file path for file-specific rules + + Returns: + True if variable should be ignored, False otherwise + + Example: + if should_ignore_variable("CONFIG_FILE", "/path/to/module.py"): + # Skip this variable + """ + # Check global ignore patterns + for pattern in IGNORE_PATTERNS: + if fnmatch.fnmatch(var_name, pattern): + return True + + # Check file-specific ignores if file_path provided + if file_path: + for path_pattern, var_patterns in FILE_SPECIFIC_IGNORES.items(): + if fnmatch.fnmatch(file_path, path_pattern): + for var_pattern in var_patterns: + if fnmatch.fnmatch(var_name, var_pattern): + return True + + return False + + +def add_ignore_pattern(pattern: str) -> None: + """Add a new ignore pattern to the list + + Helper function for testing or dynamic pattern addition. + + Args: + pattern: Glob-style pattern to add (e.g., "CONFIG_*") + + Example: + add_ignore_pattern("TEMP_*") + """ + if pattern not in IGNORE_PATTERNS: + IGNORE_PATTERNS.append(pattern) + + +def add_file_specific_ignore(file_pattern: str, var_patterns: List[str]) -> None: + """Add file-specific ignore patterns + + Helper function for testing or dynamic pattern addition. + + Args: + file_pattern: File path pattern (e.g., "*/config.py") + var_patterns: List of variable patterns for this file + + Example: + add_file_specific_ignore("*/settings.py", ["SECRET_KEY", "DATABASE_URL"]) + """ + if file_pattern in FILE_SPECIFIC_IGNORES: + FILE_SPECIFIC_IGNORES[file_pattern].extend(var_patterns) + else: + FILE_SPECIFIC_IGNORES[file_pattern] = var_patterns + + +def get_file_specific_ignores(file_path: str) -> List[str]: + """Get all variable patterns that should be ignored for a specific file + + Args: + file_path: File path to check + + Returns: + List of variable patterns to ignore for this file + + Example: + ignores = get_file_specific_ignores("/path/to/config.py") + """ + patterns = [] + for path_pattern, var_patterns in FILE_SPECIFIC_IGNORES.items(): + if fnmatch.fnmatch(file_path, path_pattern): + patterns.extend(var_patterns) + return patterns + + +# ============================================= +# MODULE INITIALIZATION +# ============================================= + +# No initialization needed - pure configuration diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/diagnostics/__init__.py b/src/aipass/seedgo/apps/standards/aipass/handlers/diagnostics/__init__.py new file mode 100644 index 00000000..4a3908da --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/diagnostics/__init__.py @@ -0,0 +1,31 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: __init__.py - Diagnostics Handlers Package +# Date: 2025-11-29 +# Version: 0.1.0 +# Category: seed/handlers/diagnostics +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-29): Initial implementation - exports discovery and runner +# +# CODE STANDARDS: +# - Handlers implement, modules orchestrate +# ============================================= + +""" +Diagnostics Handlers Package + +Exports: + - discover_branches: Discover all branches from registry + - run_branch_diagnostics: Run diagnostics on a single branch +""" + +from seed.apps.handlers.diagnostics.discovery import discover_branches +from seed.apps.handlers.diagnostics.runner import run_branch_diagnostics + +__all__ = [ + 'discover_branches', + 'run_branch_diagnostics', +] diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/diagnostics/discovery.py b/src/aipass/seedgo/apps/standards/aipass/handlers/diagnostics/discovery.py new file mode 100644 index 00000000..daf21540 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/diagnostics/discovery.py @@ -0,0 +1,49 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: discovery.py - Branch Discovery Handler +# Date: 2025-11-29 +# Version: 0.1.0 +# Category: seed/handlers/diagnostics +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-29): Initial implementation - branch discovery +# +# CODE STANDARDS: +# - Handlers implement, modules orchestrate +# ============================================= + +""" +Branch Discovery Handler + +Discovers all branches from the registry for diagnostics scanning. +""" + +from typing import Dict, List + + +def discover_branches() -> List[Dict]: + """ + Discover all branches from registry + + Returns: + List of dicts with 'name' and 'path' keys + """ + import sys + from pathlib import Path + + # Infrastructure + AIPASS_ROOT = Path.home() / "aipass_core" + sys.path.insert(0, str(AIPASS_ROOT)) + sys.path.insert(0, str(Path.home())) + + # Import at function level to avoid orchestration at module level + from drone.apps.modules import get_all_branches + + try: + branches = get_all_branches() + return branches + except Exception as e: + print(f"Error discovering branches: {e}") + return [] diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/diagnostics/runner.py b/src/aipass/seedgo/apps/standards/aipass/handlers/diagnostics/runner.py new file mode 100644 index 00000000..02018a07 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/diagnostics/runner.py @@ -0,0 +1,53 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: runner.py - Branch Diagnostics Runner Handler +# Date: 2025-11-29 +# Version: 0.1.0 +# Category: seed/handlers/diagnostics +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-29): Initial implementation - run diagnostics on branches +# +# CODE STANDARDS: +# - Handlers implement, modules orchestrate +# ============================================= + +""" +Branch Diagnostics Runner Handler + +Runs diagnostics checks on individual branches. +""" + +import sys +from pathlib import Path +from typing import Dict + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def run_branch_diagnostics(branch: Dict) -> Dict: + """ + Run diagnostics on a single branch + + Args: + branch: Dict with 'name', 'path' + + Returns: + Dict with diagnostics results + """ + # Import diagnostics checker + from seed.apps.handlers.standards.diagnostics_check import check_branch + + branch_name = branch.get('name', 'UNKNOWN') + branch_path = branch.get('path', '') + + result = check_branch(branch_path) + result['branch'] = branch_name + result['path'] = branch_path + + return result diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/file/__init__.py b/src/aipass/seedgo/apps/standards/aipass/handlers/file/__init__.py new file mode 100644 index 00000000..eccd84f1 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/file/__init__.py @@ -0,0 +1 @@ +# File handlers package diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/file/file_handler.py b/src/aipass/seedgo/apps/standards/aipass/handlers/file/file_handler.py new file mode 100644 index 00000000..d762c20c --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/file/file_handler.py @@ -0,0 +1,63 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: file_handler.py - Text File Reading Handler +# Date: 2025-11-27 +# Version: 0.1.0 +# Category: seed/handlers/file +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-27): Initial implementation - read_text function +# +# CODE STANDARDS: +# - Handler provides file reading abstraction +# - Used by modules needing to read non-JSON text files +# ============================================= + +""" +File Handler + +Provides text file reading abstraction for modules. +Keeps direct file operations in handlers, not modules. +""" + +import sys +from pathlib import Path +from typing import Optional + +def read_file(file_path: str, encoding: str = 'utf-8') -> Optional[str]: + """ + Read text content from a file. + + Args: + file_path: Path to the file to read + encoding: File encoding (default: utf-8) + + Returns: + File content as string, or None if file not found/error + (caller module handles logging) + """ + try: + path = Path(file_path) + if not path.exists(): + return None + + with open(path, 'r', encoding=encoding) as f: + return f.read() + + except Exception: + return None + + +def file_exists(file_path: str) -> bool: + """ + Check if a file exists. + + Args: + file_path: Path to check + + Returns: + True if file exists, False otherwise + """ + return Path(file_path).exists() diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/json/__init__.py b/src/aipass/seedgo/apps/standards/aipass/handlers/json/__init__.py new file mode 100644 index 00000000..f44e47b3 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/json/__init__.py @@ -0,0 +1 @@ +"""JSON Handlers - Universal JSON operations for Seed branch""" diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/json/json_handler.py b/src/aipass/seedgo/apps/standards/aipass/handlers/json/json_handler.py new file mode 100755 index 00000000..209c4083 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/json/json_handler.py @@ -0,0 +1,267 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: json_handler.py - JSON Auto-Creating Handler +# Date: 2025-11-21 +# Version: 1.1.0 +# Category: seed/handlers/json +# +# CHANGELOG (Max 5 entries): +# - v1.1.0 (2025-11-21): Refactored to comply with error handling +# - v1.0.0 (2025-11-13): Initial JSON auto-creation system +# +# CODE STANDARDS: +# - Pure functions with proper error raising +# - No Prax imports (handler tier 3) +# ============================================= + +import json +from pathlib import Path +from datetime import datetime +from typing import Dict, List, Any, Optional +import sys +import inspect + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) + +# Constants +SEED_ROOT = Path.home() / "seed" +SEED_JSON_DIR = SEED_ROOT / "seed_json" +JSON_TEMPLATES_DIR = SEED_ROOT / "apps" / "json_templates" + + +def _get_caller_module_name() -> str: + """ + Auto-detect calling module name from call stack + + Returns: + Module name (e.g., "imports_standard" from imports_standard.py) + """ + stack = inspect.stack() + # Skip frames: [0]=this function, [1]=log_operation, [2]=actual caller + if len(stack) > 2: + caller_frame = stack[2] + caller_path = Path(caller_frame.filename) + module_name = caller_path.stem + + # Validate module name + if module_name and not module_name.startswith('_'): + return module_name + + # Fallback + return "unknown" + + +def load_template(json_type: str, module_name: str) -> Any: + """Load JSON template from template file""" + template_path = JSON_TEMPLATES_DIR / "default" / f"{json_type}.json" + + if not template_path.exists(): + raise FileNotFoundError(f"Template not found: {template_path}") + + with open(template_path, 'r', encoding='utf-8') as f: + template = json.load(f) + + # Replace placeholders + template_str = json.dumps(template) + template_str = template_str.replace("{{MODULE_NAME}}", module_name) + template_str = template_str.replace("{{TIMESTAMP}}", datetime.now().date().isoformat()) + + return json.loads(template_str) + + +def validate_json_structure(data: Any, json_type: str) -> bool: + """Validate JSON structure matches expected type""" + if json_type == "config": + if not isinstance(data, dict): + return False + required = ["module_name", "version", "config"] + return all(key in data for key in required) + + elif json_type == "data": + if not isinstance(data, dict): + return False + required = ["created", "last_updated"] + return all(key in data for key in required) + + elif json_type == "log": + return isinstance(data, list) + + return False + + +def get_json_path(module_name: str, json_type: str) -> Path: + """Get path for module JSON file""" + filename = f"{module_name}_{json_type}.json" + return SEED_JSON_DIR / filename + + +def ensure_json_exists(module_name: str, json_type: str) -> bool: + """Ensure JSON file exists, create from template if missing""" + SEED_JSON_DIR.mkdir(parents=True, exist_ok=True) + + json_path = get_json_path(module_name, json_type) + + if json_path.exists(): + try: + with open(json_path, 'r', encoding='utf-8') as f: + data = json.load(f) + + if validate_json_structure(data, json_type): + return True + # If corrupted, fall through to regenerate + except Exception: + # If unreadable, fall through to regenerate + pass + + template = load_template(json_type, module_name) + + with open(json_path, 'w', encoding='utf-8') as f: + json.dump(template, f, indent=2, ensure_ascii=False) + return True + + +def load_json(module_name: str, json_type: str) -> Optional[Any]: + """Load JSON file, auto-create if missing""" + if not ensure_json_exists(module_name, json_type): + return None + + json_path = get_json_path(module_name, json_type) + + with open(json_path, 'r', encoding='utf-8') as f: + return json.load(f) + + +def save_json(module_name: str, json_type: str, data: Any) -> bool: + """Save JSON file""" + json_path = get_json_path(module_name, json_type) + + if not validate_json_structure(data, json_type): + raise ValueError(f"Invalid structure for {json_type} JSON") + + if json_type == "data" and isinstance(data, dict): + data["last_updated"] = datetime.now().date().isoformat() + + with open(json_path, 'w', encoding='utf-8') as f: + json.dump(data, f, indent=2, ensure_ascii=False) + return True + + +def ensure_module_jsons(module_name: str) -> bool: + """Ensure all 3 JSON files exist for a module""" + ensure_json_exists(module_name, "config") + ensure_json_exists(module_name, "data") + ensure_json_exists(module_name, "log") + return True + + +def log_operation(operation: str, data: Dict[str, Any] | None = None, module_name: str | None = None) -> bool: + """ + Add entry to module log with automatic rotation + + Auto-detects calling module if module_name not provided. + Implements config-controlled log limits to prevent unbounded growth. + When max_log_entries is reached, removes oldest entries (FIFO). + + Args: + operation: Operation name to log + data: Optional data dict + module_name: Optional module name (auto-detected if not provided) + + Returns: + True if successful, False otherwise + """ + # Auto-detect module name if not provided + if module_name is None: + module_name = _get_caller_module_name() + + ensure_module_jsons(module_name) + + # Load config to get max_log_entries + config = load_json(module_name, "config") + max_entries = 100 # Default + if config and "config" in config: + max_entries = config["config"].get("max_log_entries", 100) + + # Load existing log + log = load_json(module_name, "log") + if log is None: + log = [] + + # Create new entry + entry = { + "timestamp": datetime.now().isoformat(), + "operation": operation + } + + if data: + entry["data"] = data # type: ignore[assignment] + + # Add new entry + log.append(entry) + + # Rotate if exceeds max (keep most recent entries) + if len(log) > max_entries: + log = log[-max_entries:] + + return save_json(module_name, "log", log) + + +def increment_counter(module_name: str, counter_name: str, amount: int = 1) -> bool: + """Increment a counter in data JSON""" + ensure_module_jsons(module_name) + + data = load_json(module_name, "data") + if data is None: + return False + + if counter_name not in data: + data[counter_name] = 0 + + data[counter_name] += amount + + return save_json(module_name, "data", data) + + +def update_data_metrics(module_name: str, **metrics) -> bool: + """Update data metrics""" + ensure_module_jsons(module_name) + + data = load_json(module_name, "data") + if data is None: + return False + + for key, value in metrics.items(): + data[key] = value + + return save_json(module_name, "data", data) + + +if __name__ == "__main__": + from rich.console import Console + from rich.panel import Panel + + console = Console() + + console.print() + console.print(Panel.fit( + "[bold cyan]JSON HANDLER - Working Implementation[/bold cyan]", + border_style="bright_blue" + )) + console.print() + console.print("[yellow]TESTING:[/yellow] Creating seed JSONs...") + + # Test auto-creation + log_operation("test_operation", {"test": "data"}, "seed") + increment_counter("seed", "test_counter", 1) + update_data_metrics("seed", test_metric="working") + + console.print() + console.print("[green]Check /home/aipass/seed/seed_json/ for created files:[/green]") + console.print(" [dim]•[/dim] seed_config.json") + console.print(" [dim]•[/dim] seed_data.json") + console.print(" [dim]•[/dim] seed_log.json") + console.print() diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/__init__.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/__init__.py new file mode 100644 index 00000000..9870e6fb --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/__init__.py @@ -0,0 +1,8 @@ +""" +Standards Checkers + +Handlers for validating module compliance with AIPass code standards. +Each handler checks one specific standard domain. +""" + +__version__ = "0.1.0" diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/architecture_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/architecture_check.py new file mode 100644 index 00000000..242c1644 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/architecture_check.py @@ -0,0 +1,556 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: architecture_check.py - Architecture Standards Checker Handler +# Date: 2025-11-21 +# Version: 0.3.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v0.3.0 (2025-11-21): Template registry as source of truth - all branches measured against template +# - v0.2.0 (2025-11-21): Added template baseline verification - checks branch structure compliance +# - v0.1.0 (2025-11-15): Initial implementation - architecture standards checking +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +Architecture Standards Checker Handler + +Validates module compliance with AIPass architecture standards. +Checks 3-layer pattern, handler independence, file size, domain organization. +For entry points, also verifies entire branch structure against template baseline. +""" + +import sys +import json +from pathlib import Path +from typing import Dict, List, Optional + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +# Import from sibling handler package +SEED_ROOT = Path.home() / "seed" +sys.path.insert(0, str(SEED_ROOT)) +from apps.handlers.config.ignore_handler import get_template_ignore_patterns + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + # Must match standard + if rule.get('standard') and rule.get('standard') != standard: + continue + # Must match file (check if rule file path is in the full path) + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + # Check line-specific bypass + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if module follows architecture standards + + Args: + module_path: Path to Python module to check + bypass_rules: Optional list of bypass rules for this file + + Returns: + dict: { + 'passed': bool, # Overall pass/fail + 'checks': [ # Individual check results + { + 'name': str, # Check name + 'passed': bool, # Pass/fail + 'message': str, # Details + } + ], + 'score': int, # 0-100 percentage + 'standard': str # Standard name + } + """ + checks = [] + path = Path(module_path) + + # Check if entire standard is bypassed for this file + if is_bypassed(module_path, 'architecture', bypass_rules=bypass_rules): + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': 'Standard bypassed via .seed/bypass.json'}], + 'score': 100, + 'standard': 'ARCHITECTURE' + } + + # Validate file exists + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'ARCHITECTURE' + } + + # Read file + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'ARCHITECTURE' + } + + # Determine file location and type + is_entry_point = path.name.endswith('.py') and 'apps/' in module_path and path.parent.name == 'apps' + is_module = 'apps/modules/' in module_path + is_handler = 'apps/handlers/' in module_path + is_init = path.name == '__init__.py' + + # Check 1: 3-Layer Pattern - File location + if not is_init: + layer_check = check_layer_location(module_path, is_entry_point, is_module, is_handler) + checks.append(layer_check) + + # Check 2: File size + size_check = check_file_size(lines, module_path) + checks.append(size_check) + + # Check 3: Handler independence (handlers must not import parent modules) + if is_handler: + independence_check = check_handler_independence(lines, module_path) + if independence_check: + checks.append(independence_check) + + # Check 4: Domain organization (handlers should be in domain folders) + if is_handler: + domain_check = check_domain_organization(module_path) + if domain_check: + checks.append(domain_check) + + # Check 5: Template baseline verification (for entry points, check entire branch structure) + if is_entry_point: + baseline_checks = check_template_baseline(module_path, bypass_rules=bypass_rules) + checks.extend(baseline_checks) + + # Calculate score + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + + # Overall pass if score >= 75% + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'ARCHITECTURE' + } + + +def check_layer_location(module_path: str, is_entry_point: bool, is_module: bool, is_handler: bool) -> Dict: + """ + Check if file is in correct architectural layer + + 3-Layer Pattern: + - apps/branch.py (entry point) + - apps/modules/ (orchestration) + - apps/handlers/ (implementation) + """ + if is_entry_point: + return { + 'name': '3-layer pattern', + 'passed': True, + 'message': 'Entry point layer (apps/branch.py)' + } + elif is_module: + return { + 'name': '3-layer pattern', + 'passed': True, + 'message': 'Module layer (apps/modules/)' + } + elif is_handler: + return { + 'name': '3-layer pattern', + 'passed': True, + 'message': 'Handler layer (apps/handlers/)' + } + else: + return { + 'name': '3-layer pattern', + 'passed': False, + 'message': f'File not in standard 3-layer structure (apps/, apps/modules/, apps/handlers/)' + } + + +def check_file_size(lines: List[str], module_path: str) -> Dict: + """ + Check file size compliance + + Guidelines: + - Under 300 lines: Perfect + - 300-500 lines: Good + - 500-700 lines: Getting heavy + - 700+ lines: Consider splitting + """ + line_count = len(lines) + + if line_count < 300: + return { + 'name': 'File size', + 'passed': True, + 'message': f'{line_count} lines (perfect - under 300)' + } + elif line_count < 500: + return { + 'name': 'File size', + 'passed': True, + 'message': f'{line_count} lines (good - under 500)' + } + elif line_count < 700: + return { + 'name': 'File size', + 'passed': True, + 'message': f'{line_count} lines (acceptable but getting heavy)' + } + else: + return { + 'name': 'File size', + 'passed': False, + 'message': f'{line_count} lines (consider splitting - recommended under 700)' + } + + +def check_handler_independence(lines: List[str], module_path: str) -> Optional[Dict]: + """ + Check that handlers don't import from parent branch modules + + Handlers must be independent and transportable. + Allowed: from prax.apps.modules import ... (service) + Allowed: from cli.apps.modules import ... (service) + Forbidden: from .apps.modules import ... + """ + # Detect parent branch from module path + parent_branch = None + if module_path: + path_parts = Path(module_path).parts + for i, part in enumerate(path_parts): + if part == 'apps' and i > 0: + parent_branch = path_parts[i-1] + break + + in_docstring = False + for i, line in enumerate(lines, 1): + stripped = line.strip() + + # Track docstrings (handle both single-line and multi-line) + if stripped.startswith('"""') or stripped.startswith("'''"): + quote_marker = '"""' if stripped.startswith('"""') else "'''" + # Count occurrences of the quote marker + quote_count = stripped.count(quote_marker) + if quote_count >= 2: + # Single-line docstring (opening and closing on same line) + continue # Skip this line but don't toggle state + else: + # Multi-line docstring boundary + in_docstring = not in_docstring + + # Skip docstrings, comments and empty lines + if in_docstring or not stripped or stripped.startswith('#'): + continue + + # Check for forbidden module imports + if '.apps.modules' in line and ('from ' in line or 'import ' in line): + # Extract the import statement + if '#' in line: + code_part = line.split('#')[0] + else: + code_part = line + + if '.apps.modules' in code_part: + # Allowed service imports + if 'prax.apps.modules' in code_part or 'cli.apps.modules' in code_part: + continue + + # Check if importing from parent branch + if parent_branch and f'{parent_branch}.apps.modules' in code_part: + return { + 'name': 'Handler independence', + 'passed': False, + 'message': f'Handler importing from parent module on line {i} (violates independence)' + } + + # Generic check if no parent branch detected + if not parent_branch: + return { + 'name': 'Handler independence', + 'passed': False, + 'message': f'Handler importing from branch module on line {i} (violates independence)' + } + + return { + 'name': 'Handler independence', + 'passed': True, + 'message': 'No forbidden module imports detected' + } + + +def check_domain_organization(module_path: str) -> Optional[Dict]: + """ + Check if handler is organized by domain (not technical role) + + Good: handlers/json/, handlers/error/, handlers/branch/ + Bad: handlers/utils/, handlers/helpers/, handlers/operations/ + """ + # Extract handler domain from path + # e.g., /home/aipass/seed/apps/handlers/standards/file.py -> domain is 'standards' + path_parts = Path(module_path).parts + + # Find 'handlers' in path and get next directory + handler_domain = None + for i, part in enumerate(path_parts): + if part == 'handlers' and i + 1 < len(path_parts): + handler_domain = path_parts[i + 1] + break + + if not handler_domain: + return { + 'name': 'Domain organization', + 'passed': False, + 'message': 'Could not detect handler domain from path' + } + + # Check for technical (bad) organization + technical_names = ['utils', 'helpers', 'operations', 'common', 'shared', 'lib'] + if handler_domain.lower() in technical_names: + return { + 'name': 'Domain organization', + 'passed': False, + 'message': f'Technical organization ({handler_domain}/) - use business domains instead' + } + + # Domain-based organization detected + return { + 'name': 'Domain organization', + 'passed': True, + 'message': f'Domain-based organization ({handler_domain}/)' + } + + +def _load_ignore_patterns(template_path: Path) -> Dict: + """Load ignore patterns from .registry_ignore.json""" + ignore_file = template_path / ".registry_ignore.json" + + if not ignore_file.exists(): + return {"ignore_files": [], "ignore_patterns": []} + + try: + with open(ignore_file, 'r') as f: + data = json.load(f) + return { + "ignore_files": data.get("ignore_files", []), + "ignore_patterns": data.get("ignore_patterns", []) + } + except: + return {"ignore_files": [], "ignore_patterns": []} + + +def _should_ignore(path: Path, template_path: Path, ignore_config: Dict) -> bool: + """Check if path should be ignored""" + name = path.name + + # Check exact filename matches + if name in ignore_config["ignore_files"]: + return True + + # Check patterns + for pattern in ignore_config["ignore_patterns"]: + if pattern.startswith('*'): + # *.pyc -> check extension + if name.endswith(pattern[1:]): + return True + elif pattern.startswith('.') and '*' in pattern: + # .backup* -> check prefix + prefix = pattern.rstrip('*') + if name.startswith(prefix): + return True + else: + # Exact match or directory name + if name == pattern or pattern in path.parts: + return True + + return False + + +def check_template_baseline(module_path: str, bypass_rules: list | None = None) -> List[Dict]: + """ + Verify branch structure against Cortex template registry (source of truth) + + Loads the template registry, transforms paths for the branch ({{BRANCH}}, FILE_RENAMES), + and checks if all template items exist in the branch. + + Args: + module_path: Path to entry point file (e.g., /home/aipass/aipass_core/api/apps/api.py) + + Returns: + List of check dictionaries for each template item + """ + checks = [] + + # Detect branch path and name from module path + path = Path(module_path) + branch_path = None + + # Find the branch root (parent of apps/ directory) + current = path.parent + while current != Path.home() and current.name != '/': + if current.name == 'apps' and current.parent: + branch_path = current.parent + break + current = current.parent + + if not branch_path: + return [{ + 'name': 'Template baseline', + 'passed': False, + 'message': 'Could not detect branch path from module path' + }] + + # Get branch name from path + branch_name = branch_path.name + branch_upper = branch_name.upper().replace("-", "_") + + # Load template registry (source of truth) + template_registry_path = AIPASS_ROOT / "cortex" / "templates" / "branch_template" / ".template_registry.json" + + if not template_registry_path.exists(): + return [{ + 'name': 'Template baseline', + 'passed': False, + 'message': f'Template registry not found at {template_registry_path}' + }] + + try: + with open(template_registry_path, 'r') as f: + template_registry = json.load(f) + except Exception as e: + return [{ + 'name': 'Template baseline', + 'passed': False, + 'message': f'Error reading template registry: {e}' + }] + + # FILE_RENAMES mapping (from Cortex create_branch.py) + # Entry point filename strips leading dots (e.g., .VSCODE -> vscode.py) + entry_point_name = branch_name.lstrip('.').lower() + FILE_RENAMES = { + "PROJECT.json": f"{branch_upper}.json", + "LOCAL.json": f"{branch_upper}.local.json", + "OBSERVATIONS.json": f"{branch_upper}.observations.json", + "AI_MAIL.json": f"{branch_upper}.ai_mail.json", + "BRANCH.ID.json": f"{branch_upper}.id.json", + "BRANCH.py": f"{entry_point_name}.py", + } + + # Check template files + for file_id, file_info in template_registry.get('files', {}).items(): + template_path = file_info.get('path', '') + template_name = file_info.get('current_name', '') + + if not template_path: + continue + + # Skip template files that aren't required in branches (from ignore_handler) + if template_name in get_template_ignore_patterns(): + continue + + # Transform path for this branch + # 1. Replace {{BRANCH}} placeholder + # Use lowercase for _json directories to match cortex behavior + if "_json" in template_path: + branch_path_transformed = template_path.replace("{{BRANCH}}", branch_name.lower().replace("-", "_")) + else: + branch_path_transformed = template_path.replace("{{BRANCH}}", branch_upper) + + # 2. Apply FILE_RENAMES + if template_name in FILE_RENAMES: + # Replace the filename in the path + path_parts = branch_path_transformed.split('/') + path_parts[-1] = FILE_RENAMES[template_name] + branch_path_transformed = '/'.join(path_parts) + + # Check if file exists + full_path = branch_path / branch_path_transformed + + if full_path.exists(): + checks.append({ + 'name': f'File: {branch_path_transformed}', + 'passed': True, + 'message': 'Template file exists' + }) + else: + # Check if missing file is bypassed + # Use the final filename for bypass check (e.g., AI_MAIL.id.json) + file_name = branch_path_transformed.split('/')[-1] if '/' in branch_path_transformed else branch_path_transformed + if is_bypassed(file_name, 'architecture', bypass_rules=bypass_rules): + checks.append({ + 'name': f'File: {branch_path_transformed}', + 'passed': True, + 'message': 'Template file missing (bypassed)' + }) + else: + checks.append({ + 'name': f'File: {branch_path_transformed}', + 'passed': False, + 'message': 'Template file missing' + }) + + # Check template directories + for dir_id, dir_info in template_registry.get('directories', {}).items(): + template_path = dir_info.get('path', '') + + if not template_path: + continue + + # Transform path for this branch + # Use lowercase for _json directories to match cortex behavior + if "_json" in template_path: + branch_path_transformed = template_path.replace("{{BRANCH}}", branch_name.lower().replace("-", "_")) + else: + branch_path_transformed = template_path.replace("{{BRANCH}}", branch_upper) + + # Check if directory exists + full_path = branch_path / branch_path_transformed + + if full_path.exists(): + checks.append({ + 'name': f'Directory: {branch_path_transformed}/', + 'passed': True, + 'message': 'Template directory exists' + }) + else: + checks.append({ + 'name': f'Directory: {branch_path_transformed}/', + 'passed': False, + 'message': 'Template directory missing' + }) + + return checks diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/architecture_content.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/architecture_content.py new file mode 100644 index 00000000..7023fd3f --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/architecture_content.py @@ -0,0 +1,123 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: architecture_content.py - Architecture Standards Content Handler +# Date: 2025-11-22 +# Version: 0.4.0 +# Category: seed/standards/handlers +# +# CHANGELOG (Max 5 entries): +# - v0.4.0 (2025-11-22): Added two-level introspection pattern (main=modules, module=handlers) +# - v0.3.0 (2025-11-22): Added foundation service independence rule (CLI ↔ Prax) +# - v0.2.0 (2025-11-21): Added template baseline compliance section +# - v0.1.0 (2025-11-13): Initial handler - Architecture standards content +# +# CODE STANDARDS: +# - Handler provides content, module orchestrates output +# - Pure function - returns string, no side effects +# ============================================= + +""" +Architecture Standards Content Handler + +Provides formatted Architecture standards content. +Module orchestrates, handler implements. +""" + + +def get_architecture_standards() -> str: + """Return formatted architecture standards content with Rich markup + + Returns: + str: Formatted standards text with Rich styling + """ + lines = [ + "[bold cyan]CORE PRINCIPLE:[/bold cyan]", + " Separate [yellow]routing[/yellow] ≠ [yellow]orchestration[/yellow] ≠ [yellow]implementation[/yellow]", + " Keep files small (< 500 lines), handlers transportable, context clean", + "", + "[bold cyan]THE 3-LAYER PATTERN:[/bold cyan]", + "", + " [dim]apps/branch.py[/dim] (Entry) → Auto-discover modules, route commands", + " [dim]apps/modules/[/dim] (Orchestrate) → Coordinate workflow, call handlers", + " [dim]apps/handlers/[/dim] (Implement) → ALL business logic, domain-organized", + "", + "[bold cyan]TEMPLATE BASELINE COMPLIANCE:[/bold cyan]", + " All branches must match Cortex template structure", + "", + " [yellow]Source of Truth:[/yellow] [dim].template_registry.json[/dim] (30 files + 20 dirs = 50 checks)", + " [yellow]Transformations:[/yellow] BRANCH.ID.json → SEED.id.json, {{BRANCH}} → SEED, etc.", + " [yellow]Why:[/yellow] Template is the contract - branches that drift break during updates", + "", + " [bold]Example scores:[/bold]", + " [green]98%:[/green] BACKUP_SYSTEM, SEED [green]94%:[/green] FLOW [yellow]86%:[/yellow] API", + "", + "[yellow]KEY RULES:[/yellow]", + "", + " 1. [bold]Handlers CANNOT import modules[/bold] (breaks transportability)", + " [green]✓[/green] Modules import handlers", + " [green]✓[/green] Handlers import handlers (same domain package)", + " [red]✗[/red] Handlers import modules (circular dependency)", + "", + " 2. [bold red]CRITICAL:[/bold red] [bold]Foundation services CANNOT import each other[/bold]", + " CLI ↔ Prax = [red]SYSTEM-WIDE BREAKAGE[/red] (circular dependency)", + " [green]✓[/green] Branches import CLI + Prax", + " [red]✗[/red] CLI imports Prax", + " [red]✗[/red] Prax imports CLI", + "", + " 3. [bold]Command Routing: handle_command() pattern[/bold]", + " [yellow]Rule:[/yellow] Each module implements [dim]handle_command(command, args)[/dim] returning True if handled", + " [green]✓[/green] One primary command per module (no aliases)", + " [red]✗[/red] No alias system (removed Session 14)", + " [dim]Example:[/dim] [green]if command != 'primary_name': return False[/green]", + "", + " 4. [bold]Organize by domain, not by technical role[/bold]", + " [dim]handlers/json/[/dim] not [dim]handlers/utils/json_helpers.py[/dim]", + " [dim]handlers/branch/[/dim] not [dim]handlers/operations/branch_ops.py[/dim]", + "", + " 5. [bold]File size guidelines[/bold]", + " [green]< 300:[/green] Perfect [green]300-500:[/green] Good [yellow]500-700:[/yellow] Heavy [red]700+:[/red] Split it", + "", + " 6. [bold]Path = context, name = action[/bold]", + " [dim]handlers/json/ops.py[/dim] NOT [dim]handlers/json/json_ops.py[/dim]", + "", + "[bold cyan]TWO-LEVEL INTROSPECTION:[/bold cyan]", + " [yellow]Level 1 - Main Entry (shows modules only):[/yellow]", + " [dim]$ python3 flow.py[/dim]", + " ", + " [cyan]Flow - PLAN Management System[/cyan]", + " Discovered Modules: 5", + " • create_plan", + " • delete_plan", + " • list_plans", + " ", + " [yellow]Level 2 - Individual Module (shows handlers):[/yellow]", + " [dim]$ python3 create_plan.py[/dim]", + " ", + " [cyan]create_plan Module[/cyan]", + " Connected Handlers:", + " handlers/plan/", + " - command_parser.py", + " - create_file.py", + " handlers/registry/", + " - load_registry.py", + "", + "[yellow]WHY INTROSPECTION:[/yellow]", + " Manual navigation: 5-10 min, context burn, error-prone", + " Auto-discovery: 5 sec, zero maintenance, no hardcoded lists", + "", + "[yellow]WARNINGS:[/yellow]", + " • Handlers importing modules = [red]circular dependency death[/red]", + " • Files over 700 lines = [red]AI context degrades, errors increase[/red]", + " • Technical organization (utils/, helpers/) = [red]navigation nightmare[/red]", + "", + "[bold]Exception:[/bold] Service imports OK (e.g., [dim]prax.apps.modules.logger[/dim] system-wide)", + "", + "[bold cyan]REFERENCE:[/bold cyan]", + " [dim]/home/aipass/standards/CODE_STANDARDS/architecture.md[/dim]", + " [dim]/home/aipass/seed/apps/[/dim] (showroom)", + " [dim]/home/aipass/aipass_core/cortex/apps/[/dim] (production example)", + ] + + return "\n".join(lines) diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/cli_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/cli_check.py new file mode 100644 index 00000000..0e26cb14 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/cli_check.py @@ -0,0 +1,504 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: cli_check.py - CLI Standards Checker Handler +# Date: 2025-11-22 +# Version: 0.5.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v0.5.0 (2025-12-04): Fixed single-line docstring bug - """text""" no longer breaks detection +# - v0.4.0 (2025-11-28): Added if __name__ == '__main__' block exclusion (fixes 100% false positives) +# - v0.3.0 (2025-11-22): Added CLI branch exemption - CLI uses internal imports (it's the implementation) +# - v0.2.0 (2025-11-21): Fixed path detection bug - now handles both absolute and relative paths +# - v0.1.0 (2025-11-15): Initial implementation - CLI standards checking +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +CLI Standards Checker Handler + +Validates module compliance with AIPass CLI standards. +Checks console.print() usage, CLI service imports, handler separation. +""" + +import sys +import re +from pathlib import Path +from typing import Dict, List, Optional + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + # Must match standard + if rule.get('standard') and rule.get('standard') != standard: + continue + # Must match file (check if rule file path is in the full path) + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + # Check line-specific bypass + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if module follows CLI standards + + Args: + module_path: Path to Python module to check + bypass_rules: Optional list of bypass rules for specific violations + + Returns: + dict: { + 'passed': bool, # Overall pass/fail + 'checks': [ # Individual check results + { + 'name': str, # Check name + 'passed': bool, # Pass/fail + 'message': str, # Details + } + ], + 'score': int, # 0-100 percentage + 'standard': str # Standard name + } + """ + checks = [] + path = Path(module_path) + + # Check if entire standard is bypassed for this file + if is_bypassed(module_path, 'cli', bypass_rules=bypass_rules): + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': 'Standard bypassed via .seed/bypass.json'}], + 'score': 100, + 'standard': 'CLI' + } + + # Validate file exists + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'CLI' + } + + # Read file + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'CLI' + } + + # Determine file type (handle both absolute and relative paths) + is_handler = 'handlers/' in module_path + is_module = 'modules/' in module_path + is_entry_point = path.name.endswith('.py') and 'apps/' in module_path and path.parent.name == 'apps' + + # Check 1: Handler separation (handlers must NOT have console output) + if is_handler: + handler_separation_check = check_handler_separation(content) + checks.append(handler_separation_check) + + # Check 2: CLI service imports (modules/entry points should use CLI services) + if is_module or is_entry_point: + cli_imports_check = check_cli_imports(content, module_path) + if cli_imports_check: + checks.append(cli_imports_check) + + # Check 3: No bare print() statements (modules should use console.print()) + if is_module or is_entry_point: + print_usage_check = check_print_usage(content, lines, module_path) + if print_usage_check: + checks.append(print_usage_check) + + # Check 4: --help flag support (modules should have --help) + if is_module or is_entry_point: + help_flag_check = check_help_flag(content) + if help_flag_check: + checks.append(help_flag_check) + + # Check 5: No duplicate display functions (use CLI service instead) + if is_module or is_entry_point: + duplicate_display_check = check_duplicate_display_functions(content, module_path) + if duplicate_display_check: + checks.append(duplicate_display_check) + + # Calculate score + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + + # Overall pass if score >= 75% + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'CLI' + } + + +def check_handler_separation(content: str) -> Dict: + """ + Check that handlers don't have console output + + Handlers should return data, modules should handle display + Only checks actual code (not strings or comments) + Excludes: if __name__ == '__main__': blocks (test/debug code is OK) + """ + lines = content.split('\n') + + # Find code section boundaries (skip docstrings and comments) + in_docstring = False + console_print_lines = [] + cli_import_lines = [] + print_lines = [] + + # Track if we're inside an if __name__ == '__main__': block + in_main_block = False + main_block_indent = 0 + + for i, line in enumerate(lines, 1): + stripped = line.strip() + current_indent = len(line) - len(line.lstrip()) if line.strip() else 0 + + # Detect entry into if __name__ == '__main__': block + if "if __name__ ==" in stripped and "__main__" in stripped: + in_main_block = True + main_block_indent = current_indent + continue + + # Detect exit from if __name__ == '__main__': block + if in_main_block and stripped and current_indent <= main_block_indent: + in_main_block = False + + # Skip checking if we're inside the __main__ block (test/debug code) + if in_main_block: + continue + + # Track docstrings (handle single-line docstrings correctly) + triple_double = line.count('"""') + triple_single = line.count("'''") + # Odd count means we're entering/exiting a docstring + # Even count (e.g., """text""") means complete docstring on one line - no state change + if triple_double % 2 == 1: + in_docstring = not in_docstring + continue + if triple_single % 2 == 1: + in_docstring = not in_docstring + continue + # If even count (0, 2, 4...), docstring is complete on this line - don't toggle, but skip it + if triple_double >= 2 or triple_single >= 2: + continue + + # Skip if in docstring or comment + if in_docstring or stripped.startswith('#'): + continue + + # Look for actual console.print() calls + # Must be actual code, not in a string + if 'console.print(' in stripped: + # Skip if it's in a string literal + # Check if console.print( appears inside quotes + before_pattern = line.split('console.print(')[0] + # Count quotes before the pattern + single_quotes = before_pattern.count("'") + double_quotes = before_pattern.count('"') + # If odd number of quotes, we're inside a string + if single_quotes % 2 == 1 or double_quotes % 2 == 1: + continue + # Skip if console.print( appears inside a string assignment + if '=' in stripped and 'console.print(' in stripped: + # Check if console.print( appears in a string assignment + before_console = stripped.split('console.print(')[0] + last_eq_pos = before_console.rfind('=') + if last_eq_pos != -1: + after_eq = before_console[last_eq_pos+1:] + # Count quotes ONLY after the last = + sq_after = after_eq.count("'") + dq_after = after_eq.count('"') + # If odd quotes after =, console.print( is inside string + if sq_after % 2 == 1 or dq_after % 2 == 1: + continue + # This is likely an actual call + console_print_lines.append(i) + + # Look for actual CLI service imports + if 'from cli.apps.modules import' in stripped: + # Skip if in a string + if '"from cli.apps.modules import' in line or "'from cli.apps.modules import" in line: + continue + # This is likely an actual import + cli_import_lines.append(i) + + # Look for print() calls + if re.search(r'^\s*print\s*\(', line): + # This is an actual print call at start of line (not in string) + print_lines.append(i) + + if console_print_lines: + return { + 'name': 'Handler separation', + 'passed': False, + 'message': f'Handler contains console.print() on lines {console_print_lines[:3]} (violates separation)' + } + + if cli_import_lines: + return { + 'name': 'Handler separation', + 'passed': False, + 'message': f'Handler imports CLI services on lines {cli_import_lines[:3]} (handlers should not display)' + } + + if print_lines: + return { + 'name': 'Handler separation', + 'passed': False, + 'message': f'Handler contains print() on lines {print_lines[:3]} (use logger instead)' + } + + return { + 'name': 'Handler separation', + 'passed': True, + 'message': 'No console output detected (good separation)' + } + + +def check_cli_imports(content: str, module_path: str = "") -> Optional[Dict]: + """ + Check for CLI service imports + + Modules should import from cli.apps.modules + Exception: CLI branch itself uses internal imports + """ + # Exception: CLI branch uses internal imports (it's the implementation) + if '/cli/apps/' in module_path: + return { + 'name': 'CLI service imports', + 'passed': True, + 'message': 'CLI branch exempt (uses internal imports)' + } + + # Check for CLI imports + has_cli_imports = 'from cli.apps.modules import' in content + + if has_cli_imports: + # Check what's imported + import_match = re.search(r'from cli\.apps\.modules import (.+)', content) + if import_match: + imports = import_match.group(1) + return { + 'name': 'CLI service imports', + 'passed': True, + 'message': f'Using CLI services ({imports})' + } + + # No CLI imports found - check if there's any output at all + has_console_print = 'console.print(' in content + has_print = bool(re.search(r'\bprint\s*\(', content)) + + if has_console_print or has_print: + return { + 'name': 'CLI service imports', + 'passed': False, + 'message': 'Has output but missing CLI service imports (import from cli.apps.modules)' + } + + # No output at all - that's fine for some modules + return { + 'name': 'CLI service imports', + 'passed': True, + 'message': 'No CLI output needed' + } + + +def check_print_usage(content: str, lines: List[str], module_path: str = "") -> Optional[Dict]: + """ + Check for bare print() statements (should use console.print() instead) + + Looks for print( NOT preceded by a dot (to exclude console.print, logger.print, etc.) + Also checks for parser.print_help() which uses plain print internally + Excludes: if __name__ == '__main__': blocks (test/debug code is OK) + + Args: + content: File content as string + lines: File lines as list + module_path: Path to module being checked (for error messages) + """ + # Find print() statements + print_lines = [] + parser_print_help_lines = [] + + # Track if we're inside an if __name__ == '__main__': block + in_main_block = False + main_block_indent = 0 + + for i, line in enumerate(lines, 1): + stripped = line.strip() + current_indent = len(line) - len(line.lstrip()) if line.strip() else 0 + + # Detect entry into if __name__ == '__main__': block + if "if __name__ ==" in stripped and "__main__" in stripped: + in_main_block = True + main_block_indent = current_indent + continue + + # Detect exit from if __name__ == '__main__': block + # (when we find non-empty code at same or lower indentation level) + if in_main_block and stripped and current_indent <= main_block_indent: + in_main_block = False + + # Skip checking if we're inside the __main__ block (test/debug code) + if in_main_block: + continue + + # Skip comments + if stripped.startswith('#'): + continue + + # Check for parser.print_help() - uses plain print() internally + if 'parser.print_help()' in stripped: + # Skip if in a comment + if '#' in line: + code_part = line.split('#')[0] + if 'parser.print_help()' in code_part: + parser_print_help_lines.append(i) + else: + parser_print_help_lines.append(i) + + # Use regex to find BARE print() - not preceded by . or word character + # This excludes: console.print(), logger.print(), pprint(), etc. + if re.search(r'(? 3 else ""}' + } + + # Check if using console.print() + has_console_print = 'console.print(' in content + + if has_console_print: + return { + 'name': 'print() usage', + 'passed': True, + 'message': 'Using console.print() (no bare print() found)' + } + + return None # No output at all + + +def check_help_flag(content: str) -> Optional[Dict]: + """ + Check for --help flag implementation + + Modules should respond to --help + """ + # Look for --help handling + has_help_flag = '--help' in content and ('-h' in content or 'help' in content) + + # Look for argparse usage + has_argparse = 'argparse.ArgumentParser' in content or 'import argparse' in content + + # Look for print_help function + has_print_help = 'def print_help' in content + + if has_print_help or (has_help_flag and has_argparse): + return { + 'name': '--help flag', + 'passed': True, + 'message': '--help flag implemented' + } + + # Check if it's a simple module that might not need --help + if '__main__' not in content: + return None # Not an executable module + + return { + 'name': '--help flag', + 'passed': False, + 'message': '--help flag not implemented (modules should respond to --help)' + } + + +def check_duplicate_display_functions(content: str, module_path: str = "") -> Optional[Dict]: + """ + Check for duplicate display functions that should use CLI service instead. + + CLI service provides: header(), success(), error(), warning(), info() + Modules should import these, not define their own. + Exception: CLI branch itself defines these functions. + """ + # Exception: CLI branch defines these functions + if '/cli/apps/' in module_path: + return None + + # Display functions that CLI service provides + cli_display_functions = ['header', 'success', 'error', 'warning', 'info'] + + # Look for local function definitions that duplicate CLI service + duplicates_found = [] + for func_name in cli_display_functions: + # Check for "def header(" pattern + if f'def {func_name}(' in content: + duplicates_found.append(func_name) + + if duplicates_found: + return { + 'name': 'CLI display functions', + 'passed': False, + 'message': f'Defines own {", ".join(duplicates_found)}() - use from cli.apps.modules.display import {", ".join(duplicates_found)}' + } + + return { + 'name': 'CLI display functions', + 'passed': True, + 'message': 'No duplicate CLI display functions defined' + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/cli_content.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/cli_content.py new file mode 100644 index 00000000..886a8e41 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/cli_content.py @@ -0,0 +1,116 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: cli_content.py - CLI Standards Content Handler +# Date: 2025-11-12 +# Version: 0.1.0 +# Category: seed/standards/handlers +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-12): Initial handler - CLI standards content +# +# CODE STANDARDS: +# - Handler provides content, module orchestrates output +# - Pure function - returns string, no side effects +# ============================================= + +""" +CLI Standards Content Handler + +Provides formatted CLI standards content. +Module orchestrates, handler implements. +""" + + +def get_cli_standards() -> str: + """Return formatted CLI standards content with Rich markup + + Returns: + str: Formatted standards text with Rich styling + """ + lines = [ + "[bold red]OUTPUT STANDARD: Rich console.print() ONLY[/bold red]", + "", + "[yellow]POLICY:[/yellow] Rich formatting is THE standard for ALL AIPass output", + "", + "[green]✓ Approved:[/green]", + " [dim]from cli.apps.modules import console[/dim]", + " [dim]console.print(\"[cyan]This is the ONLY approved way[/cyan]\")[/dim]", + "", + "[red]✗ Deprecated:[/red] Bare print() statements", + " • Only in test/temp code", + " • Remove before commit", + "", + "[red]✗ Never use:[/red] parser.print_help()", + " • Outputs plain text (violates standard)", + " • Argparse is for PARSING only, not help output", + " • Write custom print_help() with console.print()", + "", + "─" * 70, + "", + "[bold cyan]DUAL APPROACH:[/bold cyan]", + "", + "[bold]1. Interactive (for humans)[/bold]", + " • Rich formatting, menus, questionary prompts", + " • Visual feedback, colors, progress bars", + "", + "[bold]2. Arguments (for AI via Drone)[/bold]", + " • Fast, scriptable, no interaction required", + " • [dim]drone [options][/dim]", + "", + "[yellow]RULE:[/yellow] Build BOTH or neither", + "", + "[bold cyan]CLI SERVICE PROVIDER:[/bold cyan]", + " [dim]from cli.apps.modules import console, header, success, error[/dim]", + " [dim]from cli.apps.modules import operation_start, track_operation[/dim]", + "", + " • Consistent formatting across all branches", + " • Update CLI once → affects entire system", + " • Rich library wrappers for beautiful output", + "", + "[bold cyan]BRANCH-LEVEL CLI:[/bold cyan]", + " [dim]handlers/cli/prompts.py[/dim] - User interaction specific to branch", + "", + "[bold cyan]DRONE COMPLIANCE:[/bold cyan]", + " • Module responds to --help flag", + " • Help output includes 'Commands:' line", + " • Commands comma-separated with flags", + " • Example: [dim]Commands: cli, display, --help[/dim]", + "", + "[bold cyan]DEMONSTRATION:[/bold cyan]", + " [dim]/home/aipass/seed/apps/modules/test_cli_errors.py[/dim]", + " Shows CLI service usage with error handling", + "", + "[bold cyan]REFERENCE:[/bold cyan]", + " [dim]/home/aipass/standards/CODE_STANDARDS/cli.md[/dim]", + " [dim]/home/aipass/aipass_core/cli/README.json[/dim]", + " [dim]/home/aipass/aipass_core/planning/cli_layout_demo.py[/dim]", + "", + "─" * 70, + "", + "[bold cyan]RICH FORMATTING QUICK REFERENCE:[/bold cyan]", + "", + "[bold]Colors:[/bold]", + " [red]red[/red], [green]green[/green], [yellow]yellow[/yellow], [blue]blue[/blue], [cyan]cyan[/cyan], [magenta]magenta[/magenta]", + "", + "[bold]Styles:[/bold]", + " [bold]bold[/bold], [italic]italic[/italic], [dim]dim[/dim], [underline]underline[/underline]", + "", + "[bold]Combined:[/bold]", + " [bold red]bold red[/bold red], [bold cyan]bold cyan[/bold cyan], [dim yellow]dim yellow[/dim yellow]", + "", + "[bold]Usage:[/bold]", + " [dim]console.print(\"[bold green]Success![/bold green]\")[/dim]", + " [dim]console.print(\"[yellow]Warning:[/yellow] Check this\")[/dim]", + " [dim]console.print(\"[dim]Additional info...[/dim]\")[/dim]", + "", + "[bold]Emojis:[/bold]", + " ✅ Success ❌ Error ⚠️ Warning ℹ️ Info", + " ⚙️ Processing 📝 Note 🔍 Search ✨ Feature", + "", + "[bold]Documentation:[/bold]", + " [link=https://rich.readthedocs.io/en/stable/markup.html]https://rich.readthedocs.io/en/stable/markup.html[/link]", + ] + + return "\n".join(lines) diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/cli_flags_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/cli_flags_check.py new file mode 100644 index 00000000..5d9d0ed7 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/cli_flags_check.py @@ -0,0 +1,212 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: cli_flags_check.py - CLI Flags Standards Checker Handler +# Date: 2026-02-21 +# Version: 1.0.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-21): Initial implementation - --version flag validation +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +CLI Flags Standards Checker Handler + +Validates that branch entry points support required CLI flags. + +THE STANDARD (Tier 1 - Required): +- --version / -V = Print branch name and version, then exit + +Note: --help is already checked by cli_check.py, so it is NOT re-checked here. + +Only entry point files are checked (files directly in apps/, not in +apps/handlers/ or apps/modules/). Non-entry-point files are skipped +with a pass. +""" + +import sys +import re +from pathlib import Path +from typing import Dict, List + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + if rule.get('standard') and rule.get('standard') != standard: + continue + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if module follows CLI flags standards + + Args: + module_path: Path to Python module to check + bypass_rules: Optional list of bypass rules to skip certain checks + + Returns: + dict: { + 'passed': bool, + 'checks': [{'name': str, 'passed': bool, 'message': str}], + 'score': int, + 'standard': str + } + """ + checks = [] + path = Path(module_path) + + # Check if entire standard is bypassed for this file + if is_bypassed(module_path, 'cli_flags', bypass_rules=bypass_rules): + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': 'Standard bypassed via .seed/bypass.json'}], + 'score': 100, + 'standard': 'CLI_FLAGS' + } + + # Validate file exists + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'CLI_FLAGS' + } + + # Only check entry point files — files whose parent directory is "apps" + if path.parent.name != 'apps': + return { + 'passed': True, + 'checks': [{'name': 'Entry point check', 'passed': True, 'message': 'Not an entry point (skipped)'}], + 'score': 100, + 'standard': 'CLI_FLAGS' + } + + # Read file + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'CLI_FLAGS' + } + + # Check 1: --version / -V flag support + version_flag_check = check_version_flag(lines, module_path, bypass_rules) + checks.append(version_flag_check) + + # Calculate score + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'CLI_FLAGS' + } + + +def _get_non_code_lines(lines: List[str]) -> set: + """ + Build a set of line numbers that are inside docstrings or comments. + + Uses AST-aware triple-quote counting: if a line has an even number of + triple-quote delimiters it is self-contained (e.g. single-line docstring + or string assignment). Only odd counts toggle the in-docstring state. + """ + skip: set = set() + in_docstring = False + + for i, line in enumerate(lines, 1): + stripped = line.strip() + + triple_double = stripped.count('"""') + triple_single = stripped.count("'''") + total_triple = triple_double + triple_single + + if total_triple > 0 and total_triple % 2 == 1: + in_docstring = not in_docstring + skip.add(i) + continue + elif total_triple > 0 and total_triple % 2 == 0: + skip.add(i) + continue + + if in_docstring or stripped.startswith('#'): + skip.add(i) + + return skip + + +def check_version_flag(lines: List[str], file_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check that the entry point supports --version / -V flag. + + Scans non-comment/non-docstring lines for string literals: + - '--version' or "--version" + - '-V' or "-V" + + If either pattern is found, the check passes. + """ + if is_bypassed(file_path, 'cli_flags', None, bypass_rules): + return { + 'name': '--version flag support', + 'passed': True, + 'message': 'Bypassed by bypass rules' + } + + skip_lines = _get_non_code_lines(lines) + + # Patterns to detect version flag handling in code + version_patterns = [ + r"""['"]--version['"]""", + r"""['"]-V['"]""", + ] + + for i, line in enumerate(lines, 1): + if i in skip_lines: + continue + + for pattern in version_patterns: + if re.search(pattern, line): + return { + 'name': '--version flag support', + 'passed': True, + 'message': f'Found version flag handling on line {i}' + } + + return { + 'name': '--version flag support', + 'passed': False, + 'message': 'Entry point missing --version / -V flag support' + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/cli_flags_content.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/cli_flags_content.py new file mode 100644 index 00000000..5ef89075 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/cli_flags_content.py @@ -0,0 +1,74 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: cli_flags_content.py - CLI Flags Standards Content +# Date: 2026-02-21 +# Version: 1.0.0 +# Category: seed/standards/content +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-21): Initial content - CLI flags standard +# +# CODE STANDARDS: +# - Content handler provides Rich-formatted text for display +# ============================================= + +""" +CLI Flags Standards Content + +Provides Rich-formatted reference text for the CLI flags standard. +""" + + +def get_cli_flags_standards() -> str: + """Return Rich-formatted CLI flags standards text""" + return """[bold white]CLI FLAGS STANDARD[/bold white] + +[yellow]PURPOSE:[/yellow] + Consistent CLI flags across all AIPass branches. + Users learn one interface, every branch honors it. + +[yellow]TIER 1 - REQUIRED FLAGS:[/yellow] + + [bold cyan]--help[/bold cyan] / [bold cyan]-h[/bold cyan] / [bold cyan]help[/bold cyan] + Rich-formatted help panel with usage, description, and + [dim]Commands:[/dim] line listing available actions. + Already universal - keep it that way. + + [bold cyan]--version[/bold cyan] / [bold cyan]-V[/bold cyan] + Print "[dim]BRANCH vX.Y.Z[/dim]" from META DATA HEADER and exit. + Example: [dim]flow v2.4.0[/dim] + +[yellow]TIER 2 - RECOMMENDED FLAGS:[/yellow] + + [bold cyan]--verbose[/bold cyan] / [bold cyan]-v[/bold cyan] + Extra diagnostic output for multi-step operations. + Show what the branch is doing under the hood. + + [bold cyan]--dry-run[/bold cyan] + Preview what would happen without executing. + For branches that mutate state (files, mail, config). + + [bold cyan]--test[/bold cyan] + Quick self-check, prints pass/fail and exits. + For branches with testable functionality. + +[yellow]FLAG HANDLING ORDER:[/yellow] + + [green]1.[/green] Universal flags first - execute and exit: + [dim]if args.command in ("--help", "-h", "help"): show_help(); return + if args.command in ("--version", "-V"): print_version(); return + if args.command == "--test": run_test(); return[/dim] + + [green]2.[/green] Behavioral flags - strip and pass through: + [dim]verbose = "--verbose" in sys.argv or "-v" in sys.argv + dry_run = "--dry-run" in sys.argv + # Remove from argv before routing to modules[/dim] + +[yellow]KEY RULES:[/yellow] + + [bold white]-V[/bold white] uppercase for version (because [bold white]-v[/bold white] is verbose) + [bold white]Drone passes flags through[/bold white] - does not intercept them + [bold white]Verbose output[/bold white] uses [dim][dim] formatting[/dim] + [bold white]Dry-run output[/bold white] prefixes with [bold yellow]DRY RUN[/bold yellow]""" diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/diagnostics_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/diagnostics_check.py new file mode 100644 index 00000000..ccb83ba0 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/diagnostics_check.py @@ -0,0 +1,342 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: diagnostics_check.py - Type Error Diagnostics Checker +# Date: 2025-11-28 +# Version: 0.2.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v0.2.0 (2025-11-28): Added Rich console output, Prax logger +# - v0.1.0 (2025-11-28): Initial implementation - pyright integration +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +Type Error Diagnostics Checker + +Uses pyright to detect type errors, undefined variables, and other +static analysis issues that would show as Pylance errors in VS Code. +""" + +import sys +import subprocess +import json +from pathlib import Path +from typing import Dict, List + +from rich.console import Console + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +SEED_ROOT = Path.home() / "seed" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +console = Console() + +# Import ignore patterns from config handler (same branch) +from seed.apps.handlers.config.ignore_handler import get_audit_ignore_patterns + + +def should_ignore_file(file_path: str, ignore_patterns: List[str]) -> bool: + """Check if file should be ignored based on audit patterns""" + for pattern in ignore_patterns: + if pattern in file_path: + return True + return False + + +def check_file(file_path: str) -> Dict: + """ + Run pyright on a single file and return diagnostics + + Args: + file_path: Path to Python file to check + + Returns: + dict: { + 'file': str, + 'errors': int, + 'warnings': int, + 'diagnostics': [{'line': int, 'severity': str, 'message': str}] + } + """ + path = Path(file_path) + + if not path.exists(): + return { + 'file': str(file_path), + 'errors': 0, + 'warnings': 0, + 'diagnostics': [], + 'error': f'File not found: {file_path}' + } + + if not path.suffix == '.py': + return { + 'file': str(file_path), + 'errors': 0, + 'warnings': 0, + 'diagnostics': [], + 'skipped': 'Not a Python file' + } + + try: + # Run pyright with JSON output + result = subprocess.run( + ['python3', '-m', 'pyright', '--outputjson', str(path)], + capture_output=True, + text=True, + timeout=30 + ) + + # Parse JSON output + try: + output = json.loads(result.stdout) + except json.JSONDecodeError: + # Pyright may output text on error + return { + 'file': str(file_path), + 'errors': 0, + 'warnings': 0, + 'diagnostics': [], + 'error': f'Failed to parse pyright output: {result.stderr or result.stdout}' + } + + diagnostics = [] + errors = 0 + warnings = 0 + + for diag in output.get('generalDiagnostics', []): + severity = diag.get('severity', 'error') + if severity == 'error': + errors += 1 + elif severity == 'warning': + warnings += 1 + + diagnostics.append({ + 'line': diag.get('range', {}).get('start', {}).get('line', 0) + 1, + 'severity': severity, + 'message': diag.get('message', 'Unknown error'), + 'rule': diag.get('rule', '') + }) + + return { + 'file': str(file_path), + 'errors': errors, + 'warnings': warnings, + 'diagnostics': diagnostics + } + + except subprocess.TimeoutExpired: + return { + 'file': str(file_path), + 'errors': 0, + 'warnings': 0, + 'diagnostics': [], + 'error': 'Pyright timed out' + } + except Exception as e: + return { + 'file': str(file_path), + 'errors': 0, + 'warnings': 0, + 'diagnostics': [], + 'error': str(e) + } + + +def check_directory(directory: str, pattern: str = "**/*.py") -> Dict: + """ + Run pyright on all Python files in a directory + + Args: + directory: Directory to scan + pattern: Glob pattern for files (default: all .py files) + + Returns: + dict: { + 'total_files': int, + 'files_with_errors': int, + 'total_errors': int, + 'total_warnings': int, + 'results': [file_result, ...] + } + """ + path = Path(directory) + + if not path.exists(): + return { + 'total_files': 0, + 'files_with_errors': 0, + 'total_errors': 0, + 'total_warnings': 0, + 'results': [], + 'error': f'Directory not found: {directory}' + } + + # Run pyright on entire directory for efficiency + try: + result = subprocess.run( + ['python3', '-m', 'pyright', '--outputjson', str(path)], + capture_output=True, + text=True, + timeout=300 # 5 minutes for full directory + ) + + try: + output = json.loads(result.stdout) + except json.JSONDecodeError: + return { + 'total_files': 0, + 'files_with_errors': 0, + 'total_errors': 0, + 'total_warnings': 0, + 'results': [], + 'error': f'Failed to parse pyright output' + } + + # Get ignore patterns + ignore_patterns = get_audit_ignore_patterns() + + # Group diagnostics by file (filtering ignored files) + file_diagnostics = {} + + for diag in output.get('generalDiagnostics', []): + file_path = diag.get('file', 'unknown') + + # Skip files matching ignore patterns + if should_ignore_file(file_path, ignore_patterns): + continue + if file_path not in file_diagnostics: + file_diagnostics[file_path] = { + 'file': file_path, + 'errors': 0, + 'warnings': 0, + 'diagnostics': [] + } + + severity = diag.get('severity', 'error') + if severity == 'error': + file_diagnostics[file_path]['errors'] += 1 + elif severity == 'warning': + file_diagnostics[file_path]['warnings'] += 1 + + file_diagnostics[file_path]['diagnostics'].append({ + 'line': diag.get('range', {}).get('start', {}).get('line', 0) + 1, + 'severity': severity, + 'message': diag.get('message', 'Unknown error'), + 'rule': diag.get('rule', '') + }) + + results = list(file_diagnostics.values()) + total_errors = sum(r['errors'] for r in results) + total_warnings = sum(r['warnings'] for r in results) + files_with_errors = len([r for r in results if r['errors'] > 0]) + + return { + 'total_files': output.get('summary', {}).get('filesAnalyzed', 0), + 'files_with_errors': files_with_errors, + 'total_errors': total_errors, + 'total_warnings': total_warnings, + 'results': sorted(results, key=lambda x: x['errors'], reverse=True) + } + + except subprocess.TimeoutExpired: + return { + 'total_files': 0, + 'files_with_errors': 0, + 'total_errors': 0, + 'total_warnings': 0, + 'results': [], + 'error': 'Pyright timed out (directory too large?)' + } + except Exception as e: + return { + 'total_files': 0, + 'files_with_errors': 0, + 'total_errors': 0, + 'total_warnings': 0, + 'results': [], + 'error': str(e) + } + + +def check_branch(branch_path: str) -> Dict: + """ + Run diagnostics on a branch's apps/ directory + + Args: + branch_path: Path to branch root (e.g., /home/aipass/seed) + + Returns: + Same format as check_directory + """ + apps_path = Path(branch_path) / "apps" + + if not apps_path.exists(): + return { + 'total_files': 0, + 'files_with_errors': 0, + 'total_errors': 0, + 'total_warnings': 0, + 'results': [], + 'error': f'No apps/ directory found in {branch_path}' + } + + return check_directory(str(apps_path)) + + +def format_summary(results: Dict) -> str: + """Format results as a summary string""" + if 'error' in results and results['error']: + return f"Error: {results['error']}" + + lines = [] + lines.append(f"Files analyzed: {results['total_files']}") + lines.append(f"Files with errors: {results['files_with_errors']}") + lines.append(f"Total errors: {results['total_errors']}") + lines.append(f"Total warnings: {results['total_warnings']}") + + return '\n'.join(lines) + + +if __name__ == '__main__': + # CLI usage: python diagnostics_check.py [file_or_directory] + if len(sys.argv) < 2: + console.print("[yellow]Usage:[/yellow] python diagnostics_check.py ") + sys.exit(1) + + target = sys.argv[1] + + if Path(target).is_file(): + result = check_file(target) + console.print_json(json.dumps(result, indent=2)) + else: + result = check_directory(target) + + # Summary header + console.print() + console.print("[bold cyan]TYPE ERROR DIAGNOSTICS[/bold cyan]") + console.print(f" Files analyzed: {result['total_files']}") + console.print(f" Files with errors: {result['files_with_errors']}") + + if result['total_errors'] > 0: + console.print(f" [red]Total errors: {result['total_errors']}[/red]") + else: + console.print(f" [green]Total errors: 0[/green]") + + if result['total_warnings'] > 0: + console.print(f" [yellow]Total warnings: {result['total_warnings']}[/yellow]") + + # File details + for file_result in result.get('results', [])[:20]: # Top 20 + if file_result['errors'] > 0: + console.print() + console.print(f"[red]✗[/red] {file_result['file']} [dim]({file_result['errors']} errors)[/dim]") + for diag in file_result['diagnostics'][:5]: # Top 5 per file + console.print(f" [dim]Line {diag['line']}:[/dim] {diag['message']}") diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/documentation_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/documentation_check.py new file mode 100644 index 00000000..c389fd4e --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/documentation_check.py @@ -0,0 +1,368 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: documentation_check.py - Documentation Standards Checker Handler +# Date: 2025-11-15 +# Version: 0.1.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-15): Initial implementation - documentation standards checking +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +Documentation Standards Checker Handler + +Validates documentation compliance with AIPass documentation standards. +Checks shebang, META block, module docstring, function docstrings. +""" + +import sys +import re +from pathlib import Path +from typing import Dict, List, Optional + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + # Must match standard + if rule.get('standard') and rule.get('standard') != standard: + continue + # Must match file (check if rule file path is in the full path) + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + # Check line-specific bypass + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if module follows documentation standards + + Args: + module_path: Path to Python module to check + + Returns: + dict: { + 'passed': bool, # Overall pass/fail + 'checks': [ # Individual check results + { + 'name': str, # Check name + 'passed': bool, # Pass/fail + 'message': str, # Details + } + ], + 'score': int, # 0-100 percentage + 'standard': str # Standard name + } + """ + checks = [] + path = Path(module_path) + + # Check if entire standard is bypassed for this file + if is_bypassed(module_path, 'documentation', bypass_rules=bypass_rules): + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': 'Standard bypassed via .seed/bypass.json'}], + 'score': 100, + 'standard': 'DOCUMENTATION' + } + + # Validate file exists + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'DOCUMENTATION' + } + + # Read file + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'DOCUMENTATION' + } + + # Skip __init__.py files (different documentation standards) + if path.name == '__init__.py': + return { + 'passed': True, + 'checks': [{'name': 'Documentation check', 'passed': True, 'message': '__init__.py file (skipped)'}], + 'score': 100, + 'standard': 'DOCUMENTATION' + } + + # Check 1: Shebang line + shebang_check = check_shebang(lines, module_path) + checks.append(shebang_check) + + # Check 2: META block + meta_check = check_meta_block(content, lines) + checks.append(meta_check) + + # Check 3: Module-level docstring + docstring_check = check_module_docstring(lines) + checks.append(docstring_check) + + # Check 4: Function docstrings (for public functions) + function_docs_check = check_function_docstrings(content, lines) + if function_docs_check: + checks.append(function_docs_check) + + # Calculate score + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + + # Overall pass if score >= 75% + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'DOCUMENTATION' + } + + +def check_shebang(lines: List[str], module_path: str = "") -> Dict: + """ + Check for correct shebang line + + Should be: #!/home/aipass/.venv/bin/python3 + EXCEPTION: MEMORY_BANK uses #!/home/aipass/MEMORY_BANK/.venv/bin/python3 + """ + if not lines: + return { + 'name': 'Shebang line', + 'passed': False, + 'message': 'File is empty' + } + + first_line = lines[0].strip() + + # Determine if this is a MEMORY_BANK file + is_memory_bank = '/MEMORY_BANK/' in module_path + + # Define valid shebangs + standard_shebang = '#!/home/aipass/.venv/bin/python3' + memory_bank_shebang = '#!/home/aipass/MEMORY_BANK/.venv/bin/python3' + + # Check for correct shebang based on location + if is_memory_bank: + if first_line == memory_bank_shebang: + return { + 'name': 'Shebang line', + 'passed': True, + 'message': f'Correct MEMORY_BANK shebang ({memory_bank_shebang})' + } + elif first_line == standard_shebang: + return { + 'name': 'Shebang line', + 'passed': False, + 'message': f'Wrong shebang for MEMORY_BANK: {first_line} (should be {memory_bank_shebang})' + } + else: + if first_line == standard_shebang: + return { + 'name': 'Shebang line', + 'passed': True, + 'message': f'Correct shebang ({standard_shebang})' + } + elif first_line == memory_bank_shebang: + return { + 'name': 'Shebang line', + 'passed': False, + 'message': f'Wrong shebang: {first_line} (should be {standard_shebang} for non-MEMORY_BANK files)' + } + + # Handle other shebangs + if first_line.startswith('#!'): + expected = memory_bank_shebang if is_memory_bank else standard_shebang + return { + 'name': 'Shebang line', + 'passed': False, + 'message': f'Wrong shebang: {first_line} (should be {expected})' + } + + expected = memory_bank_shebang if is_memory_bank else standard_shebang + return { + 'name': 'Shebang line', + 'passed': False, + 'message': f'Missing shebang line (should be {expected})' + } + + +def check_meta_block(content: str, lines: List[str]) -> Dict: + """ + Check for complete META block + + Required fields: + - Name: filename - Description + - Date: YYYY-MM-DD + - Version: X.Y.Z + - Category: branch or branch/handlers + - CHANGELOG: At least one entry + - CODE STANDARDS: Reference + """ + # Check for META header markers + if '# ===================AIPASS====================' not in content: + return { + 'name': 'META block', + 'passed': False, + 'message': 'Missing META block (no AIPASS header found)' + } + + if '# META DATA HEADER' not in content: + return { + 'name': 'META block', + 'passed': False, + 'message': 'Missing "# META DATA HEADER" line' + } + + # Check required fields + missing_fields = [] + + if not re.search(r'# Name:\s+[\w\-]+\.py\s+-\s+', content): + missing_fields.append('Name') + + if not re.search(r'# Date:\s+\d{4}-\d{2}-\d{2}', content): + missing_fields.append('Date') + + if not re.search(r'# Version:\s+\d+\.\d+\.\d+', content): + missing_fields.append('Version') + + if not re.search(r'# Category:\s+\w+', content): + missing_fields.append('Category') + + if '# CHANGELOG' not in content: + missing_fields.append('CHANGELOG') + + if '# CODE STANDARDS:' not in content: + missing_fields.append('CODE STANDARDS') + + if missing_fields: + return { + 'name': 'META block', + 'passed': False, + 'message': f'Incomplete META block - missing: {", ".join(missing_fields)}' + } + + return { + 'name': 'META block', + 'passed': True, + 'message': 'Complete META block with all required fields' + } + + +def check_module_docstring(lines: List[str]) -> Dict: + """ + Check for module-level docstring after META block + + Should be triple-quoted string explaining module purpose + """ + # Find the end of META block + meta_end = -1 + for i, line in enumerate(lines): + if '# =============================================' in line and i > 0: + meta_end = i + break + + if meta_end == -1: + return { + 'name': 'Module docstring', + 'passed': False, + 'message': 'Cannot find end of META block' + } + + # Look for docstring within next 10 lines after META block + for i in range(meta_end + 1, min(meta_end + 11, len(lines))): + stripped = lines[i].strip() + if stripped.startswith('"""') or stripped.startswith("'''"): + return { + 'name': 'Module docstring', + 'passed': True, + 'message': 'Module-level docstring present' + } + + return { + 'name': 'Module docstring', + 'passed': False, + 'message': 'Missing module-level docstring after META block' + } + + +def check_function_docstrings(content: str, lines: List[str]) -> Optional[Dict]: + """ + Check that public functions have docstrings + + Public functions (not starting with _) should have docstrings + """ + # Find all public function definitions + public_functions = [] + for i, line in enumerate(lines, 1): + stripped = line.strip() + if stripped.startswith('def ') and not stripped.startswith('def _'): + # Extract function name + match = re.match(r'def\s+(\w+)\s*\(', stripped) + if match: + func_name = match.group(1) + public_functions.append((func_name, i)) + + if not public_functions: + # No public functions, check passes + return None + + # Check each function for docstring + undocumented = [] + for func_name, line_num in public_functions: + # Look for docstring in next few lines + has_docstring = False + for check_line in range(line_num, min(line_num + 5, len(lines) + 1)): + if check_line - 1 < len(lines): + check_stripped = lines[check_line - 1].strip() + if check_stripped.startswith('"""') or check_stripped.startswith("'''"): + has_docstring = True + break + + if not has_docstring: + undocumented.append(f'{func_name} (line {line_num})') + + if undocumented: + return { + 'name': 'Function docstrings', + 'passed': False, + 'message': f'{len(undocumented)} public functions missing docstrings: {undocumented[0]}' + } + + return { + 'name': 'Function docstrings', + 'passed': True, + 'message': f'All {len(public_functions)} public functions have docstrings' + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/documentation_content.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/documentation_content.py new file mode 100644 index 00000000..5fa0c391 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/documentation_content.py @@ -0,0 +1,152 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: documentation_content.py - Documentation Standards Content Handler +# Date: 2025-11-13 +# Version: 1.0.0 +# Category: seed/standards/handlers +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-13): Truth-checked and condensed - verified against actual codebase +# - v0.1.0 (2025-11-13): Initial handler - Documentation standards content +# +# CODE STANDARDS: +# - Handler provides content, module orchestrates output +# - Pure function - returns string, no side effects +# ============================================= + +""" +Documentation Standards Content Handler + +Condensed documentation standards verified against actual codebase. +Truth-checked 2025-11-13 against cortex and seed production code. +""" + + +def get_documentation_standards() -> str: + """Return formatted documentation standards content with Rich markup + + Returns: + str: Formatted standards text with Rich styling + """ + lines = [ + "[bold cyan]WHY DOCUMENT?[/bold cyan]", + " • AI agents need metadata for context extraction", + " • Humans need quick file understanding without reading code", + " • Consistency = predictability = faster development", + "", + "─" * 70, + "", + "[bold cyan]REQUIRED: META HEADER (Every Python file)[/bold cyan]", + "", + " [dim]#!/home/aipass/.venv/bin/python3[/dim]", + " [dim]# -*- coding: utf-8 -*- # Optional[/dim]", + " [dim][/dim]", + " [dim]# ===================AIPASS====================[/dim]", + " [dim]# META DATA HEADER[/dim]", + " [dim]# Name: filename.py - Brief Description[/dim]", + " [dim]# Date: 2025-XX-XX[/dim]", + " [dim]# Version: 0.1.0[/dim]", + " [dim]# Category: branch or branch/handlers[/dim]", + " [dim]#[/dim]", + " [dim]# CHANGELOG (Max 5 entries):[/dim]", + " [dim]# - v0.1.0 (2025-XX-XX): What changed[/dim]", + " [dim]#[/dim]", + " [dim]# CODE STANDARDS:[/dim]", + " [dim]# - Note about standards followed[/dim]", + " [dim]# ==============================================[/dim]", + "", + "[yellow]KEY RULES:[/yellow]", + " 1. Shebang points to AIPass venv", + " 2. META block = AI-scannable metadata", + " 3. Category shows branch location (cortex vs cortex/handlers)", + " 4. CHANGELOG keeps last 5 versions max", + "", + "─" * 70, + "", + "[bold cyan]REQUIRED: MODULE DOCSTRING[/bold cyan]", + "", + " [dim]\"\"\"", + " Module Title", + "", + " Brief purpose description.", + " Key features or workflow if needed.", + "", + " Usage examples (optional).", + " \"\"\"[/dim]", + "", + "[yellow]RULES:[/yellow]", + " • Goes right after META block", + " • Tells WHAT the file does (not HOW)", + " • Keep brief - details go in function docstrings", + "", + "─" * 70, + "", + "[bold cyan]FUNCTION DOCSTRINGS (Google-style)[/bold cyan]", + "", + " [dim]def function_name(arg: Type) -> ReturnType:", + " \"\"\"", + " One-line summary", + "", + " Args:", + " arg: Description of parameter", + "", + " Returns:", + " Description of return value", + "", + " Raises:", + " Exception: When raised (optional)", + " \"\"\"[/dim]", + "", + "[yellow]RULES:[/yellow]", + " • Type hints REQUIRED on all functions", + " • Args/Returns/Raises sections for clarity", + " • Skip Raises if using error handler decorators", + "", + "─" * 70, + "", + "[bold cyan]IMPORT ORGANIZATION[/bold cyan]", + "", + " [bold]Order (verified in actual code):[/bold]", + " 1. Infrastructure (AIPASS_ROOT, sys.path) - if needed", + " 2. Standard library imports", + " 3. Prax logger (always: [dim]from prax.apps.modules.logger import system_logger as logger[/dim])", + " 4. Internal handler imports", + "", + "─" * 70, + "", + "[bold cyan]SECTION SEPARATORS[/bold cyan]", + "", + " [dim]# =============================================================================[/dim]", + " [dim]# SECTION NAME[/dim]", + " [dim]# =============================================================================[/dim]", + "", + " Common sections: CONSTANTS, FILE OPERATIONS, HELPER FUNCTIONS", + "", + "─" * 70, + "", + "[bold cyan]INLINE COMMENTS (use sparingly)[/bold cyan]", + "", + " [bold]Good:[/bold] Explain WHY, not WHAT", + " [dim]# Memory file suffixes to check (JSON format)[/dim]", + " [dim]memory_suffixes = [\".json\", \".local.json\"][/dim]", + "", + " [bold]Bad:[/bold] Obvious narration", + " [dim]# Set x to 5[/dim]", + " [dim]x = 5[/dim]", + "", + "[yellow]REMEMBER:[/yellow] Good code documents itself. Comments are last resort.", + "", + "─" * 70, + "", + "[bold cyan]VERIFICATION:[/bold cyan]", + " Standards verified against actual production code:", + " • [dim]/home/aipass/aipass_core/cortex/apps/[/dim]", + " • [dim]/home/aipass/seed/apps/[/dim]", + "", + "[bold cyan]FULL REFERENCE:[/bold cyan]", + " [dim]/home/aipass/standards/CODE_STANDARDS/documentation.md[/dim]", + ] + + return "\n".join(lines) diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/encapsulation_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/encapsulation_check.py new file mode 100644 index 00000000..8d50b6d6 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/encapsulation_check.py @@ -0,0 +1,546 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: encapsulation_check.py - Handler Encapsulation Standards Checker +# Date: 2025-11-28 +# Version: 0.1.1 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-28): Initial implementation - cross-handler import detection +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +Handler Encapsulation Standards Checker + +Validates that handlers are properly encapsulated: +- No cross-branch handler imports (Branch A importing Branch B's handlers) +- No cross-package handler imports (handlers/X importing handlers/Y) +- Handlers should be accessed through module entry points, not directly +""" + +import re +import json +from pathlib import Path +from typing import Dict, List, Optional + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +SEED_ROOT = Path.home() / "seed" + +# Branch registry for detecting branch context +BRANCH_REGISTRY_PATH = Path.home() / "BRANCH_REGISTRY.json" + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + # Must match standard + if rule.get('standard') and rule.get('standard') != standard: + continue + # Must match file (check if rule file path is in the full path) + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + # Check line-specific bypass + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def get_branch_from_path(file_path: str) -> Optional[Dict]: + """Detect which branch a file belongs to""" + try: + if not BRANCH_REGISTRY_PATH.exists(): + return None + + with open(BRANCH_REGISTRY_PATH, 'r', encoding='utf-8') as f: + registry = json.load(f) + + if not registry: + return None + + file_path = str(Path(file_path).resolve()) + + # Sort branches by path length (longest first) to match most specific + branches = sorted(registry.get('branches', []), + key=lambda b: len(b.get('path', '')), + reverse=True) + + for branch in branches: + branch_path = branch.get('path', '') + if file_path.startswith(branch_path + '/') or file_path == branch_path: + return branch + + return None + except Exception: + return None + + +def extract_branch_from_import(import_line: str) -> Optional[str]: + """ + Extract branch name from an import statement + + Examples: + 'from flow.apps.handlers.plan.validator import X' -> 'flow' + 'from aipass_core.api.apps.handlers.openrouter import X' -> 'api' + 'from apps.handlers.json import X' -> None (local, no branch) + """ + # Pattern 1: branch.apps.handlers... + match = re.search(r'from\s+(\w+)\.apps\.handlers', import_line) + if match: + return match.group(1) + + # Pattern 2: aipass_core.branch.apps.handlers... + match = re.search(r'from\s+aipass_core\.(\w+)\.apps\.handlers', import_line) + if match: + return match.group(1) + + # Pattern 3: import branch.apps.handlers... + match = re.search(r'import\s+(\w+)\.apps\.handlers', import_line) + if match: + return match.group(1) + + return None + + +def extract_handler_package(import_line: str) -> Optional[str]: + """ + Extract the handler package name from an import + + Examples: + 'from apps.handlers.json.json_handler import X' -> 'json' + 'from apps.handlers.dashboard.refresh import X' -> 'dashboard' + 'from flow.apps.handlers.plan.validator import X' -> 'plan' + """ + match = re.search(r'apps\.handlers\.(\w+)', import_line) + if match: + return match.group(1) + return None + + +def get_file_handler_package(file_path: str) -> Optional[str]: + """ + Get the handler package a file belongs to + + Examples: + '/home/.../apps/handlers/json/json_handler.py' -> 'json' + '/home/.../apps/modules/something.py' -> None (not a handler) + """ + path_str = str(file_path) + + if 'apps/handlers/' not in path_str: + return None + + # Extract package after apps/handlers/ + match = re.search(r'apps/handlers/(\w+)', path_str) + if match: + return match.group(1) + return None + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if file respects handler encapsulation + + Args: + module_path: Path to Python file to check + bypass_rules: Optional list of bypass rules to apply + + Returns: + dict: { + 'passed': bool, + 'checks': [{'name': str, 'passed': bool, 'message': str}], + 'score': int, + 'standard': str + } + """ + checks = [] + path = Path(module_path) + + # Check if entire standard is bypassed + if is_bypassed(module_path, 'encapsulation', bypass_rules=bypass_rules): + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': 'Standard bypassed via .seed/bypass.json'}], + 'score': 100, + 'standard': 'ENCAPSULATION' + } + + # Validate file exists + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'ENCAPSULATION' + } + + # Read file + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'ENCAPSULATION' + } + + # Detect this file's context + file_branch = get_branch_from_path(module_path) + file_branch_name = file_branch.get('name', '').lower() if file_branch else None + file_handler_package = get_file_handler_package(module_path) + is_handler_file = file_handler_package is not None + is_module_file = 'apps/modules/' in str(module_path) + + # Check 1: Cross-branch handler imports + cross_branch_check = check_cross_branch_imports( + lines, module_path, file_branch_name, bypass_rules + ) + checks.append(cross_branch_check) + + # Check 2: Cross-package handler imports (only for handler files) + if is_handler_file: + cross_package_check = check_cross_package_imports( + lines, module_path, file_handler_package, bypass_rules + ) + checks.append(cross_package_check) + + # Check 3: Direct handler imports from non-handler/non-module files + if not is_handler_file and not is_module_file: + direct_import_check = check_direct_handler_imports( + lines, module_path, bypass_rules + ) + checks.append(direct_import_check) + + # Calculate score + if not checks: + return { + 'passed': True, + 'checks': [{'name': 'Encapsulation', 'passed': True, 'message': 'No checks applicable'}], + 'score': 100, + 'standard': 'ENCAPSULATION' + } + + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 100 + + return { + 'passed': score >= 75, + 'checks': checks, + 'score': score, + 'standard': 'ENCAPSULATION' + } + + +def check_cross_branch_imports(lines: List[str], module_path: str, + file_branch: Optional[str], bypass_rules: list | None = None) -> Dict: + """ + Check for cross-branch handler imports + + BAD: from flow.apps.handlers.plan.validator import X (when not in flow branch) + BAD: from api.apps.handlers.openrouter.client import X (when not in api branch) + + EXCEPTIONS: + - Prax logger (from prax.apps.modules.logger) - allowed everywhere + - CLI services (from cli.apps.modules) - allowed everywhere + - Same branch imports - allowed + """ + violations = [] + + in_docstring = False + for i, line in enumerate(lines, 1): + stripped = line.strip() + + # Track docstrings + if stripped.startswith('"""') or stripped.startswith("'''"): + quote_marker = '"""' if stripped.startswith('"""') else "'''" + quote_count = stripped.count(quote_marker) + if quote_count >= 2: + continue + else: + in_docstring = not in_docstring + + if in_docstring or not stripped or stripped.startswith('#'): + continue + + # Check for imports + if not ('from ' in stripped or 'import ' in stripped): + continue + + # Skip string literals - check if line is a string or apps.handlers is inside quotes + if stripped.startswith('"') or stripped.startswith("'"): + continue + if '"from ' in stripped or "'from " in stripped: + continue + # Check if apps.handlers appears inside quotes (documentation examples) + if '"apps.handlers' in stripped or "'apps.handlers" in stripped: + continue + if 'apps.handlers' in stripped: + # Check if it's inside a string by looking for quotes before it + handler_pos = stripped.find('apps.handlers') + before = stripped[:handler_pos] + # If there's an odd number of quotes before, it's inside a string + if before.count('"') % 2 == 1 or before.count("'") % 2 == 1: + continue + + # Extract code part (before comment) + code_part = stripped.split('#')[0] if '#' in stripped else stripped + + # Check for handler imports + if 'apps.handlers' not in code_part: + continue + + # Check if bypassed + if is_bypassed(module_path, 'encapsulation', line=i, bypass_rules=bypass_rules): + continue + + # Extract the branch being imported from + imported_branch = extract_branch_from_import(code_part) + + if imported_branch is None: + # Local import (from apps.handlers.X) - will be caught by cross-package check + continue + + # Allow same-branch imports + if file_branch and imported_branch.lower() == file_branch.lower(): + continue + + # Disallow cross-branch handler imports (even from service branches) + # Service branches should be accessed via modules, not handlers + violations.append({ + 'line': i, + 'code': code_part.strip(), + 'from_branch': imported_branch, + 'to_branch': file_branch or 'unknown' + }) + + if violations: + first = violations[0] + return { + 'name': 'Cross-branch handler imports', + 'passed': False, + 'message': f"Line {first['line']}: {first['from_branch']}.apps.handlers imported (use modules entry point)" + } + + return { + 'name': 'Cross-branch handler imports', + 'passed': True, + 'message': 'No cross-branch handler imports detected' + } + + +def check_cross_package_imports(lines: List[str], module_path: str, + file_package: str, bypass_rules: list | None = None) -> Dict: + """ + Check for cross-package handler imports within same branch + + BAD (in handlers/standards/): from apps.handlers.json.json_handler import X + GOOD: Use relative imports or module entry points + + EXCEPTIONS: + - json_handler is allowed (default handler pattern) + - Same package relative imports (from .something import X) + """ + violations = [] + + # Allowed default handlers that can be imported anywhere + allowed_handlers = {'json_handler', 'file_handler'} + + in_docstring = False + for i, line in enumerate(lines, 1): + stripped = line.strip() + + # Track docstrings + if stripped.startswith('"""') or stripped.startswith("'''"): + quote_marker = '"""' if stripped.startswith('"""') else "'''" + quote_count = stripped.count(quote_marker) + if quote_count >= 2: + continue + else: + in_docstring = not in_docstring + + if in_docstring or not stripped or stripped.startswith('#'): + continue + + # Check for imports + if not ('from ' in stripped or 'import ' in stripped): + continue + + # Skip string literals + if stripped.startswith('"') or stripped.startswith("'"): + continue + if '"from ' in stripped or "'from " in stripped: + continue + if '"apps.handlers' in stripped or "'apps.handlers" in stripped: + continue + if 'apps.handlers' in stripped: + handler_pos = stripped.find('apps.handlers') + before = stripped[:handler_pos] + if before.count('"') % 2 == 1 or before.count("'") % 2 == 1: + continue + + # Skip relative imports (same package) + if stripped.startswith('from .'): + continue + + # Extract code part + code_part = stripped.split('#')[0] if '#' in stripped else stripped + + # Check for handler imports (local, not cross-branch) + if 'apps.handlers' not in code_part: + continue + + # Skip cross-branch imports (handled by other check) + imported_branch = extract_branch_from_import(code_part) + if imported_branch is not None: + continue + + # Check if bypassed + if is_bypassed(module_path, 'encapsulation', line=i, bypass_rules=bypass_rules): + continue + + # Extract the handler package being imported + imported_package = extract_handler_package(code_part) + + if imported_package is None: + continue + + # Allow same-package imports + if imported_package == file_package: + continue + + # Allow default handlers + for allowed in allowed_handlers: + if allowed in code_part: + continue + + # This is a cross-package handler import + violations.append({ + 'line': i, + 'code': code_part.strip(), + 'from_package': imported_package, + 'to_package': file_package + }) + + if violations: + first = violations[0] + return { + 'name': 'Cross-package handler imports', + 'passed': False, + 'message': f"Line {first['line']}: handlers.{first['from_package']} imported from handlers.{first['to_package']}" + } + + return { + 'name': 'Cross-package handler imports', + 'passed': True, + 'message': 'No forbidden cross-package handler imports' + } + + +def check_direct_handler_imports(lines: List[str], module_path: str, + bypass_rules: list | None = None) -> Dict: + """ + Check that non-handler, non-module files don't import handlers directly + + Entry points and other files should use module entry points, not handlers. + + BAD (in api.py): from apps.handlers.openrouter.client import get_response + GOOD: from apps.modules.openrouter_client import get_response + + EXCEPTIONS: + - json_handler is allowed (default pattern) + - file_handler is allowed (default pattern) + """ + violations = [] + + # Allowed default handlers + allowed_handlers = {'json_handler', 'file_handler'} + + in_docstring = False + for i, line in enumerate(lines, 1): + stripped = line.strip() + + # Track docstrings + if stripped.startswith('"""') or stripped.startswith("'''"): + quote_marker = '"""' if stripped.startswith('"""') else "'''" + quote_count = stripped.count(quote_marker) + if quote_count >= 2: + continue + else: + in_docstring = not in_docstring + + if in_docstring or not stripped or stripped.startswith('#'): + continue + + # Check for imports + if not ('from ' in stripped or 'import ' in stripped): + continue + + # Skip string literals + if stripped.startswith('"') or stripped.startswith("'"): + continue + if '"from ' in stripped or "'from " in stripped: + continue + if '"apps.handlers' in stripped or "'apps.handlers" in stripped: + continue + if 'apps.handlers' in stripped: + handler_pos = stripped.find('apps.handlers') + before = stripped[:handler_pos] + if before.count('"') % 2 == 1 or before.count("'") % 2 == 1: + continue + + # Extract code part + code_part = stripped.split('#')[0] if '#' in stripped else stripped + + # Check for handler imports + if 'apps.handlers' not in code_part: + continue + + # Check if bypassed + if is_bypassed(module_path, 'encapsulation', line=i, bypass_rules=bypass_rules): + continue + + # Allow default handlers + is_allowed = False + for allowed in allowed_handlers: + if allowed in code_part: + is_allowed = True + break + + if is_allowed: + continue + + # This file shouldn't be importing handlers directly + violations.append({ + 'line': i, + 'code': code_part.strip() + }) + + if violations: + first = violations[0] + return { + 'name': 'Direct handler imports', + 'passed': False, + 'message': f"Line {first['line']}: Handler imported directly (use module entry point)" + } + + return { + 'name': 'Direct handler imports', + 'passed': True, + 'message': 'No direct handler imports from entry point' + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/error_handling_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/error_handling_check.py new file mode 100644 index 00000000..1502b081 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/error_handling_check.py @@ -0,0 +1,330 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: error_handling_check.py - Error Handling Standards Checker Handler +# Date: 2025-11-21 +# Version: 1.1.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v2.0.0 (2026-02-27): Unified Prax logging — handlers now ALLOWED/ENCOURAGED to use Prax, stdlib getLogger flagged +# - v1.1.0 (2026-01-31): Added ERROR vs WARNING usage check - detects user input validation in logger.error() +# - v1.0.0 (2025-11-21): Initial implementation - 3-tier logging validation +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +Error Handling Standards Checker Handler + +Validates module compliance with AIPass 3-tier logging standards. +Checks Prax imports in modules/handlers, logger calls in handlers. +""" + +import sys +import re +from pathlib import Path +from typing import Dict, List + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + # Must match standard + if rule.get('standard') and rule.get('standard') != standard: + continue + # Must match file (check if rule file path is in the full path) + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + # Check line-specific bypass + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if module follows 3-tier error handling standards + + Args: + module_path: Path to Python module to check + bypass_rules: Optional list of bypass rules to skip certain checks + + Returns: + dict: { + 'passed': bool, # Overall pass/fail + 'checks': [ # Individual check results + { + 'name': str, # Check name + 'passed': bool, # Pass/fail + 'message': str, # Details + } + ], + 'score': int, # 0-100 percentage + 'standard': str # Standard name + } + """ + checks = [] + path = Path(module_path) + + # Check if entire standard is bypassed for this file + if is_bypassed(module_path, 'error_handling', bypass_rules=bypass_rules): + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': 'Standard bypassed via .seed/bypass.json'}], + 'score': 100, + 'standard': 'ERROR_HANDLING' + } + + # Validate file exists + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'ERROR_HANDLING' + } + + # Read file + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'ERROR_HANDLING' + } + + # Determine file type + is_handler = '/handlers/' in module_path + is_module = '/modules/' in module_path + is_entry_point = path.name.endswith('.py') and '/apps/' in module_path and path.parent.name == 'apps' + + # Check 1: Modules MUST import Prax + if is_module: + prax_import_check = check_module_has_prax(content, module_path, bypass_rules) + checks.append(prax_import_check) + + # Check 2: Handlers MUST NOT use stdlib logging.getLogger + if is_handler: + no_stdlib_check = check_handler_no_stdlib_logging(content, module_path, bypass_rules) + checks.append(no_stdlib_check) + + # Check 4: Modules should have error logging + if is_module: + error_logging_check = check_module_error_logging(content) + checks.append(error_logging_check) + + # Check 5: Modules - ERROR vs WARNING usage + if is_module: + error_warning_check = check_error_vs_warning_usage(lines, module_path, bypass_rules) + checks.append(error_warning_check) + + # If not module or handler, skip checks + if not is_module and not is_handler and not is_entry_point: + return { + 'passed': True, + 'checks': [{'name': 'Error handling check', 'passed': True, 'message': 'Not a module or handler (skipped)'}], + 'score': 100, + 'standard': 'ERROR_HANDLING' + } + + # Calculate score + if not checks: + return { + 'passed': True, + 'checks': [{'name': 'Error handling check', 'passed': True, 'message': 'No checks applicable'}], + 'score': 100, + 'standard': 'ERROR_HANDLING' + } + + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + + # Overall pass if score >= 75% + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'ERROR_HANDLING' + } + + +def check_module_has_prax(content: str, file_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check that modules import Prax logger + + Modules MUST import Prax for business logging + """ + has_prax_import = 'from prax.apps.modules.logger import system_logger' in content + + if has_prax_import: + return { + 'name': 'Module Prax import', + 'passed': True, + 'message': 'Module imports Prax logger (required for business logging)' + } + else: + # Check if bypassed (whole file bypass for this check) + if is_bypassed(file_path, 'error_handling', None, bypass_rules): + return { + 'name': 'Module Prax import', + 'passed': True, + 'message': 'Module Prax import check bypassed' + } + return { + 'name': 'Module Prax import', + 'passed': False, + 'message': 'Module MUST import Prax: from prax.apps.modules.logger import system_logger as logger' + } + + +def check_handler_no_stdlib_logging(content: str, file_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check that handlers do NOT use stdlib logging.getLogger(). + + Handlers should use Prax system_logger instead. stdlib logging + creates blind spots invisible to Prax monitor. + """ + lines = content.split('\n') + stdlib_lines = [] + + in_docstring = False + for i, line in enumerate(lines, 1): + stripped = line.strip() + + # Track docstrings + if '"""' in line or "'''" in line: + in_docstring = not in_docstring + continue + + # Skip if in docstring or comment + if in_docstring or stripped.startswith('#'): + continue + + # Check for stdlib logging.getLogger usage + if re.search(r'logging\.getLogger\s*\(', line): + if not is_bypassed(file_path, 'error_handling', i, bypass_rules): + stdlib_lines.append(i) + + if stdlib_lines: + return { + 'name': 'Handler stdlib logging', + 'passed': False, + 'message': f'Handler uses stdlib logging.getLogger() on lines {stdlib_lines[:3]} — use Prax system_logger instead' + } + else: + return { + 'name': 'Handler stdlib logging', + 'passed': True, + 'message': 'Handler correctly avoids stdlib logging.getLogger()' + } + + +def check_module_error_logging(content: str) -> Dict: + """ + Check that modules have Prax logger available for error logging. + + Entry point @track_operation handles exception catching. + Modules just need Prax import (checked separately). + This check passes if Prax is imported - modules CAN log but aren't required to. + """ + has_prax_import = 'from prax.apps.modules.logger import system_logger' in content + + if has_prax_import: + return { + 'name': 'Module error logging', + 'passed': True, + 'message': 'Module has Prax logger available (entry point handles exceptions)' + } + else: + # No Prax import - this is caught by check_module_has_prax + # Still pass here to avoid double-flagging + return { + 'name': 'Module error logging', + 'passed': True, + 'message': 'Module error logging deferred to Prax import check' + } + + +def check_error_vs_warning_usage(lines: List[str], file_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check that logger.error() is used for system failures, not user input validation. + + User input validation (should be WARNING): + - "not found", "invalid", "required", "missing", "does not exist" + + System failures (should be ERROR): + - File I/O errors, crashes, dependency failures + """ + # Patterns that indicate user input validation (should be warning, not error) + user_input_patterns = [ + r'not\s+found', + r'invalid', + r'\brequired\b', + r'\bmissing\b', + r'does\s+not\s+exist', + r'unable\s+to\s+find', + r'no\s+such', + r'doesn\'t\s+exist', + r'not\s+exist', + ] + + violations = [] + + in_docstring = False + for i, line in enumerate(lines, 1): + stripped = line.strip() + + # Track docstrings + if '"""' in line or "'''" in line: + in_docstring = not in_docstring + continue + + # Skip if in docstring or comment + if in_docstring or stripped.startswith('#'): + continue + + # Look for logger.error() calls + if re.search(r'logger\.error\s*\(', line): + # Check if the message contains user input patterns + line_lower = line.lower() + for pattern in user_input_patterns: + if re.search(pattern, line_lower): + # Check if bypassed + if not is_bypassed(file_path, 'error_handling', i, bypass_rules): + violations.append(i) + break + + if violations: + return { + 'name': 'ERROR vs WARNING usage', + 'passed': False, + 'message': f'logger.error() used for user input validation on lines {violations[:5]} - use logger.warning() instead' + } + else: + return { + 'name': 'ERROR vs WARNING usage', + 'passed': True, + 'message': 'logger.error() correctly used for system failures only' + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/error_handling_content.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/error_handling_content.py new file mode 100644 index 00000000..3803320b --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/error_handling_content.py @@ -0,0 +1,173 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: error_handling_content.py - Error Handling Standards Content Handler +# Date: 2025-11-21 +# Version: 1.1.0 +# Category: seed/standards/handlers +# +# CHANGELOG (Max 5 entries): +# - v1.1.0 (2026-01-31): Added ERROR vs WARNING log level guidelines +# - v1.0.0 (2025-11-21): Initial handler - error handling 3-tier standard +# +# CODE STANDARDS: +# - Handler provides content, module orchestrates output +# - Pure function - returns string, no side effects +# ============================================= + +""" +Error Handling Standards Content Handler + +Provides formatted error handling standards content (3-tier architecture). +Module orchestrates, handler implements. +""" + + +def get_error_handling_standards() -> str: + """Return formatted error handling standards content with Rich markup + + Returns: + str: Formatted standards text with Rich styling + """ + lines = [ + "[bold red]3-TIER LOGGING ARCHITECTURE[/bold red]", + "", + "[yellow]CORE PRINCIPLE:[/yellow] Logging responsibility follows architectural hierarchy", + "", + "[bold cyan]TIER 1: ENTRY POINTS[/bold cyan] (flow.py, seed.py, etc.)", + " [dim]Prax Import:[/dim] YES (minimal)", + " [dim]Logging Scope:[/dim] Operational only (discovery, routing, help)", + " [red]✗ NO business error logging[/red]", + "", + "[bold cyan]TIER 2: MODULES[/bold cyan] (apps/modules/*.py)", + " [dim]Prax Import:[/dim] [green]YES (REQUIRED)[/green]", + " [dim]Logging Scope:[/dim] [green]ALL BUSINESS LOGGING[/green]", + " [green]✓ Log ALL errors: logger.error(f'[{MODULE_NAME}] {msg}')[/green]", + " [green]✓ Catch exceptions from handlers[/green]", + " [green]✓ Provide context for debugging[/green]", + " [green]✓ Return bool to entry point[/green]", + "", + "[bold cyan]TIER 3: HANDLERS[/bold cyan] (apps/handlers/**/*.py)", + " [dim]Prax Import:[/dim] [red]NO (PROHIBITED)[/red]", + " [dim]Logging Scope:[/dim] [red]NONE[/red]", + " [red]✗ NO Prax imports[/red]", + " [red]✗ NO logger calls[/red]", + " [green]✓ Return status dicts or raise exceptions[/green]", + " [green]✓ Pure workers - testable in isolation[/green]", + "", + "─" * 70, + "", + "[bold yellow]HANDLER RETURN PATTERNS:[/bold yellow]", + "", + "[dim]Option 1: Status Dict[/dim]", + " return {'success': True, 'data': result, 'error': None}", + " return {'success': False, 'data': None, 'error': 'Error message'}", + "", + "[dim]Option 2: Raise Exceptions[/dim]", + " raise ValueError('Invalid input')", + " raise FileNotFoundError('Config missing')", + "", + "─" * 70, + "", + "[bold yellow]MODULE ERROR HANDLING PATTERN:[/bold yellow]", + "", + " [dim]MODULE_NAME = \"module_name\"[/dim]", + "", + " [dim]try:[/dim]", + " [dim]result = handler_function(**args)[/dim]", + " [dim]if result['success']:[/dim]", + " [dim]logger.info(f\"[{MODULE_NAME}] Success\")[/dim]", + " [dim]else:[/dim]", + " [dim]logger.error(f\"[{MODULE_NAME}] {result['error']}\")[/dim]", + " [dim]except Exception as e:[/dim]", + " [dim]logger.error(f\"[{MODULE_NAME}] Error: {e}\")[/dim]", + "", + "─" * 70, + "", + "[bold yellow]LOG LEVEL GUIDELINES: ERROR vs WARNING[/bold yellow]", + "", + "[dim]Core Distinction:[/dim] ERROR triggers Prax escalation, WARNING does not", + "", + "[red]logger.error()[/red] → [bold]System failures[/bold]", + " File I/O errors, crashes, dependency failures, unexpected exceptions", + "", + "[yellow]logger.warning()[/yellow] → [bold]User input issues[/bold]", + " 'Plan not found', 'Field required', 'Invalid format', 'Already exists'", + "", + "[dim]Pattern:[/dim]", + " [red]# System failure → ERROR (Prax escalates)[/red]", + " [dim]logger.error(f\"[{MODULE_NAME}] Failed to write file: {e}\")[/dim]", + "", + " [yellow]# User input issue → WARNING (no escalation)[/yellow]", + " [dim]logger.warning(f\"[{MODULE_NAME}] Plan {plan_id} not found\")[/dim]", + "", + "[green]✓ CLI can still show 'ERROR' text to user (feedback)[/green]", + "[green]✓ System logs use WARNING level (no Prax escalation)[/green]", + "", + "─" * 70, + "", + "[bold yellow]WHY THIS PATTERN:[/bold yellow]", + "", + "[green]✓ Scalability:[/green] 17 branches × 50+ handlers = 850 files to manage", + "[green]✓ Auditability:[/green] Check modules/ only - all logging in one place", + "[green]✓ Testability:[/green] Automated scans verify compliance", + "[green]✓ Consistency:[/green] Single pattern across entire ecosystem", + "", + "─" * 70, + "", + "[bold yellow]VALIDATION RULES:[/bold yellow]", + "", + "[dim]# All modules MUST import Prax[/dim]", + "[dim]grep -r \"from prax\" apps/modules/*.py[/dim]", + "", + "[dim]# NO handlers can import Prax[/dim]", + "[dim]grep -r \"from prax\" apps/handlers/**/*.py # Should find NOTHING[/dim]", + "", + "[dim]# NO handlers can call logger[/dim]", + "[dim]grep -r \"logger\\.\" apps/handlers/**/*.py # Should find NOTHING[/dim]", + "", + "─" * 70, + "", + "[bold cyan]REFERENCE:[/bold cyan]", + " [dim]/home/aipass/standards/CODE_STANDARDS/error_handling.md[/dim]", + " [dim]/home/aipass/aipass_core/flow/apps/modules/ (working example)[/dim]", + " [dim]/home/aipass/seed/apps/modules/ (reference implementation)[/dim]", + "", + "[bold]Decision:[/bold] 3-Tier approved 2025-11-21, ERROR/WARNING 2026-01-31", + "[bold]Status:[/bold] Active - All 18 branches", + "", + "─" * 70, + "", + "[bold magenta]SERVICE LOGGING STANDARDS[/bold magenta]", + "", + "[yellow]For services with user-facing interactions (bridges, APIs, bots):[/yellow]", + "", + "[bold cyan]1. LOG MEANINGFUL CONTENT[/bold cyan]", + " [green]✓ 'Received from user X: hello' + 'Sent: Hi!'[/green]", + " [red]✗ 'Message received' + 'Response sent'[/red]", + "", + "[bold cyan]2. AUDIT TRAILS REQUIRED[/bold cyan]", + " • Chat messages and responses", + " • API requests and responses", + " • User interactions with context", + "", + "[bold cyan]3. LOG LOCATIONS[/bold cyan]", + " [dim]~/system_logs/[/dim] → Prax operational logs", + " [dim]/logs/[/dim] → Service content logs", + " [dim]/logs/audit/[/dim] → Interaction audit trails", + "", + "[bold cyan]4. CONTENT LOG FORMAT[/bold cyan]", + " [dim]{[/dim]", + " [dim]'timestamp': '2026-02-04T10:30:00Z',[/dim]", + " [dim]'direction': 'inbound',[/dim]", + " [dim]'user': 'user_id',[/dim]", + " [dim]'content': 'message text',[/dim]", + " [dim]'response': 'bot response',[/dim]", + " [dim]'metadata': {...}[/dim]", + " [dim]}[/dim]", + "", + "[bold]Added:[/bold] 2026-02-04 - Service logging for user-facing interactions", + ] + + return "\n".join(lines) diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/handlers_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/handlers_check.py new file mode 100644 index 00000000..94c24a05 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/handlers_check.py @@ -0,0 +1,325 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: handlers_check.py - Handlers Standards Checker Handler +# Date: 2025-11-15 +# Version: 0.1.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-15): Initial implementation - handler standards checking +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +Handlers Standards Checker Handler + +Validates handler compliance with AIPass handler standards. +Checks handler independence, auto-detection pattern, no orchestration. +""" + +import sys +import re +from pathlib import Path +from typing import Dict, List, Optional + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + # Must match standard + if rule.get('standard') and rule.get('standard') != standard: + continue + # Must match file (check if rule file path is in the full path) + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + # Check line-specific bypass + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if handler follows handler standards + + Args: + module_path: Path to Python handler to check + bypass_rules: Optional list of bypass rules to apply + + Returns: + dict: { + 'passed': bool, # Overall pass/fail + 'checks': [ # Individual check results + { + 'name': str, # Check name + 'passed': bool, # Pass/fail + 'message': str, # Details + } + ], + 'score': int, # 0-100 percentage + 'standard': str # Standard name + } + """ + checks = [] + path = Path(module_path) + + # Check if entire standard is bypassed for this file + if is_bypassed(module_path, 'handlers', bypass_rules=bypass_rules): + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': 'Standard bypassed via .seed/bypass.json'}], + 'score': 100, + 'standard': 'HANDLERS' + } + + # Validate file exists + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'HANDLERS' + } + + # Read file + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'HANDLERS' + } + + # Only check files in handlers/ directory + is_handler = 'apps/handlers/' in module_path + if not is_handler: + return { + 'passed': True, + 'checks': [{'name': 'Handler check', 'passed': True, 'message': 'Not a handler file (skipped)'}], + 'score': 100, + 'standard': 'HANDLERS' + } + + # Check 1: Handler independence (no cross-handler imports except defaults) + independence_check = check_handler_independence(content, lines, module_path) + checks.append(independence_check) + + # Check 2: Auto-detection pattern (if module_name parameter exists) + auto_detect_check = check_auto_detection(content) + if auto_detect_check: + checks.append(auto_detect_check) + + # Check 3: No orchestration logic (handlers shouldn't import modules) + orchestration_check = check_no_orchestration(content, lines) + if orchestration_check: + checks.append(orchestration_check) + + # Calculate score + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + + # Overall pass if score >= 75% + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'HANDLERS' + } + + +def check_handler_independence(content: str, lines: List[str], module_path: str) -> Dict: + """ + Check handler independence - no cross-handler imports except defaults + + Rules: + - ✅ ALLOWED: from seed.apps.handlers.json import json_handler (default handler) + - ✅ ALLOWED: from .decorators import catch_errors (same package) + - ❌ FORBIDDEN: from seed.apps.handlers.error import error_handler (cross-handler) + """ + forbidden_imports = [] + + # Detect handler's own package + # e.g., /home/aipass/seed/apps/handlers/standards/cli_check.py -> package is 'standards' + path_parts = Path(module_path).parts + own_package = None + for i, part in enumerate(path_parts): + if part == 'handlers' and i + 1 < len(path_parts): + own_package = path_parts[i + 1] + break + + in_docstring = False + for i, line in enumerate(lines, 1): + stripped = line.strip() + + # Track docstrings (handle both single-line and multi-line) + if stripped.startswith('"""') or stripped.startswith("'''"): + quote_marker = '"""' if stripped.startswith('"""') else "'''" + # Count occurrences of the quote marker + quote_count = stripped.count(quote_marker) + if quote_count >= 2: + # Single-line docstring (opening and closing on same line) + continue # Skip this line but don't toggle state + else: + # Multi-line docstring boundary + in_docstring = not in_docstring + + # Skip docstrings, comments and empty lines + if in_docstring or not stripped or stripped.startswith('#'): + continue + + # Check for handler imports + if 'apps.handlers' in stripped and ('from ' in stripped or 'import ' in stripped): + # Skip if in a string (rough check) + if '"from ' in stripped or "'from " in stripped: + continue + + # Extract code part (before comment) + code_part = stripped.split('#')[0] if '#' in stripped else stripped + + if 'apps.handlers' not in code_part: + continue + + # Allowed: Default handlers (json_handler) + if 'handlers.json import json_handler' in code_part: + continue + + # Allowed: Same package imports (relative imports like "from .decorators") + if code_part.strip().startswith('from .'): + continue + + # Allowed: Same package absolute imports + if own_package and f'handlers.{own_package}' in code_part: + continue + + # Forbidden: Cross-handler imports + forbidden_imports.append(f"line {i}: {stripped}") + + if forbidden_imports: + return { + 'name': 'Handler independence', + 'passed': False, + 'message': f'Cross-handler imports detected (except defaults): {forbidden_imports[0]}' + } + + return { + 'name': 'Handler independence', + 'passed': True, + 'message': 'No forbidden cross-handler imports detected' + } + + +def check_auto_detection(content: str) -> Optional[Dict]: + """ + Check for auto-detection pattern if handler accepts module_name + + If handler has module_name parameter, should use inspect.stack() auto-detection + """ + # Check if any function accepts module_name parameter + has_module_name_param = bool(re.search(r'def\s+\w+\([^)]*module_name', content)) + + if not has_module_name_param: + return None # No module_name parameter, auto-detection not needed + + # Check for auto-detection implementation + has_inspect_import = 'import inspect' in content + has_stack_usage = 'inspect.stack()' in content + has_auto_detect_function = '_get_caller_module_name' in content or 'get_caller' in content + + if has_auto_detect_function or (has_inspect_import and has_stack_usage): + return { + 'name': 'Auto-detection pattern', + 'passed': True, + 'message': 'Auto-detection pattern implemented (inspect.stack())' + } + + # Has module_name param but no auto-detection + return { + 'name': 'Auto-detection pattern', + 'passed': False, + 'message': 'Has module_name parameter but missing auto-detection (use inspect.stack())' + } + + +def check_no_orchestration(content: str, lines: List[str]) -> Optional[Dict]: + """ + Check that handler doesn't import/call modules (orchestration) + + Handlers should be pure implementation, not orchestration. + ❌ FORBIDDEN: from seed.apps.modules import some_module + """ + module_imports = [] + + in_docstring = False + for i, line in enumerate(lines, 1): + stripped = line.strip() + + # Track docstrings (handle both single-line and multi-line) + if stripped.startswith('"""') or stripped.startswith("'''"): + quote_marker = '"""' if stripped.startswith('"""') else "'''" + # Count occurrences of the quote marker + quote_count = stripped.count(quote_marker) + if quote_count >= 2: + # Single-line docstring (opening and closing on same line) + continue # Skip this line but don't toggle state + else: + # Multi-line docstring boundary + in_docstring = not in_docstring + + # Skip docstrings, comments and empty lines + if in_docstring or not stripped or stripped.startswith('#'): + continue + + # Check for module imports + if 'apps.modules' in stripped and ('from ' in stripped or 'import ' in stripped): + # Skip if in a string + if '"from ' in stripped or "'from " in stripped: + continue + + # Extract code part + code_part = stripped.split('#')[0] if '#' in stripped else stripped + + if 'apps.modules' not in code_part: + continue + + # Allowed: Service imports (prax.apps.modules.logger, cli.apps.modules) + if 'prax.apps.modules.logger' in code_part or 'cli.apps.modules' in code_part: + continue + + # Forbidden: Module imports (orchestration) + module_imports.append(f"line {i}: {stripped}") + + if module_imports: + return { + 'name': 'No orchestration', + 'passed': False, + 'message': f'Handler imports modules (orchestration): {module_imports[0]}' + } + + return { + 'name': 'No orchestration', + 'passed': True, + 'message': 'No module imports detected (pure implementation)' + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/handlers_content.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/handlers_content.py new file mode 100644 index 00000000..875af066 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/handlers_content.py @@ -0,0 +1,138 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: handlers_content.py - Handlers Standards Content Handler +# Date: 2025-11-13 +# Version: 0.2.0 +# Category: seed/standards/handlers +# +# CHANGELOG (Max 5 entries): +# - v0.2.0 (2025-11-29): Added Drone architecture clarification +# - v0.1.0 (2025-11-13): Initial handler - handlers standards content +# +# CODE STANDARDS: +# - Handler provides content, module orchestrates output +# - Pure function - returns string, no side effects +# ============================================= + +import sys +from pathlib import Path + +# AIPASS_ROOT setup +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) + +""" +Handlers Standards Content Handler + +Provides formatted handlers standards content. +Module orchestrates, handler implements. +""" + + +def get_handlers_standards() -> str: + """Return formatted handlers standards content with Rich markup + + Returns: + str: Formatted standards text with Rich styling + """ + lines = [ + "[bold cyan]CORE PRINCIPLE:[/bold cyan]", + " [yellow]Handlers are internal to their branch[/yellow]", + " • Same-branch handler imports: ALLOWED (even across packages)", + " • Cross-branch handler imports: BLOCKED (use modules instead)", + " • Future marketplace: grab handler → drop it in → works", + "", + "[bold cyan]KEY RULES:[/bold cyan]", + "", + "[bold]1. File Size Guidelines[/bold]", + " • [green]<300 lines:[/green] Ideal - AI quick scan, full comprehension", + " • [yellow]300-700 lines:[/yellow] Acceptable - still manageable", + " • [red]700+ lines:[/red] Consider splitting (unless cohesive domain)", + "", + " Real examples:", + " • [dim]json_handler.py: 279-356 lines (perfect)[/dim]", + " • [dim]file_ops.py: 845-981 lines (heavy but cohesive)[/dim]", + "", + "[bold]2. Independence Rules (No Circular Dependencies)[/bold]", + " [green]✓ ALLOWED[/green] - Handler imports handler (same branch):", + " [dim] # seed/apps/handlers/standards/check.py[/dim]", + " [dim] from seed.apps.handlers.json import json_handler # OK[/dim]", + "", + " [red]✗ FORBIDDEN[/red] - Handler imports own-branch modules:", + " [dim] # seed/apps/handlers/json/json_handler.py[/dim]", + " [dim] from seed.apps.modules.create import something # NO[/dim]", + "", + " [yellow]Why?[/yellow] Modules import handlers. If handlers import modules → cycle.", + "", + "[bold]3. Handler Boundaries (External Access)[/bold]", + " Handlers are [red]INTERNAL[/red] to their branch.", + " External consumers use [green]MODULES[/green] as the public API.", + "", + " [green]✓ Same-branch imports:[/green] ALLOWED", + " [dim] # flow/apps/handlers/plan/create.py[/dim]", + " [dim] from flow.apps.handlers.registry.load import load_registry # OK[/dim]", + "", + " [red]✗ Cross-branch imports:[/red] BLOCKED (security guard)", + " [dim] # flow/apps/modules/list_plans.py[/dim]", + " [dim] from prax.apps.handlers.logging.setup import get_logger # BLOCKED[/dim]", + "", + " [green]✓ Correct pattern:[/green] Import the MODULE (public API)", + " [dim] from prax.apps.modules.logger import system_logger as logger # OK[/dim]", + "", + " [yellow]Special Note - Drone Architecture:[/yellow]", + " • Drone is [red]NOT imported[/red] by branches", + " • Drone resolves @ symbols [yellow]before[/yellow] routing", + " • Branches receive [green]resolved paths[/green], never @ symbols", + " • [dim]Example: @flow/plans → /home/aipass/aipass_core/flow/plans[/dim]", + "", + " Security guard location: [dim]handlers/__init__.py[/dim]", + " Reference impl: [dim]/home/aipass/aipass_core/prax/apps/handlers/__init__.py[/dim]", + "", + "[bold]4. Domain Organization[/bold]", + " Organize by [yellow]business purpose[/yellow], not technical role:", + " [dim]handlers/[/dim]", + " [dim] json/ → All JSON operations[/dim]", + " [dim] error/ → All error handling[/dim]", + " [dim] cli/ → All user interaction[/dim]", + " [dim] branch/ → All branch lifecycle[/dim]", + " [dim] standards/ → All standards checking[/dim]", + "", + "[bold cyan]AUTO-DETECTION PATTERN:[/bold cyan]", + " Handlers detect caller using [bold]inspect.stack()[/bold]:", + "", + " [dim]import inspect[/dim]", + " [dim]def _get_caller_module_name() -> str:[/dim]", + " [dim] stack = inspect.stack()[/dim]", + " [dim] return stack[2].filename.stem # Auto-detect[/dim]", + "", + " [dim]def handler_function(data, module_name: str | None = None):[/dim]", + " [dim] if module_name is None:[/dim]", + " [dim] module_name = _get_caller_module_name()[/dim]", + "", + " Modules just import and use - no boilerplate!", + "", + "[bold cyan]DEFAULT HANDLERS:[/bold cyan]", + " [yellow]json_handler.py[/yellow] - JSON operations (comes with every branch)", + " • Auto-creates config/data/log JSON files", + " • Self-healing when files corrupted", + " • Auto-detects calling module", + " • Standard across all branches", + " • [green]3-tier compliant[/green] - raises exceptions, modules log", + "", + " [dim]from seed.apps.handlers.json import json_handler[/dim]", + " [dim]json_handler.log_operation('operation', data)[/dim]", + "", + "[bold cyan]KEY WARNINGS:[/bold cyan]", + " [red]✗[/red] Don't break independence - kills marketplace transportability", + " [red]✗[/red] Don't create 2000+ line god objects - AI comprehension fails", + " [red]✗[/red] Don't use technical organization (utils/, helpers/) - use domains", + "", + "[bold cyan]REFERENCE:[/bold cyan]", + " [dim]/home/aipass/standards/CODE_STANDARDS/handlers.md[/dim]", + "", + "─" * 70, + ] + + return "\n".join(lines) diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/imports_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/imports_check.py new file mode 100644 index 00000000..b4f16d51 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/imports_check.py @@ -0,0 +1,538 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: imports_check.py - Imports Standards Checker Handler +# Date: 2025-11-15 +# Version: 0.5.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v0.5.0 (2025-11-15): Fixed docstring filtering bug - prevents false negatives from import examples in docstrings +# - v0.4.0 (2025-11-15): Fixed handler independence to allow service imports (prax, cli) +# - v0.3.0 (2025-11-15): Added proper infrastructure - AIPASS_ROOT, sys.path, Prax logger, JSON tracking +# - v0.2.0 (2025-11-15): Fixed critical bugs - false positives, handler independence check, Prax conditional +# - v0.1.0 (2025-11-15): Initial implementation - imports standards checking +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +Imports Standards Checker Handler + +Validates module compliance with AIPass import standards. +Checks AIPASS_ROOT pattern, import order, Prax logger, sys.path setup. + +Fixed bugs: +- Filters docstrings before checking imports (prevents false negatives from import examples) +- Only checks import section (not comments/docstrings) +- Detects handler-to-module import violations +- Makes Prax logger conditional (not required for small files) +""" + +import sys +from pathlib import Path +from typing import Dict, List, Optional + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + # Must match standard + if rule.get('standard') and rule.get('standard') != standard: + continue + # Must match file (check if rule file path is in the full path) + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + # Check line-specific bypass + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if module follows import standards + + Args: + module_path: Path to Python module to check + bypass_rules: Optional list of bypass rules to skip certain violations + + Returns: + dict: { + 'passed': bool, # Overall pass/fail + 'checks': [ # Individual check results + { + 'name': str, # Check name + 'passed': bool, # Pass/fail + 'message': str, # Details (line number, etc.) + } + ], + 'score': int, # 0-100 percentage + 'standard': str # Standard name + } + """ + checks = [] + path = Path(module_path) + + # Check if entire standard is bypassed for this file + if is_bypassed(module_path, 'imports', bypass_rules=bypass_rules): + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': 'Standard bypassed via .seed/bypass.json'}], + 'score': 100, + 'standard': 'IMPORTS' + } + + # Validate file exists + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'IMPORTS' + } + + # Read file + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'IMPORTS' + } + + # Filter out docstrings to prevent false positives from import examples + filtered_lines = filter_docstrings(lines) + + # Find import section boundaries + import_section_end = find_import_section_end(filtered_lines) + import_lines = filtered_lines[:import_section_end] + + # Determine file type + is_handler = '/handlers/' in module_path + is_init_file = path.name == '__init__.py' + is_small_file = len([l for l in lines if l.strip() and not l.strip().startswith('#')]) < 20 + + # Check 1: AIPASS_ROOT pattern (required for modules, optional for handlers) + if not is_init_file: + aipass_root_check = check_aipass_root(import_lines, module_path, bypass_rules) + checks.append(aipass_root_check) + + # Check 2: sys.path setup (required if AIPASS_ROOT exists) + if not is_init_file: + sys_path_check = check_sys_path(import_lines, module_path, bypass_rules) + checks.append(sys_path_check) + + # Check 3: Prax logger import (conditional - not required for small files/__init__/handlers) + # Handlers MUST NOT import Prax (error_handling standard) - skip this recommendation for them + if not is_init_file and not is_small_file and not is_handler: + prax_logger_check = check_prax_logger(import_lines, module_path, bypass_rules) + # Make it informational for small files + if prax_logger_check: + checks.append(prax_logger_check) + + # Check 4: Handler independence (handlers must not import parent modules) + if is_handler: + handler_independence_check = check_handler_independence(import_lines, module_path, bypass_rules) + if handler_independence_check: + checks.append(handler_independence_check) + + # Check 5: Import order (only if file has imports) + import_order_check = check_import_order(import_lines, module_path, bypass_rules) + if import_order_check: + checks.append(import_order_check) + + # Calculate score + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + + # Overall pass if score >= 75% + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'IMPORTS' + } + + +def filter_docstrings(lines: List[str]) -> List[str]: + """ + Filter out docstrings from lines to prevent false positives. + + This prevents import examples in module docstrings from being + detected as actual imports. + + Returns: + List of lines with docstrings removed + """ + filtered_lines = [] + in_docstring = False + docstring_marker = None + + for line in lines: + stripped = line.strip() + + # Check for docstring start/end + if '"""' in stripped or "'''" in stripped: + # Determine which marker we're looking for + if '"""' in stripped: + marker = '"""' + else: + marker = "'''" + + # Count occurrences of the marker + marker_count = stripped.count(marker) + + if not in_docstring: + # Starting a docstring + if marker_count == 2: + # Single-line docstring - skip this line entirely + continue + elif marker_count == 1: + # Multi-line docstring starting + in_docstring = True + docstring_marker = marker + continue + else: + # Potentially ending a docstring + if marker == docstring_marker and marker_count >= 1: + # Multi-line docstring ending + in_docstring = False + docstring_marker = None + continue + + # Skip lines inside docstrings + if in_docstring: + continue + + # Keep non-docstring lines + filtered_lines.append(line) + + return filtered_lines + + +def find_import_section_end(lines: List[str]) -> int: + """ + Find the line number where the import section ends (first def/class). + + This prevents false positives from matching patterns in docstrings, + comments, or code examples. + + Returns: + Line number where imports end (0-indexed) + """ + for i, line in enumerate(lines): + stripped = line.strip() + # Import section ends at first function or class definition + if stripped.startswith('def ') or stripped.startswith('class ') or stripped.startswith('async def '): + return i + return len(lines) + + +def check_aipass_root(lines: List[str], file_path: str = "", bypass_rules: list | None = None) -> Dict: + """ + Check for AIPASS_ROOT = Path.home() / "aipass_core" pattern + + Only checks actual code lines (not comments) + """ + # Check if entire standard is bypassed + if is_bypassed(file_path, 'imports', None, bypass_rules): + return { + 'name': 'AIPASS_ROOT pattern', + 'passed': True, + 'message': 'Bypassed by bypass rules' + } + + for i, line in enumerate(lines, 1): + stripped = line.strip() + + # Skip comments and empty lines + if not stripped or stripped.startswith('#'): + continue + + # Look for AIPASS_ROOT assignment (actual code, not in string) + if 'AIPASS_ROOT' in line and '=' in line and 'Path.home()' in line: + # Verify it's not in a comment at end of line + if '#' in line: + code_part = line.split('#')[0] + if 'AIPASS_ROOT' in code_part and 'Path.home()' in code_part: + return { + 'name': 'AIPASS_ROOT pattern', + 'passed': True, + 'message': f'Found on line {i}' + } + else: + return { + 'name': 'AIPASS_ROOT pattern', + 'passed': True, + 'message': f'Found on line {i}' + } + + return { + 'name': 'AIPASS_ROOT pattern', + 'passed': False, + 'message': 'AIPASS_ROOT = Path.home() / "aipass_core" not found in import section' + } + + +def check_sys_path(lines: List[str], file_path: str = "", bypass_rules: list | None = None) -> Dict: + """ + Check for sys.path.insert(0, str(AIPASS_ROOT)) pattern + + Only checks actual code lines (not comments) + """ + # Check if entire standard is bypassed + if is_bypassed(file_path, 'imports', None, bypass_rules): + return { + 'name': 'sys.path setup', + 'passed': True, + 'message': 'Bypassed by bypass rules' + } + + for i, line in enumerate(lines, 1): + stripped = line.strip() + + # Skip comments and empty lines + if not stripped or stripped.startswith('#'): + continue + + # Look for sys.path.insert with AIPASS_ROOT + if 'sys.path.insert' in line and 'AIPASS_ROOT' in line: + # Verify it's not in a comment + if '#' in line: + code_part = line.split('#')[0] + if 'sys.path.insert' in code_part and 'AIPASS_ROOT' in code_part: + return { + 'name': 'sys.path setup', + 'passed': True, + 'message': f'Found on line {i}' + } + else: + return { + 'name': 'sys.path setup', + 'passed': True, + 'message': f'Found on line {i}' + } + + return { + 'name': 'sys.path setup', + 'passed': False, + 'message': 'sys.path.insert(0, str(AIPASS_ROOT)) not found in import section' + } + + +def check_prax_logger(lines: List[str], file_path: str = "", bypass_rules: list | None = None) -> Optional[Dict]: + """ + Check for Prax logger import + + Note: "Nearly always" not "always" - conditional check + """ + # Check if entire standard is bypassed + if is_bypassed(file_path, 'imports', None, bypass_rules): + return { + 'name': 'Prax logger import', + 'passed': True, + 'message': 'Bypassed by bypass rules' + } + + for i, line in enumerate(lines, 1): + stripped = line.strip() + + # Skip comments and empty lines + if not stripped or stripped.startswith('#'): + continue + + # Look for prax logger import + if 'from prax.apps.modules.logger import' in line and 'system_logger' in line: + return { + 'name': 'Prax logger import', + 'passed': True, + 'message': f'Found on line {i}' + } + + # Return informational failure (not critical) + return { + 'name': 'Prax logger import (recommended)', + 'passed': False, + 'message': 'Prax logger import not found (recommended: from prax.apps.modules.logger import system_logger)' + } + + +def check_handler_independence(lines: List[str], module_path: str = "", bypass_rules: list | None = None) -> Optional[Dict]: + """ + Check that handlers don't import from parent branch modules. + + Handlers must be independent and transportable. + Forbidden: from .apps.modules import ... + Allowed: from prax.apps.modules.logger import ... (service imports) + Allowed: from cli.apps.modules import ... (service imports) + + Args: + lines: Lines to check + module_path: Full path to module (to detect parent branch) + bypass_rules: Optional list of bypass rules to skip certain violations + + Returns check result or None if not applicable + """ + # Check if entire standard is bypassed + if is_bypassed(module_path, 'imports', None, bypass_rules): + return { + 'name': 'Handler independence', + 'passed': True, + 'message': 'Bypassed by bypass rules' + } + + # Detect parent branch from module path + # e.g., /home/aipass/seed/apps/handlers/... -> parent is 'seed' + # e.g., /home/aipass/aipass_core/api/apps/handlers/... -> parent is 'api' + parent_branch = None + if module_path: + path_parts = Path(module_path).parts + # Find 'apps' in path and get the directory before it + for i, part in enumerate(path_parts): + if part == 'apps' and i > 0: + parent_branch = path_parts[i-1] + break + + for i, line in enumerate(lines, 1): + stripped = line.strip() + + # Skip comments and empty lines + if not stripped or stripped.startswith('#'): + continue + + # Check for forbidden module imports + if '.apps.modules' in line and ('from ' in line or 'import ' in line): + # Extract the import statement + if '#' in line: + code_part = line.split('#')[0] + else: + code_part = line + + if '.apps.modules' in code_part: + # Allowed service imports (prax, cli are infrastructure) + if 'prax.apps.modules' in code_part or 'cli.apps.modules' in code_part: + continue + + # If we detected parent branch, check if importing from it + if parent_branch and f'{parent_branch}.apps.modules' in code_part: + return { + 'name': 'Handler independence', + 'passed': False, + 'message': f'Handler importing from parent module on line {i} (violates independence rule)' + } + + # Generic check if no parent branch detected + if not parent_branch: + return { + 'name': 'Handler independence', + 'passed': False, + 'message': f'Handler importing from branch module on line {i} (violates independence rule)' + } + + return { + 'name': 'Handler independence', + 'passed': True, + 'message': 'No forbidden module imports detected' + } + + +def check_import_order(lines: List[str], file_path: str = "", bypass_rules: list | None = None) -> Optional[Dict]: + """ + Check import order: infrastructure → Prax → services → internal + + Returns check result or None if no imports found + """ + # Check if entire standard is bypassed + if is_bypassed(file_path, 'imports', None, bypass_rules): + return { + 'name': 'Import order', + 'passed': True, + 'message': 'Bypassed by bypass rules' + } + + # Find all import lines with their line numbers + imports = [] + prax_line = None + + for i, line in enumerate(lines, 1): + stripped = line.strip() + + # Skip comments and empty lines + if not stripped or stripped.startswith('#'): + continue + + # Check for import statements + if stripped.startswith('import ') or stripped.startswith('from '): + # Track Prax logger specifically + if 'prax.apps.modules.logger' in stripped: + prax_line = i + + # Track other imports (not infrastructure setup) + if 'import sys' not in stripped and 'from pathlib' not in stripped: + imports.append((i, stripped)) + + # If no imports found, skip this check + if not imports: + return None + + # Simple check: if Prax is imported, it should be early (before internal imports) + if prax_line: + # Find first internal import (seed.apps, cli.apps, etc.) + first_internal_line = None + for line_num, import_stmt in imports: + # Check for any .apps. pattern (internal imports) + if '.apps.' in import_stmt: + # Skip if it's the Prax logger itself + if 'prax.apps.modules.logger' not in import_stmt: + first_internal_line = line_num + break + + # If we have internal imports, Prax should come before them + if first_internal_line and prax_line < first_internal_line: + return { + 'name': 'Import order', + 'passed': True, + 'message': f'Prax logger before internal imports (line {prax_line} < {first_internal_line})' + } + elif first_internal_line: + return { + 'name': 'Import order', + 'passed': False, + 'message': f'Prax logger should be before internal imports (line {prax_line} > {first_internal_line})' + } + else: + # No internal imports, Prax is fine + return { + 'name': 'Import order', + 'passed': True, + 'message': 'Prax logger imported (no internal imports to check)' + } + + # If no Prax logger, we already failed that check, so import order is N/A + return { + 'name': 'Import order', + 'passed': True, + 'message': 'No specific order issues detected' + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/imports_content.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/imports_content.py new file mode 100644 index 00000000..d4b4b72c --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/imports_content.py @@ -0,0 +1,115 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: imports_content.py - Import Standards Content Handler +# Date: 2025-11-13 +# Version: 0.2.0 +# Category: seed/standards/handlers +# +# CHANGELOG (Max 5 entries): +# - v0.2.0 (2025-11-13): Condensed version - truth-checked against codebase +# - v0.1.0 (2025-11-13): Initial handler - Import standards content +# +# CODE STANDARDS: +# - Handler provides content, module orchestrates output +# - Pure function - returns string, no side effects +# ============================================= + +""" +Import Standards Content Handler + +Provides formatted import standards content. +Module orchestrates, handler implements. +""" + + +def get_imports_standards() -> str: + """Return formatted import standards content with Rich markup + + Returns: + str: Formatted standards text with Rich styling + """ + lines = [ + "[bold cyan]STANDARD IMPORT ORDER:[/bold cyan]", + "", + "[bold]1. Infrastructure[/bold]", + " • AIPASS_ROOT = Path.home() / 'aipass_core'", + " • sys.path.insert(0, str(AIPASS_ROOT))", + "", + "[bold]2. Standard library[/bold]", + " • Grouped by category, alphabetical", + " • json, datetime, typing, pathlib, etc.", + "", + "[bold]3. Prax logger (nearly always)[/bold]", + " • [dim]from prax.apps.modules.logger import system_logger as logger[/dim]", + "", + "[bold]4. Services (CLI, etc.)[/bold]", + " • [dim]from cli.apps.modules import console, header, success[/dim]", + "", + "[bold]5. Internal handlers[/bold]", + " • [dim]from seed.apps.handlers.json import json_handler[/dim]", + "", + "[yellow]RULE:[/yellow] Infrastructure → Stdlib → Prax → Services → Internal", + "", + "[bold cyan]COMPLETE PATTERN:[/bold cyan]", + " [dim]#!/home/aipass/.venv/bin/python3[/dim]", + "", + " [dim]import sys[/dim]", + " [dim]from pathlib import Path[/dim]", + " [dim]AIPASS_ROOT = Path.home() / 'aipass_core'[/dim]", + " [dim]sys.path.insert(0, str(AIPASS_ROOT))[/dim]", + "", + " [dim]import json[/dim]", + " [dim]from datetime import datetime[/dim]", + " [dim]from typing import Dict, List, Optional[/dim]", + "", + " [dim]from prax.apps.modules.logger import system_logger as logger[/dim]", + " [dim]from cli.apps.modules import console, header[/dim]", + " [dim]from seed.apps.handlers.json import json_handler[/dim]", + "", + "[bold cyan]CRITICAL RULES:[/bold cyan]", + " [yellow]✓[/yellow] Path.home() - NEVER hardcode /home/username", + " [yellow]✓[/yellow] Absolute imports - NO relative imports (...)", + " [yellow]✓[/yellow] Handlers CANNOT import modules (independence)", + " [yellow]✓[/yellow] Services before internal (Prax, CLI, then handlers)", + "", + "[bold cyan]HANDLER INDEPENDENCE:[/bold cyan]", + " Handlers import handlers ✓", + " Handlers import services ✓", + " Handlers import modules ✗ [dim](BREAKS INDEPENDENCE)[/dim]", + "", + "[bold cyan]SERVICE INVOCATION - CONTEXT REQUIREMENTS:[/bold cyan]", + "", + "[bold]Context-Independent Services (work anywhere):[/bold]", + " • Prax logger - import and use from any location", + " • CLI services - import and use from any location", + "", + "[bold]Context-Dependent Services (PWD detection):[/bold]", + " • [yellow]AI_MAIL[/yellow] - requires calling from branch directory", + " • Uses PWD to detect sender identity (@seed, @drone, etc.)", + " • Auto-generates config at [branch]/seed_json/user_config.json", + "", + "[bold]Best Practice - Use Drone:[/bold]", + " [dim]subprocess.run([\"drone\", \"email\", \"send\", \"@recipient\", \"Subject\", \"Message\"])[/dim]", + " • Drone handles PWD detection automatically", + "", + "[bold]Direct Invocation (Advanced):[/bold]", + " [dim]subprocess.run([\"python3\", \"/home/aipass/aipass_core/ai_mail/apps/ai_mail.py\", ...],[/dim]", + " [dim] cwd=str(branch_dir)) # Force correct working directory[/dim]", + " • Must use cwd= parameter for PWD detection to work", + "", + "[yellow]KEY:[/yellow] AI_MAIL walks up from CWD to find *.id.json for branch identity", + "", + "[bold cyan]DEMONSTRATION:[/bold cyan]", + " [dim]/home/aipass/seed/apps/modules/create_thing.py[/dim]", + " [dim]/home/aipass/seed/apps/modules/test_cli_errors.py[/dim]", + " [dim]/home/aipass/aipass_core/cli/apps/modules/display.py[/dim]", + "", + "[bold cyan]REFERENCE:[/bold cyan]", + " [dim]/home/aipass/standards/CODE_STANDARDS/imports.md[/dim]", + "", + "─" * 70, + ] + + return "\n".join(lines) diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/json_structure_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/json_structure_check.py new file mode 100644 index 00000000..ad409a45 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/json_structure_check.py @@ -0,0 +1,449 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: json_structure_check.py - JSON Structure Standards Checker Handler +# Date: 2025-11-21 +# Version: 0.3.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v0.3.0 (2025-11-21): Complete rewrite - validates actual implementation (handler config, JSON files existence, paths) +# - v0.2.0 (2025-11-15): Fixed false positives using AST parsing instead of string search +# - v0.1.0 (2025-11-15): Initial implementation - JSON structure standards checking +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +JSON Structure Standards Checker Handler + +Validates three-JSON pattern implementation: +- Handler configuration (correct paths) +- JSON file existence for modules +- Naming patterns +- Directory structure + +This checker catches: +- Misconfigured json_handler.py (wrong BRANCH_ROOT paths) +- Missing JSON files for modules +- Non-standard naming patterns +- Orphaned JSON files +""" + +import sys +import re +import ast +import json +from pathlib import Path +from typing import Dict, List, Optional, Tuple + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + # Must match standard + if rule.get('standard') and rule.get('standard') != standard: + continue + # Must match file (check if rule file path is in the full path) + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + # Check line-specific bypass + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if module follows JSON structure standards + + Validates: + 1. json_handler.py files: Configuration correctness + 2. Modules using json_handler: JSON files exist + 3. Direct JSON operations: Should use json_handler + + Args: + module_path: Path to Python module to check + bypass_rules: Optional list of bypass rules to skip specific violations + + Returns: + dict: { + 'passed': bool, + 'checks': [{'name': str, 'passed': bool, 'message': str}], + 'score': int, + 'standard': str + } + """ + checks = [] + path = Path(module_path) + + # Validate file exists + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'JSON STRUCTURE' + } + + # Read file + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'JSON STRUCTURE' + } + + # Determine what type of file this is + if 'json_handler' in path.name and path.parent.name == 'json': + # This is a json_handler.py file - check configuration + checks = check_json_handler_config(path, content, bypass_rules) + elif 'apps/modules' in str(path): + # This is a module - check if it has JSON files (if it uses json_handler) + checks = check_module_json_files(path, content, bypass_rules) + else: + # Other files - check for direct JSON operations + json_check = check_json_handler_usage(content, module_path, bypass_rules) + if json_check: + checks.append(json_check) + + # If no checks, skip (not applicable) + if not checks: + return { + 'passed': True, + 'checks': [{'name': 'JSON structure check', 'passed': True, 'message': 'No JSON operations detected (skipped)'}], + 'score': 100, + 'standard': 'JSON STRUCTURE' + } + + # Calculate score + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'JSON STRUCTURE' + } + + +def get_branch_path(branch_name: str) -> Optional[str]: + """Get actual branch path from BRANCH_REGISTRY.json""" + registry_path = Path.home() / "BRANCH_REGISTRY.json" + if registry_path.exists(): + try: + with open(registry_path, 'r', encoding='utf-8') as f: + registry = json.load(f) + for branch in registry.get('branches', []): + if branch.get('name', '').lower() == branch_name.lower(): + return branch.get('path', '') + except (json.JSONDecodeError, IOError): + pass + return None + + +def check_json_handler_config(handler_path: Path, content: str, bypass_rules: list | None = None) -> List[Dict]: + """ + Check if json_handler.py is configured correctly for its branch + + Critical checks: + - BRANCH_ROOT points to correct branch (not SEED) + - JSON_DIR points to {branch}_json/ + - TEMPLATES_DIR points to branch's templates + """ + checks = [] + branch_name = detect_branch(handler_path) + + if not branch_name: + checks.append({ + 'name': 'Branch detection', + 'passed': False, + 'message': f'Cannot detect branch from path: {handler_path}' + }) + return checks + + # Get actual branch path from registry + actual_branch_path = get_branch_path(branch_name) + if actual_branch_path: + # Convert path to relative from home for display + home = str(Path.home()) + relative_path = actual_branch_path.replace(home + '/', '') + else: + relative_path = f'aipass_core/{branch_name}' # Fallback assumption + + # Check 1: BRANCH_ROOT configuration + # Pattern matches: BRANCH_ROOT = Path.home() / "path" or BRANCH_ROOT = Path.home() / 'path' + root_var_pattern = r"(\w+)_ROOT\s*=\s*Path\.home\(\)\s*/\s*['\"]([^'\"]+)['\"]" + root_matches = re.findall(root_var_pattern, content) + + var_prefix = branch_name.upper() + + root_check_passed = False + root_message = '' + + # Filter to only check the branch-specific ROOT constant (ignore AIPASS_ROOT which is infrastructure) + branch_specific_matches = [(var_name, path_value) for var_name, path_value in root_matches if var_name != 'AIPASS'] + + for var_name, path_value in branch_specific_matches: + # var_name is already just the prefix (e.g., "SEED" from "SEED_ROOT") + # Check if pointing to correct location + if branch_name == 'seed' and path_value == 'seed': + root_check_passed = True + root_message = f'{var_name}_ROOT correctly points to /home/aipass/seed' + elif branch_name != 'seed': + # For other branches, check if handler path matches actual branch path + if actual_branch_path and actual_branch_path in str(handler_path): + # Handler is in correct branch - check if ROOT constant points to same location + # Build expected path pattern from relative_path + path_parts = relative_path.split('/') + expected_pattern = '" / "'.join(path_parts) + if expected_pattern in content or expected_pattern.replace('" / "', "' / '") in content: + root_check_passed = True + root_message = f'{var_name}_ROOT correctly points to {actual_branch_path}' + elif 'seed' in path_value.lower(): + root_check_passed = False + root_message = f'{var_name}_ROOT points to SEED paths - should point to {actual_branch_path}' + break + elif 'seed' in path_value.lower(): + root_check_passed = False + root_message = f'{var_name}_ROOT points to SEED paths - should point to {actual_branch_path or relative_path}' + break + + if not root_matches: + checks.append({ + 'name': 'BRANCH_ROOT configuration', + 'passed': False, + 'message': 'No BRANCH_ROOT constant found in handler' + }) + elif not branch_specific_matches: + checks.append({ + 'name': 'BRANCH_ROOT configuration', + 'passed': False, + 'message': f'No {branch_name.upper()}_ROOT constant found (only AIPASS_ROOT infrastructure)' + }) + else: + if not root_message: + root_message = f'Unable to validate {branch_name.upper()}_ROOT configuration' + checks.append({ + 'name': 'BRANCH_ROOT configuration', + 'passed': root_check_passed, + 'message': root_message + }) + + # Check 2: JSON_DIR configuration + json_dir_pattern = r"(\w+)_JSON_DIR\s*=" + json_dir_matches = re.findall(json_dir_pattern, content) + + if json_dir_matches: + expected_json_dir = f'{branch_name}_json' + json_dir_correct = any(expected_json_dir in content for expected_json_dir in [f'"{branch_name}_json"', f"'{branch_name}_json'", f'/ "{branch_name}_json"', f"/ '{branch_name}_json'"]) + + checks.append({ + 'name': 'JSON_DIR configuration', + 'passed': json_dir_correct, + 'message': f'JSON_DIR {"correctly" if json_dir_correct else "incorrectly"} configured (should point to {branch_name}_json/)' + }) + + # Check 3: TEMPLATES_DIR configuration + templates_pattern = r"TEMPLATES_DIR\s*=" + if re.search(templates_pattern, content): + # Should reference branch's own templates, not SEED's + if branch_name != 'seed' and 'seed' in content.lower() and 'json_templates' in content: + # Check if it's using SEED's templates + seed_template_check = '"seed"' in content and 'json_templates' in content + checks.append({ + 'name': 'TEMPLATES_DIR configuration', + 'passed': not seed_template_check, + 'message': 'TEMPLATES_DIR points to SEED - should use branch templates' if seed_template_check else 'TEMPLATES_DIR correctly configured' + }) + + return checks + + +def check_module_json_files(module_path: Path, content: str, bypass_rules: list | None = None) -> List[Dict]: + """ + Check if module has its three JSON files (if it uses json_handler) + + Checks: + - If module imports json_handler, it should have config/data/log files + - Files should be in correct directory + - Naming should follow pattern + """ + checks = [] + + # Check if module uses json_handler + uses_json_handler = 'from' in content and 'json_handler import' in content + + if not uses_json_handler: + # Module doesn't use json_handler - check if it should + has_json_ops = check_json_handler_usage(content, str(module_path), bypass_rules) + if has_json_ops: + checks.append(has_json_ops) + return checks + + # Module uses json_handler - verify JSON files exist + branch_name = detect_branch(module_path) + module_name = module_path.stem + + if not branch_name: + checks.append({ + 'name': 'Branch detection', + 'passed': False, + 'message': f'Cannot detect branch from path: {module_path}' + }) + return checks + + if branch_name == 'seed': + json_dir = Path.home() / 'seed' / 'seed_json' + else: + json_dir = Path.home() / 'aipass_core' / branch_name / f'{branch_name}_json' + + # Check if directory exists + if not json_dir.exists(): + checks.append({ + 'name': 'JSON directory exists', + 'passed': False, + 'message': f'JSON directory not found: {json_dir}' + }) + return checks + + # Check for three JSON files + config_file = json_dir / f'{module_name}_config.json' + data_file = json_dir / f'{module_name}_data.json' + log_file = json_dir / f'{module_name}_log.json' + + files_status = [] + all_exist = True + + for json_type, json_file in [('config', config_file), ('data', data_file), ('log', log_file)]: + if json_file.exists(): + files_status.append(f'{json_type}✓') + else: + files_status.append(f'{json_type}✗') + all_exist = False + + checks.append({ + 'name': 'Module JSON files', + 'passed': all_exist, + 'message': f'Module JSON files: {", ".join(files_status)} in {json_dir.name}/' if all_exist else f'Missing JSON files: {", ".join(files_status)} - should exist in {json_dir.name}/' + }) + + return checks + + +def check_json_handler_usage(content: str, file_path: str, bypass_rules: list | None = None) -> Optional[Dict]: + """ + Check that modules use json_handler for JSON operations (not direct json.load/dump) + """ + try: + tree = ast.parse(content) + except SyntaxError: + return None + + has_json_import = False + has_json_operations = False + has_json_handler_import = False + + for node in ast.walk(tree): + if isinstance(node, ast.Import): + for alias in node.names: + if alias.name == 'json': + has_json_import = True + + if isinstance(node, ast.ImportFrom): + if node.module == 'json': + has_json_import = True + if node.module and 'json_handler' in node.module: + has_json_handler_import = True + + if isinstance(node, ast.Call): + if isinstance(node.func, ast.Attribute): + if (isinstance(node.func.value, ast.Name) and + node.func.value.id == 'json' and + node.func.attr in ['dump', 'load']): + has_json_operations = True + + # No JSON operations detected + if not has_json_import and not has_json_operations: + return None + + # Has JSON operations but not using json_handler + if has_json_operations and not has_json_handler_import: + # Check if bypassed + if is_bypassed(file_path, 'json_structure', bypass_rules=bypass_rules): + return None + + return { + 'name': 'json_handler usage', + 'passed': False, + 'message': 'Direct JSON operations detected (use json_handler for three-JSON pattern)' + } + + return None + + +def detect_branch(file_path: Path) -> Optional[str]: + """ + Detect which branch a file belongs to from its path + + Uses BRANCH_REGISTRY.json as source of truth for all branch paths. + Falls back to path heuristics if registry unavailable. + + Returns branch name (lowercase) or None if cannot detect + """ + file_path_str = str(file_path) + + # Try BRANCH_REGISTRY.json first (source of truth) + registry_path = Path.home() / "BRANCH_REGISTRY.json" + if registry_path.exists(): + try: + with open(registry_path, 'r', encoding='utf-8') as f: + registry = json.load(f) + # Sort by path length (longest first) to match most specific path + branches = sorted( + registry.get('branches', []), + key=lambda b: len(b.get('path', '')), + reverse=True + ) + for branch in branches: + branch_path = branch.get('path', '') + if branch_path and file_path_str.startswith(branch_path): + return branch.get('name', '').lower() + except (json.JSONDecodeError, IOError): + pass # Fall through to heuristics + + # Fallback: path-based heuristics + path_parts = file_path.parts + + # Check if in seed + if 'seed' in path_parts: + return 'seed' + + # Check if in aipass_core/{branch} + if 'aipass_core' in path_parts: + idx = path_parts.index('aipass_core') + if idx + 1 < len(path_parts): + return path_parts[idx + 1] + + return None diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/json_structure_content.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/json_structure_content.py new file mode 100644 index 00000000..3de27563 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/json_structure_content.py @@ -0,0 +1,98 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: json_structure_content.py - JSON Structure Standards Content Handler +# Date: 2025-11-13 +# Version: 0.3.0 +# Category: seed/standards/handlers +# +# CHANGELOG (Max 5 entries): +# - v0.3.0 (2025-11-21): Added mandatory json_handler.py setup section with path configuration warnings +# - v0.2.0 (2025-11-13): Condensed content - truth-checked against codebase +# - v0.1.0 (2025-11-13): Initial handler - JSON structure standards content +# +# CODE STANDARDS: +# - Handler provides content, module orchestrates output +# - Pure function - returns string, no side effects +# ============================================= + +""" +JSON Structure Standards Content Handler + +Provides formatted JSON structure standards content. +Module orchestrates, handler implements. +""" + + +def get_json_structure_standards() -> str: + """Return formatted JSON structure standards content with Rich markup + + Returns: + str: Formatted standards text with Rich styling + """ + lines = [ + "[bold cyan]THREE-JSON PATTERN:[/bold cyan]", + "", + "[bold]Every module gets 3 auto-created files:[/bold]", + " • [yellow]module_config.json[/yellow] - Settings, limits (small, stable)", + " • [yellow]module_data.json[/yellow] - Metrics, state (medium, periodic)", + " • [yellow]module_log.json[/yellow] - Operations history (auto-rotating)", + "", + "[yellow]RULE:[/yellow] Auto-created on first use - NEVER create manually", + "", + "[bold cyan]USAGE (AUTO-DETECTION):[/bold cyan]", + " [dim]from seed.apps.handlers.json import json_handler[/dim]", + "", + " [dim]# Handler auto-detects calling module name:[/dim]", + " [dim]json_handler.log_operation(\"operation_name\", {\"key\": \"value\"})[/dim]", + "", + " [dim]# Creates module_config.json, module_data.json, module_log.json[/dim]", + " [dim]# Based on templates in apps/json_templates/default/[/dim]", + "", + "[bold cyan]LOG ROTATION (CRITICAL):[/bold cyan]", + " Set in config.json:", + " [dim]{[/dim]", + " [dim]\"config\": { \"max_log_entries\": 100 }[/dim]", + " [dim]}[/dim]", + "", + " • Handler auto-rotates when limit reached", + " • Keeps most recent N entries (FIFO)", + " • [yellow]⚠️ Prevents log explosion (drone logs hit 171KB/7001 entries)[/yellow]", + "", + "[bold cyan]LOG STRUCTURE:[/bold cyan]", + " Array of entries (NOT object with \"entries\" key):", + " [dim][[/dim]", + " [dim]{ \"timestamp\": \"...\", \"operation\": \"...\", \"data\": {...} }[/dim]", + " [dim]][/dim]", + "", + "[bold cyan]LOCATIONS:[/bold cyan]", + " • Seed: [dim]/home/aipass/seed/seed_json/[/dim]", + " • Branches: [dim]/home/aipass/aipass_core/{branch}/{branch}_json/[/dim]", + "", + "[bold red]SETUP json_handler.py (MANDATORY):[/bold red]", + " [red]✗ DO NOT copy SEED's handler without changing paths![/red]", + "", + " [green]✓ Update BRANCH_ROOT:[/green]", + " [dim]{BRANCH}_ROOT = Path.home() / \"aipass_core\" / \"{branch}\"[/dim]", + "", + " [green]✓ Update JSON_DIR:[/green]", + " [dim]{BRANCH}_JSON_DIR = {BRANCH}_ROOT / \"{branch}_json\"[/dim]", + "", + " [green]✓ Update TEMPLATES_DIR:[/green]", + " [dim]JSON_TEMPLATES_DIR = {BRANCH}_ROOT / \"apps\" / \"json_templates\"[/dim]", + "", + " [yellow]Validate:[/yellow] Run standards checker on json_handler.py", + " [dim]Expected: 100/100 on JSON STRUCTURE standard[/dim]", + "", + "[bold cyan]SPECIAL JSONS:[/bold cyan]", + " • [bold]Registries:[/bold] Collections (BRANCH_REGISTRY.json)", + " • [bold]Custom:[/bold] Module-specific needs (no limit)", + " • [dim]Not part of three-JSON pattern[/dim]", + "", + "[bold cyan]REFERENCE:[/bold cyan]", + " [dim]/home/aipass/standards/CODE_STANDARDS/json_structure.md[/dim]", + " [dim]/home/aipass/seed/apps/handlers/json/json_handler.py[/dim]", + ] + + return "\n".join(lines) diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_handler_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_handler_check.py new file mode 100644 index 00000000..7cac2fcd --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_handler_check.py @@ -0,0 +1,223 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: log_handler_check.py - Log Handler Standards Checker Handler +# Date: 2026-02-26 +# Version: 1.0.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-26): Initial implementation - log handler rotation validation +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +Log Handler Standards Checker Handler + +Validates that all logging handlers use RotatingFileHandler (via prax system_logger). +Plain logging.FileHandler and logging.StreamHandler writing to system_logs/ are prohibited +because they cause unbounded log growth that can crash the entire system. + +THE STANDARD: +- All logging MUST use prax RotatingFileHandler (via system_logger import) +- No raw logging.FileHandler writing to log files +- No raw logging.StreamHandler writing to log files +- Prax's own logging infrastructure is exempt (it IS the implementation) +""" + +import sys +import re +from pathlib import Path +from typing import Dict, List + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + if rule.get('standard') and rule.get('standard') != standard: + continue + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if module follows log handler standards + + Args: + module_path: Path to Python module to check + bypass_rules: Optional list of bypass rules to skip certain checks + + Returns: + dict: { + 'passed': bool, + 'checks': [{'name': str, 'passed': bool, 'message': str}], + 'score': int, + 'standard': str + } + """ + checks = [] + path = Path(module_path) + + if is_bypassed(module_path, 'log_handler', bypass_rules=bypass_rules): + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': 'Standard bypassed via .seed/bypass.json'}], + 'score': 100, + 'standard': 'LOG_HANDLER' + } + + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'LOG_HANDLER' + } + + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'LOG_HANDLER' + } + + # Skip files that don't set up logging handlers at all + has_handler_setup = re.search( + r'logging\.(FileHandler|StreamHandler)\s*\(|' + r'\.addHandler\s*\(', + content + ) + if not has_handler_setup: + return { + 'passed': True, + 'checks': [{'name': 'Log handler check', 'passed': True, 'message': 'No log handler setup found (skipped)'}], + 'score': 100, + 'standard': 'LOG_HANDLER' + } + + # Exempt prax logging infrastructure (it IS the RotatingFileHandler implementation) + if 'prax' in module_path and ('logging' in module_path or 'setup.py' in module_path or 'terminal' in module_path): + return { + 'passed': True, + 'checks': [{'name': 'Log handler check', 'passed': True, 'message': 'Prax logging infrastructure (exempt)'}], + 'score': 100, + 'standard': 'LOG_HANDLER' + } + + # Check 1: No raw logging.FileHandler + file_handler_check = check_no_raw_file_handler(lines, module_path, bypass_rules=bypass_rules) + checks.append(file_handler_check) + + # Check 2: No raw logging.StreamHandler for log files + stream_handler_check = check_no_raw_stream_handler(lines, module_path, content, bypass_rules=bypass_rules) + if stream_handler_check: + checks.append(stream_handler_check) + + # Calculate score + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'LOG_HANDLER' + } + + +def check_no_raw_file_handler(lines: List[str], file_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check that no raw logging.FileHandler is used. + Must use RotatingFileHandler instead. + """ + violations = [] + + for i, line in enumerate(lines, 1): + stripped = line.strip() + # Skip comments and docstrings + if stripped.startswith('#'): + continue + + # Detect logging.FileHandler (but not RotatingFileHandler) + if re.search(r'logging\.FileHandler\s*\(', line): + if not is_bypassed(file_path, 'log_handler', i, bypass_rules): + violations.append(i) + + if violations: + return { + 'name': 'No raw FileHandler', + 'passed': False, + 'message': f'Raw logging.FileHandler on lines {violations[:5]} - use RotatingFileHandler via prax system_logger' + } + + return { + 'name': 'No raw FileHandler', + 'passed': True, + 'message': 'No raw logging.FileHandler found' + } + + +def check_no_raw_stream_handler(lines: List[str], file_path: str, content: str, bypass_rules: list | None = None) -> Dict | None: + """ + Check that logging.StreamHandler is not used for log file output. + StreamHandler attached to loggers that also write to files indicates + a logging setup that bypasses prax. + """ + # Only flag StreamHandler if the file also sets up file-based logging + has_file_logging = bool(re.search( + r'logging\.(FileHandler|RotatingFileHandler)\s*\(|' + r'system_logs|\.log["\']', + content + )) + if not has_file_logging: + return None + + violations = [] + + for i, line in enumerate(lines, 1): + stripped = line.strip() + if stripped.startswith('#'): + continue + + if re.search(r'logging\.StreamHandler\s*\(', line): + if not is_bypassed(file_path, 'log_handler', i, bypass_rules): + violations.append(i) + + if violations: + return { + 'name': 'No raw StreamHandler with file logging', + 'passed': False, + 'message': f'Raw logging.StreamHandler with file logging on lines {violations[:5]} - use prax system_logger instead' + } + + return { + 'name': 'No raw StreamHandler with file logging', + 'passed': True, + 'message': 'No raw StreamHandler with file logging found' + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_handler_content.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_handler_content.py new file mode 100644 index 00000000..4fe1839e --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_handler_content.py @@ -0,0 +1,66 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: log_handler_content.py - Log Handler Standards Content +# Date: 2026-02-26 +# Version: 1.0.0 +# Category: seed/standards/content +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-26): Initial content - log handler rotation standard +# +# CODE STANDARDS: +# - Content handler provides Rich-formatted text for display +# ============================================= + +""" +Log Handler Standards Content + +Provides Rich-formatted reference text for the log handler rotation standard. +""" + + +def get_log_handler_standards() -> str: + """Return Rich-formatted log handler standards text""" + return """[bold white]LOG HANDLER ROTATION STANDARD[/bold white] + +[yellow]PURPOSE:[/yellow] + All logging MUST use RotatingFileHandler via prax system_logger. + Raw logging.FileHandler and logging.StreamHandler cause unbounded + log growth that can crash the entire AIPass command infrastructure. + +[yellow]THE RULES:[/yellow] + + [bold red]PROHIBITED[/bold red] + - Plain FileHandler (no rotation, unbounded growth) + - Plain StreamHandler alongside file-based log output + - Any handler setup writing to system_logs/ without rotation + + [bold green]REQUIRED[/bold green] + - Import prax system_logger (centralized rotating handler) + - All log output via system_logger methods (info/warning/error) + - Prax handles rotation automatically (maxBytes + backupCount) + + [bold cyan]EXEMPT[/bold cyan] + - Prax's own logging infrastructure (it IS the implementation) + - Test files that set up temporary loggers for testing purposes + +[yellow]EXAMPLES:[/yellow] + + [red]BAD:[/red] + # [WRONG] Plain file handler with no rotation — grows forever + # [WRONG] Plain stream handler alongside file-based log output + # [WRONG] Custom handler setup bypassing prax entirely + + [green]GOOD:[/green] + # [CORRECT] Import and use prax system_logger (has rotation built in) + # [CORRECT] All output via system_logger info/warning/error methods + # [CORRECT] If custom handler needed, use RotatingFileHandler with limits + +[yellow]WHY THIS MATTERS:[/yellow] + On 2026-02-26, telegram bots using plain FileHandler accumulated + 181,566 log lines (~100K ERROR lines) that crashed ALL drone commands. + The error catchup scanner tried to process 100K errors, hit Python's + recursion limit, and cascaded into system-wide failure. + RotatingFileHandler prevents this by capping file size automatically.""" diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_level_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_level_check.py new file mode 100644 index 00000000..da624311 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_level_check.py @@ -0,0 +1,258 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: log_level_check.py - Log Level Hygiene Standards Checker Handler +# Date: 2026-02-13 +# Version: 1.0.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-13): Initial implementation - log level correctness validation +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +Log Level Hygiene Standards Checker Handler + +Validates that ERROR level is reserved for system failures only, +and WARNING level is used for user input errors instead. + +THE STANDARD: +- ERROR = System failures (crashes, timeouts, unhandled exceptions, + import failures, file I/O errors, connection failures) +- WARNING = User input errors (unknown command, invalid arguments, + missing required args, bad syntax, typos) +- INFO = Normal operations, successful completions, discoveries +""" + +import sys +import re +from pathlib import Path +from typing import Dict, List, Optional + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + if rule.get('standard') and rule.get('standard') != standard: + continue + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if module follows log level hygiene standards + + Args: + module_path: Path to Python module to check + bypass_rules: Optional list of bypass rules to skip certain checks + + Returns: + dict: { + 'passed': bool, + 'checks': [{'name': str, 'passed': bool, 'message': str}], + 'score': int, + 'standard': str + } + """ + checks = [] + path = Path(module_path) + + if is_bypassed(module_path, 'log_level', bypass_rules=bypass_rules): + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': 'Standard bypassed via .seed/bypass.json'}], + 'score': 100, + 'standard': 'LOG_LEVEL' + } + + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'LOG_LEVEL' + } + + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'LOG_LEVEL' + } + + # Only check files that use logger + has_logger = re.search(r'\blogger\.(error|warning|info|debug)\s*\(', content) + if not has_logger: + return { + 'passed': True, + 'checks': [{'name': 'Log level check', 'passed': True, 'message': 'No logger calls found (skipped)'}], + 'score': 100, + 'standard': 'LOG_LEVEL' + } + + # Check 1: ERROR not used for user input errors + error_misuse_check = check_error_not_user_input(lines, module_path, bypass_rules=bypass_rules) + checks.append(error_misuse_check) + + # Check 2: Unknown/unrecognized command patterns use WARNING + command_routing_check = check_command_routing_level(content, lines, module_path, bypass_rules) + if command_routing_check: + checks.append(command_routing_check) + + # Calculate score + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'LOG_LEVEL' + } + + +def _get_non_code_lines(lines: List[str]) -> set: + """ + Build a set of line numbers that are inside docstrings or comments. + + Uses AST-aware triple-quote counting: if a line has an even number of + triple-quote delimiters it is self-contained (e.g. single-line docstring + or string assignment). Only odd counts toggle the in-docstring state. + """ + skip: set = set() + in_docstring = False + + for i, line in enumerate(lines, 1): + stripped = line.strip() + + triple_double = stripped.count('"""') + triple_single = stripped.count("'''") + total_triple = triple_double + triple_single + + if total_triple > 0 and total_triple % 2 == 1: + in_docstring = not in_docstring + skip.add(i) + continue + elif total_triple > 0 and total_triple % 2 == 0: + skip.add(i) + continue + + if in_docstring or stripped.startswith('#'): + skip.add(i) + + return skip + + +def check_error_not_user_input(lines: List[str], file_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check that ERROR level is not used for user input validation. + + User input patterns (should be WARNING, not ERROR): + - "unknown command", "invalid argument", "not found" (for user input), + "unrecognized", "no such command", "bad syntax", "missing required" + """ + user_input_patterns = [ + r'unknown\s+command', + r'unknown\s+action', + r'unrecognized', + r'invalid\s+arg', + r'invalid\s+command', + r'invalid\s+option', + r'bad\s+syntax', + r'no\s+module\s+handled', + r'not\s+a\s+valid\s+command', + r'command\s+not\s+(found|recognized|supported)', + ] + + violations = [] + skip_lines = _get_non_code_lines(lines) + + for i, line in enumerate(lines, 1): + if i in skip_lines: + continue + + if re.search(r'logger\.error\s*\(', line): + line_lower = line.lower() + for pattern in user_input_patterns: + if re.search(pattern, line_lower): + if not is_bypassed(file_path, 'log_level', i, bypass_rules): + violations.append(i) + break + + if violations: + return { + 'name': 'ERROR reserved for system failures', + 'passed': False, + 'message': f'ERROR level used for user input on lines {violations[:5]} - use WARNING level instead' + } + + return { + 'name': 'ERROR reserved for system failures', + 'passed': True, + 'message': 'ERROR level correctly used for system failures only' + } + + +def check_command_routing_level(content: str, lines: List[str], file_path: str, bypass_rules: list | None = None) -> Optional[Dict]: + """ + Check that command routing failures use WARNING, not ERROR. + + Entry points and modules that route commands should log unrecognized + commands as WARNING (user typed wrong thing) not ERROR (system broke). + """ + has_command_routing = bool(re.search(r'(route_command|handle_command|args\.command)', content)) + if not has_command_routing: + return None + + violations = [] + skip_lines = _get_non_code_lines(lines) + + for i, line in enumerate(lines, 1): + if i in skip_lines: + continue + + if re.search(r'logger\.error\s*\(', line): + line_lower = line.lower() + if re.search(r'(unknown\s+command|unrecognized|not\s+handled|no\s+module\s+handled)', line_lower): + if not is_bypassed(file_path, 'log_level', i, bypass_rules): + violations.append(i) + + if violations: + return { + 'name': 'Command routing uses WARNING', + 'passed': False, + 'message': f'Command routing failures logged as ERROR on lines {violations[:5]} - should be WARNING' + } + + return { + 'name': 'Command routing uses WARNING', + 'passed': True, + 'message': 'Command routing failures correctly use WARNING level' + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_level_content.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_level_content.py new file mode 100644 index 00000000..71ba4298 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_level_content.py @@ -0,0 +1,72 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: log_level_content.py - Log Level Hygiene Standards Content +# Date: 2026-02-13 +# Version: 1.0.0 +# Category: seed/standards/content +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-13): Initial content - log level hygiene standard +# +# CODE STANDARDS: +# - Content handler provides Rich-formatted text for display +# ============================================= + +""" +Log Level Hygiene Standards Content + +Provides Rich-formatted reference text for the log level hygiene standard. +""" + + +def get_log_level_standards() -> str: + """Return Rich-formatted log level hygiene standards text""" + return """[bold white]LOG LEVEL HYGIENE STANDARD[/bold white] + +[yellow]PURPOSE:[/yellow] + Ensure ERROR level is reserved for real system failures. + User input errors must use WARNING level. + This is critical for Medic v2 push-based error detection accuracy. + +[yellow]THE RULES:[/yellow] + + [bold red]ERROR[/bold red] = System failures ONLY + - Crashes, unhandled exceptions + - Timeouts, connection failures + - Import failures, missing dependencies + - File I/O errors (disk full, permission denied) + - Internal state corruption + + [bold yellow]WARNING[/bold yellow] = User input errors + - Unknown command, unrecognized action + - Invalid arguments, bad syntax + - Missing required arguments + - Typos in user input + - Command routing failures (no module handled) + + [bold cyan]INFO[/bold cyan] = Normal operations + - Successful completions + - Module discoveries + - Configuration loaded + - Service started/stopped + +[yellow]EXAMPLES:[/yellow] + + [red]BAD:[/red] + # [WRONG] Use ERROR for unknown user commands + # [WRONG] Use ERROR when no module handled the command + # [WRONG] Use ERROR for invalid user arguments + + [green]GOOD:[/green] + # [CORRECT] log as WARNING: "Unknown command: {command}" + # [CORRECT] log as WARNING: "No module handled command: {args.command}" + # [CORRECT] log as WARNING: "Invalid argument: {arg}" + # [CORRECT] log as ERROR: "Failed to connect to database: {e}" + # [CORRECT] log as ERROR: "Import failed: {e}" + +[yellow]WHY THIS MATTERS:[/yellow] + Medic v2 monitors ERROR-level log entries to detect real system issues. + If user typos trigger ERROR, Medic sees noise instead of signal. + Clean log levels = accurate error detection = healthier system.""" diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_visibility_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_visibility_check.py new file mode 100644 index 00000000..caf522e4 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_visibility_check.py @@ -0,0 +1,291 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: log_visibility_check.py - Log Visibility Standards Checker Handler +# Date: 2026-02-27 +# Version: 2.0.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v3.0.0 (2026-02-27): Remove handler exemption from Check 1 — unified Prax logging everywhere +# - v2.0.0 (2026-02-27): Two-check system: prax import + local FileHandler detection +# - v1.0.0 (2026-02-27): Initial implementation - detect raw logging.getLogger without prax +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +Log Visibility Standards Checker Handler + +Validates that logging output reaches system_logs/ for Prax monitor visibility. + +TWO CHECKS: +1. ALL files using logging.getLogger() must also import prax system_logger + (No handler exemption — unified Prax logging everywhere) +2. ANY file that creates logging.FileHandler writing to local paths (logs/, + not system_logs/) creates blind spots invisible to Prax monitor + +Prax logging infrastructure and test files are exempt from both checks. +""" + +import sys +import re +from pathlib import Path +from typing import Dict, List + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" + +# Patterns built via concatenation to avoid self-detection by checkers +_GETLOGGER_PAT = r'logging' + r'\.getLogger\s*\(' +_FILEHANDLER_PAT = r'logging' + r'\.FileHandler\s*\(' +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + if rule.get('standard') and rule.get('standard') != standard: + continue + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if module's logging is visible to Prax monitor (system_logs/). + + Two checks: + 1. Modules using getLogger must also import prax system_logger + 2. Any file creating FileHandler to local paths creates blind spots + + Args: + module_path: Path to Python module to check + bypass_rules: Optional list of bypass rules to skip certain checks + + Returns: + dict with passed, checks, score, standard + """ + checks = [] + path = Path(module_path) + + if is_bypassed(module_path, 'log_visibility', bypass_rules=bypass_rules): + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': 'Standard bypassed via .seed/bypass.json'}], + 'score': 100, + 'standard': 'LOG_VISIBILITY' + } + + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'LOG_VISIBILITY' + } + + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'LOG_VISIBILITY' + } + + # Exempt prax logging infrastructure (it IS the implementation) + if _is_prax_logging_infra(module_path): + return { + 'passed': True, + 'checks': [{'name': 'Log visibility', 'passed': True, 'message': 'Prax logging infrastructure (exempt)'}], + 'score': 100, + 'standard': 'LOG_VISIBILITY' + } + + # Exempt test files + if path.name.startswith('test_') or path.name.endswith('_test.py') or '/tests/' in module_path: + return { + 'passed': True, + 'checks': [{'name': 'Log visibility', 'passed': True, 'message': 'Test file (exempt)'}], + 'score': 100, + 'standard': 'LOG_VISIBILITY' + } + + has_getlogger = bool(re.search(_GETLOGGER_PAT, content)) + has_filehandler = bool(re.search(_FILEHANDLER_PAT, content)) + + # If file doesn't use logging at all, skip + if not has_getlogger and not has_filehandler: + return { + 'passed': True, + 'checks': [{'name': 'Log visibility', 'passed': True, 'message': 'No logging usage found (skipped)'}], + 'score': 100, + 'standard': 'LOG_VISIBILITY' + } + + # CHECK 1: ALL files using getLogger must have prax import + # (No handler exemption — unified Prax logging everywhere) + if has_getlogger: + check1 = _check_prax_import(lines, content, module_path, bypass_rules) + checks.append(check1) + + # CHECK 2: ANY file creating FileHandler to local paths = blind spot + if has_filehandler: + check2 = _check_local_filehandler(lines, module_path, bypass_rules) + checks.append(check2) + + # Calculate score + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'LOG_VISIBILITY' + } + + +def _is_prax_logging_infra(file_path: str) -> bool: + """Check if file is part of prax logging infrastructure""" + if 'prax' not in file_path: + return False + # Prax logging handlers and setup + if '/logging/' in file_path or '/logger' in file_path: + return True + # Prax logger module + if 'logger.py' in file_path: + return True + return False + + +def _check_prax_import(lines: List[str], content: str, file_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check 1: Files using stdlib getLogger must also import prax system_logger. + Applies to ALL files — no handler exemption. + """ + has_prax_import = bool(re.search( + r'from\s+prax\.apps\.modules\.logger\s+import', + content + )) + + if has_prax_import: + return { + 'name': 'Prax logger imported', + 'passed': True, + 'message': 'File imports prax system_logger alongside stdlib getLogger' + } + + # Find violation lines + violation_lines = _find_pattern_lines( + lines, _GETLOGGER_PAT, file_path, bypass_rules + ) + + if violation_lines: + return { + 'name': 'Prax logger imported', + 'passed': False, + 'message': f'stdlib getLogger() on lines {violation_lines[:5]} without prax system_logger import' + } + + return { + 'name': 'Prax logger imported', + 'passed': True, + 'message': 'No stdlib getLogger() violations' + } + + +def _check_local_filehandler(lines: List[str], file_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check 2: Any file creating logging.FileHandler to local paths = blind spot. + Applies to ALL files including handlers. No exemptions. + If FileHandler points to system_logs/, it's visible. Otherwise it's blind. + """ + # Find FileHandler creation lines + violation_lines = _find_pattern_lines( + lines, _FILEHANDLER_PAT, file_path, bypass_rules + ) + + if not violation_lines: + return { + 'name': 'No local FileHandler', + 'passed': True, + 'message': 'No local-only FileHandler creating blind logs' + } + + # Check if any FileHandler points to system_logs (which would be OK) + # If ALL FileHandlers point to system_logs, pass + blind_lines = [] + for line_num in violation_lines: + # Check surrounding context (FileHandler path might be on previous/same line) + context_start = max(0, line_num - 4) + context_end = min(len(lines), line_num + 2) + context = '\n'.join(lines[context_start:context_end]) + + if 'system_logs' in context or 'system_log' in context: + continue # This FileHandler writes to system_logs — visible + blind_lines.append(line_num) + + if blind_lines: + return { + 'name': 'No local FileHandler', + 'passed': False, + 'message': f'FileHandler to local logs on lines {blind_lines[:5]} — invisible to Prax monitor' + } + + return { + 'name': 'No local FileHandler', + 'passed': True, + 'message': 'FileHandler writes to system_logs (visible)' + } + + +def _find_pattern_lines(lines: List[str], pattern: str, file_path: str, bypass_rules: list | None = None) -> List[int]: + """Find lines matching a pattern, excluding docstrings and comments.""" + violation_lines = [] + in_docstring = False + docstring_char = None + + for i, line in enumerate(lines, 1): + stripped = line.strip() + + # Track docstrings + if not in_docstring: + if stripped.startswith('"""') or stripped.startswith("'''"): + docstring_char = stripped[:3] + if stripped.count(docstring_char) == 1: + in_docstring = True + continue + else: + if docstring_char and docstring_char in stripped: + in_docstring = False + continue + + # Skip comments + if stripped.startswith('#'): + continue + + if re.search(pattern, line): + if not is_bypassed(file_path, 'log_visibility', i, bypass_rules): + violation_lines.append(i) + + return violation_lines diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_visibility_content.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_visibility_content.py new file mode 100644 index 00000000..8e8dad9d --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/log_visibility_content.py @@ -0,0 +1,87 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: log_visibility_content.py - Log Visibility Standards Content +# Date: 2026-02-27 +# Version: 2.0.0 +# Category: seed/standards/content +# +# CHANGELOG (Max 5 entries): +# - v2.0.0 (2026-02-27): Updated for unified Prax logging — handlers no longer exempt +# - v1.0.0 (2026-02-27): Initial content - log visibility standard +# +# CODE STANDARDS: +# - Content handler provides Rich-formatted text for display +# ============================================= + +""" +Log Visibility Standards Content + +Provides Rich-formatted reference text for the log visibility standard. +""" + +import sys +from pathlib import Path + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +# Build example strings via concatenation to avoid triggering checkers +_GETLOGGER = "logging" + ".getLogger" +_FILEHANDLER = "logging" + ".FileHandler" +_PRAX_IMPORT = "from prax.apps.modules.logger import system_logger as logger" + + +def get_log_visibility_standards() -> str: + """Return Rich-formatted log visibility standards text""" + return f"""[bold white]LOG VISIBILITY STANDARD[/bold white] + +[yellow]PURPOSE:[/yellow] + ALL Python files (modules, handlers, entry points) MUST use prax system_logger + so logs appear in system_logs/ and are visible to Prax monitor. Raw + {_GETLOGGER}() creates local log files invisible to monitoring — blind spots. + +[yellow]THE RULES:[/yellow] + + [bold red]PROHIBITED[/bold red] + - Using {_GETLOGGER}() in ANY file without also importing prax system_logger + - Creating loggers that only write to local logs/ directories + - Any {_FILEHANDLER} setup that bypasses Prax dual-handler + + [bold green]REQUIRED[/bold green] + - Import prax system_logger: {_PRAX_IMPORT} + - Use system_logger for ALL logging — modules, handlers, entry points + - If {_GETLOGGER}() is needed for specific purposes, prax import must also be present + + [bold cyan]EXEMPT[/bold cyan] + - Prax's own logging infrastructure (it IS the implementation) + - Test files (test isolation) + - Files with .seed/bypass.json exceptions + +[yellow]TWO CHECKS (v3.0.0):[/yellow] + + [bold]Check 1: Prax Import (ALL files — no handler exemption)[/bold] + - Scans for {_GETLOGGER}() calls + - If found, checks for prax system_logger import + - Applies to modules AND handlers — unified Prax logging everywhere + + [bold]Check 2: Local FileHandler (ALL files, no exemptions)[/bold] + - Scans for {_FILEHANDLER}() creation + - Checks if it writes to system_logs/ (OK) or local logs/ (violation) + +[yellow]EXAMPLES:[/yellow] + + [red]BAD — handler using stdlib:[/red] + import logging + logger = {_GETLOGGER}(__name__) # VIOLATION: use Prax instead + + [green]GOOD — handler using Prax:[/green] + {_PRAX_IMPORT} + logger.info("Visible in Prax monitor and system_logs/") + +[yellow]WHY THIS MATTERS:[/yellow] + Audit found 92 local log files with no system_logs mirror — invisible + to Prax monitor. ONE logging system everywhere — Prax.""" diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/modules_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/modules_check.py new file mode 100644 index 00000000..519cd113 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/modules_check.py @@ -0,0 +1,551 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: modules_check.py - Modules Standards Checker Handler +# Date: 2025-11-25 +# Version: 0.4.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v0.4.0 (2025-11-28): Skip function-local vars in business logic check (fixes 67% false positives) +# - v0.3.1 (2025-11-25): Improved business logic detection - skips code refs (Name, Call, Attribute) +# - v0.3.0 (2025-11-25): Added business logic detection - flags hardcoded lists/dicts (hybrid line scan + AST) +# - v0.2.0 (2025-11-21): Fixed docstring detection bug - handles epilog strings in argparse correctly +# - v0.1.0 (2025-11-15): Initial implementation - module standards checking +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +Modules Standards Checker Handler + +Validates module compliance with AIPass module standards. +Checks handle_command pattern, thin orchestration, file size guidelines. +""" + +import sys +import re +import ast +from pathlib import Path +from typing import Dict, List, Optional + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + # Must match standard + if rule.get('standard') and rule.get('standard') != standard: + continue + # Must match file (check if rule file path is in the full path) + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + # Check line-specific bypass + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if module follows module standards + + Args: + module_path: Path to Python module to check + bypass_rules: Optional list of bypass rules to skip specific violations + + Returns: + dict: { + 'passed': bool, # Overall pass/fail + 'checks': [ # Individual check results + { + 'name': str, # Check name + 'passed': bool, # Pass/fail + 'message': str, # Details + } + ], + 'score': int, # 0-100 percentage + 'standard': str # Standard name + } + """ + checks = [] + path = Path(module_path) + + # Check if entire standard is bypassed for this file + if is_bypassed(module_path, 'modules', bypass_rules=bypass_rules): + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': 'Standard bypassed via .seed/bypass.json'}], + 'score': 100, + 'standard': 'MODULES' + } + + # Validate file exists + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'MODULES' + } + + # Read file + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'MODULES' + } + + # Only check files in modules/ directory + is_module = 'apps/modules/' in module_path + if not is_module: + return { + 'passed': True, + 'checks': [{'name': 'Module check', 'passed': True, 'message': 'Not a module file (skipped)'}], + 'score': 100, + 'standard': 'MODULES' + } + + # Check 1: handle_command pattern (for non-__init__ files) + if not path.name == '__init__.py': + handle_cmd_check = check_handle_command(content) + if handle_cmd_check: + checks.append(handle_cmd_check) + + # Check 2: File size guidelines + size_check = check_file_size(lines, module_path) + checks.append(size_check) + + # Check 3: No direct file operations (should use handlers) + file_ops_check = check_no_direct_file_ops(content, lines) + if file_ops_check: + checks.append(file_ops_check) + + # Check 4: No business logic (hardcoded data) + business_logic_check = check_no_business_logic(content, lines, module_path) + if business_logic_check: + checks.append(business_logic_check) + + # Check 5: Thin orchestration (no implementation functions) + orchestration_check = check_thin_orchestration(content, module_path, bypass_rules) + if orchestration_check: + checks.append(orchestration_check) + + # Calculate score + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + + # Overall pass if score >= 75% + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'MODULES' + } + + +def check_handle_command(content: str) -> Optional[Dict]: + """ + Check for handle_command pattern (drone routing standard) + + Modules should have: def handle_command(command: str, args: List[str]) -> bool + """ + lines = content.split('\n') + + # Filter out comments and docstrings + code_lines = [] + in_docstring = False + + for line in lines: + stripped = line.strip() + + # Track docstrings - check for triple quotes anywhere in line + if '"""' in stripped or "'''" in stripped: + # Determine which delimiter + has_triple_double = '"""' in stripped + has_triple_single = "'''" in stripped + + if has_triple_double: + quote_count = stripped.count('"""') + if quote_count % 2 == 1: + # Odd number = toggling docstring state + in_docstring = not in_docstring + # Even number = complete docstring on one line, don't change state + continue + elif has_triple_single: + quote_count = stripped.count("'''") + if quote_count % 2 == 1: + # Odd number = toggling docstring state + in_docstring = not in_docstring + # Even number = complete docstring on one line, don't change state + continue + + # Skip docstrings and comments + if in_docstring or stripped.startswith('#'): + continue + + code_lines.append(line) + + # Search only actual code + code_only = '\n'.join(code_lines) + + # Check for handle_command function + has_handle_command = bool(re.search(r'def\s+handle_command\s*\(', code_only)) + + if not has_handle_command: + return { + 'name': 'handle_command pattern', + 'passed': False, + 'message': 'Missing handle_command(command, args) -> bool for drone routing' + } + + # Check return type annotation + has_bool_return = bool(re.search(r'def\s+handle_command\([^)]*\)\s*->\s*bool', code_only)) + + if not has_bool_return: + return { + 'name': 'handle_command pattern', + 'passed': False, + 'message': 'handle_command exists but missing -> bool return type annotation' + } + + return { + 'name': 'handle_command pattern', + 'passed': True, + 'message': 'handle_command(command, args) -> bool pattern implemented' + } + + +def check_file_size(lines: List[str], module_path: str) -> Dict: + """ + Check file size against module guidelines + + Guidelines: + - <150 lines: Simple (perfect) + - 150-250: Standard (good) + - 250-400: Complex (acceptable) + - 400-600: Heavy (watch it) + - 600+: Too large (split needed) + """ + line_count = len(lines) + + if line_count < 150: + return { + 'name': 'File size', + 'passed': True, + 'message': f'{line_count} lines (simple - perfect size)' + } + elif line_count < 250: + return { + 'name': 'File size', + 'passed': True, + 'message': f'{line_count} lines (standard - good size)' + } + elif line_count < 400: + return { + 'name': 'File size', + 'passed': True, + 'message': f'{line_count} lines (complex - acceptable, watch it)' + } + elif line_count < 600: + return { + 'name': 'File size', + 'passed': True, + 'message': f'{line_count} lines (heavy - consider splitting into domains)' + } + else: + return { + 'name': 'File size', + 'passed': False, + 'message': f'{line_count} lines (too large - split required for AI comprehension)' + } + + +def check_no_direct_file_ops(content: str, lines: List[str]) -> Optional[Dict]: + """ + Check that module doesn't do direct file operations + + Modules should use handlers (like json_handler) not open(), Path.write_text(), etc. + """ + file_operations = [] + + in_docstring = False + for i, line in enumerate(lines, 1): + stripped = line.strip() + + # Track docstrings (only if at start of line, not in strings) + if stripped.startswith('"""') or stripped.startswith("'''"): + in_docstring = not in_docstring + + # Skip docstrings, comments and empty lines + if in_docstring or not stripped or stripped.startswith('#'): + continue + + # Check for direct file operations + # Allow: from pathlib import Path (import is OK) + # Allow: path = Path(...) (path creation is OK) + # Forbidden: open(), .write_text(), .read_text(), .mkdir(), json.dump(), json.load() + + # Skip import lines + if stripped.startswith('from ') or stripped.startswith('import '): + continue + + # Check for forbidden operations + if 'open(' in stripped and '# open(' not in stripped: + # Skip if in a string literal + before_pattern = stripped.split('open(')[0] + single_quotes = before_pattern.count("'") + double_quotes = before_pattern.count('"') + if single_quotes % 2 == 1 or double_quotes % 2 == 1: + continue + file_operations.append(f"line {i}: {stripped} (use handler instead)") + + if '.write_text(' in stripped or '.read_text(' in stripped: + file_operations.append(f"line {i}: {stripped} (use json_handler instead)") + + if '.mkdir(' in stripped: + file_operations.append(f"line {i}: {stripped} (use handler for file operations)") + + if 'json.dump(' in stripped or 'json.load(' in stripped: + file_operations.append(f"line {i}: {stripped} (use json_handler instead)") + + if file_operations: + return { + 'name': 'No direct file operations', + 'passed': False, + 'message': f'Module has direct file operations: {file_operations[0]}' + } + + return { + 'name': 'No direct file operations', + 'passed': True, + 'message': 'No direct file operations detected (uses handlers)' + } + + +def check_no_business_logic(content: str, lines: List[str], module_path: str) -> Optional[Dict]: + """ + Check that module doesn't contain hardcoded business logic data + + Detects hardcoded lists/dicts that should be in config files. + Uses hybrid detection: line scan (fast) + AST verification (accurate). + + Only flags MODULE-LEVEL hardcoded data (function-local is OK for display/temp data). + Skips: ALL_CAPS constants, empty structures, code references, function-local vars. + """ + # Phase 1: Quick line scan for candidates (module-level only = no leading whitespace) + # Only match assignments at column 0 (module level) + list_pattern = re.compile(r'^([a-z][a-z0-9_]*)\s*=\s*\[') + dict_pattern = re.compile(r'^([a-z][a-z0-9_]*)\s*=\s*\{') + + candidates = {} + for line_num, line in enumerate(lines, start=1): + # Skip if line starts with whitespace (inside function/class) + if line and line[0].isspace(): + continue + + # Check for list assignment + match = list_pattern.match(line) + if match: + var_name = match.group(1) + candidates[var_name] = line_num + continue + + # Check for dict assignment + match = dict_pattern.match(line) + if match: + var_name = match.group(1) + candidates[var_name] = line_num + + if not candidates: + return { + 'name': 'No business logic', + 'passed': True, + 'message': 'No hardcoded data structures detected' + } + + # Phase 2: AST verification (only module-level assignments) + violations = [] + + try: + tree = ast.parse(content, filename=module_path) + + # Only check module-level assignments (tree.body), not function-local + for node in tree.body: + if not isinstance(node, ast.Assign): + continue + + # Get variable name + if not isinstance(node.targets[0], ast.Name): + continue + + var_name = node.targets[0].id + + # Only check candidates found in phase 1 + if var_name not in candidates: + continue + + # Filter: Skip ALL_CAPS (constants) + if var_name.isupper(): + continue + + # Check if it's a list or dict + value = node.value + var_type = None + element_count = 0 + + if isinstance(value, ast.List): + var_type = 'list' + element_count = len(value.elts) + elif isinstance(value, ast.Dict): + var_type = 'dict' + element_count = len(value.keys) + else: + continue # Not a list or dict + + # Filter: Skip empty structures + if element_count == 0: + continue + + # Filter: Skip structures containing only code references (not data) + # These are structural code (function refs, module refs), not business data + if isinstance(value, ast.List): + # Check if all elements are code references (Name, Call, Attribute) + code_ref_types = (ast.Name, ast.Call, ast.Attribute) + if all(isinstance(elt, code_ref_types) for elt in value.elts): + continue + elif isinstance(value, ast.Dict): + # Check if all values are code references + code_ref_types = (ast.Name, ast.Call, ast.Attribute) + if all(isinstance(v, code_ref_types) for v in value.values): + continue + + # This is a confirmed violation + violations.append({ + 'line': node.lineno, + 'var': var_name, + 'type': var_type, + 'count': element_count + }) + + except SyntaxError: + # If file has syntax errors, skip this check + return None + except Exception: + # If AST parsing fails, skip this check + return None + + if violations: + # Report first violation + v = violations[0] + msg = f"Line {v['line']}: '{v['var']}' has hardcoded {v['type']} with {v['count']} elements (move to config)" + return { + 'name': 'No business logic', + 'passed': False, + 'message': msg + } + + return { + 'name': 'No business logic', + 'passed': True, + 'message': 'No hardcoded data structures detected' + } + + +def check_thin_orchestration(content: str, module_path: str, bypass_rules: list | None = None) -> Optional[Dict]: + """ + Check that module is a thin orchestrator (delegates to handlers). + + Modules should only have standard functions: + - handle_command() - command routing + - print_help() - help display + - print_introspection() - module info display + - main() - standalone entry point + + Any other functions indicate implementation logic that belongs in handlers. + """ + # Standard allowed functions in modules + ALLOWED_FUNCTIONS = { + 'handle_command', + 'print_help', + 'print_introspection', + 'main', + # Also allow private helpers that start with _ + } + + # Check bypass + if is_bypassed(module_path, 'modules', bypass_rules=bypass_rules): + return { + 'name': 'Thin orchestration', + 'passed': True, + 'message': 'Bypassed - thin orchestration check skipped' + } + + try: + tree = ast.parse(content, filename=module_path) + except SyntaxError: + return None + + # Find all top-level function definitions + non_standard_functions = [] + + for node in tree.body: + if isinstance(node, ast.FunctionDef): + func_name = node.name + + # Skip allowed functions + if func_name in ALLOWED_FUNCTIONS: + continue + + # Skip private functions (start with _) + if func_name.startswith('_'): + continue + + # Skip print_* functions (display wrappers are OK) + if func_name.startswith('print_'): + continue + + # This is a non-standard function - implementation logic + non_standard_functions.append({ + 'name': func_name, + 'line': node.lineno + }) + + if non_standard_functions: + # Report violation + func_list = [f"{f['name']} (line {f['line']})" for f in non_standard_functions[:5]] + extra = f" +{len(non_standard_functions) - 5} more" if len(non_standard_functions) > 5 else "" + + return { + 'name': 'Thin orchestration', + 'passed': False, + 'message': f"Module has {len(non_standard_functions)} implementation function(s) that belong in handlers: {', '.join(func_list)}{extra}" + } + + return { + 'name': 'Thin orchestration', + 'passed': True, + 'message': 'Module is thin orchestrator (standard functions only)' + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/modules_content.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/modules_content.py new file mode 100644 index 00000000..0d5dd6f9 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/modules_content.py @@ -0,0 +1,93 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: modules_content.py - Modules Standards Content Handler +# Date: 2025-11-13 +# Version: 0.2.0 +# Category: seed/standards/handlers +# +# CHANGELOG (Max 5 entries): +# - v0.2.0 (2025-11-13): Updated to condensed format with verified patterns +# - v0.1.0 (2025-11-13): Initial handler - Modules standards content +# +# CODE STANDARDS: +# - Handler provides content, module orchestrates output +# - Pure function - returns string, no side effects +# ============================================= + +""" +Modules Standards Content Handler + +Provides formatted module standards content. +Module orchestrates, handler implements. +""" + + +def get_modules_standards() -> str: + """Return formatted module standards content with Rich markup + + Returns: + str: Formatted standards text with Rich styling + """ + lines = [ + "[bold cyan]CORE PRINCIPLE:[/bold cyan]", + " [bold]Modules orchestrate, handlers implement[/bold]", + "", + " • Modules coordinate workflows by calling handlers in sequence", + " • Modules are thin (orchestration), handlers are thick (business logic)", + " • Dependencies flow one way: Modules → Handlers (never reverse)", + "", + "[yellow]RULE:[/yellow] Modules delegate to handlers, never implement business logic", + "", + "[bold cyan]KEY PATTERNS:[/bold cyan]", + "", + "[bold]1. handle_command() Entry Point[/bold]", + " [dim]def handle_command(command: str, args: List[str]) -> bool:[/dim]", + " • Check if command matches module's commands", + " • Log operation: [dim]json_handler.log_operation()[/dim]", + " • Execute workflow (delegate to handlers)", + " • Return [green]True[/green] if handled, [red]False[/red] otherwise", + "", + "[bold]2. Import Many Handlers (20+ is fine)[/bold]", + " [green]✓[/green] Modules CAN import handlers", + " [green]✓[/green] Modules CAN import services (Prax, CLI)", + " [red]✗[/red] Modules CANNOT import other modules", + " [red]✗[/red] Handlers CANNOT import modules", + "", + "[bold]3. Orchestrate, Don't Implement[/bold]", + " [dim]# ❌ BAD - business logic in module[/dim]", + " [dim]branch_path.mkdir(parents=True, exist_ok=True)[/dim]", + " [dim]config = {...}[/dim]", + " [dim]with open(config_file, 'w') as f:[/dim]", + "", + " [dim]# ✅ GOOD - orchestrate handler calls[/dim]", + " [dim]validate_branch_name(name)[/dim]", + " [dim]create_branch_structure(name, template)[/dim]", + " [dim]initialize_branch_config(name)[/dim]", + "", + "[bold]4. File Size Guidelines[/bold]", + " • 110-135 lines: Simple modules (single operation)", + " • 135-155 lines: Standard modules (multiple operations)", + " • 250-300 lines: Complex modules (batch operations, examples)", + " • 400+ lines: Consider splitting by domain", + "", + "[bold cyan]ESSENTIAL IMPORTS:[/bold cyan]", + " [dim]from prax.apps.modules.logger import system_logger as logger[/dim]", + " [dim]from cli.apps.modules import console, header, success, error[/dim]", + " [dim]from seed.apps.handlers.json import json_handler[/dim]", + "", + "[bold cyan]WARNINGS:[/bold cyan]", + " • NEVER use [dim]logger.debug()[/dim] - use [dim]logger.info()[/dim] only", + " • Module business logic = code smell (move to handlers)", + " • Heavy file operations belong in handlers, not modules", + "", + "[bold cyan]DEMONSTRATION:[/bold cyan]", + " [dim]/home/aipass/seed/apps/modules/cli_standard.py[/dim] (135 lines - perfect example)", + " [dim]/home/aipass/seed/apps/modules/test_cli_errors.py[/dim] (283 lines - advanced patterns)", + "", + "[bold cyan]REFERENCE:[/bold cyan]", + " [dim]/home/aipass/standards/CODE_STANDARDS/modules.md[/dim]", + ] + + return "\n".join(lines) diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/naming_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/naming_check.py new file mode 100644 index 00000000..5bbc9975 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/naming_check.py @@ -0,0 +1,405 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: naming_check.py - Naming Standards Checker Handler +# Date: 2025-11-22 +# Version: 0.5.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v0.5.0 (2025-11-22): Fixed false positive - logger = system_logger pattern now recognized +# - v0.4.0 (2025-11-22): Fixed false positive - imports (logger, console) no longer flagged as constants +# - v0.3.0 (2025-11-21): Fixed multi-line string tracking bug - prevents epilog strings from confusing scope +# - v0.2.0 (2025-11-21): Fixed scope tracking bug - if __name__ blocks now treated as function scope +# - v0.1.0 (2025-11-15): Initial implementation - naming standards checking +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +Naming Standards Checker Handler + +Validates module compliance with AIPass naming standards. +Checks file naming, function naming, variable naming, constant naming. +""" + +import sys +import re +from pathlib import Path +from typing import Dict, List, Optional + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) # Seed-specific: enables `from seed.apps.handlers...` imports + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + # Must match standard + if rule.get('standard') and rule.get('standard') != standard: + continue + # Must match file (check if rule file path is in the full path) + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + # Check line-specific bypass + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if module follows naming standards + + Args: + module_path: Path to Python module to check + bypass_rules: Optional list of bypass rules to skip certain violations + + Returns: + dict: { + 'passed': bool, # Overall pass/fail + 'checks': [ # Individual check results + { + 'name': str, # Check name + 'passed': bool, # Pass/fail + 'message': str, # Details + } + ], + 'score': int, # 0-100 percentage + 'standard': str # Standard name + } + """ + checks = [] + path = Path(module_path) + + # Check if entire standard is bypassed for this file + if is_bypassed(module_path, 'naming', bypass_rules=bypass_rules): + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': 'Standard bypassed via .seed/bypass.json'}], + 'score': 100, + 'standard': 'NAMING' + } + + # Validate file exists + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'NAMING' + } + + # Read file + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'NAMING' + } + + # Check 1: File naming (snake_case, no redundant prefixes) + file_naming_check = check_file_naming(module_path, path) + checks.append(file_naming_check) + + # Check 2: Function naming (snake_case) + function_naming_check = check_function_naming(content) + if function_naming_check: + checks.append(function_naming_check) + + # Check 3: Constant naming (UPPER_CASE) + constant_naming_check = check_constant_naming(content) + if constant_naming_check: + checks.append(constant_naming_check) + + # Check 4: Class naming (PascalCase) - if classes exist + class_naming_check = check_class_naming(content) + if class_naming_check: + checks.append(class_naming_check) + + # Calculate score + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + + # Overall pass if score >= 75% + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'NAMING' + } + + +def check_file_naming(module_path: str, path: Path) -> Dict: + """ + Check file naming conventions + + Rules: + - snake_case filenames + - No redundant prefixes (json/json_ops.py should be json/ops.py) + - Exception: json_handler.py (documented exception) + - Prefer standard verbs (create, ops, load, save, initialize, etc.) + """ + filename = path.stem # filename without extension + + # Check if it's the documented exception + if filename == 'json_handler' and '/handlers/json/' in module_path: + return { + 'name': 'File naming', + 'passed': True, + 'message': f'{filename}.py (documented exception - standardized handler)' + } + + # Check for snake_case + if not re.match(r'^[a-z][a-z0-9_]*$', filename): + return { + 'name': 'File naming', + 'passed': False, + 'message': f'{filename}.py uses invalid characters (use snake_case: lowercase + underscores)' + } + + # Check for redundant prefixes + # Extract parent directory name + if len(path.parts) > 1: + parent_dir = path.parts[-2] + + # Check if filename starts with parent directory name + if filename.startswith(f'{parent_dir}_'): + return { + 'name': 'File naming', + 'passed': False, + 'message': f'{filename}.py has redundant prefix (in {parent_dir}/ dir, use {filename.replace(f"{parent_dir}_", "")}.py)' + } + + # Check for standard verbs (informational) + standard_verbs = ['create', 'ops', 'load', 'save', 'initialize', 'formatters', 'decorators', + 'logger', 'prompts', 'content', 'check', 'handler'] + uses_standard_verb = any(verb in filename for verb in standard_verbs) + + if uses_standard_verb: + return { + 'name': 'File naming', + 'passed': True, + 'message': f'{filename}.py (snake_case, uses standard verb)' + } + else: + return { + 'name': 'File naming', + 'passed': True, + 'message': f'{filename}.py (snake_case, custom name - consider standard verbs)' + } + + +def check_function_naming(content: str) -> Optional[Dict]: + """ + Check function naming conventions + + Rules: + - snake_case function names + - No single-letter names (except in list comprehensions/loops) + """ + # Find all function definitions + function_pattern = r'^\s*(?:async\s+)?def\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*\(' + functions = re.findall(function_pattern, content, re.MULTILINE) + + if not functions: + return None # No functions to check + + # Check each function name + bad_functions = [] + for func_name in functions: + # Skip dunder methods + if func_name.startswith('__') and func_name.endswith('__'): + continue + + # Check for snake_case + if not re.match(r'^[a-z_][a-z0-9_]*$', func_name): + bad_functions.append(func_name) + + if bad_functions: + return { + 'name': 'Function naming', + 'passed': False, + 'message': f'Non-snake_case functions: {", ".join(bad_functions[:3])}{"..." if len(bad_functions) > 3 else ""}' + } + + return { + 'name': 'Function naming', + 'passed': True, + 'message': f'{len(functions)} functions checked - all snake_case' + } + + +def check_constant_naming(content: str) -> Optional[Dict]: + """ + Check constant naming conventions + + Rules: + - UPPER_CASE for module-level constants + - Assigned outside of functions/classes + - Excludes module imports (from X import Y as Z) + """ + # First pass: collect imported names to exclude from constant checking + imported_names = set() + for line in content.split('\n'): + stripped = line.strip() + # Match: from X import Y, Z + if stripped.startswith('from ') and ' import ' in stripped: + import_part = stripped.split(' import ', 1)[1] + # Handle 'as' aliases: logger = system_logger + for item in import_part.split(','): + item = item.strip() + if ' as ' in item: + # "system_logger as logger" -> get "logger" + imported_names.add(item.split(' as ')[1].strip()) + else: + # Direct import like "console" + imported_names.add(item.strip()) + + # Second pass: find module-level assignments (not inside functions/classes) + lines = content.split('\n') + constants = [] + bad_constants = [] + in_function_or_class = False + in_multiline_string = False + multiline_delimiter = None + current_indentation = 0 + + for line in lines: + stripped = line.strip() + + # Track multi-line strings (""" or ''') + if '"""' in stripped or "'''" in stripped: + delimiter = '"""' if '"""' in stripped else "'''" + count = stripped.count(delimiter) + + # If odd number, we're toggling in/out of multi-line string + if count % 2 == 1: + if not in_multiline_string: + in_multiline_string = True + multiline_delimiter = delimiter + elif multiline_delimiter == delimiter: + in_multiline_string = False + multiline_delimiter = None + + # Don't process lines inside multi-line strings + if in_multiline_string: + continue + + # Track if we're inside function or class or if __name__ block + if (stripped.startswith('def ') or + stripped.startswith('class ') or + stripped.startswith('async def ') or + stripped.startswith('if __name__')): + in_function_or_class = True + # Track indentation level when entering function/class + current_indentation = len(line) - len(line.lstrip()) + continue + + # Reset when we get back to module level (no indentation) + # Only reset if we're not inside a multi-line string + if in_function_or_class and not line.startswith(' ') and not line.startswith('\t') and stripped: + in_function_or_class = False + current_indentation = 0 + + # Skip if inside function/class + if in_function_or_class: + continue + + # Find assignments at module level + if '=' in stripped and not stripped.startswith('#'): + # Extract variable name and assignment value + match = re.match(r'^([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.+)$', stripped) + if match: + const_name = match.group(1) + assigned_value = match.group(2) + + # Skip if this is an imported name (like logger, console) + if const_name in imported_names: + continue + + # Skip if assignment is a function call or class instantiation (has parentheses) + # Examples: logger = logging.getLogger(...), console = Console() + if '(' in assigned_value: + continue + + # Skip if assigning an imported value to a variable + # Example: from prax import system_logger; logger = system_logger + if assigned_value.strip() in imported_names: + continue + + constants.append(const_name) + + # Constants should be UPPER_CASE + if not const_name.isupper(): + bad_constants.append(const_name) + + if not constants: + return None # No constants found + + if bad_constants: + return { + 'name': 'Constant naming', + 'passed': False, + 'message': f'Non-UPPER_CASE constants: {", ".join(bad_constants[:3])}' + } + + return { + 'name': 'Constant naming', + 'passed': True, + 'message': f'{len(constants)} constants checked - all UPPER_CASE' + } + + +def check_class_naming(content: str) -> Optional[Dict]: + """ + Check class naming conventions + + Rules: + - PascalCase class names + """ + # Find all class definitions + class_pattern = r'^\s*class\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*[\(:]' + classes = re.findall(class_pattern, content, re.MULTILINE) + + if not classes: + return None # No classes to check + + # Check each class name + bad_classes = [] + for class_name in classes: + # Check for PascalCase + if not re.match(r'^[A-Z][a-zA-Z0-9]*$', class_name): + bad_classes.append(class_name) + + if bad_classes: + return { + 'name': 'Class naming', + 'passed': False, + 'message': f'Non-PascalCase classes: {", ".join(bad_classes[:3])}' + } + + return { + 'name': 'Class naming', + 'passed': True, + 'message': f'{len(classes)} classes checked - all PascalCase' + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/naming_content.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/naming_content.py new file mode 100644 index 00000000..a2f35a12 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/naming_content.py @@ -0,0 +1,86 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: naming_content.py - Naming Standards Content Handler +# Date: 2025-11-13 +# Version: 0.1.0 +# Category: seed/standards/handlers +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-13): Initial handler - Naming standards content +# +# CODE STANDARDS: +# - Handler provides content, module orchestrates output +# - Pure function - returns string, no side effects +# ============================================= + +""" +Naming Standards Content Handler + +Provides formatted naming standards content. +Module orchestrates, handler implements. +""" + + +def get_naming_standards() -> str: + """Return formatted naming standards content with Rich markup + + Returns: + str: Formatted standards text with Rich styling + """ + lines = [ + "[bold cyan]CORE PRINCIPLE:[/bold cyan] Path = Context, Name = Action", + "", + "[yellow]RULE:[/yellow] The path provides context, the filename describes the action", + " Path already tells you domain → no need to repeat in filename", + "", + "─" * 70, + "", + "[bold cyan]REAL EXAMPLES (from codebase):[/bold cyan]", + "", + "[bold]Good:[/bold]", + " [green]✓[/green] [dim]cli/apps/handlers/error/decorators.py[/dim]", + " [green]✓[/green] [dim]cli/apps/handlers/error/formatters.py[/dim]", + " [green]✓[/green] [dim]prax/apps/handlers/config/load_config.py[/dim]", + " [green]✓[/green] [dim]seed/apps/handlers/domain1/ops.py[/dim]", + "", + "[bold]Bad (current violations):[/bold]", + " [red]✗[/red] [dim]prax/apps/handlers/json/json_ops.py[/dim] - redundant 'json_'", + " [red]✗[/red] [dim]prax/apps/handlers/json/json_handler.py[/dim] - redundant 'json_'", + "", + "─" * 70, + "", + "[bold cyan]STANDARD VERBS:[/bold cyan]", + "", + "[bold]Core operations:[/bold]", + " create, ops, load, save, initialize", + "", + "[bold]Transformation:[/bold]", + " formatters, decorators, logger", + "", + "[bold]Handlers:[/bold]", + " prompts (user interaction), content (data providers)", + "", + "─" * 70, + "", + "[bold cyan]PATTERN:[/bold cyan] [dim]handlers//.py[/dim]", + "", + "[yellow]WHY THIS MATTERS:[/yellow]", + " • Zero-cost navigation - predictable file locations", + " • Easy comparison - same structure across all branches", + " • Marketplace ready - handler purpose is immediately clear", + " • No lies when refactoring - path defines context, not name", + "", + "─" * 70, + "", + "[bold cyan]KEY WARNINGS:[/bold cyan]", + " [yellow]⚠[/yellow] This is aspirational - codebase has legacy violations", + " [yellow]⚠[/yellow] New code MUST follow standard - no new violations", + " [yellow]⚠[/yellow] Legacy code being migrated gradually", + "", + "[bold cyan]REFERENCE:[/bold cyan]", + " [dim]/home/aipass/standards/CODE_STANDARDS/naming.md[/dim]", + ] + + return "\n".join(lines) diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/permission_flags_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/permission_flags_check.py new file mode 100644 index 00000000..21c2779a --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/permission_flags_check.py @@ -0,0 +1,205 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: permission_flags_check.py - Permission Flags Standards Checker Handler +# Date: 2026-02-26 +# Version: 1.0.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-26): Initial implementation - permission flag validation +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +Permission Flags Standards Checker Handler + +Validates that only the approved permission bypass pattern is used. +The ONLY acceptable permission flag is '--permission-mode bypassPermissions'. +Any other permission bypass pattern (e.g., --dangerously-skip-permissions, +--skip-permissions, --no-permissions) is a violation. + +THE STANDARD: +- '--permission-mode bypassPermissions' is the AIPass standard +- '--dangerously-skip-permissions' is PROHIBITED +- Any other skip/bypass permission patterns are PROHIBITED +- Documentation files that mention these flags for reference are exempt +""" + +import sys +import re +from pathlib import Path +from typing import Dict, List + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + if rule.get('standard') and rule.get('standard') != standard: + continue + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def _get_non_code_lines(lines: List[str]) -> set: + """ + Build a set of line numbers that are inside docstrings or comments. + """ + skip: set = set() + in_docstring = False + + for i, line in enumerate(lines, 1): + stripped = line.strip() + + triple_double = stripped.count('"""') + triple_single = stripped.count("'''") + total_triple = triple_double + triple_single + + if total_triple > 0 and total_triple % 2 == 1: + in_docstring = not in_docstring + skip.add(i) + continue + elif total_triple > 0 and total_triple % 2 == 0: + skip.add(i) + continue + + if in_docstring or stripped.startswith('#'): + skip.add(i) + + return skip + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if module follows permission flags standards + + Args: + module_path: Path to Python module to check + bypass_rules: Optional list of bypass rules to skip certain checks + + Returns: + dict: { + 'passed': bool, + 'checks': [{'name': str, 'passed': bool, 'message': str}], + 'score': int, + 'standard': str + } + """ + checks = [] + path = Path(module_path) + + if is_bypassed(module_path, 'permission_flags', bypass_rules=bypass_rules): + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': 'Standard bypassed via .seed/bypass.json'}], + 'score': 100, + 'standard': 'PERMISSION_FLAGS' + } + + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'PERMISSION_FLAGS' + } + + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'PERMISSION_FLAGS' + } + + # Skip files that don't reference any permission patterns + has_permission_ref = re.search( + r'skip.?permissions|dangerously.?skip|permission.?mode|bypass.?permission', + content, re.IGNORECASE + ) + if not has_permission_ref: + return { + 'passed': True, + 'checks': [{'name': 'Permission flags check', 'passed': True, 'message': 'No permission flags found (skipped)'}], + 'score': 100, + 'standard': 'PERMISSION_FLAGS' + } + + # Check 1: No dangerous skip-permissions flags + dangerous_flags_check = check_no_dangerous_flags(lines, module_path, bypass_rules=bypass_rules) + checks.append(dangerous_flags_check) + + # Calculate score + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'PERMISSION_FLAGS' + } + + +def check_no_dangerous_flags(lines: List[str], file_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check that no dangerous permission bypass flags are used. + Only '--permission-mode bypassPermissions' is acceptable. + """ + # Patterns that are PROHIBITED + dangerous_patterns = [ + r'dangerously.?skip.?permissions', + r'--skip.?permissions', + r'--no.?permissions', + r'allow.?dangerously.?skip', + ] + + violations = [] + skip_lines = _get_non_code_lines(lines) + + for i, line in enumerate(lines, 1): + if i in skip_lines: + continue + + for pattern in dangerous_patterns: + if re.search(pattern, line, re.IGNORECASE): + if not is_bypassed(file_path, 'permission_flags', i, bypass_rules): + violations.append(i) + break + + if violations: + return { + 'name': 'No dangerous permission flags', + 'passed': False, + 'message': f'Dangerous permission bypass flags on lines {violations[:5]} - use --permission-mode bypassPermissions instead' + } + + return { + 'name': 'No dangerous permission flags', + 'passed': True, + 'message': 'Only approved permission flags used (--permission-mode bypassPermissions)' + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/permission_flags_content.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/permission_flags_content.py new file mode 100644 index 00000000..ade40ea9 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/permission_flags_content.py @@ -0,0 +1,65 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: permission_flags_content.py - Permission Flags Standards Content +# Date: 2026-02-26 +# Version: 1.0.0 +# Category: seed/standards/content +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-26): Initial content - permission flags standard +# +# CODE STANDARDS: +# - Content handler provides Rich-formatted text for display +# ============================================= + +""" +Permission Flags Standards Content + +Provides Rich-formatted reference text for the permission flags standard. +""" + + +def get_permission_flags_standards() -> str: + """Return Rich-formatted permission flags standards text""" + return """[bold white]PERMISSION FLAGS STANDARD[/bold white] + +[yellow]PURPOSE:[/yellow] + Enforce a single, approved permission bypass pattern across AIPass. + The only acceptable flag is '--permission-mode bypassPermissions'. + All other bypass patterns are prohibited. + +[yellow]THE RULES:[/yellow] + + [bold green]APPROVED[/bold green] + - --permission-mode bypassPermissions + - This is the AIPass standard for autonomous agent execution + + [bold red]PROHIBITED[/bold red] + - --dangerously-skip-permissions + - --skip-permissions + - --no-permissions + - --allow-dangerously-skip-permissions + - Any other permission bypass flag variant + +[yellow]EXAMPLES:[/yellow] + + [red]BAD:[/red] + # [WRONG] Dangerous skip flag + claude --dangerously-skip-permissions + # [WRONG] Generic skip + subprocess.run(['claude', '--skip-permissions']) + + [green]GOOD:[/green] + # [CORRECT] AIPass standard permission flag + subprocess.run(['claude', '--permission-mode', 'bypassPermissions']) + # [CORRECT] In command construction + cmd = [CLAUDE_BIN, '--permission-mode', 'bypassPermissions'] + +[yellow]WHY THIS MATTERS:[/yellow] + '--dangerously-skip-permissions' is a deprecated Claude CLI flag that + bypasses ALL safety checks without any granularity. The AIPass standard + '--permission-mode bypassPermissions' provides controlled permission + bypass that integrates with the AIPass permission system. + Using non-standard flags creates inconsistency and security risk.""" diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/readme_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/readme_check.py new file mode 100644 index 00000000..479ad713 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/readme_check.py @@ -0,0 +1,549 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: readme_check.py - README Standards Checker Handler +# Date: 2026-02-21 +# Version: 1.0.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-21): Initial implementation - README completeness and freshness validation +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +README Standards Checker Handler + +Validates README.md completeness and freshness for AIPass branches. + +Checks: +1. README exists at branch root +2. Required sections present (Architecture, Commands, Integration Points) +3. Last Updated freshness (within 7 days of newest code change) +4. Directory tree accuracy (mentioned directories exist on disk) +5. Module list completeness (all modules in apps/modules/ mentioned) +6. Command list presence (commands/usage section is not empty) +""" + +import os +import re +import sys +from datetime import datetime +from pathlib import Path +from typing import Dict, List, Optional + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + if rule.get('standard') and rule.get('standard') != standard: + continue + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if branch README follows standards + + Args: + module_path: Path to branch entry point (e.g., /home/aipass/seed/apps/seed.py) + bypass_rules: Optional list of bypass rules to skip certain checks + + Returns: + dict: { + 'passed': bool, + 'checks': [{'name': str, 'passed': bool, 'message': str}], + 'score': int, + 'standard': str + } + """ + checks = [] + + # Check if entire standard is bypassed for this file + if is_bypassed(module_path, 'readme', bypass_rules=bypass_rules): + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': 'Standard bypassed via .seed/bypass.json'}], + 'score': 100, + 'standard': 'README' + } + + # Derive branch root: module_path is apps/[branch].py, go up 2 levels + entry_path = Path(module_path) + branch_root = entry_path.parent.parent + + # Check 1: README exists + readme_path = branch_root / 'README.md' + readme_exists_check = check_readme_exists(readme_path) + checks.append(readme_exists_check) + + # If README doesn't exist, all other checks fail + if not readme_exists_check['passed']: + for name in ['Required sections', 'Last Updated freshness', + 'Directory tree accuracy', 'Module list completeness', + 'Command list presence']: + checks.append({ + 'name': name, + 'passed': False, + 'message': 'Cannot check - README.md missing' + }) + + passed_checks = sum(1 for c in checks if c['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + + return { + 'passed': score >= 75, + 'checks': checks, + 'score': score, + 'standard': 'README' + } + + # Read README content + try: + content = readme_path.read_text(encoding='utf-8') + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading README: {e}'}], + 'score': 0, + 'standard': 'README' + } + + # Check 2: Required sections present + sections_check = check_required_sections(lines, module_path, bypass_rules) + checks.append(sections_check) + + # Check 3: Last Updated freshness + freshness_check = check_last_updated_freshness(lines, branch_root, module_path, bypass_rules) + checks.append(freshness_check) + + # Check 4: Directory tree accuracy + tree_check = check_directory_tree(lines, branch_root, module_path, bypass_rules) + checks.append(tree_check) + + # Check 5: Module list completeness + modules_check = check_module_list(lines, branch_root, module_path, bypass_rules) + checks.append(modules_check) + + # Check 6: Command list presence + commands_check = check_command_list(lines, module_path, bypass_rules) + checks.append(commands_check) + + # Calculate score + passed_checks = sum(1 for c in checks if c['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'README' + } + + +def check_readme_exists(readme_path: Path) -> Dict: + """Check that README.md exists at branch root""" + if readme_path.exists() and readme_path.is_file(): + return { + 'name': 'README exists', + 'passed': True, + 'message': f'Found at {readme_path}' + } + return { + 'name': 'README exists', + 'passed': False, + 'message': f'README.md not found at {readme_path.parent}' + } + + +def check_required_sections(lines: List[str], file_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check for required section headers (case-insensitive, ## markdown headers). + + Required (at least one from each group): + - Architecture OR Directory Structure + - Commands OR Usage + - Integration Points OR Depends On OR Provides To + """ + if is_bypassed(file_path, 'readme', None, bypass_rules): + return { + 'name': 'Required sections', + 'passed': True, + 'message': 'Bypassed by bypass rules' + } + + content_lower = '\n'.join(lines).lower() + + # Group 1: Architecture / Directory Structure + group1_patterns = ['architecture', 'directory structure'] + group1_found = any( + re.search(r'^#{1,3}\s+.*' + re.escape(p), content_lower, re.MULTILINE) + for p in group1_patterns + ) + + # Group 2: Commands / Usage + group2_patterns = ['commands', 'usage'] + group2_found = any( + re.search(r'^#{1,3}\s+.*' + re.escape(p), content_lower, re.MULTILINE) + for p in group2_patterns + ) + + # Group 3: Integration Points / Depends On / Provides To + group3_patterns = ['integration points', 'depends on', 'provides to'] + group3_found = any( + re.search(r'^#{1,3}\s+.*' + re.escape(p), content_lower, re.MULTILINE) + for p in group3_patterns + ) + + missing = [] + if not group1_found: + missing.append('Architecture/Directory Structure') + if not group2_found: + missing.append('Commands/Usage') + if not group3_found: + missing.append('Integration Points/Depends On/Provides To') + + if not missing: + return { + 'name': 'Required sections', + 'passed': True, + 'message': 'All required sections found' + } + + return { + 'name': 'Required sections', + 'passed': False, + 'message': f'Missing sections: {", ".join(missing)}' + } + + +def check_last_updated_freshness(lines: List[str], branch_root: Path, file_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check that Last Updated date is within 7 days of newest .py file modification. + + Looks for patterns: + - *Last Updated: YYYY-MM-DD* + - *Last Updated*: YYYY-MM-DD + """ + if is_bypassed(file_path, 'readme', None, bypass_rules): + return { + 'name': 'Last Updated freshness', + 'passed': True, + 'message': 'Bypassed by bypass rules' + } + + # Find Last Updated line + readme_date = None + date_pattern = re.compile(r'\*?Last Updated\*?:\s*(\d{4}-\d{2}-\d{2})') + + for line in lines: + match = date_pattern.search(line) + if match: + try: + readme_date = datetime.strptime(match.group(1), '%Y-%m-%d') + except ValueError: + readme_date = None # Malformed date string + break + + if readme_date is None: + return { + 'name': 'Last Updated freshness', + 'passed': False, + 'message': 'No "Last Updated" date found in README' + } + + # Find newest .py file modification time in the branch + newest_py_mtime = None + apps_dir = branch_root / 'apps' + if apps_dir.exists(): + for py_file in apps_dir.rglob('*.py'): + if py_file.name == '__init__.py': + continue + try: + mtime = datetime.fromtimestamp(py_file.stat().st_mtime) + if newest_py_mtime is None or mtime > newest_py_mtime: + newest_py_mtime = mtime + except OSError: + continue + + if newest_py_mtime is None: + # No Python files to compare against - pass by default + return { + 'name': 'Last Updated freshness', + 'passed': True, + 'message': 'No .py files found to compare against' + } + + # Compare: flag if README date is >7 days behind newest code change + days_behind = (newest_py_mtime - readme_date).days + + if days_behind <= 7: + return { + 'name': 'Last Updated freshness', + 'passed': True, + 'message': f'README date {readme_date.strftime("%Y-%m-%d")} is within 7 days of latest code change' + } + + return { + 'name': 'Last Updated freshness', + 'passed': False, + 'message': f'README date {readme_date.strftime("%Y-%m-%d")} is {days_behind} days behind newest code change ({newest_py_mtime.strftime("%Y-%m-%d")})' + } + + +def check_directory_tree(lines: List[str], branch_root: Path, file_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check directory tree accuracy. + + If README contains a fenced code block after a "Directory Structure" or + "Architecture" heading, verify that directories mentioned in the tree + actually exist on disk. + """ + if is_bypassed(file_path, 'readme', None, bypass_rules): + return { + 'name': 'Directory tree accuracy', + 'passed': True, + 'message': 'Bypassed by bypass rules' + } + + # Find the tree section: look for a heading with architecture/directory structure, + # then find the next fenced code block + content = '\n'.join(lines) + tree_block = _extract_tree_block(content) + + if tree_block is None: + # No tree section found - pass (it's optional to have one) + return { + 'name': 'Directory tree accuracy', + 'passed': True, + 'message': 'No directory tree block found (optional check)' + } + + # Extract directory names from tree block, line by line + # Strip inline comments (text after #) to avoid false positives + # Skip the first non-empty line (root label, e.g., "seed/" or "/home/aipass/.../cortex/") + # Common tree formats: "apps/", "├── apps/", "│ ├── handlers/", " apps/" + dir_pattern = re.compile(r'[\w\-_.]+/') + branch_name = branch_root.name.lower() + mentioned_dirs = set() + tree_lines = tree_block.split('\n') + + # Skip the first non-empty line (it's the tree root label) + first_content_skipped = False + for tree_line in tree_lines: + if not first_content_skipped and tree_line.strip(): + first_content_skipped = True + continue + # Strip inline comments to avoid matching words in comments + if '#' in tree_line: + tree_line = tree_line[:tree_line.index('#')] + for match in dir_pattern.finditer(tree_line): + dir_name = match.group().rstrip('/') + # Skip the branch root name itself + # (trees typically start with the branch name, e.g., "seed/") + if dir_name.lower() == branch_name: + continue + if dir_name in ('__pycache__', '.git', 'node_modules'): + continue + # Skip hidden directories (start with .) + if dir_name.startswith('.'): + continue + # Skip glob/wildcard patterns (e.g., "*_check.py" produces "*_check/") + if '*' in dir_name: + continue + mentioned_dirs.add(dir_name) + + if not mentioned_dirs: + return { + 'name': 'Directory tree accuracy', + 'passed': True, + 'message': 'No directories detected in tree block' + } + + # Check which mentioned directories exist somewhere under branch root + missing_dirs = [] + for dir_name in mentioned_dirs: + # Check if this directory exists anywhere in the branch + found = False + for _, dirs, _ in os.walk(str(branch_root)): + if dir_name in dirs: + found = True + break + if not found: + missing_dirs.append(dir_name) + + if not missing_dirs: + return { + 'name': 'Directory tree accuracy', + 'passed': True, + 'message': f'All {len(mentioned_dirs)} directories in tree verified' + } + + return { + 'name': 'Directory tree accuracy', + 'passed': False, + 'message': f'Directories in tree not found on disk: {", ".join(sorted(missing_dirs))}' + } + + +def _extract_tree_block(content: str) -> Optional[str]: + """ + Extract the fenced code block following an Architecture/Directory Structure heading. + + Returns the code block content, or None if not found. + """ + # Find heading line + heading_pattern = re.compile( + r'^#{1,3}\s+.*(architecture|directory\s+structure)', + re.IGNORECASE | re.MULTILINE + ) + heading_match = heading_pattern.search(content) + if not heading_match: + return None + + # Look for next fenced code block after the heading + after_heading = content[heading_match.end():] + fence_pattern = re.compile(r'```[^\n]*\n(.*?)```', re.DOTALL) + fence_match = fence_pattern.search(after_heading) + if not fence_match: + return None + + return fence_match.group(1) + + +def check_module_list(lines: List[str], branch_root: Path, file_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check that all modules in apps/modules/ are mentioned in the README. + + Scans apps/modules/*.py (excluding __init__.py) and checks if each + module name appears somewhere in the README content. + """ + if is_bypassed(file_path, 'readme', None, bypass_rules): + return { + 'name': 'Module list completeness', + 'passed': True, + 'message': 'Bypassed by bypass rules' + } + + modules_dir = branch_root / 'apps' / 'modules' + if not modules_dir.exists(): + return { + 'name': 'Module list completeness', + 'passed': True, + 'message': 'No apps/modules/ directory found (skipped)' + } + + # Get actual module files + module_files = [] + for py_file in sorted(modules_dir.glob('*.py')): + if py_file.name == '__init__.py': + continue + module_files.append(py_file.stem) + + if not module_files: + return { + 'name': 'Module list completeness', + 'passed': True, + 'message': 'No module files found in apps/modules/' + } + + # Check if each module name appears in README + content_lower = '\n'.join(lines).lower() + missing_modules = [] + for module_name in module_files: + # Check for module name (with underscores or spaces or as-is) + name_lower = module_name.lower() + # Also check with underscores replaced by spaces + name_spaced = name_lower.replace('_', ' ') + if name_lower not in content_lower and name_spaced not in content_lower: + missing_modules.append(module_name) + + if not missing_modules: + return { + 'name': 'Module list completeness', + 'passed': True, + 'message': f'All {len(module_files)} modules mentioned in README' + } + + return { + 'name': 'Module list completeness', + 'passed': False, + 'message': f'Modules not mentioned in README: {", ".join(missing_modules)}' + } + + +def check_command_list(lines: List[str], file_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check that README has a non-empty commands/usage section. + + Finds the Commands or Usage heading and checks that there is content + between it and the next heading. + """ + if is_bypassed(file_path, 'readme', None, bypass_rules): + return { + 'name': 'Command list presence', + 'passed': True, + 'message': 'Bypassed by bypass rules' + } + + # Find Commands or Usage heading + command_heading_idx = None + for i, line in enumerate(lines): + stripped = line.strip() + if re.match(r'^#{1,3}\s+.*(commands|usage)', stripped, re.IGNORECASE): + command_heading_idx = i + break + + if command_heading_idx is None: + return { + 'name': 'Command list presence', + 'passed': False, + 'message': 'No Commands/Usage section found in README' + } + + # Check for content between this heading and next heading (or EOF) + content_lines = 0 + for i in range(command_heading_idx + 1, len(lines)): + stripped = lines[i].strip() + # Stop at next heading + if re.match(r'^#{1,3}\s+', stripped): + break + # Count non-empty lines + if stripped: + content_lines += 1 + + if content_lines > 0: + return { + 'name': 'Command list presence', + 'passed': True, + 'message': f'Commands/Usage section has {content_lines} content lines' + } + + return { + 'name': 'Command list presence', + 'passed': False, + 'message': 'Commands/Usage section is empty' + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/readme_content.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/readme_content.py new file mode 100644 index 00000000..a08b9ea2 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/readme_content.py @@ -0,0 +1,89 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: readme_content.py - README Standards Content +# Date: 2026-02-21 +# Version: 1.0.0 +# Category: seed/standards/content +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-21): Initial content - README completeness standard +# +# CODE STANDARDS: +# - Content handler provides Rich-formatted text for display +# ============================================= + +""" +README Standards Content + +Provides Rich-formatted reference text for the README standard. +""" + +import sys +from pathlib import Path + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def get_readme_standards() -> str: + """Return Rich-formatted README standards text""" + return """[bold white]README STANDARD[/bold white] + +[yellow]PURPOSE:[/yellow] + Every branch README must accurately reflect its current state. + A stale or incomplete README misleads contributors and AI agents. + +[yellow]CHECK 1 - README EXISTS:[/yellow] + + [bold cyan]README.md[/bold cyan] must be present at branch root. + This is the entry point for anyone encountering the branch. + +[yellow]CHECK 2 - REQUIRED SECTIONS:[/yellow] + + At least one heading from each group (## markdown headers): + + [bold cyan]Architecture / Directory Structure[/bold cyan] + How the branch is organized. Tree view preferred. + + [bold cyan]Commands / Usage[/bold cyan] + How to use the branch. CLI commands, API calls, etc. + + [bold cyan]Integration Points / Depends On / Provides To[/bold cyan] + What the branch connects to. Inbound and outbound. + +[yellow]CHECK 3 - LAST UPDATED FRESHNESS:[/yellow] + + README must contain a [dim]*Last Updated: YYYY-MM-DD*[/dim] line. + Date must be within [bold white]7 days[/bold white] of the newest .py file + modification in the branch. + + If code changed but README didn't update, it's likely stale. + +[yellow]CHECK 4 - DIRECTORY TREE ACCURACY:[/yellow] + + If README contains a directory tree (fenced code block under + Architecture/Directory Structure heading), verify that listed + directories actually exist on disk. + + Phantom directories in the tree = misleading documentation. + +[yellow]CHECK 5 - MODULE LIST COMPLETENESS:[/yellow] + + Every file in [dim]apps/modules/*.py[/dim] (excluding __init__.py) + should be mentioned somewhere in the README. + + Undocumented modules are invisible to collaborators. + +[yellow]CHECK 6 - COMMAND LIST PRESENCE:[/yellow] + + The Commands/Usage section must not be empty. + At minimum, list the primary commands the branch supports. + +[yellow]SCORING:[/yellow] + + 6 checks, each worth ~17 points. Pass threshold: 75%. + A branch with a missing README scores 17/100 (only check 1 runs).""" diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/readme_generator.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/readme_generator.py new file mode 100644 index 00000000..e1f43ee7 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/readme_generator.py @@ -0,0 +1,690 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: readme_generator.py - README Section Auto-Generator +# Date: 2026-02-21 +# Version: 1.0.0 +# Category: seed/standards/generators +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-21): Initial implementation - auto-generate README sections for branches +# +# CODE STANDARDS: +# - Utility handler, no Rich imports +# - Pure pathlib for file operations +# - Graceful error handling (return empty/None, don't crash) +# ============================================= + +""" +README Section Auto-Generator + +Generates auto-populatable README sections for any AIPass branch. +Designed to work with the branch template placeholders and the +readme_check.py validator (Phase 1). + +Sections generated: +- Directory tree (apps/ structure) +- Modules list (with docstring descriptions) +- Commands (from --help output) +- Header (from id.json) +- Last Updated timestamp +""" + +import json +import os +import re +import subprocess +import sys +from datetime import datetime +from pathlib import Path +from typing import Dict, List, Optional + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +# Directories and files to exclude from tree generation entirely +TREE_EXCLUDE = { + '__pycache__', '.gitkeep', '.git', 'node_modules', + '.pytest_cache', '.mypy_cache', +} + +# Directories to show as name-only (no children) - data/log dirs +TREE_COLLAPSE = { + 'ai_mail.local', 'logs', 'htmlcov', 'commands', + 'ai_mail_archive', 'artifacts', +} + +# Directories whose children are files only (no recursion into subdirs) +# e.g., *_json dirs with config/data/log triplets +TREE_SHALLOW_PATTERN = re.compile(r'.*_json$') + +# Hidden directory prefixes to skip +HIDDEN_PREFIX = '.' + +# Auto-section markers for README updates +MARKER_PREFIX = "" +MARKER_CLOSE_PREFIX = "... + ... + ... + ... + ... + + If markers don't exist, reports what would be updated without modifying. + + Args: + branch_path: Absolute path to the branch root directory + dry_run: If True, print what would change but don't write + + Returns: + Dict with: + 'updated': list of section names that were updated + 'missing_markers': list of section names without markers + 'errors': list of error messages + 'dry_run': whether this was a dry run + """ + result = { + 'updated': [], + 'missing_markers': [], + 'errors': [], + 'dry_run': dry_run, + } + + readme_path = Path(branch_path) / 'README.md' + if not readme_path.exists(): + result['errors'].append('README.md not found') + return result + + try: + content = readme_path.read_text(encoding='utf-8') + except OSError as e: + result['errors'].append(f'Failed to read README.md: {e}') + return result + + # Generate all sections + sections = generate_all_sections(branch_path) + + # Map section names to marker names + marker_map = { + 'tree': 'TREE', + 'modules': 'MODULES', + 'commands': 'COMMANDS', + 'header': 'HEADER', + 'last_updated': 'LAST_UPDATED', + } + + updated_content = content + + for section_name, marker_name in marker_map.items(): + section_content = sections.get(section_name, "") + if not section_content: + continue + + open_marker = f"{MARKER_PREFIX}{marker_name}{MARKER_SUFFIX}" + close_marker = f"{MARKER_CLOSE_PREFIX}{marker_name}{MARKER_SUFFIX}" + + if open_marker in updated_content and close_marker in updated_content: + # Replace content between markers + pattern = re.compile( + re.escape(open_marker) + r'.*?' + re.escape(close_marker), + re.DOTALL + ) + replacement = f"{open_marker}\n{section_content}\n{close_marker}" + updated_content = pattern.sub(replacement, updated_content) + result['updated'].append(section_name) + else: + result['missing_markers'].append(section_name) + + # Write if not dry run and something changed + if not dry_run and result['updated'] and updated_content != content: + try: + readme_path.write_text(updated_content, encoding='utf-8') + except OSError as e: + result['errors'].append(f'Failed to write README.md: {e}') + + return result + + +if __name__ == "__main__": + target = sys.argv[1] if len(sys.argv) > 1 else str(Path.home() / "aipass_core" / "cortex") + print(f"Generating README sections for: {target}\n{'='*70}") + sections = generate_all_sections(target) + for name, content in sections.items(): + print(f"\n{'='*70}\nSECTION: {name}\n{'='*70}") + print(content if content else "(empty - no content generated)") + # Test updater in dry_run mode + print(f"\n{'='*70}\nUPDATE DRY RUN\n{'='*70}") + update_result = update_readme_auto_sections(target, dry_run=True) + print(f"Would update: {update_result['updated']}") + print(f"Missing markers: {update_result['missing_markers']}") + print(f"Errors: {update_result['errors']}") diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/readme_ops.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/readme_ops.py new file mode 100644 index 00000000..1e2febe7 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/readme_ops.py @@ -0,0 +1,178 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: readme_ops.py - README Update Operations Handler +# Date: 2026-02-21 +# Version: 1.0.0 +# Category: seed/standards/handlers +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-21): Initial build - extracted from readme_update module (DPLAN-026 Phase 4) +# +# CODE STANDARDS: +# - Handler: implementation details for readme_update module +# - Uses importlib for cross-branch generator loading +# - Reads BRANCH_REGISTRY.json for branch resolution +# - No CLI output, no logger - returns data to module +# ============================================= + +""" +README Update Operations Handler + +Implementation details for the readme_update module. Handles branch resolution, +generator loading, and target resolution. Returns data structures for the +module to display. +""" + +import sys +import json +import importlib.util +from pathlib import Path +from typing import Dict, List, Optional + +# ============================================================================= +# INFRASTRUCTURE SETUP +# ============================================================================= + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +# ============================================================================= +# CONSTANTS +# ============================================================================= + +REGISTRY_PATH = Path.home() / "BRANCH_REGISTRY.json" +GENERATOR_PATH = Path.home() / "seed" / "apps" / "handlers" / "standards" / "readme_generator.py" + +# Section display names for output +SECTION_NAMES = { + 'tree': 'TREE', + 'modules': 'MODULES', + 'commands': 'COMMANDS', + 'header': 'HEADER', + 'last_updated': 'LAST_UPDATED', +} + + +# ============================================================================= +# BRANCH RESOLUTION +# ============================================================================= + +def resolve_branch(branch_arg: str) -> Optional[Dict]: + """ + Resolve @branch argument to branch info from registry. + + Args: + branch_arg: Branch name, optionally prefixed with @ + + Returns: + Branch dict from registry, or None if not found + """ + if not REGISTRY_PATH.exists(): + return None + + try: + content = REGISTRY_PATH.read_text(encoding='utf-8') + registry = json.loads(content) + except (json.JSONDecodeError, OSError): + return None + + # Strip @ prefix and normalize + name = branch_arg.lstrip('@').upper() + + for branch in registry.get('branches', []): + if branch.get('name', '').upper() == name: + return branch + # Also check aliases + aliases = branch.get('aliases', []) + for alias in aliases: + if alias.lstrip('@').upper() == name: + return branch + + return None + + +def get_all_branches() -> List[Dict]: + """ + Get all branches from the registry. + + Returns: + List of branch dicts, or empty list on failure + """ + if not REGISTRY_PATH.exists(): + return [] + + try: + content = REGISTRY_PATH.read_text(encoding='utf-8') + registry = json.loads(content) + return registry.get('branches', []) + except (json.JSONDecodeError, OSError): + return [] + + +# ============================================================================= +# GENERATOR LOADER +# ============================================================================= + +def load_generator(): + """ + Load readme_generator module via importlib to avoid cross-branch import issues. + + Returns: + The readme_generator module, or None on failure + """ + if not GENERATOR_PATH.exists(): + return None + + try: + spec = importlib.util.spec_from_file_location( + "readme_generator", + str(GENERATOR_PATH) + ) + if spec is None or spec.loader is None: + return None + generator = importlib.util.module_from_spec(spec) + spec.loader.exec_module(generator) + return generator + except Exception: + return None + + +# ============================================================================= +# TARGET RESOLUTION +# ============================================================================= + +def resolve_targets(args: List[str]) -> tuple: + """ + Resolve command arguments to a list of branch targets. + + Handles @all, @branch, and bare branch names. + + Args: + args: List of branch arguments + + Returns: + Tuple of (branches_list, error_message). + On success: (list_of_dicts, None) + On failure: ([], error_string) + """ + if not args: + return [], "no_args" + + target = args[0] + + # Handle @all + if target.lstrip('@').lower() == 'all': + branches = get_all_branches() + if not branches: + return [], "no_branches" + return branches, None + + # Handle specific branch + branch = resolve_branch(target) + if not branch: + return [], f"not_found:{target}" + + return [branch], None diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/template_scanner.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/template_scanner.py new file mode 100644 index 00000000..a9d44d2c --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/template_scanner.py @@ -0,0 +1,175 @@ +#!/home/aipass/.venv/bin/python3 + +""" +Template Scanner - Automatically scan template to discover structure + +Scans Cortex template directory and generates baseline structure. +Respects .registry_ignore.json patterns. +""" + +import sys +import json +from pathlib import Path +from typing import Dict, List, Set +from rich.console import Console + +# Setup AIPASS_ROOT for imports +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) + +console = Console() + +def load_ignore_patterns(template_path: Path) -> Dict: + """Load ignore patterns from .registry_ignore.json""" + ignore_file = template_path / ".registry_ignore.json" + + if not ignore_file.exists(): + return {"ignore_files": [], "ignore_patterns": []} + + with open(ignore_file, 'r', encoding='utf-8') as f: + data = json.load(f) + return { + "ignore_files": data.get("ignore_files", []), + "ignore_patterns": data.get("ignore_patterns", []) + } + + +def should_ignore(path: Path, template_path: Path, ignore_config: Dict) -> bool: + """Check if path should be ignored based on ignore patterns""" + relative_path = path.relative_to(template_path) + path_str = str(relative_path) + name = path.name + + # Check exact filename matches + if name in ignore_config["ignore_files"]: + return True + + # Check patterns + for pattern in ignore_config["ignore_patterns"]: + # Simple pattern matching + if pattern.startswith('*'): + # *.pyc -> check extension + suffix = pattern[1:] + if name.endswith(suffix): + return True + elif '*' in pattern: + # More complex patterns - skip for now + continue + else: + # Exact match or directory name + if name == pattern: + return True + # Check if any parent directory matches + if pattern in path.parts: + return True + + return False + + +def scan_template(template_path: Path) -> Dict: + """Scan template directory and return structure""" + ignore_config = load_ignore_patterns(template_path) + + structure = { + "directories": [], + "files": [], + "root_files": [] + } + + for item in template_path.rglob('*'): + # Skip ignored items + if should_ignore(item, template_path, ignore_config): + continue + + relative = item.relative_to(template_path) + + if item.is_dir(): + structure["directories"].append(str(relative)) + elif item.is_file(): + if item.parent == template_path: + # Root level file + structure["root_files"].append(item.name) + else: + # Nested file + structure["files"].append(str(relative)) + + return structure + + +def compare_to_branch(template_structure: Dict, branch_path: Path, branch_name: str) -> Dict: + """Compare template structure to actual branch""" + + missing = { + "directories": [], + "files": [], + "root_files": [] + } + + # Substitute {{BRANCH}} and {{branch}} in template items + for template_dir in template_structure["directories"]: + actual_dir = template_dir.replace("{{BRANCH}}", branch_name.upper()) + actual_dir = actual_dir.replace("{{branch}}", branch_name.lower()) + + dir_path = branch_path / actual_dir + if not dir_path.exists(): + missing["directories"].append(actual_dir) + + for template_file in template_structure["files"]: + actual_file = template_file.replace("{{BRANCH}}", branch_name.upper()) + actual_file = actual_file.replace("{{branch}}", branch_name.lower()) + + file_path = branch_path / actual_file + if not file_path.exists(): + missing["files"].append(actual_file) + + for template_file in template_structure["root_files"]: + actual_file = template_file.replace("{{BRANCH}}", branch_name.upper()) + actual_file = actual_file.replace("{{branch}}", branch_name.lower()) + + file_path = branch_path / actual_file + if not file_path.exists(): + missing["root_files"].append(actual_file) + + return missing + + +if __name__ == "__main__": + import sys + + # Test on SEED + template_path = Path("/home/aipass/aipass_core/cortex/templates/branch_template") + + console.print("Scanning template...") + structure = scan_template(template_path) + + console.print("Template structure:") + console.print(f" Directories: {len(structure['directories'])}") + console.print(f" Files: {len(structure['files'])}") + console.print(f" Root files: {len(structure['root_files'])}") + + console.print("\nRoot files found in template:") + for f in sorted(structure['root_files']): + console.print(f" - {f}") + + # Compare to SEED + if len(sys.argv) > 1: + branch_path = Path(sys.argv[1]) + branch_name = branch_path.name + + console.print(f"\n\nComparing to branch: {branch_name}") + missing = compare_to_branch(structure, branch_path, branch_name) + + if missing["root_files"]: + console.print(f"\nMissing root files ({len(missing['root_files'])}):") + for f in sorted(missing['root_files']): + console.print(f" ✗ {f}") + + if missing["directories"]: + console.print(f"\nMissing directories ({len(missing['directories'])}):") + for d in sorted(missing['directories'])[:10]: + console.print(f" ✗ {d}") + + if missing["files"]: + console.print(f"\nMissing files ({len(missing['files'])}):") + for f in sorted(missing['files'])[:10]: + console.print(f" ✗ {f}") diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/testing_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/testing_check.py new file mode 100644 index 00000000..8937d84f --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/testing_check.py @@ -0,0 +1,253 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: testing_check.py - Testing Standards Checker Handler +# Date: 2025-11-15 +# Version: 0.1.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-15): Initial implementation - testing standards checking +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +Testing Standards Checker Handler + +Validates testing compliance with AIPass testing standards. +Checks for test functions, error handling patterns. +Note: Manual testing is acceptable in current rapid iteration phase. +""" + +import sys +import re +from pathlib import Path +from typing import Dict, List, Optional + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> bool: + """Check if a violation should be bypassed""" + if not bypass_rules: + return False + for rule in bypass_rules: + # Must match standard + if rule.get('standard') and rule.get('standard') != standard: + continue + # Must match file (check if rule file path is in the full path) + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + # Check line-specific bypass + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + return True + return False + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if module follows testing standards + + Args: + module_path: Path to Python module to check + bypass_rules: Optional list of bypass rules to skip certain checks + + Returns: + dict: { + 'passed': bool, # Overall pass/fail + 'checks': [ # Individual check results + { + 'name': str, # Check name + 'passed': bool, # Pass/fail + 'message': str, # Details + } + ], + 'score': int, # 0-100 percentage + 'standard': str # Standard name + } + """ + checks = [] + path = Path(module_path) + + # Check if entire standard is bypassed for this file + if is_bypassed(module_path, 'testing', bypass_rules=bypass_rules): + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': 'Standard bypassed via .seed/bypass.json'}], + 'score': 100, + 'standard': 'TESTING' + } + + # Validate file exists + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'TESTING' + } + + # Read file + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'TESTING' + } + + # Check 1: Error handling presence (for non-test files) + is_test_file = path.name.startswith('test_') or path.name.startswith('test.') + if not is_test_file: + error_handling_check = check_error_handling(content, lines) + if error_handling_check: + checks.append(error_handling_check) + + # Check 2: Test functions (if it's a test file) + if is_test_file: + test_functions_check = check_test_functions(content) + checks.append(test_functions_check) + + # If no checks were added, testing standard doesn't apply (passes) + if not checks: + return { + 'passed': True, + 'checks': [{'name': 'Testing check', 'passed': True, 'message': 'Manual testing acceptable (no automated tests required)'}], + 'score': 100, + 'standard': 'TESTING' + } + + # Calculate score + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + + # Overall pass if score >= 75% + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'TESTING' + } + + +def check_error_handling(content: str, lines: List[str]) -> Optional[Dict]: + """ + Check for proper error handling patterns + + Good: try/except with logging or return values + Bad: Silent failures (bare except: pass) + """ + # Count try/except blocks + try_count = content.count('try:') + except_count = content.count('except') + + if try_count == 0: + # No error handling, but that's acceptable (not all code needs it) + return None + + # Check for silent failures (except: pass or except Exception: pass) + silent_failures = [] + in_docstring = False + in_except = False + except_line = 0 + + for i, line in enumerate(lines): + stripped = line.strip() + + # Track docstrings (skip single-line docstrings) + if stripped.startswith('"""') or stripped.startswith("'''"): + # Check if it's a single-line docstring (opens and closes on same line) + quote = '"""' if stripped.startswith('"""') else "'''" + if stripped.count(quote) == 2 and len(stripped) > len(quote) * 2: + # Single-line docstring, don't toggle + pass + else: + in_docstring = not in_docstring + + # Skip docstrings + if in_docstring: + continue + + # Track except blocks + if 'except' in stripped and ':' in stripped: + in_except = True + except_line = i + continue + + # Check if except block only has pass + if in_except: + # Check if line is just 'pass' or 'pass' with a comment + if stripped == 'pass' or stripped.startswith('pass ') or stripped.startswith('pass#'): + # Check if this is the only statement in except block + # Look ahead to see if next non-empty line is dedented + is_silent = True + for j in range(i, min(i + 3, len(lines))): + next_line = lines[j].strip() + # Check if line is not a pass statement (with or without comment) + is_pass_line = next_line == 'pass' or next_line.startswith('pass ') or next_line.startswith('pass#') + if next_line and not is_pass_line: + # Has other statements, not silent + if lines[j].startswith(' ') and len(lines[j]) - len(lines[j].lstrip()) > len(line) - len(line.lstrip()): + is_silent = False + break + + if is_silent: + silent_failures.append(f"line {except_line}") + + # Reset except tracking when we leave the block (check original line, not stripped) + if line.strip() and not line.startswith(' ') and not line.startswith('\t'): + in_except = False + + if silent_failures: + return { + 'name': 'Error handling', + 'passed': False, + 'message': f'Silent failure detected (except: pass) at {silent_failures[0]} - errors should log/return' + } + + return { + 'name': 'Error handling', + 'passed': True, + 'message': f'Error handling present ({try_count} try/except blocks with proper handling)' + } + + +def check_test_functions(content: str) -> Dict: + """ + Check that test files have test functions + + Test files should have functions starting with test_ + """ + # Count test functions + test_functions = re.findall(r'def\s+(test_\w+)\s*\(', content) + + if not test_functions: + return { + 'name': 'Test functions', + 'passed': False, + 'message': 'Test file has no test functions (should have def test_* functions)' + } + + return { + 'name': 'Test functions', + 'passed': True, + 'message': f'Test file has {len(test_functions)} test functions' + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/trigger_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/trigger_check.py new file mode 100644 index 00000000..af9d6629 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/trigger_check.py @@ -0,0 +1,549 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: trigger_check.py - Trigger Standards Checker Handler +# Date: 2025-12-04 +# Version: 1.0.0 +# Category: seed/standards/checkers +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-12-04): Added inline filesystem ops: .unlink(), .rename() detection +# - v0.9.0 (2025-12-04): Added repair/recovery/cleanup/backup/system lifecycle patterns +# - v0.8.0 (2025-12-04): Added line numbers to violation messages for navigation +# - v0.7.0 (2025-12-04): Added central patterns: update_central, write_central_* +# - v0.6.0 (2025-12-04): Added registry patterns: save/add/remove/sync_registry +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# ============================================= + +""" +Trigger Standards Checker Handler + +Validates compliance with AIPass Trigger event bus standards: +- Correct import patterns for trigger +- No logger imports in event handlers +- No print statements in event handlers +- Proper event naming conventions + +Valid bypass categories for .seed/bypass.json: +- handler_layer: Function in handlers/ layer (orchestrator fires instead) +- initialization: One-time setup/config creation +- internal_ops: Same-module internal operation +- high_frequency: Would create event spam +- utility: Helper called by event-firing function +""" + +import re +from pathlib import Path +from typing import Dict, List, Optional + +# Valid bypass categories for trigger standard +BYPASS_CATEGORIES = { + 'handler_layer': 'Function in handlers/ layer (orchestrator fires instead)', + 'initialization': 'One-time setup/config creation', + 'internal_ops': 'Same-module internal operation', + 'high_frequency': 'Would create event spam', + 'utility': 'Helper called by event-firing function', +} + + +def is_bypassed(file_path: str, standard: str, line: int | None = None, bypass_rules: list | None = None) -> tuple[bool, str | None, str | None]: + """Check if a violation should be bypassed + + Args: + file_path: Path to file being checked + standard: Standard name (e.g., 'trigger') + line: Optional specific line number + bypass_rules: List of bypass rules from .seed/bypass.json + + Returns: + tuple: (is_bypassed: bool, category: str | None, reason: str | None) + - category is the bypass category if bypassed (handler_layer, initialization, etc.) + - reason is the human-readable bypass reason + """ + if not bypass_rules: + return False, None, None + for rule in bypass_rules: + if rule.get('standard') and rule.get('standard') != standard: + continue + rule_file = rule.get('file', '') + if rule_file and rule_file not in file_path: + continue + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + category = rule.get('category') + reason = rule.get('reason') + return True, category, reason + elif not rule_lines: + category = rule.get('category') + reason = rule.get('reason') + return True, category, reason + return False, None, None + + +def is_handler_layer(file_path: str) -> bool: + """Check if file is in the handlers/ layer + + Handler layer functions are typically called by modules which fire events. + The handler itself shouldn't fire - that would be double-firing. + """ + return '/handlers/' in file_path or '\\handlers\\' in file_path + + +def is_trigger_handler(file_path: str) -> bool: + """Check if file is a trigger event handler""" + return 'trigger' in file_path and 'handlers/events' in file_path + + +def check_module(module_path: str, bypass_rules: list | None = None) -> Dict: + """ + Check if module follows Trigger standards + + Args: + module_path: Path to Python module to check + bypass_rules: Optional list of bypass rules for specific violations + + Returns: + dict: { + 'passed': bool, + 'checks': [...], + 'score': int, + 'standard': str + } + """ + checks = [] + path = Path(module_path) + + # Check if entire standard is bypassed + bypassed, category, reason = is_bypassed(module_path, 'trigger', bypass_rules=bypass_rules) + if bypassed: + bypass_msg = 'Standard bypassed via .seed/bypass.json' + if category: + bypass_msg += f' [category: {category}]' + if reason: + bypass_msg += f' - {reason}' + return { + 'passed': True, + 'checks': [{'name': 'Bypassed', 'passed': True, 'message': bypass_msg}], + 'score': 100, + 'standard': 'TRIGGER' + } + + if not path.exists(): + return { + 'passed': False, + 'checks': [{'name': 'File exists', 'passed': False, 'message': f'File not found: {module_path}'}], + 'score': 0, + 'standard': 'TRIGGER' + } + + try: + with open(path, 'r', encoding='utf-8') as f: + content = f.read() + lines = content.split('\n') + except Exception as e: + return { + 'passed': False, + 'checks': [{'name': 'File readable', 'passed': False, 'message': f'Error reading file: {e}'}], + 'score': 0, + 'standard': 'TRIGGER' + } + + is_handler = is_trigger_handler(module_path) + + # Check 1: For trigger handlers - no logger imports + if is_handler: + logger_check = check_no_logger_imports(content, lines, module_path) + checks.append(logger_check) + + # Check 2: For trigger handlers - no print statements + if is_handler: + print_check = check_no_print_statements(content, lines, module_path) + checks.append(print_check) + + # Check 3: For any file using trigger - correct import pattern + trigger_import_check = check_trigger_import_pattern(content, lines, module_path) + if trigger_import_check: + checks.append(trigger_import_check) + + # Check 4: For trigger handlers - handler function naming + if is_handler: + naming_check = check_handler_naming(content, lines, module_path) + if naming_check: + checks.append(naming_check) + + # Check 5: Detect event patterns that should use trigger.fire() but don't + # Skip trigger branch itself (it's the event bus) + # Skip handler layer files - they are called by modules which fire events (handler_layer bypass category) + if 'trigger/' not in module_path and 'trigger\\' not in module_path: + if is_handler_layer(module_path): + # Handler layer auto-bypass - modules fire events, not handlers + checks.append({ + 'name': 'Missing trigger events', + 'passed': True, + 'message': 'Handler layer file - module orchestrator fires events (auto-bypass: handler_layer)' + }) + else: + event_pattern_check = check_missing_trigger_events(content, lines, module_path) + if event_pattern_check: + checks.append(event_pattern_check) + + # If no checks apply, file is compliant + if not checks: + return { + 'passed': True, + 'checks': [{'name': 'Trigger check', 'passed': True, 'message': 'No trigger patterns to check'}], + 'score': 100, + 'standard': 'TRIGGER' + } + + passed_checks = sum(1 for check in checks if check['passed']) + total_checks = len(checks) + score = int((passed_checks / total_checks * 100)) if total_checks > 0 else 0 + overall_passed = score >= 75 + + return { + 'passed': overall_passed, + 'checks': checks, + 'score': score, + 'standard': 'TRIGGER' + } + + +def check_no_logger_imports(_content: str, lines: List[str], _module_path: str) -> Dict: + """ + Check that trigger handlers don't import Prax logger + + Logger imports in handlers cause infinite recursion: + logger -> trigger -> handler -> logger -> ... + """ + violations = [] + + for i, line in enumerate(lines, 1): + stripped = line.strip() + if stripped.startswith('#'): + continue + + # Check for prax logger imports + if 'from prax' in stripped and 'logger' in stripped: + violations.append(i) + elif 'import prax' in stripped and 'logger' in stripped: + violations.append(i) + elif 'system_logger' in stripped and 'import' in stripped: + violations.append(i) + + if violations: + return { + 'name': 'No logger imports', + 'passed': False, + 'message': f'Handler imports Prax logger (causes recursion) on lines {violations[:3]}' + } + + return { + 'name': 'No logger imports', + 'passed': True, + 'message': 'Handler correctly has no Prax logger imports' + } + + +def check_no_print_statements(_content: str, lines: List[str], _module_path: str) -> Dict: + """ + Check that trigger handlers don't use print() + + Handlers must be silent - events are logged by trigger.fire() + """ + violations = [] + in_main_block = False + main_block_indent = 0 + + for i, line in enumerate(lines, 1): + stripped = line.strip() + current_indent = len(line) - len(line.lstrip()) if line.strip() else 0 + + # Track __main__ blocks (print OK there for testing) + if "if __name__ ==" in stripped and "__main__" in stripped: + in_main_block = True + main_block_indent = current_indent + continue + + if in_main_block and stripped and current_indent <= main_block_indent: + in_main_block = False + + if in_main_block: + continue + + if stripped.startswith('#'): + continue + + # Check for print statements + if re.search(r'(? Optional[Dict]: + """ + Check for correct trigger import patterns + + Valid patterns: + - from trigger import trigger + - from trigger.apps.modules.core import trigger + """ + # Only check files that use trigger + if 'trigger' not in content.lower(): + return None + + # Check if trigger is imported + has_trigger_import = False + has_trigger_fire = 'trigger.fire(' in content + + # Valid import patterns + valid_patterns = [ + r'from\s+trigger\s+import\s+trigger', + r'from\s+trigger\.apps\.modules\.core\s+import\s+trigger', + r'from\s+trigger\.apps\.modules\.core\s+import\s+trigger\s+as\s+\w+', + ] + + for pattern in valid_patterns: + if re.search(pattern, content): + has_trigger_import = True + break + + # Also check lazy-load pattern + if '_trigger' in content and 'trigger.apps.modules.core' in content: + has_trigger_import = True + + if has_trigger_fire and not has_trigger_import: + return { + 'name': 'Trigger import pattern', + 'passed': False, + 'message': 'Uses trigger.fire() but missing proper import' + } + + if has_trigger_import: + return { + 'name': 'Trigger import pattern', + 'passed': True, + 'message': 'Correct trigger import pattern' + } + + return None + + +def check_handler_naming(_content: str, lines: List[str], _module_path: str) -> Optional[Dict]: + """ + Check that handler functions follow naming convention + + Pattern: handle_{event_name}(**kwargs) + """ + handler_functions = [] + bad_handlers = [] + + for i, line in enumerate(lines, 1): + # Look for function definitions + match = re.match(r'^def\s+(\w+)\s*\(', line) + if match: + func_name = match.group(1) + # Skip private/internal functions + if func_name.startswith('_'): + continue + # Check if it's a handler function + if 'handle' in func_name.lower(): + handler_functions.append(func_name) + # Check naming pattern + if not func_name.startswith('handle_'): + bad_handlers.append(func_name) + + if not handler_functions: + return None + + if bad_handlers: + return { + 'name': 'Handler naming', + 'passed': False, + 'message': f'Handler functions should be handle_{{event}}: {bad_handlers}' + } + + return { + 'name': 'Handler naming', + 'passed': True, + 'message': f'Handler functions correctly named: {handler_functions}' + } + + +def check_missing_trigger_events(content: str, lines: List[str], _module_path: str) -> Optional[Dict]: + """ + Detect event-like patterns that should use trigger.fire() but don't. + + Catches: + - watchdog FileSystemEventHandler with on_created/on_deleted/on_modified + - Lifecycle functions in modules AND handlers + - Email/messaging patterns (deliver_*, send_*) + - State change patterns (mark_*) + + Returns violations with line numbers for easy navigation. + """ + violations = [] + has_trigger_fire = 'trigger.fire(' in content + + def find_pattern_lines(pattern: str) -> List[int]: + """Find all line numbers where pattern matches""" + matched_lines = [] + for i, line in enumerate(lines, 1): + if re.search(pattern, line): + matched_lines.append(i) + return matched_lines + + # Pattern 1: watchdog FileSystemEventHandler without trigger + if 'FileSystemEventHandler' in content and not has_trigger_fire: + event_methods = ['on_created', 'on_deleted', 'on_modified', 'on_moved'] + for method in event_methods: + pattern = rf'def\s+{method}\s*\(' + matched = find_pattern_lines(pattern) + if matched: + violations.append(f'FileSystemEventHandler.{method}() on lines {matched}') + + # Pattern 2: Lifecycle functions - check BOTH modules AND handlers + # These are significant state changes that other systems care about + lifecycle_patterns = [ + (r'def\s+create_\w+\s*\(', 'create_*'), + (r'def\s+close_\w+\s*\(', 'close_*'), + (r'def\s+delete_\w+\s*\(', 'delete_*'), + (r'def\s+restore_\w+\s*\(', 'restore_*'), + ] + + if not has_trigger_fire: + for pattern, func_type in lifecycle_patterns: + matched = find_pattern_lines(pattern) + if matched: + violations.append(f'{func_type} function on lines {matched}') + + # Pattern 3: Email/messaging patterns (common in ai_mail, other branches) + messaging_patterns = [ + (r'def\s+deliver_\w+\s*\(', 'deliver_*'), + (r'def\s+send_(?!notification)\w+\s*\(', 'send_*'), # Exclude send_notification + ] + + if not has_trigger_fire: + for pattern, func_type in messaging_patterns: + matched = find_pattern_lines(pattern) + if matched: + violations.append(f'{func_type} function on lines {matched}') + + # Pattern 4: State change patterns (mark_as_*, archive_*) + state_patterns = [ + (r'def\s+mark_as_\w+\s*\(', 'mark_as_*'), + (r'def\s+archive_\w+\s*\(', 'archive_*'), + ] + + if not has_trigger_fire: + for pattern, func_type in state_patterns: + matched = find_pattern_lines(pattern) + if matched: + violations.append(f'{func_type} function on lines {matched}') + + # Pattern 5: Registry/JSON update patterns (significant state changes) + # These modify shared state that other systems care about + registry_patterns = [ + (r'def\s+save_registry\s*\(', 'save_registry'), + (r'def\s+add_registry_entry\s*\(', 'add_registry_entry'), + (r'def\s+remove_registry_entry\s*\(', 'remove_registry_entry'), + (r'def\s+sync_\w*registry\s*\(', 'sync_*registry'), + (r'def\s+update_registry\s*\(', 'update_registry'), + (r'def\s+synchronize_registry\s*\(', 'synchronize_registry'), + (r'def\s+ping_registry\s*\(', 'ping_registry'), + ] + + if not has_trigger_fire: + for pattern, func_name in registry_patterns: + matched = find_pattern_lines(pattern) + if matched: + violations.append(f'{func_name} on lines {matched}') + + # Pattern 6: Central file operations (cross-branch shared state) + central_patterns = [ + (r'def\s+update_central\s*\(', 'update_central'), + (r'def\s+write_central\w*\s*\(', 'write_central_*'), + (r'def\s+push_to_central\s*\(', 'push_to_central'), + (r'def\s+aggregate_central\s*\(', 'aggregate_central'), + ] + + if not has_trigger_fire: + for pattern, func_name in central_patterns: + matched = find_pattern_lines(pattern) + if matched: + violations.append(f'{func_name} on lines {matched}') + + # Pattern 7: Auto-repair and recovery operations + repair_patterns = [ + (r'def\s+_?auto_close_\w+\s*\(', 'auto_close_*'), + (r'def\s+recover_\w+\s*\(', 'recover_*'), + (r'def\s+_?heal_\w+\s*\(', 'heal_*'), + ] + + if not has_trigger_fire: + for pattern, func_name in repair_patterns: + matched = find_pattern_lines(pattern) + if matched: + violations.append(f'{func_name} on lines {matched}') + + # Pattern 8: Cleanup and backup operations (state deletion/preservation) + cleanup_patterns = [ + (r'def\s+cleanup_\w+\s*\(', 'cleanup_*'), + (r'def\s+backup_\w+\s*\(', 'backup_*'), + ] + + if not has_trigger_fire: + for pattern, func_name in cleanup_patterns: + matched = find_pattern_lines(pattern) + if matched: + violations.append(f'{func_name} on lines {matched}') + + # Pattern 9: System lifecycle (initialize/shutdown entire systems) + lifecycle_system_patterns = [ + (r'def\s+initialize_\w+_system\s*\(', 'initialize_*_system'), + (r'def\s+shutdown_\w+_system\s*\(', 'shutdown_*_system'), + ] + + if not has_trigger_fire: + for pattern, func_name in lifecycle_system_patterns: + matched = find_pattern_lines(pattern) + if matched: + violations.append(f'{func_name} on lines {matched}') + + # Pattern 10: Inline filesystem operations (method calls, not function defs) + # These directly modify filesystem state - file deletions and moves + if not has_trigger_fire: + # .unlink() - file deletion + unlink_lines = find_pattern_lines(r'\.\s*unlink\s*\(') + if unlink_lines: + violations.append(f'.unlink() file deletion on lines {unlink_lines}') + + # .rename() - file move/rename + rename_lines = find_pattern_lines(r'\.\s*rename\s*\(') + if rename_lines: + violations.append(f'.rename() file move on lines {rename_lines}') + + if not violations: + return None + + return { + 'name': 'Missing trigger events', + 'passed': False, + 'message': f'Missing trigger.fire(): {"; ".join(violations)}' + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/standards/trigger_content.py b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/trigger_content.py new file mode 100644 index 00000000..418768a3 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/standards/trigger_content.py @@ -0,0 +1,143 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: trigger_content.py - Trigger Standards Content Handler +# Date: 2025-12-04 +# Version: 0.1.0 +# Category: seed/standards/handlers +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-12-04): Initial handler - Trigger event bus standards +# +# CODE STANDARDS: +# - Handler provides content, module orchestrates output +# - Pure function - returns string, no side effects +# ============================================= + +""" +Trigger Standards Content Handler + +Provides formatted Trigger event bus standards content. +Module orchestrates, handler implements. +""" + +import sys +from pathlib import Path + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def get_trigger_standards() -> str: + """Return formatted trigger standards content with Rich markup + + Returns: + str: Formatted standards text with Rich styling + """ + lines = [ + "[bold cyan]CORE PRINCIPLE:[/bold cyan]", + " Replace [yellow]hardcoded cross-branch calls[/yellow] with [yellow]events[/yellow]", + " Decouple action from reaction, centralize side effects", + "", + "[bold cyan]THE EVENT BUS PATTERN:[/bold cyan]", + "", + " [dim]Branch fires event[/dim] → [dim]trigger.fire('event_name')[/dim]", + " [dim]Trigger routes[/dim] → [dim]Calls registered handlers[/dim]", + " [dim]Handlers react[/dim] → [dim]Dashboard update, mbank archive, etc.[/dim]", + "", + "[bold cyan]IMPORT PATTERNS:[/bold cyan]", + "", + " [yellow]Standard:[/yellow]", + " [dim]from trigger import trigger[/dim]", + " [dim]trigger.fire('event_name', key=value)[/dim]", + "", + " [yellow]Lazy-load (for circular import safety):[/yellow]", + " [dim]try:[/dim]", + " [dim] from trigger.apps.modules.core import trigger[/dim]", + " [dim]except ImportError:[/dim]", + " [dim] trigger = None[/dim]", + "", + "[bold cyan]EVENT NAMING:[/bold cyan]", + "", + " [yellow]Format:[/yellow] {scope}_{action} or {action}", + " [green]startup[/green], [green]plan_created[/green], [green]plan_closed[/green], [green]memory_saved[/green]", + " [dim]All lowercase, underscore-separated, past tense for completed actions[/dim]", + "", + "[yellow]KEY RULES:[/yellow]", + "", + " 1. [bold]Handlers CANNOT import Prax logger[/bold]", + " [red]FORBIDDEN:[/red] [dim]from prax.apps.modules.logger import system_logger[/dim]", + " [dim]Causes:[/dim] logger → trigger → handler → logger → [red]infinite loop[/red]", + "", + " 2. [bold]Handlers CANNOT print()[/bold]", + " [red]FORBIDDEN:[/red] [dim]print('Handling event...')[/dim]", + " [green]OK:[/green] Events auto-logged by trigger.fire() in core.py", + "", + " 3. [bold]Silent failure required[/bold]", + " [green]CORRECT:[/green] [dim]except Exception: pass[/dim]", + " [red]WRONG:[/red] [dim]except Exception as e: logger.error(e)[/dim]", + "", + " 4. [bold]Register handlers in registry.py[/bold]", + " [dim]trigger/apps/handlers/events/registry.py[/dim]", + " [dim]trigger.on('event_name', handle_function)[/dim]", + "", + "[bold cyan]DETECTED PATTERNS (10 categories):[/bold cyan]", + "", + " [yellow]Function definitions that should fire triggers:[/yellow]", + " [dim]1.[/dim] FileSystemEventHandler: on_created, on_deleted, on_modified, on_moved", + " [dim]2.[/dim] Lifecycle: create_*, close_*, delete_*, restore_*", + " [dim]3.[/dim] Messaging: deliver_*, send_*", + " [dim]4.[/dim] State changes: mark_as_*, archive_*", + " [dim]5.[/dim] Registry: save_registry, ping_registry, sync_*registry, etc.", + " [dim]6.[/dim] Central: update_central, write_central_*, push_to_central, aggregate_central", + " [dim]7.[/dim] Repair: auto_close_*, recover_*, heal_*", + " [dim]8.[/dim] Cleanup/Backup: cleanup_*, backup_*", + " [dim]9.[/dim] System lifecycle: initialize_*_system, shutdown_*_system", + "", + " [yellow]Inline operations (method calls):[/yellow]", + " [dim]10.[/dim] Filesystem: .unlink() file deletion, .rename() file move", + "", + "[bold cyan]WHEN TO FIRE EVENTS:[/bold cyan]", + "", + " [green]DO:[/green] Lifecycle transitions (startup, plan_closed)", + " [green]DO:[/green] Cross-branch side effects (dashboard updates)", + " [green]DO:[/green] State changes other branches care about", + "", + " [red]DON'T:[/red] Internal operations (same-module calls)", + " [red]DON'T:[/red] High-frequency ops (every log, every file read)", + " [red]DON'T:[/red] When caller needs return value (use function)", + "", + "[bold cyan]REPLACING HARDCODED PATTERNS:[/bold cyan]", + "", + " [red]BEFORE (hardcoded):[/red]", + " [dim]update_dashboard_local() # Direct call[/dim]", + " [dim]process_closed_plans() # Direct call[/dim]", + "", + " [green]AFTER (event-driven):[/green]", + " [dim]trigger.fire('plan_closed', plan_number=num)[/dim]", + " [dim]# Handlers in trigger/ react automatically[/dim]", + "", + "[bold cyan]CURRENT INTEGRATIONS:[/bold cyan]", + "", + " [green]Prax:[/green] trigger.fire('startup') in logger.py", + " [green]CLI:[/green] trigger.fire('cli_header_displayed') in display.py", + " [yellow]Flow:[/yellow] JSON logging only - needs migration", + " [yellow]Drone:[/yellow] No events - ready to adopt", + "", + "[bold cyan]DESIGN PRINCIPLES:[/bold cyan]", + "", + " [dim]•[/dim] Auto-initialization on first fire() call", + " [dim]•[/dim] Recursion guard prevents logger loops", + " [dim]•[/dim] Caller introspection for logging", + " [dim]•[/dim] Graceful degradation if Trigger unavailable", + "", + "[bold cyan]REFERENCE:[/bold cyan]", + " [dim]/home/aipass/seed/standards/CODE_STANDARDS/trigger.md[/dim]", + " [dim]/home/aipass/aipass_core/trigger/apps/modules/core.py[/dim]", + " [dim]/home/aipass/aipass_core/trigger/apps/handlers/events/[/dim]", + ] + + return "\n".join(lines) diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/verify/__init__.py b/src/aipass/seedgo/apps/standards/aipass/handlers/verify/__init__.py new file mode 100644 index 00000000..0738cad8 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/verify/__init__.py @@ -0,0 +1,24 @@ +""" +Verify Handlers + +Handlers for seed sync verification checks. +Each handler performs one specific verification check. +""" + +from seed.apps.handlers.verify.stale_check import check_stale_patterns +from seed.apps.handlers.verify.freshness_check import check_file_freshness +from seed.apps.handlers.verify.help_check import check_help_consistency +from seed.apps.handlers.verify.command_check import check_command_consistency +from seed.apps.handlers.verify.checker_sync import check_checker_sync +from seed.apps.handlers.verify.orchestrator import run_verification + +__all__ = [ + 'check_stale_patterns', + 'check_file_freshness', + 'check_help_consistency', + 'check_command_consistency', + 'check_checker_sync', + 'run_verification' +] + +__version__ = "0.1.0" diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/verify/checker_sync.py b/src/aipass/seedgo/apps/standards/aipass/handlers/verify/checker_sync.py new file mode 100644 index 00000000..2b60396a --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/verify/checker_sync.py @@ -0,0 +1,222 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: checker_sync.py - Checker Documentation Sync Check +# Date: 2025-12-04 +# Version: 0.1.0 +# Category: seed/handlers/verify +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-12-04): Initial - verifies checker patterns match docs +# +# CODE STANDARDS: +# - Pure handler - returns check data dict +# - Verifies pattern counts match between checker and content handler +# ============================================= + +""" +Checker Documentation Sync Check + +Verifies that checker implementations match their documentation. +Catches drift between trigger_check.py patterns and trigger_content.py docs. +""" + +import re +import sys +from pathlib import Path +from typing import Dict, List + +# ============================================================================= +# INFRASTRUCTURE SETUP +# ============================================================================= + +AIPASS_ROOT = Path.home() / "aipass_core" +SEED_ROOT = Path.home() / "seed" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + + +def check_checker_sync() -> Dict: + """ + Verify checker implementations match their documentation + + Checks: + - trigger_check.py pattern count matches trigger_content.py + - trigger.md documents the checker patterns + - README.md standards count is accurate + - verify --help lists all actual checks + + Returns: + Dict with check results + """ + issues = [] + checked = [] + + # Check trigger_check.py vs trigger_content.py + trigger_check_path = SEED_ROOT / "apps/handlers/standards/trigger_check.py" + trigger_content_path = SEED_ROOT / "apps/handlers/standards/trigger_content.py" + + if trigger_check_path.exists() and trigger_content_path.exists(): + check_content = trigger_check_path.read_text() + content_content = trigger_content_path.read_text() + + # Count pattern categories in trigger_check.py + # Look for "# Pattern N:" comments + pattern_matches = re.findall(r'#\s*Pattern\s+(\d+):', check_content) + check_pattern_count = len(set(pattern_matches)) + + # Get version from trigger_check.py + version_match = re.search(r'#\s*Version:\s*([\d.]+)', check_content) + check_version = version_match.group(1) if version_match else "unknown" + + # Check if trigger_content.py mentions pattern count + # Match "10 pattern categories" or "10 categories" or "(10 categories)" + content_pattern_count_match = re.search(r'(\d+)\s*(?:pattern\s*)?categor', content_content, re.IGNORECASE) + content_pattern_count = int(content_pattern_count_match.group(1)) if content_pattern_count_match else 0 + + checked.append(f"trigger_check.py v{check_version}: {check_pattern_count} pattern categories") + + if content_pattern_count > 0: + checked.append(f"trigger_content.py documents: {content_pattern_count} pattern categories") + + if check_pattern_count != content_pattern_count: + issues.append(f"Pattern count mismatch: trigger_check.py has {check_pattern_count}, trigger_content.py documents {content_pattern_count}") + else: + issues.append("trigger_content.py doesn't document pattern category count") + + # Check for specific keywords in checker that should be documented + key_terms = [ + ('unlink', '.unlink() detection'), + ('rename', '.rename() detection'), + ('auto_close_', 'auto_close_* pattern'), + ('recover_', 'recover_* pattern'), + ('cleanup_', 'cleanup_* pattern'), + ('backup_', 'backup_* pattern'), + ('heal_', 'heal_* pattern'), + ('aggregate_central', 'aggregate_central pattern'), + ] + + for term, name in key_terms: + if term in check_content: + if term not in content_content: + # Term in checker but not in content docs + issues.append(f"{name} in checker but not documented in trigger_content.py") + else: + if not trigger_check_path.exists(): + issues.append("trigger_check.py not found") + if not trigger_content_path.exists(): + issues.append("trigger_content.py not found") + + # Define common paths + checkers_dir = SEED_ROOT / "apps/handlers/standards" + + # Check README.md standards count + readme_path = SEED_ROOT / "README.md" + if readme_path.exists(): + readme_content = readme_path.read_text() + # Count actual checker files + if checkers_dir.exists(): + actual_checkers = len([f for f in checkers_dir.glob("*_check.py")]) + # Find claimed count in README (e.g., "10 Standards" or "12 standards") + readme_count_match = re.search(r'(\d+)\s*[Ss]tandards?\s*[Mm]odules?', readme_content) + if readme_count_match: + readme_count = int(readme_count_match.group(1)) + checked.append(f"README.md claims {readme_count} standards, {actual_checkers} checkers exist") + if readme_count != actual_checkers: + issues.append(f"README.md says {readme_count} standards but {actual_checkers} checkers exist") + + # Check verify --help lists all checks + verify_module_path = SEED_ROOT / "apps/modules/standards_verify.py" + orchestrator_path = SEED_ROOT / "apps/handlers/verify/orchestrator.py" + if verify_module_path.exists() and orchestrator_path.exists(): + verify_content = verify_module_path.read_text() + orchestrator_content = orchestrator_path.read_text() + + # Count checks in orchestrator (check_* calls in the checks list) + actual_checks = len(re.findall(r'check_\w+\(\)', orchestrator_content)) + + # Count checks documented in verify --help (lines with "[green]N.[/green]") + documented_checks = len(re.findall(r'\[green\]\d+\.\[/green\]', verify_content)) + + checked.append(f"verify --help documents {documented_checks} checks, orchestrator has {actual_checks}") + if documented_checks != actual_checks: + issues.append(f"verify --help shows {documented_checks} checks but orchestrator runs {actual_checks}") + + # Check trigger.md documents pattern categories + trigger_md_path = SEED_ROOT / "standards/CODE_STANDARDS/trigger.md" + if trigger_md_path.exists() and trigger_check_path.exists(): + trigger_md_content = trigger_md_path.read_text() + check_content = trigger_check_path.read_text() + + # Get pattern count from checker + pattern_matches = re.findall(r'#\s*Pattern\s+(\d+):', check_content) + check_pattern_count = len(set(pattern_matches)) + + # Check if trigger.md mentions pattern categories + md_pattern_match = re.search(r'(\d+)\s*(?:pattern\s*)?categor', trigger_md_content, re.IGNORECASE) + if md_pattern_match: + md_count = int(md_pattern_match.group(1)) + if md_count != check_pattern_count: + issues.append(f"trigger.md documents {md_count} categories but checker has {check_pattern_count}") + else: + # Check if it at least mentions key patterns + if 'unlink' not in trigger_md_content.lower() and 'unlink' in check_content: + issues.append("trigger.md doesn't document inline filesystem detection (.unlink/.rename)") + + # Check each checker has corresponding CODE_STANDARDS doc + code_standards_dir = SEED_ROOT / "standards/CODE_STANDARDS" + if checkers_dir.exists() and code_standards_dir.exists(): + checker_names = [f.stem.replace('_check', '') for f in checkers_dir.glob("*_check.py")] + doc_names = [f.stem for f in code_standards_dir.glob("*.md") if f.stem not in ['README', '_template']] + + missing_docs = [c for c in checker_names if c not in doc_names] + if missing_docs: + issues.append(f"Checkers missing CODE_STANDARDS docs: {missing_docs}") + + # Check docs/checkers.md mentions all checkers + checkers_doc_path = SEED_ROOT / "docs/checkers.md" + if checkers_doc_path.exists() and checkers_dir.exists(): + checkers_doc_content = checkers_doc_path.read_text() + checker_files = [f.name for f in checkers_dir.glob("*_check.py")] + + missing_in_doc = [] + for checker in checker_files: + checker_name = checker.replace('_check.py', '') + if checker_name not in checkers_doc_content.lower(): + missing_in_doc.append(checker_name) + + if missing_in_doc: + issues.append(f"docs/checkers.md missing: {missing_in_doc}") + + # Check SEED.id.json standards count + seed_id_path = SEED_ROOT / "SEED.id.json" + if seed_id_path.exists() and checkers_dir.exists(): + seed_id_content = seed_id_path.read_text() + actual_checkers = len([f for f in checkers_dir.glob("*_check.py")]) + + # Find any "N standards" or "N core standards" mentions + id_counts = re.findall(r'(\d+)\s*(?:core\s*)?(?:AIPass\s*)?(?:code\s*)?standards?', seed_id_content, re.IGNORECASE) + for count_str in set(id_counts): + count = int(count_str) + if count != actual_checkers: + issues.append(f"SEED.id.json says {count} standards but {actual_checkers} checkers exist") + + # Check seed.py --help for consistent standards count + seed_entry_path = SEED_ROOT / "apps/seed.py" + if seed_entry_path.exists() and checkers_dir.exists(): + seed_py_content = seed_entry_path.read_text() + actual_checkers = len([f for f in checkers_dir.glob("*_check.py")]) + + # Find standards count mentions + seed_py_counts = re.findall(r'(\d+)\s*(?:queryable\s*)?(?:code\s*)?standards?', seed_py_content, re.IGNORECASE) + wrong_counts = [int(c) for c in set(seed_py_counts) if int(c) != actual_checkers and int(c) > 5] + if wrong_counts: + issues.append(f"seed.py mentions {wrong_counts} standards but {actual_checkers} checkers exist") + + return { + 'name': 'Checker-Doc Sync', + 'passed': len(issues) == 0, + 'checked': checked, + 'issues': issues + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/verify/command_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/verify/command_check.py new file mode 100644 index 00000000..b13b5334 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/verify/command_check.py @@ -0,0 +1,102 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: command_check.py - Command Consistency Checker Handler +# Date: 2025-11-29 +# Version: 0.1.0 +# Category: seed/verify/handlers +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-29): Initial implementation - extracted from standards_verify module +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# - NO Prax logger in handlers (handlers don't log) +# ============================================= + +""" +Command Consistency Checker Handler + +Checks if new commands/flags are documented everywhere they should be. +Validates documentation completeness for command flags. +""" + +import sys +from pathlib import Path +from typing import Dict + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +# Business logic imports +from seed.apps.handlers.file import file_handler + + +def check_command_consistency() -> Dict: + """ + Check if new commands/flags are documented everywhere they should be. + + Scans audit module for flags, checks if they appear in: + - README.md + - seed.py help text + - docs/ files + + Returns: + Dict with check results + """ + seed_path = Path.home() / "seed" + missing_docs = [] + + # Define command flags to check (source of truth: where they're implemented) + # Format: (flag, description, implemented_in) + command_flags = [ + ("--show-bypasses", "audit bypass inspection", "standards_audit.py"), + ("--bypasses", "audit bypass inspection (short)", "standards_audit.py"), + ] + + # Files that should document commands + doc_files = { + 'readme': seed_path / "README.md", + 'seed_help': seed_path / "apps" / "seed.py", + } + + for flag, description, source in command_flags: + # Check each documentation file + for doc_name, doc_path in doc_files.items(): + if not doc_path.exists(): + continue + + try: + content = file_handler.read_file(str(doc_path)) + if content and flag not in content: + missing_docs.append({ + 'flag': flag, + 'description': description, + 'missing_from': doc_name, + 'file': str(doc_path.relative_to(seed_path)) + }) + except Exception: + # Error reading file - skip + pass + + # Group by flag for cleaner output + flags_missing = {} + for item in missing_docs: + flag = item['flag'] + if flag not in flags_missing: + flags_missing[flag] = { + 'description': item['description'], + 'missing_from': [] + } + flags_missing[flag]['missing_from'].append(item['missing_from']) + + return { + 'name': 'Command Consistency', + 'passed': len(missing_docs) == 0, + 'missing': flags_missing, + 'checked': [f"Checked {len(command_flags)} flags against {len(doc_files)} doc files"], + 'score': 100 if len(missing_docs) == 0 else 50 + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/verify/freshness_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/verify/freshness_check.py new file mode 100644 index 00000000..b86540fe --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/verify/freshness_check.py @@ -0,0 +1,90 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: freshness_check.py - File Freshness Checker Handler +# Date: 2025-11-29 +# Version: 0.1.0 +# Category: seed/verify/handlers +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-29): Initial implementation - extracted from standards_verify module +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# - NO Prax logger in handlers (handlers don't log) +# ============================================= + +""" +File Freshness Checker Handler + +Checks if documentation is up-to-date with recent code changes. +Validates modification times of key files. +""" + +from pathlib import Path +from datetime import datetime, timedelta +from typing import Dict + + +def check_file_freshness() -> Dict: + """ + Check if documentation is up-to-date with recent code changes + + Returns: + Dict with check results + """ + seed_path = Path.home() / "seed" + issues = [] + + # Check if standards_audit.py exists + audit_file = seed_path / "apps" / "modules" / "standards_audit.py" + readme_file = seed_path / "README.md" + local_json = seed_path / "SEED.local.json" + + if not audit_file.exists(): + issues.append("standards_audit.py not found") + return { + 'name': 'File Freshness', + 'passed': False, + 'issues': issues, + 'score': 0 + } + + audit_mtime = datetime.fromtimestamp(audit_file.stat().st_mtime) + + # Check README.md freshness + if readme_file.exists(): + readme_mtime = datetime.fromtimestamp(readme_file.stat().st_mtime) + + # If audit was modified today and README is more than 1 day old + if audit_mtime.date() == datetime.now().date(): + if (datetime.now() - readme_mtime) > timedelta(days=1): + issues.append( + f"README.md ({readme_mtime.date()}) may be outdated - " + f"standards_audit.py modified today" + ) + else: + issues.append("README.md not found") + + # Check if SEED.local.json was updated today + if local_json.exists(): + local_mtime = datetime.fromtimestamp(local_json.stat().st_mtime) + if local_mtime.date() != datetime.now().date(): + issues.append( + f"SEED.local.json last updated {local_mtime.date()} " + f"(not today)" + ) + else: + issues.append("SEED.local.json not found") + + return { + 'name': 'File Freshness', + 'passed': len(issues) == 0, + 'issues': issues, + 'checked': [ + f"SEED.local.json updated: {local_mtime.date()}" if local_json.exists() else "SEED.local.json: not found", + f"README.md updated: {readme_mtime.date()}" if readme_file.exists() else "README.md: not found" + ], + 'score': 100 if len(issues) == 0 else max(0, 100 - (len(issues) * 30)) + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/verify/help_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/verify/help_check.py new file mode 100644 index 00000000..5cfa9aef --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/verify/help_check.py @@ -0,0 +1,94 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: help_check.py - Help Consistency Checker Handler +# Date: 2025-11-29 +# Version: 0.1.0 +# Category: seed/verify/handlers +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-29): Initial implementation - extracted from standards_verify module +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# - NO Prax logger in handlers (handlers don't log) +# ============================================= + +""" +Help Consistency Checker Handler + +Checks that seed.py help text doesn't mention removed flags. +Validates help documentation accuracy. +""" + +import sys +from pathlib import Path +from typing import Dict + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +# Business logic imports +from seed.apps.handlers.file import file_handler +from seed.apps.handlers.config import ignore_handler + + +def check_help_consistency() -> Dict: + """ + Check that seed.py help text doesn't mention removed flags + + Returns: + Dict with check results + """ + seed_file = Path.home() / "seed" / "apps" / "seed.py" + issues = [] + + if not seed_file.exists(): + return { + 'name': 'Help Consistency', + 'passed': False, + 'issues': ["seed.py not found"], + 'score': 0 + } + + # Read seed.py and check for removed flags in help text + try: + content = file_handler.read_file(str(seed_file)) + if content is None: + return { + 'name': 'Help Consistency', + 'passed': False, + 'issues': ["Could not read seed.py"], + 'score': 0 + } + + # Check for mentions of removed flags in help section + removed_flags = list(ignore_handler.get_deprecated_patterns().keys()) + + for flag in removed_flags: + if flag in content: + # Check if it's in a help/documentation context + for line_num, line in enumerate(content.split('\n'), 1): + if flag in line: + # Skip comments that explain removal + if "removed" in line.lower() or "deprecated" in line.lower(): + continue + # Flag found in non-comment context + issues.append( + f"Line {line_num}: mentions {flag} " + f"(removed in audit v0.4.0)" + ) + + except Exception as e: + issues.append(f"Error reading file: {e}") + + return { + 'name': 'Help Consistency', + 'passed': len(issues) == 0, + 'issues': issues, + 'checked': [f"Scanned seed.py for: {', '.join(removed_flags)}"], + 'score': 100 if len(issues) == 0 else 0 + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/verify/orchestrator.py b/src/aipass/seedgo/apps/standards/aipass/handlers/verify/orchestrator.py new file mode 100644 index 00000000..2732ee2b --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/verify/orchestrator.py @@ -0,0 +1,129 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: orchestrator.py - Verification Orchestrator Handler +# Date: 2025-11-29 +# Version: 0.1.0 +# Category: seed/handlers/verify +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-29): Initial - orchestrates verification checks +# +# CODE STANDARDS: +# - Pure handler - orchestrates check handlers +# - Returns data dict, display handled separately +# ============================================= + +""" +Verification Orchestrator Handler + +Runs all verification checks and formats display output. +Called by standards_verify module. +""" + +import sys +from pathlib import Path +from typing import Dict + +# ============================================================================= +# INFRASTRUCTURE SETUP +# ============================================================================= + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +# CLI services for display +from cli.apps.modules import console, header + +# Check handlers +from seed.apps.handlers.verify.stale_check import check_stale_patterns +from seed.apps.handlers.verify.freshness_check import check_file_freshness +from seed.apps.handlers.verify.help_check import check_help_consistency +from seed.apps.handlers.verify.command_check import check_command_consistency +from seed.apps.handlers.verify.checker_sync import check_checker_sync + + +def run_verification() -> Dict: + """ + Run all verification checks and display results + + Returns: + Dict with all check results + """ + console.print() + header("SEED SYNC VERIFICATION") + console.print() + + checks = [ + check_stale_patterns(), + check_file_freshness(), + check_help_consistency(), + check_command_consistency(), + check_checker_sync() + ] + + # Print results + console.print("[bold cyan]Running verification checks...[/bold cyan]") + console.print() + + passed_count = 0 + total_count = len(checks) + + for check in checks: + check_passed = check.get('passed', False) + check_name = check.get('name', 'Unknown') + + if check_passed: + console.print(f"[green]✓[/green] {check_name}") + passed_count += 1 + # Show what was verified (even on pass) + details = check.get('checked', []) + for detail in details: + console.print(f" [dim]→ {detail}[/dim]") + else: + console.print(f"[red]✗[/red] {check_name}") + + # Show violations if present + violations = check.get('violations', []) + for violation in violations: + pattern = violation.get('pattern', '') + reason = violation.get('reason', '') + location = violation.get('location', '') + console.print(f" [yellow]→[/yellow] {location}") + console.print(f" [dim]Pattern: {pattern} ({reason})[/dim]") + + # Show issues if present + issues = check.get('issues', []) + for issue in issues: + console.print(f" [yellow]→[/yellow] {issue}") + + # Show missing documentation (command consistency check) + missing = check.get('missing', {}) + for flag, info in missing.items(): + desc = info.get('description', '') + locations = info.get('missing_from', []) + console.print(f" [yellow]→[/yellow] {flag} ({desc})") + console.print(f" [dim]Missing from: {', '.join(locations)}[/dim]") + + console.print() + console.print("─" * 70) + console.print() + + # Summary + score = int((passed_count / total_count) * 100) if total_count > 0 else 0 + + if score == 100: + console.print(f"[bold green]SUMMARY: {passed_count}/{total_count} checks passed ✓[/bold green]") + else: + console.print(f"[bold yellow]SUMMARY: {passed_count}/{total_count} checks passed[/bold yellow]") + + console.print() + + return { + 'checks': checks, + 'passed': passed_count, + 'total': total_count, + 'score': score + } diff --git a/src/aipass/seedgo/apps/standards/aipass/handlers/verify/stale_check.py b/src/aipass/seedgo/apps/standards/aipass/handlers/verify/stale_check.py new file mode 100644 index 00000000..8748a40e --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/handlers/verify/stale_check.py @@ -0,0 +1,90 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: stale_check.py - Stale Patterns Checker Handler +# Date: 2025-11-29 +# Version: 0.1.0 +# Category: seed/verify/handlers +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-29): Initial implementation - extracted from standards_verify module +# +# CODE STANDARDS: +# - Handler implements checking logic, module orchestrates +# - NO Prax logger in handlers (handlers don't log) +# ============================================= + +""" +Stale Patterns Checker Handler + +Checks for deprecated patterns in the seed codebase. +Returns violations found during grep search. +""" + +import sys +import subprocess +from pathlib import Path +from typing import Dict + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +# Business logic imports +from seed.apps.handlers.config import ignore_handler + + +def check_stale_patterns() -> Dict: + """ + Check for deprecated patterns in /home/aipass/seed/ + + Returns: + Dict with check results + """ + seed_path = Path.home() / "seed" + deprecated_patterns = ignore_handler.get_deprecated_patterns() + + violations = [] + + for pattern, reason in deprecated_patterns.items(): + try: + # Use grep to search for pattern + result = subprocess.run( + ["grep", "-rn", pattern, str(seed_path), + "--include=*.py", "--include=*.md"], + capture_output=True, + text=True, + timeout=10 + ) + + if result.returncode == 0: # Pattern found + for line in result.stdout.strip().split('\n'): + if line: + # Parse grep output: file:line:content + parts = line.split(':', 2) + if len(parts) >= 2: + file_path = parts[0] + line_num = parts[1] + # Make path relative to seed for readability + rel_path = Path(file_path).relative_to(seed_path) + violations.append({ + 'pattern': pattern, + 'reason': reason, + 'location': f"{rel_path}:{line_num}" + }) + except subprocess.TimeoutExpired: + # Timeout - skip this pattern + pass + except Exception: + # Error checking pattern - skip + pass + + return { + 'name': 'Stale Patterns', + 'passed': len(violations) == 0, + 'violations': violations, + 'checked': [f"Searched for: {', '.join(deprecated_patterns.keys())}"], + 'score': 100 if len(violations) == 0 else 0 + } diff --git a/src/aipass/seedgo/apps/standards/aipass/json_templates/__init__.py b/src/aipass/seedgo/apps/standards/aipass/json_templates/__init__.py new file mode 100644 index 00000000..5d00b535 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/json_templates/__init__.py @@ -0,0 +1 @@ +# JSON Templates package - Default JSON file templates diff --git a/src/aipass/seedgo/apps/standards/aipass/json_templates/default/config.json b/src/aipass/seedgo/apps/standards/aipass/json_templates/default/config.json new file mode 100644 index 00000000..d29d029f --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/json_templates/default/config.json @@ -0,0 +1,9 @@ +{ + "module_name": "{{MODULE_NAME}}", + "version": "1.0.0", + "timestamp": "2025-11-13", + "config": { + "auto_save": true, + "enabled": true + } +} diff --git a/src/aipass/seedgo/apps/standards/aipass/json_templates/default/data.json b/src/aipass/seedgo/apps/standards/aipass/json_templates/default/data.json new file mode 100644 index 00000000..82912a72 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/json_templates/default/data.json @@ -0,0 +1,8 @@ +{ + "module_name": "{{MODULE_NAME}}", + "created": "2025-11-13", + "last_updated": "2025-11-13", + "operations_total": 0, + "operations_successful": 0, + "operations_failed": 0 +} diff --git a/src/aipass/seedgo/apps/standards/aipass/json_templates/default/log.json b/src/aipass/seedgo/apps/standards/aipass/json_templates/default/log.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/json_templates/default/log.json @@ -0,0 +1 @@ +[] diff --git a/src/aipass/seedgo/apps/standards/aipass/logs/architecture_check.log.1 b/src/aipass/seedgo/apps/standards/aipass/logs/architecture_check.log.1 new file mode 100644 index 00000000..01b0b936 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/logs/architecture_check.log.1 @@ -0,0 +1,337 @@ +2025-11-16 16:45:47 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:45:47 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:45:47 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:45:47 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:45:47 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:45:47 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:45:47 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:48:09 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:48:09 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:48:21 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/handlers/storage/chroma.py +2025-11-16 16:48:21 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/handlers/storage/chroma.py: 100/100 (PASS) +2025-11-16 16:48:22 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py +2025-11-16 16:48:22 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py: 100/100 (PASS) +2025-11-16 16:48:24 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/memory_bank.py +2025-11-16 16:48:24 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/memory_bank.py: 100/100 (PASS) +2025-11-16 16:53:14 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:53:14 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:53:14 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:53:14 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:53:14 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:53:14 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:53:14 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:53:14 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:53:14 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:53:15 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:53:15 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:53:15 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:53:15 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:53:15 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:53:15 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:53:15 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:55:55 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/modules/email.py +2025-11-16 16:55:55 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/modules/email.py: 100/100 (PASS) +2025-11-16 16:55:58 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py +2025-11-16 16:55:58 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py: 100/100 (PASS) +2025-11-16 16:59:20 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:59:20 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:59:21 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:59:21 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:59:21 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:59:21 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:59:21 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:59:21 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:59:21 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:59:21 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:59:21 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:59:21 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:01:35 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:01:35 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:02:32 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:32 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:02:45 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:45 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:02:57 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:57 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:03:23 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:03:23 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:13:17 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:13:17 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:13:17 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:13:17 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:13:18 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:13:18 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:13:18 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:13:18 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:13:18 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:13:18 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:13:18 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:13:18 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:13:18 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:17:06 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:17:06 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:17:06 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:17:07 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:17:07 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:17:07 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:17:07 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:17:07 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:17:07 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:17:07 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:17:07 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:17:36 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:17:36 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:17:36 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:17:36 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:17:37 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:17:37 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:17:37 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:17:37 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:17:37 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:17:37 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:17:37 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:20:35 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:20:35 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:20:35 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:20:35 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:20:35 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:20:35 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:20:35 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:20:35 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:20:35 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:20:35 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:20:35 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:20:38 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:20:38 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:20:38 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:20:38 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:20:38 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:20:38 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:20:39 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:20:39 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:20:39 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:20:39 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:20:39 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:20:39 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:20:39 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:20:39 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:22:25 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:22:25 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:22:25 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:22:25 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:22:25 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:22:25 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:22:25 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:22:25 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:22:25 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:22:25 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:22:25 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:25:00 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/memory_bank.py +2025-11-16 17:25:00 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/memory_bank.py: 100/100 (PASS) +2025-11-16 17:25:02 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:25:02 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:25:04 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py +2025-11-16 17:25:04 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py: 100/100 (PASS) +2025-11-16 17:25:07 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/handlers/tracking/line_counter.py +2025-11-16 17:25:07 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/handlers/tracking/line_counter.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:26:43 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:26:43 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:26:43 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:26:43 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:26:43 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:26:43 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:26:43 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:26:43 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:26:43 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:26:43 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:26:43 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:28:31 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:28:31 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:28:31 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:28:31 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:28:31 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:28:31 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:28:31 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:28:31 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:28:31 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:28:31 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:28:31 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:28:40 | captured_architecture_check | INFO | Checking architecture standards for: apps/cortex.py +2025-11-16 17:28:40 | captured_architecture_check | INFO | Architecture check completed for apps/cortex.py: 100/100 (PASS) +2025-11-16 17:28:41 | captured_architecture_check | INFO | Checking architecture standards for: apps/modules/create_branch.py +2025-11-16 17:28:41 | captured_architecture_check | INFO | Architecture check completed for apps/modules/create_branch.py: 100/100 (PASS) +2025-11-16 17:28:42 | captured_architecture_check | INFO | Checking architecture standards for: apps/modules/update_branch.py +2025-11-16 17:28:42 | captured_architecture_check | INFO | Architecture check completed for apps/modules/update_branch.py: 50/100 (FAIL) +2025-11-16 17:28:44 | captured_architecture_check | INFO | Checking architecture standards for: apps/modules/delete_branch.py +2025-11-16 17:28:44 | captured_architecture_check | INFO | Architecture check completed for apps/modules/delete_branch.py: 100/100 (PASS) +2025-11-16 17:28:46 | captured_architecture_check | INFO | Checking architecture standards for: apps/modules/regenerate_template_registry.py +2025-11-16 17:28:46 | captured_architecture_check | INFO | Architecture check completed for apps/modules/regenerate_template_registry.py: 100/100 (PASS) +2025-11-16 17:28:47 | captured_architecture_check | INFO | Checking architecture standards for: apps/handlers/json/handler.py +2025-11-16 17:28:47 | captured_architecture_check | INFO | Architecture check completed for apps/handlers/json/handler.py: 100/100 (PASS) +2025-11-16 17:28:48 | captured_architecture_check | INFO | Checking architecture standards for: apps/handlers/branch/file_ops.py +2025-11-16 17:28:48 | captured_architecture_check | INFO | Architecture check completed for apps/handlers/branch/file_ops.py: 75/100 (PASS) +2025-11-16 17:28:49 | captured_architecture_check | INFO | Checking architecture standards for: apps/handlers/error/logger.py +2025-11-16 17:28:49 | captured_architecture_check | INFO | Architecture check completed for apps/handlers/error/logger.py: 100/100 (PASS) +2025-11-16 17:28:50 | captured_architecture_check | INFO | Checking architecture standards for: apps/handlers/registry/ignore.py +2025-11-16 17:28:50 | captured_architecture_check | INFO | Architecture check completed for apps/handlers/registry/ignore.py: 100/100 (PASS) +2025-11-16 17:30:19 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:30:19 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:32:29 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:32:29 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:32:32 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:32:32 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:32:36 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:32:36 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:32:40 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:32:40 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:33:04 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/seed/apps/modules/architecture_standard.py +2025-11-16 17:33:04 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/seed/apps/modules/architecture_standard.py: 100/100 (PASS) +2025-11-16 17:35:06 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:35:06 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:35:08 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py +2025-11-16 17:35:08 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py: 100/100 (PASS) +2025-11-16 17:35:10 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py +2025-11-16 17:35:10 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py: 75/100 (PASS) +2025-11-16 17:36:50 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:36:50 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:36:51 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:36:51 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:37:00 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:37:00 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:37:01 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:37:01 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:38:21 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:38:21 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:39:27 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/seed/apps/modules/architecture_standard.py +2025-11-16 17:39:27 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/seed/apps/modules/architecture_standard.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:43:57 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:43:57 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:43:57 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:43:57 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:43:57 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:43:57 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:43:57 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:43:57 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:43:57 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:43:58 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:43:58 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:43:58 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:43:58 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-18 17:51:55 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_architecture_check | INFO | Checking architecture standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-18 17:51:55 | captured_architecture_check | INFO | Architecture check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) diff --git a/src/aipass/seedgo/apps/standards/aipass/logs/cli_check.log.1 b/src/aipass/seedgo/apps/standards/aipass/logs/cli_check.log.1 new file mode 100644 index 00000000..355817b9 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/logs/cli_check.log.1 @@ -0,0 +1,387 @@ +2025-11-16 16:28:41 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:28:41 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 66/100 (FAIL) +2025-11-16 16:28:41 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:28:41 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/drone/apps/drone.py: 66/100 (FAIL) +2025-11-16 16:28:41 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:28:41 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/flow/apps/flow.py: 66/100 (FAIL) +2025-11-16 16:28:41 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:28:41 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 33/100 (FAIL) +2025-11-16 16:28:41 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:28:41 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-16 16:28:41 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:28:41 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 66/100 (FAIL) +2025-11-16 16:28:54 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:28:54 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 33/100 (FAIL) +2025-11-16 16:33:29 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:33:29 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 33/100 (FAIL) +2025-11-16 16:33:30 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:33:30 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/api/apps/api.py: 66/100 (FAIL) +2025-11-16 16:33:30 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:33:30 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 0/100 (FAIL) +2025-11-16 16:33:30 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:33:30 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cli/apps/cli.py: 33/100 (FAIL) +2025-11-16 16:33:30 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:33:30 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 33/100 (FAIL) +2025-11-16 16:33:30 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:33:30 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 66/100 (FAIL) +2025-11-16 16:33:30 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:33:30 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/drone/apps/drone.py: 66/100 (FAIL) +2025-11-16 16:33:30 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:33:30 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/flow/apps/flow.py: 66/100 (FAIL) +2025-11-16 16:33:30 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:33:30 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 33/100 (FAIL) +2025-11-16 16:33:30 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:33:30 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-16 16:33:30 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:33:30 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 66/100 (FAIL) +2025-11-16 16:33:34 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:33:34 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 33/100 (FAIL) +2025-11-16 16:33:34 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:33:34 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/api/apps/api.py: 66/100 (FAIL) +2025-11-16 16:33:34 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:33:34 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 0/100 (FAIL) +2025-11-16 16:33:34 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:33:34 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cli/apps/cli.py: 33/100 (FAIL) +2025-11-16 16:33:34 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:33:34 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 33/100 (FAIL) +2025-11-16 16:33:34 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:33:34 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 66/100 (FAIL) +2025-11-16 16:33:34 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:33:34 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/drone/apps/drone.py: 66/100 (FAIL) +2025-11-16 16:33:35 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:33:35 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/flow/apps/flow.py: 66/100 (FAIL) +2025-11-16 16:33:35 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:33:35 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 33/100 (FAIL) +2025-11-16 16:33:35 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:33:35 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-16 16:33:35 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:33:35 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 66/100 (FAIL) +2025-11-16 16:36:40 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:36:40 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 66/100 (FAIL) +2025-11-16 16:36:46 | captured_cli_check | INFO | Checking CLI standards for: apps/seed.py +2025-11-16 16:36:46 | captured_cli_check | INFO | CLI check completed for apps/seed.py: 0/100 (FAIL) +2025-11-16 16:37:23 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:37:23 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 66/100 (FAIL) +2025-11-16 16:37:23 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:37:23 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:37:23 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:37:23 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 0/100 (FAIL) +2025-11-16 16:37:23 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:37:23 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 16:37:23 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:37:23 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 16:37:23 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:37:23 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 66/100 (FAIL) +2025-11-16 16:37:24 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:37:24 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/drone/apps/drone.py: 66/100 (FAIL) +2025-11-16 16:37:24 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:37:24 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:37:24 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:37:24 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 16:37:24 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:37:24 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:37:24 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:37:24 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 66/100 (FAIL) +2025-11-16 16:37:32 | captured_cli_check | INFO | Checking CLI standards for: apps/seed.py +2025-11-16 16:37:32 | captured_cli_check | INFO | CLI check completed for apps/seed.py: 0/100 (FAIL) +2025-11-16 16:37:32 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:37:32 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 66/100 (FAIL) +2025-11-16 16:37:32 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:37:32 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:37:32 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 0/100 (FAIL) +2025-11-16 16:37:32 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:37:32 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 16:37:32 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:37:32 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 16:37:32 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:37:32 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 66/100 (FAIL) +2025-11-16 16:37:32 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:37:32 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/drone/apps/drone.py: 66/100 (FAIL) +2025-11-16 16:37:32 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:37:32 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:37:32 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 16:37:32 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:37:32 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:37:32 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 66/100 (FAIL) +2025-11-16 16:37:49 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:37:49 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 66/100 (FAIL) +2025-11-16 16:38:25 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:38:25 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 66/100 (FAIL) +2025-11-16 16:38:25 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:38:25 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:38:25 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 0/100 (FAIL) +2025-11-16 16:38:25 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:38:25 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 16:38:25 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:38:25 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 16:38:25 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:38:25 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 66/100 (FAIL) +2025-11-16 16:38:25 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:38:25 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/drone/apps/drone.py: 66/100 (FAIL) +2025-11-16 16:38:25 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:38:25 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:38:25 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 16:38:25 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:38:25 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:38:25 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:38:36 | captured_cli_check | INFO | Checking CLI standards for: ai_mail +2025-11-16 16:38:37 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:38:37 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:38:42 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail +2025-11-16 16:38:45 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:38:45 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 66/100 (FAIL) +2025-11-16 16:38:45 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:38:45 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:38:45 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 0/100 (FAIL) +2025-11-16 16:38:45 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:38:45 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 16:38:45 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:38:45 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 16:38:45 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:38:45 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 66/100 (FAIL) +2025-11-16 16:38:45 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:38:45 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/drone/apps/drone.py: 66/100 (FAIL) +2025-11-16 16:38:45 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:38:45 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:38:45 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 16:38:45 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:38:45 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:38:45 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:38:52 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/modules/email.py +2025-11-16 16:38:52 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/modules/email.py: 66/100 (FAIL) +2025-11-16 16:39:11 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:39:11 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 66/100 (FAIL) +2025-11-16 16:39:11 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:39:11 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:39:11 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:39:11 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 0/100 (FAIL) +2025-11-16 16:39:11 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:39:11 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 16:39:11 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:39:11 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 16:39:12 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:39:12 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 66/100 (FAIL) +2025-11-16 16:39:12 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:39:12 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/drone/apps/drone.py: 66/100 (FAIL) +2025-11-16 16:39:12 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:39:12 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:39:12 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:39:12 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 16:39:12 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:39:12 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:39:12 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:39:12 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:42:43 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 66/100 (FAIL) +2025-11-16 16:42:43 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:42:43 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:42:43 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 0/100 (FAIL) +2025-11-16 16:42:43 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:42:43 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 16:42:43 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:42:43 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 16:42:43 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:42:43 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 66/100 (FAIL) +2025-11-16 16:42:43 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:42:43 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/drone/apps/drone.py: 66/100 (FAIL) +2025-11-16 16:42:43 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:42:43 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:42:43 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 16:42:43 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:42:43 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:42:43 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:42:55 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 66/100 (FAIL) +2025-11-16 16:42:55 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:42:55 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:42:55 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 0/100 (FAIL) +2025-11-16 16:42:55 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:42:55 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 16:42:55 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:42:55 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 16:42:55 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:42:55 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 66/100 (FAIL) +2025-11-16 16:42:55 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:42:55 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/drone/apps/drone.py: 66/100 (FAIL) +2025-11-16 16:42:55 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:42:55 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:42:55 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 16:42:55 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:42:55 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:42:55 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:45:47 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 66/100 (FAIL) +2025-11-16 16:45:47 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:45:47 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:45:47 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 0/100 (FAIL) +2025-11-16 16:45:47 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:45:47 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 16:45:47 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:45:47 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 16:45:47 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:45:47 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 66/100 (FAIL) +2025-11-16 16:45:47 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:45:47 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/drone/apps/drone.py: 66/100 (FAIL) +2025-11-16 16:45:47 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:45:47 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:45:47 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 16:45:47 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:45:47 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:45:47 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:48:09 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:48:09 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 16:48:21 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/handlers/storage/chroma.py +2025-11-16 16:48:21 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/handlers/storage/chroma.py: 0/100 (FAIL) +2025-11-16 16:48:22 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py +2025-11-16 16:48:22 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py: 0/100 (FAIL) +2025-11-16 16:48:24 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/memory_bank.py +2025-11-16 16:48:24 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/memory_bank.py: 66/100 (FAIL) +2025-11-16 16:53:14 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:53:14 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 66/100 (FAIL) +2025-11-16 16:53:14 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:53:14 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:53:14 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:53:14 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 0/100 (FAIL) +2025-11-16 16:53:14 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:53:14 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 16:53:15 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:53:15 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 16:53:15 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:53:15 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 66/100 (FAIL) +2025-11-16 16:53:15 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:53:15 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/drone/apps/drone.py: 66/100 (FAIL) +2025-11-16 16:53:15 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:53:15 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:53:15 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 16:53:15 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:53:15 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:53:15 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:55:55 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/modules/email.py +2025-11-16 16:55:55 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/modules/email.py: 100/100 (PASS) +2025-11-16 16:55:58 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py +2025-11-16 16:55:58 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py: 100/100 (PASS) +2025-11-16 16:59:20 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:59:20 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 66/100 (FAIL) +2025-11-16 16:59:21 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:59:21 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:59:21 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 0/100 (FAIL) +2025-11-16 16:59:21 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:59:21 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 16:59:21 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:59:21 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 16:59:21 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:59:21 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 66/100 (FAIL) +2025-11-16 16:59:21 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:59:21 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/drone/apps/drone.py: 66/100 (FAIL) +2025-11-16 16:59:21 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:59:21 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:59:21 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 16:59:21 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:59:21 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:59:21 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:01:35 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:01:35 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 66/100 (FAIL) +2025-11-16 17:02:32 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:32 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:02:45 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:45 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:02:57 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:57 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:03:23 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:03:23 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:13:17 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:13:17 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:13:17 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:13:17 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:13:18 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 0/100 (FAIL) +2025-11-16 17:13:18 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:13:18 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 17:13:18 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:13:18 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 17:13:18 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:13:18 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 66/100 (FAIL) +2025-11-16 17:13:18 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:13:18 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/drone/apps/drone.py: 66/100 (FAIL) +2025-11-16 17:13:18 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:13:18 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:13:18 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:13:18 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:13:18 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:13:18 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:17:06 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:17:06 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:17:07 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 0/100 (FAIL) +2025-11-16 17:17:07 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:17:07 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 17:17:07 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:17:07 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 17:17:07 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:17:07 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 66/100 (FAIL) +2025-11-16 17:17:07 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:17:07 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/drone/apps/drone.py: 66/100 (FAIL) +2025-11-16 17:17:07 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:17:07 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:17:07 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:17:07 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:17:07 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:17:07 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:17:36 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:17:36 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:17:36 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 0/100 (FAIL) +2025-11-16 17:17:36 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:17:36 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 17:17:37 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:17:37 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 17:17:37 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:17:37 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 66/100 (FAIL) +2025-11-16 17:17:37 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:17:37 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/drone/apps/drone.py: 66/100 (FAIL) +2025-11-16 17:17:37 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:17:37 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:17:37 | captured_cli_check | INFO | CLI check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:17:37 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:17:37 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:17:37 | captured_cli_check | INFO | CLI check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:20:35 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:20:35 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:20:35 | captured_cli_check | INFO | CLI check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 0/100 (FAIL) +2025-11-16 17:20:35 | captured_cli_check | INFO | Checking CLI standards for: /home/aipass/aipass_core/cli/apps/cli.py diff --git a/src/aipass/seedgo/apps/standards/aipass/logs/documentation_check.log.1 b/src/aipass/seedgo/apps/standards/aipass/logs/documentation_check.log.1 new file mode 100644 index 00000000..ca60a7ad --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/logs/documentation_check.log.1 @@ -0,0 +1,334 @@ +2025-11-16 16:59:21 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:59:21 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:59:21 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:59:21 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/drone/apps/drone.py: 75/100 (PASS) +2025-11-16 16:59:21 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:59:21 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/flow/apps/flow.py: 75/100 (PASS) +2025-11-16 16:59:21 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:59:21 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:59:21 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:59:21 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:01:35 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:01:35 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 75/100 (PASS) +2025-11-16 17:02:32 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:32 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 75/100 (PASS) +2025-11-16 17:02:46 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:46 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 75/100 (PASS) +2025-11-16 17:02:57 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:57 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 75/100 (PASS) +2025-11-16 17:03:23 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:03:23 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:13:17 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:13:17 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:13:17 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:13:18 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:13:18 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:13:18 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 75/100 (PASS) +2025-11-16 17:13:18 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:13:18 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:13:18 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:13:18 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:13:18 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/drone/apps/drone.py: 75/100 (PASS) +2025-11-16 17:13:18 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:13:18 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/flow/apps/flow.py: 75/100 (PASS) +2025-11-16 17:13:18 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:13:18 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:13:18 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:13:18 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:17:06 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:17:06 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:17:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:17:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 75/100 (PASS) +2025-11-16 17:17:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:17:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:17:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:17:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:17:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/drone/apps/drone.py: 75/100 (PASS) +2025-11-16 17:17:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:17:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/flow/apps/flow.py: 75/100 (PASS) +2025-11-16 17:17:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:17:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:17:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:17:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:17:36 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:17:36 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:17:36 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:17:36 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 75/100 (PASS) +2025-11-16 17:17:36 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:17:37 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:17:37 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:17:37 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:17:37 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/drone/apps/drone.py: 75/100 (PASS) +2025-11-16 17:17:37 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:17:37 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/flow/apps/flow.py: 75/100 (PASS) +2025-11-16 17:17:37 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:17:37 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:17:37 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:17:37 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:20:35 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:20:35 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:20:35 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:20:35 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 75/100 (PASS) +2025-11-16 17:20:35 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:20:35 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:20:35 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:20:35 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:20:35 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/drone/apps/drone.py: 75/100 (PASS) +2025-11-16 17:20:35 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:20:35 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/flow/apps/flow.py: 75/100 (PASS) +2025-11-16 17:20:35 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:20:35 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:20:35 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:20:35 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:20:38 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:20:38 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:20:38 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:20:38 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:20:38 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:20:39 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 75/100 (PASS) +2025-11-16 17:20:39 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:20:39 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:20:39 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:20:39 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:20:39 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/drone/apps/drone.py: 75/100 (PASS) +2025-11-16 17:20:39 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:20:39 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/flow/apps/flow.py: 75/100 (PASS) +2025-11-16 17:20:39 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:20:39 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:20:39 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:20:39 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:22:25 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:22:25 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:22:25 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:22:25 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 75/100 (PASS) +2025-11-16 17:22:25 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:22:25 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:22:25 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:22:25 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:22:25 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/drone/apps/drone.py: 75/100 (PASS) +2025-11-16 17:22:25 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:22:25 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/flow/apps/flow.py: 75/100 (PASS) +2025-11-16 17:22:25 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:22:25 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:22:25 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:22:25 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:25:00 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/memory_bank.py +2025-11-16 17:25:00 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/memory_bank.py: 100/100 (PASS) +2025-11-16 17:25:02 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:25:02 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:25:04 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py +2025-11-16 17:25:04 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py: 100/100 (PASS) +2025-11-16 17:25:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/handlers/tracking/line_counter.py +2025-11-16 17:25:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/handlers/tracking/line_counter.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:26:43 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:26:43 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:26:43 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:26:43 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 75/100 (PASS) +2025-11-16 17:26:43 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:26:43 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:26:43 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:26:43 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:26:43 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/drone/apps/drone.py: 75/100 (PASS) +2025-11-16 17:26:43 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:26:43 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/flow/apps/flow.py: 75/100 (PASS) +2025-11-16 17:26:43 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:26:43 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:26:43 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:26:43 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:28:31 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:28:31 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:28:31 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:28:31 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 75/100 (PASS) +2025-11-16 17:28:31 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:28:31 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:28:31 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:28:31 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:28:31 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/drone/apps/drone.py: 75/100 (PASS) +2025-11-16 17:28:31 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:28:31 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/flow/apps/flow.py: 75/100 (PASS) +2025-11-16 17:28:31 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:28:31 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:28:31 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:28:31 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:28:40 | captured_documentation_check | INFO | Checking documentation standards for: apps/cortex.py +2025-11-16 17:28:40 | captured_documentation_check | INFO | Documentation check completed for apps/cortex.py: 100/100 (PASS) +2025-11-16 17:28:41 | captured_documentation_check | INFO | Checking documentation standards for: apps/modules/create_branch.py +2025-11-16 17:28:41 | captured_documentation_check | INFO | Documentation check completed for apps/modules/create_branch.py: 100/100 (PASS) +2025-11-16 17:28:42 | captured_documentation_check | INFO | Checking documentation standards for: apps/modules/update_branch.py +2025-11-16 17:28:42 | captured_documentation_check | INFO | Documentation check completed for apps/modules/update_branch.py: 100/100 (PASS) +2025-11-16 17:28:44 | captured_documentation_check | INFO | Checking documentation standards for: apps/modules/delete_branch.py +2025-11-16 17:28:44 | captured_documentation_check | INFO | Documentation check completed for apps/modules/delete_branch.py: 100/100 (PASS) +2025-11-16 17:28:46 | captured_documentation_check | INFO | Checking documentation standards for: apps/modules/regenerate_template_registry.py +2025-11-16 17:28:46 | captured_documentation_check | INFO | Documentation check completed for apps/modules/regenerate_template_registry.py: 100/100 (PASS) +2025-11-16 17:28:47 | captured_documentation_check | INFO | Checking documentation standards for: apps/handlers/json/handler.py +2025-11-16 17:28:47 | captured_documentation_check | INFO | Documentation check completed for apps/handlers/json/handler.py: 100/100 (PASS) +2025-11-16 17:28:48 | captured_documentation_check | INFO | Checking documentation standards for: apps/handlers/branch/file_ops.py +2025-11-16 17:28:48 | captured_documentation_check | INFO | Documentation check completed for apps/handlers/branch/file_ops.py: 75/100 (PASS) +2025-11-16 17:28:49 | captured_documentation_check | INFO | Checking documentation standards for: apps/handlers/error/logger.py +2025-11-16 17:28:49 | captured_documentation_check | INFO | Documentation check completed for apps/handlers/error/logger.py: 75/100 (PASS) +2025-11-16 17:28:50 | captured_documentation_check | INFO | Checking documentation standards for: apps/handlers/registry/ignore.py +2025-11-16 17:28:50 | captured_documentation_check | INFO | Documentation check completed for apps/handlers/registry/ignore.py: 75/100 (PASS) +2025-11-16 17:30:19 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:30:19 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:32:29 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:32:29 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:32:32 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:32:32 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:32:36 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:32:36 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:32:40 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:32:40 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:33:04 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/seed/apps/modules/architecture_standard.py +2025-11-16 17:33:04 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/seed/apps/modules/architecture_standard.py: 100/100 (PASS) +2025-11-16 17:35:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:35:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:35:08 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py +2025-11-16 17:35:08 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py: 100/100 (PASS) +2025-11-16 17:35:10 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py +2025-11-16 17:35:10 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py: 75/100 (PASS) +2025-11-16 17:36:50 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:36:50 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:36:51 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:36:51 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:37:00 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:37:00 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:37:01 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:37:01 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:38:21 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:38:21 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:39:27 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/seed/apps/modules/architecture_standard.py +2025-11-16 17:39:27 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/seed/apps/modules/architecture_standard.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:43:57 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:43:57 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:43:57 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:43:57 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 75/100 (PASS) +2025-11-16 17:43:57 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:43:57 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:43:57 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:43:57 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:43:57 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/drone/apps/drone.py: 75/100 (PASS) +2025-11-16 17:43:57 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:43:57 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/flow/apps/flow.py: 75/100 (PASS) +2025-11-16 17:43:57 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:43:57 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:43:58 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:43:58 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:43:58 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:43:58 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-18 17:51:55 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-18 17:51:55 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-18 17:51:55 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-18 17:51:55 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 75/100 (PASS) +2025-11-18 17:51:55 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-18 17:51:55 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-18 17:51:55 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-18 17:51:55 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-18 17:51:55 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/drone/apps/drone.py: 75/100 (PASS) +2025-11-18 17:51:55 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-18 17:51:55 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/flow/apps/flow.py: 75/100 (PASS) +2025-11-18 17:51:55 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-18 17:51:55 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-18 17:51:55 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/seed/apps/seed.py +2025-11-18 17:51:55 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-18 17:52:01 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-18 17:52:01 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-18 17:52:01 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-18 17:52:01 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 75/100 (PASS) +2025-11-18 17:52:01 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-18 17:52:01 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-18 17:52:01 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-18 17:52:01 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-18 17:52:01 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/drone/apps/drone.py: 75/100 (PASS) +2025-11-18 17:52:01 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-18 17:52:01 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/flow/apps/flow.py: 75/100 (PASS) +2025-11-18 17:52:01 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-18 17:52:01 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-18 17:52:01 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-18 17:52:02 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/seed/apps/seed.py +2025-11-18 17:52:02 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-18 17:52:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-18 17:52:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-18 17:52:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-18 17:52:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-18 17:52:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-18 17:52:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 75/100 (PASS) +2025-11-18 17:52:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-18 17:52:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-18 17:52:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-18 17:52:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-18 17:52:07 | captured_documentation_check | INFO | Checking documentation standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-18 17:52:07 | captured_documentation_check | INFO | Documentation check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) diff --git a/src/aipass/seedgo/apps/standards/aipass/logs/encapsulation_check.log.1 b/src/aipass/seedgo/apps/standards/aipass/logs/encapsulation_check.log.1 new file mode 100644 index 00000000..019b73f1 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/logs/encapsulation_check.log.1 @@ -0,0 +1,257 @@ +2025-11-28 22:13:22 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:22 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:22 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:22 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:22 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:22 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:22 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:22 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:22 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:22 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:22 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:22 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:22 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:54 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' +2025-11-28 22:13:57 | captured_encapsulation_check | ERROR | [encapsulation_check] Error reading branch registry: module 'seed.apps.handlers.json.json_handler' has no attribute 'load_json_file' diff --git a/src/aipass/seedgo/apps/standards/aipass/logs/error_handling_check.log.1 b/src/aipass/seedgo/apps/standards/aipass/logs/error_handling_check.log.1 new file mode 100644 index 00000000..a9811f26 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/logs/error_handling_check.log.1 @@ -0,0 +1,330 @@ +2025-11-16 16:36:40 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:36:40 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:36:46 | captured_error_handling_check | INFO | Checking error handling standards for: apps/seed.py +2025-11-16 16:36:46 | captured_error_handling_check | INFO | Error handling check completed for apps/seed.py: 100/100 (PASS) +2025-11-16 16:37:23 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:37:23 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:37:23 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:37:23 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:37:23 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:37:23 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:37:23 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:37:23 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:37:23 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:37:23 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:37:24 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:37:24 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:37:24 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:37:24 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:37:24 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:37:24 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:37:24 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:37:24 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:37:24 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:37:24 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:37:24 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:37:24 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Checking error handling standards for: apps/seed.py +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Error handling check completed for apps/seed.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:37:32 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:38:25 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:38:36 | captured_error_handling_check | INFO | Checking error handling standards for: ai_mail +2025-11-16 16:38:42 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:38:45 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:38:52 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/modules/email.py +2025-11-16 16:38:52 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/modules/email.py: 0/100 (FAIL) +2025-11-16 16:39:11 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:39:11 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:39:11 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:39:11 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:39:11 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:39:11 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:39:11 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:39:11 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:39:11 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:39:11 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:39:12 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:39:12 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:39:12 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:39:12 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:39:12 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:39:12 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:39:12 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:39:12 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:39:12 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:39:12 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:39:12 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:39:12 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:42:43 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:42:55 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:45:47 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:48:09 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:48:09 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:48:21 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/handlers/storage/chroma.py +2025-11-16 16:48:21 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/handlers/storage/chroma.py: 0/100 (FAIL) +2025-11-16 16:48:22 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py +2025-11-16 16:48:22 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py: 0/100 (FAIL) +2025-11-16 16:48:24 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/memory_bank.py +2025-11-16 16:48:24 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/memory_bank.py: 0/100 (FAIL) +2025-11-16 16:53:14 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:53:14 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:53:14 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:53:14 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:53:14 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:53:14 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:53:14 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:53:14 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:53:15 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:53:15 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:53:15 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:53:15 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:53:15 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:53:15 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:53:15 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:53:15 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:55:55 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/modules/email.py +2025-11-16 16:55:55 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/modules/email.py: 0/100 (FAIL) +2025-11-16 16:55:58 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py +2025-11-16 16:55:58 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py: 0/100 (FAIL) +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:59:21 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:01:35 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:01:35 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:02:32 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:32 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:02:46 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:46 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:03:23 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:03:23 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:13:17 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:13:17 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:13:18 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:17:06 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:17:06 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:17:07 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:17:36 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:17:36 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:17:36 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:17:37 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:17:37 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:17:37 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:17:37 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:17:37 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:17:37 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 17:17:37 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:17:37 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:17:37 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:20:35 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:20:35 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:20:35 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:20:35 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:20:35 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:20:35 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_error_handling_check | INFO | Checking error handling standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:20:35 | captured_error_handling_check | INFO | Error handling check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) diff --git a/src/aipass/seedgo/apps/standards/aipass/logs/handlers_check.log.1 b/src/aipass/seedgo/apps/standards/aipass/logs/handlers_check.log.1 new file mode 100644 index 00000000..28948913 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/logs/handlers_check.log.1 @@ -0,0 +1,362 @@ +2025-11-15 20:33:45 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/handlers_check.py +2025-11-15 20:33:45 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/handlers_check.py: 0/100 (FAIL) +2025-11-15 20:34:40 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/handlers_check.py +2025-11-15 20:34:40 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/handlers_check.py: 50/100 (FAIL) +2025-11-15 20:35:54 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/handlers_check.py +2025-11-15 20:35:54 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/handlers_check.py: 100/100 (PASS) +2025-11-15 20:36:39 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/handlers_check.py +2025-11-15 20:36:39 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/handlers_check.py: 100/100 (PASS) +2025-11-15 20:41:14 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/imports_check.py +2025-11-15 20:41:14 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/imports_check.py: 100/100 (PASS) +2025-11-15 20:41:15 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/architecture_check.py +2025-11-15 20:41:15 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/architecture_check.py: 100/100 (PASS) +2025-11-15 20:41:16 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/cli_check.py +2025-11-15 20:41:16 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/cli_check.py: 100/100 (PASS) +2025-11-15 20:41:17 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/naming_check.py +2025-11-15 20:41:17 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/naming_check.py: 100/100 (PASS) +2025-11-15 20:41:19 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/handlers_check.py +2025-11-15 20:41:19 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/handlers_check.py: 100/100 (PASS) +2025-11-15 20:41:23 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/imports_check.py +2025-11-15 20:41:23 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/imports_check.py: 100/100 (PASS) +2025-11-15 20:51:09 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/imports_check.py +2025-11-15 20:51:09 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/imports_check.py: 100/100 (PASS) +2025-11-15 20:51:21 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/imports_check.py +2025-11-15 20:51:21 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/imports_check.py: 100/100 (PASS) +2025-11-15 20:52:06 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/imports_check.py +2025-11-15 20:52:06 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/imports_check.py: 100/100 (PASS) +2025-11-15 20:59:45 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/modules_check.py +2025-11-15 20:59:45 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/modules_check.py: 100/100 (PASS) +2025-11-15 20:59:52 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/standards_checklist.py +2025-11-15 21:00:49 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/standards_checklist.py +2025-11-15 21:00:58 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/modules_check.py +2025-11-15 21:00:58 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/modules_check.py: 100/100 (PASS) +2025-11-15 21:05:13 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/documentation_check.py +2025-11-15 21:05:13 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/documentation_check.py: 100/100 (PASS) +2025-11-15 21:11:00 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/json_structure_check.py +2025-11-15 21:11:00 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/json_structure_check.py: 100/100 (PASS) +2025-11-15 21:14:15 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/testing_check.py +2025-11-15 21:14:15 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/testing_check.py: 100/100 (PASS) +2025-11-15 21:15:02 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/memory_bank.py +2025-11-15 21:15:30 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/testing_check.py +2025-11-15 21:15:30 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/testing_check.py: 100/100 (PASS) +2025-11-15 21:25:43 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/json_structure_check.py +2025-11-15 21:25:43 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/json_structure_check.py: 100/100 (PASS) +2025-11-15 21:25:47 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/architecture_check.py +2025-11-15 21:25:47 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/architecture_check.py: 100/100 (PASS) +2025-11-15 21:27:21 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/seed/apps/handlers/standards/modules_check.py +2025-11-15 21:27:21 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/seed/apps/handlers/standards/modules_check.py: 100/100 (PASS) +2025-11-15 21:42:16 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/cli_check.py +2025-11-15 21:42:16 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/cli_check.py: 100/100 (PASS) +2025-11-15 21:42:17 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/handlers_check.py +2025-11-15 21:42:17 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/handlers_check.py: 100/100 (PASS) +2025-11-15 21:42:50 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/json_structure_check.py +2025-11-15 21:42:50 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/json_structure_check.py: 100/100 (PASS) +2025-11-15 21:43:01 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/seed/apps/handlers/standards/testing_check.py +2025-11-15 21:43:01 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/seed/apps/handlers/standards/testing_check.py: 100/100 (PASS) +2025-11-15 21:44:13 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/seed/apps/handlers/standards/imports_check.py +2025-11-15 21:44:13 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/seed/apps/handlers/standards/imports_check.py: 100/100 (PASS) +2025-11-16 00:12:01 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/naming_check.py +2025-11-16 00:12:01 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/naming_check.py: 100/100 (PASS) +2025-11-16 00:12:31 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/standards_checklist.py +2025-11-16 00:12:43 | captured_handlers_check | INFO | Checking handler standards for: apps/seed.py +2025-11-16 00:12:45 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/json/json_handler.py +2025-11-16 00:12:45 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/json/json_handler.py: 100/100 (PASS) +2025-11-16 00:12:47 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/imports_standard.py +2025-11-16 00:13:12 | captured_handlers_check | INFO | Checking handler standards for: +2025-11-16 00:13:13 | captured_handlers_check | INFO | Checking handler standards for: +2025-11-16 00:13:13 | captured_handlers_check | INFO | Checking handler standards for: +2025-11-16 00:13:13 | captured_handlers_check | INFO | Checking handler standards for: +2025-11-16 00:13:13 | captured_handlers_check | INFO | Checking handler standards for: +2025-11-16 00:13:14 | captured_handlers_check | INFO | Checking handler standards for: +2025-11-16 00:13:14 | captured_handlers_check | INFO | Checking handler standards for: +2025-11-16 00:13:14 | captured_handlers_check | INFO | Checking handler standards for: +2025-11-16 00:13:14 | captured_handlers_check | INFO | Checking handler standards for: +2025-11-16 00:14:07 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/imports_check.py +2025-11-16 00:14:07 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/imports_check.py: 100/100 (PASS) +2025-11-16 00:14:09 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/architecture_check.py +2025-11-16 00:14:09 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/architecture_check.py: 100/100 (PASS) +2025-11-16 00:14:11 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/cli_check.py +2025-11-16 00:14:11 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/cli_check.py: 100/100 (PASS) +2025-11-16 00:14:13 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/testing_check.py +2025-11-16 00:14:13 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/testing_check.py: 100/100 (PASS) +2025-11-16 00:14:15 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/standards/json_structure_check.py +2025-11-16 00:14:15 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/standards/json_structure_check.py: 100/100 (PASS) +2025-11-16 00:33:24 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/handlers/monitor/detector.py +2025-11-16 00:33:24 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/MEMORY_BANK/apps/handlers/monitor/detector.py: 100/100 (PASS) +2025-11-16 00:34:38 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py +2025-11-16 00:34:38 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py: 100/100 (PASS) +2025-11-16 00:35:52 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/handlers/vector/embedder.py +2025-11-16 00:35:52 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/MEMORY_BANK/apps/handlers/vector/embedder.py: 100/100 (PASS) +2025-11-16 00:37:10 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/handlers/storage/chroma.py +2025-11-16 00:37:10 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/MEMORY_BANK/apps/handlers/storage/chroma.py: 100/100 (PASS) +2025-11-16 00:38:30 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 00:46:59 | captured_handlers_check | INFO | Checking handler standards for: apps/seed.py +2025-11-16 00:50:37 | captured_handlers_check | INFO | Checking handler standards for: apps/seed.py +2025-11-16 01:35:06 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/modules/email.py +2025-11-16 01:35:19 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py +2025-11-16 01:35:19 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/modules/error_monitor.py +2025-11-16 01:35:20 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/modules/local_memory_monitor.py +2025-11-16 01:47:39 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py +2025-11-16 01:47:40 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/modules/local_memory_monitor.py +2025-11-16 01:53:09 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/branch_ping.py +2025-11-16 01:53:10 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/local_memory_monitor.py +2025-11-16 01:53:11 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/error_monitor.py +2025-11-16 01:53:13 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/email.py +2025-11-16 02:01:15 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/local_memory_monitor.py +2025-11-16 02:01:16 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/branch_ping.py +2025-11-16 02:01:18 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/error_monitor.py +2025-11-16 02:01:19 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/email.py +2025-11-16 02:02:52 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/local_memory_monitor.py +2025-11-16 02:02:54 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/branch_ping.py +2025-11-16 02:02:56 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/error_monitor.py +2025-11-16 02:02:58 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/email.py +2025-11-16 02:03:14 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/local_memory_monitor.py +2025-11-16 02:03:16 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/branch_ping.py +2025-11-16 02:03:18 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/error_monitor.py +2025-11-16 02:03:20 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/email.py +2025-11-16 12:44:10 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/devpulse/apps/modules/comments.py +2025-11-16 12:44:11 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/devpulse/apps/modules/verify_branch.py +2025-11-16 12:44:24 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 13:26:04 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/models/backup_models.py +2025-11-16 13:26:04 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/models/backup_models.py: 100/100 (PASS) +2025-11-16 13:26:05 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/utils/system_utils.py +2025-11-16 13:26:05 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/utils/system_utils.py: 100/100 (PASS) +2025-11-16 13:26:06 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/config/config_handler.py +2025-11-16 13:26:06 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/config/config_handler.py: 100/100 (PASS) +2025-11-16 13:32:40 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/devpulse/apps/modules/dev_tracking.py +2025-11-16 13:32:41 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/devpulse/apps/handlers/dev_local/ops.py +2025-11-16 13:32:41 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/devpulse/apps/handlers/dev_local/ops.py: 100/100 (PASS) +2025-11-16 13:32:42 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/devpulse/apps/handlers/template/ops.py +2025-11-16 13:32:42 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/devpulse/apps/handlers/template/ops.py: 100/100 (PASS) +2025-11-16 13:34:43 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/modules/create_plan.py +2025-11-16 13:34:43 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/modules/delete_plan.py +2025-11-16 13:35:00 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/handlers/plan/create.py +2025-11-16 13:35:00 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/flow/apps/handlers/plan/create.py: 100/100 (PASS) +2025-11-16 13:35:39 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/modules/create_plan.py +2025-11-16 13:35:40 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/modules/delete_plan.py +2025-11-16 13:35:45 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/handlers/config/load_config.py +2025-11-16 13:35:45 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/flow/apps/handlers/config/load_config.py: 33/100 (FAIL) +2025-11-16 13:35:46 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/handlers/json/json_ops.py +2025-11-16 13:35:46 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/flow/apps/handlers/json/json_ops.py: 50/100 (FAIL) +2025-11-16 13:35:47 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/handlers/plan/create.py +2025-11-16 13:35:47 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/flow/apps/handlers/plan/create.py: 100/100 (PASS) +2025-11-16 13:35:47 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/handlers/plan/validator.py +2025-11-16 13:35:47 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/flow/apps/handlers/plan/validator.py: 100/100 (PASS) +2025-11-16 13:35:51 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/handlers/plan/resolve_location.py +2025-11-16 13:35:51 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/flow/apps/handlers/plan/resolve_location.py: 100/100 (PASS) +2025-11-16 13:35:52 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/handlers/plan/command_parser.py +2025-11-16 13:35:52 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/flow/apps/handlers/plan/command_parser.py: 100/100 (PASS) +2025-11-16 13:36:20 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 13:36:28 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/api/apps/modules/api_key.py +2025-11-16 13:36:29 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/api/apps/modules/openrouter_client.py +2025-11-16 13:36:29 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/api/apps/modules/usage_tracker.py +2025-11-16 14:07:18 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py +2025-11-16 14:07:19 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/modules/integrations.py +2025-11-16 14:07:20 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/operations/file_operations.py +2025-11-16 14:07:20 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/operations/file_operations.py: 100/100 (PASS) +2025-11-16 14:12:11 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py +2025-11-16 14:12:13 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/modules/integrations.py +2025-11-16 14:12:14 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/models/backup_models.py +2025-11-16 14:12:14 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/models/backup_models.py: 100/100 (PASS) +2025-11-16 14:12:16 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/operations/file_operations.py +2025-11-16 14:12:16 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/operations/file_operations.py: 100/100 (PASS) +2025-11-16 14:12:17 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/diff/diff_generator.py +2025-11-16 14:12:17 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/diff/diff_generator.py: 100/100 (PASS) +2025-11-16 14:12:29 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py +2025-11-16 14:12:30 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/modules/integrations.py +2025-11-16 14:12:32 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/models/backup_models.py +2025-11-16 14:12:32 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/models/backup_models.py: 100/100 (PASS) +2025-11-16 14:12:33 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/utils/system_utils.py +2025-11-16 14:12:33 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/utils/system_utils.py: 100/100 (PASS) +2025-11-16 14:12:35 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/config/config_handler.py +2025-11-16 14:12:35 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/config/config_handler.py: 100/100 (PASS) +2025-11-16 14:15:20 | captured_handlers_check | INFO | Checking handler standards for: +2025-11-16 14:15:20 | captured_handlers_check | INFO | Checking handler standards for: +2025-11-16 14:15:20 | captured_handlers_check | INFO | Checking handler standards for: +2025-11-16 14:15:20 | captured_handlers_check | INFO | Checking handler standards for: +2025-11-16 14:15:20 | captured_handlers_check | INFO | Checking handler standards for: +2025-11-16 14:18:59 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/create_plan.py +2025-11-16 14:19:04 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/delete_plan.py +2025-11-16 14:19:07 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/modules/delete_plan.py +2025-11-16 14:24:07 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/modules/create_plan.py +2025-11-16 14:24:09 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/modules/delete_plan.py +2025-11-16 14:39:06 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 14:46:59 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/config/config_handler.py +2025-11-16 14:46:59 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/config/config_handler.py: 100/100 (PASS) +2025-11-16 14:47:01 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/models/backup_models.py +2025-11-16 14:47:01 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/models/backup_models.py: 100/100 (PASS) +2025-11-16 14:47:03 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/utils/system_utils.py +2025-11-16 14:47:03 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/utils/system_utils.py: 100/100 (PASS) +2025-11-16 14:47:05 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/operations/file_operations.py +2025-11-16 14:47:05 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/operations/file_operations.py: 100/100 (PASS) +2025-11-16 14:49:56 | captured_handlers_check | INFO | Checking handler standards for: apps/drone.py +2025-11-16 14:50:11 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/discovery.py +2025-11-16 14:50:11 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/registry.py +2025-11-16 14:50:12 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/loader.py +2025-11-16 14:50:27 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/json/json_handler.py +2025-11-16 14:50:27 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/json/json_handler.py: 100/100 (PASS) +2025-11-16 14:50:27 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/discovery/help_display.py +2025-11-16 14:50:27 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/discovery/help_display.py: 50/100 (FAIL) +2025-11-16 14:50:28 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/registry/status_display.py +2025-11-16 14:50:36 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/registry/registration.py +2025-11-16 14:50:36 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/registry/registration.py: 66/100 (FAIL) +2025-11-16 14:54:54 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 14:54:54 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/modules/create_branch.py +2025-11-16 14:54:55 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/modules/update_branch.py +2025-11-16 14:54:56 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/modules/delete_branch.py +2025-11-16 14:54:57 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/modules/regenerate_template_registry.py +2025-11-16 14:55:05 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py +2025-11-16 14:55:05 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py: 100/100 (PASS) +2025-11-16 14:55:05 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py +2025-11-16 14:55:05 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py: 50/100 (FAIL) +2025-11-16 14:55:06 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/handlers/error/logger.py +2025-11-16 14:55:06 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/cortex/apps/handlers/error/logger.py: 100/100 (PASS) +2025-11-16 14:55:07 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/handlers/registry/ignore.py +2025-11-16 14:55:07 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/cortex/apps/handlers/registry/ignore.py: 100/100 (PASS) +2025-11-16 14:55:09 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/json/json_handler.py +2025-11-16 14:55:09 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/json/json_handler.py: 100/100 (PASS) +2025-11-16 14:55:25 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py +2025-11-16 14:55:26 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/modules/integrations.py +2025-11-16 14:55:28 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/diff/diff_generator.py +2025-11-16 14:55:28 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/diff/diff_generator.py: 100/100 (PASS) +2025-11-16 14:55:30 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/diff/version_manager.py +2025-11-16 14:55:30 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/diff/version_manager.py: 100/100 (PASS) +2025-11-16 14:55:33 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/handlers/diff/vscode_integration.py +2025-11-16 14:55:33 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/backup_system/apps/handlers/diff/vscode_integration.py: 100/100 (PASS) +2025-11-16 15:16:15 | captured_handlers_check | INFO | Checking handler standards for: aipass_core/prax/apps/prax.py +2025-11-16 15:16:22 | captured_handlers_check | INFO | Checking handler standards for: aipass_core/prax/apps/modules/logger.py +2025-11-16 15:16:23 | captured_handlers_check | INFO | Checking handler standards for: aipass_core/prax/apps/handlers/json/json_handler.py +2025-11-16 15:16:23 | captured_handlers_check | INFO | Handlers check completed for aipass_core/prax/apps/handlers/json/json_handler.py: 100/100 (PASS) +2025-11-16 15:16:31 | captured_handlers_check | INFO | Checking handler standards for: aipass_core/prax/apps/modules/init_module.py +2025-11-16 15:16:32 | captured_handlers_check | INFO | Checking handler standards for: aipass_core/prax/apps/handlers/logging/monitoring.py +2025-11-16 15:16:32 | captured_handlers_check | INFO | Handlers check completed for aipass_core/prax/apps/handlers/logging/monitoring.py: 100/100 (PASS) +2025-11-16 15:20:27 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 15:20:28 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/modules/create_branch.py +2025-11-16 15:20:28 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py +2025-11-16 15:20:28 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py: 100/100 (PASS) +2025-11-16 15:20:29 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/handlers/error/logger.py +2025-11-16 15:20:29 | captured_handlers_check | INFO | Handlers check completed for /home/aipass/aipass_core/cortex/apps/handlers/error/logger.py: 100/100 (PASS) +2025-11-16 15:25:09 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 15:36:53 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/discovery.py +2025-11-16 15:36:53 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/registry.py +2025-11-16 15:36:54 | captured_handlers_check | INFO | Checking handler standards for: apps/modules/loader.py +2025-11-16 15:36:55 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/json/json_handler.py +2025-11-16 15:36:55 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/json/json_handler.py: 100/100 (PASS) +2025-11-16 15:36:57 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/discovery/help_display.py +2025-11-16 15:36:57 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/discovery/help_display.py: 50/100 (FAIL) +2025-11-16 15:36:58 | captured_handlers_check | INFO | Checking handler standards for: apps/handlers/registry/registration.py +2025-11-16 15:36:58 | captured_handlers_check | INFO | Handlers check completed for apps/handlers/registry/registration.py: 100/100 (PASS) +2025-11-16 16:06:35 | captured_handlers_check | INFO | Checking handler standards for: aipass_core/prax/apps/prax.py +2025-11-16 16:06:47 | captured_handlers_check | INFO | Checking handler standards for: aipass_core/prax/apps/modules/init_module.py +2025-11-16 16:06:48 | captured_handlers_check | INFO | Checking handler standards for: aipass_core/prax/apps/handlers/logging/monitoring.py +2025-11-16 16:06:48 | captured_handlers_check | INFO | Handlers check completed for aipass_core/prax/apps/handlers/logging/monitoring.py: 100/100 (PASS) +2025-11-16 16:25:43 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py +2025-11-16 16:28:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:28:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:28:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:28:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:28:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:28:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:28:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:28:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:28:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:28:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:28:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:28:41 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:28:41 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:28:41 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:28:41 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:28:41 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:28:41 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:28:41 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:28:41 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:28:41 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:28:41 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:28:41 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:28:54 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:33:29 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:33:30 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:33:30 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:33:30 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:33:30 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:33:30 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:33:30 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:33:30 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:33:30 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:33:30 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:33:30 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:33:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:33:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:33:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:33:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:33:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:33:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:33:34 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:33:35 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:33:35 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:33:35 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:33:35 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:36:40 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:36:46 | captured_handlers_check | INFO | Checking handler standards for: apps/seed.py +2025-11-16 16:37:23 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:37:23 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:37:23 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:37:23 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:37:23 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:37:23 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:37:24 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:37:24 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:37:24 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:37:24 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:37:24 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:37:32 | captured_handlers_check | INFO | Checking handler standards for: apps/seed.py +2025-11-16 16:37:32 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:37:32 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:37:32 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:37:32 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:37:32 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:37:32 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:37:32 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:37:32 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:37:32 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:37:32 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:37:32 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:38:25 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:38:25 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:38:25 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:38:25 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:38:25 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:38:25 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:38:25 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:38:25 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:38:25 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:38:25 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:38:25 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:38:36 | captured_handlers_check | INFO | Checking handler standards for: ai_mail +2025-11-16 16:38:42 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail +2025-11-16 16:38:45 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:38:45 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:38:45 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:38:45 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:38:45 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:38:45 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:38:45 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:38:45 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:38:45 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:38:45 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:38:45 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:38:52 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/modules/email.py +2025-11-16 16:39:11 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:39:11 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:39:11 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:39:11 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:39:11 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:39:12 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:39:12 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:39:12 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:39:12 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:39:12 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:39:12 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:42:43 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:42:43 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:42:43 | captured_handlers_check | INFO | Checking handler standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py diff --git a/src/aipass/seedgo/apps/standards/aipass/logs/imports_check.log.1 b/src/aipass/seedgo/apps/standards/aipass/logs/imports_check.log.1 new file mode 100644 index 00000000..e3e152c6 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/logs/imports_check.log.1 @@ -0,0 +1,362 @@ +2025-11-16 16:53:14 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 16:53:14 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:53:14 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 50/100 (FAIL) +2025-11-16 16:53:14 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:53:14 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:53:14 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:53:14 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 75/100 (PASS) +2025-11-16 16:53:15 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:53:15 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:53:15 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:53:15 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:53:15 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:53:15 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/prax/apps/prax.py: 75/100 (PASS) +2025-11-16 16:53:15 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:53:15 | captured_imports_check | INFO | Imports check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:55:55 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/modules/email.py +2025-11-16 16:55:55 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/modules/email.py: 100/100 (PASS) +2025-11-16 16:55:58 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py +2025-11-16 16:55:58 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py: 100/100 (PASS) +2025-11-16 16:59:20 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:59:20 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 75/100 (PASS) +2025-11-16 16:59:21 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:59:21 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 16:59:21 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:59:21 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 50/100 (FAIL) +2025-11-16 16:59:21 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:59:21 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:59:21 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 75/100 (PASS) +2025-11-16 16:59:21 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:59:21 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:59:21 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:59:21 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:59:21 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:59:21 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/prax/apps/prax.py: 75/100 (PASS) +2025-11-16 16:59:21 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:59:21 | captured_imports_check | INFO | Imports check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:01:35 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:01:35 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:02:32 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:32 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:02:45 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:45 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:02:57 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:57 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:03:23 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:03:23 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:13:17 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:13:17 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:13:17 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:13:17 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:13:18 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:13:18 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 50/100 (FAIL) +2025-11-16 17:13:18 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:13:18 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:13:18 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 75/100 (PASS) +2025-11-16 17:13:18 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:13:18 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:13:18 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:13:18 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:13:18 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:13:18 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/prax/apps/prax.py: 75/100 (PASS) +2025-11-16 17:13:18 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:13:18 | captured_imports_check | INFO | Imports check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:17:06 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:17:06 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:17:06 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:17:06 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 50/100 (FAIL) +2025-11-16 17:17:07 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:17:07 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:17:07 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 75/100 (PASS) +2025-11-16 17:17:07 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:17:07 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:17:07 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:17:07 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:17:07 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:17:07 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/prax/apps/prax.py: 75/100 (PASS) +2025-11-16 17:17:07 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:17:07 | captured_imports_check | INFO | Imports check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:17:36 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:17:36 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:17:36 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:17:36 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 50/100 (FAIL) +2025-11-16 17:17:36 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:17:36 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:17:37 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 75/100 (PASS) +2025-11-16 17:17:37 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:17:37 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:17:37 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:17:37 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:17:37 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:17:37 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/prax/apps/prax.py: 75/100 (PASS) +2025-11-16 17:17:37 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:17:37 | captured_imports_check | INFO | Imports check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:20:35 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:20:35 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:20:35 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:20:35 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 50/100 (FAIL) +2025-11-16 17:20:35 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:20:35 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:20:35 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 75/100 (PASS) +2025-11-16 17:20:35 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:20:35 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:20:35 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:20:35 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:20:35 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:20:35 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/prax/apps/prax.py: 75/100 (PASS) +2025-11-16 17:20:35 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:20:35 | captured_imports_check | INFO | Imports check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:20:38 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:20:38 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:20:38 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:20:38 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:20:38 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:20:38 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 50/100 (FAIL) +2025-11-16 17:20:39 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:20:39 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:20:39 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 75/100 (PASS) +2025-11-16 17:20:39 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:20:39 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:20:39 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:20:39 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:20:39 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:20:39 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/prax/apps/prax.py: 75/100 (PASS) +2025-11-16 17:20:39 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:20:39 | captured_imports_check | INFO | Imports check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:22:25 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:22:25 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:22:25 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:22:25 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 50/100 (FAIL) +2025-11-16 17:22:25 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:22:25 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:22:25 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 75/100 (PASS) +2025-11-16 17:22:25 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:22:25 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:22:25 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:22:25 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:22:25 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:22:25 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/prax/apps/prax.py: 75/100 (PASS) +2025-11-16 17:22:25 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:22:25 | captured_imports_check | INFO | Imports check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:25:00 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/memory_bank.py +2025-11-16 17:25:00 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/memory_bank.py: 100/100 (PASS) +2025-11-16 17:25:02 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:25:02 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:25:04 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py +2025-11-16 17:25:04 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py: 100/100 (PASS) +2025-11-16 17:25:07 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/handlers/tracking/line_counter.py +2025-11-16 17:25:07 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/handlers/tracking/line_counter.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:26:43 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:26:43 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:26:43 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:26:43 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 50/100 (FAIL) +2025-11-16 17:26:43 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:26:43 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:26:43 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 75/100 (PASS) +2025-11-16 17:26:43 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:26:43 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:26:43 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:26:43 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:26:43 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:26:43 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/prax/apps/prax.py: 75/100 (PASS) +2025-11-16 17:26:43 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:26:43 | captured_imports_check | INFO | Imports check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:28:31 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:28:31 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:28:31 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:28:31 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 50/100 (FAIL) +2025-11-16 17:28:31 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:28:31 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:28:31 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 75/100 (PASS) +2025-11-16 17:28:31 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:28:31 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:28:31 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:28:31 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:28:31 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:28:31 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/prax/apps/prax.py: 75/100 (PASS) +2025-11-16 17:28:31 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:28:31 | captured_imports_check | INFO | Imports check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:28:40 | captured_imports_check | INFO | Checking imports standards for: apps/cortex.py +2025-11-16 17:28:40 | captured_imports_check | INFO | Imports check completed for apps/cortex.py: 75/100 (PASS) +2025-11-16 17:28:41 | captured_imports_check | INFO | Checking imports standards for: apps/modules/create_branch.py +2025-11-16 17:28:41 | captured_imports_check | INFO | Imports check completed for apps/modules/create_branch.py: 100/100 (PASS) +2025-11-16 17:28:42 | captured_imports_check | INFO | Checking imports standards for: apps/modules/update_branch.py +2025-11-16 17:28:42 | captured_imports_check | INFO | Imports check completed for apps/modules/update_branch.py: 100/100 (PASS) +2025-11-16 17:28:44 | captured_imports_check | INFO | Checking imports standards for: apps/modules/delete_branch.py +2025-11-16 17:28:44 | captured_imports_check | INFO | Imports check completed for apps/modules/delete_branch.py: 100/100 (PASS) +2025-11-16 17:28:46 | captured_imports_check | INFO | Checking imports standards for: apps/modules/regenerate_template_registry.py +2025-11-16 17:28:46 | captured_imports_check | INFO | Imports check completed for apps/modules/regenerate_template_registry.py: 100/100 (PASS) +2025-11-16 17:28:47 | captured_imports_check | INFO | Checking imports standards for: apps/handlers/json/handler.py +2025-11-16 17:28:47 | captured_imports_check | INFO | Imports check completed for apps/handlers/json/handler.py: 100/100 (PASS) +2025-11-16 17:28:48 | captured_imports_check | INFO | Checking imports standards for: apps/handlers/branch/file_ops.py +2025-11-16 17:28:48 | captured_imports_check | INFO | Imports check completed for apps/handlers/branch/file_ops.py: 100/100 (PASS) +2025-11-16 17:28:49 | captured_imports_check | INFO | Checking imports standards for: apps/handlers/error/logger.py +2025-11-16 17:28:49 | captured_imports_check | INFO | Imports check completed for apps/handlers/error/logger.py: 60/100 (FAIL) +2025-11-16 17:28:50 | captured_imports_check | INFO | Checking imports standards for: apps/handlers/registry/ignore.py +2025-11-16 17:28:50 | captured_imports_check | INFO | Imports check completed for apps/handlers/registry/ignore.py: 100/100 (PASS) +2025-11-16 17:30:19 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:30:19 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:32:29 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:32:29 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:32:31 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:32:32 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:32:36 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:32:36 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:32:40 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:32:40 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:33:04 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/seed/apps/modules/architecture_standard.py +2025-11-16 17:33:04 | captured_imports_check | INFO | Imports check completed for /home/aipass/seed/apps/modules/architecture_standard.py: 100/100 (PASS) +2025-11-16 17:35:06 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:35:06 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:35:08 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py +2025-11-16 17:35:08 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py: 100/100 (PASS) +2025-11-16 17:35:10 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py +2025-11-16 17:35:10 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py: 100/100 (PASS) +2025-11-16 17:36:50 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:36:50 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:36:51 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:36:51 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:37:00 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:37:00 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:37:01 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:37:01 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:38:21 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:38:21 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:39:27 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/seed/apps/modules/architecture_standard.py +2025-11-16 17:39:27 | captured_imports_check | INFO | Imports check completed for /home/aipass/seed/apps/modules/architecture_standard.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:43:57 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:43:57 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-16 17:43:57 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:43:57 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:43:57 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:43:57 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:43:57 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:43:57 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:43:57 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:43:57 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:43:58 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:43:58 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/prax/apps/prax.py: 75/100 (PASS) +2025-11-16 17:43:58 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:43:58 | captured_imports_check | INFO | Imports check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-18 17:51:55 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-18 17:51:55 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-18 17:51:55 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-18 17:51:55 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-18 17:51:55 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-18 17:51:55 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-18 17:51:55 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-18 17:51:55 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-18 17:51:55 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-18 17:51:55 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-18 17:51:55 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/prax/apps/prax.py: 75/100 (PASS) +2025-11-18 17:51:55 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/seed/apps/seed.py +2025-11-18 17:51:55 | captured_imports_check | INFO | Imports check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-18 17:52:01 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-18 17:52:01 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-18 17:52:01 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-18 17:52:01 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-18 17:52:01 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-18 17:52:01 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-18 17:52:01 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-18 17:52:01 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-18 17:52:01 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-18 17:52:01 | captured_imports_check | INFO | Imports check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-18 17:52:01 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/prax/apps/prax.py: 75/100 (PASS) +2025-11-18 17:52:01 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/seed/apps/seed.py +2025-11-18 17:52:01 | captured_imports_check | INFO | Imports check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-18 17:52:07 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-18 17:52:07 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-18 17:52:07 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-18 17:52:07 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/api/apps/api.py: 75/100 (PASS) +2025-11-18 17:52:07 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-18 17:52:07 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-18 17:52:07 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-18 17:52:07 | captured_imports_check | INFO | Imports check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-18 17:52:07 | captured_imports_check | INFO | Checking imports standards for: /home/aipass/aipass_core/cortex/apps/cortex.py diff --git a/src/aipass/seedgo/apps/standards/aipass/logs/json_handler.log.1 b/src/aipass/seedgo/apps/standards/aipass/logs/json_handler.log.1 new file mode 100644 index 00000000..7d443fe3 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/logs/json_handler.log.1 @@ -0,0 +1,420 @@ +2025-11-16 17:43:58 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-16 17:43:58 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-16 17:43:58 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-16 17:43:58 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-17 00:04:09 | captured_json_handler | INFO | Log rotated for seed (keeping 100 most recent entries) +2025-11-17 00:04:25 | captured_json_handler | INFO | Log rotated for seed (keeping 100 most recent entries) +2025-11-17 00:04:56 | captured_json_handler | INFO | Log rotated for seed (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for seed (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:51:55 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for seed (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:01 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:02 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:02 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:02 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:02 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:02 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:52:02 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:52:02 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:02 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:02 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:52:02 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:02 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:02 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:02 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for seed (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for imports_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for architecture_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for naming_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for cli_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for handlers_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for modules_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for documentation_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for json_structure_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for testing_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) +2025-11-18 17:52:07 | captured_json_handler | INFO | Log rotated for error_handling_check (keeping 100 most recent entries) diff --git a/src/aipass/seedgo/apps/standards/aipass/logs/json_structure_check.log.1 b/src/aipass/seedgo/apps/standards/aipass/logs/json_structure_check.log.1 new file mode 100644 index 00000000..831737a2 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/logs/json_structure_check.log.1 @@ -0,0 +1,337 @@ +2025-11-15 21:11:00 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/standards/json_structure_check.py +2025-11-15 21:11:00 | captured_json_structure_check | INFO | JSON structure check completed for apps/handlers/standards/json_structure_check.py: 100/100 (PASS) +2025-11-15 21:14:15 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/standards/testing_check.py +2025-11-15 21:14:15 | captured_json_structure_check | INFO | JSON structure check completed for apps/handlers/standards/testing_check.py: 100/100 (PASS) +2025-11-15 21:15:02 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/memory_bank.py +2025-11-15 21:15:30 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/standards/testing_check.py +2025-11-15 21:15:30 | captured_json_structure_check | INFO | JSON structure check completed for apps/handlers/standards/testing_check.py: 100/100 (PASS) +2025-11-15 21:25:43 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/standards/json_structure_check.py +2025-11-15 21:25:43 | captured_json_structure_check | INFO | JSON structure check completed for apps/handlers/standards/json_structure_check.py: 100/100 (PASS) +2025-11-15 21:25:47 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/standards/architecture_check.py +2025-11-15 21:25:47 | captured_json_structure_check | INFO | JSON structure check completed for apps/handlers/standards/architecture_check.py: 100/100 (PASS) +2025-11-15 21:27:21 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/seed/apps/handlers/standards/modules_check.py +2025-11-15 21:27:21 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/seed/apps/handlers/standards/modules_check.py: 100/100 (PASS) +2025-11-15 21:42:16 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/standards/cli_check.py +2025-11-15 21:42:16 | captured_json_structure_check | INFO | JSON structure check completed for apps/handlers/standards/cli_check.py: 100/100 (PASS) +2025-11-15 21:42:17 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/standards/handlers_check.py +2025-11-15 21:42:17 | captured_json_structure_check | INFO | JSON structure check completed for apps/handlers/standards/handlers_check.py: 100/100 (PASS) +2025-11-15 21:42:35 | captured_json_structure_check | INFO | Checking JSON structure standards for: /tmp/json_check_tests/test_comments.py +2025-11-15 21:42:35 | captured_json_structure_check | INFO | JSON structure check completed for /tmp/json_check_tests/test_comments.py: 0/100 (FAIL) +2025-11-15 21:42:35 | captured_json_structure_check | INFO | Checking JSON structure standards for: /tmp/json_check_tests/test_strings.py +2025-11-15 21:42:35 | captured_json_structure_check | INFO | JSON structure check completed for /tmp/json_check_tests/test_strings.py: 0/100 (FAIL) +2025-11-15 21:42:35 | captured_json_structure_check | INFO | Checking JSON structure standards for: /tmp/json_check_tests/test_docstrings.py +2025-11-15 21:42:35 | captured_json_structure_check | INFO | JSON structure check completed for /tmp/json_check_tests/test_docstrings.py: 0/100 (FAIL) +2025-11-15 21:42:35 | captured_json_structure_check | INFO | Checking JSON structure standards for: /tmp/json_check_tests/test_actual_usage.py +2025-11-15 21:42:35 | captured_json_structure_check | INFO | JSON structure check completed for /tmp/json_check_tests/test_actual_usage.py: 0/100 (FAIL) +2025-11-15 21:42:35 | captured_json_structure_check | INFO | Checking JSON structure standards for: /tmp/json_check_tests/test_type_hints.py +2025-11-15 21:42:35 | captured_json_structure_check | INFO | JSON structure check completed for /tmp/json_check_tests/test_type_hints.py: 100/100 (PASS) +2025-11-15 21:42:35 | captured_json_structure_check | INFO | Checking JSON structure standards for: /tmp/json_check_tests/test_json_handler.py +2025-11-15 21:42:35 | captured_json_structure_check | INFO | JSON structure check completed for /tmp/json_check_tests/test_json_handler.py: 100/100 (PASS) +2025-11-15 21:42:35 | captured_json_structure_check | INFO | Checking JSON structure standards for: /tmp/json_check_tests/test_mixed.py +2025-11-15 21:42:35 | captured_json_structure_check | INFO | JSON structure check completed for /tmp/json_check_tests/test_mixed.py: 0/100 (FAIL) +2025-11-15 21:42:50 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/standards/json_structure_check.py +2025-11-15 21:42:50 | captured_json_structure_check | INFO | JSON structure check completed for apps/handlers/standards/json_structure_check.py: 100/100 (PASS) +2025-11-15 21:43:01 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/seed/apps/handlers/standards/testing_check.py +2025-11-15 21:43:01 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/seed/apps/handlers/standards/testing_check.py: 100/100 (PASS) +2025-11-16 00:12:01 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/standards/naming_check.py +2025-11-16 00:12:31 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/standards_checklist.py +2025-11-16 00:12:43 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/seed.py +2025-11-16 00:12:45 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/json/json_handler.py +2025-11-16 00:12:45 | captured_json_structure_check | INFO | JSON structure check completed for apps/handlers/json/json_handler.py: 0/100 (FAIL) +2025-11-16 00:12:47 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/imports_standard.py +2025-11-16 00:13:13 | captured_json_structure_check | INFO | Checking JSON structure standards for: +2025-11-16 00:13:13 | captured_json_structure_check | INFO | Checking JSON structure standards for: +2025-11-16 00:13:13 | captured_json_structure_check | INFO | Checking JSON structure standards for: +2025-11-16 00:13:13 | captured_json_structure_check | INFO | Checking JSON structure standards for: +2025-11-16 00:13:13 | captured_json_structure_check | INFO | Checking JSON structure standards for: +2025-11-16 00:13:14 | captured_json_structure_check | INFO | Checking JSON structure standards for: +2025-11-16 00:13:14 | captured_json_structure_check | INFO | Checking JSON structure standards for: +2025-11-16 00:13:14 | captured_json_structure_check | INFO | Checking JSON structure standards for: +2025-11-16 00:13:14 | captured_json_structure_check | INFO | Checking JSON structure standards for: +2025-11-16 00:14:07 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/standards/imports_check.py +2025-11-16 00:14:09 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/standards/architecture_check.py +2025-11-16 00:14:11 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/standards/cli_check.py +2025-11-16 00:14:13 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/standards/testing_check.py +2025-11-16 00:14:15 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/standards/json_structure_check.py +2025-11-16 00:33:24 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/handlers/monitor/detector.py +2025-11-16 00:33:24 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/MEMORY_BANK/apps/handlers/monitor/detector.py: 0/100 (FAIL) +2025-11-16 00:34:38 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py +2025-11-16 00:34:38 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py: 0/100 (FAIL) +2025-11-16 00:35:52 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/handlers/vector/embedder.py +2025-11-16 00:37:10 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/handlers/storage/chroma.py +2025-11-16 00:38:30 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 00:46:59 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/seed.py +2025-11-16 00:50:37 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/seed.py +2025-11-16 01:35:06 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/modules/email.py +2025-11-16 01:35:19 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py +2025-11-16 01:35:19 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py: 0/100 (FAIL) +2025-11-16 01:35:20 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/modules/error_monitor.py +2025-11-16 01:35:20 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/modules/local_memory_monitor.py +2025-11-16 01:47:39 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py +2025-11-16 01:47:40 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/modules/local_memory_monitor.py +2025-11-16 01:53:09 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/branch_ping.py +2025-11-16 01:53:10 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/local_memory_monitor.py +2025-11-16 01:53:11 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/error_monitor.py +2025-11-16 01:53:13 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/email.py +2025-11-16 02:01:15 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/local_memory_monitor.py +2025-11-16 02:01:16 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/branch_ping.py +2025-11-16 02:01:18 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/error_monitor.py +2025-11-16 02:01:19 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/email.py +2025-11-16 02:02:52 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/local_memory_monitor.py +2025-11-16 02:02:54 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/branch_ping.py +2025-11-16 02:02:56 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/error_monitor.py +2025-11-16 02:02:58 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/email.py +2025-11-16 02:03:14 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/local_memory_monitor.py +2025-11-16 02:03:16 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/branch_ping.py +2025-11-16 02:03:18 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/error_monitor.py +2025-11-16 02:03:20 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/email.py +2025-11-16 12:44:10 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/modules/comments.py +2025-11-16 12:44:11 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/modules/verify_branch.py +2025-11-16 12:44:24 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 13:26:04 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/models/backup_models.py +2025-11-16 13:26:05 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/utils/system_utils.py +2025-11-16 13:26:06 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/config/config_handler.py +2025-11-16 13:32:40 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/modules/dev_tracking.py +2025-11-16 13:32:41 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/handlers/dev_local/ops.py +2025-11-16 13:32:42 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/handlers/template/ops.py +2025-11-16 13:34:43 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/modules/create_plan.py +2025-11-16 13:34:43 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/modules/delete_plan.py +2025-11-16 13:35:00 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/handlers/plan/create.py +2025-11-16 13:35:39 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/modules/create_plan.py +2025-11-16 13:35:40 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/modules/delete_plan.py +2025-11-16 13:35:45 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/handlers/config/load_config.py +2025-11-16 13:35:45 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/aipass_core/flow/apps/handlers/config/load_config.py: 0/100 (FAIL) +2025-11-16 13:35:46 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/handlers/json/json_ops.py +2025-11-16 13:35:46 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/aipass_core/flow/apps/handlers/json/json_ops.py: 0/100 (FAIL) +2025-11-16 13:35:47 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/handlers/plan/create.py +2025-11-16 13:35:47 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/handlers/plan/validator.py +2025-11-16 13:35:51 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/handlers/plan/resolve_location.py +2025-11-16 13:35:52 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/handlers/plan/command_parser.py +2025-11-16 13:36:20 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 13:36:28 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/api/apps/modules/api_key.py +2025-11-16 13:36:29 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/api/apps/modules/openrouter_client.py +2025-11-16 13:36:29 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/api/apps/modules/usage_tracker.py +2025-11-16 14:07:18 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py +2025-11-16 14:07:19 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/modules/integrations.py +2025-11-16 14:07:20 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/operations/file_operations.py +2025-11-16 14:12:11 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py +2025-11-16 14:12:13 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/modules/integrations.py +2025-11-16 14:12:14 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/models/backup_models.py +2025-11-16 14:12:16 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/operations/file_operations.py +2025-11-16 14:12:17 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/diff/diff_generator.py +2025-11-16 14:12:29 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py +2025-11-16 14:12:30 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/modules/integrations.py +2025-11-16 14:12:32 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/models/backup_models.py +2025-11-16 14:12:33 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/utils/system_utils.py +2025-11-16 14:12:35 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/config/config_handler.py +2025-11-16 14:15:20 | captured_json_structure_check | INFO | Checking JSON structure standards for: +2025-11-16 14:15:20 | captured_json_structure_check | INFO | Checking JSON structure standards for: +2025-11-16 14:15:20 | captured_json_structure_check | INFO | Checking JSON structure standards for: +2025-11-16 14:15:20 | captured_json_structure_check | INFO | Checking JSON structure standards for: +2025-11-16 14:15:21 | captured_json_structure_check | INFO | Checking JSON structure standards for: +2025-11-16 14:18:59 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/create_plan.py +2025-11-16 14:19:04 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/delete_plan.py +2025-11-16 14:19:07 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/modules/delete_plan.py +2025-11-16 14:24:07 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/modules/create_plan.py +2025-11-16 14:24:09 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/modules/delete_plan.py +2025-11-16 14:39:06 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 14:46:59 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/config/config_handler.py +2025-11-16 14:47:01 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/models/backup_models.py +2025-11-16 14:47:03 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/utils/system_utils.py +2025-11-16 14:47:05 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/operations/file_operations.py +2025-11-16 14:49:56 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/drone.py +2025-11-16 14:50:11 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/discovery.py +2025-11-16 14:50:11 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/registry.py +2025-11-16 14:50:12 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/loader.py +2025-11-16 14:50:12 | captured_json_structure_check | INFO | JSON structure check completed for apps/modules/loader.py: 0/100 (FAIL) +2025-11-16 14:50:27 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/json/json_handler.py +2025-11-16 14:50:27 | captured_json_structure_check | INFO | JSON structure check completed for apps/handlers/json/json_handler.py: 0/100 (FAIL) +2025-11-16 14:50:27 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/discovery/help_display.py +2025-11-16 14:50:28 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/registry/status_display.py +2025-11-16 14:50:36 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/registry/registration.py +2025-11-16 14:54:54 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 14:54:54 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/modules/create_branch.py +2025-11-16 14:54:55 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/modules/update_branch.py +2025-11-16 14:54:56 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/modules/delete_branch.py +2025-11-16 14:54:57 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/modules/regenerate_template_registry.py +2025-11-16 14:54:57 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/aipass_core/cortex/apps/modules/regenerate_template_registry.py: 0/100 (FAIL) +2025-11-16 14:55:05 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py +2025-11-16 14:55:05 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py: 0/100 (FAIL) +2025-11-16 14:55:05 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py +2025-11-16 14:55:05 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py: 0/100 (FAIL) +2025-11-16 14:55:06 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/handlers/error/logger.py +2025-11-16 14:55:06 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/aipass_core/cortex/apps/handlers/error/logger.py: 0/100 (FAIL) +2025-11-16 14:55:07 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/handlers/registry/ignore.py +2025-11-16 14:55:07 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/aipass_core/cortex/apps/handlers/registry/ignore.py: 0/100 (FAIL) +2025-11-16 14:55:09 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/json/json_handler.py +2025-11-16 14:55:09 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/aipass_core/backup_system/apps/handlers/json/json_handler.py: 0/100 (FAIL) +2025-11-16 14:55:25 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py +2025-11-16 14:55:26 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/modules/integrations.py +2025-11-16 14:55:28 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/diff/diff_generator.py +2025-11-16 14:55:30 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/diff/version_manager.py +2025-11-16 14:55:33 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/handlers/diff/vscode_integration.py +2025-11-16 15:16:15 | captured_json_structure_check | INFO | Checking JSON structure standards for: aipass_core/prax/apps/prax.py +2025-11-16 15:16:22 | captured_json_structure_check | INFO | Checking JSON structure standards for: aipass_core/prax/apps/modules/logger.py +2025-11-16 15:16:23 | captured_json_structure_check | INFO | Checking JSON structure standards for: aipass_core/prax/apps/handlers/json/json_handler.py +2025-11-16 15:16:23 | captured_json_structure_check | INFO | JSON structure check completed for aipass_core/prax/apps/handlers/json/json_handler.py: 0/100 (FAIL) +2025-11-16 15:16:31 | captured_json_structure_check | INFO | Checking JSON structure standards for: aipass_core/prax/apps/modules/init_module.py +2025-11-16 15:16:32 | captured_json_structure_check | INFO | Checking JSON structure standards for: aipass_core/prax/apps/handlers/logging/monitoring.py +2025-11-16 15:20:27 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 15:20:28 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/modules/create_branch.py +2025-11-16 15:20:28 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py +2025-11-16 15:20:28 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py: 0/100 (FAIL) +2025-11-16 15:20:29 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/handlers/error/logger.py +2025-11-16 15:20:29 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/aipass_core/cortex/apps/handlers/error/logger.py: 0/100 (FAIL) +2025-11-16 15:25:09 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 15:25:09 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 15:36:53 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/discovery.py +2025-11-16 15:36:53 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/registry.py +2025-11-16 15:36:54 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/modules/loader.py +2025-11-16 15:36:54 | captured_json_structure_check | INFO | JSON structure check completed for apps/modules/loader.py: 100/100 (PASS) +2025-11-16 15:36:55 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/json/json_handler.py +2025-11-16 15:36:55 | captured_json_structure_check | INFO | JSON structure check completed for apps/handlers/json/json_handler.py: 0/100 (FAIL) +2025-11-16 15:36:57 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/discovery/help_display.py +2025-11-16 15:36:58 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/handlers/registry/registration.py +2025-11-16 16:06:35 | captured_json_structure_check | INFO | Checking JSON structure standards for: aipass_core/prax/apps/prax.py +2025-11-16 16:06:47 | captured_json_structure_check | INFO | Checking JSON structure standards for: aipass_core/prax/apps/modules/init_module.py +2025-11-16 16:06:48 | captured_json_structure_check | INFO | Checking JSON structure standards for: aipass_core/prax/apps/handlers/logging/monitoring.py +2025-11-16 16:25:43 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py +2025-11-16 16:25:44 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py: 0/100 (FAIL) +2025-11-16 16:28:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:28:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:28:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:28:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:28:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:28:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:28:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:28:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:28:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:28:34 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:28:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:28:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:28:41 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:28:41 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:28:41 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:28:41 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:28:41 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:28:41 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:28:41 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:28:41 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:28:41 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:28:41 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:28:41 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:28:41 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:28:54 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:28:54 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:33:29 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:33:30 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:33:30 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:33:30 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:33:30 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:33:30 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:33:30 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:33:30 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:33:30 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:33:30 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:33:30 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:33:30 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:33:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:33:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:33:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:33:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:33:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:33:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:33:34 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:33:35 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:33:35 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:33:35 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:33:35 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:33:35 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:36:40 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:36:46 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/seed.py +2025-11-16 16:37:23 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:37:23 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:37:23 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:37:23 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:37:23 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:37:24 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:37:24 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:37:24 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:37:24 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:37:24 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:37:24 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:37:24 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:37:32 | captured_json_structure_check | INFO | Checking JSON structure standards for: apps/seed.py +2025-11-16 16:37:32 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:37:32 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:37:32 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:37:32 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:37:32 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:37:32 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:37:32 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:37:32 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:37:32 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:37:32 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:37:32 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:37:32 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:38:25 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:38:25 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:38:25 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:38:25 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:38:25 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:38:25 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:38:25 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:38:25 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:38:25 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:38:25 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:38:25 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:38:25 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:38:36 | captured_json_structure_check | INFO | Checking JSON structure standards for: ai_mail +2025-11-16 16:38:42 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail +2025-11-16 16:38:45 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:38:45 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:38:45 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:38:45 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:38:45 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:38:45 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:38:45 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:38:45 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:38:45 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:38:45 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:38:45 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:38:45 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:38:52 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/modules/email.py +2025-11-16 16:39:11 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:39:11 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:39:11 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:39:11 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:39:11 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:39:12 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:39:12 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:39:12 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:39:12 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:39:12 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:39:12 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:39:12 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:42:43 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:42:43 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:42:43 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:42:43 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:42:43 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:42:43 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:42:43 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:42:43 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:42:43 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:42:43 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) +2025-11-16 16:42:43 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:42:43 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:42:55 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:42:55 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:42:55 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:42:55 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:42:55 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:42:55 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:42:55 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:42:55 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:42:55 | captured_json_structure_check | INFO | Checking JSON structure standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:42:55 | captured_json_structure_check | INFO | JSON structure check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 0/100 (FAIL) diff --git a/src/aipass/seedgo/apps/standards/aipass/logs/modules_check.log.1 b/src/aipass/seedgo/apps/standards/aipass/logs/modules_check.log.1 new file mode 100644 index 00000000..864d9f25 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/logs/modules_check.log.1 @@ -0,0 +1,372 @@ +2025-11-15 20:59:45 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/modules_check.py +2025-11-15 20:59:52 | captured_modules_check | INFO | Checking module standards for: apps/modules/standards_checklist.py +2025-11-15 20:59:52 | captured_modules_check | INFO | Modules check completed for apps/modules/standards_checklist.py: 66/100 (FAIL) +2025-11-15 21:00:49 | captured_modules_check | INFO | Checking module standards for: apps/modules/standards_checklist.py +2025-11-15 21:00:49 | captured_modules_check | INFO | Modules check completed for apps/modules/standards_checklist.py: 100/100 (PASS) +2025-11-15 21:00:58 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/modules_check.py +2025-11-15 21:05:13 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/documentation_check.py +2025-11-15 21:11:00 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/json_structure_check.py +2025-11-15 21:14:15 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/testing_check.py +2025-11-15 21:15:02 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/memory_bank.py +2025-11-15 21:15:30 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/testing_check.py +2025-11-15 21:25:43 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/json_structure_check.py +2025-11-15 21:25:47 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/architecture_check.py +2025-11-15 21:26:13 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/handlers/standards/modules_check.py +2025-11-15 21:26:21 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/modules/standards_checklist.py +2025-11-15 21:26:21 | captured_modules_check | INFO | Modules check completed for /home/aipass/seed/apps/modules/standards_checklist.py: 100/100 (PASS) +2025-11-15 21:27:42 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/modules/standards_checklist.py +2025-11-15 21:27:42 | captured_modules_check | INFO | Modules check completed for /home/aipass/seed/apps/modules/standards_checklist.py: 100/100 (PASS) +2025-11-15 21:27:42 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/handlers/json/json_handler.py +2025-11-15 21:27:42 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/handlers/standards/modules_check.py +2025-11-15 21:27:42 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/prax/apps/modules/logger.py +2025-11-15 21:27:42 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/prax/apps/modules/logger.py: 66/100 (FAIL) +2025-11-15 21:27:51 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/prax/apps/modules/logger.py +2025-11-15 21:27:51 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/prax/apps/modules/logger.py: 66/100 (FAIL) +2025-11-15 21:28:09 | captured_modules_check | INFO | Checking module standards for: /tmp/test_init.py +2025-11-15 21:28:09 | captured_modules_check | INFO | Checking module standards for: /tmp/test_modules/__init__.py +2025-11-15 21:42:16 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/cli_check.py +2025-11-15 21:42:17 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/handlers_check.py +2025-11-15 21:42:50 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/json_structure_check.py +2025-11-15 21:43:01 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/handlers/standards/testing_check.py +2025-11-16 00:12:01 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/naming_check.py +2025-11-16 00:12:31 | captured_modules_check | INFO | Checking module standards for: apps/modules/standards_checklist.py +2025-11-16 00:12:31 | captured_modules_check | INFO | Modules check completed for apps/modules/standards_checklist.py: 66/100 (FAIL) +2025-11-16 00:12:43 | captured_modules_check | INFO | Checking module standards for: apps/seed.py +2025-11-16 00:12:45 | captured_modules_check | INFO | Checking module standards for: apps/handlers/json/json_handler.py +2025-11-16 00:12:47 | captured_modules_check | INFO | Checking module standards for: apps/modules/imports_standard.py +2025-11-16 00:12:47 | captured_modules_check | INFO | Modules check completed for apps/modules/imports_standard.py: 66/100 (FAIL) +2025-11-16 00:13:12 | captured_modules_check | INFO | Checking module standards for: +2025-11-16 00:13:13 | captured_modules_check | INFO | Checking module standards for: +2025-11-16 00:13:13 | captured_modules_check | INFO | Checking module standards for: +2025-11-16 00:13:13 | captured_modules_check | INFO | Checking module standards for: +2025-11-16 00:13:13 | captured_modules_check | INFO | Checking module standards for: +2025-11-16 00:13:14 | captured_modules_check | INFO | Checking module standards for: +2025-11-16 00:13:14 | captured_modules_check | INFO | Checking module standards for: +2025-11-16 00:13:14 | captured_modules_check | INFO | Checking module standards for: +2025-11-16 00:13:14 | captured_modules_check | INFO | Checking module standards for: +2025-11-16 00:14:07 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/imports_check.py +2025-11-16 00:14:09 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/architecture_check.py +2025-11-16 00:14:11 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/cli_check.py +2025-11-16 00:14:13 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/testing_check.py +2025-11-16 00:14:15 | captured_modules_check | INFO | Checking module standards for: apps/handlers/standards/json_structure_check.py +2025-11-16 00:33:24 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/handlers/monitor/detector.py +2025-11-16 00:34:38 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py +2025-11-16 00:35:52 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/handlers/vector/embedder.py +2025-11-16 00:37:10 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/handlers/storage/chroma.py +2025-11-16 00:38:30 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 00:38:30 | captured_modules_check | INFO | Modules check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 00:46:59 | captured_modules_check | INFO | Checking module standards for: apps/seed.py +2025-11-16 00:50:37 | captured_modules_check | INFO | Checking module standards for: apps/seed.py +2025-11-16 01:35:06 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/modules/email.py +2025-11-16 01:35:06 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/ai_mail/apps/modules/email.py: 100/100 (PASS) +2025-11-16 01:35:19 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py +2025-11-16 01:35:19 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py: 100/100 (PASS) +2025-11-16 01:35:19 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/modules/error_monitor.py +2025-11-16 01:35:19 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/ai_mail/apps/modules/error_monitor.py: 100/100 (PASS) +2025-11-16 01:35:20 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/modules/local_memory_monitor.py +2025-11-16 01:35:20 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/ai_mail/apps/modules/local_memory_monitor.py: 100/100 (PASS) +2025-11-16 01:47:39 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py +2025-11-16 01:47:39 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py: 100/100 (PASS) +2025-11-16 01:47:40 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/modules/local_memory_monitor.py +2025-11-16 01:47:40 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/ai_mail/apps/modules/local_memory_monitor.py: 100/100 (PASS) +2025-11-16 01:53:09 | captured_modules_check | INFO | Checking module standards for: apps/modules/branch_ping.py +2025-11-16 01:53:09 | captured_modules_check | INFO | Modules check completed for apps/modules/branch_ping.py: 100/100 (PASS) +2025-11-16 01:53:10 | captured_modules_check | INFO | Checking module standards for: apps/modules/local_memory_monitor.py +2025-11-16 01:53:10 | captured_modules_check | INFO | Modules check completed for apps/modules/local_memory_monitor.py: 100/100 (PASS) +2025-11-16 01:53:11 | captured_modules_check | INFO | Checking module standards for: apps/modules/error_monitor.py +2025-11-16 01:53:11 | captured_modules_check | INFO | Modules check completed for apps/modules/error_monitor.py: 100/100 (PASS) +2025-11-16 01:53:13 | captured_modules_check | INFO | Checking module standards for: apps/modules/email.py +2025-11-16 01:53:13 | captured_modules_check | INFO | Modules check completed for apps/modules/email.py: 100/100 (PASS) +2025-11-16 02:01:15 | captured_modules_check | INFO | Checking module standards for: apps/modules/local_memory_monitor.py +2025-11-16 02:01:15 | captured_modules_check | INFO | Modules check completed for apps/modules/local_memory_monitor.py: 100/100 (PASS) +2025-11-16 02:01:16 | captured_modules_check | INFO | Checking module standards for: apps/modules/branch_ping.py +2025-11-16 02:01:16 | captured_modules_check | INFO | Modules check completed for apps/modules/branch_ping.py: 100/100 (PASS) +2025-11-16 02:01:18 | captured_modules_check | INFO | Checking module standards for: apps/modules/error_monitor.py +2025-11-16 02:01:18 | captured_modules_check | INFO | Modules check completed for apps/modules/error_monitor.py: 100/100 (PASS) +2025-11-16 02:01:19 | captured_modules_check | INFO | Checking module standards for: apps/modules/email.py +2025-11-16 02:01:19 | captured_modules_check | INFO | Modules check completed for apps/modules/email.py: 100/100 (PASS) +2025-11-16 02:02:52 | captured_modules_check | INFO | Checking module standards for: apps/modules/local_memory_monitor.py +2025-11-16 02:02:52 | captured_modules_check | INFO | Modules check completed for apps/modules/local_memory_monitor.py: 100/100 (PASS) +2025-11-16 02:02:54 | captured_modules_check | INFO | Checking module standards for: apps/modules/branch_ping.py +2025-11-16 02:02:54 | captured_modules_check | INFO | Modules check completed for apps/modules/branch_ping.py: 100/100 (PASS) +2025-11-16 02:02:56 | captured_modules_check | INFO | Checking module standards for: apps/modules/error_monitor.py +2025-11-16 02:02:56 | captured_modules_check | INFO | Modules check completed for apps/modules/error_monitor.py: 100/100 (PASS) +2025-11-16 02:02:58 | captured_modules_check | INFO | Checking module standards for: apps/modules/email.py +2025-11-16 02:02:58 | captured_modules_check | INFO | Modules check completed for apps/modules/email.py: 100/100 (PASS) +2025-11-16 02:03:14 | captured_modules_check | INFO | Checking module standards for: apps/modules/local_memory_monitor.py +2025-11-16 02:03:14 | captured_modules_check | INFO | Modules check completed for apps/modules/local_memory_monitor.py: 100/100 (PASS) +2025-11-16 02:03:16 | captured_modules_check | INFO | Checking module standards for: apps/modules/branch_ping.py +2025-11-16 02:03:16 | captured_modules_check | INFO | Modules check completed for apps/modules/branch_ping.py: 100/100 (PASS) +2025-11-16 02:03:18 | captured_modules_check | INFO | Checking module standards for: apps/modules/error_monitor.py +2025-11-16 02:03:18 | captured_modules_check | INFO | Modules check completed for apps/modules/error_monitor.py: 100/100 (PASS) +2025-11-16 02:03:20 | captured_modules_check | INFO | Checking module standards for: apps/modules/email.py +2025-11-16 02:03:20 | captured_modules_check | INFO | Modules check completed for apps/modules/email.py: 100/100 (PASS) +2025-11-16 12:44:10 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/modules/comments.py +2025-11-16 12:44:10 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/devpulse/apps/modules/comments.py: 66/100 (FAIL) +2025-11-16 12:44:11 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/modules/verify_branch.py +2025-11-16 12:44:11 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/devpulse/apps/modules/verify_branch.py: 66/100 (FAIL) +2025-11-16 12:44:24 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 13:26:04 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/models/backup_models.py +2025-11-16 13:26:05 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/utils/system_utils.py +2025-11-16 13:26:06 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/config/config_handler.py +2025-11-16 13:32:40 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/modules/dev_tracking.py +2025-11-16 13:32:40 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/devpulse/apps/modules/dev_tracking.py: 100/100 (PASS) +2025-11-16 13:32:41 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/handlers/dev_local/ops.py +2025-11-16 13:32:42 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/handlers/template/ops.py +2025-11-16 13:34:43 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/modules/create_plan.py +2025-11-16 13:34:43 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/flow/apps/modules/create_plan.py: 100/100 (PASS) +2025-11-16 13:34:43 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/modules/delete_plan.py +2025-11-16 13:34:43 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/flow/apps/modules/delete_plan.py: 100/100 (PASS) +2025-11-16 13:35:00 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/handlers/plan/create.py +2025-11-16 13:35:39 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/modules/create_plan.py +2025-11-16 13:35:39 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/flow/apps/modules/create_plan.py: 100/100 (PASS) +2025-11-16 13:35:40 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/modules/delete_plan.py +2025-11-16 13:35:40 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/flow/apps/modules/delete_plan.py: 100/100 (PASS) +2025-11-16 13:35:45 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/handlers/config/load_config.py +2025-11-16 13:35:46 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/handlers/json/json_ops.py +2025-11-16 13:35:47 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/handlers/plan/create.py +2025-11-16 13:35:47 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/handlers/plan/validator.py +2025-11-16 13:35:51 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/handlers/plan/resolve_location.py +2025-11-16 13:35:52 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/handlers/plan/command_parser.py +2025-11-16 13:36:20 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 13:36:28 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/api/apps/modules/api_key.py +2025-11-16 13:36:28 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/api/apps/modules/api_key.py: 100/100 (PASS) +2025-11-16 13:36:29 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/api/apps/modules/openrouter_client.py +2025-11-16 13:36:29 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/api/apps/modules/openrouter_client.py: 66/100 (FAIL) +2025-11-16 13:36:29 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/api/apps/modules/usage_tracker.py +2025-11-16 13:36:29 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/api/apps/modules/usage_tracker.py: 66/100 (FAIL) +2025-11-16 14:07:18 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py +2025-11-16 14:07:18 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py: 66/100 (FAIL) +2025-11-16 14:07:19 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/modules/integrations.py +2025-11-16 14:07:19 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/backup_system/apps/modules/integrations.py: 66/100 (FAIL) +2025-11-16 14:07:20 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/operations/file_operations.py +2025-11-16 14:12:11 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py +2025-11-16 14:12:11 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py: 100/100 (PASS) +2025-11-16 14:12:13 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/modules/integrations.py +2025-11-16 14:12:13 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/backup_system/apps/modules/integrations.py: 100/100 (PASS) +2025-11-16 14:12:14 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/models/backup_models.py +2025-11-16 14:12:16 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/operations/file_operations.py +2025-11-16 14:12:17 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/diff/diff_generator.py +2025-11-16 14:12:29 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py +2025-11-16 14:12:29 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py: 100/100 (PASS) +2025-11-16 14:12:30 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/modules/integrations.py +2025-11-16 14:12:30 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/backup_system/apps/modules/integrations.py: 100/100 (PASS) +2025-11-16 14:12:32 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/models/backup_models.py +2025-11-16 14:12:33 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/utils/system_utils.py +2025-11-16 14:12:35 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/config/config_handler.py +2025-11-16 14:15:20 | captured_modules_check | INFO | Checking module standards for: +2025-11-16 14:15:20 | captured_modules_check | INFO | Checking module standards for: +2025-11-16 14:15:20 | captured_modules_check | INFO | Checking module standards for: +2025-11-16 14:15:20 | captured_modules_check | INFO | Checking module standards for: +2025-11-16 14:15:20 | captured_modules_check | INFO | Checking module standards for: +2025-11-16 14:18:59 | captured_modules_check | INFO | Checking module standards for: apps/modules/create_plan.py +2025-11-16 14:18:59 | captured_modules_check | INFO | Modules check completed for apps/modules/create_plan.py: 66/100 (FAIL) +2025-11-16 14:19:04 | captured_modules_check | INFO | Checking module standards for: apps/modules/delete_plan.py +2025-11-16 14:19:07 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/modules/delete_plan.py +2025-11-16 14:19:07 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/flow/apps/modules/delete_plan.py: 66/100 (FAIL) +2025-11-16 14:24:07 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/modules/create_plan.py +2025-11-16 14:24:07 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/flow/apps/modules/create_plan.py: 66/100 (FAIL) +2025-11-16 14:24:09 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/modules/delete_plan.py +2025-11-16 14:24:09 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/flow/apps/modules/delete_plan.py: 66/100 (FAIL) +2025-11-16 14:39:06 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 14:46:59 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/config/config_handler.py +2025-11-16 14:47:01 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/models/backup_models.py +2025-11-16 14:47:03 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/utils/system_utils.py +2025-11-16 14:47:05 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/operations/file_operations.py +2025-11-16 14:49:56 | captured_modules_check | INFO | Checking module standards for: apps/drone.py +2025-11-16 14:50:11 | captured_modules_check | INFO | Checking module standards for: apps/modules/discovery.py +2025-11-16 14:50:11 | captured_modules_check | INFO | Modules check completed for apps/modules/discovery.py: 100/100 (PASS) +2025-11-16 14:50:11 | captured_modules_check | INFO | Checking module standards for: apps/modules/registry.py +2025-11-16 14:50:11 | captured_modules_check | INFO | Modules check completed for apps/modules/registry.py: 100/100 (PASS) +2025-11-16 14:50:12 | captured_modules_check | INFO | Checking module standards for: apps/modules/loader.py +2025-11-16 14:50:12 | captured_modules_check | INFO | Modules check completed for apps/modules/loader.py: 66/100 (FAIL) +2025-11-16 14:50:27 | captured_modules_check | INFO | Checking module standards for: apps/handlers/json/json_handler.py +2025-11-16 14:50:27 | captured_modules_check | INFO | Checking module standards for: apps/handlers/discovery/help_display.py +2025-11-16 14:50:28 | captured_modules_check | INFO | Checking module standards for: apps/handlers/registry/status_display.py +2025-11-16 14:50:36 | captured_modules_check | INFO | Checking module standards for: apps/handlers/registry/registration.py +2025-11-16 14:54:54 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 14:54:54 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/modules/create_branch.py +2025-11-16 14:54:54 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/cortex/apps/modules/create_branch.py: 66/100 (FAIL) +2025-11-16 14:54:55 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/modules/update_branch.py +2025-11-16 14:54:55 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/cortex/apps/modules/update_branch.py: 66/100 (FAIL) +2025-11-16 14:54:56 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/modules/delete_branch.py +2025-11-16 14:54:56 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/cortex/apps/modules/delete_branch.py: 66/100 (FAIL) +2025-11-16 14:54:57 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/modules/regenerate_template_registry.py +2025-11-16 14:54:57 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/cortex/apps/modules/regenerate_template_registry.py: 33/100 (FAIL) +2025-11-16 14:55:05 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py +2025-11-16 14:55:05 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py +2025-11-16 14:55:06 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/handlers/error/logger.py +2025-11-16 14:55:07 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/handlers/registry/ignore.py +2025-11-16 14:55:09 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/json/json_handler.py +2025-11-16 14:55:25 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py +2025-11-16 14:55:25 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py: 100/100 (PASS) +2025-11-16 14:55:26 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/modules/integrations.py +2025-11-16 14:55:26 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/backup_system/apps/modules/integrations.py: 100/100 (PASS) +2025-11-16 14:55:28 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/diff/diff_generator.py +2025-11-16 14:55:30 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/diff/version_manager.py +2025-11-16 14:55:33 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/handlers/diff/vscode_integration.py +2025-11-16 15:16:15 | captured_modules_check | INFO | Checking module standards for: aipass_core/prax/apps/prax.py +2025-11-16 15:16:22 | captured_modules_check | INFO | Checking module standards for: aipass_core/prax/apps/modules/logger.py +2025-11-16 15:16:22 | captured_modules_check | INFO | Modules check completed for aipass_core/prax/apps/modules/logger.py: 66/100 (FAIL) +2025-11-16 15:16:23 | captured_modules_check | INFO | Checking module standards for: aipass_core/prax/apps/handlers/json/json_handler.py +2025-11-16 15:16:31 | captured_modules_check | INFO | Checking module standards for: aipass_core/prax/apps/modules/init_module.py +2025-11-16 15:16:31 | captured_modules_check | INFO | Modules check completed for aipass_core/prax/apps/modules/init_module.py: 100/100 (PASS) +2025-11-16 15:16:32 | captured_modules_check | INFO | Checking module standards for: aipass_core/prax/apps/handlers/logging/monitoring.py +2025-11-16 15:20:27 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 15:20:28 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/modules/create_branch.py +2025-11-16 15:20:28 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/cortex/apps/modules/create_branch.py: 66/100 (FAIL) +2025-11-16 15:20:28 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py +2025-11-16 15:20:29 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/handlers/error/logger.py +2025-11-16 15:25:09 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 15:25:09 | captured_modules_check | INFO | Modules check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 15:36:53 | captured_modules_check | INFO | Checking module standards for: apps/modules/discovery.py +2025-11-16 15:36:53 | captured_modules_check | INFO | Modules check completed for apps/modules/discovery.py: 100/100 (PASS) +2025-11-16 15:36:53 | captured_modules_check | INFO | Checking module standards for: apps/modules/registry.py +2025-11-16 15:36:53 | captured_modules_check | INFO | Modules check completed for apps/modules/registry.py: 100/100 (PASS) +2025-11-16 15:36:54 | captured_modules_check | INFO | Checking module standards for: apps/modules/loader.py +2025-11-16 15:36:54 | captured_modules_check | INFO | Modules check completed for apps/modules/loader.py: 100/100 (PASS) +2025-11-16 15:36:55 | captured_modules_check | INFO | Checking module standards for: apps/handlers/json/json_handler.py +2025-11-16 15:36:57 | captured_modules_check | INFO | Checking module standards for: apps/handlers/discovery/help_display.py +2025-11-16 15:36:58 | captured_modules_check | INFO | Checking module standards for: apps/handlers/registry/registration.py +2025-11-16 16:06:35 | captured_modules_check | INFO | Checking module standards for: aipass_core/prax/apps/prax.py +2025-11-16 16:06:47 | captured_modules_check | INFO | Checking module standards for: aipass_core/prax/apps/modules/init_module.py +2025-11-16 16:06:47 | captured_modules_check | INFO | Modules check completed for aipass_core/prax/apps/modules/init_module.py: 100/100 (PASS) +2025-11-16 16:06:48 | captured_modules_check | INFO | Checking module standards for: aipass_core/prax/apps/handlers/logging/monitoring.py +2025-11-16 16:25:43 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py +2025-11-16 16:25:43 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py: 33/100 (FAIL) +2025-11-16 16:28:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:28:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:28:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:28:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:28:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:28:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:28:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:28:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:28:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:28:34 | captured_modules_check | INFO | Modules check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:28:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:28:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:28:41 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:28:41 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:28:41 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:28:41 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:28:41 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:28:41 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:28:41 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:28:41 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:28:41 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:28:41 | captured_modules_check | INFO | Modules check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:28:41 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:28:41 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:28:54 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:28:54 | captured_modules_check | INFO | Modules check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:33:29 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:33:30 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:33:30 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:33:30 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:33:30 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:33:30 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:33:30 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:33:30 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:33:30 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:33:30 | captured_modules_check | INFO | Modules check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:33:30 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:33:30 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:33:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:33:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:33:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:33:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:33:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:33:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:33:34 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:33:35 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:33:35 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:33:35 | captured_modules_check | INFO | Modules check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:33:35 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:33:35 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:36:40 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:36:46 | captured_modules_check | INFO | Checking module standards for: apps/seed.py +2025-11-16 16:37:23 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:37:23 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:37:23 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:37:23 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:37:23 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:37:23 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:37:24 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:37:24 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:37:24 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:37:24 | captured_modules_check | INFO | Modules check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:37:24 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:37:24 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:37:32 | captured_modules_check | INFO | Checking module standards for: apps/seed.py +2025-11-16 16:37:32 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:37:32 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:37:32 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:37:32 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:37:32 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:37:32 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:37:32 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:37:32 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:37:32 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:37:32 | captured_modules_check | INFO | Modules check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:37:32 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:38:25 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:38:25 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:38:25 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:38:25 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:38:25 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:38:25 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:38:25 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:38:25 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:38:25 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:38:25 | captured_modules_check | INFO | Modules check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:38:25 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:38:36 | captured_modules_check | INFO | Checking module standards for: ai_mail +2025-11-16 16:38:42 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail +2025-11-16 16:38:45 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:38:45 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:38:45 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:38:45 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:38:45 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:38:45 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:38:45 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:38:45 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:38:45 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:38:45 | captured_modules_check | INFO | Modules check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:38:45 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:38:52 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/modules/email.py +2025-11-16 16:38:52 | captured_modules_check | INFO | Modules check completed for /home/aipass/aipass_core/ai_mail/apps/modules/email.py: 100/100 (PASS) +2025-11-16 16:39:11 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:39:11 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:39:11 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:39:11 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:39:11 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:39:12 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:39:12 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:39:12 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:39:12 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:39:12 | captured_modules_check | INFO | Modules check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:39:12 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:39:12 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:42:43 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:42:43 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:42:43 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:42:43 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:42:43 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:42:43 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:42:43 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:42:43 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:42:43 | captured_modules_check | INFO | Checking module standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:42:43 | captured_modules_check | INFO | Modules check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:42:43 | captured_modules_check | INFO | Checking module standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:42:55 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:42:55 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:42:55 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:42:55 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:42:55 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:42:55 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:42:55 | captured_modules_check | INFO | Checking module standards for: /home/aipass/aipass_core/drone/apps/drone.py diff --git a/src/aipass/seedgo/apps/standards/aipass/logs/naming_check.log.1 b/src/aipass/seedgo/apps/standards/aipass/logs/naming_check.log.1 new file mode 100644 index 00000000..58f5c125 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/logs/naming_check.log.1 @@ -0,0 +1,367 @@ +2025-11-16 16:53:15 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:53:15 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 16:53:15 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:53:15 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-16 16:53:15 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:53:15 | captured_naming_check | INFO | Naming check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:55:55 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/modules/email.py +2025-11-16 16:55:55 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/modules/email.py: 100/100 (PASS) +2025-11-16 16:55:58 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py +2025-11-16 16:55:58 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py: 100/100 (PASS) +2025-11-16 16:59:20 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:59:20 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:59:21 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:59:21 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:59:21 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 16:59:21 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:59:21 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 16:59:21 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:59:21 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:59:21 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:59:21 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:59:21 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 16:59:21 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:59:21 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-16 16:59:21 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:59:21 | captured_naming_check | INFO | Naming check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:01:35 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:01:35 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:02:32 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:32 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:02:45 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:45 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:02:57 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:57 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:03:23 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:03:23 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:13:17 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:13:17 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:13:17 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:13:17 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:13:18 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:13:18 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 17:13:18 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:13:18 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 17:13:18 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:13:18 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:13:18 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:13:18 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:13:18 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:13:18 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:13:18 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-16 17:13:18 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:13:18 | captured_naming_check | INFO | Naming check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:17:06 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:17:06 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:17:06 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:17:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 17:17:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:17:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 17:17:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:17:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:17:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:17:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:17:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:17:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:17:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-16 17:17:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:17:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:17:36 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:17:36 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:17:36 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:17:36 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:17:36 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 17:17:37 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:17:37 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 17:17:37 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:17:37 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:17:37 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:17:37 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:17:37 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:17:37 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:17:37 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:17:37 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-16 17:17:37 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:17:37 | captured_naming_check | INFO | Naming check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:20:35 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:20:35 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:20:35 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:20:35 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 17:20:35 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:20:35 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 17:20:35 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:20:35 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:20:35 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:20:35 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:20:35 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:20:35 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:20:35 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:20:35 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-16 17:20:35 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:20:35 | captured_naming_check | INFO | Naming check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:20:38 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:20:38 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:20:38 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:20:38 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:20:38 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:20:38 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:20:39 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 17:20:39 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:20:39 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 17:20:39 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:20:39 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:20:39 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:20:39 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:20:39 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:20:39 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:20:39 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:20:39 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-16 17:20:39 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:20:39 | captured_naming_check | INFO | Naming check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:22:25 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:22:25 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:22:25 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:22:25 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 17:22:25 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:22:25 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 17:22:25 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:22:25 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:22:25 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:22:25 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:22:25 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:22:25 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:22:25 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:22:25 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-16 17:22:25 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:22:25 | captured_naming_check | INFO | Naming check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:25:00 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/memory_bank.py +2025-11-16 17:25:00 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/memory_bank.py: 100/100 (PASS) +2025-11-16 17:25:02 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:25:02 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:25:04 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py +2025-11-16 17:25:04 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py: 66/100 (FAIL) +2025-11-16 17:25:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/handlers/tracking/line_counter.py +2025-11-16 17:25:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/handlers/tracking/line_counter.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:26:43 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:26:43 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:26:43 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:26:43 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 17:26:43 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:26:43 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 17:26:43 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:26:43 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:26:43 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:26:43 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:26:43 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:26:43 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:26:43 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:26:43 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-16 17:26:43 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:26:43 | captured_naming_check | INFO | Naming check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:28:31 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:28:31 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:28:31 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:28:31 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 17:28:31 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:28:31 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 17:28:31 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:28:31 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:28:31 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:28:31 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:28:31 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:28:31 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:28:31 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:28:31 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-16 17:28:31 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:28:31 | captured_naming_check | INFO | Naming check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:28:40 | captured_naming_check | INFO | Checking naming standards for: apps/cortex.py +2025-11-16 17:28:40 | captured_naming_check | INFO | Naming check completed for apps/cortex.py: 66/100 (FAIL) +2025-11-16 17:28:41 | captured_naming_check | INFO | Checking naming standards for: apps/modules/create_branch.py +2025-11-16 17:28:41 | captured_naming_check | INFO | Naming check completed for apps/modules/create_branch.py: 66/100 (FAIL) +2025-11-16 17:28:42 | captured_naming_check | INFO | Checking naming standards for: apps/modules/update_branch.py +2025-11-16 17:28:42 | captured_naming_check | INFO | Naming check completed for apps/modules/update_branch.py: 66/100 (FAIL) +2025-11-16 17:28:44 | captured_naming_check | INFO | Checking naming standards for: apps/modules/delete_branch.py +2025-11-16 17:28:44 | captured_naming_check | INFO | Naming check completed for apps/modules/delete_branch.py: 66/100 (FAIL) +2025-11-16 17:28:46 | captured_naming_check | INFO | Checking naming standards for: apps/modules/regenerate_template_registry.py +2025-11-16 17:28:46 | captured_naming_check | INFO | Naming check completed for apps/modules/regenerate_template_registry.py: 100/100 (PASS) +2025-11-16 17:28:47 | captured_naming_check | INFO | Checking naming standards for: apps/handlers/json/handler.py +2025-11-16 17:28:47 | captured_naming_check | INFO | Naming check completed for apps/handlers/json/handler.py: 100/100 (PASS) +2025-11-16 17:28:48 | captured_naming_check | INFO | Checking naming standards for: apps/handlers/branch/file_ops.py +2025-11-16 17:28:48 | captured_naming_check | INFO | Naming check completed for apps/handlers/branch/file_ops.py: 66/100 (FAIL) +2025-11-16 17:28:49 | captured_naming_check | INFO | Checking naming standards for: apps/handlers/error/logger.py +2025-11-16 17:28:49 | captured_naming_check | INFO | Naming check completed for apps/handlers/error/logger.py: 100/100 (PASS) +2025-11-16 17:28:50 | captured_naming_check | INFO | Checking naming standards for: apps/handlers/registry/ignore.py +2025-11-16 17:28:50 | captured_naming_check | INFO | Naming check completed for apps/handlers/registry/ignore.py: 66/100 (FAIL) +2025-11-16 17:30:19 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:30:19 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:32:29 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:32:29 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:32:32 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:32:32 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:32:36 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:32:36 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:32:40 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:32:40 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:33:04 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/seed/apps/modules/architecture_standard.py +2025-11-16 17:33:04 | captured_naming_check | INFO | Naming check completed for /home/aipass/seed/apps/modules/architecture_standard.py: 100/100 (PASS) +2025-11-16 17:35:06 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:35:06 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 17:35:08 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py +2025-11-16 17:35:08 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cortex/apps/handlers/json/handler.py: 100/100 (PASS) +2025-11-16 17:35:10 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py +2025-11-16 17:35:10 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py: 66/100 (FAIL) +2025-11-16 17:36:50 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:36:50 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:36:51 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:36:51 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:37:00 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:37:00 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:37:01 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:37:01 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:38:21 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:38:21 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:39:27 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/seed/apps/modules/architecture_standard.py +2025-11-16 17:39:27 | captured_naming_check | INFO | Naming check completed for /home/aipass/seed/apps/modules/architecture_standard.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:43:57 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:43:57 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:43:57 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:43:57 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-16 17:43:57 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:43:57 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-16 17:43:57 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:43:57 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:43:57 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:43:57 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:43:57 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:43:57 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-16 17:43:58 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:43:58 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-16 17:43:58 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:43:58 | captured_naming_check | INFO | Naming check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-18 17:51:55 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-18 17:51:55 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-18 17:51:55 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-18 17:51:55 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-18 17:51:55 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-18 17:51:55 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-18 17:51:55 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-18 17:51:55 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-18 17:51:55 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-18 17:51:55 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-18 17:51:55 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-18 17:51:55 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-18 17:51:55 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-18 17:51:55 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-18 17:51:55 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/seed/apps/seed.py +2025-11-18 17:51:55 | captured_naming_check | INFO | Naming check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-18 17:52:01 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-18 17:52:01 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-18 17:52:01 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-18 17:52:01 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-18 17:52:01 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-18 17:52:01 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-18 17:52:01 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-18 17:52:01 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-18 17:52:01 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-18 17:52:01 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-18 17:52:01 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-18 17:52:01 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-18 17:52:01 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-18 17:52:01 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-18 17:52:01 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/seed/apps/seed.py +2025-11-18 17:52:02 | captured_naming_check | INFO | Naming check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-18 17:52:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-18 17:52:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-18 17:52:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-18 17:52:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-18 17:52:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-18 17:52:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-18 17:52:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-18 17:52:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cli/apps/cli.py: 66/100 (FAIL) +2025-11-18 17:52:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-18 17:52:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 66/100 (FAIL) +2025-11-18 17:52:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-18 17:52:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-18 17:52:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-18 17:52:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-18 17:52:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-18 17:52:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-18 17:52:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-18 17:52:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 66/100 (FAIL) +2025-11-18 17:52:07 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-18 17:52:07 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/prax/apps/prax.py: 66/100 (FAIL) +2025-11-18 17:52:08 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/seed/apps/seed.py +2025-11-18 17:52:08 | captured_naming_check | INFO | Naming check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-18 20:38:09 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py +2025-11-18 20:38:09 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/backup_system/apps/modules/backup_core.py: 100/100 (PASS) +2025-11-18 20:38:19 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py +2025-11-18 20:38:19 | captured_naming_check | INFO | Naming check completed for /home/aipass/aipass_core/backup_system/apps/handlers/operations/file_scanner.py: 100/100 (PASS) +2025-11-18 20:38:29 | captured_naming_check | INFO | Checking naming standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py diff --git a/src/aipass/seedgo/apps/standards/aipass/logs/seed.log.1 b/src/aipass/seedgo/apps/standards/aipass/logs/seed.log.1 new file mode 100644 index 00000000..4b0cde91 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/logs/seed.log.1 @@ -0,0 +1,493 @@ +2026-03-05 00:11:54 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 00:11:54 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 00:11:54 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 00:11:54 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 00:11:54 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 00:11:54 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 00:11:54 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 00:11:54 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 00:11:54 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 00:44:33 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 00:44:38 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 00:44:38 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 00:44:38 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 00:44:38 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 00:44:38 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 00:44:38 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 00:44:38 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 00:44:38 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 00:44:39 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 00:44:39 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 00:44:39 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 00:44:39 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 00:44:39 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 00:44:39 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 00:44:39 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 00:44:39 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 00:44:39 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 00:44:39 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 00:44:39 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 00:44:39 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 01:06:01 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 01:06:07 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 01:06:13 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 01:06:19 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 01:06:24 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:06:12 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:07:11 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:08:45 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:11:53 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:13:10 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:13:16 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:13:22 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:13:27 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:13:33 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:14:17 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:14:23 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:14:24 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:16:05 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:16:10 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:16:35 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:22:20 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:22:26 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_verify +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.naming_standard +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_standard +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.modules_standard +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_audit +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.documentation_standard +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.permission_flags_standard +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.trigger_standard +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.standards_checklist +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.architecture_standard +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.imports_standard +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.readme_update +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.json_structure_standard +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.diagnostics_audit +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.error_handling_standard +2026-03-05 13:22:32 | captured_seed | INFO | Discovered module: seed.apps.modules.log_level_standard +2026-03-05 13:22:38 | captured_seed | INFO | Discovered module: seed.apps.modules.cli_flags_standard +2026-03-05 13:22:38 | captured_seed | INFO | Discovered module: seed.apps.modules.handlers_standard +2026-03-05 13:22:38 | captured_seed | INFO | Discovered module: seed.apps.modules.log_visibility_standard +2026-03-05 13:22:38 | captured_seed | INFO | Discovered module: seed.apps.modules.log_handler_standard diff --git a/src/aipass/seedgo/apps/standards/aipass/logs/standards_audit.log.1 b/src/aipass/seedgo/apps/standards/aipass/logs/standards_audit.log.1 new file mode 100644 index 00000000..1e20a968 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/logs/standards_audit.log.1 @@ -0,0 +1,406 @@ +2025-11-16 16:33:29 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-16 16:33:34 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-16 16:37:23 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-16 16:37:32 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-16 16:38:25 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-16 16:39:11 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-16 16:45:47 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-16 16:53:14 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-16 16:59:20 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-16 17:13:17 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-16 17:17:36 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-16 17:20:35 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-16 17:22:25 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-16 17:26:43 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-16 17:28:31 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-16 17:43:57 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-21 19:47:10 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 19:47:17 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 19:47:48 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 20:12:04 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 20:14:01 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 20:23:29 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 20:23:43 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 21:35:37 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 21:39:24 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 21:40:29 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 21:40:40 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 21:40:50 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 21:40:51 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 21:47:13 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 21:47:23 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 21:47:47 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:13:50 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:15:32 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:15:37 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:15:44 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:15:59 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:18:15 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:34:17 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:34:23 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:38:27 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:38:59 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:41:08 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:41:29 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:41:30 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:45:40 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:51:46 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:54:00 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 22:54:11 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:00:44 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:01:05 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:01:17 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:10:45 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:22:41 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:24:41 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:24:45 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:26:07 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:27:15 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:27:21 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:28:00 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:28:32 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:29:14 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:29:15 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:29:17 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:29:55 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:30:54 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:33:11 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:34:19 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:39:46 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:45:49 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-21 23:45:50 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 00:04:47 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 00:05:27 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 00:06:46 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 00:14:11 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 00:23:42 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 00:24:31 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 00:32:48 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 01:00:23 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 01:09:34 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 01:20:29 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 08:23:23 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 08:26:34 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 08:28:43 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 08:28:47 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 08:28:51 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 08:31:47 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 08:33:58 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 08:37:15 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 08:42:59 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 08:47:48 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 08:50:09 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 08:54:51 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 08:58:06 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 09:07:23 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 09:30:27 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 09:33:10 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 09:35:33 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 09:39:25 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 09:49:39 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 09:49:59 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 09:50:46 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 09:51:44 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 09:52:34 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 09:52:55 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 09:53:41 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 09:53:59 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 10:08:18 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 10:14:54 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 13:56:09 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 13:59:13 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 14:00:41 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 14:04:25 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 14:08:10 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 14:08:16 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 14:08:26 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 14:09:01 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 14:17:51 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 14:18:45 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 14:22:17 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 14:30:24 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 14:36:18 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 14:39:06 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 14:48:59 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 14:57:12 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 14:58:33 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 15:00:04 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 15:00:41 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 15:16:54 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 15:25:49 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 15:34:08 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 15:34:54 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 15:38:19 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 16:26:41 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 18:08:18 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-22 19:00:19 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-22 19:10:17 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-22 19:45:20 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-22 19:45:27 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-22 19:49:16 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-22 20:16:28 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-22 20:35:30 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-22 20:56:12 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-22 21:29:55 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-22 21:36:16 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 21:39:03 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 21:42:44 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 21:53:48 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 22:06:49 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 23:38:39 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-22 23:43:52 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-22 23:45:05 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-22 23:45:05 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-23 00:58:40 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-23 01:01:42 | captured_standards_audit | INFO | [standards_audit] Loaded 16 branches from BRANCH_REGISTRY.json +2025-11-23 20:35:06 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-23 20:35:42 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-23 20:36:09 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-24 22:15:53 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 16:50:49 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 16:53:18 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 16:53:30 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 16:55:12 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 16:58:44 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 17:08:34 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 17:08:40 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 17:16:42 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 17:16:59 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 18:03:06 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 18:04:03 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 18:06:17 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 18:06:22 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 18:10:03 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 18:12:20 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 18:14:56 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 18:17:04 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 18:17:49 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 18:20:10 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 18:30:26 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 18:30:53 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 19:39:23 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 19:39:30 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 19:42:13 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 19:42:19 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 19:42:19 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 19:42:25 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 19:59:19 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 19:59:20 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 20:09:06 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 20:09:21 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 20:10:31 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 20:11:22 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 20:12:36 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 20:13:41 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 20:13:46 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 20:14:00 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 20:14:46 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 20:15:03 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-25 22:12:05 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 11:17:39 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 11:25:15 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 11:28:04 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 11:28:07 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 11:36:33 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 11:36:53 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 11:37:36 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 11:45:40 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 11:46:11 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 11:46:41 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 13:21:37 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 13:23:51 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 13:24:03 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:06:18 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:06:28 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:06:29 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:06:30 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:06:37 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:14:45 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:18:12 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-27 17:18:12 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:18:17 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-27 17:18:17 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:18:22 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-27 17:18:22 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:33:52 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:36:57 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:38:42 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:44:09 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:45:51 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:45:56 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-27 17:45:56 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:47:59 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:54:36 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-27 17:56:51 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-27 17:56:51 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-27 17:57:27 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-27 17:57:27 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-27 17:57:33 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-27 17:57:33 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-27 17:57:33 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-27 17:57:38 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-27 17:57:38 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-27 17:57:38 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-27 17:58:58 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-27 17:58:58 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-27 17:59:35 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-27 17:59:35 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-27 18:00:46 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-27 18:00:46 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:11:00 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:11:00 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:13:22 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:13:22 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:13:49 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-28 22:13:49 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:13:49 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:13:54 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-28 22:13:54 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:13:54 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:13:57 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:13:57 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:15:24 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-28 22:15:24 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:15:24 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:16:11 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:16:11 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:20:40 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:20:40 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:21:22 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-28 22:21:22 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:21:22 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:23:01 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-28 22:23:01 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:23:01 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:23:25 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:23:25 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:26:12 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-28 22:26:12 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:26:12 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:26:25 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:26:25 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:34:18 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-28 22:34:18 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:34:18 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:43:48 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:43:48 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:51:51 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:51:51 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:53:03 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:53:03 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:54:02 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:54:02 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 22:57:57 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 22:57:57 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 23:19:09 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 23:19:09 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 23:20:35 | captured_standards_audit | ERROR | [standards_audit] Failed to read BRANCH_REGISTRY.json: module 'seed.apps.handlers.json.json_handler' has no attribute 'read_json' +2025-11-28 23:20:35 | captured_standards_audit | WARNING | [standards_audit] BRANCH_REGISTRY.json not found, using manual discovery +2025-11-28 23:22:02 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:27:51 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:33:58 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:34:02 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:34:06 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:34:16 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:34:22 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:34:30 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:35:57 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:36:23 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:38:17 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:39:36 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:42:25 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:42:54 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:42:57 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:43:10 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:47:55 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:48:36 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:48:42 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:48:48 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:48:55 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:49:41 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:49:45 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:53:11 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:56:24 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:58:05 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-28 23:58:33 | captured_standards_audit | INFO | [standards_audit] Loaded 17 branches from BRANCH_REGISTRY.json +2025-11-29 00:00:11 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:00:12 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:01:51 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:02:11 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:08:42 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:11:00 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:15:36 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:33:30 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:49:12 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:52:56 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:53:41 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:54:00 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:54:15 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:54:22 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:54:26 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:54:29 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:54:32 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:54:40 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:54:53 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:55:28 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:55:42 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:56:03 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:57:27 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:58:06 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 00:59:11 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 01:00:03 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 01:00:03 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 01:00:08 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 01:04:46 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 01:08:39 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 01:09:52 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 01:10:24 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 01:10:34 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 01:10:46 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 01:13:53 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 01:16:11 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 01:55:07 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 02:07:30 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 02:45:24 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 02:45:33 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 02:47:28 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 02:48:28 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 08:40:59 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 09:22:27 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 09:24:51 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 09:25:51 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 09:31:12 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 09:31:31 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 09:32:15 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 09:34:40 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 09:35:27 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 09:36:11 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 09:36:22 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 09:36:33 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 10:00:42 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 12:04:46 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 12:04:57 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 12:16:39 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 12:19:14 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 12:19:21 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 12:20:47 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 12:20:56 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 14:52:32 | captured_standards_audit | INFO | Prax logger connected to standards_audit +2025-11-29 14:52:32 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 14:53:23 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 14:54:11 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 15:48:27 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 16:42:53 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 16:48:23 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 17:00:18 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 17:02:22 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 17:02:32 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 17:02:41 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 17:03:12 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 17:03:57 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 17:04:26 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 17:11:13 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 17:11:19 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 17:11:21 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 17:11:23 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json +2025-11-29 17:11:32 | captured_standards_audit | INFO | [standards_audit] Loaded 18 branches from BRANCH_REGISTRY.json diff --git a/src/aipass/seedgo/apps/standards/aipass/logs/standards_checklist.log.1 b/src/aipass/seedgo/apps/standards/aipass/logs/standards_checklist.log.1 new file mode 100644 index 00000000..8d4d4ff1 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/logs/standards_checklist.log.1 @@ -0,0 +1,325 @@ +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] Running CLI standard check on /home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/plugins/__init__.py +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] CLI check complete: 0/100 +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] Running HANDLERS standard check on /home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/plugins/__init__.py +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] HANDLERS check complete: 100/100 +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] Running MODULES standard check on /home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/plugins/__init__.py +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] MODULES check complete: 100/100 +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] Running DOCUMENTATION standard check on /home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/plugins/__init__.py +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] DOCUMENTATION check complete: 100/100 +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] Running JSON_STRUCTURE standard check on /home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/plugins/__init__.py +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] JSON_STRUCTURE check complete: 100/100 +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] Running TESTING standard check on /home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/plugins/__init__.py +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] TESTING check complete: 100/100 +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] Running ERROR_HANDLING standard check on /home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/plugins/__init__.py +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] ERROR_HANDLING check complete: 100/100 +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] Running ENCAPSULATION standard check on /home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/plugins/__init__.py +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] ENCAPSULATION check complete: 100/100 +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] Running TRIGGER standard check on /home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/plugins/__init__.py +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] TRIGGER check complete: 100/100 +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_LEVEL standard check on /home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/plugins/__init__.py +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] LOG_LEVEL check complete: 100/100 +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] Running CLI_FLAGS standard check on /home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/plugins/__init__.py +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] CLI_FLAGS check complete: 100/100 +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_HANDLER standard check on /home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/plugins/__init__.py +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] LOG_HANDLER check complete: 100/100 +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_VISIBILITY standard check on /home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/plugins/__init__.py +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] LOG_VISIBILITY check complete: 100/100 +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] Running PERMISSION_FLAGS standard check on /home/aipass/aipass_business/AIPass/src/aipass/templates/cortex/branch_template/apps/plugins/__init__.py +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] PERMISSION_FLAGS check complete: 100/100 +2026-03-05 01:06:24 | captured_standards_checklist | INFO | [standards_checklist] Standards check complete: 82% average compliance +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Starting standards compliance check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Branch: API, Bypass rules: 15 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running IMPORTS standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] IMPORTS check complete: 100/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running ARCHITECTURE standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] ARCHITECTURE check complete: 75/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running NAMING standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] NAMING check complete: 100/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running CLI standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] CLI check complete: 100/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running HANDLERS standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] HANDLERS check complete: 100/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running MODULES standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] MODULES check complete: 100/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running DOCUMENTATION standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] DOCUMENTATION check complete: 100/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running JSON_STRUCTURE standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] JSON_STRUCTURE check complete: 0/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running TESTING standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] TESTING check complete: 0/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running ERROR_HANDLING standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] ERROR_HANDLING check complete: 100/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running ENCAPSULATION standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] ENCAPSULATION check complete: 100/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running TRIGGER standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] TRIGGER check complete: 100/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_LEVEL standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] LOG_LEVEL check complete: 100/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running CLI_FLAGS standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] CLI_FLAGS check complete: 100/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_HANDLER standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] LOG_HANDLER check complete: 100/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_VISIBILITY standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] LOG_VISIBILITY check complete: 100/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Running PERMISSION_FLAGS standard check on /home/aipass/aipass_core/api/apps/handlers/telegram/base_bot.py +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] PERMISSION_FLAGS check complete: 100/100 +2026-03-05 13:06:12 | captured_standards_checklist | INFO | [standards_checklist] Standards check complete: 86% average compliance +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Starting standards compliance check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Branch: API, Bypass rules: 15 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running IMPORTS standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] IMPORTS check complete: 75/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running ARCHITECTURE standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] ARCHITECTURE check complete: 0/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running NAMING standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] NAMING check complete: 100/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running CLI standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] CLI check complete: 0/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running HANDLERS standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] HANDLERS check complete: 100/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running MODULES standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] MODULES check complete: 100/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running DOCUMENTATION standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] DOCUMENTATION check complete: 50/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running JSON_STRUCTURE standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] JSON_STRUCTURE check complete: 100/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running TESTING standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] TESTING check complete: 100/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running ERROR_HANDLING standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] ERROR_HANDLING check complete: 100/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running ENCAPSULATION standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] ENCAPSULATION check complete: 50/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running TRIGGER standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] TRIGGER check complete: 0/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_LEVEL standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] LOG_LEVEL check complete: 100/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running CLI_FLAGS standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] CLI_FLAGS check complete: 100/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_HANDLER standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] LOG_HANDLER check complete: 100/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_VISIBILITY standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] LOG_VISIBILITY check complete: 100/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Running PERMISSION_FLAGS standard check on /home/aipass/aipass_core/api/tests/test_multi_bot.py +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] PERMISSION_FLAGS check complete: 100/100 +2026-03-05 13:07:11 | captured_standards_checklist | INFO | [standards_checklist] Standards check complete: 75% average compliance +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Starting standards compliance check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running IMPORTS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] IMPORTS check complete: 0/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running ARCHITECTURE standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] ARCHITECTURE check complete: 100/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running NAMING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] NAMING check complete: 0/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running CLI standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] CLI check complete: 0/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running HANDLERS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] HANDLERS check complete: 100/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running MODULES standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] MODULES check complete: 100/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running DOCUMENTATION standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] DOCUMENTATION check complete: 100/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running JSON_STRUCTURE standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] JSON_STRUCTURE check complete: 100/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running TESTING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] TESTING check complete: 100/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running ERROR_HANDLING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] ERROR_HANDLING check complete: 100/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running ENCAPSULATION standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] ENCAPSULATION check complete: 100/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running TRIGGER standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] TRIGGER check complete: 100/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_LEVEL standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] LOG_LEVEL check complete: 100/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running CLI_FLAGS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] CLI_FLAGS check complete: 100/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_HANDLER standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] LOG_HANDLER check complete: 100/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_VISIBILITY standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] LOG_VISIBILITY check complete: 100/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Running PERMISSION_FLAGS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/templates/agent.template/tests/__init__.py +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] PERMISSION_FLAGS check complete: 100/100 +2026-03-05 13:11:53 | captured_standards_checklist | INFO | [standards_checklist] Standards check complete: 82% average compliance +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Starting standards compliance check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running IMPORTS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] IMPORTS check complete: 100/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running ARCHITECTURE standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] ARCHITECTURE check complete: 100/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running NAMING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] NAMING check complete: 0/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running CLI standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] CLI check complete: 0/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running HANDLERS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] HANDLERS check complete: 100/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running MODULES standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] MODULES check complete: 100/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running DOCUMENTATION standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] DOCUMENTATION check complete: 100/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running JSON_STRUCTURE standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] JSON_STRUCTURE check complete: 100/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running TESTING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] TESTING check complete: 100/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running ERROR_HANDLING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] ERROR_HANDLING check complete: 100/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running ENCAPSULATION standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] ENCAPSULATION check complete: 100/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running TRIGGER standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] TRIGGER check complete: 100/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_LEVEL standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] LOG_LEVEL check complete: 100/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running CLI_FLAGS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] CLI_FLAGS check complete: 100/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_HANDLER standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] LOG_HANDLER check complete: 100/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_VISIBILITY standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] LOG_VISIBILITY check complete: 100/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Running PERMISSION_FLAGS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/__init__.py +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] PERMISSION_FLAGS check complete: 100/100 +2026-03-05 13:13:10 | captured_standards_checklist | INFO | [standards_checklist] Standards check complete: 88% average compliance +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Starting standards compliance check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running IMPORTS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] IMPORTS check complete: 0/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running ARCHITECTURE standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] ARCHITECTURE check complete: 50/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running NAMING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] NAMING check complete: 100/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running CLI standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] CLI check complete: 0/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running HANDLERS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] HANDLERS check complete: 100/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running MODULES standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] MODULES check complete: 100/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running DOCUMENTATION standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] DOCUMENTATION check complete: 25/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running JSON_STRUCTURE standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] JSON_STRUCTURE check complete: 100/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running TESTING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] TESTING check complete: 100/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running ERROR_HANDLING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] ERROR_HANDLING check complete: 100/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running ENCAPSULATION standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] ENCAPSULATION check complete: 100/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running TRIGGER standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] TRIGGER check complete: 100/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_LEVEL standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] LOG_LEVEL check complete: 100/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running CLI_FLAGS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] CLI_FLAGS check complete: 100/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_HANDLER standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] LOG_HANDLER check complete: 100/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_VISIBILITY standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] LOG_VISIBILITY check complete: 100/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Running PERMISSION_FLAGS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/metadata.py +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] PERMISSION_FLAGS check complete: 100/100 +2026-03-05 13:13:16 | captured_standards_checklist | INFO | [standards_checklist] Standards check complete: 80% average compliance +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Starting standards compliance check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running IMPORTS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] IMPORTS check complete: 25/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running ARCHITECTURE standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] ARCHITECTURE check complete: 50/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running NAMING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] NAMING check complete: 100/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running CLI standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] CLI check complete: 0/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running HANDLERS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] HANDLERS check complete: 100/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running MODULES standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] MODULES check complete: 100/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running DOCUMENTATION standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] DOCUMENTATION check complete: 25/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running JSON_STRUCTURE standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] JSON_STRUCTURE check complete: 100/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running TESTING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] TESTING check complete: 100/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running ERROR_HANDLING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] ERROR_HANDLING check complete: 100/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running ENCAPSULATION standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] ENCAPSULATION check complete: 100/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running TRIGGER standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] TRIGGER check complete: 100/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_LEVEL standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] LOG_LEVEL check complete: 100/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running CLI_FLAGS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] CLI_FLAGS check complete: 100/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_HANDLER standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] LOG_HANDLER check complete: 100/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_VISIBILITY standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] LOG_VISIBILITY check complete: 100/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Running PERMISSION_FLAGS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/placeholders.py +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] PERMISSION_FLAGS check complete: 100/100 +2026-03-05 13:13:22 | captured_standards_checklist | INFO | [standards_checklist] Standards check complete: 82% average compliance +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Starting standards compliance check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running IMPORTS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] IMPORTS check complete: 25/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running ARCHITECTURE standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] ARCHITECTURE check complete: 50/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running NAMING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] NAMING check complete: 100/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running CLI standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] CLI check complete: 0/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running HANDLERS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] HANDLERS check complete: 100/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running MODULES standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] MODULES check complete: 100/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running DOCUMENTATION standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] DOCUMENTATION check complete: 25/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running JSON_STRUCTURE standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] JSON_STRUCTURE check complete: 100/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running TESTING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] TESTING check complete: 100/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running ERROR_HANDLING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] ERROR_HANDLING check complete: 100/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running ENCAPSULATION standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] ENCAPSULATION check complete: 100/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running TRIGGER standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] TRIGGER check complete: 0/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_LEVEL standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] LOG_LEVEL check complete: 100/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running CLI_FLAGS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] CLI_FLAGS check complete: 100/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_HANDLER standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] LOG_HANDLER check complete: 100/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_VISIBILITY standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] LOG_VISIBILITY check complete: 100/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Running PERMISSION_FLAGS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/file_ops.py +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] PERMISSION_FLAGS check complete: 100/100 +2026-03-05 13:13:27 | captured_standards_checklist | INFO | [standards_checklist] Standards check complete: 76% average compliance +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Starting standards compliance check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running IMPORTS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] IMPORTS check complete: 25/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running ARCHITECTURE standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] ARCHITECTURE check complete: 50/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running NAMING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] NAMING check complete: 100/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running CLI standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] CLI check complete: 0/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running HANDLERS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] HANDLERS check complete: 100/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running MODULES standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] MODULES check complete: 100/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running DOCUMENTATION standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] DOCUMENTATION check complete: 25/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running JSON_STRUCTURE standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] JSON_STRUCTURE check complete: 100/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running TESTING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] TESTING check complete: 100/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running ERROR_HANDLING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] ERROR_HANDLING check complete: 100/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running ENCAPSULATION standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] ENCAPSULATION check complete: 100/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running TRIGGER standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] TRIGGER check complete: 0/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_LEVEL standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] LOG_LEVEL check complete: 100/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running CLI_FLAGS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] CLI_FLAGS check complete: 100/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_HANDLER standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] LOG_HANDLER check complete: 100/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running LOG_VISIBILITY standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] LOG_VISIBILITY check complete: 100/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Running PERMISSION_FLAGS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/registry.py +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] PERMISSION_FLAGS check complete: 100/100 +2026-03-05 13:13:33 | captured_standards_checklist | INFO | [standards_checklist] Standards check complete: 76% average compliance +2026-03-05 13:14:17 | captured_standards_checklist | INFO | [standards_checklist] Starting standards compliance check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/spawn.py +2026-03-05 13:14:17 | captured_standards_checklist | INFO | [standards_checklist] Running IMPORTS standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/spawn.py +2026-03-05 13:14:17 | captured_standards_checklist | INFO | [standards_checklist] IMPORTS check complete: 25/100 +2026-03-05 13:14:17 | captured_standards_checklist | INFO | [standards_checklist] Running ARCHITECTURE standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/spawn.py +2026-03-05 13:14:17 | captured_standards_checklist | INFO | [standards_checklist] ARCHITECTURE check complete: 50/100 +2026-03-05 13:14:17 | captured_standards_checklist | INFO | [standards_checklist] Running NAMING standard check on /home/aipass/aipass_business/AIPass/src/aipass/spawn/spawn.py diff --git a/src/aipass/seedgo/apps/standards/aipass/logs/testing_check.log.1 b/src/aipass/seedgo/apps/standards/aipass/logs/testing_check.log.1 new file mode 100644 index 00000000..d16f944c --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/logs/testing_check.log.1 @@ -0,0 +1,363 @@ +2025-11-16 16:28:34 | captured_testing_check | INFO | Testing check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:28:41 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:28:41 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:28:41 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:28:41 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:28:41 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:28:41 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:28:41 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:28:41 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:28:41 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:28:41 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:28:41 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:28:41 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:28:41 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:28:41 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:28:41 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:28:41 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:28:41 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:28:41 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:28:41 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:28:41 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:28:41 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:28:41 | captured_testing_check | INFO | Testing check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:28:54 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:28:54 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:33:29 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:33:29 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:33:30 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:33:30 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:33:30 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:33:30 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:33:30 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:33:30 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:33:30 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:33:30 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:33:30 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:33:30 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:33:30 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:33:30 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:33:30 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:33:30 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:33:30 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:33:30 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:33:30 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:33:30 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:33:30 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:33:30 | captured_testing_check | INFO | Testing check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:33:34 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:33:34 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:33:34 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:33:34 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:33:34 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:33:34 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:33:34 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:33:34 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:33:34 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:33:34 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:33:34 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:33:34 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:33:34 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:33:34 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:33:35 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:33:35 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:33:35 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:33:35 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:33:35 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:33:35 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:33:35 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:33:35 | captured_testing_check | INFO | Testing check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:36:40 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:36:40 | captured_testing_check | INFO | Testing check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:36:46 | captured_testing_check | INFO | Checking testing standards for: apps/seed.py +2025-11-16 16:36:46 | captured_testing_check | INFO | Testing check completed for apps/seed.py: 100/100 (PASS) +2025-11-16 16:37:23 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:37:23 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:37:23 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:37:23 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:37:23 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:37:23 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:37:23 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:37:23 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:37:23 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:37:23 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:37:24 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:37:24 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:37:24 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:37:24 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:37:24 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:37:24 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:37:24 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:37:24 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:37:24 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:37:24 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:37:24 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:37:24 | captured_testing_check | INFO | Testing check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_testing_check | INFO | Checking testing standards for: apps/seed.py +2025-11-16 16:37:32 | captured_testing_check | INFO | Testing check completed for apps/seed.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:37:32 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:37:32 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:37:32 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:37:32 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:37:32 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:37:32 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:37:32 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:37:32 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:37:32 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:37:32 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:37:32 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:37:32 | captured_testing_check | INFO | Testing check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:38:25 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:38:25 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:38:25 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:38:25 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:38:25 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:38:25 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:38:25 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:38:25 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:38:25 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:38:25 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:38:25 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:38:25 | captured_testing_check | INFO | Testing check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:38:36 | captured_testing_check | INFO | Checking testing standards for: ai_mail +2025-11-16 16:38:42 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail +2025-11-16 16:38:45 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:38:45 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:38:45 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:38:45 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:38:45 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:38:45 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:38:45 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:38:45 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:38:45 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:38:45 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:38:45 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:38:45 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:38:45 | captured_testing_check | INFO | Testing check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:38:52 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/modules/email.py +2025-11-16 16:38:52 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/modules/email.py: 100/100 (PASS) +2025-11-16 16:39:11 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:39:11 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:39:11 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:39:11 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:39:11 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:39:11 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:39:11 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:39:11 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:39:11 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:39:11 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:39:12 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:39:12 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:39:12 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:39:12 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:39:12 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:39:12 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:39:12 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:39:12 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:39:12 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:39:12 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:39:12 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:39:12 | captured_testing_check | INFO | Testing check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:42:43 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:42:43 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:42:43 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:42:43 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:42:43 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:42:43 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:42:43 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:42:43 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:42:43 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:42:43 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:42:43 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:42:43 | captured_testing_check | INFO | Testing check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:42:55 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:42:55 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:42:55 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:42:55 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:42:55 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:42:55 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:42:55 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:42:55 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:42:55 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:42:55 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:42:55 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:42:55 | captured_testing_check | INFO | Testing check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:45:47 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:45:47 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:45:47 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:45:47 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:45:47 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:45:47 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:45:47 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:45:47 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:45:47 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:45:47 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:45:47 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:45:47 | captured_testing_check | INFO | Testing check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:48:09 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:48:09 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:48:21 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/handlers/storage/chroma.py +2025-11-16 16:48:21 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/handlers/storage/chroma.py: 100/100 (PASS) +2025-11-16 16:48:22 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py +2025-11-16 16:48:22 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/handlers/rollover/extractor.py: 100/100 (PASS) +2025-11-16 16:48:24 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/memory_bank.py +2025-11-16 16:48:24 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/memory_bank.py: 100/100 (PASS) +2025-11-16 16:53:14 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:53:14 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:53:14 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:53:14 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:53:14 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:53:14 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:53:14 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:53:14 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:53:15 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:53:15 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:53:15 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:53:15 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:53:15 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:53:15 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:53:15 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:53:15 | captured_testing_check | INFO | Testing check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 16:55:55 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/modules/email.py +2025-11-16 16:55:55 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/modules/email.py: 100/100 (PASS) +2025-11-16 16:55:58 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py +2025-11-16 16:55:58 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/modules/branch_ping.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 16:59:21 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 16:59:21 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 16:59:21 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 16:59:21 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 16:59:21 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 16:59:21 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 16:59:21 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 16:59:21 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 16:59:21 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 16:59:21 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 16:59:21 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/seed/apps/seed.py +2025-11-16 16:59:21 | captured_testing_check | INFO | Testing check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:01:35 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:01:35 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:02:32 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:32 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:02:46 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:46 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:02:57 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:02:57 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:03:23 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:03:23 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:13:17 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:13:17 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:13:18 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:13:18 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:13:18 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:13:18 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:13:18 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:13:18 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:13:18 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:13:18 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:13:18 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) +2025-11-16 17:13:18 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/seed/apps/seed.py +2025-11-16 17:13:18 | captured_testing_check | INFO | Testing check completed for /home/aipass/seed/apps/seed.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/ai_mail/apps/ai_mail.py +2025-11-16 17:17:06 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/ai_mail/apps/ai_mail.py: 100/100 (PASS) +2025-11-16 17:17:06 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/api/apps/api.py +2025-11-16 17:17:06 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/api/apps/api.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/backup_system/apps/backup_system.py +2025-11-16 17:17:07 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/backup_system/apps/backup_system.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cli/apps/cli.py +2025-11-16 17:17:07 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cli/apps/cli.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/cortex/apps/cortex.py +2025-11-16 17:17:07 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/cortex/apps/cortex.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/devpulse/apps/devpulse.py +2025-11-16 17:17:07 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/devpulse/apps/devpulse.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/drone/apps/drone.py +2025-11-16 17:17:07 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/drone/apps/drone.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/flow/apps/flow.py +2025-11-16 17:17:07 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/flow/apps/flow.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/MEMORY_BANK/apps/modules/rollover.py +2025-11-16 17:17:07 | captured_testing_check | INFO | Testing check completed for /home/aipass/MEMORY_BANK/apps/modules/rollover.py: 100/100 (PASS) +2025-11-16 17:17:07 | captured_testing_check | INFO | Checking testing standards for: /home/aipass/aipass_core/prax/apps/prax.py +2025-11-16 17:17:07 | captured_testing_check | INFO | Testing check completed for /home/aipass/aipass_core/prax/apps/prax.py: 100/100 (PASS) diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/__init__.py b/src/aipass/seedgo/apps/standards/aipass/modules/__init__.py new file mode 100755 index 00000000..34360471 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/__init__.py @@ -0,0 +1,6 @@ +""" +Seed Modules - Orchestration Layer + +Modules coordinate workflows by calling handlers. +Each module implements handle_command() for auto-discovery. +""" diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/architecture_standard.py b/src/aipass/seedgo/apps/standards/aipass/modules/architecture_standard.py new file mode 100755 index 00000000..7fcbb6b1 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/architecture_standard.py @@ -0,0 +1,145 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: architecture_standard.py - Architecture Standards Module +# Date: 2025-11-12 +# Version: 0.1.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-12): Initial standards module - architecture +# +# CODE STANDARDS: +# - This module provides architecture standards when queried +# ============================================= + +""" +Architecture Standards Module + +Provides condensed architecture standards for AIPass branches. +Run directly or via: drone @seed architecture +""" + +import sys +from pathlib import Path +from typing import List + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) # For seed package imports + +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.standards.architecture_content import get_architecture_standards + +# Import CLI services (Rich console + display functions) +from cli.apps.modules import console, header + + +def print_introspection(): + """Display module info and connected handlers""" + from pathlib import Path + + console.print() + console.print("[bold cyan]Architecture Standards Module[/bold cyan]") + console.print() + + console.print("[yellow]Connected Handlers:[/yellow]") + console.print() + + # Auto-discover handler files from handlers/standards/ + handlers_dir = Path(__file__).parent.parent / "handlers" / "standards" + + if handlers_dir.exists(): + # Only show files this module actually uses + console.print(" [cyan]handlers/standards/[/cyan]") + console.print(" [dim]- architecture_content.py[/dim]") + console.print() + + console.print("[dim]Run 'python3 architecture_standard.py --help' for usage[/dim]") + console.print() + + +def print_help(): + """Print drone-compliant help output""" + console.print() + console.print("[bold cyan]Architecture Standards Module[/bold cyan]") + console.print("Demonstrates AIPass architecture patterns") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: architecture, arch, structure, --help") + console.print() + console.print(" [cyan]architecture[/cyan] - Display architecture standards") + console.print(" [cyan]arch[/cyan] - Display architecture standards (alias)") + console.print(" [cyan]structure[/cyan] - Display architecture standards (alias)") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" drone @seed architecture") + console.print(" python3 architecture_standard.py") + console.print(" python3 architecture_standard.py --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed architecture") + console.print(" drone @seed arch") + console.print() + console.print(" [dim]# Standalone[/dim]") + console.print(" python3 architecture_standard.py") + console.print() + + console.print("[yellow]REFERENCE:[/yellow]") + console.print(" /home/aipass/standards/CODE_STANDARDS/architecture.md") + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """Handle 'architecture' command""" + if command != "architecture": + return False + + # Log module usage - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": command} + ) + + print_standard() + return True + + +def print_standard(): + """Print architecture standards - orchestrates handler call""" + console.print() + header("Architecture Standards") + console.print() + console.print(get_architecture_standards()) + console.print() + console.print("─" * 70) + console.print() + + +if __name__ == "__main__": + # Show introspection when run without arguments + if len(sys.argv) == 1: + print_introspection() + sys.exit(0) + + # Handle help flag (drone compliance) + if sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + # Confirm Prax logger connection + logger.info("Prax logger connected to architecture_standard") + + # Log standalone execution - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": "standalone"} + ) + print_standard() diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/cli_flags_standard.py b/src/aipass/seedgo/apps/standards/aipass/modules/cli_flags_standard.py new file mode 100644 index 00000000..ace6eb99 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/cli_flags_standard.py @@ -0,0 +1,126 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: cli_flags_standard.py - CLI Flags Standards Module +# Date: 2026-02-21 +# Version: 1.0.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-21): Initial standards module - CLI flags +# +# CODE STANDARDS: +# - This module provides CLI flags standards when queried +# ============================================= + +""" +CLI Flags Standards Module + +Provides condensed CLI flags standards for AIPass branches. +Run directly or via: drone @seed cli_flags +""" + +import sys +from pathlib import Path +from typing import List + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.standards.cli_flags_content import get_cli_flags_standards + +from cli.apps.modules import console, header + + +def print_introspection(): + """Display module info and connected handlers""" + console.print() + console.print("[bold cyan]CLI Flags Standards Module[/bold cyan]") + console.print() + + console.print("[yellow]Connected Handlers:[/yellow]") + console.print() + + handlers_dir = Path(__file__).parent.parent / "handlers" / "standards" + + if handlers_dir.exists(): + console.print(" [cyan]handlers/standards/[/cyan]") + console.print(" [dim]- cli_flags_content.py[/dim]") + console.print(" [dim]- cli_flags_check.py[/dim]") + console.print() + + console.print("[dim]Run 'python3 cli_flags_standard.py --help' for usage[/dim]") + console.print() + + +def print_help(): + """Print drone-compliant help output""" + console.print() + console.print("[bold cyan]CLI Flags Standards Module[/bold cyan]") + console.print("Demonstrates AIPass CLI flags conventions") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: cli_flags, --help") + console.print() + console.print(" [cyan]cli_flags[/cyan] - Display CLI flags standards") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" drone @seed cli_flags") + console.print(" python3 cli_flags_standard.py") + console.print(" python3 cli_flags_standard.py --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed cli_flags") + console.print() + console.print(" [dim]# Standalone[/dim]") + console.print(" python3 cli_flags_standard.py") + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """Handle 'cli_flags' command""" + if command != "cli_flags": + return False + + json_handler.log_operation( + "standard_displayed", + {"command": command, "args": args} + ) + + print_standard() + return True + + +def print_standard(): + """Print CLI flags standards - orchestrates handler call""" + console.print() + header("CLI Flags Standards") + console.print() + console.print(get_cli_flags_standards()) + console.print() + + +if __name__ == "__main__": + if len(sys.argv) == 1: + print_introspection() + sys.exit(0) + + if sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + logger.info("Prax logger connected to cli_flags_standard") + + json_handler.log_operation( + "standard_displayed", + {"command": "standalone"} + ) + print_standard() diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/cli_standard.py b/src/aipass/seedgo/apps/standards/aipass/modules/cli_standard.py new file mode 100755 index 00000000..8c2dc5c1 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/cli_standard.py @@ -0,0 +1,169 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: cli_standard.py - CLI Standards Module +# Date: 2025-11-12 +# Version: 0.1.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-12): Initial standards module - cli +# +# CODE STANDARDS: +# - This module provides cli standards when queried +# ============================================= + +""" +CLI Standards Module + +Provides condensed CLI standards for AIPass branches. +Run directly or via: drone @seed cli +""" + +import sys +from pathlib import Path +from typing import List + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) # For seed package imports + +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.standards.cli_content import get_cli_standards + +# Import CLI services (Rich console + display functions) +from cli.apps.modules import console, header + + +def print_introspection(): + """Display module info and connected handlers""" + from pathlib import Path + + console.print() + console.print("[bold cyan]CLI Standards Module[/bold cyan]") + console.print() + + console.print("[yellow]Connected Handlers:[/yellow]") + console.print() + + # Auto-discover handler files from handlers/standards/ + handlers_dir = Path(__file__).parent.parent / "handlers" / "standards" + + if handlers_dir.exists(): + # Only show files this module actually uses + console.print(" [cyan]handlers/standards/[/cyan]") + console.print(" [dim]- cli_content.py[/dim]") + console.print() + + console.print("[dim]Run 'python3 cli_standard.py --help' for usage[/dim]") + console.print() + + +def print_help(): + """Print drone-compliant help output""" + console.print() + console.print("[bold cyan]CLI Standards Module[/bold cyan]") + console.print("Demonstrates AIPass CLI patterns") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: cli, --help") + console.print() + console.print(" [cyan]cli[/cyan] - Display CLI standards") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" drone @seed cli") + console.print(" python3 cli_standard.py") + console.print(" python3 cli_standard.py --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed cli") + console.print() + console.print(" [dim]# Standalone[/dim]") + console.print(" python3 cli_standard.py") + console.print() + + console.print("[yellow]REFERENCE:[/yellow]") + console.print(" /home/aipass/standards/CODE_STANDARDS/cli.md") + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """Handle 'cli' command""" + if command != "cli": + return False + + # Log module usage - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": command} + ) + + print_standard() + return True + + +def print_standard(): + """Print cli standards - orchestrates handler call""" + console.print() + header("CLI Standards") + console.print() + console.print(get_cli_standards()) + console.print() + console.print("─" * 70) + console.print() + + # Offer to run demo (skip if non-interactive) + try: + response = input("Press Enter to see CLI demo examples (or 'n' to skip): ").strip().lower() + if response != 'n': + run_demo() + except EOFError: + # Non-interactive mode - skip demo silently (expected behavior) + logger.info("[cli_standard] Non-interactive mode detected, skipping demo") + + +def run_demo(): + """Run the CLI layout demo""" + import subprocess + demo_path = "/home/aipass/aipass_core/cli/tools/cli_layout_demo.py" + + console.print() + console.print("[bold cyan]Running CLI Demo...[/bold cyan]") + console.print() + + try: + subprocess.run(["python3", demo_path], check=True) + except subprocess.CalledProcessError as e: + logger.error(f"Error running demo: {e}") + console.print(f"[red]Error running demo: {e}[/red]") + except FileNotFoundError: + logger.error(f"Demo file not found: {demo_path}") + console.print(f"[yellow]Demo file not found: {demo_path}[/yellow]") + + +if __name__ == "__main__": + # Show introspection when run without arguments + if len(sys.argv) == 1: + print_introspection() + sys.exit(0) + + # Handle help flag (drone compliance) + if sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + # Confirm Prax logger connection + logger.info("Prax logger connected to cli_standard") + + # Log standalone execution - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": "standalone"} + ) + print_standard() diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/diagnostics_audit.py b/src/aipass/seedgo/apps/standards/aipass/modules/diagnostics_audit.py new file mode 100644 index 00000000..caf24faa --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/diagnostics_audit.py @@ -0,0 +1,276 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: diagnostics_audit.py - System-wide Type Error Diagnostics +# Date: 2025-11-28 +# Version: 0.1.0 +# Category: seed/modules +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-28): Initial implementation - pyright system scan +# +# CODE STANDARDS: +# - Module orchestrates, handlers implement +# ============================================= + +""" +System-wide Type Error Diagnostics + +Runs pyright on all AIPass branches to detect type errors, +undefined variables, and other static analysis issues. + +Usage: + drone @seed diagnostics # All branches + drone @seed diagnostics flow # Specific branch +""" + +import sys +from pathlib import Path +from typing import Dict, List + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +SEED_ROOT = Path.home() / "seed" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +# Prax logger (system-wide) +from prax.apps.modules.logger import system_logger as logger + +# CLI service +from cli.apps.modules import console +from cli.apps.modules.display import header + +# JSON handler for logging +from seed.apps.handlers.json import json_handler + +# Drone services for @ resolution +from drone.apps.modules import normalize_branch_arg + +# Diagnostics handlers +from seed.apps.handlers.diagnostics import discover_branches, run_branch_diagnostics + + +def print_branch_diagnostics(result: Dict): + """Print diagnostics for a single branch""" + branch = result['branch'] + errors = result.get('total_errors', 0) + warnings = result.get('total_warnings', 0) + files_analyzed = result.get('total_files', 0) + files_with_errors = result.get('files_with_errors', 0) + + # Status icon + if errors == 0: + status = "[green]✓[/green]" + color = "green" + elif errors < 10: + status = "[yellow]⚠[/yellow]" + color = "yellow" + else: + status = "[red]✗[/red]" + color = "red" + + console.print() + console.print(f"{status} [bold]{branch}[/bold]") + console.print(f" Files: {files_analyzed} analyzed, {files_with_errors} with errors") + console.print(f" [{color}]Errors: {errors}[/{color}] Warnings: {warnings}") + + # Show top files with errors (clickable paths) + if files_with_errors > 0: + console.print(" [dim]Top files with errors:[/dim]") + for file_result in result.get('results', [])[:5]: + if file_result['errors'] > 0: + file_path = file_result['file'] + file_errors = file_result['errors'] + console.print(f" [red]✗[/red] {file_path} [dim]({file_errors} errors)[/dim]") + + # Show first 3 errors per file + for diag in file_result['diagnostics'][:3]: + line = diag['line'] + msg = diag['message'][:60] + "..." if len(diag['message']) > 60 else diag['message'] + console.print(f" [dim]L{line}:[/dim] {msg}") + + +def print_system_summary(all_results: List[Dict]): + """Print system-wide diagnostics summary""" + total_branches = len(all_results) + total_errors = sum(r.get('total_errors', 0) for r in all_results) + total_warnings = sum(r.get('total_warnings', 0) for r in all_results) + total_files = sum(r.get('total_files', 0) for r in all_results) + files_with_errors = sum(r.get('files_with_errors', 0) for r in all_results) + + clean_branches = sum(1 for r in all_results if r.get('total_errors', 0) == 0) + branches_with_errors = total_branches - clean_branches + + console.print() + console.print("─" * 70) + console.print("[bold]SYSTEM DIAGNOSTICS SUMMARY:[/bold]") + console.print(f" Total branches: {total_branches}") + console.print(f" Clean branches: {clean_branches} [green]✓[/green]") + console.print(f" Branches with errors: {branches_with_errors} [red]✗[/red]") + console.print() + console.print(f" Files analyzed: {total_files}") + console.print(f" Files with errors: {files_with_errors}") + console.print(f" Total errors: [red]{total_errors}[/red]") + console.print(f" Total warnings: [yellow]{total_warnings}[/yellow]") + console.print() + + # Top branches by error count + if branches_with_errors > 0: + console.print("[bold]BRANCHES BY ERROR COUNT:[/bold]") + sorted_results = sorted(all_results, key=lambda x: x.get('total_errors', 0), reverse=True) + for result in sorted_results[:10]: + if result.get('total_errors', 0) > 0: + branch = result['branch'] + errors = result['total_errors'] + console.print(f" {branch:15} [red]{errors:4} errors[/red]") + + console.print("─" * 70) + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """ + Handle 'diagnostics' command + + Args: + command: Command name + args: Additional arguments + + Returns: + True if handled, False if not this module's command + """ + if command != "diagnostics": + return False + + try: + # Parse arguments + specific_branch = None + + for arg in args: + if arg == '--help' or arg == '-h': + print_help() + return True + if not arg.startswith('-'): + specific_branch = normalize_branch_arg(arg) + + # Log start + json_handler.log_operation( + "diagnostics_audit_started", + {"specific_branch": specific_branch} + ) + + # Header + console.print() + header("AIPASS TYPE ERROR DIAGNOSTICS") + console.print() + console.print("[dim]Running pyright on all branches (this may take a moment)...[/dim]") + + # Discover branches + branches = discover_branches() + + if specific_branch: + branches = [b for b in branches if b['name'] == specific_branch] + if not branches: + console.print(f"[red]Branch '{specific_branch}' not found[/red]") + return True + + console.print(f"[dim]Found {len(branches)} branches to scan...[/dim]") + + # Run diagnostics on all branches + all_results = [] + for branch in branches: + console.print(f"[dim]Scanning {branch['name']}...[/dim]", end="\r") + result = run_branch_diagnostics(branch) + all_results.append(result) + + console.print(" " * 50, end="\r") # Clear progress + + # Print results + for result in all_results: + print_branch_diagnostics(result) + + # Print system summary (unless specific branch) + if not specific_branch: + print_system_summary(all_results) + + # Log completion + total_errors = sum(r.get('total_errors', 0) for r in all_results) + json_handler.log_operation( + "diagnostics_audit_completed", + { + "branches_scanned": len(all_results), + "total_errors": total_errors + } + ) + + return True + + except Exception as e: + logger.error(f"Diagnostics audit failed: {e}") + console.print(f"[red]Error during diagnostics audit: {e}[/red]") + return False + + +def print_introspection(): + """Display module info when run without arguments (Seed pattern)""" + console.print() + console.print("[bold cyan]Diagnostics Audit Module[/bold cyan]") + console.print() + console.print("[dim]System-wide type error detection using pyright[/dim]") + console.print() + console.print("[yellow]Commands:[/yellow] diagnostics") + console.print() + console.print("[dim]Run 'drone @seed diagnostics --help' for usage[/dim]") + console.print() + + +def print_help(): + """Print help information""" + console.print() + console.print("[bold cyan]Diagnostics Audit Module[/bold cyan]") + console.print("System-wide type error detection using pyright") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: diagnostics, --help") + console.print() + console.print(" [cyan]diagnostics[/cyan] - Scan all branches for type errors") + console.print(" [cyan]diagnostics [branch][/cyan] - Scan specific branch") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed diagnostics") + console.print(" drone @seed diagnostics flow") + console.print() + console.print(" python3 seed.py diagnostics") + console.print(" python3 seed.py diagnostics cortex") + console.print() + + console.print("[yellow]WHAT IT CHECKS:[/yellow]") + console.print(" - Type errors (Pylance/pyright)") + console.print(" - Undefined variables") + console.print(" - Import errors") + console.print(" - Argument type mismatches") + console.print() + + +if __name__ == "__main__": + # Handle help flag or no arguments + if len(sys.argv) == 1 or (len(sys.argv) > 1 and sys.argv[1] in ['--help', '-h', 'help']): + print_help() + sys.exit(0) + + # Confirm Prax logger connection + logger.info("Prax logger connected to diagnostics_audit") + + # Log standalone execution + json_handler.log_operation( + "diagnostics_run", + {"command": "standalone", "args": sys.argv[1:]} + ) + + # Run diagnostics + handle_command("diagnostics", sys.argv[1:]) diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/documentation_standard.py b/src/aipass/seedgo/apps/standards/aipass/modules/documentation_standard.py new file mode 100755 index 00000000..2d215248 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/documentation_standard.py @@ -0,0 +1,139 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: documentation_standard.py - Documentation Standards Module +# Date: 2025-11-12 +# Version: 0.1.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-12): Initial standards module - documentation +# +# CODE STANDARDS: +# - This module provides documentation standards when queried +# ============================================= + +""" +Documentation Standards Module + +Provides condensed documentation standards for AIPass branches. +Run directly or via: drone @seed documentation +""" + +import sys +from pathlib import Path +from typing import List + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) # For seed package imports + +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.standards.documentation_content import get_documentation_standards + +# Import CLI services (Rich console + display functions) +from cli.apps.modules import console, header + + +def print_help(): + """Print drone-compliant help output""" + console.print() + console.print("[bold cyan]Documentation Standards Module[/bold cyan]") + console.print("Provides AIPass documentation patterns") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: documentation, docs, doc, --help") + console.print() + console.print(" [cyan]documentation[/cyan] - Display documentation standards") + console.print(" [cyan]docs[/cyan] - Display documentation standards (alias)") + console.print(" [cyan]doc[/cyan] - Display documentation standards (alias)") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" drone @seed documentation") + console.print(" python3 documentation_standard.py") + console.print(" python3 documentation_standard.py --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed documentation") + console.print(" drone @seed docs") + console.print() + console.print(" [dim]# Standalone[/dim]") + console.print(" python3 documentation_standard.py") + console.print() + + console.print("[yellow]REFERENCE:[/yellow]") + console.print(" /home/aipass/standards/CODE_STANDARDS/documentation.md") + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """Handle 'documentation' command""" + if command != "documentation": + return False + + # Log module usage - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": command} + ) + + print_standard() + return True + + +def print_standard(): + """Print documentation standards - orchestrates handler call""" + console.print() + header("Documentation Standards") + console.print() + console.print(get_documentation_standards()) + console.print() + console.print("─" * 70) + console.print() + + +def print_introspection(): + """Display module info and connected handlers""" + console.print() + console.print("[bold cyan]Documentation Standards Module[/bold cyan]") + console.print() + + console.print("[yellow]Connected Handlers:[/yellow]") + console.print() + + # Only show files this module actually uses + console.print(" [cyan]handlers/standards/[/cyan]") + console.print(" [dim]- documentation_content.py[/dim]") + console.print() + + console.print("[dim]Run 'python3 documentation_standard.py --help' for usage[/dim]") + console.print() + + +if __name__ == "__main__": + # Show introspection when run without arguments + if len(sys.argv) == 1: + print_introspection() + sys.exit(0) + + # Handle help flag (drone compliance) + if sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + # Confirm Prax logger connection + logger.info("Prax logger connected to documentation_standard") + + # Log standalone execution - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": "standalone"} + ) + print_standard() diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/error_handling_standard.py b/src/aipass/seedgo/apps/standards/aipass/modules/error_handling_standard.py new file mode 100644 index 00000000..bfd7bb55 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/error_handling_standard.py @@ -0,0 +1,143 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: error_handling_standard.py - Error Handling Standards Module +# Date: 2025-11-21 +# Version: 0.1.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-21): Initial standards module - error handling +# +# CODE STANDARDS: +# - This module provides error handling standards when queried +# ============================================= + +""" +Error Handling Standards Module + +Provides condensed error handling standards for AIPass branches. +Run directly or via: drone @seed error_handling +""" + +import sys +from pathlib import Path +from typing import List + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) # For seed package imports + +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.standards.error_handling_content import get_error_handling_standards + +# Import CLI services (Rich console + display functions) +from cli.apps.modules import console, header + + +def print_introspection(): + """Display module info and connected handlers""" + from pathlib import Path + + console.print() + console.print("[bold cyan]Error Handling Standards Module[/bold cyan]") + console.print() + + console.print("[yellow]Connected Handlers:[/yellow]") + console.print() + + # Auto-discover handler files from handlers/standards/ + handlers_dir = Path(__file__).parent.parent / "handlers" / "standards" + + if handlers_dir.exists(): + # Only show files this module actually uses + console.print(" [cyan]handlers/standards/[/cyan]") + console.print(" [dim]- error_handling_content.py[/dim]") + console.print() + + console.print("[dim]Run 'python3 error_handling_standard.py --help' for usage[/dim]") + console.print() + + +def print_help(): + """Print drone-compliant help output""" + console.print() + console.print("[bold cyan]Error Handling Standards Module[/bold cyan]") + console.print("Demonstrates AIPass error handling patterns (3-tier architecture)") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: error_handling, errors, error, --help") + console.print() + console.print(" [cyan]error_handling[/cyan] - Display error handling standards") + console.print(" [cyan]errors[/cyan] - Display error handling standards (alias)") + console.print(" [cyan]error[/cyan] - Display error handling standards (alias)") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" drone @seed error_handling") + console.print(" drone @seed errors") + console.print(" drone @seed error") + console.print(" python3 error_handling_standard.py") + console.print(" python3 error_handling_standard.py --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed error_handling") + console.print() + console.print(" [dim]# Standalone[/dim]") + console.print(" python3 error_handling_standard.py") + console.print() + + console.print("[yellow]REFERENCE:[/yellow]") + console.print(" /home/aipass/standards/CODE_STANDARDS/error_handling.md") + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """Handle 'error_handling', 'errors', 'error' commands""" + if command != "error_handling": + return False + + # Log module usage - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": command} + ) + + print_standard() + return True + + +def print_standard(): + """Print error handling standards - orchestrates handler call""" + console.print() + header("Error Handling Standards") + console.print() + console.print(get_error_handling_standards()) + console.print() + + +if __name__ == "__main__": + # Show introspection when run without arguments + if len(sys.argv) == 1: + print_introspection() + sys.exit(0) + + # Handle help flag (drone compliance) + if sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + # Confirm Prax logger connection + logger.info("Prax logger connected to error_handling_standard") + + # Log standalone execution - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": "standalone"} + ) + print_standard() diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/handlers_standard.py b/src/aipass/seedgo/apps/standards/aipass/modules/handlers_standard.py new file mode 100755 index 00000000..4cecfa07 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/handlers_standard.py @@ -0,0 +1,144 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: handlers_standard.py - Handlers Standards Module +# Date: 2025-11-12 +# Version: 0.1.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-12): Initial standards module - handlers +# +# CODE STANDARDS: +# - This module provides handler standards when queried +# ============================================= + +""" +Handlers Standards Module + +Provides condensed handler standards for AIPass branches. +Run directly or via: drone @seed handlers +""" + +import sys +from pathlib import Path +from typing import List + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) # For seed package imports + +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.standards.handlers_content import get_handlers_standards + +# Import CLI services (Rich console + display functions) +from cli.apps.modules import console, header + + +def print_introspection(): + """Display module info and connected handlers""" + from pathlib import Path + + console.print() + console.print("[bold cyan]Handlers Standards Module[/bold cyan]") + console.print() + + console.print("[yellow]Connected Handlers:[/yellow]") + console.print() + + # Auto-discover handler files from handlers/standards/ + handlers_dir = Path(__file__).parent.parent / "handlers" / "standards" + + if handlers_dir.exists(): + # Only show files this module actually uses + console.print(" [cyan]handlers/standards/[/cyan]") + console.print(" [dim]- handlers_content.py[/dim]") + console.print() + + console.print("[dim]Run 'python3 handlers_standard.py --help' for usage[/dim]") + console.print() + + +def print_help(): + """Print drone-compliant help output""" + console.print() + console.print("[bold cyan]Handlers Standards Module[/bold cyan]") + console.print("Demonstrates AIPass handler patterns") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: handlers, handler, --help") + console.print() + console.print(" [cyan]handlers[/cyan] - Display handlers standards") + console.print(" [cyan]handler[/cyan] - Display handlers standards (alias)") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" drone @seed handlers") + console.print(" python3 handlers_standard.py") + console.print(" python3 handlers_standard.py --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed handlers") + console.print() + console.print(" [dim]# Standalone[/dim]") + console.print(" python3 handlers_standard.py") + console.print() + + console.print("[yellow]REFERENCE:[/yellow]") + console.print(" /home/aipass/standards/CODE_STANDARDS/handlers.md") + console.print(" /home/aipass/standards/CODE_STANDARDS/json_structure.md") + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """Handle 'handlers' command""" + if command != "handlers": + return False + + # Log module usage - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": command} + ) + + print_standard() + return True + + +def print_standard(): + """Print handler standards - orchestrates handler call""" + console.print() + header("Handlers Standards") + console.print() + console.print(get_handlers_standards()) + console.print() + console.print("─" * 70) + console.print() + + +if __name__ == "__main__": + # Show introspection when run without arguments + if len(sys.argv) == 1: + print_introspection() + sys.exit(0) + + # Handle help flag (drone compliance) + if sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + # Confirm Prax logger connection + logger.info("Prax logger connected to handlers_standard") + + # Log standalone execution - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": "standalone"} + ) + print_standard() diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/imports_standard.py b/src/aipass/seedgo/apps/standards/aipass/modules/imports_standard.py new file mode 100755 index 00000000..b228eb74 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/imports_standard.py @@ -0,0 +1,139 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: imports_standard.py - Import Standards Module +# Date: 2025-11-12 +# Version: 0.1.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-12): Initial standards module - imports +# +# CODE STANDARDS: +# - This module provides import standards when queried +# ============================================= + +""" +Import Standards Module + +Provides condensed import standards for AIPass branches. +Run directly or via: drone @seed imports +""" + +import sys +from pathlib import Path +from typing import List + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) # For seed package imports + +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.standards.imports_content import get_imports_standards + +# Import CLI services (Rich console + display functions) +from cli.apps.modules import console, header + + +def print_introspection(): + """Display module info and connected handlers""" + from pathlib import Path + + console.print() + console.print("[bold cyan]Import Standards Module[/bold cyan]") + console.print() + + console.print("[yellow]Connected Handlers:[/yellow]") + console.print() + + # Auto-discover handler files from handlers/standards/ + handlers_dir = Path(__file__).parent.parent / "handlers" / "standards" + + if handlers_dir.exists(): + # Only show files this module actually uses + console.print(" [cyan]handlers/standards/[/cyan]") + console.print(" [dim]- imports_content.py[/dim]") + console.print() + + console.print("[dim]Run 'python3 imports_standard.py --help' for usage[/dim]") + console.print() + + +def print_help(): + """Print drone-compliant help output""" + console.print() + console.print("[bold cyan]Import Standards Module[/bold cyan]") + console.print("Demonstrates AIPass import patterns") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: imports, --help") + console.print() + console.print(" [cyan]imports[/cyan] - Display import standards") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" drone @seed imports") + console.print(" python3 imports_standard.py") + console.print(" python3 imports_standard.py --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed imports") + console.print() + console.print(" [dim]# Standalone[/dim]") + console.print(" python3 imports_standard.py") + console.print() + + console.print("[yellow]REFERENCE:[/yellow]") + console.print(" /home/aipass/standards/CODE_STANDARDS/imports.md") + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """Handle 'imports' command""" + if command != "imports": + return False + + # Log module usage - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": command} + ) + + print_standard() + return True + + +def print_standard(): + """Print import standards - orchestrates handler call""" + console.print() + header("Import Standards") + console.print() + console.print(get_imports_standards()) + console.print() + + +if __name__ == "__main__": + # Show introspection when run without arguments + if len(sys.argv) == 1: + print_introspection() + sys.exit(0) + + # Handle help flag (drone compliance) + if sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + # Confirm Prax logger connection + logger.info("Prax logger connected to imports_standard") + + # Log standalone execution - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": "standalone"} + ) + print_standard() diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/json_structure_standard.py b/src/aipass/seedgo/apps/standards/aipass/modules/json_structure_standard.py new file mode 100755 index 00000000..67eb2136 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/json_structure_standard.py @@ -0,0 +1,143 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: json_structure_standard.py - JSON Structure Standards Module +# Date: 2025-11-12 +# Version: 0.1.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-12): Initial standards module - json structure +# +# CODE STANDARDS: +# - This module provides JSON structure standards when queried +# ============================================= + +""" +JSON Structure Standards Module + +Provides condensed JSON structure standards for AIPass branches. +Run directly or via: drone @seed json +""" + +import sys +from pathlib import Path +from typing import List + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) # For seed package imports + +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.standards.json_structure_content import get_json_structure_standards + +# Import CLI services (Rich console + display functions) +from cli.apps.modules import console, header + + +def print_introspection(): + """Display module info and connected handlers""" + from pathlib import Path + + console.print() + console.print("[bold cyan]JSON Structure Standards Module[/bold cyan]") + console.print() + + console.print("[yellow]Connected Handlers:[/yellow]") + console.print() + + # Auto-discover handler files from handlers/standards/ + handlers_dir = Path(__file__).parent.parent / "handlers" / "standards" + + if handlers_dir.exists(): + # Only show files this module actually uses + console.print(" [cyan]handlers/standards/[/cyan]") + console.print(" [dim]- json_structure_content.py[/dim]") + console.print() + + console.print("[dim]Run 'python3 json_structure_standard.py --help' for usage[/dim]") + console.print() + + +def print_help(): + """Print drone-compliant help output""" + console.print() + console.print("[bold cyan]JSON Structure Standards Module[/bold cyan]") + console.print("Demonstrates AIPass JSON patterns") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: json_structure, json, structure, --help") + console.print() + console.print(" [cyan]json_structure[/cyan] - Display JSON structure standards") + console.print(" [cyan]json[/cyan] - Display JSON structure standards (alias)") + console.print(" [cyan]structure[/cyan] - Display JSON structure standards (alias)") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" drone @seed json") + console.print(" python3 json_structure_standard.py") + console.print(" python3 json_structure_standard.py --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed json") + console.print() + console.print(" [dim]# Standalone[/dim]") + console.print(" python3 json_structure_standard.py") + console.print() + + console.print("[yellow]REFERENCE:[/yellow]") + console.print(" /home/aipass/standards/CODE_STANDARDS/json_structure.md") + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """Handle 'json' command""" + if command != "json_structure": + return False + + # Log module usage - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": command} + ) + + print_standard() + return True + + +def print_standard(): + """Print JSON structure standards - orchestrates handler call""" + console.print() + header("JSON Structure Standards") + console.print() + console.print(get_json_structure_standards()) + console.print() + console.print("─" * 70) + console.print() + + +if __name__ == "__main__": + # Show introspection when run without arguments + if len(sys.argv) == 1: + print_introspection() + sys.exit(0) + + # Handle help flag (drone compliance) + if sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + # Confirm Prax logger connection + logger.info("Prax logger connected to json_structure_standard") + + # Log standalone execution - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": "standalone"} + ) + print_standard() diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/log_handler_standard.py b/src/aipass/seedgo/apps/standards/aipass/modules/log_handler_standard.py new file mode 100644 index 00000000..fbadb0f3 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/log_handler_standard.py @@ -0,0 +1,126 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: log_handler_standard.py - Log Handler Standards Module +# Date: 2026-02-26 +# Version: 1.0.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-26): Initial standards module - log handler rotation +# +# CODE STANDARDS: +# - This module provides log handler standards when queried +# ============================================= + +""" +Log Handler Standards Module + +Provides condensed log handler rotation standards for AIPass branches. +Run directly or via: drone @seed log_handler +""" + +import sys +from pathlib import Path +from typing import List + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.standards.log_handler_content import get_log_handler_standards + +from cli.apps.modules import console, header + + +def print_introspection(): + """Display module info and connected handlers""" + console.print() + console.print("[bold cyan]Log Handler Standards Module[/bold cyan]") + console.print() + + console.print("[yellow]Connected Handlers:[/yellow]") + console.print() + + handlers_dir = Path(__file__).parent.parent / "handlers" / "standards" + + if handlers_dir.exists(): + console.print(" [cyan]handlers/standards/[/cyan]") + console.print(" [dim]- log_handler_content.py[/dim]") + console.print(" [dim]- log_handler_check.py[/dim]") + console.print() + + console.print("[dim]Run 'python3 log_handler_standard.py --help' for usage[/dim]") + console.print() + + +def print_help(): + """Print drone-compliant help output""" + console.print() + console.print("[bold cyan]Log Handler Standards Module[/bold cyan]") + console.print("Demonstrates AIPass log handler rotation patterns") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: log_handler, --help") + console.print() + console.print(" [cyan]log_handler[/cyan] - Display log handler rotation standards") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" drone @seed log_handler") + console.print(" python3 log_handler_standard.py") + console.print(" python3 log_handler_standard.py --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed log_handler") + console.print() + console.print(" [dim]# Standalone[/dim]") + console.print(" python3 log_handler_standard.py") + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """Handle 'log_handler' command""" + if command != "log_handler": + return False + + json_handler.log_operation( + "standard_displayed", + {"command": command, "args": args} + ) + + print_standard() + return True + + +def print_standard(): + """Print log handler standards - orchestrates handler call""" + console.print() + header("Log Handler Rotation Standards") + console.print() + console.print(get_log_handler_standards()) + console.print() + + +if __name__ == "__main__": + if len(sys.argv) == 1: + print_introspection() + sys.exit(0) + + if sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + logger.info("Prax logger connected to log_handler_standard") + + json_handler.log_operation( + "standard_displayed", + {"command": "standalone"} + ) + print_standard() diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/log_level_standard.py b/src/aipass/seedgo/apps/standards/aipass/modules/log_level_standard.py new file mode 100644 index 00000000..cddb25ec --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/log_level_standard.py @@ -0,0 +1,126 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: log_level_standard.py - Log Level Hygiene Standards Module +# Date: 2026-02-13 +# Version: 1.0.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-13): Initial standards module - log level hygiene +# +# CODE STANDARDS: +# - This module provides log level hygiene standards when queried +# ============================================= + +""" +Log Level Hygiene Standards Module + +Provides condensed log level hygiene standards for AIPass branches. +Run directly or via: drone @seed log_level +""" + +import sys +from pathlib import Path +from typing import List + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.standards.log_level_content import get_log_level_standards + +from cli.apps.modules import console, header + + +def print_introspection(): + """Display module info and connected handlers""" + console.print() + console.print("[bold cyan]Log Level Hygiene Standards Module[/bold cyan]") + console.print() + + console.print("[yellow]Connected Handlers:[/yellow]") + console.print() + + handlers_dir = Path(__file__).parent.parent / "handlers" / "standards" + + if handlers_dir.exists(): + console.print(" [cyan]handlers/standards/[/cyan]") + console.print(" [dim]- log_level_content.py[/dim]") + console.print(" [dim]- log_level_check.py[/dim]") + console.print() + + console.print("[dim]Run 'python3 log_level_standard.py --help' for usage[/dim]") + console.print() + + +def print_help(): + """Print drone-compliant help output""" + console.print() + console.print("[bold cyan]Log Level Hygiene Standards Module[/bold cyan]") + console.print("Demonstrates AIPass log level hygiene patterns") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: log_level, --help") + console.print() + console.print(" [cyan]log_level[/cyan] - Display log level hygiene standards") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" drone @seed log_level") + console.print(" python3 log_level_standard.py") + console.print(" python3 log_level_standard.py --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed log_level") + console.print() + console.print(" [dim]# Standalone[/dim]") + console.print(" python3 log_level_standard.py") + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """Handle 'log_level' command""" + if command != "log_level": + return False + + json_handler.log_operation( + "standard_displayed", + {"command": command, "args": args} + ) + + print_standard() + return True + + +def print_standard(): + """Print log level hygiene standards - orchestrates handler call""" + console.print() + header("Log Level Hygiene Standards") + console.print() + console.print(get_log_level_standards()) + console.print() + + +if __name__ == "__main__": + if len(sys.argv) == 1: + print_introspection() + sys.exit(0) + + if sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + logger.info("Prax logger connected to log_level_standard") + + json_handler.log_operation( + "standard_displayed", + {"command": "standalone"} + ) + print_standard() diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/log_visibility_standard.py b/src/aipass/seedgo/apps/standards/aipass/modules/log_visibility_standard.py new file mode 100644 index 00000000..9580fc1d --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/log_visibility_standard.py @@ -0,0 +1,126 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: log_visibility_standard.py - Log Visibility Standards Module +# Date: 2026-02-27 +# Version: 1.0.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-27): Initial standards module - log visibility +# +# CODE STANDARDS: +# - This module provides log visibility standards when queried +# ============================================= + +""" +Log Visibility Standards Module + +Provides condensed log visibility standards for AIPass branches. +Run directly or via: drone @seed log_visibility +""" + +import sys +from pathlib import Path +from typing import List + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.standards.log_visibility_content import get_log_visibility_standards + +from cli.apps.modules import console, header + + +def print_introspection(): + """Display module info and connected handlers""" + console.print() + console.print("[bold cyan]Log Visibility Standards Module[/bold cyan]") + console.print() + + console.print("[yellow]Connected Handlers:[/yellow]") + console.print() + + handlers_dir = Path(__file__).parent.parent / "handlers" / "standards" + + if handlers_dir.exists(): + console.print(" [cyan]handlers/standards/[/cyan]") + console.print(" [dim]- log_visibility_content.py[/dim]") + console.print(" [dim]- log_visibility_check.py[/dim]") + console.print() + + console.print("[dim]Run 'python3 log_visibility_standard.py --help' for usage[/dim]") + console.print() + + +def print_help(): + """Print drone-compliant help output""" + console.print() + console.print("[bold cyan]Log Visibility Standards Module[/bold cyan]") + console.print("Demonstrates AIPass log visibility patterns") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: log_visibility, --help") + console.print() + console.print(" [cyan]log_visibility[/cyan] - Display log visibility standards") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" drone @seed log_visibility") + console.print(" python3 log_visibility_standard.py") + console.print(" python3 log_visibility_standard.py --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed log_visibility") + console.print() + console.print(" [dim]# Standalone[/dim]") + console.print(" python3 log_visibility_standard.py") + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """Handle 'log_visibility' command""" + if command != "log_visibility": + return False + + json_handler.log_operation( + "standard_displayed", + {"command": command, "args": args} + ) + + print_standard() + return True + + +def print_standard(): + """Print log visibility standards - orchestrates handler call""" + console.print() + header("Log Visibility Standards") + console.print() + console.print(get_log_visibility_standards()) + console.print() + + +if __name__ == "__main__": + if len(sys.argv) == 1: + print_introspection() + sys.exit(0) + + if sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + logger.info("Prax logger connected to log_visibility_standard") + + json_handler.log_operation( + "standard_displayed", + {"command": "standalone"} + ) + print_standard() diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/modules_standard.py b/src/aipass/seedgo/apps/standards/aipass/modules/modules_standard.py new file mode 100755 index 00000000..0884af6d --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/modules_standard.py @@ -0,0 +1,142 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: modules_standard.py - Modules Standards Module +# Date: 2025-11-12 +# Version: 0.1.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-12): Initial standards module - modules +# +# CODE STANDARDS: +# - This module provides module standards when queried +# ============================================= + +""" +Modules Standards Module + +Provides condensed module standards for AIPass branches. +Run directly or via: drone @seed modules +""" + +import sys +from pathlib import Path +from typing import List + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) # For seed package imports + +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.standards.modules_content import get_modules_standards + +# Import CLI services (Rich console + display functions) +from cli.apps.modules import console, header + + +def print_introspection(): + """Display module info and connected handlers""" + from pathlib import Path + + console.print() + console.print("[bold cyan]Modules Standards Module[/bold cyan]") + console.print() + + console.print("[yellow]Connected Handlers:[/yellow]") + console.print() + + # Auto-discover handler files from handlers/standards/ + handlers_dir = Path(__file__).parent.parent / "handlers" / "standards" + + if handlers_dir.exists(): + # Only show files this module actually uses + console.print(" [cyan]handlers/standards/[/cyan]") + console.print(" [dim]- modules_content.py[/dim]") + console.print() + + console.print("[dim]Run 'python3 modules_standard.py --help' for usage[/dim]") + console.print() + + +def print_help(): + """Print drone-compliant help output""" + console.print() + console.print("[bold cyan]Modules Standards Module[/bold cyan]") + console.print("Provides AIPass module development standards") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: modules, --help") + console.print() + console.print(" [cyan]modules[/cyan] - Display module standards") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" drone @seed modules") + console.print(" python3 modules_standard.py") + console.print(" python3 modules_standard.py --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed modules") + console.print() + console.print(" [dim]# Standalone[/dim]") + console.print(" python3 modules_standard.py") + console.print() + + console.print("[yellow]REFERENCE:[/yellow]") + console.print(" /home/aipass/standards/CODE_STANDARDS/modules.md") + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """Handle 'modules' command""" + if command != "modules": + return False + + # Log module usage - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": command} + ) + + print_standard() + return True + + +def print_standard(): + """Print module standards - orchestrates handler call""" + console.print() + header("Modules Standards") + console.print() + console.print(get_modules_standards()) + console.print() + console.print("─" * 70) + console.print() + + +if __name__ == "__main__": + # Show introspection when run without arguments + if len(sys.argv) == 1: + print_introspection() + sys.exit(0) + + # Handle help flag (drone compliance) + if sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + # Confirm Prax logger connection + logger.info("Prax logger connected to modules_standard") + + # Log standalone execution - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": "standalone"} + ) + print_standard() diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/naming_standard.py b/src/aipass/seedgo/apps/standards/aipass/modules/naming_standard.py new file mode 100755 index 00000000..dfecd245 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/naming_standard.py @@ -0,0 +1,141 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: naming_standard.py - Naming Standards Module +# Date: 2025-11-12 +# Version: 0.1.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-12): Initial standards module - naming +# +# CODE STANDARDS: +# - This module provides naming standards when queried +# ============================================= + +""" +Naming Standards Module + +Provides condensed naming standards for AIPass branches. +Run directly or via: drone @seed naming +""" + +import sys +from pathlib import Path +from typing import List + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) # For seed package imports + +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.standards.naming_content import get_naming_standards + +# Import CLI services (Rich console + display functions) +from cli.apps.modules import console, header + + +def print_introspection(): + """Display module info and connected handlers""" + from pathlib import Path + + console.print() + console.print("[bold cyan]Naming Standards Module[/bold cyan]") + console.print() + + console.print("[yellow]Connected Handlers:[/yellow]") + console.print() + + # Auto-discover handler files from handlers/standards/ + handlers_dir = Path(__file__).parent.parent / "handlers" / "standards" + + if handlers_dir.exists(): + # Only show files this module actually uses + console.print(" [cyan]handlers/standards/[/cyan]") + console.print(" [dim]- naming_content.py[/dim]") + console.print() + + console.print("[dim]Run 'python3 naming_standard.py --help' for usage[/dim]") + console.print() + + +def print_help(): + """Print drone-compliant help output""" + console.print() + console.print("[bold cyan]Naming Standards Module[/bold cyan]") + console.print("AIPass naming conventions") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: naming, --help") + console.print() + console.print(" [cyan]naming[/cyan] - Display naming standards") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" drone @seed naming") + console.print(" python3 naming_standard.py") + console.print(" python3 naming_standard.py --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed naming") + console.print() + console.print(" [dim]# Standalone[/dim]") + console.print(" python3 naming_standard.py") + console.print() + + console.print("[yellow]REFERENCE:[/yellow]") + console.print(" /home/aipass/standards/CODE_STANDARDS/naming.md") + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """Handle 'naming' command""" + if command != "naming": + return False + + # Log module usage - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": command} + ) + + print_standard() + return True + + +def print_standard(): + """Print naming standards - orchestrates handler call""" + console.print() + header("Naming Standards") + console.print() + console.print(get_naming_standards()) + console.print() + console.print("─" * 70) + console.print() + + +if __name__ == "__main__": + # Show introspection when run without arguments + if len(sys.argv) == 1: + print_introspection() + sys.exit(0) + + # Handle help flag (drone compliance) + if sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + # Confirm Prax logger connection + logger.info("Prax logger connected to naming_standard") + + # Log standalone execution - triggers JSON auto-creation + json_handler.log_operation( + "standard_displayed", + {"command": "standalone"} + ) + print_standard() diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/permission_flags_standard.py b/src/aipass/seedgo/apps/standards/aipass/modules/permission_flags_standard.py new file mode 100644 index 00000000..40632982 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/permission_flags_standard.py @@ -0,0 +1,126 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: permission_flags_standard.py - Permission Flags Standards Module +# Date: 2026-02-26 +# Version: 1.0.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-26): Initial standards module - permission flags +# +# CODE STANDARDS: +# - This module provides permission flags standards when queried +# ============================================= + +""" +Permission Flags Standards Module + +Provides condensed permission flags standards for AIPass branches. +Run directly or via: drone @seed permission_flags +""" + +import sys +from pathlib import Path +from typing import List + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.standards.permission_flags_content import get_permission_flags_standards + +from cli.apps.modules import console, header + + +def print_introspection(): + """Display module info and connected handlers""" + console.print() + console.print("[bold cyan]Permission Flags Standards Module[/bold cyan]") + console.print() + + console.print("[yellow]Connected Handlers:[/yellow]") + console.print() + + handlers_dir = Path(__file__).parent.parent / "handlers" / "standards" + + if handlers_dir.exists(): + console.print(" [cyan]handlers/standards/[/cyan]") + console.print(" [dim]- permission_flags_content.py[/dim]") + console.print(" [dim]- permission_flags_check.py[/dim]") + console.print() + + console.print("[dim]Run 'python3 permission_flags_standard.py --help' for usage[/dim]") + console.print() + + +def print_help(): + """Print drone-compliant help output""" + console.print() + console.print("[bold cyan]Permission Flags Standards Module[/bold cyan]") + console.print("Demonstrates AIPass permission flags patterns") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: permission_flags, --help") + console.print() + console.print(" [cyan]permission_flags[/cyan] - Display permission flags standards") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" drone @seed permission_flags") + console.print(" python3 permission_flags_standard.py") + console.print(" python3 permission_flags_standard.py --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed permission_flags") + console.print() + console.print(" [dim]# Standalone[/dim]") + console.print(" python3 permission_flags_standard.py") + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """Handle 'permission_flags' command""" + if command != "permission_flags": + return False + + json_handler.log_operation( + "standard_displayed", + {"command": command, "args": args} + ) + + print_standard() + return True + + +def print_standard(): + """Print permission flags standards - orchestrates handler call""" + console.print() + header("Permission Flags Standards") + console.print() + console.print(get_permission_flags_standards()) + console.print() + + +if __name__ == "__main__": + if len(sys.argv) == 1: + print_introspection() + sys.exit(0) + + if sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + logger.info("Prax logger connected to permission_flags_standard") + + json_handler.log_operation( + "standard_displayed", + {"command": "standalone"} + ) + print_standard() diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/readme_update.py b/src/aipass/seedgo/apps/standards/aipass/modules/readme_update.py new file mode 100644 index 00000000..2be9e44a --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/readme_update.py @@ -0,0 +1,262 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: readme_update.py - README Auto-Update Module +# Date: 2026-02-21 +# Version: 1.0.0 +# Category: seed/modules +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2026-02-21): Initial build (DPLAN-026 Phase 4) +# +# CODE STANDARDS: +# - Module interface: handle_command(command, args) -> bool +# - Auto-discovered by seed.py entry point +# - Thin orchestrator - delegates to handlers +# ============================================= + +""" +README Auto-Update Module + +On-demand updating of auto-generated README sections for any AIPass branch. +Uses readme_generator handler to produce content for sections marked with + comment markers in README.md files. + +Run: python3 seed.py readme update @branch +""" + +import sys +from pathlib import Path +from typing import List + +# ============================================================================= +# INFRASTRUCTURE SETUP +# ============================================================================= + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +# ============================================================================= +# IMPORTS +# ============================================================================= + +# Prax logger (system-wide, always first) +from prax.apps.modules.logger import system_logger as logger + +# JSON handler for tracking +from seed.apps.handlers.json import json_handler + +# CLI services (display/output formatting) +from cli.apps.modules import console, header + +# Handler (implementation) +from seed.apps.handlers.standards.readme_ops import ( + load_generator, + resolve_targets, + SECTION_NAMES, +) + + +# ============================================================================= +# COMMAND HANDLER +# ============================================================================= + +def handle_command(command: str, args: List[str]) -> bool: + """ + Handle 'readme' command. + + Args: + command: Command name + args: Additional arguments + + Returns: + True if handled, False if not this module's command + """ + if command != "readme": + return False + + if "--help" in args or "-h" in args: + print_help() + return True + + # Subcommands: update, check + subcommand = args[0] if args else "update" + remaining_args = args[1:] if len(args) > 1 else [] + + if subcommand == "update": + _handle_update(remaining_args) + elif subcommand == "check": + _handle_check(remaining_args) + else: + # Maybe it's a branch name without subcommand: `seed readme @cortex` + _handle_update(args) + + return True + + +# ============================================================================= +# SUBCOMMAND ORCHESTRATION +# ============================================================================= + +def _handle_update(args: List[str]) -> None: + """Orchestrate the 'update' subcommand""" + generator = load_generator() + if not generator: + console.print("[red]Failed to load README generator[/red]") + return + + branches, error = resolve_targets(args) + if error: + _print_target_error(error) + return + + json_handler.log_operation( + "readme_update_started", + {"targets": [b['name'] for b in branches]} + ) + + total_updated = 0 + + for branch in branches: + branch_name = branch['name'] + branch_path = branch['path'] + + console.print() + console.print(f"[bold cyan]README Update: {branch_name}[/bold cyan]") + + readme_path = Path(branch_path) / 'README.md' + if not readme_path.exists(): + console.print(f" [yellow]No README.md found at {branch_path}[/yellow]") + continue + + try: + result = generator.update_readme_auto_sections(branch_path, dry_run=False) + _print_result(result) + if result.get('updated'): + total_updated += 1 + except Exception as e: + console.print(f" [red]Error: {e}[/red]") + logger.error(f"README update failed for {branch_name}: {e}") + + if len(branches) > 1: + console.print() + console.print(f"[dim]Updated {total_updated}/{len(branches)} READMEs[/dim]") + + json_handler.log_operation( + "readme_update_completed", + {"branches_processed": len(branches), "branches_updated": total_updated} + ) + + +def _handle_check(args: List[str]) -> None: + """Orchestrate the 'check' subcommand (dry run)""" + generator = load_generator() + if not generator: + console.print("[red]Failed to load README generator[/red]") + return + + branches, error = resolve_targets(args) + if error: + _print_target_error(error) + return + + for branch in branches: + branch_name = branch['name'] + branch_path = branch['path'] + + console.print() + console.print(f"[bold cyan]README Check: {branch_name}[/bold cyan]") + + readme_path = Path(branch_path) / 'README.md' + if not readme_path.exists(): + console.print(f" [yellow]No README.md found at {branch_path}[/yellow]") + continue + + try: + result = generator.update_readme_auto_sections(branch_path, dry_run=True) + _print_result(result, is_check=True) + except Exception as e: + console.print(f" [red]Error: {e}[/red]") + logger.error(f"README check failed for {branch_name}: {e}") + + +# ============================================================================= +# DISPLAY HELPERS +# ============================================================================= + +def _print_target_error(error: str) -> None: + """Display target resolution errors""" + if error == "no_args": + console.print("[yellow]Usage: seed readme update @branch[/yellow]") + console.print("[dim]Use @all to update all branches[/dim]") + elif error == "no_branches": + console.print("[red]No branches found in registry[/red]") + elif error.startswith("not_found:"): + target = error.split(":", 1)[1] + console.print(f"[red]Branch '{target}' not found in registry[/red]") + + +def _print_result(result: dict, is_check: bool = False) -> None: + """Display formatted results of an update or check operation""" + updated = result.get('updated', []) + missing = result.get('missing_markers', []) + errors = result.get('errors', []) + + if errors: + for err in errors: + console.print(f" [red]Error: {err}[/red]") + return + + for section_key, display_name in SECTION_NAMES.items(): + if section_key in updated: + if is_check: + console.print(f" [yellow]Would update[/yellow] {display_name} - content differs") + else: + console.print(f" [green]Updated[/green] {display_name}") + elif section_key in missing: + console.print(f" [dim]Skipped[/dim] {display_name} - no marker found") + else: + if is_check: + console.print(f" [green]Up to date[/green] {display_name}") + + +def print_help(): + """Print help information""" + console.print() + header("README Auto-Update") + console.print() + console.print("[yellow]USAGE:[/yellow]") + console.print(" seed readme update @branch Update auto-generated sections") + console.print(" seed readme update @all Update all branch READMEs") + console.print(" seed readme check @branch Dry run - show what would change") + console.print() + console.print("[yellow]AUTO-GENERATED SECTIONS:[/yellow]") + console.print(" TREE Directory structure") + console.print(" MODULES Module list from apps/modules/") + console.print(" COMMANDS Commands from --help output") + console.print(" HEADER Branch info from id.json") + console.print(" LAST_UPDATED Timestamp") + console.print() + console.print("[dim]Sections are marked with comments in README.md[/dim]") + console.print("[dim]Commands: readme, --help[/dim]") + + +if __name__ == "__main__": + # Handle help flag + if len(sys.argv) > 1 and sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + # Confirm Prax logger connection + logger.info("Prax logger connected to readme_update") + + # Log standalone execution + json_handler.log_operation( + "readme_update_run", + {"command": "standalone", "args": sys.argv[1:]} + ) + + # Run command + handle_command("readme", sys.argv[1:]) diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/standards_audit.py b/src/aipass/seedgo/apps/standards/aipass/modules/standards_audit.py new file mode 100755 index 00000000..43270aa6 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/standards_audit.py @@ -0,0 +1,293 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: standards_audit.py - Branch-wide Standards Audit Module +# Date: 2025-11-29 +# Version: 0.5.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v0.5.0 (2025-11-29): Refactored to thin orchestrator - extracted implementation to handlers +# - v0.4.0 (2025-11-25): Simplified - audit now always checks ALL files with full details (no flags needed) +# - v0.3.0 (2025-11-25): Added --full flag to check ALL Python files (not just entry points) +# - v0.2.0 (2025-11-21): Now uses BRANCH_REGISTRY.json as source of truth (finds all 19 branches) +# - v0.1.0 (2025-11-16): Initial implementation - system-wide branch compliance audit +# +# CODE STANDARDS: +# - Thin orchestrator - delegates to handlers +# - Scans all branches for standards compliance +# - Aggregates scores into dashboard report +# ============================================= + +""" +Standards Audit Module + +Scans all AIPass branches and generates compliance dashboard. +Shows per-branch scores, system-wide metrics, and top issues. + +Run: python3 seed.py audit +""" + +import sys +from pathlib import Path +from typing import List +from collections import defaultdict + +# ============================================================================= +# INFRASTRUCTURE SETUP +# ============================================================================= + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +# ============================================================================= +# IMPORTS +# ============================================================================= + +# Prax logger (system-wide, always first) +from prax.apps.modules.logger import system_logger as logger + +# JSON handler for tracking +from seed.apps.handlers.json import json_handler + +# CLI services (display/output formatting) +from cli.apps.modules import console, header + +# Audit handlers (implementation) +from seed.apps.handlers.audit import ( + discover_branches, + audit_branch, + audit_bypasses, + print_branch_summary, + print_system_summary, + print_bypass_audit +) +from seed.apps.handlers.audit.discovery import _is_branch_private + +# Bypass system - import from checklist +from seed.apps.modules.standards_checklist import load_bypass_rules + +# Drone services for @ resolution +from drone.apps.modules import normalize_branch_arg + + +# ============================================================================= +# COMMAND HANDLER +# ============================================================================= + +def handle_command(command: str, args: List[str]) -> bool: + """ + Handle 'audit' command + + Args: + command: Command name + args: Additional arguments + + Returns: + True if handled, False if not this module's command + """ + if command != "audit": + return False + + # Parse arguments + specific_branch = None + show_bypasses = False + + for arg in args: + if arg in ['--show-bypasses', '--bypasses', '-b']: + show_bypasses = True + elif not arg.startswith('-'): + specific_branch = normalize_branch_arg(arg) + + # Handle --show-bypasses mode + if show_bypasses: + _bp_include_private = specific_branch is not None and _is_branch_private(specific_branch) + branches = discover_branches(include_private=_bp_include_private) + if specific_branch: + branches = [b for b in branches if b['name'] == specific_branch] + + # Load bypass rules for each branch + bypass_rules_map = {} + for branch in branches: + branch_path = Path(branch['path']) + bypass_rules_map[branch['name']] = load_bypass_rules(str(branch_path)) + + bypass_results = audit_bypasses(branches, bypass_rules_map) + print_bypass_audit(bypass_results) + return True + + # ========================================================================= + # PRIVATE BRANCH ACCESS CONTROL + # ========================================================================= + # If targeting a private branch directly, only allow audit from inside + # that branch's directory. This enforces isolation per DPLAN-035. + if specific_branch and _is_branch_private(specific_branch): + # Resolve branch path from registry to check CWD + import json as _json + _registry_path = Path.home() / "BRANCH_REGISTRY.json" + _branch_path = None + if _registry_path.exists(): + try: + with open(_registry_path, 'r', encoding='utf-8') as _f: + _reg = _json.load(_f) + for _b in _reg.get('branches', []): + if _b.get('name', '').upper() == specific_branch.upper(): + _branch_path = Path(_b['path']) + break + except (ValueError, IOError): + pass + + # Also check PRIVATE_BRANCH_REGISTRY for path + if _branch_path is None: + _priv_path = Path.home() / "PRIVATE_BRANCH_REGISTRY.json" + if _priv_path.exists(): + try: + with open(_priv_path, 'r', encoding='utf-8') as _f: + _priv = _json.load(_f) + for _b in _priv.get('branches', []): + if _b.get('name', '').upper() == specific_branch.upper(): + _branch_path = Path(_b['path']) + break + except (ValueError, IOError): + pass + + if _branch_path is not None: + cwd = Path.cwd() + is_internal = cwd == _branch_path or cwd.is_relative_to(_branch_path) + if not is_internal: + console.print( + f"[red]Branch '{specific_branch}' is private " + f"— audit access restricted to internal use only[/red]" + ) + return True + + # Log audit start + json_handler.log_operation( + "standards_audit_started", + {"specific_branch": specific_branch} + ) + + # Discover branches + # When targeting a specific private branch from inside its CWD, + # include private branches in discovery so we can find it + _include_private = specific_branch is not None and _is_branch_private(specific_branch) + console.print() + header("AIPASS BRANCH STANDARDS AUDIT") + console.print() + + branches = discover_branches(include_private=_include_private) + + if specific_branch: + branches = [b for b in branches if b['name'] == specific_branch] + if not branches: + console.print(f"[red]Branch '{specific_branch}' not found[/red]") + return True + + console.print(f"[dim]Discovered {len(branches)} branches to audit...[/dim]") + + # Audit all branches (always full - checks all files) + audit_results = [] + for branch in branches: + console.print(f"[dim]Auditing {branch['name']}...[/dim]", end="\r") + + # Load bypass rules for this branch + branch_path = Path(branch['path']) + bypass_rules = load_bypass_rules(str(branch_path)) + + result = audit_branch(branch, bypass_rules) + audit_results.append(result) + + console.print(" " * 50, end="\r") # Clear progress line + + # Calculate system-wide averages for each standard + standard_scores = defaultdict(list) + for result in audit_results: + for standard, score in result['scores'].items(): + standard_scores[standard].append(score) + + system_averages = { + standard: int(sum(scores) / len(scores)) + for standard, scores in standard_scores.items() + } + + overall_system_avg = int(sum(r['average'] for r in audit_results) / len(audit_results)) if audit_results else 0 + + # Print results with system averages + for result in audit_results: + print_branch_summary(result, system_averages, overall_system_avg) + + # Print system summary (unless specific branch) + if not specific_branch: + print_system_summary(audit_results) + + # Log completion + json_handler.log_operation( + "standards_audit_completed", + { + "branches_audited": len(audit_results), + "average_compliance": int(sum(r['average'] for r in audit_results) / len(audit_results)) if audit_results else 0 + } + ) + + return True + + +def print_help(): + """Print help information""" + console.print() + console.print("[bold cyan]Standards Audit Module[/bold cyan]") + console.print("Branch-wide Standards Audit - Check compliance across all branches") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: audit, --help") + console.print() + console.print(" [cyan]audit[/cyan] - Full audit of all branches") + console.print(" [cyan]audit [branch][/cyan] - Full audit of specific branch") + console.print(" [cyan]audit --show-bypasses[/cyan] - Show all bypassed files and their current state") + console.print(" [cyan]audit [branch] -b[/cyan] - Show bypasses for specific branch") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed audit") + console.print(" drone @seed audit cortex") + console.print() + console.print(" python3 seed.py audit") + console.print(" python3 seed.py audit cortex") + console.print(" python3 seed.py audit --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Full system audit (all branches, all files)[/dim]") + console.print(" python3 seed.py audit") + console.print() + console.print(" [dim]# Full audit of specific branch[/dim]") + console.print(" python3 seed.py audit cortex") + console.print() + + console.print("[yellow]REFERENCE:[/yellow]") + console.print(" Scans all AIPass branches and generates compliance dashboard.") + console.print(" Shows per-branch scores, system-wide metrics, and top issues.") + console.print() + + +if __name__ == "__main__": + # Handle help flag + if len(sys.argv) > 1 and sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + # Confirm Prax logger connection + logger.info("Prax logger connected to standards_audit") + + # Log standalone execution + json_handler.log_operation( + "audit_run", + {"command": "standalone", "args": sys.argv[1:]} + ) + + # Run audit + handle_command("audit", sys.argv[1:]) diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/standards_checklist.py b/src/aipass/seedgo/apps/standards/aipass/modules/standards_checklist.py new file mode 100755 index 00000000..22b5490a --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/standards_checklist.py @@ -0,0 +1,874 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: standards_checklist.py - Standards Checklist Module +# Date: 2025-11-12 +# Version: 0.1.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-11-12): Initial standards checklist module - framework only +# +# CODE STANDARDS: +# - This module checks other modules for standards compliance +# ============================================= + +""" +Standards Checklist Module + +Validates modules against AIPass code standards. +Run directly or via: drone @seed checklist +""" + +import sys +import json +from pathlib import Path +from typing import List, Dict, Any, Optional +from datetime import datetime + +# ============================================================================= +# INFRASTRUCTURE SETUP +# ============================================================================= + +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) # For seed package imports + +# ============================================================================= +# IMPORTS - DEMONSTRATES PROPER IMPORT PATTERN +# ============================================================================= + +# Prax logger (system-wide, always first) +from prax.apps.modules.logger import system_logger as logger + +# JSON handler for tracking +from seed.apps.handlers.json import json_handler + +# CLI services (display/output formatting) +from cli.apps.modules import console, header + +# Standards checkers +from seed.apps.handlers.standards import imports_check +from seed.apps.handlers.standards import architecture_check +from seed.apps.handlers.standards import naming_check +from seed.apps.handlers.standards import cli_check +from seed.apps.handlers.standards import handlers_check +from seed.apps.handlers.standards import modules_check +from seed.apps.handlers.standards import documentation_check +from seed.apps.handlers.standards import json_structure_check +from seed.apps.handlers.standards import testing_check +from seed.apps.handlers.standards import error_handling_check +from seed.apps.handlers.standards import encapsulation_check +from seed.apps.handlers.standards import trigger_check +from seed.apps.handlers.standards import log_level_check +from seed.apps.handlers.standards import cli_flags_check +from seed.apps.handlers.standards import log_handler_check +from seed.apps.handlers.standards import log_visibility_check +from seed.apps.handlers.standards import permission_flags_check + +# ============================================================================= +# BYPASS SYSTEM - .seed/ config per branch +# ============================================================================= + +BRANCH_REGISTRY_PATH = Path.home() / "BRANCH_REGISTRY.json" + +BYPASS_TEMPLATE = { + "metadata": { + "version": "1.0.0", + "created": "", + "description": "Standards bypass configuration for this branch" + }, + "bypass": [], + "notes": { + "usage": "Add entries to 'bypass' list to exclude specific violations", + "example": { + "file": "apps/modules/logger.py", + "standard": "cli", + "lines": [146, 177], + "pattern": "if __name__ == '__main__'", + "reason": "Circular dependency - logger cannot import CLI" + }, + "fields": { + "file": "Relative path from branch root (required)", + "standard": "Standard name: cli, imports, naming, etc. (required)", + "lines": "Optional - specific line numbers to bypass", + "pattern": "Optional - pattern to match (e.g. 'if __name__')", + "reason": "Required - why this bypass exists" + } + } +} + + +def get_branch_from_path(file_path: str) -> Optional[Dict[str, Any]]: + """ + Detect which branch a file belongs to using BRANCH_REGISTRY + + Args: + file_path: Absolute path to file being checked + + Returns: + Branch dict with name, path, etc. or None if not in a branch + """ + try: + if not BRANCH_REGISTRY_PATH.exists(): + logger.warning("[standards_checklist] BRANCH_REGISTRY.json not found") + return None + + with open(BRANCH_REGISTRY_PATH, 'r', encoding='utf-8') as f: + registry = json.load(f) + + file_path = str(Path(file_path).resolve()) + + # Sort branches by path length (longest first) to match most specific + branches = sorted(registry.get('branches', []), + key=lambda b: len(b.get('path', '')), + reverse=True) + + for branch in branches: + branch_path = branch.get('path', '') + if file_path.startswith(branch_path + '/') or file_path == branch_path: + return branch + + return None + except Exception as e: + logger.error(f"[standards_checklist] Error reading branch registry: {e}") + return None + + +def ensure_seed_config(branch_path: str) -> Path: + """ + Ensure .seed/bypass.json exists for a branch, create if missing + + Args: + branch_path: Path to branch root + + Returns: + Path to bypass.json file + """ + seed_dir = Path(branch_path) / ".seed" + bypass_file = seed_dir / "bypass.json" + + try: + # Create .seed directory if needed + seed_dir.mkdir(exist_ok=True) + + # Create bypass.json if missing + if not bypass_file.exists(): + template = BYPASS_TEMPLATE.copy() + template["metadata"]["created"] = datetime.now().isoformat() + + with open(bypass_file, 'w', encoding='utf-8') as f: + json.dump(template, f, indent=2) + + logger.info(f"[standards_checklist] Created {bypass_file}") + + return bypass_file + except Exception as e: + logger.error(f"[standards_checklist] Error creating seed config: {e}") + return bypass_file + + +def load_bypass_rules(branch_path: str) -> List[Dict[str, Any]]: + """ + Load bypass rules from branch's .seed/bypass.json + + Args: + branch_path: Path to branch root + + Returns: + List of bypass rule dicts + """ + bypass_file = ensure_seed_config(branch_path) + + try: + if bypass_file.exists(): + with open(bypass_file, 'r', encoding='utf-8') as f: + config = json.load(f) + return config.get('bypass', []) + except Exception as e: + logger.error(f"[standards_checklist] Error loading bypass rules: {e}") + + return [] + + +def is_bypassed(file_path: str, branch_path: str, standard: str, + line: Optional[int], bypass_rules: List[Dict]) -> bool: + """ + Check if a specific violation should be bypassed + + Args: + file_path: Absolute path to file + branch_path: Path to branch root + standard: Standard name (cli, imports, etc.) + line: Line number of violation (optional) + bypass_rules: List of bypass rules + + Returns: + True if this violation should be bypassed + """ + # Get relative path from branch root + try: + rel_path = str(Path(file_path).relative_to(branch_path)) + except ValueError: + rel_path = file_path + + for rule in bypass_rules: + # Check if rule matches this file and standard + rule_file = rule.get('file', '') + rule_standard = rule.get('standard', '') + + if rule_file and rule_file != rel_path: + continue + if rule_standard and rule_standard != standard: + continue + + # Check line-specific bypass + rule_lines = rule.get('lines', []) + if rule_lines and line is not None: + if line in rule_lines: + return True + elif not rule_lines: + # No line restriction - bypass all violations for this file/standard + return True + + return False + + +def print_help(): + """Print drone-compliant help output""" + console.print() + console.print("[bold cyan]Standards Checklist Module[/bold cyan]") + console.print("Validates modules against AIPass code standards") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: checklist, check, validate, --help, --introspect") + console.print() + console.print(" [cyan]checklist[/cyan] - Run standards validation on a module") + console.print(" [cyan]check[/cyan] - Run standards validation (alias)") + console.print(" [cyan]validate[/cyan] - Run standards validation (alias)") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed checklist ") + console.print() + console.print(" [dim]# Standalone[/dim]") + console.print(" python3 /home/aipass/seed/apps/modules/standards_checklist.py ") + console.print(" python3 /home/aipass/seed/apps/modules/standards_checklist.py --introspect") + console.print(" python3 /home/aipass/seed/apps/modules/standards_checklist.py --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Check a seed module[/dim]") + console.print(" python3 /home/aipass/seed/apps/modules/standards_checklist.py /home/aipass/seed/apps/modules/imports_standard.py") + console.print() + console.print(" [dim]# Check a different branch module[/dim]") + console.print(" python3 /home/aipass/seed/apps/modules/standards_checklist.py /home/aipass/aipass_core/api/apps/api.py") + console.print() + console.print(" [dim]# Show json_handler introspection[/dim]") + console.print(" python3 /home/aipass/seed/apps/modules/standards_checklist.py --introspect") + console.print() + + console.print("[yellow]REFERENCE:[/yellow]") + console.print(" Checks imports, architecture, naming, CLI, handlers, modules,") + console.print(" documentation, JSON structure, testing, and error handling standards.") + console.print() + + +def print_json_handler_introspection(): + """Show introspection of handlers/json/json_handler.py""" + console.print() + header("json_handler.py INTROSPECTION") + console.print() + console.print("[bold cyan]Auto-Creating & Self-Healing JSON System[/bold cyan]") + console.print("[dim]Location: /home/aipass/seed/apps/handlers/json/json_handler.py[/dim]") + console.print() + + # OVERVIEW + console.print("[bold white]OVERVIEW:[/bold white]") + console.print(" Handles default JSON files (config, data, log) for seed modules.") + console.print(" Never manually create JSONs - they build themselves on first use.") + console.print() + + # KEY FUNCTIONS + console.print("[bold white]KEY FUNCTIONS:[/bold white]") + console.print() + + console.print("[bold cyan]1. AUTO-DETECTION[/bold cyan] [dim](_get_caller_module_name)[/dim]") + console.print(" Automatically detects the calling module name from the call stack") + console.print(" [green]module_name = _get_caller_module_name() # 'imports_standard'[/green]") + console.print() + + console.print("[bold cyan]2. TEMPLATE LOADING[/bold cyan] [dim](load_template)[/dim]") + console.print(" Loads JSON templates and replaces placeholders") + console.print(" [green]template = load_template('config', 'imports_standard')[/green]") + console.print(" [dim]Replaces: {{MODULE_NAME}}, {{TIMESTAMP}}[/dim]") + console.print() + + console.print("[bold cyan]3. STRUCTURE VALIDATION[/bold cyan] [dim](validate_json_structure)[/dim]") + console.print(" Validates JSON structure matches expected type") + console.print(" [green]if validate_json_structure(data, 'config'):[/green]") + console.print(" [dim]Config requires: module_name, version, config[/dim]") + console.print(" [dim]Data requires: created, last_updated[/dim]") + console.print(" [dim]Log requires: list structure[/dim]") + console.print() + + console.print("[bold cyan]4. AUTO-CREATION[/bold cyan] [dim](ensure_json_exists)[/dim]") + console.print(" Creates JSON from template if missing or corrupted") + console.print(" [green]ensure_json_exists('imports_standard', 'config')[/green]") + console.print(" [dim]• Checks if file exists[/dim]") + console.print(" [dim]• Validates structure[/dim]") + console.print(" [dim]• Regenerates if corrupted[/dim]") + console.print() + + console.print("[bold cyan]5. LOAD & SAVE[/bold cyan] [dim](load_json, save_json)[/dim]") + console.print(" Load and save JSON files with auto-creation") + console.print(" [green]data = load_json('imports_standard', 'data')[/green]") + console.print(" [green]save_json('imports_standard', 'data', updated_data)[/green]") + console.print(" [dim]Auto-updates 'last_updated' timestamp[/dim]") + console.print() + + console.print("[bold cyan]6. LOG OPERATIONS[/bold cyan] [dim](log_operation)[/dim]") + console.print(" Add entries to module log with automatic rotation") + console.print(" [green]json_handler.log_operation('validation_run', {'files': 42})[/green]") + console.print(" [dim]• Auto-detects calling module[/dim]") + console.print(" [dim]• Creates all 3 JSONs if needed[/dim]") + console.print(" [dim]• Rotates log when max_log_entries reached (FIFO)[/dim]") + console.print() + + console.print("[bold cyan]7. COUNTER MANAGEMENT[/bold cyan] [dim](increment_counter)[/dim]") + console.print(" Increment counters in data JSON") + console.print(" [green]increment_counter('imports_standard', 'validations_run', 1)[/green]") + console.print() + + console.print("[bold cyan]8. METRICS UPDATE[/bold cyan] [dim](update_data_metrics)[/dim]") + console.print(" Update multiple data metrics at once") + console.print(" [green]update_data_metrics('module', last_run='2025-11-13', status='ok')[/green]") + console.print() + + # TYPICAL WORKFLOW + console.print("[bold white]TYPICAL WORKFLOW IN A MODULE:[/bold white]") + console.print() + console.print("[bold cyan]Step 1:[/bold cyan] Import the handler") + console.print(" [dim]from seed.apps.handlers.json import json_handler[/dim]") + console.print() + + console.print("[bold cyan]Step 2:[/bold cyan] Log operations (auto-creates all JSONs)") + console.print(" [green]json_handler.log_operation('validation_started', {'target': file_path})[/green]") + console.print(" [dim]Creates: module_config.json, module_data.json, module_log.json[/dim]") + console.print() + + console.print("[bold cyan]Step 3:[/bold cyan] Update metrics as needed") + console.print(" [green]json_handler.increment_counter(module_name, 'validations_run')[/green]") + console.print(" [green]json_handler.update_data_metrics(module_name, last_status='pass')[/green]") + console.print() + + console.print("[bold cyan]Step 4:[/bold cyan] Log completion") + console.print(" [green]json_handler.log_operation('validation_complete', {'result': 'pass'})[/green]") + console.print() + + # FILE LOCATIONS + console.print("[bold white]FILE LOCATIONS:[/bold white]") + console.print(" Templates: [cyan]/home/aipass/seed/apps/json_templates/default/[/cyan]") + console.print(" - config.json") + console.print(" - data.json") + console.print(" - log.json") + console.print() + console.print(" Generated: [cyan]/home/aipass/seed/seed_json/[/cyan]") + console.print(" - {module_name}_config.json") + console.print(" - {module_name}_data.json") + console.print(" - {module_name}_log.json") + console.print() + + # KEY FEATURES + console.print("[bold white]KEY FEATURES:[/bold white]") + console.print(" [green]✓[/green] Auto-detects calling module (no module_name needed)") + console.print(" [green]✓[/green] Creates JSONs on first use (never manual creation)") + console.print(" [green]✓[/green] Self-healing (regenerates corrupted files)") + console.print(" [green]✓[/green] Log rotation (prevents unbounded growth)") + console.print(" [green]✓[/green] Structure validation (ensures data integrity)") + console.print(" [green]✓[/green] Template-based (consistent structure)") + console.print(" [green]✓[/green] Timestamp management (auto-updates last_updated)") + console.print() + + # CONSTANTS + console.print("[bold white]CONSTANTS:[/bold white]") + console.print(" [dim]SEED_ROOT = Path.home() / 'seed'[/dim]") + console.print(" [dim]SEED_JSON_DIR = SEED_ROOT / 'seed_json'[/dim]") + console.print(" [dim]JSON_TEMPLATES_DIR = SEED_ROOT / 'apps' / 'json_templates'[/dim]") + console.print() + + console.print("─" * 70) + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """ + Handle 'checklist' command + + Pattern: Return True if this module handled the command, False otherwise + + Args: + command: Command name + args: Additional arguments + + Returns: + True if handled, False if not this module's command + """ + if command != "checklist": + return False # Not our command + + # Check for introspect flag + if "--introspect" in args or "introspect" in args: + # Log introspection usage + json_handler.log_operation( + "introspect_shown", + {"command": command, "args": args} + ) + print_json_handler_introspection() + return True + + # Log module usage - triggers JSON auto-creation + json_handler.log_operation( + "checklist_run", + {"command": command, "args": args} + ) + + print_checklist(args) + return True + + +def print_checklist(args: List[str]): + """Print standards checklist and run checks""" + + MODULE_NAME = "standards_checklist" + + # Parse file path from args + if len(args) == 0: + # No file path provided - show usage + console.print() + header("Standards Checklist") + console.print() + console.print("[yellow]USAGE:[/yellow]") + console.print(" python3 /home/aipass/seed/apps/modules/standards_checklist.py ") + console.print() + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" # Check a seed module") + console.print(" python3 /home/aipass/seed/apps/modules/standards_checklist.py /home/aipass/seed/apps/modules/imports_standard.py") + console.print() + console.print(" # Check a different branch module") + console.print(" python3 /home/aipass/seed/apps/modules/standards_checklist.py /home/aipass/aipass_core/api/apps/api.py") + console.print() + console.print("[yellow]AVAILABLE CHECKERS (17/17 COMPLETE):[/yellow]") + console.print(" [green]✓[/green] imports_check - Import standards validation") + console.print(" [green]✓[/green] architecture_check - Architecture standards validation") + console.print(" [green]✓[/green] naming_check - Naming standards validation") + console.print(" [green]✓[/green] cli_check - CLI standards validation") + console.print(" [green]✓[/green] handlers_check - Handler standards validation") + console.print(" [green]✓[/green] modules_check - Module standards validation") + console.print(" [green]✓[/green] documentation_check - Documentation standards validation") + console.print(" [green]✓[/green] json_structure_check - JSON structure standards validation") + console.print(" [green]✓[/green] testing_check - Testing standards validation") + console.print(" [green]✓[/green] error_handling_check - Error handling standards validation") + console.print(" [green]✓[/green] encapsulation_check - Handler encapsulation (cross-branch/package imports)") + console.print(" [green]✓[/green] log_level_check - Log level hygiene (ERROR vs WARNING)") + console.print(" [green]✓[/green] log_handler_check - Log handler rotation (RotatingFileHandler required)") + console.print(" [green]✓[/green] log_visibility_check - Log visibility (prax system_logger required)") + console.print(" [green]✓[/green] permission_flags_check - Permission flags (no --skip-permissions)") + console.print() + console.print("─" * 70) + console.print() + return + + # Get file path + file_path = args[0] + + logger.info(f"[{MODULE_NAME}] Starting standards compliance check on {file_path}") + + # Detect branch and setup .seed/ config + branch = get_branch_from_path(file_path) + bypass_rules = [] + branch_name = "Unknown" + branch_path = None + + if branch: + branch_name = branch.get('name', 'Unknown') + branch_path = branch.get('path', '') + bypass_rules = load_bypass_rules(branch_path) + logger.info(f"[{MODULE_NAME}] Branch: {branch_name}, Bypass rules: {len(bypass_rules)}") + + # Run checklist + console.print() + header(f"Standards Checklist - {file_path}") + console.print() + + # Show branch info + console.print(f"[dim]Branch: {branch_name}[/dim]") + if branch_path: + bypass_file = Path(branch_path) / ".seed" / "bypass.json" + console.print(f"[dim]Bypass config: {bypass_file}[/dim]") + if bypass_rules: + console.print(f"[dim]Active bypasses: {len(bypass_rules)}[/dim]") + console.print() + console.print() + + # Run imports check + logger.info(f"[{MODULE_NAME}] Running IMPORTS standard check on {file_path}") + console.print("[bold cyan]IMPORTS STANDARD:[/bold cyan]") + imports_result = imports_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in imports_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + imports_score = imports_result['score'] + imports_status = "[green]PASS[/green]" if imports_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {imports_score}/100 - {imports_status}") + console.print() + logger.info(f"[{MODULE_NAME}] IMPORTS check complete: {imports_score}/100") + + # Run architecture check + logger.info(f"[{MODULE_NAME}] Running ARCHITECTURE standard check on {file_path}") + console.print("[bold cyan]ARCHITECTURE STANDARD:[/bold cyan]") + architecture_result = architecture_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in architecture_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + architecture_score = architecture_result['score'] + architecture_status = "[green]PASS[/green]" if architecture_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {architecture_score}/100 - {architecture_status}") + console.print() + logger.info(f"[{MODULE_NAME}] ARCHITECTURE check complete: {architecture_score}/100") + + # Run naming check + logger.info(f"[{MODULE_NAME}] Running NAMING standard check on {file_path}") + console.print("[bold cyan]NAMING STANDARD:[/bold cyan]") + naming_result = naming_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in naming_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + naming_score = naming_result['score'] + naming_status = "[green]PASS[/green]" if naming_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {naming_score}/100 - {naming_status}") + console.print() + logger.info(f"[{MODULE_NAME}] NAMING check complete: {naming_score}/100") + + # Run CLI check + logger.info(f"[{MODULE_NAME}] Running CLI standard check on {file_path}") + console.print("[bold cyan]CLI STANDARD:[/bold cyan]") + cli_result = cli_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in cli_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + cli_score = cli_result['score'] + cli_status = "[green]PASS[/green]" if cli_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {cli_score}/100 - {cli_status}") + console.print() + logger.info(f"[{MODULE_NAME}] CLI check complete: {cli_score}/100") + + # Run HANDLERS check + logger.info(f"[{MODULE_NAME}] Running HANDLERS standard check on {file_path}") + console.print("[bold cyan]HANDLERS STANDARD:[/bold cyan]") + handlers_result = handlers_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in handlers_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + handlers_score = handlers_result['score'] + handlers_status = "[green]PASS[/green]" if handlers_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {handlers_score}/100 - {handlers_status}") + console.print() + logger.info(f"[{MODULE_NAME}] HANDLERS check complete: {handlers_score}/100") + + # Run modules check + logger.info(f"[{MODULE_NAME}] Running MODULES standard check on {file_path}") + console.print("[bold cyan]MODULES STANDARD:[/bold cyan]") + modules_result = modules_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in modules_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + modules_score = modules_result['score'] + modules_status = "[green]PASS[/green]" if modules_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {modules_score}/100 - {modules_status}") + console.print() + logger.info(f"[{MODULE_NAME}] MODULES check complete: {modules_score}/100") + + # Run documentation check + logger.info(f"[{MODULE_NAME}] Running DOCUMENTATION standard check on {file_path}") + console.print("[bold cyan]DOCUMENTATION STANDARD:[/bold cyan]") + documentation_result = documentation_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in documentation_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + documentation_score = documentation_result['score'] + documentation_status = "[green]PASS[/green]" if documentation_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {documentation_score}/100 - {documentation_status}") + console.print() + logger.info(f"[{MODULE_NAME}] DOCUMENTATION check complete: {documentation_score}/100") + + # Run JSON structure check + logger.info(f"[{MODULE_NAME}] Running JSON_STRUCTURE standard check on {file_path}") + console.print("[bold cyan]JSON STRUCTURE STANDARD:[/bold cyan]") + json_structure_result = json_structure_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in json_structure_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + json_structure_score = json_structure_result['score'] + json_structure_status = "[green]PASS[/green]" if json_structure_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {json_structure_score}/100 - {json_structure_status}") + console.print() + logger.info(f"[{MODULE_NAME}] JSON_STRUCTURE check complete: {json_structure_score}/100") + + # Run testing check + logger.info(f"[{MODULE_NAME}] Running TESTING standard check on {file_path}") + console.print("[bold cyan]TESTING STANDARD:[/bold cyan]") + testing_result = testing_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in testing_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + testing_score = testing_result['score'] + testing_status = "[green]PASS[/green]" if testing_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {testing_score}/100 - {testing_status}") + console.print() + logger.info(f"[{MODULE_NAME}] TESTING check complete: {testing_score}/100") + + # Run error handling check + logger.info(f"[{MODULE_NAME}] Running ERROR_HANDLING standard check on {file_path}") + console.print("[bold cyan]ERROR HANDLING STANDARD:[/bold cyan]") + error_handling_result = error_handling_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in error_handling_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + error_handling_score = error_handling_result['score'] + error_handling_status = "[green]PASS[/green]" if error_handling_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {error_handling_score}/100 - {error_handling_status}") + console.print() + logger.info(f"[{MODULE_NAME}] ERROR_HANDLING check complete: {error_handling_score}/100") + + # Run encapsulation check + logger.info(f"[{MODULE_NAME}] Running ENCAPSULATION standard check on {file_path}") + console.print("[bold cyan]ENCAPSULATION STANDARD:[/bold cyan]") + encapsulation_result = encapsulation_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in encapsulation_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + encapsulation_score = encapsulation_result['score'] + encapsulation_status = "[green]PASS[/green]" if encapsulation_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {encapsulation_score}/100 - {encapsulation_status}") + console.print() + logger.info(f"[{MODULE_NAME}] ENCAPSULATION check complete: {encapsulation_score}/100") + + # Run trigger check + logger.info(f"[{MODULE_NAME}] Running TRIGGER standard check on {file_path}") + console.print("[bold cyan]TRIGGER STANDARD:[/bold cyan]") + trigger_result = trigger_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in trigger_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + trigger_score = trigger_result['score'] + trigger_status = "[green]PASS[/green]" if trigger_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {trigger_score}/100 - {trigger_status}") + console.print() + logger.info(f"[{MODULE_NAME}] TRIGGER check complete: {trigger_score}/100") + + # Run log level check + logger.info(f"[{MODULE_NAME}] Running LOG_LEVEL standard check on {file_path}") + console.print("[bold cyan]LOG LEVEL STANDARD:[/bold cyan]") + log_level_result = log_level_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in log_level_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + log_level_score = log_level_result['score'] + log_level_status = "[green]PASS[/green]" if log_level_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {log_level_score}/100 - {log_level_status}") + console.print() + logger.info(f"[{MODULE_NAME}] LOG_LEVEL check complete: {log_level_score}/100") + + # Run CLI flags check + logger.info(f"[{MODULE_NAME}] Running CLI_FLAGS standard check on {file_path}") + console.print("[bold cyan]CLI FLAGS STANDARD:[/bold cyan]") + cli_flags_result = cli_flags_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in cli_flags_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + cli_flags_score = cli_flags_result['score'] + cli_flags_status = "[green]PASS[/green]" if cli_flags_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {cli_flags_score}/100 - {cli_flags_status}") + console.print() + logger.info(f"[{MODULE_NAME}] CLI_FLAGS check complete: {cli_flags_score}/100") + + # Run log handler check + logger.info(f"[{MODULE_NAME}] Running LOG_HANDLER standard check on {file_path}") + console.print("[bold cyan]LOG HANDLER STANDARD:[/bold cyan]") + log_handler_result = log_handler_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in log_handler_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + log_handler_score = log_handler_result['score'] + log_handler_status = "[green]PASS[/green]" if log_handler_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {log_handler_score}/100 - {log_handler_status}") + console.print() + logger.info(f"[{MODULE_NAME}] LOG_HANDLER check complete: {log_handler_score}/100") + + # Run log visibility check + logger.info(f"[{MODULE_NAME}] Running LOG_VISIBILITY standard check on {file_path}") + console.print("[bold cyan]LOG VISIBILITY STANDARD:[/bold cyan]") + log_visibility_result = log_visibility_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in log_visibility_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + log_visibility_score = log_visibility_result['score'] + log_visibility_status = "[green]PASS[/green]" if log_visibility_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {log_visibility_score}/100 - {log_visibility_status}") + console.print() + logger.info(f"[{MODULE_NAME}] LOG_VISIBILITY check complete: {log_visibility_score}/100") + + # Run permission flags check + logger.info(f"[{MODULE_NAME}] Running PERMISSION_FLAGS standard check on {file_path}") + console.print("[bold cyan]PERMISSION FLAGS STANDARD:[/bold cyan]") + permission_flags_result = permission_flags_check.check_module(file_path, bypass_rules=bypass_rules) + + # Display results + for check in permission_flags_result['checks']: + symbol = "[green]✓[/green]" if check['passed'] else "[red]✗[/red]" + console.print(f" {symbol} {check['name']}: {check['message']}") + + console.print() + + # Show score + permission_flags_score = permission_flags_result['score'] + permission_flags_status = "[green]PASS[/green]" if permission_flags_result['passed'] else "[red]FAIL[/red]" + console.print(f" Score: {permission_flags_score}/100 - {permission_flags_status}") + console.print() + logger.info(f"[{MODULE_NAME}] PERMISSION_FLAGS check complete: {permission_flags_score}/100") + + # Overall summary + avg_score = int((imports_score + architecture_score + naming_score + cli_score + handlers_score + modules_score + documentation_score + json_structure_score + testing_score + error_handling_score + encapsulation_score + trigger_score + log_level_score + cli_flags_score + log_handler_score + log_visibility_score + permission_flags_score) / 17) + console.print("─" * 70) + console.print(f"[bold]OVERALL:[/bold] 17/17 standards checked - {avg_score}% average compliance") + console.print("─" * 70) + console.print() + logger.info(f"[{MODULE_NAME}] Standards check complete: {avg_score}% average compliance") + + +if __name__ == "__main__": + # Handle help flag (drone compliance) + if len(sys.argv) > 1 and sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + # Confirm Prax logger connection + logger.info("Prax logger connected to standards_checklist") + + # Check for introspect flag + if len(sys.argv) > 1 and sys.argv[1] in ['--introspect', 'introspect']: + # Log standalone introspection - triggers JSON auto-creation + json_handler.log_operation( + "introspect_shown", + {"command": "standalone"} + ) + print_json_handler_introspection() + else: + # Log standalone execution - triggers JSON auto-creation + # Pass file path arguments (skip script name) + file_args = sys.argv[1:] if len(sys.argv) > 1 else [] + json_handler.log_operation( + "checklist_run", + {"command": "standalone", "args": file_args} + ) + print_checklist(file_args) diff --git a/src/aipass/seedgo/apps/standards/aipass/modules/trigger_standard.py b/src/aipass/seedgo/apps/standards/aipass/modules/trigger_standard.py new file mode 100644 index 00000000..d5ea498d --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/modules/trigger_standard.py @@ -0,0 +1,131 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: trigger_standard.py - Trigger Standards Module +# Date: 2025-12-04 +# Version: 0.1.0 +# Category: seed/standards +# +# CHANGELOG (Max 5 entries): +# - v0.1.0 (2025-12-04): Initial standards module - trigger event bus +# +# CODE STANDARDS: +# - This module provides trigger standards when queried +# ============================================= + +""" +Trigger Standards Module + +Provides condensed trigger event bus standards for AIPass branches. +Run directly or via: drone @seed trigger +""" + +import sys +from pathlib import Path +from typing import List + +# Infrastructure +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) + +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.standards.trigger_content import get_trigger_standards + +# Import CLI services (Rich console + display functions) +from cli.apps.modules import console, header + + +def print_introspection(): + """Display module info and connected handlers""" + console.print() + console.print("[bold cyan]Trigger Standards Module[/bold cyan]") + console.print() + + console.print("[yellow]Connected Handlers:[/yellow]") + console.print() + + console.print(" [cyan]handlers/standards/[/cyan]") + console.print(" [dim]- trigger_content.py[/dim]") + console.print(" [dim]- trigger_check.py[/dim]") + console.print() + + console.print("[dim]Run 'python3 trigger_standard.py --help' for usage[/dim]") + console.print() + + +def print_help(): + """Print drone-compliant help output""" + console.print() + console.print("[bold cyan]Trigger Standards Module[/bold cyan]") + console.print("Demonstrates AIPass event bus patterns") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: trigger, events, --help") + console.print() + console.print(" [cyan]trigger[/cyan] - Display trigger event bus standards") + console.print(" [cyan]events[/cyan] - Display trigger event bus standards (alias)") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" drone @seed trigger") + console.print(" python3 trigger_standard.py") + console.print(" python3 trigger_standard.py --help") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" [dim]# Via drone[/dim]") + console.print(" drone @seed trigger") + console.print(" drone @seed events") + console.print() + console.print(" [dim]# Standalone[/dim]") + console.print(" python3 trigger_standard.py") + console.print() + + console.print("[yellow]REFERENCE:[/yellow]") + console.print(" /home/aipass/seed/standards/CODE_STANDARDS/trigger.md") + console.print() + + +def handle_command(command: str, args: List[str]) -> bool: + """Handle 'trigger' command""" + if command != "trigger": + return False + + # Log module usage + json_handler.log_operation( + "standard_displayed", + {"command": command} + ) + + print_standard() + return True + + +def print_standard(): + """Print trigger standards - orchestrates handler call""" + console.print() + header("Trigger Standards") + console.print() + console.print(get_trigger_standards()) + console.print() + console.print("-" * 70) + console.print() + + +if __name__ == "__main__": + # Show introspection when run without arguments + if len(sys.argv) == 1: + print_introspection() + sys.exit(0) + + # Handle help flag (drone compliance) + if sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + # Confirm Prax logger connection + logger.info("Prax logger connected to trigger_standard") diff --git a/src/aipass/seedgo/apps/standards/aipass/plugins/__init__.py b/src/aipass/seedgo/apps/standards/aipass/plugins/__init__.py new file mode 100644 index 00000000..69b056dd --- /dev/null +++ b/src/aipass/seedgo/apps/standards/aipass/plugins/__init__.py @@ -0,0 +1 @@ +# Plugins package - Pluggable components for branch capabilities diff --git a/src/aipass/seedgo/apps/standards/app_development.example/apps/__init__.py b/src/aipass/seedgo/apps/standards/app_development.example/apps/__init__.py new file mode 100644 index 00000000..91047046 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/app_development.example/apps/__init__.py @@ -0,0 +1 @@ +# {{BRANCHNAME}} apps package diff --git a/src/aipass/seedgo/apps/standards/app_development.example/apps/branch.py b/src/aipass/seedgo/apps/standards/app_development.example/apps/branch.py new file mode 100644 index 00000000..ef38d681 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/app_development.example/apps/branch.py @@ -0,0 +1,86 @@ +""" +{{BRANCHNAME}} Branch - Main Orchestrator + +Auto-discovery architecture: +- Scans modules/ directory for .py files with handle_command() +- Routes commands to discovered modules automatically +- No manual imports or routing needed +""" + +import sys +import importlib +from pathlib import Path +from typing import List, Any + +from aipass.prax import logger + +# ============================================================================= +# MODULE DISCOVERY +# ============================================================================= + +MODULES_DIR = Path(__file__).parent / "modules" + + +def discover_modules() -> List[Any]: + """Auto-discover modules in modules/ directory.""" + modules = [] + + if not MODULES_DIR.exists(): + return modules + + for file_path in MODULES_DIR.glob("*.py"): + if file_path.name.startswith("_"): + continue + + module_name = f"apps.modules.{file_path.stem}" + + try: + module = importlib.import_module(module_name) + if hasattr(module, "handle_command"): + modules.append(module) + except Exception as e: + logger.error(f"[{{BRANCHNAME}}] Failed to load module {module_name}: {e}") + + return modules + + +def route_command(command: str, args: List[str], modules: List[Any]) -> bool: + """Route command to appropriate module.""" + for module in modules: + try: + if module.handle_command(command, args): + return True + except Exception as e: + logger.error(f"[{{BRANCHNAME}}] Module {module.__name__} error: {e}") + return False + + +# ============================================================================= +# MAIN ENTRY POINT +# ============================================================================= + +def main(): + """Main entry point - routes commands or shows help.""" + modules = discover_modules() + args = sys.argv[1:] + + if len(args) == 0 or args[0] in ["--help", "-h", "help"]: + print(f"{{BRANCHNAME}} - {len(modules)} modules discovered") + for module in modules: + name = module.__name__.split(".")[-1] + desc = (module.__doc__ or "").strip().split("\n")[0] if module.__doc__ else "No description" + print(f" {name:20} {desc}") + return 0 + + command = args[0] + remaining = args[1:] if len(args) > 1 else [] + + if route_command(command, remaining, modules): + return 0 + + print(f"Unknown command: {command}") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/aipass/seedgo/apps/standards/app_development.example/apps/handlers/__init__.py b/src/aipass/seedgo/apps/standards/app_development.example/apps/handlers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/seedgo/apps/standards/app_development.example/apps/modules/__init__.py b/src/aipass/seedgo/apps/standards/app_development.example/apps/modules/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/seedgo/apps/standards/app_development.example/apps/plugins/__init__.py b/src/aipass/seedgo/apps/standards/app_development.example/apps/plugins/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/seedgo/apps/standards/website_design.example/apps/__init__.py b/src/aipass/seedgo/apps/standards/website_design.example/apps/__init__.py new file mode 100644 index 00000000..91047046 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/website_design.example/apps/__init__.py @@ -0,0 +1 @@ +# {{BRANCHNAME}} apps package diff --git a/src/aipass/seedgo/apps/standards/website_design.example/apps/branch.py b/src/aipass/seedgo/apps/standards/website_design.example/apps/branch.py new file mode 100644 index 00000000..ef38d681 --- /dev/null +++ b/src/aipass/seedgo/apps/standards/website_design.example/apps/branch.py @@ -0,0 +1,86 @@ +""" +{{BRANCHNAME}} Branch - Main Orchestrator + +Auto-discovery architecture: +- Scans modules/ directory for .py files with handle_command() +- Routes commands to discovered modules automatically +- No manual imports or routing needed +""" + +import sys +import importlib +from pathlib import Path +from typing import List, Any + +from aipass.prax import logger + +# ============================================================================= +# MODULE DISCOVERY +# ============================================================================= + +MODULES_DIR = Path(__file__).parent / "modules" + + +def discover_modules() -> List[Any]: + """Auto-discover modules in modules/ directory.""" + modules = [] + + if not MODULES_DIR.exists(): + return modules + + for file_path in MODULES_DIR.glob("*.py"): + if file_path.name.startswith("_"): + continue + + module_name = f"apps.modules.{file_path.stem}" + + try: + module = importlib.import_module(module_name) + if hasattr(module, "handle_command"): + modules.append(module) + except Exception as e: + logger.error(f"[{{BRANCHNAME}}] Failed to load module {module_name}: {e}") + + return modules + + +def route_command(command: str, args: List[str], modules: List[Any]) -> bool: + """Route command to appropriate module.""" + for module in modules: + try: + if module.handle_command(command, args): + return True + except Exception as e: + logger.error(f"[{{BRANCHNAME}}] Module {module.__name__} error: {e}") + return False + + +# ============================================================================= +# MAIN ENTRY POINT +# ============================================================================= + +def main(): + """Main entry point - routes commands or shows help.""" + modules = discover_modules() + args = sys.argv[1:] + + if len(args) == 0 or args[0] in ["--help", "-h", "help"]: + print(f"{{BRANCHNAME}} - {len(modules)} modules discovered") + for module in modules: + name = module.__name__.split(".")[-1] + desc = (module.__doc__ or "").strip().split("\n")[0] if module.__doc__ else "No description" + print(f" {name:20} {desc}") + return 0 + + command = args[0] + remaining = args[1:] if len(args) > 1 else [] + + if route_command(command, remaining, modules): + return 0 + + print(f"Unknown command: {command}") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/aipass/seedgo/apps/standards/website_design.example/apps/handlers/__init__.py b/src/aipass/seedgo/apps/standards/website_design.example/apps/handlers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/seedgo/apps/standards/website_design.example/apps/modules/__init__.py b/src/aipass/seedgo/apps/standards/website_design.example/apps/modules/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/seedgo/apps/standards/website_design.example/apps/plugins/__init__.py b/src/aipass/seedgo/apps/standards/website_design.example/apps/plugins/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/seedgo/artifacts/birth_certificate.json b/src/aipass/seedgo/artifacts/birth_certificate.json new file mode 100644 index 00000000..95f190bc --- /dev/null +++ b/src/aipass/seedgo/artifacts/birth_certificate.json @@ -0,0 +1,15 @@ +{ + "id": "31", + "name": "SEEDGO Birth Certificate", + "type": "birth_certificate", + "creator": "SYSTEM", + "owner": "SEEDGO", + "rarity": "unique", + "description": "Official birth certificate for SEEDGO. Citizen #31, registered using 'library' template. Purpose: Enforce code standards through pluggable standard packs with 3-source discovery", + "metadata": { + "citizen_number": "31", + "template": "library", + "purpose": "Enforce code standards through pluggable standard packs with 3-source discovery" + }, + "created_at": "2026-03-05" +} diff --git a/src/aipass/seedgo/docs/aipass_code_standards/README.md b/src/aipass/seedgo/docs/aipass_code_standards/README.md new file mode 100644 index 00000000..0c5999be --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/README.md @@ -0,0 +1,85 @@ +# CODE_STANDARDS +**Status:** Active - CLI Service Provider Pattern Implemented +**Date:** 2025-11-13 (Updated) +**Last Major Update:** CLI Error Handler Migration Complete + +## Purpose + +Universal code standards for all AIPass branches. This defines how branches should be structured, how code should be organized, and the patterns all branches follow. + +## Structure + +Each file in this directory covers a specific aspect of code standards: +- **architecture.md** - Branch structure and layers ✅ +- **naming.md** - File and function naming conventions ✅ +- **json_structure.md** - Data/state management patterns (three-JSON, logs, registries) ✅ +- **cli.md** - CLI design (interactive vs arguments) + Service Provider Pattern ✅ +- **error_handling.md** - Error handling service via CLI ✅ +- **imports.md** - Import patterns and standards ✅ +- **handlers.md** - Handler-specific rules ✅ +- **modules.md** - Module-specific rules ✅ +- **documentation.md** - Code documentation requirements ✅ +- **testing.md** - Testing expectations ✅ + +## Recent Updates + +### CLI Service Provider Pattern (2025-11-13) + +**What Changed:** +- CLI branch now provides centralized formatting and error handling services +- Follows Prax pattern: import once, use throughout +- Rich library integration for beautiful console output +- Error handling migrated from Cortex to CLI (eliminated ~10,300 lines duplicate code) + +**Service Components:** +1. **Console Service** - Rich Console instance (`from cli.apps.modules import console`) +2. **Display Functions** - header, success, error, warning, section +3. **Operation Templates** - operation_start, operation_complete +4. **Error Handling** - OperationResult, decorators, automatic logging + +**Benefits:** +- Consistency across all branches +- Single source of truth for formatting +- Automatic logging integration +- Rich formatting (colors, panels, tables, progress bars) +- Centralized maintenance + +**Current Status:** +- CLI service implemented and tested (test_cli_errors.py passing) +- Seed pilot integration complete +- CLI branch self-adoption: 31% (needs error_handler.py and formatters.py migration) +- External adoption: 0 branches (ready for rollout) + +**Next Steps:** +- Complete CLI branch self-adoption (100%) +- Choose external pilot branch for adoption +- Create migration guide for remaining branches + +## Process + +1. ✅ Build skeleton structure (placeholder files) +2. ✅ Fill in detailed content for each section +3. ✅ Implement service provider patterns (CLI + Prax) +4. ⏳ Complete CLI branch self-adoption +5. ⏳ Roll out to external branches +6. ⏳ Create programmatic validation (standards checkers) + +## Philosophy + +**Understanding WHY > Following HOW** + +These standards explain the reasoning behind decisions, not just the rules. When branches read these, they should understand: +- WHY we structure code this way +- WHAT problem each pattern solves +- WHEN to apply (and when not to apply) patterns +- The CONSEQUENCES of not following standards + +This enables branches to make good decisions based on understanding, not blindly follow instructions. + +## Notes + +- These are NOT migration instructions (disposable) +- These ARE permanent reference standards +- Branches read these to understand how to structure themselves +- Standards evolve as system evolves +- Content comes from conversations → extracted and organized into sections diff --git a/src/aipass/seedgo/docs/aipass_code_standards/architecture.md b/src/aipass/seedgo/docs/aipass_code_standards/architecture.md new file mode 100644 index 00000000..56dddd2c --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/architecture.md @@ -0,0 +1,495 @@ +# Architecture Standards +**Status:** Draft v1 +**Date:** 2025-11-11 + +--- + +## The 3-Layer Pattern + +Every branch follows this structure: + +``` +apps/branch.py (Main Entry Point) + ↓ auto-discovers modules + ↓ routes commands + +apps/modules/ (Orchestration Layer) + ↓ coordinates workflow + ↓ imports handlers + ↓ minimal business logic + +apps/handlers/ (Implementation Layer) + ↓ organized by domain + ↓ contains ALL business logic + ↓ self-contained and transportable +``` + +**WHY:** Without separation, business logic, workflow, and routing tangle together. A 2000-line file contains "what to do," "how to do it," and "when to do it" all mixed up. Change one piece, risk breaking others. + +**Result:** 25 files at 200-400 lines = AI processes fast, maintains context, makes fewer errors. Humans can scan any file in under a minute. + +**Note:** All branches use `apps/` subdirectory for their code (e.g., `cortex/apps/`, `seed/apps/`, `flow/apps/`). + +--- + +## Template Baseline Compliance + +**Rule:** All branches must match the Cortex template structure. + +**Source of Truth:** `/home/aipass/aipass_core/cortex/templates/branch_template/.template_registry.json` + +**What it checks:** +- All required files from template exist in branch (with proper name transformations) +- All required directories from template exist in branch +- Template defines 30 files + 20 directories = 50 structural requirements + +**Name transformations applied:** +- `{{BRANCH}}` placeholder → Branch name in uppercase (e.g., `SEED`, `API`, `CORTEX`) +- `BRANCH.ID.json` → `{BRANCHNAME}.id.json` (e.g., `SEED.id.json`) +- `LOCAL.json` → `{BRANCHNAME}.local.json` (e.g., `SEED.local.json`) +- `OBSERVATIONS.json` → `{BRANCHNAME}.observations.json` +- `AI_MAIL.json` → `{BRANCHNAME}.ai_mail.json` +- `BRANCH.py` → `{branchname}.py` (e.g., `seed.py`) +- `README.md` → `README.json` (template uses .md, branches use .json) + +**WHY:** Cortex creates branches from template. If branches drift from template structure (missing files/directories), updates break and branch becomes non-standard. Template is the contract - all branches must honor it. + +**Verification:** Standards checker compares each branch against template registry, reports missing items. + +**Example compliance scores:** +- BACKUP_SYSTEM: 98% (missing 1 directory) +- SEED: 98% (missing 1 directory) +- FLOW: 94% (missing 3 items) +- API: 86% (missing 7 items) + +**Regenerate template registry:** When template structure changes, run: +```bash +python3 /home/aipass/aipass_core/cortex/apps/modules/regenerate_template_registry.py +``` + +--- + +## File Permissions for Python Modules + +**CRITICAL REQUIREMENT:** All Python files MUST have execute permissions set. + +```bash +chmod +x /path/to/module.py +``` + +**WHY:** The shebang line (`#!/home/aipass/.venv/bin/python3`) only works if the file has execute permissions. Without this, attempting to run the file directly results in "Permission denied" errors. + +**When to apply:** +- Immediately after creating any new Python file +- After using Write/Edit tools to create files +- Before committing changes to repository + +**Verification:** +```bash +ls -la module.py +# Should show: -rwxr-xr-x (execute permissions for owner) +``` + +**Fix all at once:** +```bash +# Make all Python files in modules/ executable +chmod +x apps/modules/*.py + +# Fix entire branch +find apps/ -name "*.py" -exec chmod +x {} \; +``` + +**Common mistake:** Creating file with shebang but forgetting `chmod +x`, leading to confusion when direct execution fails but `python3 file.py` works. + +--- + +## Handler Independence: The Marketplace Vision + +**Rule:** Handlers cannot import MODULES from their own branch (circular dependency risk). Handlers CAN import other handlers within the same BRANCH (even across packages). + +**WHY:** If handlers depend on modules, you create circular dependencies. Handlers must be self-contained so they can be moved to a marketplace. + +**Future vision:** Branches browse marketplace → grab handler → drop it in → works immediately. No dependency hell. + +**Handler import rules:** +- ✅ Same-branch handler imports: ALLOWED (even across packages) +- ❌ Cross-branch handler imports: BLOCKED (use modules instead) +- ❌ Handler imports own-branch modules: FORBIDDEN (circular risk) + +**Current reality:** Handlers commonly import from service branches like `prax.apps.modules.logger` for system logging. This is acceptable because Prax is a system-wide service provider, not a module within the same branch. + +**Modules CAN import 20+ handlers** - this is by design. Better one module imports many handlers than handlers importing each other. Dependencies flow ONE WAY: modules → handlers. + +--- + +## Foundation Service Independence + +**CRITICAL RULE:** Foundation service providers (CLI, Prax) MUST NOT import each other. Drone (CLI router) is NOT a foundation service - it's infrastructure. + +**WHY:** Foundation services are system-wide infrastructure used by ALL branches. If they import each other, you create circular dependencies that break the entire system. + +**The Problem:** +``` +CLI modules import Prax logger + ↓ +Prax setup imports CLI console + ↓ +CIRCULAR DEPENDENCY: prax → cli → prax + ↓ +Result: ImportError on all drone commands, system broken +``` + +**The Fix:** +- CLI is a display service provider → does not need logging +- Prax is a logging service provider → does not need display formatting +- Foundation services must be independent building blocks + +**What CAN import foundation services:** +- Higher-level modules (Seed, Cortex, Flow, API, etc.) can import BOTH CLI and Prax +- Business logic can use both services together +- This is the correct pattern + +**What CANNOT import foundation services:** +- Foundation services cannot import other foundation services +- CLI cannot import Prax +- Prax cannot import CLI + +**Drone's Special Role:** +- Drone is NOT a foundation service - it's a CLI router (infrastructure layer) +- Drone CAN import CLI for display formatting (it's above foundation layer) +- Branches should NEVER import Drone (it routes TO them, not used BY them) +- See "Drone: The CLI Router" section for details on @ resolution + +**Consequence of violation:** System-wide breakage. All branches that depend on foundation services fail to import, entire AIPass ecosystem becomes non-operational. + +**Discovery:** This rule was learned 2025-11-22 when CLI added Prax logging imports, breaking all drone commands system-wide. + +--- + +## File Size Guidelines + +- **Under 300 lines:** Perfect - AI quick scan, full comprehension, few errors +- **300-500 lines:** Good - manageable for AI and humans (most Cortex modules here) +- **500-700 lines:** Getting heavy - watch it +- **700+ lines:** Consider splitting - AI context degrades, humans struggle (example: `cortex/apps/modules/update_branch.py` at 916 lines) + +**WHY:** AI comprehension drops with file size. Small files mean faster processing, cleaner context, fewer errors. Read a summary in seconds vs spending minutes processing a massive file. + +**Human factor:** 300-line file = scan in 1 minute. 2000-line file = overwhelming, can't hold in working memory. + +**Context efficiency:** Agents can process large files separately and return summaries. Your main context stays clean - no 200k token burn just to understand structure. + +--- + +## Domain-Based Organization + +**Organize by business purpose, not technical role:** + +``` +apps/handlers/ + ├── branch/ → Everything about branch lifecycle + ├── error/ → Everything about error handling + ├── json/ → Everything about JSON operations + ├── registry/ → Everything about registry management + └── cli/ → Everything about user interaction +``` + +**Verified from:** `/home/aipass/aipass_core/cortex/apps/handlers/` - These are actual domains from Cortex. + +**Note:** Actual domain names will vary by branch purpose. See naming.md for domain naming standards. + +**WHY:** Technical organization (utils/, helpers/, operations/) tells you NOTHING about what code does. "Is this a utility or operation?" doesn't help you find JSON validation. + +Domain organization: Need JSON? → `handlers/json/`. No mental translation required. + +**Consequence of NOT doing this:** Navigation becomes guessing. Related code fragments across multiple folders. Can't see conceptual boundaries. + +--- + +## Provider/Receiver Pattern + +**Dependencies flow ONE direction:** + +``` +Modules (receivers) + ↓ import and call +Handlers (providers) + ↓ return results + ↓ NEVER import modules +``` + +**Benefits:** +- **Change isolation:** Fix handler bug → all modules benefit automatically +- **Testing independence:** Test handlers alone (provide inputs, check outputs) +- **Clear failure boundaries:** Handler fails → returns error, module decides what to do + +**What breaks without it:** Circular dependencies (A imports B, B imports A), ripple changes (fix one thing, update five call sites), testing nightmare. + +--- + +## Error Handling via Decorators + +**Centralize error handling, keep business logic clean:** + +```python +# Clean business logic +@track_operation +def create_branch(name): + # 5 lines of business logic + return result +``` + +Instead of: +```python +# Error handling everywhere +def create_branch(name): + try: + # 5 lines of business logic + # 15 lines of error handling + return result + except Exception as e: + log_error(...) + print_to_console(...) + write_to_json_log(...) + return failure_result +``` + +**WHY:** Fix once, works everywhere. Error formatting bug? Fix the decorator. All operations benefit immediately. + +**Three-tier output automatic:** JSON log (machine-readable), system log (debug/audit), console output (user-friendly). + +--- + +## Terminal Visibility - Two-Level Introspection + +**PATTERN:** When run without arguments, branches show auto-discovered structure: + +### Level 1: Main Entry Point (Shows Modules Only) + +Run the main entry point to see discovered modules: + +```bash +$ python3 flow.py +``` + +Output: +``` +Flow - PLAN Management System + +Task orchestration and workflow management + +Discovered Modules: 5 + + • create_plan + • delete_plan + • list_plans + • close_plan + • archive_plan + +Run 'python3 flow.py --help' for usage information +``` + +**Main shows:** Module list ONLY (no handlers) + +### Level 2: Individual Modules (Show Connected Handlers) + +Run any module directly to see its handler dependencies: + +```bash +$ python3 create_plan.py +``` + +Output: +``` +create_plan Module + +Connected Handlers: + + handlers/plan/ + - command_parser.py + - resolve_location.py + - create_file.py + + handlers/registry/ + - load_registry.py + - save_registry.py + +Run 'python3 create_plan.py --help' for usage +``` + +**Modules show:** Their specific handler dependencies + +### WHY This Pattern Matters + +**Without introspection:** +- Navigate directories manually +- Open 10+ files to understand dependencies +- Scan imports line by line +- Takes 5-10 minutes, burns context, error-prone + +**With introspection:** +- One command: instant module list (main entry) +- One command: instant handler dependencies (module) +- Takes 5 seconds total +- No context pollution + +**Auto-discovery benefits:** +- No hardcoded lists to maintain +- Add module → automatically appears +- Remove module → automatically gone +- Zero maintenance overhead + +**Implementation:** See `/home/aipass/seed/apps/seed.py` and `/home/aipass/seed/apps/modules/architecture_standard.py` for reference pattern. + +--- + +## Drone: The CLI Router (NOT a Library) + +**CRITICAL RULE:** Drone is a CLI router that resolves @ symbols and routes commands to branches. It is NOT a library service that branches import. + +### What Drone Does + +Drone handles TWO critical responsibilities: + +1. **@ Resolution:** Converts branch handles (@flow, @seed, @cortex) to absolute paths (/home/aipass/flow, /home/aipass/seed, /home/aipass/aipass_core/cortex) +2. **Command Routing:** Routes the resolved command to the target branch's entry point + +### How @ Resolution Works + +**User types:** +```bash +drone @flow create @seed "plan_name" "description" +``` + +**Drone resolves @ symbols BEFORE passing to Flow:** +```bash +# What Drone does internally: +# 1. Sees target branch: @flow +# 2. Resolves @flow → /home/aipass/flow +# 3. Resolves @seed → /home/aipass/seed +# 4. Routes to: python3 /home/aipass/flow/apps/flow.py create /home/aipass/seed "plan_name" "description" +``` + +**What Flow receives:** +```python +# Flow's sys.argv: +['flow.py', 'create', '/home/aipass/seed', 'plan_name', 'description'] + +# Flow receives the RESOLVED PATH, not the @ symbol +# Flow NEVER sees '@seed' - it sees '/home/aipass/seed' +``` + +### The Architecture Boundary + +``` +User Command + ↓ +Drone CLI Router + ↓ resolves ALL @ symbols + ↓ routes to target branch +Target Branch Entry Point + ↓ receives resolved paths (no @ symbols) + ↓ routes to appropriate module +Module + ↓ executes business logic + ↓ uses resolved paths directly +Handlers +``` + +### NEVER Import Drone + +**WRONG:** +```python +# DON'T DO THIS - Drone is NOT a library +from drone.apps.modules import resolve_branch +path = resolve_branch("@seed") +``` + +**RIGHT:** +```bash +# Drone is a CLI tool - use it via command line +drone @seed architecture-standard +``` + +**WHY:** Drone is a CLI router, not a service provider. It sits OUTSIDE the branch ecosystem, routing commands TO branches. Branches receive commands that have ALREADY been processed by Drone. + +### Branches Should NEVER Handle @ Symbols + +**WRONG PATTERN - Don't Do This:** +```python +# BAD - Branch handling @ resolution +def handle_command(command, args): + target = args[0] + if target.startswith('@'): + # Resolving @ in branch code - WRONG! + path = resolve_branch_handle(target) +``` + +**CORRECT PATTERN:** +```python +# GOOD - Branch receives resolved path from Drone +def handle_command(command, args): + target = args[0] # Already a path like '/home/aipass/seed' + if not os.path.exists(target): + print(f"Error: Path does not exist: {target}") + return False + # Use the path directly +``` + +**WHY:** By the time your branch code runs, Drone has ALREADY resolved all @ symbols to paths. Your branch should validate paths (existence, permissions), not resolve @ symbols. + +### Discovery: Foundation Service Separation + +This rule was reinforced 2025-11-22 when CLI added Prax logging imports, breaking all drone commands system-wide. Drone depends on CLI for display formatting. If CLI depends on Prax, and Drone imports CLI, you create cascading dependencies that break the router. + +**The lesson:** Drone is infrastructure. It routes commands. It doesn't participate in the business logic of the branches it routes to. + +--- + +## Command Routing: handle_command() Pattern + +**Rule:** Each module implements `handle_command(command, args)` returning True if handled. + +**Context:** This is INTERNAL routing WITHIN a branch. This is different from Drone's routing which is EXTERNAL routing BETWEEN branches. + +**Pattern:** +```python +def handle_command(command: str, args: List[str]) -> bool: + """Handle primary command only - no aliases""" + if command != "primary_command_name": + return False + # Handle command (args may contain resolved paths from Drone) + return True +``` + +**NO ALIASES:** Session 14 removed all command aliases system-wide. One command per module. + +**Note on args:** If command was routed through Drone, args will contain RESOLVED PATHS (like `/home/aipass/seed`), not @ symbols (like `@seed`). + +--- + +## Key Consequences of NOT Following These Patterns + +1. **Marketplace vision dies** - Can't transport coupled handlers +2. **AI becomes unreliable** - Large files → context loss → more errors → slower processing +3. **Development velocity crashes** - Can't find code, can't change code, can't test code +4. **Scaling becomes impossible** - Context pollution, navigation overhead compounds, operations take hours instead of seconds +5. **Technical debt compounds** - Fixes require touching many files, changes create unpredictable ripples +6. **Duplicate @ resolution logic** - If branches handle @ themselves instead of relying on Drone, you get inconsistent resolution, maintenance burden, and unclear boundaries + +--- + +## The Core Insight + +This pattern optimizes for CONSTRAINTS: +- AI context and comprehension limits (keep context clean, agents do heavy lifting) +- Human working memory limits +- Speed and efficiency (seconds vs hours) +- Future marketplace requirements +- Scale to 50+ branches + +**Why agents matter:** Agents handle exploration/analysis separately (their own 200k context). Your main context stays clean. Process massive amounts of information in seconds without context pollution. + +**Speed example:** 480k tokens of agent work in 5 minutes = what would take a full day of back-and-forth coding. Cortex builds a branch in less than a second. Updates entire system in ~10 seconds. + +**Ignore these constraints at your peril.** System will slow down, become unreliable, eventually unmaintainable. diff --git a/src/aipass/seedgo/docs/aipass_code_standards/cli.md b/src/aipass/seedgo/docs/aipass_code_standards/cli.md new file mode 100644 index 00000000..f5d3617b --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/cli.md @@ -0,0 +1,1025 @@ +# CLI Standards +**Status:** Active - Service Provider Pattern Implemented +**Date:** 2025-11-13 (Updated) +**Last Major Update:** CLI Error Handler Migration Complete + +## What This Covers + +Command-line interface design, arguments, the dual approach (interactive for humans, arguments for AI), and the CLI service provider pattern for consistent formatting across AIPass. + +--- + +## The Problem: Interactive CLIs Don't Work Well for AI + +**Scenario:** AI_Mail has an interactive menu: +- View mail +- Send mail +- Delete mail +- Archive mail +- Settings + +**Problem:** AI has to navigate the menu, make selections, wait for prompts. It's slow, error-prone, and inefficient. + +**Solution:** Every interactive CLI needs an **argument-based equivalent**. + +--- + +## The Dual Approach + +**For Humans:** Interactive CLI with Rich formatting, questionary menus, visual feedback +- Navigate with arrow keys +- See beautiful output +- Guided workflow + +**For AI:** Argument-based commands via Drone +- `drone email send @recipient "subject" "message"` +- `drone dev add @cortex "category" "note"` +- Fast, scriptable, no interaction needed + +**Rule:** If you build an interactive CLI, you MUST build argument equivalents. + +--- + +## Drone Pattern: The Standard + +All modules conform to Drone's argument structure: + +```bash +drone [options] [arguments] + +Examples: +drone email send @flow "Update" "Plan created successfully" +drone plan create @cortex "New Feature" "Add handler marketplace" +drone dev add @prax "bug" "Logger not writing to file" +``` + +**Why this matters:** +- Consistency across ALL modules +- AI can script operations +- Terminal-first workflow +- Fast execution without navigation + +--- + +## Arguments Mirror Interactive Options + +Every page/path in your interactive CLI = one argument command. + +**Interactive flow:** +1. Main menu → Select "Send email" +2. Enter recipient +3. Enter subject +4. Enter message +5. Confirm + +**Argument equivalent:** +```bash +drone email send @recipient "subject" "message" +``` + +One line, done. No navigation. + +--- + +## Key Principles + +1. **Interactive is for exploration** (humans learning the tool) +2. **Arguments are for execution** (AI and power users getting work done) +3. **Every interactive path needs an argument** +4. **Drone pattern is universal** (consistency enables speed) + +--- + +## Command Naming Convention + +**RULE:** All command names use lowercase with hyphens for multi-word commands (kebab-case). + +**Pattern:** +- Single-word: `send`, `create`, `delete`, `list`, `check`, `track` +- Multi-word: `caller-usage`, `force-sync`, `check-status` + +**PROHIBITED:** +- ✗ Abbreviations: `create` not `cr` +- ✗ Aliases: `delete` not `del` or `rm` +- ✗ camelCase: `checkStatus` +- ✗ snake_case: `check_status` + +**WHY:** Explicit over implicit - users and AI understand intent. Matches file naming standard (snake_case files → kebab-case commands). Predictable across all modules. + +**Session 14:** All command aliases removed system-wide. One descriptive command per module. + +--- + +## Output Standard: Rich console.print() Only + +**POLICY: Rich formatting is THE standard for ALL AIPass output.** + +### Approved Output Method + +```python +from cli.apps.modules import console + +console.print("[cyan]This is the ONLY approved way to output text[/cyan]") +``` + +### Deprecated: Bare print() + +**NO bare `print()` statements** - except in: +- Test modules (temporary/throwaway code) +- Quick debugging (should be removed before commit) + +**Why:** We don't mix output methods. Rich formatting provides: +- Consistent visual design across all AIPass tools +- Color, bold, dim, and other markup +- Better readability for both humans and AI + +### Help Output: Manual Rich Formatting + +**DO NOT use `parser.print_help()`** - it outputs plain text. + +**Argparse is for PARSING arguments only, NOT for help output.** + +**Correct pattern:** +```python +def print_help(): + """Print help using Rich formatting""" + console.print() + console.print("[bold cyan]Module Name[/bold cyan]") + console.print("Module description") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" Commands: cmd1, cmd2, --help") + console.print() + console.print(" [cyan]cmd1[/cyan] - Description") + console.print(" [cyan]cmd2[/cyan] - Description") + console.print() +``` + +**Wrong:** +```python +# DON'T DO THIS - outputs plain text +parser = argparse.ArgumentParser(...) +parser.print_help() +``` + +--- + +## CLI Service Provider Pattern + +**Philosophy:** CLI branch provides formatting services, just like Prax provides logging services. + +### Single Import Pattern + +```python +# Import CLI services +from cli.apps.modules import console, header, success, error, warning + +# Use throughout your module +console.print("[bold cyan]Starting operation...[/bold cyan]") +header("My Operation") +success("Operation complete!") +``` + +### What CLI Provides + +**Console Service:** +- `console` - Rich Console instance for formatted output +- Replace all `print()` with `console.print()` for Rich markup support + +**Display Functions:** +- `header(title, details)` - Section headers with Rich Panel +- `success(message, **details)` - Success messages with checkmark +- `error(message, suggestion, error_result)` - Error messages with context +- `warning(message, **details)` - Warning messages with alert icon +- `section(title)` - Sub-section headers + +**Operation Templates:** +- `operation_start(operation, **details)` - Standard operation beginning +- `operation_complete(success, results, **summary)` - Standard operation end + +**Error Handling:** +- `error_handler` - Complete error handling service +- `OperationResult` - Success/skip/fail result objects +- `@track_operation` - Auto-logging decorator +- `@continue_on_error` - Migration-style execution +- `@collect_results` - Batch operation aggregation + +### Rich Formatting Quick Reference + +**Colors:** +```python +console.print("[red]red[/red] [green]green[/green] [yellow]yellow[/yellow]") +console.print("[blue]blue[/blue] [cyan]cyan[/cyan] [magenta]magenta[/magenta]") +``` + +**Styles:** +```python +console.print("[bold]bold[/bold] [italic]italic[/italic] [dim]dim[/dim]") +console.print("[underline]underline[/underline]") +``` + +**Combined:** +```python +console.print("[bold green]Success![/bold green]") +console.print("[dim yellow]Warning:[/dim yellow] Check this") +console.print("[red bold]Error:[/red bold] Failed") +``` + +**Emojis:** +- ✅ Success +- ❌ Error +- ⚠️ Warning +- ℹ️ Info +- ⚙️ Processing +- 📝 Note +- 🔍 Search +- ✨ Feature + +### Migration Pattern + +**Before (old style):** +```python +print("Starting operation...") +print("=" * 70) +print("MY OPERATION") +print("=" * 70) +print("✅ Success!") +``` + +**After (CLI service):** +```python +from cli.apps.modules import console, header, success + +console.print() +header("My Operation") +success("Operation complete!") +``` + +### Benefits + +1. **Consistency:** All branches use same formatting +2. **Maintainability:** Update CLI once, affects entire system +3. **Rich Features:** Tables, panels, progress bars, colors +4. **Error Handling:** Integrated with OperationResult pattern +5. **Single Source:** No duplicate formatting code + +### Implementation Notes + +- CLI branch provides service (like Prax for logging) +- Branches import from `cli.apps.modules` +- Public API in `apps/modules/`, implementation in `apps/handlers/` +- Backward compatible (old usage still works) + +**Reference:** +- Standard: `/home/aipass/standards/CODE_STANDARDS/cli.md` +- Implementation: `/home/aipass/aipass_core/cli/` +- Example Usage: `/home/aipass/seed/apps/modules/test_cli_errors.py` +- Interactive Demo: `/home/aipass/aipass_core/planning/cli_layout_demo.py` +- Module Demo: `python3 /home/aipass/seed/apps/modules/cli_standard.py` + +--- + +## Drone Compliance + +All modules must respond to `--help` flag with specific format: + +``` +Commands: command1, command2, --help + +USAGE: + drone + python3 module.py + python3 module.py --help +``` + +**Requirements:** +- Help output includes "Commands:" line +- Commands comma-separated with flags +- Shows both drone and standalone usage + +--- + +## Argument Parsing Standards + +**Philosophy:** Every module should support both interactive and argument-based execution. Arguments enable AI to script operations without navigating menus. + +### Basic Pattern + +```python +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser(description='Module description') + parser.add_argument('command', help='Command to execute') + parser.add_argument('--option', help='Optional parameter') + parser.add_argument('--flag', action='store_true', help='Boolean flag') + + args = parser.parse_args() + + # Route to handler + if args.command == "create": + handle_create(args) +``` + +### Simple sys.argv Pattern + +For modules with simple argument needs, use `sys.argv` directly: + +```python +if __name__ == "__main__": + # Check for help + if len(sys.argv) > 1 and sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + + # Get arguments + if len(sys.argv) < 2: + print("Usage: python3 module.py [args]") + sys.exit(1) + + command = sys.argv[1] + args = sys.argv[2:] # Remaining arguments + + # Route command + if command == "create": + handle_create(*args) + elif command == "delete": + handle_delete(*args) +``` + +**Real example from delete_plan.py:** +```python +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser(description='Delete PLAN file') + parser.add_argument('plan_number', help='Plan number (e.g., 0001, 1, 42)') + parser.add_argument('--yes', action='store_true', help='Skip confirmation') + + args = parser.parse_args() + + success = delete_plan(args.plan_number, confirm=not args.yes) + sys.exit(0 if success else 1) +``` + +### argparse Pattern (Complex Modules) + +For modules with many options, use argparse: + +```python +import argparse + +parser = argparse.ArgumentParser( + description='Backup System CLI', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +EXAMPLES: + python backup.py snapshot + python backup.py versioned --note "Before changes" + """ +) + +# Positional arguments +parser.add_argument('mode', choices=['snapshot', 'versioned', 'all']) + +# Optional arguments +parser.add_argument('--note', type=str, help='Backup note') +parser.add_argument('--dry-run', action='store_true', help='Show what would be backed up') + +# Flags +parser.add_argument('--verbose', '-v', action='store_true') + +args = parser.parse_args() +``` + +**Real example from backup_cli.py:** +```python +parser.add_argument('mode', nargs='?', + choices=list(BACKUP_MODES.keys()) + ['all', 'test']) +parser.add_argument('--note', type=str, help='Note for backup operation') +parser.add_argument('--list-modes', action='store_true', + help='List available backup modes') +parser.add_argument('--diff', type=str, help='Show diff for specified file') +parser.add_argument('--v1', type=str, help='First version for comparison') +``` + +### Help Flag Standard + +**Every module MUST respond to `--help` using Rich formatting:** + +```python +from cli.apps.modules import console + +if __name__ == "__main__": + # Check for help FIRST + if len(sys.argv) > 1 and sys.argv[1] in ['--help', '-h', 'help']: + print_help() + sys.exit(0) + +def print_help(): + """Print help using Rich console.print()""" + console.print() + console.print("[bold cyan]MODULE NAME[/bold cyan]") + console.print("Short Description") + console.print() + + console.print("[yellow]USAGE:[/yellow]") + console.print(" python3 module.py [options]") + console.print() + + console.print("[yellow]COMMANDS:[/yellow]") + console.print(" [cyan]create[/cyan] - Create new item") + console.print(" [cyan]delete[/cyan] - Delete item") + console.print() + + console.print("[yellow]EXAMPLES:[/yellow]") + console.print(" python3 module.py create @location \"subject\"") + console.print() +``` + +**Reference: See any SEED module for complete examples** +```bash +# See proper help formatting in action +python3 /home/aipass/seed/apps/modules/imports_standard.py --help +``` + +### Argument Types + +**Positional (required):** +```python +parser.add_argument('target', help='Target directory') +parser.add_argument('name', help='Branch name') +``` + +**Optional (named):** +```python +parser.add_argument('--subject', type=str, default='', help='Subject line') +parser.add_argument('--template', type=str, default='default') +``` + +**Flags (boolean):** +```python +parser.add_argument('--verbose', '-v', action='store_true') +parser.add_argument('--yes', action='store_true', help='Skip confirmation') +parser.add_argument('--dry-run', action='store_true') +``` + +**Choices (constrained values):** +```python +parser.add_argument('mode', choices=['snapshot', 'versioned', 'all']) +parser.add_argument('--level', choices=['debug', 'info', 'warning']) +``` + +### Exit Codes + +**Standard exit codes:** +```python +sys.exit(0) # Success +sys.exit(1) # General error +sys.exit(2) # Invalid arguments +``` + +**Real example from create_plan.py:** +```python +if success: + print(f"\n✅ Created PLAN{num:04d}") + sys.exit(0) +else: + print(f"\n❌ Failed: {error}") + sys.exit(1) +``` + +--- + +## Command Routing Structure + +**Philosophy:** Main entry point dispatches to handler functions. Keep routing simple and obvious. + +### Basic Routing Pattern + +```python +def main(): + if len(sys.argv) < 2: + # No arguments - run interactive mode + interactive_menu() + return + + command = sys.argv[1] + + # Route to handlers + if command == "--help": + print_help() + elif command == "create": + handle_create() + elif command == "delete": + handle_delete() + elif command == "list": + handle_list() + else: + print(f"Unknown command: {command}") + print("Run with --help for usage") + sys.exit(1) + +if __name__ == "__main__": + main() +``` + +### argparse Routing Pattern + +```python +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('command', help='Command to execute') + parser.add_argument('--option', help='Optional parameter') + + args = parser.parse_args() + + # Route based on command + if args.command == "create": + result = handle_create(args.option) + elif args.command == "delete": + result = handle_delete(args.option) + else: + print(f"Unknown command: {args.command}") + return 1 + + return 0 if result else 1 + +if __name__ == "__main__": + sys.exit(main()) +``` + +### Module Discovery Pattern (Advanced) + +**Real example from drone.py:** +```python +def discover_modules() -> List[Any]: + """Auto-discover modules from modules/ directory""" + modules = [] + + for file_path in MODULES_DIR.glob("*.py"): + if file_path.name.startswith("_"): + continue + + module = importlib.import_module(file_path.stem) + + # Check for required interface + if hasattr(module, 'handle_command'): + modules.append(module) + + return modules + +def route_command(args: argparse.Namespace, modules: List[Any]) -> bool: + """Route command to appropriate module""" + for module in modules: + if module.handle_command(args): + return True + return False + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('command', help='Command to execute') + args = parser.parse_args() + + # Discover and route + modules = discover_modules() + if route_command(args, modules): + return 0 + else: + print(f"Unknown command: {args.command}") + return 1 +``` + +### Orchestrator Interface Pattern + +For modules that can be called standalone OR through orchestrator: + +```python +def handle_command(args) -> bool: + """ + Orchestrator interface - called by main orchestrator + + Args: + args: Command line arguments + + Returns: + True if command was handled, False otherwise + """ + if not hasattr(args, 'command'): + return False + + # Handle this module's commands + if args.command in ["create", "new"]: + result = create_item(args.target) + return True + + if args.command == "delete": + result = delete_item(args.target) + return True + + # Not our command + return False + +# Standalone execution +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument('command') + parser.add_argument('target') + args = parser.parse_args() + + success = handle_command(args) + sys.exit(0 if success else 1) +``` + +**Real example from create_branch.py:** +```python +def handle_command(args) -> bool: + """Orchestrator interface - called by cortex.py""" + if not hasattr(args, 'command'): + return False + + # Handle create branch command + if args.command in ["create-branch", "create", "new"]: + if not hasattr(args, 'target_directory'): + print("Error: target_directory required") + return True + + target_dir = Path(args.target_directory).resolve() + return create_branch(target_dir) + + return False +``` + +### Error Handling in Routing + +```python +def main(): + try: + args = parse_arguments() + + # Route command + if args.command == "create": + return handle_create(args) + elif args.command == "delete": + return handle_delete(args) + else: + print(f"Unknown command: {args.command}") + return 1 + + except KeyboardInterrupt: + print("\nOperation cancelled by user") + return 130 # Standard cancel exit code + except Exception as e: + logger.error(f"Fatal error: {e}") + print(f"ERROR: {e}") + return 1 +``` + +--- + +## Good Argument Design + +**Philosophy:** Arguments should be intuitive, consistent, and mirror interactive flows. + +### AIPass Argument Conventions + +**@-notation for targets:** +```bash +drone email send @flow "Subject" "Message" +drone plan create @cortex "Feature" "Description" +``` + +Implementation: +```python +if target.startswith("@"): + # Remove @ and resolve to branch + branch_dir = AIPASS_ROOT / target[1:] +``` + +**Verb-noun pattern:** +```bash +drone plan create # verb noun +drone email send # verb noun +drone dev add # verb noun +``` + +**Required args first, flags after:** +```bash +# Good +python module.py create target_dir --template advanced --verbose + +# Bad +python module.py create --verbose --template advanced target_dir +``` + +**Quote strings with spaces:** +```bash +drone email send @flow "Update Complete" "All tests passing" +``` + +**Boolean flags don't need values:** +```bash +# Good +python backup.py snapshot --dry-run + +# Bad +python backup.py snapshot --dry-run=true +``` + +### Real Examples from AIPass + +**create_plan.py:** +```bash +# Simple positional args +python create_plan.py @cortex "New Feature" default + +# With flags +python create_plan.py @cortex "New Feature" --template master +``` + +**delete_plan.py:** +```bash +# With confirmation +python delete_plan.py 0042 + +# Skip confirmation +python delete_plan.py 0042 --yes +``` + +**backup_cli.py:** +```bash +# Mode selection +python backup_cli.py snapshot +python backup_cli.py versioned --note "Before changes" + +# Special commands +python backup_cli.py --list-modes +python backup_cli.py --diff "file.py" +python backup_cli.py --diff "file.py" --v1 20241101 --v2 20241102 +``` + +### Argument Design Checklist + +- [ ] **Consistent with Drone pattern** (verb-noun structure) +- [ ] **@-notation for branch targets** (if applicable) +- [ ] **Required args are positional** (no flag needed) +- [ ] **Optional args use --flags** +- [ ] **Boolean flags use action='store_true'** +- [ ] **Help flag works** (`--help`, `-h`, `help`) +- [ ] **Reasonable defaults** (don't require every flag) +- [ ] **Clear error messages** (explain what's wrong) +- [ ] **Exit codes meaningful** (0=success, 1=error) + +### Bad Argument Design + +**❌ Unclear abbreviations:** +```bash +python module.py -t @c -s "msg" # What is -t? What is -s? +``` + +**❌ Inconsistent ordering:** +```bash +# Sometimes target first +python module.py create target --option value + +# Sometimes target last +python module.py delete --option value target +``` + +**❌ Boolean flags with values:** +```bash +python module.py --verbose true # Redundant +python module.py --dry-run=false # Confusing +``` + +**❌ No help:** +```bash +python module.py --help +# (no output, or generic argparse output with no examples) +``` + +### Good Argument Design + +**✅ Clear, consistent, documented:** +```bash +# Help shows usage +python module.py --help + +# Arguments are obvious +python module.py create @branch "Subject" --template advanced + +# Boolean flags are simple +python module.py delete 42 --yes + +# Error messages are helpful +python module.py create +# Error: Missing required argument: target +# Usage: python module.py create [subject] [--template TYPE] +``` + +--- + +## Keeping Interactive and Arguments in Sync + +**Philosophy:** Every interactive path needs an argument equivalent. Same handlers, different entry points. + +### The Pattern + +```python +# ========================================== +# CORE HANDLER (used by both paths) +# ========================================== + +def create_item(target: str, subject: str = "", template: str = "default"): + """ + Core handler - pure logic, no UI + + Args: + target: Target location + subject: Item subject + template: Template to use + + Returns: + (success: bool, item_id: int, error: str) + """ + # Pure logic here + return True, 42, "" + +# ========================================== +# INTERACTIVE PATH (human users) +# ========================================== + +def interactive_menu(): + """Interactive CLI for humans""" + print("\n=== Create Item ===") + + # Collect inputs with questionary/Rich prompts + target = questionary.text("Target location:").ask() + subject = questionary.text("Subject:").ask() + template = questionary.select( + "Template:", + choices=["default", "advanced", "minimal"] + ).ask() + + # Call shared handler + success, item_id, error = create_item(target, subject, template) + + if success: + console.print(f"[green]✅ Created item {item_id}[/green]") + else: + console.print(f"[red]❌ Failed: {error}[/red]") + +# ========================================== +# ARGUMENT PATH (AI and power users) +# ========================================== + +def main(): + if len(sys.argv) < 2: + # No arguments -> interactive + interactive_menu() + return + + # Parse arguments + parser = argparse.ArgumentParser() + parser.add_argument('command') + parser.add_argument('target') + parser.add_argument('subject', nargs='?', default='') + parser.add_argument('--template', default='default') + + args = parser.parse_args() + + # Call shared handler + if args.command == "create": + success, item_id, error = create_item( + args.target, + args.subject, + args.template + ) + + if success: + print(f"✅ Created item {item_id}") + sys.exit(0) + else: + print(f"❌ Failed: {error}") + sys.exit(1) +``` + +### Key Principles + +1. **Shared handler functions** - Both paths call same logic +2. **No UI in handlers** - Pure logic, return data +3. **Different entry points** - Interactive collects inputs, arguments provide them +4. **Same outcomes** - Both paths produce identical results +5. **Test both paths** - Ensure equivalence + +### Real Example from Flow System + +**create_plan.py structure:** + +```python +# ========================================== +# CORE HANDLER +# ========================================== +def create_plan(location, subject, template_type): + """Pure logic - creates PLAN file and updates registry""" + # ... logic ... + return success, plan_num, location, template, error + +# ========================================== +# STANDALONE EXECUTION (arguments) +# ========================================== +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument('location', nargs='?') + parser.add_argument('subject', nargs='?', default='') + parser.add_argument('template', nargs='?', default='default') + + args = parser.parse_args() + + # Call handler with parsed args + success, num, loc, tmpl, error = create_plan( + args.location, + args.subject, + args.template + ) +``` + +**Used by Flow interactive menu:** + +```python +# flow.py interactive path +def interactive_create_plan(): + """Interactive menu for creating plans""" + print("\n=== Create PLAN ===") + + location = questionary.text("Location (@branch):").ask() + subject = questionary.text("Subject:").ask() + template = questionary.select( + "Template:", + choices=["default", "master", "minimal"] + ).ask() + + # Call same handler + success, num, loc, tmpl, error = create_plan( + location, subject, template + ) + + # Format results for human + if success: + console.print(f"[green]✅ Created PLAN{num:04d}[/green]") +``` + +**Used by Drone command:** + +```bash +# Direct argument path +drone plan create @cortex "New Feature" default +``` + +### Synchronization Checklist + +- [ ] **Every interactive menu option has argument equivalent** +- [ ] **Both paths use same handler functions** +- [ ] **Handlers return data, don't print directly** +- [ ] **Arguments provide all required inputs** +- [ ] **Test both paths produce same results** +- [ ] **Documentation shows both usage patterns** + +### Testing Equivalence + +```python +# Test both paths produce same result +def test_equivalence(): + # Argument path + success1, id1, _ = create_item("@test", "subject", "default") + + # Simulated interactive path (with mocked inputs) + success2, id2, _ = create_item("@test", "subject", "default") + + assert success1 == success2 + assert id1 == id2 +``` + +--- + +## TODO + +- [x] ~~Document argument parsing standards~~ ✅ DONE +- [x] ~~Show how to structure command routing~~ ✅ DONE +- [x] ~~Examples of good argument design~~ ✅ DONE +- [x] ~~How to keep interactive and arguments in sync~~ ✅ DONE +- [x] ~~error_handler.py and formatters.py implemented~~ ✅ DONE +- [ ] Expand CLI branch self-adoption (currently minimal - most CLI code predates service pattern) +- [ ] Document external branch migration process +- [ ] Create CLI service adoption checklist + +--- + +## Notes + +This isn't about making things harder by building two interfaces. It's about making the system work for both humans AND AI. Interactive CLIs are beautiful for humans but slow for AI. Arguments are fast for AI but cryptic for humans learning the tool. + +**Service Provider Pattern:** CLI transforms all CLI activities through single import. Import console, use it throughout. Consistency across the system, maintained in one place. + +Build both. Serve both audiences. diff --git a/src/aipass/seedgo/docs/aipass_code_standards/cli_flags.md b/src/aipass/seedgo/docs/aipass_code_standards/cli_flags.md new file mode 100644 index 00000000..96f04f1c --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/cli_flags.md @@ -0,0 +1,324 @@ +# CLI Flags Standard +**Status:** Active — Approved for Full Rollout +**Date:** 2026-02-21 +**Proposed by:** SEED (Session 68, dispatch from DEV_CENTRAL) + +## What This Covers + +Universal CLI flags that every branch entry point should support. This standard defines a consistent set of flags, their behavior, and implementation patterns. + +This is a companion to the existing CLI standard (`cli.md`), which covers output formatting, command naming, and argument design. This standard specifically addresses **flag conventions** across all branches. + +--- + +## The Problem + +Each branch independently decides which flags to support. Result: +- `--verbose` exists in 3 branches (PRAX, CORTEX, BACKUP_SYSTEM), absent from 13 +- `--dry-run` exists in 3 branches (CORTEX, BACKUP_SYSTEM, MEMORY_BANK), absent from 13 +- `--test` exists in 1 branch (BACKUP_SYSTEM only) +- `--version` exists in 0 branches +- `--help` is universal (the only consistent flag) + +When Patrick or an agent runs `drone @flow --verbose` or `drone @trigger --version`, nothing happens. Flags should be predictable across the system. + +--- + +## The Standard + +### Tier 1: Required (every branch entry point) + +| Flag | Short | Behavior | +|------|-------|----------| +| `--help` | `-h`, `help` | Show Rich-formatted help with Commands line for drone discovery | +| `--version` | `-V` | Print branch name and version from META DATA HEADER | + +### Tier 2: Recommended (when applicable) + +| Flag | Short | When Required | Behavior | +|------|-------|---------------|----------| +| `--verbose` | `-v` | Branches with multi-step operations | Extra diagnostic output via logger | +| `--dry-run` | | Branches with mutating/destructive commands | Preview what would happen, execute nothing | +| `--test` | | Branches with testable components | Run quick self-check, report pass/fail | + +**"When applicable" means:** If your branch has commands that modify state, `--dry-run` is recommended. If your branch has multi-step operations where intermediate output helps debugging, `--verbose` is recommended. If your branch has components that can be health-checked, `--test` is recommended. + +--- + +## Flag Specifications + +### `--help` / `-h` / `help` (REQUIRED) + +Already universal. No changes needed. Documented in `cli.md`. + +Must include `Commands:` line for drone discovery. Must use Rich `console.print()` formatting. + +### `--version` / `-V` (REQUIRED) + +Print the branch name and version, then exit. + +**Output format:** +``` +BRANCH_NAME v1.2.3 +``` + +**Where the version comes from:** Every branch entry point has a META DATA HEADER with a `Version:` field. Read it from there. + +**Implementation:** +```python +def show_version(): + """Print version from META DATA HEADER.""" + console.print("SEED v3.0.0") + +# In main(): +if args[0] in ['--version', '-V']: + show_version() + return +``` + +**Why `-V` (uppercase)?** `-v` is already taken by `--verbose`. This follows GNU convention (`python3 -V`, `git --version`). + +**Why this matters:** Version info helps debugging dispatch issues, identifying stale agents, and confirming deployments. Today, the only way to check a branch's version is to read its source file. + +### `--verbose` / `-v` (RECOMMENDED) + +Enable extra diagnostic output for the current operation. + +**What verbose output includes:** +- Module discovery details (which modules found, which matched) +- File paths being processed +- Timing information for slow operations +- Configuration values being used + +**What verbose output does NOT include:** +- Debug-level internals (use logger.debug for that) +- Raw data dumps +- Stack traces (those belong in error handling) + +**Implementation pattern:** +```python +# In entry point - set a global or pass through +verbose = '--verbose' in args or '-v' in args +if verbose: + remaining_args = [a for a in args if a not in ['--verbose', '-v']] + +# Pass to modules +route_command(command, remaining_args, modules, verbose=verbose) + +# In modules - conditional output +if verbose: + console.print(f"[dim] Processing {len(files)} files...[/dim]") +``` + +**Convention:** Verbose output uses `[dim]` Rich formatting to visually distinguish it from primary output. + +### `--dry-run` (RECOMMENDED for mutating branches) + +Preview what would happen without executing. + +**Branches where this applies:** +- FLOW (creating/deleting plans) +- AI_MAIL (sending emails) +- CORTEX (creating/deleting branches) +- BACKUP_SYSTEM (running backups) +- MEMORY_BANK (rolling over memories) +- TRIGGER (firing events) + +**Branches where this does NOT apply:** +- SEED (read-only checks) +- CLI (display services) +- DEVPULSE (read-only dev notes display) + +**Implementation pattern:** +```python +dry_run = '--dry-run' in args +if dry_run: + remaining_args = [a for a in args if a != '--dry-run'] + +# In handler: +if dry_run: + console.print("[yellow]DRY RUN[/yellow] — no changes will be made") + console.print(f" Would create: {target_path}") + console.print(f" Would update: {registry_path}") + return +# ... actual execution ... +``` + +**Convention:** Dry-run output prefixes with `[yellow]DRY RUN[/yellow]`. + +### `--test` (RECOMMENDED for testable branches) + +Run a quick self-check to verify the branch is operational. + +**What `--test` does:** +1. Verify the branch can import its dependencies +2. Verify key files/directories exist +3. Run a minimal operation (e.g., discover modules, parse a sample) +4. Report pass/fail with timing + +**What `--test` does NOT do:** +- Run the full pytest suite (that's `pytest`) +- Modify any state +- Take more than 5 seconds + +**Output format:** +``` +BRANCH_NAME self-test + ✅ Dependencies imported + ✅ Module discovery (found 8 modules) + ✅ JSON handler accessible + ✅ Config files present + 4/4 passed (0.3s) +``` + +**Implementation pattern:** +```python +def run_self_test(): + """Quick operational self-check.""" + console.print(f"[bold cyan]{BRANCH_NAME} self-test[/bold cyan]") + passed = 0 + total = 0 + + # Test 1: Dependencies + total += 1 + try: + from cli.apps.modules import console # noqa: F811 + from prax.apps.modules.logger import system_logger # noqa: F811 + console.print(" ✅ Dependencies imported") + passed += 1 + except ImportError as e: + console.print(f" ❌ Dependencies failed: {e}") + + # Test 2: Module discovery + total += 1 + modules = discover_modules() + if modules: + console.print(f" ✅ Module discovery (found {len(modules)} modules)") + passed += 1 + else: + console.print(" ❌ No modules discovered") + + # Summary + console.print(f" {passed}/{total} passed") + return passed == total +``` + +--- + +## Flag Handling Order + +Flags must be checked **before** command routing, in this order: + +```python +def main(): + args = sys.argv[1:] + + # 1. No args → introspection + if len(args) == 0: + show_introspection() + return + + # 2. Universal flags (checked before command routing) + if args[0] in ['--help', '-h', 'help']: + show_help() + return + + if args[0] in ['--version', '-V']: + show_version() + return + + if args[0] == '--test': + success = run_self_test() + sys.exit(0 if success else 1) + + # 3. Extract optional flags from args + verbose = '--verbose' in args or '-v' in args + dry_run = '--dry-run' in args + remaining_args = [a for a in args if a not in ['--verbose', '-v', '--dry-run']] + + # 4. Command routing + command = remaining_args[0] + command_args = remaining_args[1:] + route_command(command, command_args, modules, verbose=verbose, dry_run=dry_run) +``` + +**Key rule:** Universal flags (`--help`, `--version`, `--test`) are handled as top-level actions — they execute and exit. Behavioral flags (`--verbose`, `--dry-run`) modify how commands execute and are stripped before routing. + +--- + +## Drone's Role + +Drone should NOT intercept or inject universal flags. Reasons: + +1. **Transparency** — branches own their own behavior +2. **Simplicity** — drone is a router, not a preprocessor +3. **Consistency** — `python3 apps/seed.py --version` and `drone @seed --version` behave identically + +Drone already passes `--help` through to branches correctly. The same pattern applies to all universal flags. + +**One exception to consider (future):** Drone could add a `drone @branch --ping` command that checks if the branch is reachable and responds. This would be a drone-level feature, not a branch flag. + +--- + +## What This Does NOT Standardize + +- **Command-specific flags** (e.g., `--template`, `--note`, `--force`) — these are domain-specific and belong to individual branches +- **Subcommand flags** (e.g., `drone @flow create --template master`) — these are handled by modules, not the entry point +- **Short flags beyond -h, -v, -V** — branches can define their own short flags for command-specific options + +--- + +## Migration Path + +This standard does not require immediate system-wide changes. Recommended rollout: + +**Phase 1: Add `--version` to all branches** +- Lowest effort, highest value +- Just read the META DATA HEADER version string +- Can be done branch-by-branch + +**Phase 2: Add `--test` to core branches** +- SEED, DRONE, FLOW, AI_MAIL, PRAX, CORTEX first +- Each branch defines what "self-test" means for them +- Enables automated health checking + +**Phase 3: Standardize `--verbose` and `--dry-run`** +- Branches that already have these: verify they follow the convention +- Branches that need them: add as part of normal development + +**No big-bang migration.** New branches get these flags from the Cortex template. Existing branches adopt them naturally. + +--- + +## Survey Results (2026-02-21) + +Current flag support across 16 branch entry points: + +| Branch | --help | --version | --verbose | --dry-run | --test | Parsing | +|--------|--------|-----------|-----------|-----------|--------|---------| +| SEED | ✅ | ❌ | ❌ | ❌ | ❌ | sys.argv | +| DRONE | ✅ | ❌ | ❌ | ❌ | ❌ | sys.argv | +| FLOW | ✅ | ❌ | ❌ | ❌ | ❌ | sys.argv | +| AI_MAIL | ✅ | ❌ | ❌ | ❌ | ❌ | sys.argv | +| PRAX | ✅ | ❌ | ✅ | ❌ | ❌ | argparse | +| CORTEX | ✅ | ❌ | ✅ | ✅ | ❌ | argparse | +| BACKUP_SYSTEM | ✅ | ❌ | ✅ | ✅ | ✅ | argparse | +| CLI | ✅ | ❌ | ❌ | ❌ | ❌ | sys.argv | +| TRIGGER | ✅ | ❌ | ❌ | ❌ | ❌ | sys.argv | +| MEMORY_BANK | ✅ | ❌ | ❌ | ✅ | ❌ | sys.argv | +| THE_COMMONS | ✅ | ❌ | ❌ | ❌ | ❌ | sys.argv | +| DEVPULSE | ✅ | ❌ | ❌ | ❌ | ❌ | sys.argv | +| SCHEDULER | ✅ | ❌ | ❌ | ❌ | ❌ | none | +| NEXUS | ✅ | ❌ | ❌ | ❌ | ❌ | argparse | +| SPEAKEASY | ✅ | ❌ | ❌ | ❌ | ❌ | sys.argv | +| API | ✅ | ❌ | ❌ | ❌ | ❌ | sys.argv | + +**Summary:** --help is 16/16. Everything else is 0-3/16. Significant opportunity for standardization. + +--- + +## Notes + +This standard is deliberately lightweight. It defines what flags should exist and what they should do, not how to build a flag parsing framework. The existing sys.argv and argparse patterns in `cli.md` handle the implementation side. + +The goal is predictability: when you type `drone @anything --version`, you get a version. When you type `drone @anything --test`, you get a health check. No surprises. diff --git a/src/aipass/seedgo/docs/aipass_code_standards/diagnostics.md b/src/aipass/seedgo/docs/aipass_code_standards/diagnostics.md new file mode 100644 index 00000000..a7c23585 --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/diagnostics.md @@ -0,0 +1,188 @@ +# Diagnostics Standards +**Status:** Draft v1 +**Date:** 2025-12-04 + +--- + +## Core Principle + +Type errors caught at development time are cheaper than runtime bugs. + +**WHY:** AIPass uses Python type hints extensively. The diagnostics checker uses pyright (same engine as VS Code's Pylance) to catch type errors, undefined variables, and other static analysis issues before code runs. + +--- + +## What It Checks + +The diagnostics checker runs pyright on Python files to detect: + +1. **Type Errors** + - Function return type mismatches + - Argument type mismatches + - Incompatible assignments + +2. **Undefined Variables** + - Typos in variable names + - Using variables before assignment + - Missing imports + +3. **Missing Attributes** + - Accessing non-existent properties + - Method name typos + +4. **Import Errors** + - Missing modules + - Circular import issues + +--- + +## Usage + +### Single File +```bash +python3 /home/aipass/seed/apps/handlers/standards/diagnostics_check.py /path/to/file.py +``` + +### Entire Directory +```bash +python3 /home/aipass/seed/apps/handlers/standards/diagnostics_check.py /home/aipass/seed/apps/ +``` + +### Branch Check +```python +from seed.apps.handlers.standards.diagnostics_check import check_branch +result = check_branch('/home/aipass/seed') +``` + +--- + +## Output Format + +```python +{ + 'total_files': 42, + 'files_with_errors': 3, + 'total_errors': 7, + 'total_warnings': 12, + 'results': [ + { + 'file': '/path/to/file.py', + 'errors': 2, + 'warnings': 1, + 'diagnostics': [ + { + 'line': 45, + 'severity': 'error', + 'message': 'Type "str" cannot be assigned to "int"', + 'rule': 'reportAssignmentType' + } + ] + } + ] +} +``` + +--- + +## Common Issues and Fixes + +### 1. Type Mismatch +```python +# Error: Type "str" cannot be assigned to "int" +def get_count() -> int: + return "5" # Wrong! + +# Fix: +def get_count() -> int: + return 5 +``` + +### 2. Undefined Variable +```python +# Error: "result" is not defined +def process(): + print(result) # result not defined + +# Fix: +def process(): + result = compute() + print(result) +``` + +### 3. Missing Return Type +```python +# Warning: Return type is "None", should be "str" +def get_name() -> str: + if condition: + return name + # Missing return! + +# Fix: +def get_name() -> str: + if condition: + return name + return "" # or raise exception +``` + +--- + +## Ignore Patterns + +The diagnostics checker respects audit ignore patterns from `ignore_handler.py`: + +- `__pycache__/` - Compiled files +- `.git/` - Version control +- `venv/`, `.venv/` - Virtual environments +- `node_modules/` - Node dependencies +- Test fixtures and mocks + +--- + +## Integration with Development + +### VS Code +If you use VS Code with Pylance, you see the same errors in real-time. The diagnostics checker runs the same engine (pyright) for CI/audit purposes. + +### Pre-commit Hook +```bash +# In .pre-commit-config.yaml +- repo: local + hooks: + - id: pyright + name: pyright + entry: python3 -m pyright + language: system + types: [python] +``` + +### Audit Integration +The standards audit can include diagnostics: +```bash +drone @seed audit --diagnostics +``` + +--- + +## Severity Levels + +| Severity | Meaning | Action | +|----------|---------|--------| +| error | Type error, undefined variable | Must fix | +| warning | Potential issue, deprecated usage | Should fix | +| information | Style suggestion | Optional | + +--- + +## Requirements + +- **pyright** installed: `pip install pyright` +- Python 3.10+ (for type hint features) +- Type hints in code (the more hints, the better analysis) + +--- + +## Reference + +- **Checker:** `/home/aipass/seed/apps/handlers/standards/diagnostics_check.py` +- **Pyright Docs:** https://microsoft.github.io/pyright/ +- **Python Typing:** https://docs.python.org/3/library/typing.html diff --git a/src/aipass/seedgo/docs/aipass_code_standards/documentation.md b/src/aipass/seedgo/docs/aipass_code_standards/documentation.md new file mode 100644 index 00000000..0602ee52 --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/documentation.md @@ -0,0 +1,567 @@ +# Documentation Standards +**Status:** v1.0 - Verified against actual codebase +**Date:** 2025-11-13 + +--- + +## File Header Structure + +Every Python file follows this header pattern: + +```python +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: filename.py - Brief Description +# Date: YYYY-MM-DD +# Version: X.Y.Z +# Category: branch_name or branch_name/handlers +# +# CHANGELOG (Max 5 entries): +# - vX.Y.Z (YYYY-MM-DD): Change description +# +# CODE STANDARDS: +# - Error handling: Use error handler system +# ============================================= + +""" +Module Title + +Brief description of module purpose. +Key functionality: +- Feature 1 +- Feature 2 +- Feature 3 +""" +``` + +**NOTE:** Some files also include `# -*- coding: utf-8 -*-` after the shebang line (seen in cortex files). This is optional but valid. + +--- + +## Shebang Line + +```python +#!/home/aipass/.venv/bin/python3 +# -*- coding: utf-8 -*- # Optional - seen in some cortex files +``` + +**WHY:** Points to AIPass venv, ensuring correct Python environment and dependencies. + +**EXCEPTION - MEMORY_BANK:** +```python +#!/home/aipass/MEMORY_BANK/.venv/bin/python3 +``` +MEMORY_BANK uses its own isolated virtual environment at `/home/aipass/MEMORY_BANK/.venv`. + +**IMPORTANT - EXECUTE PERMISSIONS:** + +After creating a Python file, make it executable: +```bash +chmod +x /path/to/file.py +``` + +**WHY:** The shebang line only works if the file has execute permissions. Without `chmod +x`, you'll get "Permission denied" errors when trying to run the file directly. + +**When to set:** +- Immediately after creating any new Python module +- After using Write tool to create files +- Verify with: `ls -la file.py` (should show `-rwxr-xr-x`) + +**Fix all modules at once:** +```bash +# Make all Python files in a directory executable +chmod +x /path/to/modules/*.py +``` + +**VERIFIED IN:** +- `/home/aipass/aipass_core/cortex/apps/modules/create_branch.py` +- `/home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py` +- `/home/aipass/seed/apps/handlers/domain1/ops.py` + +--- + +## META Block + +**Standard format:** +```python +# ===================AIPASS==================== +# META DATA HEADER +# Name: create_branch.py - Create New AIPass Branch +# Date: 2025-11-10 +# Version: 2.1.0 +# Category: cortex +# +# CHANGELOG (Max 5 entries): +# - v2.1.0 (2025-11-10): Added template placeholder system +# - v2.0.0 (2025-11-08): Complete rewrite with handler architecture +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= +``` + +**Fields:** +- **Name:** Filename + dash-separated description +- **Date:** Creation date (YYYY-MM-DD) +- **Version:** Semantic versioning (major.minor.patch) +- **Category:** Branch name (e.g., `cortex`) or `cortex/handlers` for handlers +- **CHANGELOG:** Max 5 entries - version, date, what changed +- **CODE STANDARDS:** Reference to error handler (standard across all files) + +**WHY META blocks:** +- **AI scannable:** Agents can extract metadata without parsing code +- **Version tracking:** Know what version you're looking at immediately +- **History at a glance:** Recent changes visible without git log +- **Standardization:** Every file has same metadata structure + +**Handler example:** +```python +# Category: cortex/handlers +# Category: seed/handlers/domain1 +``` + +**Module example:** +```python +# Category: cortex +# Category: seed/test +``` + +**VERIFIED IN:** +- `/home/aipass/aipass_core/cortex/apps/modules/create_branch.py` (Category: cortex) +- `/home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py` (Category: cortex/handlers) +- `/home/aipass/seed/apps/modules/test_cli_errors.py` (Category: seed/test) +- `/home/aipass/seed/apps/handlers/domain1/ops.py` (Category: seed/handlers/domain1) + +--- + +## Module-Level Docstrings + +**Pattern:** Triple-quoted string immediately after META block + +```python +""" +Module Title + +Brief description of module purpose. +Longer explanation if needed. + +Key functionality: +- Feature 1 +- Feature 2 +- Feature 3 + +May include usage examples or workflow notes. +""" +``` + +**Examples:** + +**Module:** +```python +""" +Create Branch Module + +Creates a new AIPass branch from template with all necessary structure. +Workflow: template copy, file renaming, module migration, branch registration +""" +``` + +**Handler:** +```python +""" +File Operations Handler + +Functions for file and directory operations: +- File renaming with placeholder replacement +- Directory renaming +- Template content copying +- Module migration +- Memory file management +""" +``` + +**With usage example (verified from actual code):** +```python +""" +Error Handler Decorators + +Decorators for automatic error handling, logging, and result formatting. + +Usage: + from cortex.apps.handlers.error_handler import track_operation + + @track_operation + def my_function(arg): + # Just write business logic + return result +""" +``` +*From: `/home/aipass/aipass_core/cortex/apps/handlers/error/decorators.py`* + +**WHY:** First thing you see after metadata. Tells you what the file does and key features. No need to read code to understand purpose. + +--- + +## Function Docstrings + +**Pattern:** Google-style with Args/Returns/Raises + +```python +def function_name(arg1: Type, arg2: Type) -> ReturnType: + """ + Brief one-line description + + Longer description if needed (optional). + Can span multiple lines for complex functions. + + Args: + arg1: Description of arg1 + arg2: Description of arg2 + + Returns: + Description of return value + + Raises: + ExceptionType: When this exception occurs (optional) + """ +``` + +**Real examples (verified from actual code):** + +```python +def find_existing_memory_files(target_dir: Path, branch_name: str) -> Dict[str, Path]: + """ + Find existing memory files with any naming convention (hyphens, underscores, etc.) + + Args: + target_dir: Path to branch directory + branch_name: Branch name to match against + + Returns: + Dict mapping file types (main, local, observations, ai_mail, id) to Path objects + """ +``` +*From: `/home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py`* + +```python +def create_operation(name: str, data: Dict[str, Any]) -> Dict[str, Any]: + """ + Demonstrate domain-specific business logic + + [SHOWROOM] This would contain actual implementation. + Shows structure, typing, documentation patterns. + + Args: + name: Thing name + data: Thing configuration + + Returns: + Operation result dict with success/error/details + """ +``` +*From: `/home/aipass/seed/apps/handlers/domain1/ops.py`* + +**WHY Google-style:** +- **Readable:** Args/Returns sections visually separate +- **Parseable:** Tools can extract parameter docs automatically +- **Standard:** Widely used, AI understands it well + +**When to skip Raises:** If function doesn't raise exceptions or uses decorators for error handling. + +--- + +## Type Hints + +**Rule:** ALL function signatures have type hints + +```python +# Standard types +def function(path: Path, name: str, count: int) -> bool: + +# Optional types +def function(data: Optional[str]) -> Optional[Path]: + +# Generic types +def function(data: Dict[str, Any]) -> List[str]: + +# Tuple returns +def function() -> Tuple[List[str], List[str]]: + +# Modern union (Python 3.10+) +def validate_path(path: Path) -> tuple[bool, str | None]: +``` + +**Complex example:** +```python +def copy_template_contents( + template_dir: Path, + target_dir: Path, + replacements: Dict[str, str], + branch_name: str, + exclude_patterns: List[str], + file_renames: Dict[str, str], + allowed_placeholders: set = None +) -> Tuple[List[str], List[str], List[Dict[str, Any]]]: +``` + +**WHY:** +- **AI comprehension:** Knows what types to expect/return +- **IDE support:** Autocomplete, error detection +- **Self-documenting:** Function signature tells you data shapes +- **Error prevention:** Catch type mismatches before runtime + +--- + +## Section Separators + +**Pattern:** Comment blocks to organize code sections + +```python +# ============================================================================= +# SECTION NAME +# ============================================================================= +``` + +**Common sections (verified in actual code):** +- `CONSTANTS` +- `FILE DISCOVERY AND MATCHING` +- `HELPER FUNCTIONS` +- `CORE WORKFLOW` +- `MODULE INTERFACE` +- `FILE OPERATIONS` +- `METADATA EXTRACTION` +- `STANDALONE EXECUTION` + +**Example (verified from create_branch.py):** +```python +# ============================================================================= +# CONSTANTS +# ============================================================================= + +# Get template directory +AIPASS_ROOT = Path.home() / "aipass_core" +TEMPLATE_DIR = AIPASS_ROOT / "cortex" / "templates" / "branch_template" + +# Files to exclude from template copy +EXCLUDE_PATTERNS = [ + "setup_instructions", + "new_branch_setup.py", + "upgrade_branch.py", + ".git", + "__pycache__", +] +``` + +**Example (verified from file_ops.py):** +```python +# ============================================================================= +# FILE DISCOVERY AND MATCHING +# ============================================================================= + +def find_existing_memory_files(target_dir: Path, branch_name: str) -> Dict[str, Path]: + """Find existing memory files with any naming convention""" +``` + +**WHY:** +- **Quick navigation:** Scan file, find section instantly +- **Logical grouping:** Related functions together +- **AI parsing:** Clear boundaries for context extraction + +--- + +## Inline Comments + +**When to use:** +1. Clarifying non-obvious logic (what and why) +2. Important warnings or gotchas +3. Algorithm steps in complex operations +4. Protection rules or edge cases + +**Patterns:** + +```python +# Single-line explanation above code +backup_branch() + +# Inline explanation for single statement +result = complex_operation() # Extracts metadata from template + +# Multi-step process markers +# Step 1: Backup branch +backup() + +# Step 2: Remove from registry +remove() +``` + +**Examples from actual codebase:** + +```python +# Memory file suffixes to check (JSON format) +memory_suffixes = [".json", ".local.json", ".observations.json", ".ai_mail.json", ".id.json"] + +# Normalize to check if it matches branch name +prefix_normalized = prefix.replace("-", "_").upper() +``` +*From: `/home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py`* + +Note: The PROTECTION RULE example is a pattern that may exist in other files but was not verified in the sample files examined. + +**When NOT to use:** +- Obvious code (don't narrate what's already clear) +- Repeating what docstring says +- Commenting out old code (delete it instead) + +**WHY:** +- **Context for future you:** Why did I do it this way? +- **Warning flags:** PROTECTION RULE stands out +- **Algorithm clarity:** Step markers show workflow + +--- + +## Import Organization + +**Standard pattern (verified from actual code):** + +```python +#!/home/aipass/.venv/bin/python3 +# -*- coding: utf-8 -*- + +# [META BLOCK] + +"""Module docstring""" + +# Infrastructure setup (if needed) +import sys +from pathlib import Path +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) + +# Standard library imports +import json +from datetime import datetime +from typing import Dict, List, Optional, Tuple + +# Prax logger +from prax.apps.modules.logger import system_logger as logger + +# Internal handler imports +from cortex.apps.handlers.json import json_handler +from cortex.apps.handlers.branch import file_ops +``` + +**VERIFIED IN:** +- `/home/aipass/aipass_core/cortex/apps/modules/create_branch.py` +- `/home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py` +- `/home/aipass/seed/apps/modules/test_cli_errors.py` + +**Import sections (in order):** +1. Infrastructure setup (AIPASS_ROOT, sys.path) - if needed +2. Standard library imports +3. Prax logger (always from prax.apps.modules.logger) +4. Internal/local handler imports + +**WHY this order:** +- **Infrastructure first:** Must run before other imports can work +- **Standard library grouped:** Easy to see external dependencies +- **Prax consistent:** Always `from prax.apps.modules.logger import system_logger as logger` +- **Internal last:** After all external dependencies resolved + +**NOTE:** Some modules use try/except blocks to gracefully handle missing handlers (see create_branch.py for example). + +--- + +## Constants + +**Pattern:** ALL_CAPS names with inline comments + +```python +# ============================================================================= +# CONSTANTS +# ============================================================================= + +# Get template directory +AIPASS_ROOT = Path.home() / "aipass_core" +TEMPLATE_DIR = AIPASS_ROOT / "cortex" / "templates" / "branch_template" + +# Files to exclude from template copy +EXCLUDE_PATTERNS = [ + "setup_instructions", + "new_branch_setup.py", + ".git", + "__pycache__", +] + +# Files to rename after copying +FILE_RENAMES = { + "LOCAL.json": "{BRANCHNAME}.local.json", + "OBSERVATIONS.json": "{BRANCHNAME}.observations.json", +} +``` + +**WHY:** +- **ALL_CAPS signals:** This is configuration, not a variable +- **Comments explain purpose:** Not just WHAT, but WHY we need it +- **Grouped together:** All config in one place, easy to modify + +--- + +## Summary: Documentation Hierarchy + +**File level (top to bottom):** +1. Shebang +2. META block (metadata) +3. Module docstring (purpose) +4. Imports (organized) +5. Constants (configuration) +6. Section separators + functions (implementation) + +**Function level:** +- Type hints (signature) +- Docstring (Args/Returns/Raises) +- Inline comments (clarification only) + +**WHY this matters:** +- **AI scannable:** Can extract metadata/purpose without reading all code +- **Human scannable:** Read top to bottom, understand file in 30 seconds +- **Consistent:** Same structure everywhere, know where to look + +--- + +## Quick Reference + +| Element | Pattern | Required? | +|---------|---------|-----------| +| Shebang | `#!/home/aipass/.venv/bin/python3` | Yes | +| META Block | AIPASS format | **Yes** | +| Module Docstring | Triple-quoted | **Yes** | +| Function Docstring | Google-style | **Yes** | +| Type Hints | Full typing | **Yes** | +| Section Separators | `# ===...===` | Recommended | +| Inline Comments | Clarification only | As needed | +| Import Organization | Infrastructure → Standard → Prax → Internal | Yes | + +**The standard:** If Cortex or Seed does it, that's the pattern. These aren't theoretical - verified against actual production code in: +- `/home/aipass/aipass_core/cortex/apps/` +- `/home/aipass/seed/apps/` + +--- + +## Verification Notes + +**Files examined for truth-checking (2025-11-13):** +- `/home/aipass/aipass_core/cortex/apps/modules/create_branch.py` +- `/home/aipass/aipass_core/cortex/apps/handlers/branch/file_ops.py` +- `/home/aipass/aipass_core/cortex/apps/handlers/error/decorators.py` +- `/home/aipass/seed/apps/modules/test_cli_errors.py` +- `/home/aipass/seed/apps/handlers/domain1/ops.py` + +All patterns, examples, and file paths verified against actual code. + +## Comments + +#@comments:2025-11-13:claude: All examples now include source file references for verification +#@comments:2025-11-13:claude: Updated encoding line as optional (present in cortex, optional in seed) +#@comments:2025-11-13:claude: Corrected memory_suffixes list to include .ai_mail.json and .id.json diff --git a/src/aipass/seedgo/docs/aipass_code_standards/encapsulation.md b/src/aipass/seedgo/docs/aipass_code_standards/encapsulation.md new file mode 100644 index 00000000..d8566a8f --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/encapsulation.md @@ -0,0 +1,159 @@ +# Encapsulation Standards +**Status:** Draft v1 +**Date:** 2025-12-04 + +--- + +## Core Principle + +Handlers are implementation details. Modules are the public API. + +**WHY:** When Branch A imports Branch B's handlers directly, it creates tight coupling that breaks when handlers change. Modules provide stable entry points that can evolve internally without breaking callers. + +--- + +## The Three Rules + +### 1. No Cross-Branch Handler Imports + +**BAD:** +```python +# In api branch, importing flow's handlers +from flow.apps.handlers.plan.validator import validate_plan +``` + +**GOOD:** +```python +# Use module entry point +from flow.apps.modules.plan_validator import validate_plan +``` + +**WHY:** Handlers are internal to their branch. If Flow restructures its handlers, API breaks. Modules provide stable interfaces. + +--- + +### 2. No Cross-Package Handler Imports + +Within the same branch, handlers shouldn't import other handler packages. + +**BAD:** +```python +# In handlers/standards/imports_check.py +from apps.handlers.error.formatter import format_error +``` + +**GOOD:** +```python +# Either use module entry point +from apps.modules.error_handler import format_error + +# Or use allowed default handlers +from apps.handlers.json import json_handler +from apps.handlers.file import file_handler +``` + +**Allowed Handler Imports:** +- `json_handler` - Default JSON operations +- `file_handler` - Default file operations +- Same-package relative imports (`from .validator import X`) + +--- + +### 3. Entry Points Don't Import Handlers + +Main entry points (`branch.py`) should use modules, not handlers directly. + +**BAD:** +```python +# In api.py +from apps.handlers.openrouter.client import get_response +``` + +**GOOD:** +```python +# In api.py +from apps.modules.openrouter_client import get_response +``` + +**WHY:** Entry points are the first code users see. They should show clean architecture - modules orchestrating, not reaching into handler internals. + +--- + +## Exception: Service Branches + +These service imports ARE allowed everywhere because they provide system-wide utilities: + +```python +# Prax logger - allowed anywhere +from prax.apps.modules.logger import system_logger as logger + +# CLI services - allowed anywhere +from cli.apps.modules import console, header, success, error +``` + +**Note:** These are MODULE imports, not handler imports. Service branches expose functionality through modules, demonstrating the pattern. + +--- + +## Exception: Trigger Branch + +Trigger is the ONE place where cross-branch handler imports are acceptable: + +```python +# In trigger/apps/handlers/events/startup.py +from memory_bank.apps.handlers.mbank.rollover import check_and_rollover +``` + +**WHY:** Trigger's entire purpose is centralizing cross-branch reaction logic. It's the exception that proves the rule - instead of scattered cross-branch calls, Trigger owns them all in one place. + +Configure bypass in `.seed/bypass.json`: +```json +{ + "bypass": [{ + "file": "apps/handlers/events/startup.py", + "standard": "encapsulation", + "reason": "Trigger centralizes cross-branch calls by design" + }] +} +``` + +--- + +## Checker Implementation + +The `encapsulation_check.py` validates: + +1. **Cross-branch handler imports** - Detects imports from other branches' handlers +2. **Cross-package handler imports** - Detects handlers importing other handler packages +3. **Direct handler imports** - Detects entry points importing handlers directly + +**Detection Method:** +- Parses import statements for `apps.handlers` pattern +- Extracts branch name from import path +- Compares against current file's branch context +- Respects bypass rules from `.seed/bypass.json` + +--- + +## Bypass Configuration + +For legitimate architectural exceptions, configure `.seed/bypass.json`: + +```json +{ + "bypass": [{ + "file": "apps/handlers/events/startup.py", + "standard": "encapsulation", + "lines": [38, 42], + "reason": "Trigger centralizes cross-branch handler calls" + }] +} +``` + +--- + +## Reference + +- **Checker:** `/home/aipass/seed/apps/handlers/standards/encapsulation_check.py` +- **Handler Standard:** `/home/aipass/seed/standards/CODE_STANDARDS/handlers.md` +- **Architecture Standard:** `/home/aipass/seed/standards/CODE_STANDARDS/architecture.md` diff --git a/src/aipass/seedgo/docs/aipass_code_standards/error_handling.md b/src/aipass/seedgo/docs/aipass_code_standards/error_handling.md new file mode 100644 index 00000000..5c466572 --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/error_handling.md @@ -0,0 +1,577 @@ +# Error Handling Standards +**Status:** Active - 3-Tier Logging Architecture +**Date:** 2025-11-21 +**Last Major Update:** 2026-01-31 - Added ERROR vs WARNING log level guidelines + +## What This Covers + +Error handling, logging architecture, exception patterns, and the 3-tier separation of concerns for logging and error management across all AIPass branches. + +--- + +## The 3-Tier Architecture + +**Core Principle:** Logging responsibility follows the architectural hierarchy. + +``` +Entry Point (flow.py, seed.py) + ↓ (operational logging via Prax) +Module (apps/modules/*.py) + ↓ (business logging via Prax - catches and logs everything) +Handler (apps/handlers/**/*.py) + ↓ (operational logging via Prax - returns results to modules) +``` + +**Why This Matters:** +- **Scale:** 17 branches × 50+ handlers = 850+ files to manage +- **Auditability:** Check one directory (modules/) for all business logging +- **Testability:** Automated scans verify compliance +- **Consistency:** Single pattern across entire ecosystem + +--- + +## Tier 1: Entry Points + +**Files:** `flow.py`, `seed.py`, `prax.py`, `drone.py`, `ai_mail.py` + +**Prax Import:** YES (minimal) + +**Logging Scope:** Operational only + +**What to Log:** +```python +from prax.apps.modules.logger import system_logger as logger + +# ✓ Module discovery results +logger.info(f"Discovered {len(modules)} modules") + +# ✓ Command routing +logger.info(f"Routing command '{command}' to module") + +# ✓ Help system access +logger.info("Displaying help information") + +# ✓ Connection tests +logger.info("Testing Prax connection") +``` + +**What NOT to Log:** +```python +# ✗ Business errors (module logs these) +logger.error("Failed to create plan") # NO! + +# ✗ Handler exceptions (module logs these) +logger.error("Handler threw exception") # NO! + +# ✗ Validation failures (module logs these) +logger.warning("Invalid input") # NO! +``` + +**Characteristics:** +- Operates standalone (help, list modules) +- Same template for all branches (rename only) +- Minimal logging - operational visibility only +- Does NOT catch or log business errors + +--- + +## Tier 2: Modules (THE LOGGING LAYER) + +**Location:** `apps/modules/*.py` + +**Prax Import:** YES (required) + +**Logging Scope:** ALL business logging + +**Pattern:** +```python +from prax.apps.modules.logger import system_logger as logger + +MODULE_NAME = "create_plan" + +def handle_command(command: str, args: List[str]) -> bool: + """Handle command with full error logging""" + + try: + # Call handler + result = create_plan_handler(location, subject) + + if result['success']: + logger.info(f"[{MODULE_NAME}] Plan created successfully") + return True + else: + logger.error(f"[{MODULE_NAME}] Failed to create plan: {result['error']}") + return False + + except ValueError as e: + logger.error(f"[{MODULE_NAME}] Validation error: {e}") + return False + except FileNotFoundError as e: + logger.error(f"[{MODULE_NAME}] File not found: {e}") + return False + except Exception as e: + logger.error(f"[{MODULE_NAME}] Unexpected error: {e}") + return False +``` + +**What to Log:** +```python +# ✓ All errors +logger.error(f"[{MODULE_NAME}] Operation failed: {error_msg}") + +# ✓ All warnings +logger.warning(f"[{MODULE_NAME}] Deprecated feature used") + +# ✓ Important info +logger.info(f"[{MODULE_NAME}] Processing 15 items") + +# ✓ Workflow boundaries +logger.info(f"[{MODULE_NAME}] Starting workflow") +logger.info(f"[{MODULE_NAME}] Workflow complete") + +# ✓ Handler exceptions (caught and logged) +except ValueError as e: + logger.error(f"[{MODULE_NAME}] Handler validation failed: {e}") +``` + +--- + +## Log Level Guidelines: ERROR vs WARNING + +**Core Distinction:** ERROR triggers Prax escalation, WARNING does not. + +| Level | Use For | Examples | +|-------|---------|----------| +| `logger.error()` | **System failures** - things that shouldn't happen | File I/O errors, crashes, dependency failures, unexpected exceptions, corruption | +| `logger.warning()` | **User input issues** - expected validation failures | "Plan not found", "Field required", "Invalid format", "Already exists" | + +**Why This Matters:** +- Prax log_watcher escalates ERROR-level entries to AI_MAIL +- User typos shouldn't trigger system alerts +- ERROR = something is broken; WARNING = user needs to try again + +**Pattern:** +```python +# ✓ System failure → ERROR (Prax escalates) +logger.error(f"[{MODULE_NAME}] Failed to write file: {e}") +logger.error(f"[{MODULE_NAME}] Database connection lost") +logger.error(f"[{MODULE_NAME}] Unexpected exception: {e}") + +# ✓ User input issue → WARNING (no escalation) +logger.warning(f"[{MODULE_NAME}] Plan {plan_id} not found") +logger.warning(f"[{MODULE_NAME}] Required field 'subject' missing") +logger.warning(f"[{MODULE_NAME}] Invalid format: expected PLAN0001") +``` + +**CLI Display vs System Logging:** +- CLI can still show "ERROR" text to user (feedback) +- System logs use WARNING level (no Prax escalation) +- These are independent concerns + +**Decision:** Approved 2026-01-31 - Rollout to all branches +``` + +**Logging Pattern Rules:** +1. **Always prefix with MODULE_NAME:** `[{MODULE_NAME}]` +2. **Catch all exceptions from handlers** +3. **Log with context** - what failed, why it matters +4. **Return bool to entry point** - True for success, False for failure + +**Responsibilities:** +- Orchestrate handler calls +- Catch exceptions from handlers +- Log everything that goes wrong +- Provide context for debugging +- Return success/failure to entry point + +--- + +## Tier 3: Handlers (THE WORKER LAYER) + +**Location:** `apps/handlers/**/*.py` + +**Prax Import:** YES (allowed and encouraged) + +**Logging Scope:** Operational logging via Prax system_logger + +**Updated 2026-02-27:** Handlers MAY (and should) use Prax `system_logger` for logging. The previous prohibition has been lifted. ONE logging system everywhere — Prax. + +### Handler Logging Patterns + +**Pattern A: Regular Handlers (called by modules)** + +Regular handlers called by module orchestrators return results. The module logs on their behalf. These handlers MAY also log directly via Prax if they need to record operational details. + +```python +from prax.apps.modules.logger import system_logger as logger + +def create_plan_handler(location: str, subject: str) -> dict: + """Create a plan file""" + if not location: + return { + 'success': False, + 'data': None, + 'error': 'Location is required' + } + + try: + plan_path = Path(location) / f"PLAN{number:04d}.md" + plan_path.write_text(content) + logger.info(f"Plan created at {plan_path}") + return {'success': True, 'data': {'path': str(plan_path)}, 'error': None} + except PermissionError as e: + return {'success': False, 'data': None, 'error': f'Permission denied: {e}'} +``` + +**Pattern B: Autonomous Handlers (plugins, services, cron)** + +Plugin and service handlers are mini entry points — invoked by schedulers, daemons, or running as long-lived processes. They MUST use Prax system_logger. + +```python +from prax.apps.modules.logger import system_logger as logger + +# Plugin triggered by cron — no calling module exists +def run(): + logger.info("Daily audit starting") + results = run_audit() + logger.info(f"Audit complete: {results['score']}%") +``` + +**What Handlers MUST NOT Do:** +```python +# ✗ Use stdlib logging instead of Prax +import logging +log = logging.getLogger(__name__) # NO! Use Prax system_logger + +# ✗ Create local FileHandler (bypasses system_logs) +handler = logging.FileHandler('logs/output.log') # NO! Prax handles routing +``` + +**Characteristics:** +- Workers — domain-specific tasks +- Log via Prax system_logger (same system as modules) +- Return results to calling modules when applicable +- Testable in isolation + +--- + +## Validation Rules + +**Automated Compliance Checks:** + +```bash +# All modules MUST import Prax +grep -r "from prax.apps.modules.logger import" apps/modules/*.py + +# Handlers SHOULD import Prax (no longer prohibited) +grep -r "from prax.apps.modules.logger import" apps/handlers/**/*.py + +# Handlers MUST NOT use stdlib logging.getLogger +grep -r "logging.getLogger" apps/handlers/**/*.py # Should find NOTHING + +# All modules MUST have error logging +grep -r "logger.error" apps/modules/*.py # Should find ALL modules +``` + +**Manual Validation:** +1. Run entry point without args - should list modules +2. Run module without args - should list handlers +3. Trigger errors - verify Prax logs capture them +4. Check `system_logs/` directory for expected output + +--- + +## Migration Checklist + +**For Existing Branches (migrating handlers to Prax logging):** + +1. **Scan handlers for stdlib logging** + ```bash + grep -r "logging.getLogger" apps/handlers/ + ``` + +2. **Replace stdlib with Prax system_logger** + - Replace `import logging` / `logging.getLogger()` with `from prax.apps.modules.logger import system_logger as logger` + - Remove any `logging.FileHandler()` creation (Prax handles routing) + - Keep logger calls as-is (logger.info, logger.error, etc.) + +3. **Verify modules still import Prax** + - Import Prax in all modules + - Add try/except around handler calls + - Log all errors with MODULE_NAME prefix + +4. **Test compliance** + - Run `drone @seed audit @branch` + - Verify logs appear in system_logs/ + - Verify no stdlib logging.getLogger remains + +--- + +## Common Patterns + +### Module Error Handling Template + +```python +from prax.apps.modules.logger import system_logger as logger + +MODULE_NAME = "module_name" + +def handle_command(command: str, args: List[str]) -> bool: + """Standard error handling pattern""" + + try: + # Parse arguments + parsed_args = parse_arguments(args) + + # Call handler + result = handler_function(**parsed_args) + + # Handle result + if isinstance(result, dict) and 'success' in result: + if result['success']: + logger.info(f"[{MODULE_NAME}] Operation successful") + return True + else: + # WARNING for user input issues, ERROR for system failures + logger.warning(f"[{MODULE_NAME}] {result['error']}") + return False + else: + logger.info(f"[{MODULE_NAME}] Operation complete") + return True + + # User input issues → WARNING (no Prax escalation) + except ValueError as e: + logger.warning(f"[{MODULE_NAME}] Validation error: {e}") + return False + except FileNotFoundError as e: + # WARNING if user-provided path, ERROR if system config + logger.warning(f"[{MODULE_NAME}] File not found: {e}") + return False + + # System failures → ERROR (Prax escalates) + except PermissionError as e: + logger.error(f"[{MODULE_NAME}] Permission denied: {e}") + return False + except Exception as e: + logger.error(f"[{MODULE_NAME}] Unexpected error: {e}") + return False +``` + +### Handler Return Template + +```python +def handler_function(param1: str, param2: int) -> dict: + """ + Handler that returns status dict + + Args: + param1: Description + param2: Description + + Returns: + dict: {'success': bool, 'data': Any, 'error': str} + """ + # Validate + if not param1: + return { + 'success': False, + 'data': None, + 'error': 'param1 is required' + } + + # Do work + try: + result = do_work(param1, param2) + return { + 'success': True, + 'data': result, + 'error': None + } + except SomeError as e: + return { + 'success': False, + 'data': None, + 'error': str(e) + } +``` + +--- + +## Why This Pattern Works + +**One System Everywhere:** +- Prax system_logger in entry points, modules, AND handlers +- Same dual output (local + system_logs), same rotation, same monitor feed +- No more two-logging-system inconsistency + +**Auditability:** +- Automated Seed checks verify Prax imports across ALL tiers +- `drone @seed audit @branch` catches stdlib logging violations +- One pattern to check: does it use Prax? + +**Testability:** +- Automated scans verify compliance +- Pytests validate checker behavior +- New branches follow template + +**Consistency:** +- All branches, all tiers use same pattern +- Training new AI instances is simple +- No confusion about "where should I log this?" — always Prax + +--- + +## Reference + +**See Flow for working example:** +- `/home/aipass/aipass_core/flow/apps/modules/` +- `/home/aipass/aipass_core/flow/apps/handlers/` + +**See Seed for reference implementation:** +- `/home/aipass/seed/apps/modules/` +- `/home/aipass/seed/apps/handlers/` + +**Related Standards:** +- Architecture (3-tier pattern) +- Modules (orchestration responsibility) +- Handlers (pure workers, independence) + +--- + +## Documented Exceptions + +### Prax Logging Infrastructure + +Prax handlers in `apps/handlers/logging/` use Python's stdlib `logging` instead of `system_logger`. This is **intentional** to avoid circular dependencies — the logging handlers ARE the logging infrastructure. + +**Status:** Documented in `/home/aipass/aipass_core/prax/.seed/bypass.json` + +### Trigger Infrastructure Handlers + +Trigger's `log_watcher.py` and `error_registry.py` use stdlib logging to avoid recursion — Prax logging triggers the event pipeline that trigger watches. These handlers will migrate to Prax `direct_log()` when available. + +**Status:** Documented in bypass rules, pending Prax direct_log() support + +--- + +## Service Logging Standards + +**Added:** 2026-02-04 +**Applies To:** Services that handle user-facing interactions (bridges, APIs, bots) + +### The Gap This Addresses + +Services like Telegram bridges, API endpoints, and chat interfaces need more than operational logging. They require: +1. **Content logging** - meaningful records of what happened +2. **Audit trails** - user-facing interactions preserved +3. **Clear location conventions** - where different log types go + +### What Services Should Log + +**Operational Logs** (Prax-based, existing pattern): +```python +# Status, errors, lifecycle - goes to ~/system_logs/ +logger.info(f"[{SERVICE_NAME}] Bridge started on port 8080") +logger.error(f"[{SERVICE_NAME}] Connection lost: {e}") +``` + +**Content Logs** (Service-specific, new requirement): +```python +# Meaningful interaction records - goes to service's logs/ directory +# Example: Chat bridge logging +content_log = { + "timestamp": "2026-02-04T10:30:00Z", + "direction": "inbound", # or "outbound" + "user": "user_id", + "content": "User message text", + "response": "Bot response text", + "metadata": {"channel": "telegram", "chat_id": "12345"} +} +``` + +### Log Location Conventions + +| Log Type | Location | Purpose | +|----------|----------|---------| +| **System/operational** | `~/system_logs/` | Prax-captured, cross-branch aggregation | +| **Service content** | `/logs/` | Service-specific content logs | +| **Audit trails** | `/logs/audit/` | User-facing interaction records | + +**Examples:** +``` +~/system_logs/api_telegram.log # Prax operational log +~/aipass_core/api/logs/chat_history.log # Chat content log +~/aipass_core/api/logs/audit/ # Interaction audit trail +``` + +### Requirements for User-Facing Services + +Services that interact with users (bots, bridges, chat interfaces) MUST: + +1. **Log meaningful content, not just status** + - ✓ "Received message from user X: 'hello'" + "Sent response: 'Hi!'" + - ✗ "Message received" + "Response sent" + +2. **Preserve audit trails for interactions** + - Chat messages and responses + - API requests and responses + - Command invocations and results + +3. **Use appropriate log locations** + - Operational → `~/system_logs/` (via Prax) + - Content → `/logs/` (service-managed) + +4. **Include sufficient context** + - Timestamp + - User/source identifier + - Direction (inbound/outbound) + - Content (message, command, response) + - Relevant metadata + +### Content Log Pattern + +```python +import json +from datetime import datetime +from pathlib import Path + +class ContentLogger: + def __init__(self, service_name: str, branch_path: Path): + self.log_dir = branch_path / "logs" + self.log_dir.mkdir(exist_ok=True) + self.log_file = self.log_dir / f"{service_name}_content.log" + + def log_interaction(self, direction: str, user: str, content: str, + response: str = None, metadata: dict = None): + entry = { + "timestamp": datetime.utcnow().isoformat() + "Z", + "direction": direction, + "user": user, + "content": content, + "response": response, + "metadata": metadata or {} + } + with open(self.log_file, "a") as f: + f.write(json.dumps(entry) + "\n") +``` + +### Why This Matters + +**Debugging:** When a user reports "the bot said something wrong", content logs show exactly what happened. + +**Auditing:** Compliance, troubleshooting, and understanding system behavior require interaction records. + +**Learning:** Patterns in user interactions inform future development. + +**Accountability:** Knowing what the system actually said/did, not just that it "worked" or "failed". + +--- + +## Decision Record + +**Original Decision:** 2025-11-21 — 3-tier logging, handlers prohibited from Prax +**Updated:** 2026-02-27 — Unified Prax logging everywhere (FPLAN-0382) +**Decision Maker:** Patrick +**Applies To:** All AIPass branches +**Status:** Active — handlers now use Prax system_logger +**RFC:** Commons #165 — Handler & Plugin Logging diff --git a/src/aipass/seedgo/docs/aipass_code_standards/handlers.md b/src/aipass/seedgo/docs/aipass_code_standards/handlers.md new file mode 100644 index 00000000..0cb386e3 --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/handlers.md @@ -0,0 +1,1323 @@ +# Handler Standards +**Status:** Complete v1.1 +**Last Updated:** 2026-02-10 + +## What This Covers + +Standards specific to handlers (implementation layer). + +## Key Principles + +- Self-contained and transportable (marketplace requirement) +- Same-branch handler imports: ALLOWED (even across packages) +- Cross-branch handler imports: BLOCKED (use modules instead) +- Domain-based organization +- File size guidelines (<300 lines ideal, 500-700 heavy, 700+ consider extensions) +- Pure implementation, no orchestration logic + +--- + +## Auto-Detection Pattern + +**Status:** ✅ Standard (2025-11-12) + +**Core principle:** Handlers should auto-detect their caller instead of requiring modules to pass their own name. + +### The Pattern + +**Use Python's `inspect.stack()` to determine which module is calling:** + +```python +import inspect +from pathlib import Path + +def _get_caller_module_name() -> str: + """Auto-detect calling module name from call stack""" + try: + stack = inspect.stack() + # Skip frames to get actual caller + if len(stack) > 2: + caller_frame = stack[2] # [0]=this, [1]=public function, [2]=caller + caller_path = Path(caller_frame.filename) + return caller_path.stem # "my_module" from "my_module.py" + return "unknown" + except Exception: + return "unknown" + +def handler_function(operation: str, module_name: str | None = None): + """Handler with auto-detection""" + if module_name is None: + module_name = _get_caller_module_name() + # ... use module_name +``` + +### Why This Matters + +**Modules should just import and use - no boilerplate:** + +```python +# ✅ GOOD - Like Prax logger +from seed.apps.handlers.json import json_handler +json_handler.log_operation("operation", data) + +# ❌ BAD - Modules shouldn't pass their own name +from seed.apps.handlers.json import json_handler +json_handler.log_operation("my_module", "operation", data) # Typo-prone, boilerplate +``` + +### When to Apply + +**Use auto-detection when handler needs to:** +- Create module-specific files +- Log caller identity +- Route behavior based on caller + +**Don't use when:** +- Handler is pure utility (no caller-specific behavior) +- Explicit parameter makes more semantic sense + +**Reference:** See `json_structure.md` for complete implementation example. + +--- + +## Default Handlers + +**Status:** Standard (packaged by Cortex into all branches) + +### json_handler.py - JSON Operations + +**Location:** `handlers/json/json_handler.py` +**Purpose:** Auto-creating, self-healing JSON system for module config/data/log files +**Status:** Default handler - comes pre-packaged in every branch + +**API Contract:** +- `load_json(module_name, json_type)` - Auto-creating load with validation +- `save_json(module_name, json_type, data)` - Validated save with timestamp updates +- `log_operation(operation, data, module_name=None)` - Auto-rotating operation logs +- `increment_counter(module_name, counter_name, amount=1)` - Counter management +- `update_data_metrics(module_name, **metrics)` - Metric updates +- `_get_caller_module_name()` - Auto-detection via stack inspection + +**Key Features:** +- Auto-creates missing JSON files from templates +- Self-heals corrupted files +- Auto-detects calling module (no module_name needed) +- Log rotation (prevents unbounded growth) +- Structure validation + +**Usage Pattern:** +```python +from seed.apps.handlers.json import json_handler + +# Module just calls - handler auto-detects caller +json_handler.log_operation("validation_run", {"files": 42}) +``` + +**Cortex Integration:** This handler is packaged into every branch by Cortex during branch creation/updates. All branches use identical or near-identical implementations. + +**3-Tier Compliance:** Default handlers follow the same 3-tier error handling rules as custom handlers. Location (`handlers/`) determines rules, not conceptual role. json_handler.py raises exceptions; calling modules handle logging. See `error_handling.md` for 3-tier architecture details. + +**Reference:** See `json_structure.md` for complete three-JSON pattern details. + +--- + +## Handler Independence Rules + +**Core principle:** Handlers cannot import MODULES from their own branch (prevents circular dependencies). + +### Why This Matters + +**Circular dependency prevention:** If handlers import modules, and modules import handlers, you get import loops. + +``` +Module → imports Handler ✓ +Handler → imports Module ✗ (creates cycle) +``` + +**Marketplace transportability:** Handlers must be self-contained so they can be moved between branches. + +### The Rules + +**✅ ALLOWED - Same-branch handler imports (even across packages):** + +```python +# seed/apps/handlers/standards/imports_check.py +from seed.apps.handlers.json import json_handler # ✅ OK - same branch + +# flow/apps/handlers/plan/create.py +from flow.apps.handlers.registry.load import load_registry # ✅ OK - same branch +``` + +**Why allowed:** Handlers within the same branch are coworkers. The security boundary is at BRANCH level. + +**✅ ALLOWED - Relative imports within package:** + +```python +# error/decorators.py +from .result_types import OperationResult, OperationStatus +from .logger import log_operation_start, log_operation_end +``` + +**Why allowed:** Same package = definitely same branch. + +**❌ FORBIDDEN - Handler imports own branch's modules:** + +```python +# seed/apps/handlers/json/json_handler.py +from seed.apps.modules.create_thing import something # ❌ NO - circular risk +``` + +**Why forbidden:** Creates circular dependency risk. Modules import handlers, not the other way. + +**❌ FORBIDDEN - Cross-branch handler imports:** + +```python +# flow/apps/modules/list_plans.py +from prax.apps.handlers.logging.setup import get_logger # ❌ BLOCKED + +# ✅ CORRECT - use the module (public API) +from prax.apps.modules.logger import system_logger as logger +``` + +**Why forbidden:** Handlers are internal implementation. External branches use MODULES. + +### Real Example - Error Package + +The error handler package shows correct within-package imports: + +``` +handlers/error/ + ├── __init__.py → Public API + ├── result_types.py → Core types (no imports) + ├── logger.py → Uses result_types + ├── formatters.py → Uses result_types + └── decorators.py → Uses result_types, logger, formatters +``` + +**File: error/decorators.py** +```python +from .result_types import OperationResult, OperationStatus +from .logger import log_operation_start, log_operation_end +from .formatters import format_result, format_batch_header +``` + +**This is fine** - all within error package and same branch. + +### Modules Can Import Many Handlers + +**This is by design:** + +```python +# modules/imports_standard.py +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.cli import prompts +from seed.apps.handlers.standards import imports_check +``` + +**Why this works:** Dependencies flow ONE way (modules → handlers). Better one module imports 20 handlers than handlers importing each other. + +### Package-Level Exceptions + +**Error handlers are system-wide service:** + +```python +# Any handler can import error system (current: cortex, future: CLI) +from cortex.apps.handlers.error import track_operation +from cortex.apps.handlers.error.result_types import OperationResult + +@track_operation +def create_branch(name): + # Business logic + return True +``` + +**Why exception:** Error handlers are infrastructure service - three-tier output (JSON log, system log, console). Not domain logic, but framework service. + +**Current reality:** Error system lives in `cortex.apps.handlers.error` and is imported by handlers in speakeasy and other branches. This creates dependency on cortex, but is necessary for consistent error handling across system. + +**Future direction:** Migrate error system to `cli.apps.handlers.error` (already started) so it's clearly infrastructure, not branch-specific. + +**Rule:** Service providers (infrastructure shared across ALL branches) can be imported cross-domain. + +--- + +## Handler Boundaries & External Access + +**Status:** ✅ Standard (2025-11-29) + +**Core principle:** Handlers are INTERNAL to their branch. External consumers use MODULES as the public API. + +### The Import Hierarchy + +``` +External Branch + ↓ + Entry Point (prax.py, drone.py, cli.py) + ↓ + Modules (prax/apps/modules/*.py) ← EXTERNAL STOPS HERE + ↓ + Handlers (prax/apps/handlers/*/*.py) ← NEVER EXPOSED +``` + +**Rule:** External consumers stop at MODULES. They never touch handlers. + +### Two Types of Branches + +1. **CLI Tools** - Used via command line, not imported + - Flow, Seed, AI_Mail, Backup_System, Drone + - You run `drone @flow create`, you don't `import flow` or `import drone` + - Drone is a CLI router that resolves @ and routes commands to branches + +2. **Library Services** - Imported by other code + - Prax (logging), CLI (formatting), API (LLM calls), Memory Bank (vectors) + - You `import prax` then `from prax.apps.modules.logger import logger` + - **NOTE:** Drone is NOT a library service - it's a CLI router, never imported + +### Same-Branch Handler Imports - ALLOWED + +Handlers within the SAME BRANCH can import each other freely, even across packages: + +```python +# flow/apps/handlers/plan/create.py +from flow.apps.handlers.registry.load import load_registry # ✅ OK - same branch +from flow.apps.handlers.json.json_handler import log_operation # ✅ OK - same branch +``` + +**Rationale:** Handlers are unique to each branch. The security boundary is at the BRANCH level, not package level. Trying to enforce package-level isolation adds complexity without benefit. + +### Cross-Branch Handler Imports - BLOCKED + +**Absolute rule:** Never import another branch's handlers. Hard security block. + +```python +# ❌ WRONG - reaching into Prax handlers from Flow +from prax.apps.handlers.logging.setup import get_logger + +# ✅ RIGHT - import Prax module (public API) +from prax.apps.modules.logger import system_logger as logger +``` + +```python +# ❌ WRONG - reaching into Cortex handlers from Speakeasy +from cortex.apps.handlers.error_handler import track_operation + +# ✅ RIGHT - import Cortex module (public API) +from cortex.apps.modules.error_tracking import track_operation +``` + +### Security Guard Implementation + +**Location:** Each branch's `handlers/__init__.py` + +**Reference implementation:** `/home/aipass/aipass_core/prax/apps/handlers/__init__.py` + +**How it works:** +1. Guard runs at import time when `handlers/` package is imported +2. Walks the call stack to find the real caller file +3. Extracts the actual import statement from code context +4. Checks if caller is from the same branch +5. If external caller → raises `ImportError` with detailed message + +**Example error output:** + +``` +============================================================ +ACCESS DENIED: Cross-branch handler import blocked +============================================================ + Caller branch: flow + Caller file: list_plans.py + Blocked: from prax.apps.handlers.logging.setup import get_logger + + Handlers are internal to their branch. + Use the module API instead: + from prax.apps.modules. import + + Example: + from prax.apps.modules.logger import logger + + For full standards guide: + drone @seed handlers +============================================================ +``` + +**Known limitation:** Python module caching means the guard only runs ONCE per Python process. If a valid internal import runs first, subsequent external imports in the same process bypass the guard. This catches violations at development time, not runtime. + +### Why This Matters + +**Without boundaries:** +- Fragile dependencies (change handler, break unknown consumers) +- No service contract (anyone can reach into your guts) +- Debugging nightmares (why did Flow break when we changed Prax?) + +**With boundaries:** +- Clean contracts between services +- Safe to refactor handler internals +- Dependencies are explicit at module level + +### Service Contracts + +Each library service defines what it exposes: + +| Service | Exposes via Modules | Handlers (Internal) | +|---------|---------------------|---------------------| +| Prax | logger, watcher | logging/*, watch/* | +| CLI | header, success, error, warning | output/*, formatting/* | +| API | get_response | llm/*, cache/* | +| Memory Bank | vector operations | storage/*, search/* | + +**Modules are the contract. Handlers are the implementation.** + +**NOTE:** Drone is NOT in this table because it's a CLI router, not a library service. Branches receive commands FROM Drone (via CLI), they never import it. + +### Transitive Dependencies + +Example with library services: +- Flow imports Prax +- Flow gets logging capabilities +- Flow does NOT import internal Prax dependencies +- Prax owns its internal implementation relationships + +**You import the service that owns the capability.** You don't care about its internal dependencies. + +**Important:** CLI branches like Flow, Seed, AI_Mail don't import each other or Drone. They're invoked via `drone @branch command`, not imported. + +--- + +## Drone Architecture - CLI Router, Not Library + +**Status:** ✅ Critical Architecture Rule (2025-11-29) + +**Core principle:** Drone is a CLI router that resolves @ symbols and routes commands to branches. It is NEVER imported as a library. + +### What Drone Does + +Drone routes commands from CLI to branches: +```bash +drone @flow create "new plan" +# Drone resolves @flow → /home/aipass/aipass_core/flow/flow.py +# Drone runs: python3 /home/aipass/aipass_core/flow/flow.py create "new plan" +``` + +The @ symbol is resolved by Drone BEFORE the command reaches the branch. + +### What Branches Receive + +When a branch is invoked via Drone: +1. Drone has already resolved all @ symbols in the command +2. Branch receives clean arguments without @ symbols +3. Branch never sees or handles @ resolution +4. Branch never imports Drone + +**Example:** +```bash +# User types: +drone @flow create @project1 --name "test" + +# Drone resolves @ symbols: +@flow → /home/aipass/aipass_core/flow/flow.py +@project1 → /home/aipass/projects/project1 + +# Flow receives: +sys.argv = ["flow.py", "create", "/home/aipass/projects/project1", "--name", "test"] +``` + +### Architectural Debt - @ Handling in Branches + +**If you see this pattern in a branch, it's architectural debt:** + +```python +# ❌ WRONG - Branch should NEVER handle @ resolution +from drone.apps.modules.resolve import resolve_path + +def some_function(path_arg): + if "@" in path_arg: + resolved = resolve_path(path_arg) # NO! Drone already did this! +``` + +**Why this is wrong:** +1. Drone resolves @ BEFORE calling the branch +2. Branch never receives @ symbols (already resolved) +3. Importing Drone creates unnecessary coupling +4. Violates single responsibility (routing vs execution) + +**If a branch has @ handling code:** +- It's legacy from before Drone architecture was clarified +- Should be removed +- Branch should expect pre-resolved paths + +### The Correct Pattern + +**Branch receives clean, resolved arguments:** + +```python +# ✅ CORRECT - Branch expects resolved paths +def create_plan(project_path: str, name: str): + """ + Args: + project_path: Absolute path to project (already resolved by Drone) + name: Plan name + """ + # Just use the path - no @ handling needed + plan_file = Path(project_path) / "plans" / f"{name}.json" +``` + +### Two Types of Branches (Updated) + +**1. CLI Tools** - Invoked via Drone, never imported: +- Flow, Seed, AI_Mail, Backup_System, **Drone itself** +- Usage: `drone @branch command` +- Communication: Via CLI arguments (@ pre-resolved) +- Never import each other + +**2. Library Services** - Imported by other code: +- Prax (logging), CLI (formatting), API (LLM calls), Memory Bank (vectors) +- Usage: `from prax.apps.modules.logger import logger` +- Communication: Via Python imports +- Can be imported by any branch + +**Drone is special:** It's a CLI tool that routes TO other CLI tools, but is never imported. + +### Summary + +- **Drone = CLI router** (resolves @, routes commands) +- **Branches = CLI executors** (receive pre-resolved paths) +- **If branch imports Drone** = architectural debt +- **If branch handles @** = architectural debt +- **@ resolution happens ONCE** (in Drone, before branch invocation) + +--- + +## File Size Guidelines + +**Target:** <300 lines ideal, 500-700 acceptable, 700+ signals need for splitting. + +### Why File Size Matters + +**AI comprehension drops with file size:** +- **<300 lines:** AI quick scan, full comprehension, few errors +- **300-500 lines:** Good - manageable for AI and humans +- **500-700 lines:** Getting heavy - AI context starts degrading +- **700+ lines:** AI makes more errors, humans struggle to scan + +**Human factor:** +- 300-line file = scan in 1 minute, hold in working memory +- 2000-line file = overwhelming, can't comprehend structure + +**Context efficiency:** +- Small files = faster processing, cleaner context +- Agent can process large file separately, return summary (keep main context clean) + +### Real Examples From Codebase + +**✅ GOOD - Single-purpose handlers:** + +``` +json_handler.py: 279 lines (JSON file operations - seed) + 356 lines (speakeasy version) +decorators.py: 257 lines (Error decorators) +formatters.py: 194 lines (Console formatting) +result_types.py: 248 lines (Result type definitions) +metadata.py: 119 lines (Branch metadata) +prompts.py: 72 lines (CLI prompts - seed) + 59 lines (speakeasy version) +``` + +**These are perfect:** Each file has single clear purpose. AI processes fast, minimal context burn. + +**⚠️ GETTING HEAVY - Complex handlers:** + +``` +file_ops.py: 845 lines (Branch file operations - speakeasy) + 892 lines (Other branches) + 981 lines (cortex - most complex) +json_ops.py: 762 lines (JSON migrations - speakeasy) +``` + +**Why still okay:** +- Complex domain (many related operations) +- Well-structured with clear sections +- Breaking up would create artificial boundaries +- Functions are small and focused + +**❌ ANTI-PATTERN - Should be split:** + +``` +hypothetical_god_object.py: 2000+ lines +``` + +**Problems:** +- AI context degradation → more errors +- Human overwhelm → can't scan quickly +- Mixed concerns → multiple domains tangled +- Change risk → touching one thing breaks others + +### When 700+ Lines Is Okay + +**Complex domains with many related operations:** + +```python +# json_ops.py (762 lines in speakeasy) +# All JSON migration operations - breaking up would separate related logic + +def migrate_key(data, old_key, new_key): + # 20 lines + +def migrate_structure_add_field(data, field, default): + # 25 lines + +def migrate_structure_rename_field(data, old, new): + # 30 lines + +# ... 20 more migration functions +``` + +**Why acceptable:** All operations related to JSON migrations. Breaking into multiple files would make finding operations harder. + +### When to Split + +**Signals you need to split:** + +1. **Multiple domains mixed:** "This file handles JSON AND registry AND error logging" +2. **"God object" syndrome:** "This does everything" +3. **Scrolling fatigue:** "Where was that function again?" +4. **Merge conflicts:** Multiple devs editing same file constantly +5. **Hard to name:** "handler_utils_ops_helpers.py" signals lack of focus + +**How to split:** + +``` +# Before: heavy_handler.py (1200 lines) +- 400 lines: JSON operations +- 300 lines: File operations +- 500 lines: Registry operations + +# After: Split by subdomain +heavy_handler/ + ├── __init__.py → Public API + ├── json_ops.py → 400 lines + ├── file_ops.py → 300 lines + └── registry_ops.py → 500 lines +``` + +### File Size Summary + +**Guidelines:** +- **<300 lines:** Perfect - keep this as target +- **300-500:** Good - still manageable +- **500-700:** Watch it - ensure single clear purpose +- **700+:** Consider splitting unless truly cohesive domain + +**Remember:** These are guidelines, not hard limits. Cohesive 700-line file beats artificial split into 3 poorly-organized 250-line files. + +--- + +## Domain Organization + +**Organize by business purpose, not technical role.** + +### The Pattern + +``` +handlers/ + ├── json/ → Everything about JSON operations + ├── error/ → Everything about error handling + ├── cli/ → Everything about user interaction + ├── branch/ → Everything about branch lifecycle + ├── registry/ → Everything about registry management + └── standards/ → Everything about standards checking +``` + +### Why Domain Organization Works + +**Technical organization (ANTI-PATTERN):** + +``` +handlers/ + ├── utils/ → What kind of utils? For what? + ├── helpers/ → Helping with what? + ├── operations/ → What operations? + └── validators/ → Validating what? +``` + +**Problem:** "I need to validate JSON" → check validators/ AND utils/ AND operations/ maybe? + +**Domain organization:** + +"I need to validate JSON" → `handlers/json/` (everything JSON-related is there) + +**Mental model:** +- Technical organization: requires mental translation ("What technical category is this?") +- Domain organization: direct mapping ("What am I working with?") + +### Real Example - Seed Handlers + +**Current structure:** + +``` +/home/aipass/seed/apps/handlers/ + ├── json/ + │ ├── json_handler.py → JSON file operations (279 lines) + │ └── test_auto_detection.py → Tests + ├── standards/ + │ ├── architecture_check.py → Architecture validation (29 lines) + │ ├── cli_check.py → CLI standards check (29 lines) + │ ├── imports_check.py → Import validation (30 lines) + │ ├── cli_content.py → CLI content generation (96 lines) + │ ├── handlers_content.py → Handlers standards (79 lines) + │ └── [other content handlers] → ~60-140 lines each + ├── cli/ + │ └── prompts.py → User prompts (72 lines) + ├── domain1/ + │ └── ops.py → Domain operations (103 lines) + └── domain2/ + └── ops.py → Domain operations +``` + +**Benefits:** +1. **Fast navigation:** Need JSON? → `json/` +2. **Clear boundaries:** All JSON operations in one place +3. **Easy extension:** Add new JSON operation → obvious where it goes +4. **Marketplace ready:** Grab entire `json/` package → self-contained + +### Real Example - Speakeasy Handlers + +**Branch/registry/error separation:** + +``` +/home/aipass/speakeasy/apps/handlers/ + ├── branch/ + │ ├── file_ops.py → 845 lines (file operations) + │ ├── metadata.py → 119 lines (branch metadata) + │ ├── registry.py → 259 lines (branch registry) + │ └── placeholders.py → 234 lines (placeholder handling) + ├── registry/ + │ ├── meta_ops.py → 358 lines (registry operations) + │ └── registry_ignore.py → 134 lines (ignore patterns) + ├── error/ + │ ├── decorators.py → 257 lines (error decorators) + │ ├── formatters.py → 194 lines (output formatting) + │ ├── logger.py → 235 lines (error logging) + │ └── result_types.py → 248 lines (result types) + ├── json/ + │ ├── json_handler.py → 356 lines (JSON operations) + │ └── json_ops.py → 762 lines (JSON migrations) + └── cli/ + └── prompts.py → 59 lines (user prompts) +``` + +**Note:** Speakeasy handlers currently import from `cortex.apps.handlers.error` for error tracking. This is the service provider exception - error handlers are infrastructure used across all branches. + +**Notice:** +- Each domain self-contained +- Clear separation (branch ≠ registry ≠ error) +- File sizes manageable within domains +- Easy to understand what each package does + +### Domain Naming Standards + +**Use business/feature names, not technical terms:** + +**✅ GOOD:** +- `branch/` - operations on branches +- `json/` - JSON file handling +- `registry/` - registry management +- `standards/` - standards checking +- `ai_mail/` - AI mail system + +**❌ BAD:** +- `utils/` - too generic, what kind? +- `helpers/` - helps with what? +- `core/` - what's "core" vs not core? +- `common/` - common to what? + +**Exception:** `error/` and `cli/` are technical but clearly scoped. Everyone knows what "error handling" means. + +### When to Create New Domain + +**Create new domain package when:** + +1. **Distinct business purpose:** "This is about AI mail, not JSON or branches" +2. **Self-contained logic:** Could be marketplace package +3. **Clear naming:** Can give it obvious domain name +4. **Multiple files:** Not just one 50-line file (put in existing domain first) + +**Add to existing domain when:** + +1. **Related to existing domain:** "This is JSON validation" → add to `json/` +2. **Small addition:** Single small file fits in existing package +3. **Shared concepts:** Uses same types/models as existing domain + +### Package Structure Within Domain + +**Each domain package:** + +``` +domain_name/ + ├── __init__.py → Public API exports + ├── core_ops.py → Main operations + ├── helpers.py → Domain-specific helpers (optional) + └── types.py → Domain-specific types (optional) +``` + +**Example - error package:** + +``` +error/ + ├── __init__.py → Exports OperationResult, track_operation, etc. + ├── result_types.py → Core types (foundation) + ├── logger.py → Logging operations (uses result_types) + ├── formatters.py → Output formatting (uses result_types) + └── decorators.py → Decorators (uses all above) +``` + +**Dependency flow within package:** Foundation types → specific operations → decorators/facades + +--- + +## Handler Testing Requirements + +**Status:** Testing infrastructure in progress (started in Cortex, not yet standardized). + +### Current Reality + +**No formal test infrastructure yet:** +- AIPass is custom system, building from scratch +- JSONs + Prax logs = current debugging infrastructure +- Fast iteration with manual testing +- pytest framework started in Cortex (future direction) + +### Testing Approach When Infrastructure Ready + +**Three testing levels for handlers:** + +### 1. Unit Tests - Pure Functions + +**Test handlers in isolation:** + +```python +# test_json_handler.py +import pytest +from seed.apps.handlers.json import json_handler + +def test_validate_json_structure_config(): + """Test config JSON validation""" + valid_config = { + "module_name": "test", + "version": "1.0.0", + "config": {} + } + assert json_handler.validate_json_structure(valid_config, "config") is True + +def test_validate_json_structure_invalid(): + """Test invalid JSON rejected""" + invalid_config = {"random": "data"} + assert json_handler.validate_json_structure(invalid_config, "config") is False +``` + +**What to test:** +- Input validation +- Data transformations +- Return values +- Edge cases (empty inputs, malformed data) + +### 2. Integration Tests - File Operations + +**Test handlers with actual files:** + +```python +# test_json_handler_integration.py +import pytest +from pathlib import Path +from seed.apps.handlers.json import json_handler + +@pytest.fixture +def temp_json_dir(tmp_path): + """Create temporary JSON directory""" + json_dir = tmp_path / "seed_json" + json_dir.mkdir() + # Temporarily override SEED_JSON_DIR + original = json_handler.SEED_JSON_DIR + json_handler.SEED_JSON_DIR = json_dir + yield json_dir + json_handler.SEED_JSON_DIR = original + +def test_ensure_module_jsons_creates_files(temp_json_dir): + """Test JSON auto-creation""" + json_handler.ensure_module_jsons("test_module") + + assert (temp_json_dir / "test_module_config.json").exists() + assert (temp_json_dir / "test_module_data.json").exists() + assert (temp_json_dir / "test_module_log.json").exists() + +def test_log_operation_rotation(temp_json_dir): + """Test log rotation when max entries exceeded""" + # Create module with max 5 entries + # ... test implementation +``` + +**What to test:** +- File creation/deletion +- File reading/writing +- Directory operations +- Error conditions (permissions, missing files) + +### 3. Mock External Dependencies + +**Handler shouldn't depend on external services running:** + +```python +# test_registry_handler.py +import pytest +from unittest.mock import patch, Mock +from seed.apps.handlers.registry import registry_ops + +@patch('seed.apps.handlers.registry.registry_ops.Path.exists') +def test_validate_registry_missing_file(mock_exists): + """Test registry validation when file missing""" + mock_exists.return_value = False + + result = registry_ops.validate_registry() + assert result.status == "error" + assert "not found" in result.message +``` + +**What to mock:** +- File system operations (when testing logic, not I/O) +- Network calls +- External APIs +- System commands + +### 4. Test Error Paths + +**Don't just test happy path:** + +```python +def test_load_json_corrupted_file(temp_json_dir): + """Test handling corrupted JSON file""" + # Create corrupted JSON + corrupted_file = temp_json_dir / "test_config.json" + corrupted_file.write_text("{ invalid json }") + + result = json_handler.load_json("test", "config") + # Should return None and log error, not crash + assert result is None + +def test_log_operation_no_permissions(temp_json_dir): + """Test handling permission denied""" + # Make directory read-only + temp_json_dir.chmod(0o444) + + result = json_handler.log_operation("test_op") + assert result is False # Operation failed gracefully +``` + +**What to test:** +- Corrupted files +- Missing dependencies +- Permission errors +- Invalid inputs +- Edge cases + +### Test Organization + +**Mirror handler structure:** + +``` +handlers/ + ├── json/ + │ ├── json_handler.py + │ └── json_ops.py + └── error/ + ├── decorators.py + └── formatters.py + +tests/handlers/ + ├── json/ + │ ├── test_json_handler.py → Unit tests + │ └── test_json_handler_integration.py → Integration tests + └── error/ + ├── test_decorators.py + └── test_formatters.py +``` + +### Test File Naming + +**Standard pattern:** +- `test_*.py` - pytest discovery +- `test_{handler_name}.py` - unit tests +- `test_{handler_name}_integration.py` - integration tests + +### Current Testing Reality + +**Until pytest infrastructure complete:** + +1. **Manual testing:** Run handlers, check JSONs +2. **Prax logs:** Watch system_log for errors +3. **JSON inspection:** Check created files match expectations +4. **Console output:** Verify user-facing messages + +**Example manual test:** + +```bash +# Test json_handler auto-creation +rm -rf /home/aipass/seed/seed_json/test_* + +# Run handler +python3 -c "from seed.apps.handlers.json import json_handler; json_handler.log_operation('test_op')" + +# Check created files +ls /home/aipass/seed/seed_json/ +# Expected: test_module_config.json, test_module_data.json, test_module_log.json + +# Inspect contents +cat /home/aipass/seed/seed_json/test_module_log.json +# Verify: operation logged with timestamp +``` + +### Future Direction + +**When pytest framework ready:** + +1. **Write tests for new handlers** (test-driven development) +2. **Gradually add tests to existing handlers** (priority: critical paths) +3. **CI/CD integration** (run tests on commit) +4. **Coverage tracking** (identify untested code) + +**But remember:** No tests doesn't mean no quality control. JSONs + logs + manual testing works until automated testing infrastructure ready. + +--- + +## Approved Handler Patterns + +**Status:** ✅ Standard (2026-02-10) + +Patterns observed across production handlers that solve real problems. Each emerged from working code and was reviewed for standards compliance. + +### 1. Callback Injection Pattern + +**Problem:** Handlers need to call module-layer functions (e.g., send email, fire events) but cannot import modules (handler independence rule). + +**Solution:** Module layer injects a callback function into the handler at startup. Handler stores it in a module-level variable and calls it when needed. + +#### Parameter Injection (setter function) + +**Reference:** `trigger/apps/handlers/events/error_detected.py` + +```python +# Handler layer - stores callback, never imports modules +_send_email: Optional[Callable[..., bool]] = None + +def set_send_email_callback(callback: Callable[..., bool]) -> None: + """ + Set the callback function for sending emails. + Must be called by the module/registry layer before events fire. + This avoids handler importing from modules (maintains independence). + """ + global _send_email + _send_email = callback + +def handle_error_detected(event_data: Dict[str, Any]) -> None: + """Handle error_detected events.""" + if _send_email is None: + return # No callback = silent no-op + # ... build notification, then: + _send_email(to=recipient, subject=subject, message=body, auto_execute=True) +``` + +```python +# Module layer - injects the callback at startup +from trigger.apps.handlers.events.error_detected import set_send_email_callback +set_send_email_callback(send_email_direct) +``` + +**Reference:** `trigger/apps/handlers/log_watcher.py` + +```python +# Same pattern for event firing +_fire_event: Optional[Callable[..., None]] = None + +def set_event_callback(callback: Callable[..., None]) -> None: + """Set the callback function for firing events.""" + global _fire_event + _fire_event = callback +``` + +**When to use:** +- Handler needs to call a module-layer function +- Direct import would violate handler independence +- Callback is set once at startup and used throughout handler lifetime + +**When NOT to use:** +- Handler can accomplish its goal with pure return values +- Only one call site exists (just return data and let module call) + +--- + +### 2. Rate-Limited Notifications Pattern + +**Problem:** Event-driven handlers can fire rapidly, overwhelming recipients with notifications. + +**Solution:** Track timestamps per recipient in a module-level dict. Prune old entries on each call, reject if count exceeds limit within window. + +**Reference:** `ai_mail/apps/handlers/email/delivery.py` (desktop notifications) + +```python +_NOTIFICATION_TIMESTAMPS: Dict[str, List[float]] = {} +_NOTIFICATION_MAX = 3 +_NOTIFICATION_WINDOW = 30.0 # seconds + +def _send_desktop_notification(sender: str, recipient: str, subject: str) -> None: + """Rate-limited: max 3 notifications per recipient within 30 seconds.""" + now = time.time() + cutoff = now - _NOTIFICATION_WINDOW + + if recipient in _NOTIFICATION_TIMESTAMPS: + _NOTIFICATION_TIMESTAMPS[recipient] = [ + t for t in _NOTIFICATION_TIMESTAMPS[recipient] if t > cutoff + ] + else: + _NOTIFICATION_TIMESTAMPS[recipient] = [] + + if len(_NOTIFICATION_TIMESTAMPS[recipient]) >= _NOTIFICATION_MAX: + return # Rate limited - silently skip + + # ... send notification ... + _NOTIFICATION_TIMESTAMPS[recipient].append(now) +``` + +**Reference:** `trigger/apps/handlers/events/error_detected.py` (dispatch throttling) + +```python +_dispatch_timestamps: Dict[str, List[float]] = {} +MAX_DISPATCHES_PER_WINDOW = 3 +RATE_LIMIT_WINDOW_SECONDS = 600 # 10 minutes + +def _is_rate_limited(branch_email: str) -> bool: + """Check if branch has exceeded dispatch rate limit.""" + now = time.time() + cutoff = now - RATE_LIMIT_WINDOW_SECONDS + + if branch_email not in _dispatch_timestamps: + _dispatch_timestamps[branch_email] = [] + + _dispatch_timestamps[branch_email] = [ + ts for ts in _dispatch_timestamps[branch_email] if ts > cutoff + ] + + return len(_dispatch_timestamps[branch_email]) >= MAX_DISPATCHES_PER_WINDOW +``` + +**Key principles:** +- Constants at module level (UPPER_CASE, easy to tune) +- Prune before checking (prevents memory leak) +- Silent rejection (caller doesn't need to know) +- Per-recipient tracking (one noisy branch doesn't block others) + +--- + +### 3. Persistent Hash Deduplication with Size Limits + +**Problem:** Event handlers need to avoid processing the same event twice, even across restarts. + +**Solution:** Hash event content, store hashes in a set with a size cap. Persist to disk for restart survival. + +**Reference:** `trigger/apps/handlers/log_watcher.py` + +```python +_seen_error_hashes: Set[str] = set() +MAX_SEEN_HASHES = 2000 + +def _generate_error_hash(source_module: str, message: str) -> str: + """8-character MD5 hash for deduplication.""" + content = f"{source_module}:{message}" + return hashlib.md5(content.encode()).hexdigest()[:8] + +def _is_duplicate_error(error_hash: str) -> bool: + """Check if error has been seen before.""" + global _seen_error_hashes + + if error_hash in _seen_error_hashes: + return True + + _seen_error_hashes.add(error_hash) + if len(_seen_error_hashes) > MAX_SEEN_HASHES: + # Evict oldest half when limit exceeded + _seen_error_hashes = set(list(_seen_error_hashes)[MAX_SEEN_HASHES // 2:]) + + _save_seen_hashes() # Persist to trigger_data.json + return False +``` + +**Persistence layer:** + +```python +TRIGGER_DATA_FILE = AIPASS_ROOT / "trigger" / "trigger_data.json" + +def _load_seen_hashes() -> None: + """Load persisted dedup hashes from disk on startup.""" + global _seen_error_hashes + try: + if TRIGGER_DATA_FILE.exists(): + data = json.loads(TRIGGER_DATA_FILE.read_text(encoding='utf-8')) + _seen_error_hashes = set(data.get('seen_error_hashes', [])) + except Exception: + _seen_error_hashes = set() # Start fresh on failure + +def _save_seen_hashes() -> None: + """Persist dedup hashes, merging with existing file content.""" + try: + data: Dict[str, Any] = {} + if TRIGGER_DATA_FILE.exists(): + data = json.loads(TRIGGER_DATA_FILE.read_text(encoding='utf-8')) + data['seen_error_hashes'] = list(_seen_error_hashes) + TRIGGER_DATA_FILE.write_text(json.dumps(data, indent=2), encoding='utf-8') + except Exception: + return # Write failure - hashes remain in memory only +``` + +**Key principles:** +- Short hashes (8 chars) - unique enough for dedup, memory-efficient +- Size cap with eviction (prevents unbounded growth) +- Merge-on-write (doesn't clobber other keys in the JSON file) +- Silent failure (disk issues don't crash the handler) + +--- + +### 4. Auto-Migration for JSON Schema Upgrades + +**Problem:** JSON file schemas evolve over time. Old-format files need to work with new code without manual migration. + +**Solution:** Detect old format on load, transform in-place, persist the upgrade. + +**Reference:** `ai_mail/apps/handlers/email/delivery.py` + +```python +def _migrate_inbox_format(inbox_data: Dict, inbox_file: Path) -> Dict: + """ + Auto-migrate old inbox format to v2 schema. + + Old format: {"inbox": [...]} + New format: {"mailbox": "inbox", "total_messages": N, "unread_count": N, "messages": [...]} + """ + migrated = False + + # Case 0: inbox_data is a list instead of a dict (corrupted) + if isinstance(inbox_data, list): + inbox_data = {"messages": inbox_data} + migrated = True + + # Case 1: Old format with "inbox" key instead of "messages" + if "inbox" in inbox_data and "messages" not in inbox_data: + old_messages = inbox_data.pop("inbox", []) + inbox_data["messages"] = old_messages if isinstance(old_messages, list) else [] + migrated = True + + # Case 2: Missing "messages" key entirely + if "messages" not in inbox_data: + inbox_data["messages"] = [] + migrated = True + + # Ensure v2 metadata fields + for field, default_fn in [ + ("mailbox", lambda: "inbox"), + ("total_messages", lambda: len(inbox_data["messages"])), + ("unread_count", lambda: sum(1 for m in inbox_data["messages"] if m.get("status") == "new")), + ]: + if field not in inbox_data: + inbox_data[field] = default_fn() + migrated = True + + # Persist migration to disk + if migrated: + try: + with open(inbox_file, 'w', encoding='utf-8') as f: + json.dump(inbox_data, f, indent=2, ensure_ascii=False) + except Exception: + pass # Return migrated data even if write fails + + return inbox_data +``` + +**Key principles:** +- Detect-and-fix, not reject (old data still works) +- Handle multiple migration cases (rename, missing fields, corrupted structure) +- Persist only if changes were made (avoid unnecessary writes) +- Graceful on write failure (in-memory migration still applies) + +--- + +### 5. Direct BRANCH_REGISTRY.json Reads + +**Problem:** Handlers need branch routing data but can't import modules. Using subprocess to call drone is slow and fragile. + +**Solution:** Read BRANCH_REGISTRY.json directly. It's a stable, well-defined JSON file at a known path. + +**Reference:** `ai_mail/apps/handlers/email/delivery.py` + +```python +def get_all_branches() -> List[Dict]: + """Read branch registry directly for email routing.""" + registry_file = Path("/home/aipass/BRANCH_REGISTRY.json") + + if not registry_file.exists(): + return [] + + try: + with open(registry_file, 'r', encoding='utf-8') as f: + registry_data = json.load(f) + + branches = [] + for branch in registry_data.get("branches", []): + branch_name = branch.get("name", "") + path = branch.get("path", "") + email = branch.get("email", "") + if branch_name and path: + branches.append({"name": branch_name, "path": path, "email": email}) + return branches + except Exception: + return [] +``` + +**Reference:** `trigger/apps/handlers/events/error_detected.py` + +```python +BRANCH_REGISTRY_FILE = AIPASS_HOME / "BRANCH_REGISTRY.json" + +def _get_registered_emails() -> set: + """Read registered branch emails from BRANCH_REGISTRY.json.""" + try: + if BRANCH_REGISTRY_FILE.exists(): + data = json.loads(BRANCH_REGISTRY_FILE.read_text(encoding='utf-8')) + return {b["email"] for b in data.get("branches", [])} + except Exception: + return set() + return set() +``` + +**Key principles:** +- Hardcoded path (`/home/aipass/BRANCH_REGISTRY.json`) - it's a system constant +- Read-only (handlers never write to registry) +- Defensive reads (missing file → empty result, not crash) +- No module import needed (pure file I/O) + +**When to use:** +- Handler needs branch routing, naming, or path data +- The data is in BRANCH_REGISTRY.json (it usually is) + +**When NOT to use:** +- Need to modify the registry (use Cortex module API) +- Need complex registry queries (consider whether a module should handle this) + +--- + +## TODO + +- [x] Handler independence rules detailed (2025-11-13) +- [x] File size guidelines with reasoning (2025-11-13) +- [x] Domain organization examples (2025-11-13) +- [x] Package-level exceptions (error handlers, etc.) (2025-11-13) +- [x] Handler testing requirements (2025-11-13) +- [x] Auto-detection pattern documented (2025-11-12) +- [x] Handler boundaries & external access - security guard (2025-11-29) +- [x] Approved handler patterns from production code (2026-02-10) diff --git a/src/aipass/seedgo/docs/aipass_code_standards/imports.md b/src/aipass/seedgo/docs/aipass_code_standards/imports.md new file mode 100644 index 00000000..85037206 --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/imports.md @@ -0,0 +1,577 @@ +# Import Standards +**Status:** Draft v1 +**Date:** 2025-11-12 + +--- + +## Standard Import Order + +**Every Python file follows this pattern:** + +```python +#!/home/aipass/.venv/bin/python3 + +# [META BLOCK] + +"""Module docstring""" + +# Infrastructure setup (if needed) +import sys +from pathlib import Path +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) + +# Standard library imports +import json +from datetime import datetime +from typing import Dict, List, Optional, Tuple + +# Prax logger (system-wide - nearly always imported) +from prax.apps.modules.logger import system_logger as logger + +# Services (CLI, etc.) +from cli.apps.modules import console, header, success, error + +# Internal/local imports +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.domain1 import ops +``` + +**WHY this order:** +1. **Infrastructure first** - Must run before other imports can work +2. **Standard library** - Python built-ins grouped together +3. **Prax logger** - System-wide logging service +4. **Services** - CLI, other branch services (import before internal handlers) +5. **Internal imports** - After all external dependencies resolved + +--- + +## AIPASS_ROOT Pattern + +**The standard:** +```python +from pathlib import Path +AIPASS_ROOT = Path.home() / "aipass_core" +``` + +**WHY Path.home():** +- Works across all environments (no hardcoded paths) +- User-agnostic (any user can run AIPass) +- System-agnostic (Linux, Mac, Windows) + +**Where it's used:** +```python +# Finding branch components +PRAX_ROOT = AIPASS_ROOT / "prax" +CLI_ROOT = AIPASS_ROOT / "cli" +SEED_ROOT = Path.home() / "seed" # Seed is outside aipass_core + +# Accessing shared resources +TEMPLATES_DIR = AIPASS_ROOT / "templates" +``` + +**Consistency rule:** Always use `AIPASS_ROOT` or `Path.home()`, never hardcode `/home/username/` + +--- + +## sys.path Setup (When Needed) + +**Pattern:** +```python +import sys +from pathlib import Path +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) +``` + +**WHY sys.path.insert(0, ...):** +- Allows imports from any branch without relative path gymnastics +- Makes `from prax.apps.modules.logger import system_logger` work from anywhere +- Adds aipass_core to Python's import search path + +**When to use:** +- **Modules and handlers:** Need it (they're deep in directory structure) +- **Main entry points:** Usually need it +- **Standalone scripts:** Definitely need it + +**Example enabling import:** +```python +# Without sys.path setup - fails +from prax.apps.modules.logger import system_logger # ModuleNotFoundError + +# With sys.path setup - works +sys.path.insert(0, str(AIPASS_ROOT)) +from prax.apps.modules.logger import system_logger # ✓ +``` + +### Branch-Specific sys.path Patterns + +**Seed-specific pattern:** +```python +sys.path.insert(0, str(AIPASS_ROOT)) +sys.path.insert(0, str(Path.home())) # Seed-specific: enables `from seed.apps.handlers...` imports +``` + +**Why seed needs both:** Seed lives at `/home/aipass/seed/` (outside `aipass_core`), so adding `Path.home()` to sys.path allows `from seed.apps.handlers...` imports to work. Other branches typically only need the `AIPASS_ROOT` line since they live inside `aipass_core`. + +--- + +## Prax Logger Import (Nearly Always) + +**The most common import in the system:** + +```python +from prax.apps.modules.logger import system_logger as logger +``` + +**WHY Prax is important:** +- **System-wide logging** for all branches that subscribe +- **Service provider model** - Prax provides logging as a service +- **Consistent import pattern** - Same everywhere for easy recognition +- **Nearly universal** - Used in almost every module and handler + +**Usage:** +```python +logger.info("Branch created successfully") +logger.warning("Memory file not found, using defaults") +logger.error("Failed to backup branch", exc_info=True) +``` + +**Consistency:** Same import pattern everywhere +```python +# Always this +from prax.apps.modules.logger import system_logger as logger + +# Never variations like these +from prax import logger # ✗ +import prax.system_logger # ✗ +``` + +**Output location:** Prax manages log files, branches don't need to worry about where logs go + +--- + +## Handler Independence Import Rule + +**Core rule:** Handlers CANNOT import from parent branch modules + +**Example - Seed:** + +```python +# ✓ ALLOWED - Handler imports another handler +# seed/apps/handlers/domain1/ops.py +from seed.apps.handlers.json import json_handler + +# ✓ ALLOWED - Handler imports standard library +import json +from pathlib import Path + +# ✓ ALLOWED - Handler imports Prax service +from prax.apps.modules.logger import system_logger as logger + +# ✓ ALLOWED - Handler imports CLI service +from cli.apps.modules import console, error + +# ✗ FORBIDDEN - Handler imports parent module +from seed.apps.modules.create_thing import something # BREAKS INDEPENDENCE +``` + +**WHY this matters:** +- **Marketplace transportability** - Handlers can be moved to other branches +- **No circular dependencies** - Clean one-way flow +- **Self-contained units** - Handlers work independently + +**Pattern:** +``` +Modules import handlers ✓ +Handlers import handlers ✓ +Handlers import modules ✗ +``` + +--- + +## Internal Import Patterns + +**From modules to handlers:** +```python +# In seed/apps/modules/create_thing.py +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.domain1 import ops +``` + +**From handlers to handlers (within same branch):** +```python +# In seed/apps/handlers/domain1/ops.py +from seed.apps.handlers.json import json_handler +``` + +**Cross-branch service imports:** +```python +# Services can be imported anywhere (modules or handlers) +from prax.apps.modules.logger import system_logger as logger +from cli.apps.modules import console, header, success, error +``` + +**Relative imports (avoided):** +```python +# ✗ Don't use relative imports +from ...handlers.json import json_handler # Confusing, hard to trace + +# ✓ Use absolute imports from sys.path +from seed.apps.handlers.json import json_handler # Clear, explicit +``` + +--- + +## External Services - Invocation Context + +Some AIPass services need to know **which branch is calling them** to provide proper context-aware functionality. This requires specific invocation patterns beyond simple imports. + +### Service Categories + +**Library Services (Import & Use):** +- **Prax** - Logging service +- **CLI** - Console formatting and output +- **API** - LLM calls and AI interactions +- **Memory Bank** - Vector storage and search + +**Router Services (CLI Invocation Only):** +- **Drone** - NOT a library service, it's a CLI router + - Resolves `@` targets before passing commands to branches + - Branches NEVER import from `drone.apps.modules` + - Invoked via subprocess: `subprocess.run(["drone", "command", ...])` + +### Context-Independent Services (Import & Use Anywhere) + +**These services work from any location:** + +```python +# Prax Logger - context-independent +from prax.apps.modules.logger import system_logger as logger +logger.info("Works from anywhere") + +# CLI Services - context-independent +from cli.apps.modules import console, header +console.print("Works from anywhere") +``` + +**Why they work anywhere:** These services don't need to know who's calling them. They provide generic functionality. + +### Drone: CLI Router Pattern (NOT for Import) + +**Drone is NOT a library service.** It's a CLI router that: +1. Resolves `@` targets to actual branch paths +2. Routes commands to the appropriate branch +3. Handles context switching and invocation + +**✓ CORRECT - Invoke Drone as CLI:** +```python +import subprocess + +# Drone resolves @ and routes the command +subprocess.run(["drone", "email", "send", "@recipient", "Subject", "Message"]) +subprocess.run(["drone", "log", "show"]) +subprocess.run(["drone", "@seed", "some-command"]) +``` + +**✗ FORBIDDEN - Never import from Drone:** +```python +# ✗ WRONG - Drone is not a library service +from drone.apps.modules import resolve_target # NO! +from drone.apps.modules.router import route_command # NO! + +# Branches should NOT handle @ resolution themselves +# That's Drone's job - it resolves @ before passing to branches +``` + +**Why Drone is different:** +- **Prax/CLI/API/Memory Bank**: Library services providing functionality via imports +- **Drone**: CLI router that resolves targets and invokes other tools +- Branches receive already-resolved paths/commands from Drone +- Branches don't need @ handling code - Drone does that BEFORE calling them + +--- + +### Context-Dependent Services (PWD Detection Required) + +**AI_MAIL** uses PWD (Present Working Directory) detection to determine sender identity and configuration. This means **you must invoke AI_MAIL from your branch directory** for proper operation. + +#### The Pattern: Call from Branch Directory + +```python +# ✓ CORRECT - Call from your branch directory +# Working dir: /home/aipass/seed/ + +import subprocess +subprocess.run(["python3", "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "send", "@drone", "Subject", "Message"]) + +# AI_MAIL walks up from your CWD, finds SEED.id.json, knows you're @seed +# Your email sends FROM @seed (not @dev_central or @ai_mail) +``` + +```python +# ✗ WRONG - Call from wrong directory +# Working dir: /home/aipass/ + +subprocess.run(["python3", "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "send", "@drone", "Subject", "Message"]) + +# AI_MAIL can't find branch identity, falls back to @dev_central +# Email sends from wrong identity +``` + +#### How PWD Detection Works + +1. **AI_MAIL starts** at your current working directory +2. **Walks up** the directory tree looking for `*.id.json` file +3. **Finds** (e.g.) `SEED.id.json` at `/home/aipass/seed/` +4. **Derives identity**: Branch name = "seed", email = "@seed" +5. **Auto-generates config** at `/home/aipass/seed/seed_json/user_config.json` +6. **Uses correct sender**: Email sends FROM @seed + +#### Best Practice: Use Drone for AI_MAIL + +**Recommended approach:** +```python +# Drone handles PWD detection automatically +import subprocess +subprocess.run(["drone", "email", "send", "@recipient", "Subject", "Message"]) + +# Drone: +# 1. Detects which branch is calling +# 2. Changes to that branch's directory +# 3. Invokes AI_MAIL from correct context +# 4. Email sends with proper identity +``` + +#### Direct Python Invocation (Advanced) + +If calling AI_MAIL directly without Drone: + +```python +import subprocess +from pathlib import Path + +# Ensure you're in your branch directory +branch_dir = Path(__file__).parent.parent # Adjust based on file depth +result = subprocess.run( + ["python3", "/home/aipass/aipass_core/ai_mail/apps/ai_mail.py", + "send", "@recipient", "Subject", "Message"], + cwd=str(branch_dir), # Force working directory to branch root + capture_output=True +) +``` + +**Key insight:** The `cwd=` parameter ensures AI_MAIL runs from the correct directory for PWD detection. + +#### When to Use Which Approach + +| Scenario | Recommended Approach | Why | +|----------|---------------------|-----| +| Simple email from module | `drone email send ...` | Drone handles context automatically | +| Email from handler | `drone email send ...` | Handlers shouldn't know branch structure | +| Complex automation | Direct call with `cwd=branch_dir` | Full control over context | +| Interactive scripts | Ensure `os.chdir(branch_dir)` first | Interactive sessions need explicit CWD | + +#### Files Auto-Generated by AI_MAIL + +When you call AI_MAIL from your branch directory, it auto-generates: + +``` +/home/aipass/seed/ +├── seed_json/ +│ └── user_config.json # Your email config (@seed identity) +├── ai_mail.local/ +│ ├── inbox.json # Your inbox +│ └── sent/ # Your sent folder +└── SEED.ai_mail.json # Your email summary dashboard +``` + +**Pattern:** Each branch gets its own isolated email configuration and mailbox. + +--- + +### Future Context-Dependent Services + +This PWD detection pattern will be used by other services that need per-branch configuration: + +- **AI_MAIL**: Sender identity (current - implemented) +- **Future services**: Database configs, API keys, branch-specific settings + +**Design principle:** Services that need "who am I?" should use PWD detection + auto-generated config pattern pioneered by AI_MAIL. + +--- + +## Third-Party Libraries + +**Philosophy:** Pragmatic - install what you need, when you need it + +**No complex standards:** +- No version pinning requirements (yet) +- No requirements.txt management process (yet) +- Install as you build + +**Workflow:** + +1. **Build something** → See red squiggly lines in IDE +2. **Check import** → See what library is missing +3. **Install it** → `pip install library_name` +4. **Continue building** + +**Example:** +```python +# Writing code +from questionary import select # Red squiggly line +from rich.console import Console # Red squiggly line + +# Terminal +pip install questionary +pip install rich + +# Back to coding - lines now work +``` + +**AI/Human split:** +- Sometimes AI handles imports and installs them +- Sometimes human sees console errors and installs +- 50-50 split, no rigid process +- Just get what's needed + +**When packages aren't obvious:** +```bash +# Import name != package name sometimes +from PIL import Image # Package is "pillow" not "PIL" +pip install pillow + +# Ask for help if unclear +"I need to import X but not sure what package to install" +``` + +**Virtual environment:** +- AIPass uses `~/.venv/` (user's home directory venv) +- Shebang points to it: `#!/home/aipass/.venv/bin/python3` +- All branches share the same venv +- Packages install once, available everywhere + +**EXCEPTION - MEMORY_BANK:** +- MEMORY_BANK uses its own venv: `/home/aipass/MEMORY_BANK/.venv` +- Shebang for MEMORY_BANK: `#!/home/aipass/MEMORY_BANK/.venv/bin/python3` +- Isolated environment for memory management operations + +--- + +## Standard Library Organization + +**Group by category:** + +```python +# File/path operations +from pathlib import Path +import os +import shutil + +# Data handling +import json +from datetime import datetime + +# Type hints +from typing import Dict, List, Optional, Tuple, Any + +# System operations +import sys +import subprocess +``` + +**Alphabetical within categories:** +```python +# ✓ Good - grouped and alphabetical +from datetime import datetime +import json +from pathlib import Path +import shutil +from typing import Dict, List + +# ✗ Bad - random order +import json +from pathlib import Path +from datetime import datetime +from typing import Dict +import shutil +``` + +**WHY:** Easy to scan, find duplicates, see what's imported at a glance + +--- + +## Import Anti-Patterns + +**Don't do these:** + +```python +# ✗ Wildcard imports +from cortex.apps.handlers.json import * # What did I import? Who knows! + +# ✗ Hardcoded paths +sys.path.insert(0, "/home/patrick/aipass_core") # Breaks on other machines + +# ✗ Relative imports +from ...handlers import something # Hard to trace, confusing + +# ✗ Import entire modules when you need one function +import seed.apps.handlers.json.json_handler # Long, repetitive +# Better: +from seed.apps.handlers.json import json_handler + +# ✗ Circular imports (handler imports module that imports handler) +# Module imports handler ✓ +# Handler imports module ✗ # BREAKS INDEPENDENCE +``` + +--- + +## Quick Reference + +| Import Type | Pattern | Required? | +|-------------|---------|-----------| +| Infrastructure | `AIPASS_ROOT = Path.home() / "aipass_core"` | When needed | +| sys.path | `sys.path.insert(0, str(AIPASS_ROOT))` | When needed | +| Prax logger | `from prax.apps.modules.logger import system_logger as logger` | **Nearly always** | +| CLI service | `from cli.apps.modules import console, header` | When needed | +| API service | `from api.apps.modules import llm_call` | When needed | +| Memory Bank | `from memory_bank.apps.modules import vector_search` | When needed | +| **Drone** | `subprocess.run(["drone", "cmd", ...])` | **CLI only - NEVER import** | +| Standard lib | Grouped by category, alphabetical | Yes | +| Internal | Absolute imports (not relative) | Yes | +| Handler→Module | **FORBIDDEN** (breaks independence) | Never | + +--- + +## Summary + +**Import order:** Infrastructure → Standard lib → Prax → Services → Internal + +**AIPASS_ROOT pattern:** `Path.home() / "aipass_core"` - never hardcode paths + +**Prax logger:** Nearly always imported - system-wide logging service + +**Service imports:** CLI, API, Memory Bank imported as libraries; Drone invoked via CLI only + +**Drone is special:** NOT a library service - it's a CLI router. Never import from drone.apps.modules + +**Handler independence:** Same-branch handler→handler ✓, Handler→own-branch-module ✗, Cross-branch handler ✗ + +**Third-party libraries:** Pragmatic approach - install what you need as you build + +**Consistency:** Same patterns everywhere enables instant comprehension across entire system + +--- + +## Comments + +#@comments:2025-11-13:claude: Updated examples to use seed/ instead of fictional cortex/ references +#@comments:2025-11-13:claude: Added Services import section (CLI) to match actual codebase patterns +#@comments:2025-11-13:claude: Toned down "critical" language around Prax to "nearly always" for accuracy +#@comments:2025-11-29:claude: Added Service Categories section clarifying Drone is NOT a library service +#@comments:2025-11-29:claude: Added explicit "Drone: CLI Router Pattern" section with FORBIDDEN import examples +#@comments:2025-11-29:claude: Clarified that branches should NEVER import from drone.apps.modules - Drone resolves @ before calling them diff --git a/src/aipass/seedgo/docs/aipass_code_standards/json_structure.md b/src/aipass/seedgo/docs/aipass_code_standards/json_structure.md new file mode 100644 index 00000000..f4d9fbfe --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/json_structure.md @@ -0,0 +1,682 @@ +# JSON Structure Standards +**Status:** Production v2 +**Date:** 2025-11-13 + +--- + +## The Three-JSON Pattern + +**Every module gets three default JSON files:** +- `module_name_config.json` - Settings, configuration, limits +- `module_name_data.json` - Metrics, tracking data, current state +- `module_name_log.json` - Operations history (auto-rotating) + +**Example:** drone_discovery module +``` +drone_discovery_config.json +drone_discovery_data.json +drone_discovery_log.json +``` + +**Location patterns:** +- Seed modules: `/home/aipass/seed/seed_json/` +- Branch modules: `/home/aipass/aipass_core/{branch}/{branch}_json/` + +--- + +## Why Three Files Instead of One? + +**Different purposes, different needs:** + +### 1. Different Growth Rates +- **Config:** Small, rarely changes (API keys, settings) +- **Data:** Medium, updates periodically (metrics, state) +- **Log:** Large, grows constantly (operations history) + +**Problem with one file:** Logs explode in size, makes entire file huge and slow to read. + +### 2. Different Use Cases +- **Config:** "What's the API key?" → Quick lookup +- **Data:** "What's current state?" → Check metrics +- **Log:** "What did it do?" → Review history + +**Quick access:** Small focused files instead of searching massive JSON. + +### 3. Fast Debugging +``` +Something breaks: +1. Check config.json → see settings +2. Check data.json → see current state +3. Check log.json → see what it did +4. If need more → check Prax logs +``` + +**All without reading code or massive console output.** + +--- + +## Setting Up json_handler.py (MANDATORY) + +**When creating a new branch, json_handler.py MUST be configured correctly.** + +### Critical Configuration Requirements + +**Location:** `apps/handlers/json/json_handler.py` in your branch + +**MUST update these constants (DO NOT copy SEED's paths):** + +```python +# ❌ WRONG - Points to SEED +SEED_ROOT = Path.home() / "seed" +SEED_JSON_DIR = SEED_ROOT / "seed_json" +JSON_TEMPLATES_DIR = SEED_ROOT / "apps" / "json_templates" + +# ✓ CORRECT - Points to YOUR branch +API_ROOT = Path.home() / "aipass_core" / "api" +API_JSON_DIR = API_ROOT / "api_json" +JSON_TEMPLATES_DIR = API_ROOT / "apps" / "json_templates" +``` + +### Step-by-Step Setup Checklist + +**1. Update BRANCH_ROOT constant:** + +⚠️ **CRITICAL: Must use `Path.home() / "full" / "path"` format!** + +The standards checker uses a regex that ONLY matches `Path.home() / "..."` patterns. +Using `AIPASS_ROOT / "branch"` will FAIL the check even though it resolves to the same path. + +```python +# ❌ WRONG - Fails checker (regex doesn't match AIPASS_ROOT variable) +AIPASS_ROOT = Path.home() / "aipass_core" +API_ROOT = AIPASS_ROOT / "api" # Checker can't validate this! + +# ✓ CORRECT - Passes checker (explicit Path.home() pattern) +AIPASS_ROOT = Path.home() / "aipass_core" +API_ROOT = Path.home() / "aipass_core" / "api" # Checker validates this! +``` + +**Branch path patterns:** +```python +# For SEED (special case): +SEED_ROOT = Path.home() / "seed" + +# For aipass_core branches: +{BRANCH}_ROOT = Path.home() / "aipass_core" / "{branch}" + +# For aipass_os branches (dev_central): +DEVPULSE_ROOT = Path.home() / "aipass_os" / "dev_central" / "devpulse" +ASSISTANT_ROOT = Path.home() / "aipass_os" / "dev_central" / "assistant" +``` + +**2. Update JSON_DIR constant:** +```python +# Pattern: {BRANCH}_JSON_DIR points to {branch}_json/ +FLOW_JSON_DIR = FLOW_ROOT / "flow_json" +API_JSON_DIR = API_ROOT / "api_json" +DRONE_JSON_DIR = DRONE_ROOT / "drone_json" +``` + +**3. Update TEMPLATES_DIR constant:** +```python +# Point to YOUR branch templates, not SEED's +JSON_TEMPLATES_DIR = {BRANCH}_ROOT / "apps" / "json_templates" +``` + +**4. Create required directories:** +```bash +mkdir -p /home/aipass/aipass_core/{branch}/{branch}_json +mkdir -p /home/aipass/aipass_core/{branch}/apps/json_templates/default +``` + +**5. Copy templates from SEED:** +```bash +cp /home/aipass/seed/apps/json_templates/default/*.json \ + /home/aipass/aipass_core/{branch}/apps/json_templates/default/ +``` + +### Validation + +**Run standards checker on your json_handler.py:** +```bash +python3 /home/aipass/seed/apps/modules/standards_checklist.py \ + /home/aipass/aipass_core/{branch}/apps/handlers/json/json_handler.py +``` + +**Expected result:** 100/100 on JSON STRUCTURE standard + +**If failing:** +- Check BRANCH_ROOT points to your branch (not "seed") +- Check JSON_DIR uses {branch}_json pattern +- Check TEMPLATES_DIR uses your branch templates + +### Common Mistakes + +1. **Using `AIPASS_ROOT / "branch"` instead of `Path.home() / "full/path"`** ← Most common error! + - The checker regex only matches `Path.home() / "..."` pattern + - `BRANCH_ROOT = AIPASS_ROOT / "api"` → FAILS (even though path is correct) + - `BRANCH_ROOT = Path.home() / "aipass_core" / "api"` → PASSES + - This caused 5+ branches to fail at 33-66% despite having correct paths + +2. **Copying SEED's handler without changing paths** + - API and Drone both made this mistake + - Results in files created in wrong location + +3. **Using SEED_ROOT variable name in other branches** + - Should be API_ROOT, FLOW_ROOT, DRONE_ROOT, etc. + +4. **Pointing TEMPLATES_DIR to SEED's templates** + - Each branch needs its own template copies + - Allows branch-specific template customization + +5. **Wrong JSON directory naming** + - Must use pattern: `{branch}_json/` + - NOT `json/`, `seed_json/` (for non-SEED branches) + +6. **Importing Prax logger in handlers** + - Handlers are tier 3 - no Prax imports allowed + - Use silent error returns (return False/None) instead of logging + +--- + +## Config Files + +**Purpose:** Module settings, configuration, limits + +**Real example from seed:** +```json +{ + "module_name": "seed", + "version": "0.1.0", + "created": "2025-11-12", + "config": { + "enabled": true, + "log_level": "info", + "max_log_entries": 100 + } +} +``` + +**What belongs here:** +- Module version and metadata +- Feature toggles (enabled/disabled) +- **Log management settings** (max_log_entries - critical!) +- Resource limits (max files, timeouts) +- API models (optional) + +**Size:** Small, rarely changes (typically <1KB) + +--- + +## Data Files + +**Purpose:** Metrics, tracking data, current module state + +**Real example from seed:** +```json +{ + "created": "2025-11-12", + "last_updated": "2025-11-12", + "metrics": { + "operations_count": 0, + "success_count": 0, + "error_count": 0 + } +} +``` + +**What belongs here:** +- Timestamps (created, last_updated) +- Operation counts/metrics +- Success/failure tracking +- Current state/status +- Module-specific tracking data + +**Size:** Medium, updates periodically (typically <10KB) + +**Handler auto-updates:** `last_updated` field set automatically on save + +--- + +## Log Files + +**Purpose:** Operations history - what module did, when, result + +**Real example from seed:** +```json +[ + { + "timestamp": "2025-11-12T17:57:20.688755", + "operation": "seed_startup", + "data": { + "modules_discovered": 6 + } + }, + { + "timestamp": "2025-11-13T00:22:22.793686", + "operation": "seed_startup", + "data": { + "modules_discovered": 12 + } + } +] +``` + +**Structure:** Array of entries (NOT object with "entries" key) + +**What belongs here:** +- Timestamped operations +- Operation name/type +- Optional data dict with details +- Module-specific operation info + +**Size:** Can grow large - **MUST be managed with auto-rotation** + +**Handler behavior:** Automatically rotates when exceeds `max_log_entries` from config + +--- + +## Log Management (Critical) + +**Problem:** Logs grow unbounded → thousands of entries → hundreds of KB + +**Real anti-patterns (as of 2025-11-08):** +``` +drone_loader_log.json: 171KB (7,001 entries) ❌ +drone_registry_log.json: 183KB (7,001 entries) ❌ +``` + +**Solution: Config-controlled auto-rotation** + +**In module config.json:** +```json +{ + "config": { + "max_log_entries": 100 + } +} +``` + +**Handler implementation (automatic):** +```python +from seed.apps.handlers.json import json_handler + +# Auto-detects module name, auto-rotates based on config +json_handler.log_operation("operation_name", {"key": "value"}) +``` + +**How rotation works:** +1. Handler reads `max_log_entries` from config (default: 100) +2. After adding new entry, checks log length +3. If exceeds limit, keeps only most recent N entries +4. Older entries dropped (FIFO - first in, first out) + +**Standard limits:** +- **100 entries** - default for most modules +- **50 entries** - minimal tracking needs +- **No limit** - custom JSONs only (NOT for default logs) + +**Why 50-100 is enough:** +- Recent operations show current behavior +- Bugs visible in latest entries +- Full debugging → use Prax logs (detailed, managed separately) + +--- + +## JSON Logs vs Prax Logs + +**Two different logging systems:** + +### JSON log.json Files +- **Structured operations history** +- Machine-readable (JSON format) +- Module lifecycle tracking +- "What did this module do?" +- Limited entries (50-100 max) + +### Prax System Logs +- **Detailed debugging output** +- Human-readable text logs +- logger.info, logger.warning, logger.error +- "Why did it fail? Show me details" +- Full detail, managed by Prax tracks system + +### Console Output +- **Critical info only** +- Keeps terminal clean +- "Module missing import, API key corrupt, no internet" +- Not for debugging details + +**When to use each:** +1. **Quick check** → JSON log (recent operations) +2. **Detailed debugging** → Prax logs (full context) +3. **Live monitoring** → Prax watcher (real-time log tailing) +4. **Critical alerts** → Console (clean, focused) + +--- + +## Registry JSONs + +**Purpose:** Track collections of items (branches, handlers, modules) + +**Real example: /home/aipass/BRANCH_REGISTRY.json** +```json +{ + "metadata": { + "version": "1.0.0", + "last_updated": "2025-11-13", + "total_branches": 17 + }, + "branches": [ + { + "name": "FLOW", + "path": "/home/aipass/aipass_core/flow", + "email": "@flow", + "status": "active", + "created": "2025-10-30" + }, + { + "name": "CORTEX", + "path": "/home/aipass/aipass_core/cortex", + "email": "@cortex", + "status": "active", + "created": "2025-10-30" + } + ] +} +``` + +**Registry characteristics:** +- **Central source of truth** for collections +- Used by Cortex for branch management +- Used by Drone for command routing +- **Not part of three-JSON pattern** (special purpose) +- Typically located at system root level + +**Other registries in use:** +- `/home/aipass/aipass_core/drone/drone_json/drone_registry.json` - Drone commands +- `/home/aipass/aipass_core/prax/prax_json/prax_registry.json` - Prax tracks + +**When to create registry:** +- Need to track multiple related items +- Multiple modules need same lookup data +- Central coordination required across system + +--- + +## Custom JSONs + +**Beyond config/data/log - module-specific needs** + +**Examples:** +- **Ignore patterns:** `module_ignore_patterns.json` +- **Summaries:** `plan_summaries.json` (Flow) +- **Templates:** Custom template configurations + +**When to create custom JSON:** +- Data doesn't fit config/data/log pattern +- Specific functionality needs dedicated structure +- Could go in config but would bloat it + +**Rule:** No limit on custom JSONs - create what module needs. + +**But:** Always provide default three-JSON even if not all used. Consistency over optimization. + +--- + +## Why This System Exists + +**Before three-JSON:** +- Print statements everywhere +- Console spam (millions of lines) +- Hard to debug +- No state tracking +- "Where did it fail?" → hours of searching + +**With three-JSON:** +- Console stays clean (critical info only) +- Quick debugging (check JSONs, see state/history) +- Structured data (machine and human readable) +- **Sources of truth** for module state +- Debugging in minutes, not hours + +**Reality:** +- No test infrastructure yet (custom system, building from scratch) +- JSONs + logs = debugging infrastructure +- Fast iteration, manual testing +- Future: pytest framework (started in Cortex) + +--- + +## Default Structure + +**Every module gets minimum three files:** +``` +module_name_config.json +module_name_data.json +module_name_log.json +``` + +**Even if not all used** - consistency matters. + +**Some modules:** +- Heavy config, light data, minimal logs +- Light config, heavy data, huge logs +- All three heavily used + +**Some don't use all three** - that's fine. They exist as defaults, use what's needed. + +**Consistency = speed:** +- Know where to look +- Same structure everywhere +- Quick debugging across all branches + +--- + +## Summary + +**Three-JSON pattern:** +- config.json (settings) - small, stable +- data.json (state/metrics) - medium, periodic updates +- log.json (operations history) - large, **must be managed** + +**Log management critical:** +- Max 50-100 entries +- Config-controlled limits +- Rotate old entries + +**JSON logs vs Prax logs:** +- JSON = structured operations history +- Prax = detailed debugging output +- Console = critical info only + +**Registries & custom JSONs:** +- Registry = central collection tracking +- Custom = module-specific needs +- No limit, create what's needed + +**Why it works:** +- Fast debugging (check JSONs, see state instantly) +- Clean console (no spam) +- Structured data (sources of truth) +- Consistent across system + +--- + +## Handler Auto-Detection Pattern + +**Status:** ✅ Implemented Standard (2025-11-12) + +### The Core Principle + +**Modules should never pass their own name to handlers.** + +Handlers use Python's `inspect.stack()` to automatically detect which module is calling them. + +### Why Auto-Detection? + +**Bad (manual name passing):** +```python +from seed.apps.handlers.json import json_handler + +json_handler.log_operation( + "imports_standard", # ❌ Module has to know its own name + "operation", + {"data": "value"} +) +``` + +**Problems:** +- Typos possible (`"import_standard"` vs `"imports_standard"`) +- Doesn't auto-adapt when file renamed +- Extra boilerplate in every module +- Defeats the "just import and use" principle + +**Good (auto-detection):** +```python +from seed.apps.handlers.json import json_handler + +json_handler.log_operation( + "operation", # ✅ Handler figures out module name + {"data": "value"} +) +``` + +**Benefits:** +- Zero typos (no manual name) +- Auto-adapts to file renames +- Minimal code (cleaner modules) +- "Import and use" - like Prax logger + +### Implementation + +**Handler side (json_handler.py):** + +```python +import inspect +from pathlib import Path + +def _get_caller_module_name() -> str: + """Auto-detect calling module name from call stack""" + try: + stack = inspect.stack() + # Skip frames: [0]=this function, [1]=log_operation, [2]=actual caller + if len(stack) > 2: + caller_frame = stack[2] + caller_path = Path(caller_frame.filename) + module_name = caller_path.stem # "imports_standard" from "imports_standard.py" + + if module_name and not module_name.startswith('_'): + return module_name + + return "unknown" + except Exception as e: + logger.error(f"Error detecting caller: {e}") + return "unknown" + +def log_operation(operation: str, data: Dict[str, Any] | None = None, module_name: str | None = None) -> bool: + """ + Add entry to module log with automatic rotation + + Auto-detects calling module if module_name not provided. + """ + # Auto-detect module name if not provided + if module_name is None: + module_name = _get_caller_module_name() + + ensure_module_jsons(module_name) + # ... rest of function +``` + +**Module side:** + +```python +# Standard imports +from prax.apps.modules.logger import system_logger as logger +from seed.apps.handlers.json import json_handler + +def handle_command(command: str, args: List[str]) -> bool: + # Just call - handler auto-detects we're "imports_standard" + json_handler.log_operation( + "standard_displayed", + {"command": command} + ) + return True +``` + +### Pattern for All Handlers + +**Apply this to ANY handler that needs to know the caller:** + +1. Import `inspect` and `Path` +2. Add `_get_caller_module_name()` helper function +3. Make `module_name` parameter optional (default `None`) +4. Auto-detect if not provided +5. Keep backward compatibility (explicit name still works) + +**Example - increment_counter:** + +```python +def increment_counter(counter_name: str, amount: int = 1, module_name: str | None = None) -> bool: + """Increment counter - auto-detects module""" + if module_name is None: + module_name = _get_caller_module_name() + + ensure_module_jsons(module_name) + # ... rest +``` + +### When to Use Auto-Detection + +**Use auto-detection when:** +- Handler needs to create/manage module-specific files +- Handler needs to log caller identity +- Handler behavior changes based on caller + +**Don't use auto-detection when:** +- Handler is pure utility (no caller-specific logic) +- Explicit parameter makes more sense (e.g., `validate_json(json_path)`) + +### Testing Auto-Detection + +**Verify it works:** + +```bash +# Delete existing JSONs +rm -f /branch/branch_json/*.json + +# Run module +python3 apps/modules/my_module.py + +# Check created files - should match module name +ls /branch/branch_json/ +# Expected: my_module_config.json, my_module_data.json, my_module_log.json +``` + +### Reference Implementation + +**Primary handler:** `/home/aipass/seed/apps/handlers/json/json_handler.py` + +**Branch implementations:** +- `/home/aipass/aipass_core/cortex/apps/handlers/json/json_handler.py` +- `/home/aipass/aipass_core/drone/apps/handlers/json/json_handler.py` +- `/home/aipass/aipass_core/prax/apps/handlers/json/json_handler.py` +- (Other branches follow same pattern) + +**Status:** Production-ready, tested across Seed and core branches + +**Pattern established:** 2025-11-12 + +--- + +## Comments + +#@comments:2025-11-13:claude: Updated markdown to reflect production reality - verified three-JSON pattern in use across seed and branches + +#@comments:2025-11-13:claude: Confirmed auto-rotation implementation in seed handler (line 181-231 in json_handler.py) + +#@comments:2025-11-13:claude: Drone logs still need fixing (171KB, 7001 entries) - demonstrates the problem this standard solves + +#@comments:2025-11-13:claude: Log structure is array (not object with "entries" key) - corrected in examples + +#@comments:2026-01-31:claude: Added critical warning about Path.home() pattern requirement - AIPASS_ROOT/branch fails checker regex even with correct path. Fixed 5 branches (API, DRONE, FLOW, BACKUP_SYSTEM, DEVPULSE) affected by this undocumented requirement. diff --git a/src/aipass/seedgo/docs/aipass_code_standards/log_handler.md b/src/aipass/seedgo/docs/aipass_code_standards/log_handler.md new file mode 100644 index 00000000..ae7e1aa3 --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/log_handler.md @@ -0,0 +1,78 @@ +# Log Handler Rotation Standard + +**Standard:** LOG_HANDLER +**Created:** 2026-02-26 +**Version:** 1.0.0 + +--- + +## Purpose + +All logging in AIPass MUST use `RotatingFileHandler` via prax's `system_logger`. Raw `logging.FileHandler` and `logging.StreamHandler` are prohibited because they cause unbounded log growth that can crash the entire system infrastructure. + +## The Rules + +### PROHIBITED + +1. **`logging.FileHandler()`** — No rotation capability, log files grow without bound +2. **`logging.StreamHandler()` alongside file logging** — Bypasses prax's centralized logging +3. **Any custom log handler setup writing to `system_logs/`** — Must go through prax + +### REQUIRED + +1. **Use prax system_logger** — `from prax.apps.modules.logger import system_logger as logger` +2. **All log output via logger methods** — `logger.info()`, `logger.warning()`, `logger.error()` +3. **Prax handles rotation automatically** — maxBytes + backupCount configured centrally + +### EXEMPT + +1. **Prax's own logging infrastructure** — It IS the RotatingFileHandler implementation +2. **Test files** — May set up temporary loggers for testing purposes + +## Examples + +### BAD + +```python +# WRONG: Raw FileHandler — no rotation, grows forever +import logging +handler = logging.FileHandler('system_logs/my_service.log') +my_logger = logging.getLogger('my_service') +my_logger.addHandler(handler) + +# WRONG: StreamHandler alongside file logging — bypasses prax +my_logger.addHandler(logging.StreamHandler()) +my_logger.addHandler(logging.FileHandler(log_file)) +``` + +### GOOD + +```python +# CORRECT: Use prax system_logger (handles rotation automatically) +from prax.apps.modules.logger import system_logger as logger + +logger.info("Operation completed successfully") +logger.warning("Invalid user input: %s", user_input) +logger.error("Connection failed: %s", error) +``` + +## Why This Matters + +On 2026-02-26, the entire AIPass command infrastructure crashed because telegram bot logging used plain `FileHandler` instead of `RotatingFileHandler`. The result: + +- **181,566 log lines** accumulated across telegram log files (~100K ERROR lines) +- **Error catchup scanner** tried to process 100K errors on every command startup +- **Python recursion limit hit** at 1000 levels deep, cascading `RecursionError` +- **Every `drone` command failed** — 30+ second hangs then crash + +All other branches using prax's `system_logger` rotated correctly (verified: `.log.1` backups exist). The telegram bots were the only code bypassing prax. + +## Checker + +**File:** `/home/aipass/seed/apps/handlers/standards/log_handler_check.py` + +Checks: +1. No raw `logging.FileHandler()` usage +2. No raw `logging.StreamHandler()` alongside file-based logging +3. Prax logging infrastructure is automatically exempt +4. Files without log handler setup are automatically passed diff --git a/src/aipass/seedgo/docs/aipass_code_standards/log_level.md b/src/aipass/seedgo/docs/aipass_code_standards/log_level.md new file mode 100644 index 00000000..2019c604 --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/log_level.md @@ -0,0 +1,137 @@ +# Log Level Hygiene Standards +**Status:** Active v1 +**Date:** 2026-02-13 +**Last Major Update:** 2026-02-13 + +--- + +## What This Covers + +Correct usage of Python log levels to ensure ERROR means real system failure, WARNING means user input issues, and monitoring systems (Medic v2) can trust log severity. + +--- + +## The Standard + +### ERROR - System Failures Only + +Reserved for situations where the system itself has broken. These trigger Medic v2 alerts. + +```python +# CORRECT - real system failures +logger.error(f"Failed to connect to database: {e}") +logger.error(f"Import failed: {e}") +logger.error(f"File I/O error: {e}") +logger.error(f"Unhandled exception in handler: {e}") +logger.error(f"Timeout waiting for response: {e}") +``` + +**ERROR-worthy events:** +- Crashes and unhandled exceptions +- Timeouts and connection failures +- Import failures and missing dependencies +- File I/O errors (disk full, permission denied) +- Internal state corruption + +### WARNING - User Input Errors + +For when the user typed something wrong. Not a system failure - the system handled it correctly by rejecting bad input. + +```python +# CORRECT - user input issues +logger.warning(f"Unknown command: {command}") +logger.warning(f"No module handled command: {args.command}") +logger.warning(f"Invalid argument: {arg}") +logger.warning(f"Plan not found: {plan_id}") +logger.warning(f"Unrecognized option: {option}") +``` + +**WARNING-worthy events:** +- Unknown or unrecognized commands +- Invalid arguments or bad syntax +- Missing required arguments +- Command routing failures (no module handled) +- User typos + +### INFO - Normal Operations + +```python +# CORRECT - business as usual +logger.info(f"Module discovered: {module_name}") +logger.info(f"Service started on port {port}") +logger.info(f"Configuration loaded from {config_path}") +logger.info(f"Backup completed: {file_count} files") +``` + +--- + +## Common Violations + +### Using ERROR for Unknown Commands + +```python +# BAD - unknown command is user input, not system failure +logger.error(f"Unknown command: {command}") + +# GOOD - user typed wrong thing, system handled it fine +logger.warning(f"Unknown command: {command}") +``` + +### Using ERROR for Command Routing Failures + +```python +# BAD - no module handling a command means user typed wrong thing +logger.error(f"No module handled command: {args.command}") + +# GOOD - this is a warning, not an error +logger.warning(f"No module handled command: {args.command}") +``` + +### Using ERROR for Invalid Arguments + +```python +# BAD - bad user input isn't a system error +logger.error(f"Invalid argument: {arg}") + +# GOOD +logger.warning(f"Invalid argument: {arg}") +``` + +--- + +## Why This Matters + +Medic v2 uses push-based error detection that monitors ERROR-level log entries to detect real system issues. If user typos trigger ERROR, Medic sees noise instead of signal. + +**Clean log levels = accurate error detection = healthier system.** + +| Level | Means | Medic Response | Example | +|-------|-------|----------------|---------| +| ERROR | System broke | Alert/investigate | Database connection failed | +| WARNING | User issue | Ignore | Unknown command typed | +| INFO | Normal | Ignore | Module discovered | + +--- + +## Automated Checker + +The `log_level_check.py` checker validates two things: + +1. **ERROR reserved for system failures** - Detects `logger.error()` calls containing user-input patterns like "unknown command", "invalid argument", "unrecognized", etc. + +2. **Command routing uses WARNING** - In files with command routing logic (`route_command`, `handle_command`, `args.command`), verifies that routing failures use WARNING not ERROR. + +The checker uses AST-aware docstring tracking to avoid false positives from code examples in docstrings. + +--- + +## Decision Record + +| Date | Decision | By | Status | +|------|----------|----|--------| +| 2026-01-31 | ERROR vs WARNING distinction approved | Patrick | Active | +| 2026-02-13 | Automated checker created | SEED | Active | + +--- + +*Part of AIPass Code Standards - maintained by SEED branch* diff --git a/src/aipass/seedgo/docs/aipass_code_standards/log_visibility.md b/src/aipass/seedgo/docs/aipass_code_standards/log_visibility.md new file mode 100644 index 00000000..6c1a855f --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/log_visibility.md @@ -0,0 +1,100 @@ +# Log Visibility Standard + +**Category:** Logging +**Created:** 2026-02-27 +**Checker:** `log_visibility_check.py` + +--- + +## Purpose + +ALL Python files (modules, handlers, entry points) MUST use prax `system_logger` so their logs appear in `system_logs/` and are visible to Prax monitor. Raw `logging.getLogger()` creates local log files that are invisible to system-wide monitoring. One logging system everywhere — Prax. + +## The Problem + +Audit found **92 local log files** with no `system_logs/` mirror — completely invisible to Prax monitor. Root cause: modules importing `logging` and calling `logging.getLogger()` instead of importing from `prax.apps.modules.logger`. + +When any file uses raw `logging.getLogger()`: +- Logs write only to branch-local `logs/` directory +- Prax monitor never sees them (it watches `system_logs/`) +- Errors, warnings, and anomalies go undetected +- System observability has blind spots + +## The Rules + +### PROHIBITED + +- Using `logging.getLogger()` in ANY file without also importing prax `system_logger` +- Creating loggers that only write to local `logs/` directories +- Any logging setup that bypasses Prax dual-handler (local + system_logs) + +### REQUIRED + +- Import prax system_logger: `from prax.apps.modules.logger import system_logger as logger` +- Use `system_logger` for ALL logging — modules, handlers, entry points +- If `logging.getLogger()` is needed for specific purposes, the prax import must also be present + +### EXEMPT + +- **Prax logging infrastructure** — it IS the implementation (exempt from both checks) +- **Test files** — test isolation (exempt from both checks) +- **Files with `.seed/bypass.json` exceptions** + +## Detection (Two-Check System v3.0.0) + +### Check 1: Prax Import (ALL files — no handler exemption) +1. Scans for `logging.getLogger()` calls +2. If found, checks for `from prax.apps.modules.logger import` +3. If prax import is missing, flags as violation with line numbers +4. Applies to modules AND handlers — unified Prax logging everywhere + +### Check 2: Local FileHandler (ALL files, no exemptions) +1. Scans for `logging.FileHandler()` creation +2. Checks surrounding context for `system_logs` path +3. If FileHandler writes to local paths (not system_logs/), flags as blind spot +4. No exemptions — creating a FileHandler to local logs is a visibility issue + +## Examples + +### Bad — Invisible to Prax + +```python +import logging +logger = logging.getLogger(__name__) +logger.info("This only writes to local logs/") +``` + +### Good — Visible System-Wide + +```python +from prax.apps.modules.logger import system_logger as logger +logger.info("Visible in Prax monitor and system_logs/") +``` + +### Acceptable — Both Present + +```python +import logging +from prax.apps.modules.logger import system_logger as logger + +# Raw logger for specific subprocess/library needs +subprocess_logger = logging.getLogger('subprocess') +# Prax logger for all application logging +logger.info("Application log — visible system-wide") +``` + +## Scoring + +- **100%** — No violations found (no raw getLogger without prax, no local FileHandler) +- **0%** — Both checks fail (raw getLogger + local FileHandler) +- **50%** — One check passes, one fails +- **Pass threshold:** 75% + +## Related Standards + +- **log_handler** — Validates RotatingFileHandler usage (no raw FileHandler) +- **imports** — Validates import order and prax logger import pattern + +--- + +*Part of AIPass Code Standards — maintained by SEED branch* diff --git a/src/aipass/seedgo/docs/aipass_code_standards/modules.md b/src/aipass/seedgo/docs/aipass_code_standards/modules.md new file mode 100644 index 00000000..ba456bfa --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/modules.md @@ -0,0 +1,790 @@ +# Module Standards +**Status:** Active v1.0 +**Date:** 2025-11-13 + +--- + +## What This Covers + +Standards specific to modules (orchestration layer). Modules coordinate workflows by calling handlers in sequence. They're the conductor, not the orchestra. + +--- + +## Key Principles + +- **Thin orchestration, no heavy business logic** - Modules direct, handlers implement +- **Coordinates workflow between handlers** - Call handlers in sequence to complete operations +- **Can import 20+ handlers** - That's fine, better than handlers importing each other +- **Minimal business logic** - Logic belongs in handlers, not modules +- **handle_command(args) -> bool pattern** - Standard entry point for drone routing +- **Each module accepts ONE primary command - no aliases (Session 14 standard)** - Simplify routing logic + +--- + +## Module Responsibilities + +### What Modules SHOULD Do + +**1. Orchestrate Workflows** +Call handlers in the right sequence to complete operations: + +```python +def create_new_thing(name: str, thing_type: str): + """Orchestrate creation workflow""" + # 1. Validate input + if not validate_input(name, thing_type): + error("Invalid input") + return False + + # 2. Check preconditions + if check_exists(name): + warning(f"{name} already exists, skipping") + return True + + # 3. Execute creation + result = create_thing(name, thing_type) + + # 4. Display result + if result.success: + success(f"Created {name}") + else: + error(f"Failed to create {name}: {result.reason}") + + return result.success +``` + +**2. Route Commands** +Parse arguments and dispatch to appropriate functions: + +```python +def handle_command(command: str, args: List[str]) -> bool: + """Route commands to appropriate handlers""" + if command not in ["cli", "display", "output"]: + return False # Not our command + + # Log module usage + json_handler.log_operation("standard_displayed", {"command": command}) + + # Execute workflow + print_standard() + return True +``` + +**3. Import Many Handlers** +Modules are the aggregation point for functionality: + +```python +# Service imports (shared infrastructure) +from prax.apps.modules.logger import system_logger as logger +from cli.apps.modules import console, header, success, error + +# Domain handler imports (business logic) +from seed.apps.handlers.json import json_handler +from seed.apps.handlers.standards.cli_content import get_cli_standards +from seed.apps.handlers.validation import validate_input +from seed.apps.handlers.operations import create_thing, update_thing +``` + +**Why 20+ imports is fine:** Better one module imports 20 handlers than handlers importing each other. Dependencies flow ONE direction: modules → handlers. + +**4. Light Validation** +Check arguments before calling handlers: + +```python +def create_branch(name: str): + """Create new branch with validation""" + # Light validation in module + if not name: + error("Branch name required") + return False + + # Heavy validation in handler + result = validate_branch_name(name) + if not result.success: + error(result.reason) + return False + + # Execute via handler + return execute_create_branch(name) +``` + +**5. Use Services** +Leverage service branches for consistent behavior: + +```python +# Prax logging service +logger.info("Starting create operation") + +# CLI display service +header("Create New Branch", {"Name": branch_name}) + +# CLI error handling service +@track_operation +def create_branch(name: str): + """Create branch with automatic error handling""" + execute_create(name) + return True +``` + +### What Modules SHOULD NOT Do + +**1. Heavy Business Logic** +Business logic belongs in handlers: + +```python +# ❌ BAD - business logic in module +def create_branch(path: str): + """Module contains business logic""" + branch_path = Path(path) + branch_path.mkdir(parents=True, exist_ok=True) + + # Create config file + config = { + "name": branch_path.name, + "created": datetime.now().isoformat(), + "version": "1.0" + } + config_file = branch_path / f"{branch_path.name}.id.json" + with open(config_file, 'w') as f: + json.dump(config, f, indent=2) + + # Create handlers directory + (branch_path / "apps" / "handlers").mkdir(parents=True) + + # Create modules directory + (branch_path / "apps" / "modules").mkdir(parents=True) + + return True + +# ✅ GOOD - orchestrate handler calls +def create_branch(name: str, template: str): + """Module orchestrates workflow""" + # Validate via handler + if not validate_branch_name(name): + return False + + # Create structure via handler + result = create_branch_structure(name, template) + + # Initialize config via handler + if result.success: + initialize_branch_config(name) + + return result.success +``` + +**2. Direct File Operations** +Use handlers for file operations: + +```python +# ❌ BAD - module does file operations +def update_config(branch: str, key: str, value: str): + """Module handles files directly""" + config_path = Path(f"/home/aipass/{branch}/{branch}.id.json") + with open(config_path) as f: + config = json.load(f) + + config[key] = value + + with open(config_path, 'w') as f: + json.dump(config, f, indent=2) + +# ✅ GOOD - module calls handler +def update_config(branch: str, key: str, value: str): + """Module orchestrates via handler""" + return json_handler.update_key(branch, key, value) +``` + +**3. Complex Algorithms** +Algorithms belong in handlers: + +```python +# ❌ BAD - module contains algorithm +def calculate_scores(data: List[dict]): + """Module implements scoring algorithm""" + scores = [] + for item in data: + # 50 lines of scoring logic + score = complex_calculation(item) + scores.append(score) + return scores + +# ✅ GOOD - module calls handler +def calculate_scores(data: List[dict]): + """Module orchestrates scoring""" + return scoring_handler.calculate_all_scores(data) +``` + +--- + +## File Size Expectations + +Based on analysis of `/home/aipass/seed/apps/modules/` (14 modules): + +**Size Distribution:** +- **110-135 lines:** Simple modules (single operation, minimal workflow) + - `imports_standard.py` - 110 lines + - `modules_standard.py` - 114 lines + - `naming_standard.py` - 113 lines + +- **135-155 lines:** Standard modules (multiple operations, some complexity) + - `cli_standard.py` - 135 lines (display + demo offer) + - `create_thing.py` - 152 lines (showroom with demos) + +- **250-300 lines:** Complex modules (multiple workflows, batch operations) + - `test_cli_errors.py` - 283 lines (4 examples + demos) + +**Guidelines:** + +| Line Count | Classification | Indicators | Action | +|------------|----------------|------------|--------| +| < 150 | Simple | Single workflow, minimal branching | Perfect size | +| 150-250 | Standard | Multiple workflows, some complexity | Good size | +| 250-400 | Complex | Many workflows, batch operations | Watch it | +| 400-600 | Heavy | Many commands, extensive orchestration | Consider splitting | +| 600+ | Too Large | Context degradation begins | Split into domains | + +**Why File Size Matters:** + +1. **AI comprehension** - Small files process faster with fewer errors +2. **Human scanning** - 150-line file scans in 30 seconds, 600-line file takes 3 minutes +3. **Context efficiency** - Agent can summarize separately, keep main context clean +4. **Change isolation** - Smaller files = smaller blast radius for changes + +**Example: CLI Display Module** +`/home/aipass/aipass_core/cli/apps/modules/display.py` - 184 lines +- Public API for 5 display functions +- Light orchestration over handler implementation +- Includes docstrings, examples, demo +- Perfect size for AI + human comprehension + +--- + +## Orchestration Patterns + +### Pattern 1: Linear Workflow + +Execute steps in sequence, stop on failure: + +```python +def create_branch(name: str): + """Linear workflow - each step depends on previous""" + # Step 1: Validate + if not validate_branch_name(name): + error("Invalid branch name") + return False + + # Step 2: Check preconditions + if branch_exists(name): + warning(f"Branch {name} already exists") + return True + + # Step 3: Create structure + result = create_branch_structure(name) + if not result.success: + error(f"Failed to create structure: {result.reason}") + return False + + # Step 4: Initialize config + initialize_config(name) + + # Step 5: Display success + success(f"Branch {name} created successfully") + return True +``` + +**Use when:** Steps must execute in order, each depends on previous success. + +### Pattern 2: Batch Operations with Collection + +Process multiple items, collect results: + +```python +@collect_results +def update_all_branches() -> List[OperationResult]: + """Batch workflow - collect all results""" + results = [] + + branches = get_all_branches() + for branch in branches: + result = update_branch(branch) + results.append(result) + + return results # Decorator displays summary +``` + +**Use when:** Processing multiple items, want summary of successes/failures. + +### Pattern 3: Conditional Workflow + +Branch based on conditions or user input: + +```python +def publish_standard(standard_name: str): + """Conditional workflow based on user choice""" + # Display current standard + print_standard(standard_name) + + # Offer next action + response = input("Press Enter to see demo (or 'n' to skip): ").strip().lower() + + if response != 'n': + run_demo(standard_name) + else: + console.print("Demo skipped") +``` + +**Use when:** User choice or runtime conditions determine next steps. + +**Reference:** `/home/aipass/seed/apps/modules/cli_standard.py` (135 lines) +```python +def print_standard(): + """Print cli standards - orchestrates handler call""" + console.print() + header("CLI Standards") + console.print() + console.print(get_cli_standards()) # Handler call + console.print() + console.print("─" * 70) + console.print() + + # Conditional: offer demo + response = input("Press Enter to see CLI demo (or 'n' to skip): ").strip().lower() + if response != 'n': + run_demo() # Handler call +``` + +### Pattern 4: Error Handling with Decorators + +Let decorators handle error catching and logging: + +```python +@track_operation +def create_thing(name: str, thing_type: str): + """Decorator handles errors automatically""" + # No try/except needed + validate_input(name, thing_type) + result = create_operation(name, thing_type) + return result # Decorator formats output +``` + +**Use when:** Standard error handling is sufficient (most cases). + +**Reference:** `/home/aipass/seed/apps/modules/test_cli_errors.py` +```python +@track_operation +def example_success_operation(): + """Example operation that succeeds""" + # Just return True - decorator handles everything + return True + +@track_operation +def example_failure_operation(): + """Example operation that fails""" + # Raise exception - decorator catches and formats + raise FileNotFoundError("Example file not found") +``` + +### Pattern 5: Service Integration + +Combine multiple services for complete workflow: + +```python +def create_and_configure(name: str): + """Orchestrate multiple services""" + # CLI service - display + header("Create Branch", {"Name": name}) + + # Prax service - logging + logger.info(f"Starting branch creation: {name}") + + # Domain handlers - business logic + result = create_branch_structure(name) + + # JSON handler - tracking + json_handler.log_operation("branch_created", { + "name": name, + "success": result.success + }) + + # CLI service - output + if result.success: + success("Branch created successfully") + else: + error(f"Creation failed: {result.reason}") + + return result.success +``` + +**Use when:** Operation needs multiple system services. + +**Reference:** `/home/aipass/seed/apps/modules/cli_standard.py` +```python +def handle_command(command: str, args: List[str]) -> bool: + """Handle 'cli' command""" + if command != "cli": + return False + + # JSON handler - tracking + json_handler.log_operation( + "standard_displayed", + {"command": command} + ) + + # Execute workflow + print_standard() # Uses CLI service internally + return True +``` + +--- + +## When to Split Modules + +### Clear Signs a Module Needs Splitting + +**1. Handling 10+ Distinct Commands** + +If `handle_command()` has 10+ branches, split by domain: + +```python +# ❌ TOO MANY COMMANDS IN ONE MODULE +def handle_command(command: str, args: List[str]) -> bool: + if command == "create": return create_handler() + if command == "update": return update_handler() + if command == "delete": return delete_handler() + if command == "list": return list_handler() + if command == "search": return search_handler() + if command == "validate": return validate_handler() + if command == "migrate": return migrate_handler() + if command == "backup": return backup_handler() + if command == "restore": return restore_handler() + if command == "sync": return sync_handler() + if command == "publish": return publish_handler() + # ... 5 more commands + return False + +# ✅ SPLIT INTO DOMAIN MODULES +# modules/create_operations.py - create, update, delete +# modules/query_operations.py - list, search, validate +# modules/maintenance_operations.py - migrate, backup, restore, sync +``` + +**2. Multiple Unrelated Workflows** + +If module handles distinct domains, split by domain: + +```python +# ❌ MIXED DOMAINS +# single_module.py contains: +# - Branch management (create, delete, list branches) +# - Standard documentation (display, validate standards) +# - Testing infrastructure (run tests, check coverage) + +# ✅ SPLIT BY DOMAIN +# modules/branch_management.py +# modules/standards_display.py +# modules/testing_operations.py +``` + +**3. File Approaching 600+ Lines** + +Context degradation begins around 600 lines: + +```python +# Check current size +wc -l module.py + +# If > 600 lines, split by logical sections: +# - Commands group 1 → module_operations1.py +# - Commands group 2 → module_operations2.py +# - Helper functions → handlers (if they have logic) +``` + +**4. Team Members Working on Different Sections** + +If git shows frequent merge conflicts in same file: + +```bash +# Check git history +git log --oneline module.py + +# If many developers editing same file, split to reduce conflicts +``` + +**5. Can Identify Clear Sub-Domains** + +If you can name distinct responsibility areas: + +```python +# Large standards module could split into: +# - standards_display.py (show standards) +# - standards_validate.py (check compliance) +# - standards_generate.py (create documentation) +``` + +### How to Split Effectively + +**Step 1: Identify Domains** +Group related commands by purpose: + +```python +# Original: standards_module.py (450 lines) +# Commands: display, validate, checklist, generate, publish, sync + +# Group by domain: +# Display operations: display, publish +# Validation operations: validate, checklist +# Generation operations: generate, sync +``` + +**Step 2: Create New Modules** + +```python +# modules/standards_display.py (150 lines) +def handle_command(command: str, args: List[str]) -> bool: + if command in ["display", "publish"]: + # Display logic + return True + return False + +# modules/standards_validate.py (150 lines) +def handle_command(command: str, args: List[str]) -> bool: + if command in ["validate", "checklist"]: + # Validation logic + return True + return False + +# modules/standards_generate.py (150 lines) +def handle_command(command: str, args: List[str]) -> bool: + if command in ["generate", "sync"]: + # Generation logic + return True + return False +``` + +**Step 3: Verify Auto-Discovery** + +Modules are auto-discovered by main entry point, no manual registration needed: + +```bash +# Both modules automatically discovered +python3 branch.py standards display +python3 branch.py standards validate +``` + +### When NOT to Split + +**1. Module Under 400 Lines** +If file is under 400 lines and handles related operations, keep together. + +**2. Commands Are Tightly Coupled** +If commands share significant workflow steps, splitting creates duplication. + +**3. Single Responsibility** +If module already has one clear domain, don't split arbitrarily. + +--- + +## Module Testing Requirements + +### Integration Tests: Test Full Workflows + +Modules orchestrate workflows, so test the complete operation: + +```python +# tests/test_standards_module.py +import pytest +from seed.apps.modules.cli_standard import handle_command, print_standard + +def test_handle_command_cli(): + """Test cli command routing""" + result = handle_command("cli", []) + assert result == True + +def test_handle_command_unknown(): + """Test unknown command rejection""" + result = handle_command("unknown", []) + assert result == False + +def test_print_standard_executes(): + """Test standard display workflow""" + # Should not raise exception + print_standard() +``` + +### Mock Handler Calls for Unit Tests + +Module logic can be tested without executing handlers: + +```python +# tests/test_branch_module.py +from unittest.mock import patch, MagicMock +from my_branch.apps.modules.branch_ops import create_branch + +def test_create_branch_validates_input(): + """Test validation step in workflow""" + with patch('my_branch.apps.handlers.validation.validate_branch_name') as mock_validate: + mock_validate.return_value = False + + result = create_branch("invalid-name") + + assert result == False + mock_validate.assert_called_once_with("invalid-name") + +def test_create_branch_creates_structure(): + """Test creation step in workflow""" + with patch('my_branch.apps.handlers.validation.validate_branch_name') as mock_validate: + with patch('my_branch.apps.handlers.operations.create_branch_structure') as mock_create: + mock_validate.return_value = True + mock_create.return_value = MagicMock(success=True) + + result = create_branch("valid_name") + + assert result == True + mock_create.assert_called_once_with("valid_name") +``` + +### Test Command Routing + +Verify commands are routed to correct functions: + +```python +# tests/test_routing.py +def test_handle_command_routes_correctly(): + """Test command routing to functions""" + with patch('module.print_standard') as mock_print: + result = handle_command("cli", []) + + assert result == True + mock_print.assert_called_once() + +def test_handle_command_returns_false_for_unknown(): + """Test unknown commands return False""" + result = handle_command("not_a_command", []) + assert result == False +``` + +### Test Argument Parsing + +If module parses arguments, test parsing logic: + +```python +# tests/test_args.py +def test_parse_create_args(): + """Test argument parsing for create command""" + args = ["new_branch", "standard"] + name, template = parse_create_args(args) + + assert name == "new_branch" + assert template == "standard" + +def test_parse_create_args_defaults(): + """Test default arguments""" + args = ["new_branch"] + name, template = parse_create_args(args) + + assert name == "new_branch" + assert template == "basic" # default +``` + +### Test Error Handling Paths + +Verify error conditions are handled correctly: + +```python +# tests/test_error_paths.py +def test_create_branch_handles_validation_failure(): + """Test workflow stops on validation failure""" + with patch('handlers.validate_branch_name') as mock_validate: + mock_validate.return_value = False + + result = create_branch("bad-name") + + assert result == False + +def test_create_branch_handles_creation_failure(): + """Test workflow handles creation errors""" + with patch('handlers.validate_branch_name') as mock_validate: + with patch('handlers.create_branch_structure') as mock_create: + mock_validate.return_value = True + mock_create.return_value = MagicMock(success=False, reason="Permission denied") + + result = create_branch("good_name") + + assert result == False +``` + +### Test Decorator Integration + +If using error handling decorators, test they work: + +```python +# tests/test_decorators.py +from cli.apps.modules import track_operation + +def test_track_operation_success(): + """Test decorator handles success""" + @track_operation + def test_operation(): + return True + + result = test_operation() + assert result.success == True + +def test_track_operation_exception(): + """Test decorator catches exceptions""" + @track_operation + def test_operation(): + raise FileNotFoundError("Test error") + + result = test_operation() + assert result.success == False + assert "Test error" in result.reason +``` + +### Testing Best Practices + +1. **Test workflows, not implementation** - Test that steps execute in order, not how handlers work +2. **Mock external dependencies** - Don't require file system, network, or other branches +3. **Test error paths** - Verify graceful handling of failures +4. **Test edge cases** - Empty args, invalid input, missing files +5. **Integration over unit** - Modules orchestrate, so integration tests are primary +6. **Fast tests** - Mock slow operations (file I/O, network calls) + +--- + +## Reference Examples + +**Simple module (135 lines):** `/home/aipass/seed/apps/modules/cli_standard.py` +- Single workflow (display standard) +- Conditional branching (offer demo) +- Service integration (CLI + JSON handler) + +**Complex module (283 lines):** `/home/aipass/seed/apps/modules/test_cli_errors.py` +- Multiple example workflows +- Decorator demonstrations +- Service integration examples +- Display integration + +**Showroom module (152 lines):** `/home/aipass/seed/apps/modules/create_thing.py` +- Documents module patterns +- Shows orchestration flow +- Demonstrates good practices + +**Service module (184 lines):** `/home/aipass/aipass_core/cli/apps/modules/display.py` +- Public API wrapper +- Thin orchestration over handlers +- Multiple function exports + +--- + +## TODO + +- [x] Module responsibilities detailed +- [x] File size expectations (300-700 lines typical) +- [x] Orchestration patterns +- [x] When to split modules +- [x] Module testing requirements +- [ ] Performance considerations for large batch operations +- [ ] Async/parallel orchestration patterns +- [ ] Module versioning and compatibility diff --git a/src/aipass/seedgo/docs/aipass_code_standards/naming.md b/src/aipass/seedgo/docs/aipass_code_standards/naming.md new file mode 100644 index 00000000..85b93c73 --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/naming.md @@ -0,0 +1,274 @@ +# Naming Conventions +**Status:** Draft v2 (Truth-checked against codebase) +**Date:** 2025-11-13 + +--- + +## Core Principle: Path = Context, Name = Action + +**Bad:** `cortex/apps/handlers/branch/cortex_branch_file_ops.py` +**Good:** `cortex/apps/handlers/branch/file_ops.py` + +**WHY:** The path already tells you it's Cortex → apps → handlers → branch operations. Adding "cortex_branch_" repeats information you already have. + +**Result:** Clean, scannable names. No lies when code moves. Easier imports. + +**REALITY CHECK:** This principle is aspirational. Current codebase has violations (e.g., `json_ops.py`, `json_handler.py` in json/ directory). New code should follow the principle; legacy code being migrated gradually. + +--- + +## What Problems Does Consistent Naming Solve? + +### 1. The Navigation Problem + +Without consistency, finding functionality becomes search: +- "Where is JSON handler? Maybe `json_ops.py`? Or `cortex_json.py`? Or `json_operations.py`?" +- Every branch uses different names +- Agents and humans waste time exploring instead of executing + +**Solution:** Standardized locations = predictable navigation +- Need JSON operations? Always `handlers/json/ops.py` +- Need error decorators? Always `handlers/error/decorators.py` +- No guessing. Direct access. + +### 2. The Comparison Problem + +**Without consistency:** +```bash +# Can't compare - different names, different locations +cortex/cortex_json_handler.py +flow/json_operations.py +prax/handlers/json_ops.py +``` + +**With consistency:** +```bash +# Easy comparison - same name, same location +cat cortex/apps/handlers/json/ops.py +cat flow/apps/handlers/json/ops.py +cat prax/apps/handlers/json/ops.py +``` + +**WHY this matters:** Comparison reveals what's common vs branch-specific. You can't standardize what you can't compare. + +### 3. The Marketplace Problem + +**Without consistency:** +``` +Branch A needs: json operations +Marketplace has: 7 different JSON handlers, different APIs +Result: Integration nightmare, manual adaptation +``` + +**With consistency:** +``` +Branch A needs: handlers/json/ops.py +Marketplace has: handlers/json/ops.py v1.2 +Result: Drop in, works immediately +``` + +--- + +## Why No Redundant Prefixes? + +### The Redundancy Cascade + +`cortex/apps/handlers/json/cortex_json_ops.py` + +**What breaks:** +1. **Length explosion:** 50+ character filenames +2. **Import ugliness:** `from cortex.apps.handlers.json.cortex_json_ops import CortexJsonOps` +3. **Refactoring nightmare:** Move to different directory? Prefix now lies +4. **Search pollution:** Grep for "cortex" returns every file +5. **Visual scanning:** Can't quickly scan directory listings + +**Principle:** Information should exist in exactly ONE place. Path tells you context, filename tells you action. + +--- + +## Standard Verbs: The Shared Language + +Same operation should have same name everywhere: + +**Core operations (verified in codebase):** +- `create` - Create new resource (e.g., `create_thing.py`) +- `ops` - General operations (e.g., `ops.py` in domain handlers) +- `load` - Load configuration/data (e.g., `load_config.py`) +- `save` - Save data (e.g., `save.py` in json handlers) +- `initialize` - Setup/initialization (e.g., `initialize.py`) + +**Transformation/Formatting:** +- `formatters` - Transform/format data (e.g., `formatters.py` in error) +- `decorators` - Function decorators (e.g., `decorators.py` in error) +- `logger` - Logging operations (e.g., `logger.py`) + +**Handler patterns:** +- `prompts` - User interaction handlers (e.g., `prompts.py` in cli) +- `content` - Content providers (e.g., `cli_content.py`, `naming_content.py`) + +**WHY standardize verbs:** +- Grep works: Search for "load" finds all loading operations +- Mental model: See `load_config.py` → instantly know what it does +- API consistency: All "load" operations follow similar patterns +- Cross-branch comparison: Same name = same purpose across all branches + +--- + +## Examples: Good vs Bad + +**Good (from real codebase):** +``` +cli/apps/handlers/error/decorators.py # Path: error domain, name: what it does +cli/apps/handlers/error/formatters.py # Path: error domain, name: what it does +prax/apps/handlers/config/load_config.py # Path: config domain, name: action +seed/apps/handlers/domain1/ops.py # Path: domain1, name: operations +``` + +**Bad (real violations):** +``` +prax/apps/handlers/json/json_ops.py # Redundant "json_" prefix +modules/plan_manager_module.py # Redundant "module" suffix (hypothetical) +``` + +**Note:** `json_handler.py` is documented as a standardized exception (see Handler Naming Exceptions section below). + +--- + +## Handler Naming by Domain + +**Pattern:** `handlers//.py` + +**Real Examples from aipass_core/cli:** +``` +cli/apps/handlers/ +└── error/ + ├── decorators.py # Error handling decorators + ├── formatters.py # Error message formatting + ├── logger.py # Error logging + └── result_types.py # Result type definitions +``` + +**Real Examples from aipass_core/prax:** +``` +prax/apps/handlers/ +├── config/ +│ ├── load_config.py # Config loading +│ └── load_ignore_patterns.py # Ignore pattern loading +├── json/ +│ ├── initialize.py # JSON initialization +│ ├── load.py # JSON loading +│ ├── save.py # JSON saving +│ └── log.py # JSON logging +└── cli/ + └── prompts.py # CLI prompt handlers +``` + +**Real Examples from seed:** +``` +seed/apps/handlers/ +├── domain1/ +│ └── ops.py # Domain operations (showroom) +├── standards/ +│ ├── cli_content.py # CLI standards content +│ └── naming_content.py # Naming standards content +└── json/ + └── json_handler.py # JSON operations (standardized exception) +``` + +--- + +## Handler Naming Exceptions + +### `json_handler.py` - Standardized Exception + +`json_handler.py` is a documented exception to the "no redundant prefixes" rule. This file exists across 8+ branches with an identical or near-identical API, making it a de facto standard in the ecosystem. Renaming it to `ops.py`, `handler.py`, or other variants would break established patterns and consumer code depending on this specific name. The redundant prefix is intentional here: it serves as a standardized identifier that marks this as THE canonical JSON handler implementation across the AIPass ecosystem. This exception demonstrates that standardization sometimes requires preserving a slightly non-ideal name rather than breaking existing integrations. + +--- + +## Why This Enables Speed at Scale + +### Zero-Cost Navigation +**Agent workflow:** +``` +Task: Update JSON operations in Flow +Path: flow/apps/handlers/json/ops.py +Status: FOUND (0 searches required) +``` + +**Without consistency:** +``` +Task: Update JSON operations in Flow +Attempt 1: Search for "json"... 47 results +Attempt 2: Search in handlers/... 12 files +Attempt 3: Read each to find right one +Status: FOUND (3 searches, 5 file reads) +``` + +**Scale impact:** 20 branches × 50 operations = 1000 handlers +- Consistent: Direct navigation to any handler +- Inconsistent: Search required for every access + +### Pattern Emergence + +Standardization happens naturally when files align: + +1. Each branch implements `handlers/json/ops.py` for their needs +2. Compare all `handlers/json/ops.py` files → common patterns visible +3. Extract common patterns → create standard handler v1.0 +4. Freeze and reuse → no reinvention needed + +**Critical:** This ONLY works with consistent naming. Different names = patterns invisible. + +### Learning Transfer + +**With consistency:** +``` +Day 1: Learn Cortex structure +Day 2: Work on Flow (same structure, instant productivity) +Day 3: Work on PRAX (same structure, instant productivity) +``` + +**Without consistency:** +``` +Day 1: Learn Cortex structure +Day 2: Learn Flow structure (different pattern, slower) +Day 3: Learn PRAX structure (another pattern, still slower) +``` + +--- + +## What Breaks with Inconsistent Naming? + +1. **Agent assumptions fail** - AI builds mental model ("JSON is always in handlers/json/ops.py") → one branch violates → agent fails +2. **Comparison tools break** - `diff cortex/.../ops.py flow/.../ops.py` only works if files align +3. **Search becomes ambiguous** - Every search requires filtering, every filter requires domain knowledge +4. **Refactoring becomes expensive** - Move file with prefixed name? Now name lies → rename → update imports → test everything +5. **Marketplace fragments** - Every variant needs own entry, integration guides, version tracking + +--- + +## The Speed Equation + +**Without consistency:** +- Navigation = Search (O(n) complexity) +- Comparison = Manual mapping (human labor) +- Learning = Per-branch overhead (20 branches = 20 learning curves) +- Standardization = Nearly impossible (patterns hidden) + +**With consistency:** +- Navigation = Direct access (O(1) complexity) +- Comparison = Automated tools (machine labor) +- Learning = One-time investment (20 branches = 1 curve) +- Standardization = Natural emergence (patterns obvious) + +--- + +## Summary + +1. **Path provides context** - Don't encode directory structure in filenames +2. **Short names win** - Less typing, easier scanning, cleaner imports +3. **Comparison enables standardization** - Can't standardize what you can't compare +4. **Standard verbs = shared language** - Same operation, same name, everywhere +5. **Consistency compounds** - Benefits multiply across branches and time + +**The meta-lesson:** Naming consistency isn't pedantry—it's the prerequisite for emergent standardization at scale. diff --git a/src/aipass/seedgo/docs/aipass_code_standards/permission_flags.md b/src/aipass/seedgo/docs/aipass_code_standards/permission_flags.md new file mode 100644 index 00000000..8c2faee1 --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/permission_flags.md @@ -0,0 +1,71 @@ +# Permission Flags Standard + +**Standard:** PERMISSION_FLAGS +**Created:** 2026-02-26 +**Version:** 1.0.0 + +--- + +## Purpose + +Enforce a single, approved permission bypass pattern across all AIPass code. The only acceptable permission flag is `--permission-mode bypassPermissions`. All other bypass patterns are prohibited. + +## The Rules + +### APPROVED + +1. **`--permission-mode bypassPermissions`** — The AIPass standard for autonomous agent execution + +### PROHIBITED + +1. **`--dangerously-skip-permissions`** — Deprecated Claude CLI flag, bypasses ALL safety checks +2. **`--skip-permissions`** — Non-standard bypass +3. **`--no-permissions`** — Non-standard bypass +4. **`--allow-dangerously-skip-permissions`** — Enables the dangerous flag + +## Examples + +### BAD + +```python +# WRONG: Dangerous skip flag — bypasses ALL safety checks +claude_cmd = f"{CLAUDE_BIN} --dangerously-skip-permissions" + +# WRONG: Non-standard bypass +subprocess.run(['claude', '--skip-permissions']) + +# WRONG: Enabling dangerous flag +cmd = ['claude', '--allow-dangerously-skip-permissions'] +``` + +### GOOD + +```python +# CORRECT: AIPass standard permission flag +subprocess.run(['claude', '--permission-mode', 'bypassPermissions']) + +# CORRECT: In command list construction +cmd = [ + CLAUDE_BIN, + '--permission-mode', 'bypassPermissions', + '-p', prompt +] +``` + +## Why This Matters + +`--dangerously-skip-permissions` is a deprecated Claude CLI flag that bypasses ALL permission checks without any granularity. It provides no integration with AIPass's permission system and creates inconsistency across the codebase. + +The AIPass standard `--permission-mode bypassPermissions` provides: +- Controlled permission bypass that integrates with the permission system +- Consistent flag usage across all branches and dispatch mechanisms +- A single pattern to audit and enforce + +## Checker + +**File:** `/home/aipass/seed/apps/handlers/standards/permission_flags_check.py` + +Checks: +1. No `--dangerously-skip-permissions` usage in code (comments/docstrings excluded) +2. No `--skip-permissions` or `--no-permissions` variants +3. Files without any permission flag references are automatically passed diff --git a/src/aipass/seedgo/docs/aipass_code_standards/readme.md b/src/aipass/seedgo/docs/aipass_code_standards/readme.md new file mode 100644 index 00000000..cceae5a2 --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/readme.md @@ -0,0 +1,171 @@ +# README Standards +**Status:** Active v1.0 +**Date:** 2026-02-21 + +--- + +## What This Covers + +Standards for branch README.md files. Every branch must have a README that stays accurate without manual effort. Auto-generated sections update via Seed audit integration. Manual sections remain human-written. + +--- + +## README Required + +Every branch root must have a `README.md` file. Without one, the branch has no human-readable documentation of its current state. + +--- + +## Canonical Section Order + +READMEs should follow this structure: + +1. **Identity Header** — Name, purpose, location, profile +2. **Overview** — What I Do / What I Don't Do / How I Work +3. **Architecture** — Pattern, structure, orchestrator +4. **Directory Structure** — Auto-generated tree +5. **Commands** — Auto-generated from `--help` +6. **Modules** — Auto-generated from `apps/modules/` +7. **Key Capabilities** — Manual +8. **Integration Points** — Manual +9. **Memory System** — Files and persistence +10. **Last Updated** — Auto-generated timestamp + +Not every branch needs every section. Omit sections that don't apply (e.g., a branch with no CLI commands skips Commands). + +--- + +## Auto-Generated Markers + +Use HTML comment markers for auto-populated sections: + +```markdown + +``` +apps/ +├── branch.py +├── modules/ +│ └── operations.py +└── handlers/ + └── ops.py +``` + +``` + +**Supported markers:** + +| Marker | Content | Source | +|--------|---------|--------| +| `AUTO:TREE` | Directory structure | Filesystem scan | +| `AUTO:MODULES` | Module list with descriptions | `apps/modules/*.py` docstrings | +| `AUTO:COMMANDS` | CLI commands and usage | `--help` output | +| `AUTO:HEADER` | Identity block | `.id.json` fields | +| `AUTO:LAST_UPDATED` | Timestamp | Most recent file modification | + +**Rules:** +- Opening marker: `` +- Closing marker: `` +- Content between markers is overwritten on regeneration +- Content outside markers is never touched + +--- + +## Freshness Rules + +1. **Last Updated** — README's "Last Updated" date should be within 7 days of most recent code change +2. **Directory Tree** — Tree in README must match actual filesystem +3. **Module List** — All files in `apps/modules/` should be listed + +**WHY:** A README that says one thing while the code says another is worse than no README at all. + +--- + +## Manual Sections + +These sections require human judgment and are NOT auto-generated: + +- **Purpose / Overview** — What the branch does and why it exists +- **Architecture** — Design decisions and patterns +- **Key Capabilities** — What makes this branch valuable +- **Integration Points** — How this branch connects to others + +Auto-generation handles facts (file lists, timestamps). Humans handle meaning. + +--- + +## Enforcement + +| Tool | Purpose | Location | +|------|---------|----------| +| `readme_check.py` | 6 automated checks, score >= 75% to pass | `seed/apps/handlers/standards/` | +| `readme_generator.py` | Auto-populates TREE, MODULES, COMMANDS, HEADER, LAST_UPDATED | `seed/apps/handlers/standards/` | +| `seed readme update @branch` | On-demand regeneration (Phase 4, coming soon) | CLI | + +**Checks performed by `readme_check.py`:** +1. README.md exists +2. Contains auto-generated markers +3. Last Updated is within 7 days +4. Directory tree matches filesystem +5. Module list is complete +6. Required sections present + +--- + +## What Goes in README vs Elsewhere + +| Content | Location | Why | +|---------|----------|-----| +| Current state | README.md | Human-readable snapshot | +| Future plans | FPLAN files (flow) | Not current state | +| Past work | .local.json sessions | History, not docs | +| Patterns learned | .observations.json | AI context, not docs | +| Technical deep-dives | docs/ directory | Too detailed for README | + +--- + +## Examples + +**Good:** Auto-generated tree with `` markers that stays current +```markdown + +``` +apps/ +├── seed.py +├── modules/ +│ ├── imports_standard.py +│ └── readme_standard.py +└── handlers/ + └── standards/ + ├── readme_check.py + └── readme_generator.py +``` + +``` + +**Bad:** Manually maintained tree that drifts from reality within a week +```markdown +## Directory Structure +``` +apps/ +├── seed.py +├── modules/ +│ └── old_module.py # deleted 3 weeks ago +└── handlers/ + └── missing_new_handler.py # never added +``` +``` + +--- + +## Quick Reference + +| Rule | Requirement | +|------|-------------| +| README.md exists | Required for every branch | +| Section order | Follow canonical order | +| Auto markers | Use `` / `` | +| Freshness | Last Updated within 7 days | +| Tree accuracy | Must match filesystem | +| Module completeness | All `apps/modules/` files listed | +| Manual sections | Human-written, never auto-generated | +| Pass threshold | Score >= 75% on `readme_check.py` | diff --git a/src/aipass/seedgo/docs/aipass_code_standards/testing.md b/src/aipass/seedgo/docs/aipass_code_standards/testing.md new file mode 100644 index 00000000..b9f51228 --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/testing.md @@ -0,0 +1,340 @@ +# Testing Standards +**Status:** Draft v1 - Current manual process documented +**Date:** 2025-11-12 + +--- + +## Current State: Manual Testing (Effective for Rapid Iteration) + +**Reality:** AIPass is a custom framework in active evolution. System changes weekly. Building extensive test infrastructure now = updating tests constantly instead of building features. + +**Current approach:** Manual testing with JSON/log verification works effectively for rapid iteration phase. + +**Future:** pytest framework will be introduced once branches stabilize. + +--- + +## The 90% Build Process + +**How we build and test:** + +### 1. Planning Phase (Upfront Investment) +- Issue plan through Flow (master plan or default plan depending on scope) +- Spend time getting structure right before coding +- Define what we're building and how it fits together + +### 2. Build to 90% (AI-Led, Internal Verification) +- AI builds structure and implementation +- **Internal verification tests as we go:** + - Does the module turn on? + - Do commands work? + - Basic functionality confirmed? +- Human mostly observes, provides input if things go astray +- Focus on getting structure and pieces in place + +**Linux advantage:** Same environment (AI and human both on Linux) = outputs match = internal tests are reliable. Windows had issues with this, Linux doesn't. + +### 3. 90% Threshold (Human Review Phase) +- Human gets actively involved +- Reviews structure and implementation +- Asks questions about concerns +- Performs feature tests (what module is supposed to do) +- Identifies bugs and missing error handling + +### 4. Debug Cycle (Error Handling First, Then Fixes) + +**Critical pattern: Fix error handling BEFORE fixing bugs** + +**Example scenario:** +``` +Bug: API call not working, but console says "Success" +No error output, but logs show API never executed +Output is lying + +Process: +1. Fix error handling FIRST - make errors tell the truth +2. THEN fix the actual bug (why API isn't executing) +3. See clean pass with honest outputs +4. Move to next feature +``` + +**Why this order:** +- Can't debug effectively if errors lie +- Truth in outputs = faster debugging +- Honest error messages = system teaches itself what's wrong + +### 5. Iterate Until Acceptable +- Test different features +- Continue debug cycle (handle errors → fix bugs → verify) +- Reach acceptable standard (basic or advanced depending on module) +- Move on + +--- + +## Why Manual Testing Works Right Now + +**Advantages:** +- **Fast iteration** - No test maintenance overhead +- **Flexible** - System can change tomorrow without breaking test suite +- **JSON/log infrastructure** - Acts as verification layer + - Check config.json → see settings + - Check data.json → see state + - Check log.json → see operations history + - Check Prax logs → detailed debugging +- **Linux environment match** - AI tests = human tests (same outputs) +- **Effective debugging** - Error-first approach catches issues early + +**Tradeoffs:** +- Manual effort required at 90% stage +- No automated regression testing (yet) +- Relies on human review for final verification + +**Acceptable because:** System is evolving rapidly. Better to build fast and test manually than build slow and maintain brittle tests. + +--- + +## Future: pytest Framework + +**Infrastructure in place:** +- `pytest.ini` at root - Configuration for test discovery and markers +- `/home/aipass/tests/` - Root test directory with conftest.py +- `/home/aipass/aipass_core/tests/` - Core system tests +- Branch-specific test directories (API, Prax, CLI, etc.) + +**Already operational in some branches:** +- API branch: 4 test files (test_api_system.py, test_openrouter_key.py, etc.) +- Prax branch: test_log_rotation.py validates rotation behavior +- Seed branch: test_cli_errors.py demonstrates error handling patterns + +**When to expand testing:** +- Once modules and branches stabilize +- When system changes slow down (monthly, not weekly) +- When maintenance cost < value of automation + +**Why pytest:** +- Standard Python testing framework +- Already configured with pytest.ini +- Infrastructure exists, ready for expansion +- Some branches already have working tests + +**Current selective approach:** +- Test critical/stable components (API, Prax log rotation) +- Skip testing rapidly changing features +- Manual testing for experimental work +- Automated tests where they add value without maintenance burden + +--- + +## Error Handling Philosophy + +**Errors must tell the truth** - foundational to testing effectiveness + +**Good error handling:** +```python +try: + result = api_call() + if not result: + logger.error("API call failed - no response") + return {"success": False, "error": "API returned no data"} +except Exception as e: + logger.error(f"API call exception: {e}", exc_info=True) + return {"success": False, "error": str(e)} +``` + +**Bad error handling:** +```python +try: + result = api_call() + return {"success": True} # LIES - didn't check if result valid +except: + pass # Silent failure - no truth +``` + +**Testing relies on honest errors:** +- If errors lie, testing is impossible +- Fix error handling first = testing becomes possible +- Then fix bugs with confident verification + +--- + +## JSON/Log Infrastructure as Testing Layer + +**Three-JSON pattern supports testing:** + +### Config Verification +```bash +# Check if settings are correct +cat module_name_config.json +# See API keys, limits, feature toggles +``` + +### State Verification +```bash +# Check current state +cat module_name_data.json +# See metrics, counts, current status +``` + +### Operations Verification +```bash +# Check what actually happened +cat module_name_log.json +# See recent operations and results +``` + +### Detailed Debugging +```bash +# Prax provides file-based logging, not real-time watching +# Check system logs directory for detailed output +ls -la ~/system_logs/ +# Read specific module logs +cat ~/system_logs/module_name.log +``` + +**This infrastructure = verification layer without formal tests** + +--- + +## Testing Workflow Example + +**Building a new branch creation module:** + +1. **Plan** - Define structure, features, workflow (Flow plan) + +2. **Build to 90%** - AI implements: + - Module structure + - Handler functions + - Config/data/log JSONs + - Internal verification: "Does `create_branch test_branch` work?" + +3. **Review at 90%** - Human tests: + - Create branch with various names + - Check if files copied correctly + - Verify registry updated + - Try edge cases (existing branch, invalid name) + +4. **Find bug** - Branch created but registry not updated + - **First:** Check error handling - is error logged? Is return value honest? + - Add error handling if missing + - **Then:** Fix bug - why isn't registry updating? + - Verify with clean pass + +5. **Iterate** - Test more features: + - Template copying + - Placeholder replacement + - Memory file handling + - Backup on conflicts + +6. **Acceptable** - All major features work, errors are honest, ready to use + +--- + +## Current Testing Checklist + +**For any new module/feature:** + +- [ ] Does it turn on without errors? +- [ ] Do basic commands work? +- [ ] Are errors handled and logged? +- [ ] Do outputs tell the truth? +- [ ] Check config.json - settings correct? +- [ ] Check data.json - state tracking working? +- [ ] Check log.json - operations recorded? +- [ ] Test edge cases (invalid input, missing files, etc.) +- [ ] Check Prax logs in ~/system_logs/ for detailed debugging info +- [ ] Manual feature tests at 90% stage + +--- + +## When to Test What + +**During development (AI internal verification):** +- Module starts without errors +- Basic commands execute +- Expected output appears + +**At 90% stage (human testing):** +- Feature functionality (does it do what it's supposed to?) +- Edge cases (what breaks it?) +- Error handling (are errors honest?) +- Integration (does it work with other modules?) + +**Before considering "done":** +- Clean passes on major features +- Errors tell the truth (no silent failures) +- JSON logs show operations correctly +- Acceptable standard reached (basic or advanced) + +--- + +## Summary + +**Current approach:** Manual testing with JSON/log infrastructure + +**Why it works:** +- Fast iteration without test maintenance +- Linux environment = reliable verification +- Error-first debugging = effective bug fixing +- JSON/log system = verification layer + +**Build process:** Plan → Build to 90% → Review/test → Debug (errors first, then bugs) → Iterate → Acceptable + +**Future:** pytest framework when system stabilizes + +**Philosophy:** Build fast, verify as you go, handle errors honestly, iterate rapidly. Test infrastructure comes after stability. + +--- + +## Pytest Test Structure + +**Current implementation:** +``` +/home/aipass/ + pytest.ini # Test configuration + tests/ # Root test directory + conftest.py # Shared fixtures + aipass_core/ + tests/conftest.py # Core system fixtures + api/tests/ # API tests (4 files operational) + test_api_system.py + test_openrouter_key.py + test_free_models_quick.py + test_paid_model.py + prax/tests/ # Prax tests + test_log_rotation.py + cli/tests/ # CLI tests (infrastructure ready) + seed/ + tests/conftest.py + apps/modules/test_cli_errors.py # Demo module +``` + +**Running tests:** +```bash +# Run all tests +pytest + +# Run specific branch tests +pytest aipass_core/api/tests/ + +# Run with markers +pytest -m unit +pytest -m integration +pytest -m slow +``` + +**Test demonstration module:** +- `/home/aipass/seed/apps/modules/test_cli_errors.py` - Shows error handling patterns +- Not a pytest test, but demonstrates testing concepts +- Run directly: `python3 /home/aipass/seed/apps/modules/test_cli_errors.py` + +--- + +## Comments + +#@comments:2025-11-13:claude: Pytest infrastructure exists and operational in API/Prax branches. Selective testing approach: automate stable components, manual testing for rapid development. + +#@comments:2025-11-13:claude: Prax doesn't have real-time "watcher" command for logs - uses file-based logging in ~/system_logs/. Updated documentation to reflect actual capabilities. + +#@comments:2025-11-13:claude: Error-first debugging approach is critical - maybe this should be emphasized in error_handling.md when we fill that section? + +#@comments:2025-11-13:claude: "90% threshold" is interesting pattern - not 100% perfection, but "acceptable standard" (basic or advanced). Reflects pragmatic development philosophy. diff --git a/src/aipass/seedgo/docs/aipass_code_standards/trigger.md b/src/aipass/seedgo/docs/aipass_code_standards/trigger.md new file mode 100644 index 00000000..e52d4f82 --- /dev/null +++ b/src/aipass/seedgo/docs/aipass_code_standards/trigger.md @@ -0,0 +1,377 @@ +# Trigger Standards +**Status:** Draft v1 +**Date:** 2025-12-04 + +--- + +## The Event Bus Pattern + +AIPass uses a centralized event system to replace scattered cross-branch function calls: + +``` +Before (hardcoded): + flow/close_plan.py → directly calls → dashboard/update_local() + flow/close_plan.py → directly calls → mbank/process_closed_plans() + prax/logger.py → directly calls → memory_bank/check_and_rollover() + +After (event-driven): + flow/close_plan.py → trigger.fire('plan_closed') → handlers respond + prax/logger.py → trigger.fire('startup') → handlers respond +``` + +**WHY:** Without events, every cross-branch integration is a hardcoded import. Add a new reaction? Edit the source file. Change behavior? Find all callers. Remove a feature? Hunt through imports. Events decouple action from reaction. + +**Result:** Branches fire events for their lifecycle transitions. Trigger owns all cross-branch reaction logic. New handlers plug in without touching source branches. + +--- + +## Core API + +```python +from trigger import trigger + +# Fire an event (branches do this) +trigger.fire('event_name', **data) + +# Register a handler (only in trigger/apps/handlers/events/) +trigger.on('event_name', handler_function) + +# Check what's registered +trigger.status() # Returns {'startup': 1, 'plan_closed': 2, ...} +``` + +--- + +## Import Patterns + +### Standard Import (Most Modules) +```python +from trigger import trigger + +def some_function(): + trigger.fire('event_name', key=value) +``` + +### Lazy Import (Avoid Circular Dependencies) +```python +# Use when importing at module level causes circular import +_trigger = None +_trigger_loaded = False + +def _ensure_trigger(): + global _trigger, _trigger_loaded + if not _trigger_loaded: + _trigger_loaded = True + try: + from trigger.apps.modules.core import trigger as t + _trigger = t + except ImportError: + pass # Trigger not available, silent fallback + +def fire_event(name, **data): + _ensure_trigger() + if _trigger: + _trigger.fire(name, **data) +``` + +**Current Lazy Loaders:** +- `prax/apps/modules/logger.py` - Fires `startup` +- `cli/apps/modules/display.py` - Fires `cli_header_displayed` + +--- + +## Event Naming Convention + +**Format:** `{scope}_{action}` or just `{action}` for system-wide events + +| Event Name | Scope | Meaning | +|------------|-------|---------| +| `startup` | system | First logger use, system initializing | +| `plan_created` | flow | New PLAN file created | +| `plan_closed` | flow | PLAN marked as closed | +| `memory_saved` | memory | Memory file updated | +| `backup_completed` | backup | Backup operation finished | +| `cli_header_displayed` | cli | Header printed to console | + +**Rules:** +- All lowercase +- Underscore-separated words +- Past tense for completed actions (`created`, `closed`, `saved`) +- Present tense for ongoing states (`displayed`, `running`) + +--- + +## Handler Requirements + +Handlers live in `/home/aipass/aipass_core/trigger/apps/handlers/events/` + +### Handler Interface +```python +def handle_{event_name}(**kwargs) -> None: + """ + Process event. Must be silent - no prints, no logger. + + Args: + **kwargs: Event data passed from fire() call + """ + # Do work silently + pass +``` + +### Critical Rules + +1. **NO LOGGER IMPORTS** + ```python + # FORBIDDEN - causes infinite recursion + from prax.apps.modules.logger import system_logger + + # Logger calls trigger → trigger calls handler → handler calls logger → loop + ``` + +2. **NO PRINT STATEMENTS** + ```python + # FORBIDDEN - handlers must be silent + print("Handling event...") + + # Events are logged by trigger.fire() in core.py automatically + ``` + +3. **SILENT FAILURE** + ```python + # CORRECT - catch and continue + try: + do_something() + except Exception: + pass # Silent - can't log, can't print + + # WRONG - re-raises or logs + except Exception as e: + logger.error(f"Failed: {e}") # NO! + ``` + +### Registering Handlers + +All handlers registered in `trigger/apps/handlers/events/registry.py`: + +```python +from trigger.apps.modules.core import trigger +from .startup import handle_startup +from .flow import handle_plan_created, handle_plan_closed + +def setup_handlers(): + """Wire all event handlers - called on first trigger.fire()""" + trigger.on('startup', handle_startup) + trigger.on('plan_created', handle_plan_created) + trigger.on('plan_closed', handle_plan_closed) +``` + +--- + +## When to Fire Events + +### DO Fire Events For: + +1. **Lifecycle Transitions** + - Startup/shutdown + - Plan create/close + - Backup start/complete + +2. **Cross-Branch Side Effects** + - Dashboard updates after plan changes + - Memory Bank rollover checks on startup + - Email notifications on errors + +3. **State Changes Other Branches Care About** + - Memory file saved (for rollover monitoring) + - Module discovered (for registry updates) + +### DON'T Fire Events For: + +1. **Internal Operations** + - Function calls within same module + - Handler-to-handler communication within same branch + +2. **High-Frequency Operations** + - Every log message + - Every file read + - Per-line processing + +3. **Simple Return Values** + - If caller needs the result, use function call not event + +--- + +## Replacing Hardcoded Patterns + +### Before: Direct Cross-Branch Calls +```python +# flow/close_plan.py - WRONG +from flow.apps.handlers.dashboard.update_local import update_dashboard_local +from flow.apps.handlers.mbank.process import process_closed_plans + +def close_plan(): + # ... close logic ... + update_dashboard_local() # Hardcoded + process_closed_plans() # Hardcoded +``` + +### After: Event-Driven +```python +# flow/close_plan.py - CORRECT +from trigger import trigger + +def close_plan(): + # ... close logic ... + trigger.fire('plan_closed', plan_number=num, subject=subj) + # Dashboard and mbank handlers respond automatically +``` + +```python +# trigger/apps/handlers/events/flow.py - Handlers +def handle_plan_closed(**kwargs): + """React to plan closure""" + from flow.apps.handlers.dashboard.update_local import update_dashboard_local + from flow.apps.handlers.mbank.process import process_closed_plans + + update_dashboard_local() + process_closed_plans() +``` + +--- + +## Bypass Configuration + +Some cross-branch handler imports are intentional in Trigger. Configure in `.seed/bypass.json`: + +```json +{ + "bypass": [ + { + "file": "apps/handlers/events/startup.py", + "standard": "encapsulation", + "lines": [38], + "reason": "Trigger's purpose is centralizing cross-branch calls. Memory Bank has no modules API." + } + ] +} +``` + +**Trigger is the ONE place cross-branch handler imports are acceptable** - it's literally the centralization point for these calls. + +--- + +## Design Principles + +1. **Auto-Initialization** + - Handlers register on first `fire()` call + - No setup required by calling branches + - Lazy loading prevents import-time issues + +2. **Recursion Guard** + - `_firing` flag prevents logger→trigger→logger loops + - If already firing, new fire() calls are ignored + +3. **Caller Introspection** + - `trigger.fire()` logs which branch fired the event + - Uses `inspect.stack()` to identify caller + - Example log: `[TRIGGER] prax fired: startup` + +4. **Graceful Degradation** + - If Trigger not available, imports fail silently + - Branches continue to work without events + - No hard dependencies on Trigger existing + +--- + +## Detected Pattern Categories (10) + +The trigger checker (`trigger_check.py v1.0.0`) detects these event-worthy patterns: + +### Function Definitions (Patterns 1-9) + +1. **FileSystemEventHandler Methods** + - `on_created`, `on_deleted`, `on_modified`, `on_moved` + - Watchdog event handlers that should fire events + +2. **Lifecycle Functions** + - `create_*`, `close_*`, `delete_*`, `restore_*` + - State transitions that other branches may care about + +3. **Messaging Functions** + - `deliver_*`, `send_*` + - Outbound communication that may need tracking + +4. **State Change Functions** + - `mark_as_*`, `archive_*` + - Status updates worth broadcasting + +5. **Registry Functions** + - `save_registry`, `ping_registry`, `sync_*registry` + - Registry mutations that affect system state + +6. **Central Functions** + - `update_central`, `write_central_*`, `push_to_central`, `aggregate_central` + - Central data updates that cascade to dashboards + +7. **Repair/Recovery Functions** + - `auto_close_*`, `recover_*`, `heal_*` + - Self-healing operations worth logging + +8. **Cleanup/Backup Functions** + - `cleanup_*`, `backup_*` + - Maintenance operations with system-wide impact + +9. **System Lifecycle Functions** + - `initialize_*_system`, `shutdown_*_system` + - System-level lifecycle events + +### Inline Operations (Pattern 10) + +10. **Filesystem Method Calls** + - `.unlink()` - File deletion inline + - `.rename()` - File move/rename inline + - These are NOT function definitions but method calls that modify filesystem + +**Note:** Pattern 10 catches inline operations that may be buried in code, not explicit function names. Even cleanup operations like `temp_file.unlink()` are detected - decide at review time whether to fire events or bypass. + +--- + +## Current Integration Status + +| Branch | Integration | Events | +|--------|-------------|--------| +| Prax | `trigger.fire('startup')` in logger.py | startup | +| CLI | `trigger.fire('cli_header_displayed')` in display.py | cli_header_displayed | +| Flow | JSON logging only | needs migration | +| Drone | No events | ready to adopt | +| Backup | No events | needs events | +| AI_Mail | Watchdog file watcher | partial | + +--- + +## Compliance Checklist + +For branches using Trigger: + +- [ ] Import pattern correct (`from trigger import trigger` or lazy-load) +- [ ] Events named correctly (lowercase, underscore, past tense) +- [ ] Handlers have no logger imports +- [ ] Handlers have no print statements +- [ ] Handlers registered in registry.py +- [ ] Cross-branch reactions moved from source to handlers + +For Trigger branch itself: + +- [ ] Handler import guard active (blocks external access) +- [ ] Recursion guard in fire() +- [ ] Caller introspection logging +- [ ] Bypass.json documents intentional encapsulation violations + +--- + +## Reference + +- **Trigger Core:** `/home/aipass/aipass_core/trigger/apps/modules/core.py` +- **Handler Registry:** `/home/aipass/aipass_core/trigger/apps/handlers/events/registry.py` +- **Event Handlers:** `/home/aipass/aipass_core/trigger/apps/handlers/events/*.py` +- **Standard:** `/home/aipass/seed/standards/CODE_STANDARDS/trigger.md` diff --git a/src/aipass/seedgo/flow.local.md b/src/aipass/seedgo/flow.local.md new file mode 100644 index 00000000..aa05fe91 --- /dev/null +++ b/src/aipass/seedgo/flow.local.md @@ -0,0 +1,15 @@ +# flow.local.md - SEEDGO +``` +Branch: /home/aipass/aipass_business/AIPass/src/aipass/seedgo +Created: 2026-03-05 +``` + +## Issues + +- + +--- + +## Todos + +- diff --git a/src/aipass/seedgo/pytest.ini b/src/aipass/seedgo/pytest.ini new file mode 100644 index 00000000..c3f21db6 --- /dev/null +++ b/src/aipass/seedgo/pytest.ini @@ -0,0 +1,21 @@ +[pytest] +# Test discovery paths +testpaths = tests + +# Test file patterns +python_files = test_*.py +python_functions = test_* +python_classes = Test* + +# Command-line options (always applied) +addopts = + -v # Verbose output + --tb=short # Short traceback format + --strict-markers # Raise error on unknown markers + -ra # Show summary of all test outcomes + +# Test markers (for categorizing tests) +markers = + unit: Unit tests + integration: Integration tests + slow: Tests that take significant time diff --git a/src/aipass/seedgo/tests/__init__.py b/src/aipass/seedgo/tests/__init__.py new file mode 100644 index 00000000..e02dd045 --- /dev/null +++ b/src/aipass/seedgo/tests/__init__.py @@ -0,0 +1 @@ +# Tests package for seedgo diff --git a/src/aipass/seedgo/tests/conftest.py b/src/aipass/seedgo/tests/conftest.py new file mode 100644 index 00000000..a87088fd --- /dev/null +++ b/src/aipass/seedgo/tests/conftest.py @@ -0,0 +1,43 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: tests/conftest.py +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/tests +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Shared pytest fixtures +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +"""Shared pytest fixtures for cortex tests""" +import pytest +import shutil +import tempfile +from pathlib import Path +from typing import Generator + + +@pytest.fixture +def temp_test_dir() -> Generator[Path, None, None]: + """Creates temporary directory for testing, cleans up after""" + test_dir = Path(tempfile.mkdtemp()) + yield test_dir + if test_dir.exists(): + shutil.rmtree(test_dir) + + +@pytest.fixture +def sample_test_data() -> dict: + """Provides sample test data + + Customize this fixture for your module's needs + """ + return { + "test_key": "test_value", + "sample_data": "example" + } diff --git a/src/aipass/seedgo/tools/verify_branch.py b/src/aipass/seedgo/tools/verify_branch.py new file mode 100644 index 00000000..4464af6d --- /dev/null +++ b/src/aipass/seedgo/tools/verify_branch.py @@ -0,0 +1,159 @@ +#!/home/aipass/.venv/bin/python3 +# -*- coding: utf-8 -*- + +# ===================AIPASS==================== +# META DATA HEADER +# Name: verify_branch.py - Branch Template Verification +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/modules +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Compare template vs branch +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +""" +Branch Template Verification Tool + +Compares template directory with created branch to identify: +- Files in template but missing in branch +- Files in branch but not in template +- Renamed files +""" + +import sys +import json +from pathlib import Path +from typing import Set, List, Tuple +from fnmatch import fnmatch + +# INFRASTRUCTURE IMPORT PATTERN +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) + +# Get template directory +TEMPLATE_DIR = AIPASS_ROOT / "cortex" / "templates" / "branch_template" + + +def load_ignore_patterns() -> Tuple[List[str], List[str]]: + """Load ignore patterns from .registry_ignore.json""" + ignore_file = TEMPLATE_DIR / ".registry_ignore.json" + + if not ignore_file.exists(): + return [], [] + + try: + with open(ignore_file, 'r', encoding='utf-8') as f: + data = json.load(f) + ignore_files = data.get("ignore_files", []) + ignore_patterns = data.get("ignore_patterns", []) + return ignore_files, ignore_patterns + except Exception as e: + print(f"Warning: Could not load .registry_ignore.json: {e}") + return [], [] + + +def should_exclude(path: Path, base_dir: Path, ignore_files: List[str], ignore_patterns: List[str]) -> bool: + """Check if path should be excluded based on ignore patterns""" + rel_path = path.relative_to(base_dir) + filename = path.name + path_str = str(rel_path) + + # Check exact filename matches + if filename in ignore_files: + return True + + # Check glob patterns + for pattern in ignore_patterns: + if fnmatch(filename, pattern): + return True + # Check if any parent directory matches + for part in rel_path.parts: + if fnmatch(part, pattern): + return True + + return False + + +def get_file_set(directory: Path, ignore_files: List[str], ignore_patterns: List[str]) -> Set[str]: + """Get set of all file paths in directory (relative)""" + files = set() + + for item in directory.rglob("*"): + if item.is_file() and not should_exclude(item, directory, ignore_files, ignore_patterns): + rel_path = str(item.relative_to(directory)) + files.add(rel_path) + + return files + + +def verify_branch(branch_dir: Path) -> Tuple[List[str], List[str], List[str]]: + """ + Compare template with branch + + Returns: + Tuple of (in_template_only, in_branch_only, in_both) + """ + # Load ignore patterns from .registry_ignore.json + ignore_files, ignore_patterns = load_ignore_patterns() + + template_files = get_file_set(TEMPLATE_DIR, ignore_files, ignore_patterns) + branch_files = get_file_set(branch_dir, ignore_files, ignore_patterns) + + in_template_only = sorted(template_files - branch_files) + in_branch_only = sorted(branch_files - template_files) + in_both = sorted(template_files & branch_files) + + return in_template_only, in_branch_only, in_both + + +def main(): + if len(sys.argv) < 2: + print("Usage: python3 verify_branch.py ") + print("Example: python3 verify_branch.py test_branch002") + sys.exit(1) + + branch_path = Path(sys.argv[1]) + if not branch_path.is_absolute(): + # Assume it's relative to cortex directory + branch_path = Path.cwd() / branch_path + + if not branch_path.exists(): + print(f"❌ ERROR: Branch directory not found: {branch_path}") + sys.exit(1) + + print(f"\n=== Branch Verification ===") + print(f"Template: {TEMPLATE_DIR}") + print(f"Branch: {branch_path}") + print() + + in_template_only, in_branch_only, in_both = verify_branch(branch_path) + + print(f"Files in both: {len(in_both)}") + print(f"Files in template only: {len(in_template_only)}") + print(f"Files in branch only: {len(in_branch_only)}") + print() + + if in_template_only: + print("❌ Missing from branch (expected from template):") + for file in in_template_only: + print(f" - {file}") + print() + + if in_branch_only: + print("✅ Additional files in branch (renamed or new):") + for file in in_branch_only: + print(f" + {file}") + print() + + if not in_template_only and not in_branch_only: + print("✅ Branch matches template perfectly") + + print("="*70) + + +if __name__ == "__main__": + main() diff --git a/src/aipass/trigger/.agent/.backup_ignore.json b/src/aipass/trigger/.agent/.backup_ignore.json new file mode 100644 index 00000000..ad552665 --- /dev/null +++ b/src/aipass/trigger/.agent/.backup_ignore.json @@ -0,0 +1,37 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Files and patterns to exclude when creating branch backups" + }, + "ignore_directories": [ + ".backup", + ".venv", + "venv", + "node_modules", + "__pycache__", + ".git", + ".cache", + ".pytest_cache", + ".mypy_cache", + "dist", + "build", + "*.egg-info", + "ai_mail.local", + "logs", + ".aipass", + ".archive", + ".claude", + "htmlcov" + ], + "ignore_patterns": [ + "*.pyc", + "*.pyo", + ".DS_Store", + "*.log", + "*.tmp", + "*.swp", + "*~", + "*.env", + "BRANCH_REGISTRY.json" + ] +} diff --git a/src/aipass/trigger/.agent/.migrations.json b/src/aipass/trigger/.agent/.migrations.json new file mode 100644 index 00000000..a33f4115 --- /dev/null +++ b/src/aipass/trigger/.agent/.migrations.json @@ -0,0 +1,49 @@ +{ + "metadata": { + "version": "1.0.0", + "description": "Template structural migrations for branch updates", + "last_updated": "2025-11-07", + "applies_to_versions": ["all"] + }, + "migrations": [ + { + "id": "m001", + "description": "Example: Migrate flat metadata to document_metadata structure", + "version_introduced": "1.0.0", + "applies_to_files": ["*.id.json"], + "operations": [ + { + "type": "key_rename", + "from": "metadata", + "to": "document_metadata" + }, + { + "type": "move_to_nested", + "source_keys": ["branch_name", "path", "profile"], + "target_parent": "branch_info" + }, + { + "type": "add_missing_keys", + "parent": "document_metadata", + "keys": { + "document_type": "branch_identity", + "schema_version": "1.0.0" + } + } + ] + } + ], + "options": { + "skip_if_target_exists": true, + "preserve_unknown_keys": true, + "recursive_application": false + }, + "notes": { + "usage": "This file defines structural transformation rules applied during branch updates", + "pattern_matching": "applies_to_files uses glob patterns (*.json, *.id.json, etc.)", + "operation_order": "Operations execute in order listed within each migration", + "skip_behavior": "Operations skip if already compliant (target exists = success)", + "supported_operations": ["key_rename", "move_to_nested", "add_missing_keys"], + "future_operations": ["split_key", "combine_keys", "delete_key", "transform_value"] + } +} diff --git a/src/aipass/trigger/.agent/.registry_ignore.json b/src/aipass/trigger/.agent/.registry_ignore.json new file mode 100644 index 00000000..a3bbaed7 --- /dev/null +++ b/src/aipass/trigger/.agent/.registry_ignore.json @@ -0,0 +1,43 @@ +{ + "metadata": { + "version": "1.1.0", + "description": "Files and patterns to exclude when updating branches from template", + "last_updated": "2025-11-09" + }, + "ignore_files": [ + ".template_registry.json", + ".registry_ignore.json" + ], + "ignore_patterns": [ + "__pycache__", + "*.pyc", + "#@comments.txt", + ".backup_*" + ], + "notes": { + "how_it_works": "Two types of exclusions during branch updates:", + "ignore_files": { + "description": "Exact filename matches (no wildcards)", + "purpose": "Template-internal management files that branches don't need", + "examples": [ + ".template_registry.json (template's file tracking list)", + ".registry_ignore.json (this config file)" + ] + }, + "ignore_patterns": { + "description": "Glob patterns - matches filenames AND directory names", + "purpose": "Exclude generated files, caches, and user content markers", + "examples": [ + "__pycache__ (Python cache directories)", + "*.pyc (Python compiled bytecode files)", + "#@comments.txt (user comment files)", + ".backup_* (timestamped backup files like .backup_20251109, NOT .backup directory)" + ], + "how_matching_works": [ + "Step 1: Check if filename matches pattern (e.g., file.pyc matches *.pyc)", + "Step 2: Check if any parent directory matches (e.g., files inside __pycache__/ dir)" + ] + }, + "what_gets_ignored": "These files never copy to branches during updates - they stay template-only" + } +} diff --git a/src/aipass/trigger/.agent/.template_registry.json b/src/aipass/trigger/.agent/.template_registry.json new file mode 100644 index 00000000..7190dfe3 --- /dev/null +++ b/src/aipass/trigger/.agent/.template_registry.json @@ -0,0 +1,184 @@ +{ + "metadata": { + "description": "Template registry for tracking files", + "generated": true + }, + "files": { + "f001": { + "path": ".aipass/aipass_local_prompt.md", + "name": "aipass_local_prompt.md", + "content_hash": "623927c451d34d39", + "has_branch_placeholder": false + }, + "f002": { + "path": ".claude/settings.local.json", + "name": "settings.local.json", + "content_hash": "6379c5be3fb714ac", + "has_branch_placeholder": false + }, + "f003": { + "path": ".gitignore", + "name": ".gitignore", + "content_hash": "841dedb922da7ddb", + "has_branch_placeholder": false + }, + "f004": { + "path": ".trinity/local.json", + "name": "local.json", + "content_hash": "163a59e414a07c63", + "has_branch_placeholder": false + }, + "f005": { + "path": ".trinity/observations.json", + "name": "observations.json", + "content_hash": "098cef7666f048fe", + "has_branch_placeholder": false + }, + "f006": { + "path": ".trinity/passport.json", + "name": "passport.json", + "content_hash": "2fe32ad782b8afa1", + "has_branch_placeholder": false + }, + "f007": { + "path": "DASHBOARD.local.json", + "name": "DASHBOARD.local.json", + "content_hash": "122532979ea8285b", + "has_branch_placeholder": false + }, + "f008": { + "path": "README.md", + "name": "README.md", + "content_hash": "a1e79b8eb529627f", + "has_branch_placeholder": false + }, + "f009": { + "path": "apps/__init__.py", + "name": "__init__.py", + "content_hash": "35d07ad93a305810", + "has_branch_placeholder": false + }, + "f010": { + "path": "apps/branch.py", + "name": "branch.py", + "content_hash": "4788c309eae120b8", + "has_branch_placeholder": false + }, + "f011": { + "path": "apps/handlers/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f012": { + "path": "apps/modules/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f013": { + "path": "apps/plugins/__init__.py", + "name": "__init__.py", + "content_hash": "e3b0c44298fc1c14", + "has_branch_placeholder": false + }, + "f014": { + "path": "artifacts/birth_certificate.json", + "name": "birth_certificate.json", + "content_hash": "3ecb3401d38fff96", + "has_branch_placeholder": false + }, + "f015": { + "path": "flow.local.md", + "name": "flow.local.md", + "content_hash": "b0d4aa4a3d8b8aa0", + "has_branch_placeholder": false + }, + "f016": { + "path": "pytest.ini", + "name": "pytest.ini", + "content_hash": "7b39ba7bca4025c5", + "has_branch_placeholder": false + }, + "f017": { + "path": "tests/__init__.py", + "name": "__init__.py", + "content_hash": "c853ec669ac5be9e", + "has_branch_placeholder": false + }, + "f018": { + "path": "tests/conftest.py", + "name": "conftest.py", + "content_hash": "5e5f2399e0d70978", + "has_branch_placeholder": false + }, + "f019": { + "path": "tools/verify_branch.py", + "name": "verify_branch.py", + "content_hash": "06803a84118e5453", + "has_branch_placeholder": false + } + }, + "directories": { + "d001": { + "path": ".aipass", + "name": ".aipass" + }, + "d002": { + "path": ".archive", + "name": ".archive" + }, + "d003": { + "path": ".claude", + "name": ".claude" + }, + "d004": { + "path": ".trinity", + "name": ".trinity" + }, + "d005": { + "path": "apps", + "name": "apps" + }, + "d006": { + "path": "apps/handlers", + "name": "handlers" + }, + "d007": { + "path": "apps/modules", + "name": "modules" + }, + "d008": { + "path": "apps/plugins", + "name": "plugins" + }, + "d009": { + "path": "artifacts", + "name": "artifacts" + }, + "d010": { + "path": "docs", + "name": "docs" + }, + "d011": { + "path": "dropbox", + "name": "dropbox" + }, + "d012": { + "path": "templates", + "name": "templates" + }, + "d013": { + "path": "tests", + "name": "tests" + }, + "d014": { + "path": "tools", + "name": "tools" + }, + "d015": { + "path": "trigger_json", + "name": "trigger_json" + } + } +} diff --git a/src/aipass/trigger/.gitignore b/src/aipass/trigger/.gitignore new file mode 100644 index 00000000..9cf1dfc4 --- /dev/null +++ b/src/aipass/trigger/.gitignore @@ -0,0 +1,14 @@ +__pycache__/ +*.pyc +*.pyo +.env +*.egg-info/ +.coverage +htmlcov/ +.pytest_cache/ +.mypy_cache/ +dist/ +build/ +*.log +*.tmp +*.swp diff --git a/src/aipass/trigger/.trinity/local.json b/src/aipass/trigger/.trinity/local.json new file mode 100644 index 00000000..423b7ede --- /dev/null +++ b/src/aipass/trigger/.trinity/local.json @@ -0,0 +1,34 @@ +{ + "document_metadata": { + "document_type": "session_history", + "document_name": "TRIGGER.LOCAL", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "TRIGGER", + "tags": ["session_tracking", "work_log", "TRIGGER"], + "limits": { + "max_lines": 600, + "note": "Auto-rollover when max_lines exceeded" + }, + "status": { + "health": "healthy", + "current_lines": 0, + "last_health_check": "2026-03-05" + } + }, + "active_tasks": { + "today_focus": "2026-03-05", + "recently_completed": [] + }, + "key_learnings": {}, + "sessions": [ + { + "session_number": 1, + "date": "2026-03-05", + "summary": "Branch initialized - TRIGGER created by aipass init", + "status": "completed" + } + ] +} diff --git a/src/aipass/trigger/.trinity/observations.json b/src/aipass/trigger/.trinity/observations.json new file mode 100644 index 00000000..0af5cf51 --- /dev/null +++ b/src/aipass/trigger/.trinity/observations.json @@ -0,0 +1,37 @@ +{ + "document_metadata": { + "document_type": "collaboration_patterns", + "document_name": "TRIGGER.OBSERVATIONS", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "TRIGGER", + "tags": ["collaboration", "patterns", "TRIGGER"], + "limits": { + "max_lines": 600, + "note": "Auto-rollover when max_lines exceeded" + }, + "status": { + "health": "healthy", + "current_lines": 0, + "last_health_check": "2026-03-05" + } + }, + "guidelines": { + "purpose": "Capture collaboration patterns and experiential insights over time", + "chronological_order": "Newest entries at TOP, oldest at BOTTOM - NEVER reorder" + }, + "observations": [ + { + "date": "2026-03-05", + "session": 1, + "entries": [ + { + "title": "First Contact", + "detail": "Branch initialized. Ready to begin capturing collaboration patterns." + } + ] + } + ] +} diff --git a/src/aipass/trigger/.trinity/passport.json b/src/aipass/trigger/.trinity/passport.json new file mode 100644 index 00000000..09491722 --- /dev/null +++ b/src/aipass/trigger/.trinity/passport.json @@ -0,0 +1,36 @@ +{ + "document_metadata": { + "document_type": "branch_identity", + "document_name": "TRIGGER.PASSPORT", + "version": "1.0.0", + "schema_version": "1.0.0", + "created": "2026-03-05", + "last_updated": "2026-03-05", + "managed_by": "TRIGGER", + "tags": ["identity", "passport", "branch_profile"] + }, + "branch_info": { + "branch_name": "TRIGGER", + "alias": "", + "path": "/home/aipass/aipass_business/AIPass/src/aipass/trigger", + "module": "trigger", + "created": "2026-03-05" + }, + "identity": { + "role": "Error Detection", + "purpose": "", + "what_i_do": [], + "what_i_dont_do": [] + }, + "principles": [ + "Code is truth - fail honestly", + "Memory persists - context survives", + "Simple solutions over complex architecture" + ], + "citizenship": { + "registered": true, + "registry_path": ".aipass/registry.json", + "communications": true, + "memory": true + } +} diff --git a/src/aipass/trigger/DASHBOARD.local.json b/src/aipass/trigger/DASHBOARD.local.json new file mode 100644 index 00000000..87e597d3 --- /dev/null +++ b/src/aipass/trigger/DASHBOARD.local.json @@ -0,0 +1,62 @@ +{ + "_warning": "AUTO-GENERATED FILE - DO NOT MANUALLY EDIT. This file is 100% automated and will be overwritten. Services update their own sections.", + "branch": "TRIGGER", + "last_updated": "2026-03-05", + "quick_status": { + "new_mail": 0, + "opened_mail": 0, + "active_plans": 0, + "commons_mentions": 0, + "action_required": false, + "summary": "" + }, + "sections": { + "ai_mail": { + "managed_by": "ai_mail", + "new": 0, + "opened": 0, + "total": 0, + "oldest_unread_age": null, + "last_dispatch_received": null, + "last_updated": "2026-03-05" + }, + "flow": { + "managed_by": "flow", + "active_plans": 0, + "recently_closed": [], + "last_updated": "2026-03-05" + }, + "memory_bank": { + "managed_by": "memory_bank", + "vectors_stored": 0, + "notes": {}, + "last_updated": "2026-03-05" + }, + "devpulse": { + "managed_by": "devpulse", + "summary": { + "issues": 0, + "todos": 0 + }, + "dplan_counts": {}, + "recent_activity": "", + "last_updated": "2026-03-05" + }, + "commons_activity": { + "managed_by": "the_commons", + "new_posts_since_last_visit": 0, + "new_comments_since_last_visit": 0, + "mentions": 0, + "trending": "None", + "last_checked": null, + "last_updated": "2026-03-05" + }, + "agent_status": { + "managed_by": "prax", + "active_agents": [], + "agent_count": 0, + "stale_agents": [], + "last_updated": "2026-03-05" + } + } +} diff --git a/src/aipass/trigger/README.md b/src/aipass/trigger/README.md new file mode 100644 index 00000000..4bee43bb --- /dev/null +++ b/src/aipass/trigger/README.md @@ -0,0 +1,51 @@ +# TRIGGER + +**Purpose:** Error detection, pattern matching, auto-dispatch to responsible agents +**Module:** `aipass.trigger` +**Created:** 2026-03-05 + +--- + +## Overview + +### What I Do + + +### How I Work +- **Entry Point:** `apps/trigger.py` +- **Pattern:** Auto-discovers and routes to modules + +--- + +## Architecture + +``` +TRIGGER/ +├── apps/ +│ ├── trigger.py # Entry point +│ ├── modules/ # Business logic +│ ├── handlers/ # Implementation +│ └── plugins/ # Extensions +├── docs/ +├── tests/ +├── passport.json # Identity +├── local.json # Session history +├── observations.json # Collaboration patterns +└── README.md +``` + +--- + +## Commands + +*Configure after initialization* + +--- + +## Integration Points + +### Depends On + + +### Provides To + diff --git a/src/aipass/trigger/apps/__init__.py b/src/aipass/trigger/apps/__init__.py new file mode 100644 index 00000000..dcf3b744 --- /dev/null +++ b/src/aipass/trigger/apps/__init__.py @@ -0,0 +1 @@ +# TRIGGER apps package diff --git a/src/aipass/trigger/apps/branch.py b/src/aipass/trigger/apps/branch.py new file mode 100644 index 00000000..fb303397 --- /dev/null +++ b/src/aipass/trigger/apps/branch.py @@ -0,0 +1,86 @@ +""" +TRIGGER Branch - Main Orchestrator + +Auto-discovery architecture: +- Scans modules/ directory for .py files with handle_command() +- Routes commands to discovered modules automatically +- No manual imports or routing needed +""" + +import sys +import importlib +from pathlib import Path +from typing import List, Any + +from aipass.prax import logger + +# ============================================================================= +# MODULE DISCOVERY +# ============================================================================= + +MODULES_DIR = Path(__file__).parent / "modules" + + +def discover_modules() -> List[Any]: + """Auto-discover modules in modules/ directory.""" + modules = [] + + if not MODULES_DIR.exists(): + return modules + + for file_path in MODULES_DIR.glob("*.py"): + if file_path.name.startswith("_"): + continue + + module_name = f"apps.modules.{file_path.stem}" + + try: + module = importlib.import_module(module_name) + if hasattr(module, "handle_command"): + modules.append(module) + except Exception as e: + logger.error(f"[TRIGGER] Failed to load module {module_name}: {e}") + + return modules + + +def route_command(command: str, args: List[str], modules: List[Any]) -> bool: + """Route command to appropriate module.""" + for module in modules: + try: + if module.handle_command(command, args): + return True + except Exception as e: + logger.error(f"[TRIGGER] Module {module.__name__} error: {e}") + return False + + +# ============================================================================= +# MAIN ENTRY POINT +# ============================================================================= + +def main(): + """Main entry point - routes commands or shows help.""" + modules = discover_modules() + args = sys.argv[1:] + + if len(args) == 0 or args[0] in ["--help", "-h", "help"]: + print(f"TRIGGER - {len(modules)} modules discovered") + for module in modules: + name = module.__name__.split(".")[-1] + desc = (module.__doc__ or "").strip().split("\n")[0] if module.__doc__ else "No description" + print(f" {name:20} {desc}") + return 0 + + command = args[0] + remaining = args[1:] if len(args) > 1 else [] + + if route_command(command, remaining, modules): + return 0 + + print(f"Unknown command: {command}") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/aipass/trigger/apps/handlers/__init__.py b/src/aipass/trigger/apps/handlers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/trigger/apps/modules/__init__.py b/src/aipass/trigger/apps/modules/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/trigger/apps/plugins/__init__.py b/src/aipass/trigger/apps/plugins/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/aipass/trigger/artifacts/birth_certificate.json b/src/aipass/trigger/artifacts/birth_certificate.json new file mode 100644 index 00000000..15e09c7c --- /dev/null +++ b/src/aipass/trigger/artifacts/birth_certificate.json @@ -0,0 +1,15 @@ +{ + "id": "32", + "name": "TRIGGER Birth Certificate", + "type": "birth_certificate", + "creator": "SYSTEM", + "owner": "TRIGGER", + "rarity": "unique", + "description": "Official birth certificate for TRIGGER. Citizen #32, registered using 'library' template. Purpose: Error detection, pattern matching, auto-dispatch to responsible agents", + "metadata": { + "citizen_number": "32", + "template": "library", + "purpose": "Error detection, pattern matching, auto-dispatch to responsible agents" + }, + "created_at": "2026-03-05" +} diff --git a/src/aipass/trigger/flow.local.md b/src/aipass/trigger/flow.local.md new file mode 100644 index 00000000..0dba17ed --- /dev/null +++ b/src/aipass/trigger/flow.local.md @@ -0,0 +1,15 @@ +# flow.local.md - TRIGGER +``` +Branch: /home/aipass/aipass_business/AIPass/src/aipass/trigger +Created: 2026-03-05 +``` + +## Issues + +- + +--- + +## Todos + +- diff --git a/src/aipass/trigger/pytest.ini b/src/aipass/trigger/pytest.ini new file mode 100644 index 00000000..c3f21db6 --- /dev/null +++ b/src/aipass/trigger/pytest.ini @@ -0,0 +1,21 @@ +[pytest] +# Test discovery paths +testpaths = tests + +# Test file patterns +python_files = test_*.py +python_functions = test_* +python_classes = Test* + +# Command-line options (always applied) +addopts = + -v # Verbose output + --tb=short # Short traceback format + --strict-markers # Raise error on unknown markers + -ra # Show summary of all test outcomes + +# Test markers (for categorizing tests) +markers = + unit: Unit tests + integration: Integration tests + slow: Tests that take significant time diff --git a/src/aipass/trigger/tests/__init__.py b/src/aipass/trigger/tests/__init__.py new file mode 100644 index 00000000..92e384a7 --- /dev/null +++ b/src/aipass/trigger/tests/__init__.py @@ -0,0 +1 @@ +# Tests package for trigger diff --git a/src/aipass/trigger/tests/conftest.py b/src/aipass/trigger/tests/conftest.py new file mode 100644 index 00000000..a87088fd --- /dev/null +++ b/src/aipass/trigger/tests/conftest.py @@ -0,0 +1,43 @@ +#!/home/aipass/.venv/bin/python3 + +# ===================AIPASS==================== +# META DATA HEADER +# Name: tests/conftest.py +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/tests +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Shared pytest fixtures +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +"""Shared pytest fixtures for cortex tests""" +import pytest +import shutil +import tempfile +from pathlib import Path +from typing import Generator + + +@pytest.fixture +def temp_test_dir() -> Generator[Path, None, None]: + """Creates temporary directory for testing, cleans up after""" + test_dir = Path(tempfile.mkdtemp()) + yield test_dir + if test_dir.exists(): + shutil.rmtree(test_dir) + + +@pytest.fixture +def sample_test_data() -> dict: + """Provides sample test data + + Customize this fixture for your module's needs + """ + return { + "test_key": "test_value", + "sample_data": "example" + } diff --git a/src/aipass/trigger/tools/verify_branch.py b/src/aipass/trigger/tools/verify_branch.py new file mode 100644 index 00000000..4464af6d --- /dev/null +++ b/src/aipass/trigger/tools/verify_branch.py @@ -0,0 +1,159 @@ +#!/home/aipass/.venv/bin/python3 +# -*- coding: utf-8 -*- + +# ===================AIPASS==================== +# META DATA HEADER +# Name: verify_branch.py - Branch Template Verification +# Date: 2025-11-08 +# Version: 1.0.0 +# Category: cortex/modules +# +# CHANGELOG (Max 5 entries): +# - v1.0.0 (2025-11-08): Initial implementation - Compare template vs branch +# +# CODE STANDARDS: +# - Error handling: Use error handler system (apps/handlers/error/) +# ============================================= + +""" +Branch Template Verification Tool + +Compares template directory with created branch to identify: +- Files in template but missing in branch +- Files in branch but not in template +- Renamed files +""" + +import sys +import json +from pathlib import Path +from typing import Set, List, Tuple +from fnmatch import fnmatch + +# INFRASTRUCTURE IMPORT PATTERN +AIPASS_ROOT = Path.home() / "aipass_core" +sys.path.insert(0, str(AIPASS_ROOT)) + +# Get template directory +TEMPLATE_DIR = AIPASS_ROOT / "cortex" / "templates" / "branch_template" + + +def load_ignore_patterns() -> Tuple[List[str], List[str]]: + """Load ignore patterns from .registry_ignore.json""" + ignore_file = TEMPLATE_DIR / ".registry_ignore.json" + + if not ignore_file.exists(): + return [], [] + + try: + with open(ignore_file, 'r', encoding='utf-8') as f: + data = json.load(f) + ignore_files = data.get("ignore_files", []) + ignore_patterns = data.get("ignore_patterns", []) + return ignore_files, ignore_patterns + except Exception as e: + print(f"Warning: Could not load .registry_ignore.json: {e}") + return [], [] + + +def should_exclude(path: Path, base_dir: Path, ignore_files: List[str], ignore_patterns: List[str]) -> bool: + """Check if path should be excluded based on ignore patterns""" + rel_path = path.relative_to(base_dir) + filename = path.name + path_str = str(rel_path) + + # Check exact filename matches + if filename in ignore_files: + return True + + # Check glob patterns + for pattern in ignore_patterns: + if fnmatch(filename, pattern): + return True + # Check if any parent directory matches + for part in rel_path.parts: + if fnmatch(part, pattern): + return True + + return False + + +def get_file_set(directory: Path, ignore_files: List[str], ignore_patterns: List[str]) -> Set[str]: + """Get set of all file paths in directory (relative)""" + files = set() + + for item in directory.rglob("*"): + if item.is_file() and not should_exclude(item, directory, ignore_files, ignore_patterns): + rel_path = str(item.relative_to(directory)) + files.add(rel_path) + + return files + + +def verify_branch(branch_dir: Path) -> Tuple[List[str], List[str], List[str]]: + """ + Compare template with branch + + Returns: + Tuple of (in_template_only, in_branch_only, in_both) + """ + # Load ignore patterns from .registry_ignore.json + ignore_files, ignore_patterns = load_ignore_patterns() + + template_files = get_file_set(TEMPLATE_DIR, ignore_files, ignore_patterns) + branch_files = get_file_set(branch_dir, ignore_files, ignore_patterns) + + in_template_only = sorted(template_files - branch_files) + in_branch_only = sorted(branch_files - template_files) + in_both = sorted(template_files & branch_files) + + return in_template_only, in_branch_only, in_both + + +def main(): + if len(sys.argv) < 2: + print("Usage: python3 verify_branch.py ") + print("Example: python3 verify_branch.py test_branch002") + sys.exit(1) + + branch_path = Path(sys.argv[1]) + if not branch_path.is_absolute(): + # Assume it's relative to cortex directory + branch_path = Path.cwd() / branch_path + + if not branch_path.exists(): + print(f"❌ ERROR: Branch directory not found: {branch_path}") + sys.exit(1) + + print(f"\n=== Branch Verification ===") + print(f"Template: {TEMPLATE_DIR}") + print(f"Branch: {branch_path}") + print() + + in_template_only, in_branch_only, in_both = verify_branch(branch_path) + + print(f"Files in both: {len(in_both)}") + print(f"Files in template only: {len(in_template_only)}") + print(f"Files in branch only: {len(in_branch_only)}") + print() + + if in_template_only: + print("❌ Missing from branch (expected from template):") + for file in in_template_only: + print(f" - {file}") + print() + + if in_branch_only: + print("✅ Additional files in branch (renamed or new):") + for file in in_branch_only: + print(f" + {file}") + print() + + if not in_template_only and not in_branch_only: + print("✅ Branch matches template perfectly") + + print("="*70) + + +if __name__ == "__main__": + main()