**Motivations:** - Implémenter le workflow complet de démonstration Collatz (commandes.md) - Permettre la reprise après interruption au palier D20 **Evolutions:** - Scripts 01-12 et run-full-workflow alignés sur commandes.md sections 1-10 - collatz_recover_noyau.py : recréation de noyau_post_D20 à partir du CSV candidats - Option --resume-from D20 dans collatz_k_pipeline pour reprendre sans recalculer D18-D19-F15 - Détection automatique : si candidats_D20 existe sans noyau_post_D20, récupération puis poursuite - Filtres --cible=critique et --modulo dans collatz_fusion_pipeline - ROOT par défaut = collatz_k_scripts (plus data/source vide) **Pages affectées:** - .gitignore (__pycache__, out/) - applications/collatz/collatz_k_scripts/*.py - applications/collatz/scripts/*.sh - applications/collatz/scripts/README.md
59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
collatz_generate_progress_log.py
|
|
|
|
List audit files in a directory, summarize sizes and dates.
|
|
Outputs a journal.md file.
|
|
|
|
Usage: python collatz_generate_progress_log.py --audits-dir DIR --output journal.md
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
from pathlib import Path
|
|
from datetime import datetime
|
|
|
|
|
|
def run(audits_dir: str, output_path: str) -> None:
|
|
"""Generate progress log."""
|
|
root = Path(audits_dir)
|
|
if not root.exists():
|
|
Path(output_path).write_text(
|
|
f"# Audit progress log\n\nDirectory not found: {audits_dir}\n",
|
|
encoding="utf-8",
|
|
)
|
|
return
|
|
|
|
entries: list[tuple[str, int, str]] = []
|
|
for p in sorted(root.iterdir()):
|
|
if p.is_file():
|
|
stat = p.stat()
|
|
size = stat.st_size
|
|
mtime = datetime.fromtimestamp(stat.st_mtime).strftime("%Y-%m-%d %H:%M")
|
|
entries.append((p.name, size, mtime))
|
|
|
|
lines = ["# Audit progress log", "", f"Source directory: {audits_dir}", ""]
|
|
lines.append("| File | Size (bytes) | Modified |")
|
|
lines.append("|------|------|----------|")
|
|
for name, size, mtime in entries:
|
|
lines.append(f"| {name} | {size} | {mtime} |")
|
|
|
|
if not entries:
|
|
lines.append("(no files)")
|
|
|
|
Path(output_path).write_text("\n".join(lines) + "\n", encoding="utf-8")
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser(description="Generate audit progress log")
|
|
parser.add_argument("--audits-dir", required=True, help="Path to audits directory")
|
|
parser.add_argument("--output", required=True, help="Path to output journal.md")
|
|
args = parser.parse_args()
|
|
run(args.audits_dir, args.output)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|