feat(backup): namespace migration standalone -> aipass.backup.* citizen — convert 47 internal imports across 11 files (apps.* -> aipass.backup.apps.*), fix importlib discovery string, drop sys.path/PROJECT_ROOT hack, add root __init__.py package marker. Diagnostics 0%->100%, Imports 99%->100%, overall 92%->95% (S220). Verified-by-artifact: all 10 drone cmds live, register+status e2e clean, ruff clean, zero standalone imports. Test_Quality (no suite) stays separate build (td-018)
This commit is contained in:
@@ -63,8 +63,8 @@ apps/
|
||||
## Working Habits
|
||||
|
||||
- Project-owned design: .backup_system/ and .backupignore live in the TARGET project, not centrally
|
||||
- Standalone sys.path: uses `from apps.modules.*` / `from apps.handlers.*`, NOT `from aipass.backup.*`
|
||||
- Entry point sets PROJECT_ROOT on sys.path and AIPASS_BRANCH_NAME env var for Prax
|
||||
- Normal citizen namespace: uses `from aipass.backup.apps.modules.*` / `from aipass.backup.apps.handlers.*`
|
||||
- Entry point sets AIPASS_BRANCH_NAME env var for Prax
|
||||
- BUILTIN_IGNORES in patterns.py is the single source for default ignore patterns
|
||||
|
||||
## Known Gotchas
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
# =================== AIPass ====================
|
||||
# Name: __init__.py - Backup package root
|
||||
# Date: 2026-04-16
|
||||
# Version: 1.0.0
|
||||
# Category: backup
|
||||
#
|
||||
# CHANGELOG (Max 5 entries):
|
||||
# - v1.0.0 (2026-04-16): Initial implementation
|
||||
#
|
||||
# CODE STANDARDS:
|
||||
# - Package root for the Backup system
|
||||
# =============================================
|
||||
@@ -20,10 +20,6 @@ import sys
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
PROJECT_ROOT = str(Path(__file__).resolve().parent.parent)
|
||||
if PROJECT_ROOT not in sys.path:
|
||||
sys.path.insert(0, PROJECT_ROOT)
|
||||
|
||||
os.environ.setdefault("AIPASS_BRANCH_NAME", "backup")
|
||||
|
||||
from aipass.prax import logger
|
||||
@@ -52,7 +48,7 @@ def discover_modules() -> list[Any]:
|
||||
if file_path.name.startswith("_"):
|
||||
continue
|
||||
|
||||
module_name = f"apps.modules.{file_path.stem}"
|
||||
module_name = f"aipass.backup.apps.modules.{file_path.stem}"
|
||||
|
||||
try:
|
||||
module = importlib.import_module(module_name)
|
||||
@@ -100,7 +96,7 @@ def main():
|
||||
command = args[0]
|
||||
|
||||
if command == "backup" and len(args) > 1:
|
||||
from apps.modules.register import resolve_project
|
||||
from aipass.backup.apps.modules.register import resolve_project
|
||||
|
||||
target = args[1]
|
||||
project_root = resolve_project(target)
|
||||
@@ -124,7 +120,7 @@ def main():
|
||||
remaining = args[1:] if len(args) > 1 else []
|
||||
|
||||
if remaining and remaining[0].startswith("@"):
|
||||
from apps.modules.register import resolve_project
|
||||
from aipass.backup.apps.modules.register import resolve_project
|
||||
|
||||
resolved = resolve_project(remaining[0])
|
||||
if resolved is None:
|
||||
|
||||
@@ -13,10 +13,10 @@ import sys
|
||||
from aipass.prax import logger
|
||||
from aipass.cli.apps.modules import console
|
||||
|
||||
from apps.handlers.json import json_handler
|
||||
from apps.handlers.report.formatter import format_result
|
||||
from apps.modules.snapshot import run_snapshot
|
||||
from apps.modules.versioned import run_versioned
|
||||
from aipass.backup.apps.handlers.json import json_handler
|
||||
from aipass.backup.apps.handlers.report.formatter import format_result
|
||||
from aipass.backup.apps.modules.snapshot import run_snapshot
|
||||
from aipass.backup.apps.modules.versioned import run_versioned
|
||||
|
||||
MODULE_NAME = "all"
|
||||
PRIMARY_COMMAND = "all"
|
||||
|
||||
@@ -15,7 +15,7 @@ import sys
|
||||
|
||||
from aipass.prax import logger
|
||||
from aipass.cli.apps.modules import console
|
||||
from apps.handlers.json import json_handler
|
||||
from aipass.backup.apps.handlers.json import json_handler
|
||||
|
||||
|
||||
MODULE_NAME = "drive_clear"
|
||||
|
||||
@@ -15,7 +15,7 @@ import sys
|
||||
|
||||
from aipass.prax import logger
|
||||
from aipass.cli.apps.modules import console
|
||||
from apps.handlers.json import json_handler
|
||||
from aipass.backup.apps.handlers.json import json_handler
|
||||
|
||||
|
||||
MODULE_NAME = "drive_stats"
|
||||
|
||||
@@ -15,7 +15,7 @@ import sys
|
||||
|
||||
from aipass.prax import logger
|
||||
from aipass.cli.apps.modules import console
|
||||
from apps.handlers.json import json_handler
|
||||
from aipass.backup.apps.handlers.json import json_handler
|
||||
|
||||
|
||||
MODULE_NAME = "drive_sync"
|
||||
|
||||
@@ -15,7 +15,7 @@ import sys
|
||||
|
||||
from aipass.prax import logger
|
||||
from aipass.cli.apps.modules import console
|
||||
from apps.handlers.json import json_handler
|
||||
from aipass.backup.apps.handlers.json import json_handler
|
||||
|
||||
|
||||
MODULE_NAME = "drive_test"
|
||||
|
||||
@@ -14,10 +14,10 @@ from pathlib import Path
|
||||
from aipass.prax import logger
|
||||
from aipass.cli.apps.modules import console
|
||||
|
||||
from apps.handlers.json import json_handler
|
||||
from apps.handlers.project.registry import lookup_project as _lookup_project
|
||||
from apps.handlers.project.registry import register_project
|
||||
from apps.handlers.project.setup import create_backup_dir
|
||||
from aipass.backup.apps.handlers.json import json_handler
|
||||
from aipass.backup.apps.handlers.project.registry import lookup_project as _lookup_project
|
||||
from aipass.backup.apps.handlers.project.registry import register_project
|
||||
from aipass.backup.apps.handlers.project.setup import create_backup_dir
|
||||
|
||||
|
||||
def resolve_project(target: str) -> str | None:
|
||||
|
||||
@@ -15,7 +15,7 @@ import sys
|
||||
|
||||
from aipass.prax import logger
|
||||
from aipass.cli.apps.modules import console
|
||||
from apps.handlers.json import json_handler
|
||||
from aipass.backup.apps.handlers.json import json_handler
|
||||
|
||||
|
||||
MODULE_NAME = "settings"
|
||||
|
||||
@@ -15,20 +15,20 @@ import time
|
||||
from aipass.prax import logger
|
||||
from aipass.cli.apps.modules import console
|
||||
|
||||
from apps.handlers.copy.snapshot import copy_snapshot
|
||||
from apps.handlers.ignore.patterns import load_patterns
|
||||
from apps.handlers.ignore.whitelist import load_whitelist
|
||||
from apps.handlers.json import json_handler
|
||||
from apps.handlers.path.builder import build_snapshot_path
|
||||
from apps.handlers.project.config import load_project_config
|
||||
from apps.handlers.project.setup import create_backup_dir
|
||||
from apps.handlers.report.formatter import format_result
|
||||
from apps.handlers.report.result import BackupResult
|
||||
from apps.handlers.scan.filter import filter_paths
|
||||
from apps.handlers.scan.walk import walk_project
|
||||
from apps.handlers.state.changelog import append_changelog
|
||||
from apps.handlers.state.metadata import build_metadata
|
||||
from apps.handlers.state.timestamps import save_timestamps
|
||||
from aipass.backup.apps.handlers.copy.snapshot import copy_snapshot
|
||||
from aipass.backup.apps.handlers.ignore.patterns import load_patterns
|
||||
from aipass.backup.apps.handlers.ignore.whitelist import load_whitelist
|
||||
from aipass.backup.apps.handlers.json import json_handler
|
||||
from aipass.backup.apps.handlers.path.builder import build_snapshot_path
|
||||
from aipass.backup.apps.handlers.project.config import load_project_config
|
||||
from aipass.backup.apps.handlers.project.setup import create_backup_dir
|
||||
from aipass.backup.apps.handlers.report.formatter import format_result
|
||||
from aipass.backup.apps.handlers.report.result import BackupResult
|
||||
from aipass.backup.apps.handlers.scan.filter import filter_paths
|
||||
from aipass.backup.apps.handlers.scan.walk import walk_project
|
||||
from aipass.backup.apps.handlers.state.changelog import append_changelog
|
||||
from aipass.backup.apps.handlers.state.metadata import build_metadata
|
||||
from aipass.backup.apps.handlers.state.timestamps import save_timestamps
|
||||
|
||||
MODULE_NAME = "snapshot"
|
||||
PRIMARY_COMMAND = "snapshot"
|
||||
|
||||
@@ -14,10 +14,10 @@ from pathlib import Path
|
||||
from aipass.prax import logger
|
||||
from aipass.cli.apps.modules import console
|
||||
|
||||
from apps.handlers.json import json_handler
|
||||
from apps.handlers.path.builder import backup_root
|
||||
from apps.handlers.project.config import load_project_config
|
||||
from apps.handlers.state.changelog import load_changelog
|
||||
from aipass.backup.apps.handlers.json import json_handler
|
||||
from aipass.backup.apps.handlers.path.builder import backup_root
|
||||
from aipass.backup.apps.handlers.project.config import load_project_config
|
||||
from aipass.backup.apps.handlers.state.changelog import load_changelog
|
||||
|
||||
MODULE_NAME = "status"
|
||||
PRIMARY_COMMAND = "status"
|
||||
|
||||
@@ -17,20 +17,20 @@ from datetime import datetime, timezone
|
||||
from aipass.prax import logger
|
||||
from aipass.cli.apps.modules import console
|
||||
|
||||
from apps.handlers.copy.versioned import copy_versioned
|
||||
from apps.handlers.ignore.patterns import load_patterns
|
||||
from apps.handlers.ignore.whitelist import load_whitelist
|
||||
from apps.handlers.json import json_handler
|
||||
from apps.handlers.path.builder import build_versioned_path
|
||||
from apps.handlers.project.config import load_project_config
|
||||
from apps.handlers.project.setup import create_backup_dir
|
||||
from apps.handlers.report.formatter import format_result
|
||||
from apps.handlers.report.result import BackupResult
|
||||
from apps.handlers.scan.filter import filter_paths
|
||||
from apps.handlers.scan.walk import walk_project
|
||||
from apps.handlers.state.changelog import append_changelog
|
||||
from apps.handlers.state.metadata import build_metadata
|
||||
from apps.handlers.state.timestamps import load_timestamps, save_timestamps
|
||||
from aipass.backup.apps.handlers.copy.versioned import copy_versioned
|
||||
from aipass.backup.apps.handlers.ignore.patterns import load_patterns
|
||||
from aipass.backup.apps.handlers.ignore.whitelist import load_whitelist
|
||||
from aipass.backup.apps.handlers.json import json_handler
|
||||
from aipass.backup.apps.handlers.path.builder import build_versioned_path
|
||||
from aipass.backup.apps.handlers.project.config import load_project_config
|
||||
from aipass.backup.apps.handlers.project.setup import create_backup_dir
|
||||
from aipass.backup.apps.handlers.report.formatter import format_result
|
||||
from aipass.backup.apps.handlers.report.result import BackupResult
|
||||
from aipass.backup.apps.handlers.scan.filter import filter_paths
|
||||
from aipass.backup.apps.handlers.scan.walk import walk_project
|
||||
from aipass.backup.apps.handlers.state.changelog import append_changelog
|
||||
from aipass.backup.apps.handlers.state.metadata import build_metadata
|
||||
from aipass.backup.apps.handlers.state.timestamps import load_timestamps, save_timestamps
|
||||
|
||||
MODULE_NAME = "versioned"
|
||||
PRIMARY_COMMAND = "versioned"
|
||||
|
||||
Reference in New Issue
Block a user