9148c358d0
Topic_Agent/Topic_Blog/Topics/Topics_Biz/Topics_Meeting/Topics_Rag의 마크다운 지식 문서를 Topic_General/Topic_Programming/Topic_Graphic/Topic_Business 4개 카테고리로 재분류. - 중복 제거: frontmatter의 status:duplicate/merged + duplicate_of/redirect_to 필드로 자기 자신을 중복으로 선언한 리다이렉트 stub 1032개 제거, 완전 동일 내용 파일 472개 제거, 동일 파일명·다른 내용 충돌 시 더 큰(완전한) 버전만 유지(162개 제거) — 총 1639개 중복 제거. - 분류: 폴더 단위로 명확한 항목(AI_and_ML/Coding/Architecture 등 → Programming, Comfyui/Visual_Effects → Graphic, Topics_Biz/Topics_Meeting/사업 등 → Business, Poetic_Blog_Writing/창의성/Game_Design 등 → General)은 폴더 우선순위로, 나머지 혼재 폴더(Topic_Agent/Topic_Blog/Topics 루트/Thinking & Reasoning/Other/UI_UX_Assets)는 title/tags 키워드 스코어링으로 파일 단위 분류(불명확한 경우 General로 폴백). 원본 폴더명은 "From_*" 서브폴더로 보존해 추적 가능성 유지. - 최종 배치: Programming 2784 / General 1608 / Graphic 285 / Business 249 = 4926개 문서. - 에이전트 운영 상태(.astra/.agent/.obsidian/sessions/memory/_company/docs/lessons/_shared/src)는 지식 콘텐츠가 아니므로 재분류 대상에서 제외하고 원위치 유지. - Topics/Topic_email(상위 보호 폴더 Topic_email과 파일명 100% 중복) 삭제 — 보호 폴더 자체는 미변경. - 완전히 비게 된 Topic_Agent/Topic_Blog/Topics_Biz/Topics_Rag 폴더 제거.
6.9 KiB
6.9 KiB
id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
| id | title | category | status | canonical_id | aliases | duplicate_of | source_trust_level | confidence_score | verification_status | tags | raw_sources | last_reinforced | github_commit | tech_stack | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| wiki-2026-0508-requirements | Requirements | 10_Wiki/Topics | verified | self |
|
none | A | 0.9 | applied |
|
2026-05-10 | pending |
|
Requirements
매 한 줄
"매 잘 쓴 requirement = 절반의 implementation". Requirements engineering은 매 stakeholder의 needs를 매 unambiguous, testable, prioritized statements로 매 변환 — 2026 의 매 AI-aided spec drafting (Claude/GPT-5)이 매 standard, 매 BDD/Gherkin은 매 living spec format 의 dominant.
매 핵심
매 분류
- Functional (FR): 매 system이 매 무엇을 하는가 — input/output, behavior.
- Non-functional (NFR): 매 어떻게 — performance, security, scalability, accessibility, reliability (SLO/SLA).
- Constraints: tech stack, regulatory (GDPR, HIPAA), budget.
- Assumptions / Dependencies: external upon 매 의존.
매 Quality criteria (INVEST + SMART)
- Independent, Negotiable, Valuable, Estimable, Small, Testable (user stories).
- Specific, Measurable, Achievable, Relevant, Time-bound.
- 매 Ambiguity의 매 적: "fast", "user-friendly" → 매 numeric ("p95 < 200ms", "SUS > 80").
매 Formats (modern 2026)
- User story:
As a <role>, I want <goal> so that <benefit>. - Acceptance criteria: Given-When-Then (Gherkin) — executable via Cucumber/pytest-bdd.
- Job stories (alternative):
When <situation>, I want to <motivation>, so I can <outcome>. - PRD (Product Requirements Doc): living markdown in repo, AI-assisted draft.
- RFC / Design doc: technical spec for engineering decisions.
매 AI-aided workflow (2026)
- PM의 매 rough idea → Claude Opus 4.7 로 PRD draft.
- Engineering review → AI 의 매 ambiguity flags ("매 'fast'를 quantify").
- Gherkin scenarios 매 generate → directly executable.
- Trace matrix (req → test → code) 매 AI auto-link.
- Change requests → AI의 매 impact analysis (영향 받는 spec/test/code).
매 응용
- SaaS feature spec.
- Embedded system safety (DO-178C, ISO 26262 traceability).
- RFP/contract scope.
- AI agent task specification (prompt = 매 spec).
💻 패턴
User story + acceptance criteria
## US-142: Email-based password reset
**As a** registered user
**I want** to reset my password via email
**So that** I can regain access without contacting support
### Acceptance Criteria (Gherkin)
\`\`\`gherkin
Feature: Password reset
Scenario: Valid email triggers reset link
Given a user with email "alice@example.com" exists
When I POST /auth/reset with that email
Then a reset email is sent within 30 seconds
And the email contains a token valid for 1 hour
Scenario: Unknown email returns generic success
Given no user with email "ghost@example.com"
When I POST /auth/reset with that email
Then the response is 200 OK
And no email is sent
# Reason: avoid user enumeration
\`\`\`
### NFR
- p95 endpoint latency < 300ms
- Email delivery SLA: 99.5% within 60s
- Token: 256-bit, single-use, 1h TTL
pytest-bdd executable spec
# features/password_reset.feature → tests/test_password_reset.py
from pytest_bdd import scenarios, given, when, then
scenarios("../features/password_reset.feature")
@given('a user with email "alice@example.com" exists')
def alice(db):
db.users.insert(email="alice@example.com")
@when('I POST /auth/reset with that email')
def post_reset(client, ctx):
ctx["resp"] = client.post("/auth/reset", json={"email": "alice@example.com"})
@then('a reset email is sent within 30 seconds')
def email_sent(mailbox):
assert mailbox.last(timeout=30).to == "alice@example.com"
NFR table (SLO format)
| Category | Metric | Target | Measurement |
|------------|-------------------------|-----------------|-------------|
| Latency | p95 GET /search | < 200 ms | Prometheus |
| Throughput | sustained POST /events | 10k req/s | k6 load test|
| Avail. | API uptime (monthly) | 99.9% | StatusPage |
| Security | OWASP Top 10 compliance | 100% checklist | annual audit|
| A11y | WCAG 2.2 AA | 0 critical | axe-core CI |
Traceability matrix
# requirements/trace.yaml
US-142:
acceptance_tests: [test_password_reset.py::test_valid_email, test_password_reset.py::test_unknown_email]
code: [src/auth/reset.py, src/email/templates/reset.html]
related: [US-130, NFR-SEC-04]
AI-assisted PRD draft prompt
prompt = f"""You are a senior PM. Draft a PRD for: {feature_idea}
Output sections:
1. Problem (user pain quantified)
2. Goals / non-goals
3. User stories (INVEST format)
4. Acceptance criteria (Gherkin)
5. NFRs with measurable targets
6. Open questions
Flag every ambiguous adjective ('fast', 'easy') and demand a number."""
Change-impact analysis
def impact_of_change(req_id: str) -> dict:
"""Walk trace matrix to find affected artifacts."""
trace = yaml.safe_load(open("requirements/trace.yaml"))
node = trace[req_id]
return {
"tests": node["acceptance_tests"],
"code": node["code"],
"downstream_reqs": [r for r, n in trace.items() if req_id in n.get("related", [])],
}
매 결정 기준
| 상황 | Approach |
|---|---|
| Agile feature | User stories + Gherkin AC |
| Compliance-heavy (med, aero) | Formal SRS (IEEE 830) + traceability |
| Internal tool | Lightweight one-pager PRD |
| AI agent task | Structured prompt = spec |
| Cross-team API | OpenAPI/AsyncAPI as contract |
| Performance critical | Explicit SLO table |
기본값: User story + Gherkin AC + NFR table; AI-drafted, human-reviewed.
🔗 Graph
🤖 LLM 활용
언제: PRD draft, ambiguity detection, Gherkin generation, impact analysis. 언제 X: regulated safety-critical (FDA, FAA) 매 final sign-off는 매 human SME — LLM의 매 unverified.
❌ 안티패턴
- Vague adjectives: "fast", "scalable" without numbers.
- Solution masquerading as requirement: "Use Redis cache" (impl detail, not need).
- Untestable AC: "should feel intuitive" → 매 measurable proxy 의 부재.
- Spec drift: code changes 의 매 spec update 의 X — 매 living spec과 매 sync.
- Big bang requirements: 매 모든 feature 의 매 upfront freeze → agile 의 violation.
🧪 검증 / 중복
- Verified (IEEE 830-1998 ⇒ ISO/IEC/IEEE 29148:2018, Cohn user stories, Cucumber BDD).
- 신뢰도 A.
🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — full rewrite covering FR/NFR, user stories, Gherkin, AI-aided spec |