feat: 공식 문서 근거자료, 브랜치 기능 문서 작성
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env python3
|
||||
"""wiki_quorum.py — N개 adversarial verdict 블록의 결정론 quorum tally CLI.
|
||||
|
||||
사용:
|
||||
python3 wiki_quorum.py vote1.md vote2.md vote3.md
|
||||
cat votes.md | python3 wiki_quorum.py --stdin # '---' 구분 멀티블록
|
||||
exit: 1 if any KILL/UNVERIFIED, else 0.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
import wiki_rules
|
||||
|
||||
|
||||
def main():
|
||||
args = sys.argv[1:]
|
||||
if "--stdin" in args:
|
||||
blob = sys.stdin.read()
|
||||
blocks = [b for b in blob.split("\n---\n") if "wiki-verdict" in b]
|
||||
else:
|
||||
blocks = []
|
||||
for a in args:
|
||||
try:
|
||||
blocks.append(Path(a).read_text(encoding="utf-8"))
|
||||
except Exception as e:
|
||||
print(f"파일 읽기 실패: {a} — {e}", file=sys.stderr)
|
||||
if not blocks:
|
||||
print("verdict 블록 입력 없음", file=sys.stderr)
|
||||
sys.exit(2)
|
||||
per = wiki_rules.tally_quorum(blocks)
|
||||
print(f"== Quorum tally: N={len(blocks)} votes, {len(per)} findings ==")
|
||||
print("| finding | keep | down | reject | abstain | decision |")
|
||||
print("|---|---|---|---|---|---|")
|
||||
bad = 0
|
||||
for fid in sorted(per):
|
||||
r = per[fid]
|
||||
if r["decision"] in ("KILL", "UNVERIFIED"):
|
||||
bad += 1
|
||||
print(f"| {fid} | {r['keep']} | {r['downgrade']} | {r['reject']} | {r['abstain']} | {r['decision']} |")
|
||||
print(f"\nKILL/UNVERIFIED: {bad} / {len(per)}")
|
||||
sys.exit(1 if bad else 0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user