feat(quant): WBS-FE-BE-100 complete Vue3 Vite8 SPA & .NET10 FastEndpoints refactoring
Validators (Pushes and Pull Requests) / validate-ui-and-storage (push) Failing after 13s
Validators (Pushes and Pull Requests) / validate-core (push) Failing after 19s

This commit is contained in:
2026-07-22 15:14:28 +09:00
parent fd8ff3d51e
commit 2fe4cb288f
100 changed files with 7975 additions and 804 deletions
+35 -2
View File
@@ -254,6 +254,30 @@ def _audit_yaml() -> list[dict]:
# 4. MD 감사
# ──────────────────────────────────────────────────────────
def _audit_py_version_sprawl() -> list[dict]:
issues: list[dict] = []
tools_dir = ROOT / "tools"
grouped: dict[str, list[tuple[int, Path]]] = {}
for py in tools_dir.glob("*.py"):
m = re.match(r'(.+?)_v(\d+)$', py.stem)
if m:
base = m.group(1)
grouped.setdefault(base, []).append((int(m.group(2)), py))
for base, vers in grouped.items():
if len(vers) > 1:
vers.sort()
latest_ver, latest_path = vers[-1]
for ver, path in vers[:-1]:
issues.append({
"type": "PY_SUPERSEDED_VERSION",
"severity": "WARN",
"file": path.relative_to(ROOT).as_posix(),
"superseded_by": latest_path.relative_to(ROOT).as_posix(),
"note": f"Python script v{ver} superseded by v{latest_ver} - version sprawl detected",
})
return issues
def _audit_md() -> list[dict]:
issues: list[dict] = []
# spec/ 내 README.md는 전략/리스크 구조 설명용 — 내용 확인 권장
@@ -310,6 +334,8 @@ def main() -> int:
# YAML 감사
yaml_issues = _audit_yaml()
# Python 버전 스프롤 감사
py_sprawl_issues = _audit_py_version_sprawl()
# MD 감사
md_issues = _audit_md()
@@ -336,6 +362,12 @@ def main() -> int:
print(f" {icon} [{iss['type']}] {iss.get('file', iss.get('files', ''))}")
print(f" -> {iss['note']}")
if py_sprawl_issues:
print(f"\n[Python Version Sprawl] {len(py_sprawl_issues)} issues found:")
for iss in py_sprawl_issues:
print(f" ! [PY_SUPERSEDED_VERSION] {iss['file']}")
print(f" -> {iss['note']}")
if md_issues:
print(f"\n[MD] {len(md_issues)} files for review:")
for iss in md_issues:
@@ -363,9 +395,10 @@ def main() -> int:
"python_safe_delete": safe_delete,
"python_review": review,
"yaml_issues": yaml_issues,
"py_sprawl_issues": py_sprawl_issues,
"md_issues": md_issues,
"deleted": deleted,
"gate": "PASS" if not safe_delete and not review else "WARN",
"gate": "PASS" if not safe_delete and not review and not py_sprawl_issues else "WARN",
}
if args.json:
@@ -375,7 +408,7 @@ def main() -> int:
print(f"\nSaved: {args.json}")
print(f"\n{'='*60}")
print(f"gate={result['gate']} py_delete={len(safe_delete)} py_review={len(review)} yaml_issues={len(yaml_issues)}")
print(f"gate={result['gate']} py_delete={len(safe_delete)} py_review={len(review)} yaml_issues={len(yaml_issues)} py_sprawl={len(py_sprawl_issues)}")
return 0 if result["gate"] == "PASS" else 1