1.5 KiB
1.5 KiB
Requirements
각 requirement 문서는 Markdown body 앞에 JSON front matter를 둔다.
File naming
req-NNN_<slug>.md
NNN: requirement ID의 세 자리 decimal number<slug>: requirement title을 나타내는 lowercase kebab-case ASCII slug
Metadata schema
{
"schema": "proofline.requirement/v1",
"id": "REQ-NNN",
"title": "사람이 읽는 제목",
"revision": "major.minor",
"status": "draft | approved | retired",
"depends_on": ["REQ-NNN"],
"applies_to": ["algorithm-name"],
"language": "ko"
}
id: repository 안에서 고유한 requirement identifierrevision: 사람이 읽는 requirement revision.draft상태에서 본문을 수정해도 올리지 않으며,approved상태로 전환할 때 또는 승인된 requirement의 의미를 변경하기 위해 재승인할 때만 올린다.status: requirement lifecycle 상태.approved는 명시적인 사용자 승인을 의미한다.depends_on: 선행 requirement identifier 목록applies_to: requirement가 적용되는 algorithm 또는 product 영역
Python parsing
front matter body는 JSON이므로 별도 dependency 없이 Python 표준 라이브러리로 읽을 수 있다.
import json
from pathlib import Path
text = Path("docs/requirements/req-001_algorithm-input-contract.md").read_text(encoding="utf-8")
_, metadata_json, _ = text.split("---", 2)
metadata = json.loads(metadata_json)
JSON front matter의 revision과 status가 문서의 단일 source of truth다.