Files
timmy-config/scripts/architecture_linter.py
Alexander Whitestone 1c82a2a560
Some checks failed
Architecture Lint / Linter Tests (pull_request) Successful in 23s
Smoke Test / smoke (pull_request) Failing after 15s
Validate Config / YAML Lint (pull_request) Failing after 15s
Validate Config / JSON Validate (pull_request) Successful in 17s
Validate Config / Python Syntax & Import Check (pull_request) Failing after 37s
Validate Config / Python Test Suite (pull_request) Has been skipped
Validate Config / Cron Syntax Check (pull_request) Successful in 11s
Validate Config / Shell Script Lint (pull_request) Failing after 49s
Validate Config / Deploy Script Dry Run (pull_request) Successful in 11s
Validate Config / Playbook Schema Validation (pull_request) Successful in 20s
Validate Training Data / validate (pull_request) Failing after 15s
Architecture Lint / Lint Repository (pull_request) Failing after 17s
PR Checklist / pr-checklist (pull_request) Failing after 2m53s
fix: add python3 shebangs to all Python scripts (#681)
Added #!/usr/bin/env python3 to 74 Python scripts across:
- bin/ (16 scripts)
- scripts/ (48 scripts)
- pipeline/ (3 scripts)
- training/scripts/ (3 scripts)
- hermes-sovereign/ (1 script)

Also added executable permissions to fixed scripts.
Test files excluded (run by pytest, not directly).

Closes #681
2026-04-20 19:17:19 -04:00

35 lines
1.1 KiB
Python
Executable File

#!/usr/bin/env python3
#!/usr/bin/env python3
import os
import sys
import re
# Architecture Linter
# Ensuring all changes align with the Frontier Local Agenda.
SOVEREIGN_RULES = [
(r"https?://(api\.openai\.com|api\.anthropic\.com)", "CRITICAL: External cloud API detected. Use local custom_provider instead."),
(r"provider: (openai|anthropic)", "WARNING: Direct cloud provider used. Ensure fallback_model is configured."),
(r"api_key:\s*['\"][A-Za-z0-9_\-]{16,}['\"]", "SECURITY: Hardcoded API key detected. Use environment variables.")
]
def lint_file(path):
print(f"Linting {path}...")
content = open(path).read()
violations = 0
for pattern, msg in SOVEREIGN_RULES:
if re.search(pattern, content):
print(f" [!] {msg}")
violations += 1
return violations
def main():
print("--- Ezra's Architecture Linter ---")
files = [f for f in sys.argv[1:] if os.path.isfile(f)]
total_violations = sum(lint_file(f) for f in files)
print(f"\nLinting complete. Total violations: {total_violations}")
sys.exit(1 if total_violations > 0 else 0)
if __name__ == "__main__":
main()