feat: 가상화 문서들 추가
This commit is contained in:
@@ -9,6 +9,13 @@ from pathlib import Path
|
||||
|
||||
REQUIRED_PATHS = (
|
||||
# 스킬 — 분석에서 게시까지
|
||||
".agents/skills/running-tech-log-pipeline/SKILL.md",
|
||||
".agents/skills/running-tech-log-pipeline/references/stage-contracts.md",
|
||||
".agents/skills/running-tech-log-pipeline/references/subagent-prompts.md",
|
||||
".agents/skills/running-tech-log-pipeline/templates/run.json",
|
||||
".agents/skills/publishing-tech-log-to-studio/SKILL.md",
|
||||
".agents/skills/publishing-tech-log-to-studio/references/studio-form-map.md",
|
||||
".agents/skills/publishing-tech-log-to-studio/references/playwright-recipes.md",
|
||||
".agents/skills/analyzing-codebase-for-tech-log/SKILL.md",
|
||||
".agents/skills/deriving-tech-log-root-tree/SKILL.md",
|
||||
".agents/skills/deriving-tech-log-root-tree/references/decomposition-checklist.md",
|
||||
@@ -30,6 +37,9 @@ REQUIRED_PATHS = (
|
||||
".agents/skills/rewriting-technical-prose-naturally/references/research-method.md",
|
||||
".agents/skills/rewriting-technical-prose-naturally/scripts/check_prose.mjs",
|
||||
".agents/skills/rewriting-technical-prose-naturally/scripts/style_profile.mjs",
|
||||
".agents/skills/writing-as-the-person-who-did-it/SKILL.md",
|
||||
".agents/skills/writing-as-the-person-who-did-it/references/voice-moves.md",
|
||||
".agents/skills/writing-as-the-person-who-did-it/scripts/check_voice.mjs",
|
||||
".agents/skills/technical-visualizer/SKILL.md",
|
||||
".agents/skills/refactoring-from-analysis/SKILL.md",
|
||||
# 프로젝트 폴더 틀 — 끝난 프로젝트의 모양. 작업 재료는 여기 없다
|
||||
@@ -52,6 +62,8 @@ REQUIRED_PATHS = (
|
||||
"scripts/build-tech-log-tree.py",
|
||||
"scripts/techlog.py",
|
||||
"scripts/verify-tech-log-tree.py",
|
||||
"scripts/verify-pipeline-run.py",
|
||||
"scripts/check-figure-overlap.py",
|
||||
"scripts/verify-project-layout.py",
|
||||
"scripts/fold-analysis-into-final.py",
|
||||
"scripts/fold-studio-contract-into-index.py",
|
||||
@@ -253,6 +265,17 @@ def verify_layouts(shared_root: Path) -> list:
|
||||
return [verifier.verify(name) for name in projects]
|
||||
|
||||
|
||||
def verify_runs(shared_root: Path):
|
||||
"""`runs/<프로젝트>/<runId>/run.json` 이 절차를 지켰는지 본다.
|
||||
|
||||
원장이 없는 것은 정상이다 — 파이프라인을 한 줄기로 돌린 적이 없다는 뜻이다.
|
||||
있는데 안 지킨 것만 잡는다.
|
||||
"""
|
||||
module = _load(shared_root, "verify-pipeline-run.py", "verify_pipeline_run")
|
||||
ledgers = sorted((shared_root / "runs").glob("*/*/run.json"))
|
||||
return [module.verify(str(p)) for p in ledgers]
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description="Verify the Tech Log documentation pipeline workspace.")
|
||||
parser.add_argument("shared_root", nargs="?", type=Path,
|
||||
@@ -265,7 +288,10 @@ def main() -> int:
|
||||
errors = verify_pipeline(args.shared_root)
|
||||
reports = [] if args.skip_projects else verify_projects(args.shared_root)
|
||||
layouts = [] if args.skip_projects else verify_layouts(args.shared_root)
|
||||
project_errors = sum(r.error_count for r in reports) + sum(r.error_count for r in layouts)
|
||||
runs = [] if args.skip_projects else verify_runs(args.shared_root)
|
||||
project_errors = (sum(r.error_count for r in reports)
|
||||
+ sum(r.error_count for r in layouts)
|
||||
+ sum(r.error_count for r in runs))
|
||||
|
||||
if errors:
|
||||
print("PIPELINE CONTRACT: FAIL")
|
||||
@@ -287,6 +313,15 @@ def main() -> int:
|
||||
for report in layouts:
|
||||
verifier_render(report, args.samples)
|
||||
|
||||
if runs:
|
||||
run_errors = sum(r.error_count for r in runs)
|
||||
print()
|
||||
print(f"PIPELINE RUNS: {'FAIL' if run_errors else 'PASS'}"
|
||||
f" — 런 {len(runs)} · error {run_errors} ·"
|
||||
f" warn {sum(r.warn_count for r in runs)}")
|
||||
for report in runs:
|
||||
verifier_render(report, args.samples)
|
||||
|
||||
if reports:
|
||||
tree_errors = sum(r.error_count for r in reports)
|
||||
print()
|
||||
|
||||
Reference in New Issue
Block a user