Private
Public Access
0
0
Files
manual_slop/scripts/audit_code_path_audit_coverage.py
T
ed 5ac0618a33 refactor(scripts): move 7 code_path_audit files from src/ to scripts/code_path_audit/
The 7 code_path_audit*.py files (2604 lines total) are pure static
analysis tools. They do AST traversal of src/, no intrusive profiling,
no runtime markers. They were inlaid with src/ but only import:
- src.result_types (the Result[T] convention type)
- each other (the 6 siblings)

After the move:
- src/ is now pure application code; line-count audit metrics are clean
- scripts/code_path_audit/ is a new namespace-isolated subdir per
  AGENTS.md 'scripts are namespace-isolated by directory' rule

TIER-3 READ AGENTS.md + conductor/workflow.md + conductor/edit_workflow.md
+ conductor/code_styleguides/code_path_audit.md + the 7 files before
this commit.

Changes:
- 7 files moved: src/code_path_audit*.py -> scripts/code_path_audit/
- 7 files updated: internal imports rom src.code_path_audit_X ->
  rom code_path_audit_X (siblings in same subdir)
- 7 files updated: add sys.path.insert(0, str(Path(__file__).resolve().parents[2] / 'src'))
  to find src.result_types when run standalone
- 5 test files updated: rom src.code_path_audit -> rom code_path_audit
  + sys.path setup to find the new subdir
- 6 throwaway scripts in scripts/tier2/artifacts/ updated: import path
  + sys.path setup (parents[3] / 'src' + parents[3] / 'scripts' / 'code_path_audit')
- 2 styleguide/spec references updated: conductor/code_styleguides/code_path_audit.md
  + conductor/tracks/code_path_audit_20260607/spec_v2.md
- 1 meta-audit docstring updated: scripts/audit_code_path_audit_coverage.py
- 1 type registry entry deleted: docs/type_registry/src_code_path_audit.md
  (the type is no longer in src/)
- 1 type registry index updated: docs/type_registry/index.md (22 files, was 23)

Verification:
- 7/7 audit gates pass --strict (weak_types 102<=112, type_registry 22 files,
  main_thread_imports OK, no_models_config_io OK, code_path_audit_coverage 0
  violations, exception_handling 0 violations, optional_in_3_files 0 violations)
- 6/6 test files pass: test_code_path_audit, test_code_path_audit_integration,
  test_code_path_audit_phase78, test_code_path_audit_phase89,
  test_code_path_audit_ssdl_behavioral, test_metadata_nil_sentinel
- src/ line count: 29997 lines (down from 32621 = -2624 lines)
- scripts/code_path_audit/ line count: 2620 lines
2026-06-25 09:29:24 -04:00

70 lines
2.1 KiB
Python

"""Meta-audit for code_path_audit v2 output schema. The audit tool now lives in scripts/code_path_audit/ (moved from src/ on 2026-06-24).
Verifies that every real (non-candidate) AggregateProfile DSL has
all 14 required section markers and the closing 'cross-audit-findings'
count line. That's it.
Usage:
uv run python scripts/audit_code_path_audit_coverage.py
uv run python scripts/audit_code_path_audit_coverage.py --strict
"""
from __future__ import annotations
import argparse
import sys
from pathlib import Path
REQUIRED_SECTIONS: tuple[str, ...] = (
"Pipeline summary",
"Producers",
"Consumers",
"Field access matrix",
"Access pattern",
"Frequency",
"Result coverage",
"Type alias coverage",
"Cross-audit findings",
"Decomposition cost",
"Struct shape",
"Optimization candidates",
"Verdict",
"Evidence appendix",
)
def main() -> int:
parser = argparse.ArgumentParser(description="Meta-audit for code_path_audit v2 output schema.")
parser.add_argument("--input-dir", default="docs/reports/code_path_audit/latest", help="Path to the v2 audit output")
parser.add_argument("--strict", action="store_true", help="Exit 1 on any violation")
args = parser.parse_args()
input_dir = Path(args.input_dir)
if not input_dir.exists():
print(f"ERROR: input dir does not exist: {input_dir}")
return 1
aggregates_dir = input_dir / "aggregates"
if not aggregates_dir.exists():
print(f"ERROR: aggregates dir does not exist: {aggregates_dir}")
return 1
violations: list[str] = []
files_checked = 0
for md_path in sorted(aggregates_dir.glob("*.md")):
content = md_path.read_text(encoding="utf-8")
if "**Is candidate:** True" in content:
continue
files_checked += 1
for section in REQUIRED_SECTIONS:
marker = f"## {section}"
if marker not in content:
violations.append(f"{md_path.name}: missing section '{section}'")
if violations:
print(f"Meta-audit: {len(violations)} violations ({files_checked} real profiles checked)")
for v in violations:
print(f" - {v}")
if args.strict:
return 1
return 0
print(f"Meta-audit: 0 violations ({files_checked} real profiles checked)")
return 0
if __name__ == "__main__":
sys.exit(main())