1680 lines
83 KiB
YAML
1680 lines
83 KiB
YAML
schema-version: 1
|
||
repository-snapshot-hash: sha256:f67f7223c7fd7123f3cdef81d251ad96cb75fd6e8c7a6208777721c2576b6cda
|
||
project-name: Org OS 하네스
|
||
languages: [Python, YAML, Markdown, JSON]
|
||
frameworks: [Claude Code]
|
||
facts:
|
||
# ── identity ────────────────────────────────────────────────────────────
|
||
- id: F-IDENTITY-CORE
|
||
category: identity
|
||
key: project-identity-and-purpose
|
||
value:
|
||
name: Org OS 하네스
|
||
purpose: 회사 전체를 AI 에이전트로 운영하는 파일 기반 운영체계로, 개발과 비즈니스(GTM/수익)를 함께 다룬다.
|
||
runtime: Claude Code 위의 subagent·project command·hook
|
||
source-of-truth: org-os/ 디렉터리(명세·상태의 단일 원천)
|
||
assertion-type: declared
|
||
confidence: high
|
||
evidence:
|
||
- path: CLAUDE.md
|
||
line-start: 1
|
||
line-end: 7
|
||
source-kind: project-documentation
|
||
- path: CLAUDE.md
|
||
line-start: 126
|
||
line-end: 129
|
||
source-kind: project-documentation
|
||
|
||
- id: F-IDENTITY-RUNTIME-COUPLING
|
||
category: identity
|
||
key: single-runtime-adapter
|
||
value:
|
||
adapter-directory: .claude
|
||
adapter-contents: [agents, commands, hooks, schemas, skills, tests, settings.json, tool-versions.yaml]
|
||
hook-package-subdirs: [hooks/bench_cascade, hooks/orgos/planning, hooks/orgos/state]
|
||
other-agent-runtime-adapter-directories-present: false
|
||
implication: 진입점(slash command)·강제(hook)는 Claude Code 어댑터를 통해서만 배선돼 있다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/settings.json
|
||
line-start: 1
|
||
line-end: 49
|
||
source-kind: claude-code-configuration
|
||
- path: .claude/commands
|
||
source-kind: directory-listing
|
||
symbol: 18 *.md command definitions
|
||
|
||
- id: F-IDENTITY-SNAPSHOT
|
||
category: identity
|
||
key: analyzed-tree-state
|
||
value:
|
||
analysis-date: '2026-07-20'
|
||
re-extraction-time: '13:36 (local)'
|
||
git-head: 00db337
|
||
head-subject: 'P4 final-fix follow: C1 fail-closed 테스트를 charge() overage로 실검증'
|
||
working-tree: dirty
|
||
changed-or-untracked-entries: 269
|
||
untracked-entries: 84
|
||
deleted-entries: 26
|
||
note: 분석 대상은 커밋된 HEAD가 아니라 현재 워킹 트리다. 이 값들은 13:36 재추출 시점의 것이며, 같은 트리를 다른 세션이 동시에 수정 중이었다(F-LIMIT-CONCURRENT-REFACTOR).
|
||
superseded-earlier-reading: '12:03 시점에는 changed-or-untracked 197 · untracked 75 · deleted 0이었다.'
|
||
assertion-type: executed
|
||
confidence: high
|
||
evidence:
|
||
- path: .git
|
||
source-kind: executed-command-output
|
||
symbol: 'git log --oneline -1 && git status --porcelain | wc -l'
|
||
|
||
- id: F-IDENTITY-NO-LICENSE
|
||
category: identity
|
||
key: license-file-absent
|
||
value:
|
||
license-file: null
|
||
note: 저장소 루트에 LICENSE/COPYING 파일이 없다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: .
|
||
source-kind: directory-listing
|
||
symbol: repository root has no LICENSE file
|
||
|
||
# ── workflow ────────────────────────────────────────────────────────────
|
||
- id: F-WORKFLOW-ENTRY
|
||
category: workflow
|
||
key: new-workflow-entrypoint
|
||
value:
|
||
command: /ceo-intake
|
||
executor-role: OPS-ORCH
|
||
author-role: EXEC-CEO
|
||
applies-to: [cascade, wave, light, venture-bootstrap]
|
||
intake-outputs: [decision-brief, workload-profile]
|
||
intake-exit-gate: [decision-brief-present, workload-profile-present, company-context-ready]
|
||
declares: [mode(divergent|converge), tier(light|standard|heavy)]
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 49
|
||
line-end: 54
|
||
source-kind: workflow-contract
|
||
- path: .claude/commands/ceo-intake.md
|
||
line-start: 1
|
||
line-end: 12
|
||
source-kind: command-definition
|
||
|
||
- id: F-WORKFLOW-PLAN-INVENTORY
|
||
category: workflow
|
||
key: declared-workflow-plans
|
||
value:
|
||
count: 5
|
||
plans: [cascade, wave, light, venture-bootstrap, design-direction]
|
||
graph-source-of-truth: org-os/06-agent-work/workflow-contracts.yaml
|
||
mirror-file: org-os/06-agent-work/execution-plans.yaml
|
||
mirror-status: 호환/문서용 mirror이며 런타임 정본이 아니다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 43
|
||
line-end: 47
|
||
source-kind: workflow-contract
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 108
|
||
line-end: 147
|
||
source-kind: workflow-contract
|
||
- path: org-os/06-agent-work/execution-plans.yaml
|
||
line-start: 1
|
||
line-end: 11
|
||
source-kind: execution-plan-mirror
|
||
|
||
- id: F-WORKFLOW-CASCADE
|
||
category: workflow
|
||
key: cascade-stage-map
|
||
value:
|
||
terminal-stage: released
|
||
default-tier: standard
|
||
stages:
|
||
- {stage: intake, command: ceo-intake, next: discovery, output: [decision-brief, workload-profile]}
|
||
- {stage: discovery, command: ground, next: decide, output: [grounding-package]}
|
||
- {stage: decide, command: decide, next: design, output: [executive-decision-packet]}
|
||
- {stage: design, command: design, next: spec, output: dynamic-bundle design-bundle}
|
||
- {stage: spec, command: spec, next: build, output: dynamic-bundle spec-bundle}
|
||
- {stage: build, command: build, next: verification, output: [completion-record]}
|
||
- {stage: verification, command: review-output, next: acceptance, output: [quality-gate-review]}
|
||
- {stage: acceptance, command: release-check, next: released, output: [release-decision]}
|
||
- {stage: released, command: null}
|
||
stage-exit-gates:
|
||
intake: [decision-brief-present, workload-profile-present, company-context-ready]
|
||
discovery: [grounding-evidence-present, option-set-present]
|
||
decide: [decision-packet-accepted, evidence-grade-min]
|
||
design: [design-accepted, design-direction-gate-satisfied]
|
||
spec: [spec-accepted, must-read-designs-accepted]
|
||
build: [completion-record-present]
|
||
verification: [quality-gate-passed, blocker-open-false]
|
||
acceptance: [release-approved, no-unresolved-critical-risks, human-gate]
|
||
released: []
|
||
release-exit-gates: [release-approved, no-unresolved-critical-risks, human-gate]
|
||
rework-transition: 'verification -> build (required-conditions: quality-gate-failed)'
|
||
ordering-note: discovery(ground)가 decide보다 앞선다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 46
|
||
line-end: 106
|
||
source-kind: workflow-contract
|
||
- path: org-os/06-agent-work/execution-plans.yaml
|
||
line-start: 13
|
||
line-end: 22
|
||
source-kind: execution-plan-mirror
|
||
|
||
- id: F-WORKFLOW-WAVE-LIGHT
|
||
category: workflow
|
||
key: wave-and-light-selection
|
||
value:
|
||
wave:
|
||
stages: [intake, plan, run, verification, acceptance, released]
|
||
commands: [ceo-intake, plan-wave, run-wave, review-output, release-check]
|
||
loop-stage: run
|
||
terminal-stage: released
|
||
default-tier: standard
|
||
stage-exit-gates:
|
||
intake: [decision-brief-present, workload-profile-present, company-context-ready]
|
||
plan: [wave-plan-present]
|
||
run: [completion-record-present]
|
||
verification: [quality-gate-passed, blocker-open-false]
|
||
acceptance: [release-approved, no-unresolved-critical-risks, human-gate]
|
||
released: []
|
||
light:
|
||
stages: [intake, run, verification, acceptance]
|
||
commands: [ceo-intake, run-wave, review-output]
|
||
omitted-stage: plan
|
||
terminal-stage: acceptance
|
||
default-tier: light
|
||
intended-for: 저위험·two-way-door·single-role이며 고객/매출/보안 영향이 없는 작업
|
||
stage-exit-gates:
|
||
intake: [decision-brief-present, workload-profile-present, company-context-ready]
|
||
run: [completion-record-present]
|
||
verification: [quality-gate-passed, blocker-open-false]
|
||
acceptance: []
|
||
wave-vs-light-release-gate:
|
||
wave-acceptance-transition: acceptance -> released
|
||
wave-acceptance-exit-gate: [release-approved, no-unresolved-critical-risks, human-gate]
|
||
light-acceptance-transition: null
|
||
light-acceptance-exit-gate: []
|
||
light-acceptance-command: null
|
||
asymmetry: wave의 acceptance는 released로 전이하며 human-gate를 포함한 3개 exit-gate를 갖는다. light의 acceptance는 terminal stage(command null · exit-gate [])이며 released로 가는 전이 자체가 없다.
|
||
wave-vs-cascade-acceptance: cascade.acceptance(line 97)와 wave.acceptance(line 115)의 exit-gate 리스트는 문자열이 동일하다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 108
|
||
line-end: 124
|
||
source-kind: workflow-contract
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 111
|
||
line-end: 116
|
||
source-kind: workflow-contract
|
||
symbol: wave.stages — per-stage exit-gate
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 115
|
||
line-end: 115
|
||
source-kind: workflow-contract
|
||
symbol: 'wave.acceptance exit-gate: [release-approved, no-unresolved-critical-risks, human-gate]'
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 119
|
||
line-end: 124
|
||
source-kind: workflow-contract
|
||
symbol: light.terminal-stage=acceptance and light.stages per-stage exit-gate
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 124
|
||
line-end: 124
|
||
source-kind: workflow-contract
|
||
symbol: 'light.acceptance { command: null, exit-gate: [] }'
|
||
- path: org-os/06-agent-work/execution-plans.yaml
|
||
line-start: 23
|
||
line-end: 37
|
||
source-kind: execution-plan-mirror
|
||
|
||
- id: F-WORKFLOW-VENTURE
|
||
category: workflow
|
||
key: venture-bootstrap
|
||
value:
|
||
entry: /ceo-intake --plan venture-bootstrap
|
||
subsequent-commands: [/venture-validate, /company-bootstrap]
|
||
stages: [intake, founder-setup, opportunity-discovery, venture-validation, venture-decision, company-context-commit, bootstrap-complete]
|
||
terminal-stage: bootstrap-complete
|
||
founder-input: org-os/01-company/founder-context.yaml
|
||
required-founder-status: filled
|
||
output: org-os/01-company/company-context.yaml
|
||
output-status: provisional
|
||
stage-exit-gates:
|
||
intake: [decision-brief-present]
|
||
founder-setup: [founder-context-present]
|
||
opportunity-discovery: [opportunity-clusters-present]
|
||
venture-validation: [venture-options-validated]
|
||
venture-decision: [venture-decision-accepted, human-acceptance-receipt-present]
|
||
company-context-commit: [company-context-provisional-committed, company-context-lint-passed, company-context-artifact-recorded]
|
||
bootstrap-complete: []
|
||
commit-exit-gate: [company-context-provisional-committed, company-context-lint-passed, company-context-artifact-recorded]
|
||
company-context-status-vocabulary: [template, provisional, operating]
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 126
|
||
line-end: 135
|
||
source-kind: workflow-contract
|
||
- path: org-os/06-agent-work/execution-plans.yaml
|
||
line-start: 38
|
||
line-end: 47
|
||
source-kind: execution-plan-mirror
|
||
- path: CLAUDE.md
|
||
line-start: 88
|
||
line-end: 92
|
||
source-kind: project-documentation
|
||
symbol: 'Venture Bootstrap 섹션'
|
||
|
||
- id: F-WORKFLOW-DESIGN-DIRECTION
|
||
category: workflow
|
||
key: design-direction-child-workflow
|
||
value:
|
||
relationship: 제품 cascade에 종속된 child workflow
|
||
stages: [design-direction-intake, design-direction-discovery, design-direction-divergence, design-direction-decision, design-direction-prototype, design-direction-critique, design-direction-finalize, design-direction-approved]
|
||
terminal-stage: design-direction-approved
|
||
parent-binding: [parent-workflow-id, product-decision-id, direction-input-brief-sha256]
|
||
rework-transitions:
|
||
- critique -> prototype (critique-revision-requested)
|
||
- critique -> divergence (concept-rejection-recorded)
|
||
stage-exit-gates:
|
||
design-direction-intake: [parent-binding-present, direction-input-brief-valid]
|
||
design-direction-discovery: [direction-discovery-present, divergence-charter-present]
|
||
design-direction-divergence: [directions-diverged, divergence-audit-passed]
|
||
design-direction-decision: [selected-direction-accepted]
|
||
design-direction-prototype: [winner-prototype-present]
|
||
design-direction-critique: [direction-critique-passed]
|
||
design-direction-finalize: [approved-direction-valid, approval-receipt-bound, parent-approval-link-recorded]
|
||
design-direction-approved: []
|
||
final-artifact: approved-direction
|
||
approval-payload-fields: [parent-workflow-id, child-workflow-id, product-decision-id, direction-input-brief-sha256, selected-direction-ref, selected-direction-sha256, winner-prototype-ref, winner-prototype-sha256]
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 137
|
||
line-end: 150
|
||
source-kind: workflow-contract
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 25
|
||
line-end: 25
|
||
source-kind: workflow-contract
|
||
- path: org-os/06-agent-work/execution-plans.yaml
|
||
line-start: 48
|
||
line-end: 59
|
||
source-kind: execution-plan-mirror
|
||
|
||
- id: F-WORKFLOW-COMMAND-INVENTORY
|
||
category: workflow
|
||
key: slash-command-inventory
|
||
value:
|
||
count: 18
|
||
commands: [build, ceo-intake, company-bootstrap, consult, decide, design, design-direction, design-review, design-system, doctor, ground, plan-wave, release-check, review-output, run-cascade, run-wave, spec, venture-validate]
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/commands
|
||
source-kind: directory-listing
|
||
symbol: 18 *.md files
|
||
- path: .claude/hooks/lint_refs.py
|
||
source-kind: executed-command-output
|
||
symbol: 'OK lint_refs: 18 command 참조 + 75 agent skills 참조 모두 해결됨 (13:36)'
|
||
|
||
- id: F-WORKFLOW-SPECIALIZED
|
||
category: workflow
|
||
key: specialized-entrypoints
|
||
value:
|
||
/run-cascade: 전체 cascade를 state_engine으로 순회하는 얇은 상위 드라이버. 평행 엔진 금지, human-gate에서 정지(자동 승인·자동 완주 금지).
|
||
/design-direction: 불변 direction-input-brief에서 3안 독립발산 → 단일수렴 → 승자 prototype → 비평 루프 → approved-direction 산출.
|
||
/design-review: winner-prototype을 7-lens 패널로 감사. producer-run-id != reviewer-run-id 강제. 상태 전이는 하지 않는다.
|
||
/design-system: 기존 스택 discovery 후 reuse/adapt/create를 판정하고 코드 디자인 시스템·화면과 headless chrome 렌더 검증을 산출.
|
||
/consult: engagement 유형(비즈니스/문서)으로 FAM-CONSULTING 또는 FAM-DOC-CONSULT를 분기해 문서와 덱을 산출.
|
||
/doctor: python3 .claude/hooks/doctor.py 실행 preflight를 감싸는 커맨드.
|
||
assertion-type: declared
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/commands/run-cascade.md
|
||
line-start: 1
|
||
line-end: 13
|
||
source-kind: command-definition
|
||
- path: .claude/commands/design-direction.md
|
||
line-start: 1
|
||
line-end: 6
|
||
source-kind: command-definition
|
||
- path: .claude/commands/design-review.md
|
||
line-start: 1
|
||
line-end: 6
|
||
source-kind: command-definition
|
||
- path: .claude/commands/design-system.md
|
||
line-start: 1
|
||
line-end: 10
|
||
source-kind: command-definition
|
||
- path: .claude/commands/consult.md
|
||
line-start: 1
|
||
line-end: 10
|
||
source-kind: command-definition
|
||
- path: .claude/commands/doctor.md
|
||
line-start: 1
|
||
line-end: 10
|
||
source-kind: command-definition
|
||
|
||
- id: F-WORKFLOW-HUMAN-GATE-MAP
|
||
category: workflow
|
||
key: human-approval-tokens-across-plans
|
||
value:
|
||
scope: org-os/06-agent-work/workflow-contracts.yaml의 exit-gate와 side-transition에 문자 그대로 등장하는 사람 승인 토큰만 계수한다.
|
||
human-gate:
|
||
appears-in: [cascade.acceptance, wave.acceptance]
|
||
occurrences: 2
|
||
full-exit-gate: [release-approved, no-unresolved-critical-risks, human-gate]
|
||
guards-transition: acceptance -> released
|
||
note: 두 plan의 exit-gate 리스트는 문자열이 동일하다.
|
||
human-acceptance-receipt-present:
|
||
appears-in: [venture-bootstrap.venture-decision]
|
||
occurrences: 1
|
||
full-exit-gate: [venture-decision-accepted, human-acceptance-receipt-present]
|
||
guards-transition: venture-decision -> company-context-commit
|
||
human-instruction-applied-if-needed:
|
||
appears-in: [side-transitions blocked -> <resume>]
|
||
occurrences: 1
|
||
required-conditions: [resume-condition-satisfied, human-instruction-applied-if-needed]
|
||
plans-with-no-human-literal-in-exit-gates: [light, design-direction]
|
||
light-explanation: light의 terminal-stage는 acceptance이고 그 stage는 command null · exit-gate []다. released로 가는 전이가 정의돼 있지 않으므로 release 사람 게이트가 놓일 자리가 없다.
|
||
design-direction-explanation: design-direction-finalize의 exit-gate에는 approval-receipt-bound와 parent-approval-link-recorded가 있으나 human-* 리터럴 토큰은 없다.
|
||
terminal-stage-regularity:
|
||
rule: 5개 plan의 terminal stage는 모두 command null · exit-gate []다.
|
||
instances:
|
||
cascade.released: 101
|
||
wave.released: 116
|
||
light.acceptance: 124
|
||
venture-bootstrap.bootstrap-complete: 135
|
||
design-direction.design-direction-approved: 147
|
||
reading: 빈 exit-gate는 '게이트가 없다'가 아니라 '종단 stage라 다음 전이가 없다'를 뜻한다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 97
|
||
line-end: 97
|
||
source-kind: workflow-contract
|
||
symbol: cascade.acceptance exit-gate contains human-gate
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 115
|
||
line-end: 115
|
||
source-kind: workflow-contract
|
||
symbol: wave.acceptance exit-gate contains human-gate
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 124
|
||
line-end: 124
|
||
source-kind: workflow-contract
|
||
symbol: 'light.acceptance { command: null, exit-gate: [] } — terminal'
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 133
|
||
line-end: 133
|
||
source-kind: workflow-contract
|
||
symbol: venture-decision exit-gate contains human-acceptance-receipt-present
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 146
|
||
line-end: 147
|
||
source-kind: workflow-contract
|
||
symbol: design-direction-finalize approval-receipt-bound; terminal stage exit-gate []
|
||
- path: org-os/06-agent-work/workflow-contracts.yaml
|
||
line-start: 154
|
||
line-end: 154
|
||
source-kind: workflow-contract
|
||
symbol: 'blocked -> <resume> required-conditions human-instruction-applied-if-needed'
|
||
|
||
# ── architecture ────────────────────────────────────────────────────────
|
||
- id: F-ARCH-DIRECTORIES
|
||
category: architecture
|
||
key: repository-directory-responsibilities
|
||
value:
|
||
org-os/00-role-registry: 역할·family·lens·상태 전이·권한·method 계약 활성화의 원천
|
||
org-os/01-company: company-context·founder-context (회사 고유 사실)
|
||
org-os/02-capabilities: README stub
|
||
org-os/03-products: README stub
|
||
org-os/04-architecture: README stub
|
||
org-os/05-operations: README stub
|
||
org-os/06-agent-work: workflow·artifact·협업·실행 계약과 generated/artifact-registry.yaml
|
||
org-os/07-knowledge-base: README stub
|
||
.claude/commands: 사용자 workflow 진입점(18개)
|
||
.claude/agents: registry에서 생성되는 concrete 실행 역할 카드(75개 — family/resolver/router 카드는 생성하지 않는다)
|
||
.claude/skills: 역할별 method skill과 capability skill(78개 디렉터리)
|
||
.claude/hooks: 상태 엔진·검증·증거 원장·렌더러·생성기·벤치마크(40개 최상위 .py + bench_cascade/ 및 orgos/ 패키지)
|
||
.claude/hooks/orgos: planning(role_selector·coverage_model·intake_classifier·budget_planner·task_graph)과 state(event_store·materializer·transition_engine) 하위 패키지
|
||
.claude/schemas: report와 typed artifact JSON Schema(44개)
|
||
.claude/tests: 하네스 강제기·workflow 계약 테스트(32개 test_*.py + run_all.py)
|
||
benchmark: golden task 벤치마크와 P4 cascade 벤치마크 정본 입력
|
||
docs/superpowers: 설계 spec과 구현 plan
|
||
_sandbox: 테스트용 워크스페이스
|
||
hyeonworks: 실제 제품 프로젝트 워크스페이스
|
||
repomix: 소스에서 재생성되는 패킹 산출물(gitignored)
|
||
assertion-type: derived
|
||
confidence: high
|
||
evidence:
|
||
- path: CLAUDE.md
|
||
line-start: 5
|
||
line-end: 46
|
||
source-kind: architecture-documentation
|
||
- path: .claude/hooks/_workspace.py
|
||
line-start: 1
|
||
line-end: 15
|
||
source-kind: runtime-path-implementation
|
||
- path: .gitignore
|
||
line-start: 49
|
||
line-end: 50
|
||
source-kind: ignore-policy
|
||
- path: .claude/hooks/orgos
|
||
source-kind: directory-listing
|
||
symbol: 'orgos/planning (5 modules) + orgos/state (3 modules) — new since 12:03'
|
||
|
||
- id: F-ARCH-ROLE-MODEL
|
||
category: architecture
|
||
key: role-family-lens-model
|
||
value:
|
||
reference-ai-roles: 75
|
||
roles-yaml-version: 4
|
||
final-human-owner: HUMAN-001
|
||
routing-families: 28
|
||
capability-families-version: 6
|
||
evaluation-lenses: 12
|
||
lens-registry-version: 2
|
||
generated-agent-cards-contract: 75
|
||
count-rule: role-registry.roles 항목만 AI role agent로 계수한다. team topology·EA layer·workflow gate는 role 수를 늘리지 않는다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: org-os/00-role-registry/roles.yaml
|
||
line-start: 1
|
||
line-end: 22
|
||
source-kind: role-registry
|
||
- path: org-os/00-role-registry/capability-families.yaml
|
||
line-start: 9
|
||
line-end: 13
|
||
source-kind: family-registry
|
||
- path: org-os/00-role-registry/lens-registry.yaml
|
||
line-start: 13
|
||
line-end: 25
|
||
source-kind: lens-registry
|
||
- path: .claude/hooks/gen_agents.py
|
||
line-start: 516
|
||
line-end: 523
|
||
source-kind: generator-contract
|
||
|
||
- id: F-ARCH-AGENT-CARD-COMPOSITION
|
||
category: architecture
|
||
key: generated-agent-card-composition
|
||
value:
|
||
total: 75
|
||
fan-out-workers: 43
|
||
collapse-concrete-workers: 19
|
||
direct-single-member-workers: 10
|
||
synthesis-leads: 3
|
||
family-resolvers: 0
|
||
routers: 0
|
||
family-metadata-cards: 0
|
||
executable-family-agents: 0
|
||
profiles-consumed: 75
|
||
identity: 75 reference roles == 75 executable concrete cards (1:1)
|
||
generation-rule: .claude/agents/*.md는 생성물이며 수기 편집 금지. role-profiles/capability-families를 고치고 gen_agents.py를 재실행한다.
|
||
superseded-earlier-reading: '12:03 시점에는 101장(43 fan-out + 19 collapse + 10 direct + 3 lead + 16 resolver + 10 router)이었다. 이후 동시 리팩터가 resolver/router/family 카드를 제거해 75장이 됐다(fam-*.md 26개 삭제).'
|
||
assertion-type: executed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/hooks/gen_agents.py
|
||
line-start: 516
|
||
line-end: 523
|
||
source-kind: generator-contract
|
||
symbol: '개수 계약: 75 reference roles == 75 executable concrete cards'
|
||
- path: .claude/hooks/gen_agents.py
|
||
line-start: 531
|
||
line-end: 533
|
||
source-kind: generator-implementation
|
||
- path: .claude/hooks/gen_agents.py
|
||
source-kind: executed-command-output
|
||
symbol: 'OK gen_agents: 75 concrete agents (43 fan-out workers + 19 collapse workers + 10 direct workers + 3 lead; family metadata cards=0) validated (profiles=75) — re-run 13:36, exit 0'
|
||
|
||
- id: F-ARCH-COLLABORATION
|
||
category: architecture
|
||
key: fan-out-collapse-policy
|
||
value:
|
||
family-defaults: {fan-out: 21, collapse: 6, n/a: 1}
|
||
rule: 코드·실행 산출물을 만드는 family만 collapse. 판단·설계·분석·수익 산출물을 만드는 family는 fan-out.
|
||
fan-out-driver: Orchestrator(메인 세션). subagent는 subagent를 호출할 수 없다.
|
||
synthesis-rehydration: 종합·결정 지점에서 상위는 하위 .report.yaml 전문을 읽는다. 요약본 대체 금지.
|
||
wave-max-concurrent-role-agents: 5
|
||
wave-semantics: concurrency-cap-not-barrier
|
||
heavy-tier-parallel-audit: {min-independent-verifiers: 3, verifier-prompt-stance: refute, kill-on: majority-refute}
|
||
verifier-independence: 검증자 패밀리는 자기 패밀리가 작성한 산출물을 검증할 수 없다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: org-os/00-role-registry/capability-families.yaml
|
||
line-start: 30
|
||
line-end: 34
|
||
source-kind: family-registry
|
||
- path: org-os/06-agent-work/execution-policy.yaml
|
||
line-start: 10
|
||
line-end: 23
|
||
source-kind: execution-policy
|
||
- path: org-os/06-agent-work/execution-policy.yaml
|
||
line-start: 29
|
||
line-end: 58
|
||
source-kind: execution-policy
|
||
|
||
- id: F-ARCH-STATE-ARTIFACT
|
||
category: architecture
|
||
key: trusted-state-and-artifact-runtime
|
||
value:
|
||
workflow-contract-source: org-os/06-agent-work/workflow-contracts.yaml
|
||
workflow-contract-responsibility: stage graph·role capability·artifact kind·bundle·exit gate
|
||
canonical-runtime-events: [workflow-events.jsonl, artifact-events.jsonl, acceptance-events.jsonl, human-signoff.jsonl]
|
||
materialized-view: workflow.yaml (disposable)
|
||
lifecycle: init-workflow -> complete-stage -> enter-stage
|
||
trust-rule: caller가 제공한 gate fact·artifact kind·option count·evidence grade는 신뢰하지 않는다. 제출된 불변 바이트에서 파생한다.
|
||
artifact-identity: 불변 artifact id + SHA-256 스냅샷
|
||
generated-registry: org-os/06-agent-work/generated/artifact-registry.yaml
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/hooks/state_engine.py
|
||
line-start: 2
|
||
line-end: 11
|
||
source-kind: runtime-implementation
|
||
- path: .claude/hooks/artifact_contract.py
|
||
line-start: 2
|
||
line-end: 7
|
||
source-kind: artifact-validation-implementation
|
||
- path: org-os/06-agent-work/generated/artifact-registry.yaml
|
||
line-start: 1
|
||
line-end: 4
|
||
source-kind: artifact-registry
|
||
|
||
- id: F-ARCH-ARTIFACT-REGISTRY
|
||
category: architecture
|
||
key: compiled-artifact-registry-size
|
||
value:
|
||
artifact-kind-count: 186
|
||
currency: 13:36 재검증됨 — --check exit 0, 드리프트 없음. artifact-type-vocabulary.yaml이 +95행 확장(161 types)됐으나 생성 registry의 kind 수는 변하지 않았다.
|
||
generated-by: .claude/hooks/compile_artifact_registry.py
|
||
drift-detection: source-sha256 맵으로 원본 YAML 변경을 감지하며 --check가 run_all.py preflight에 포함된다.
|
||
typed-schema-count: 44
|
||
assertion-type: executed
|
||
confidence: high
|
||
evidence:
|
||
- path: org-os/06-agent-work/generated/artifact-registry.yaml
|
||
line-start: 49
|
||
line-end: 49
|
||
source-kind: artifact-registry
|
||
symbol: 'artifact-kind-count: 186'
|
||
- path: .claude/hooks/compile_artifact_registry.py
|
||
source-kind: executed-command-output
|
||
symbol: '[artifact-registry] OK: 186 kinds (exit 0, re-run 13:36 — --check is read-only, returns before write at lines 278-289)'
|
||
- path: .claude/schemas
|
||
source-kind: directory-listing
|
||
symbol: 44 *.json schema files
|
||
|
||
- id: F-ARCH-METHOD-CONTRACT
|
||
category: architecture
|
||
key: role-method-skill-and-contract-layer
|
||
value:
|
||
method-procedure-source: org-os/00-role-registry/role-working-methods/
|
||
routing-source: org-os/00-role-registry/method-skill-registry.yaml
|
||
generated-skill-dir: .claude/skills
|
||
method-skill-naming: <role>-method
|
||
skill-directories: 78
|
||
roles-with-method-skill: 75
|
||
contract-v2-count: 75
|
||
active-contracts: 79
|
||
capability-sections-resolved: 5
|
||
migration-debt: 0
|
||
contract-machinery-numbers-currency: 'SUPERSEDED — contract-v2-count·active-contracts·capability-sections-resolved·migration-debt·roles-with-method-skill은 모두 12:03 doctor 출력에서 얻었고 재검증하지 않았다. method-contract-activations.yaml은 그 이후 수정됐다([M]).'
|
||
independently-corroborated-at-13:36: {roles: 75 (roles.yaml total-role-count + gen_agents profiles=75), skill-directories: 78 (디렉터리 수)}
|
||
activation-record: org-os/00-role-registry/method-contract-activations.yaml
|
||
activation-fields: [status, contract-sha256, validation-report, validation-report-sha256, acceptance-workflow, activated-by, activated-at]
|
||
assertion-type: executed
|
||
confidence: high
|
||
evidence:
|
||
- path: org-os/00-role-registry/method-skill-registry.yaml
|
||
line-start: 1
|
||
line-end: 8
|
||
source-kind: method-skill-registry
|
||
- path: org-os/00-role-registry/method-contract-activations.yaml
|
||
line-start: 1
|
||
line-end: 16
|
||
source-kind: method-contract-activation-record
|
||
- path: .claude/hooks/doctor.py
|
||
source-kind: superseded-command-output
|
||
symbol: 'method-skill 배선 OK (75 roles · 75 skills) / 계약 machinery OK (v2 75·active 79·capability-section 5·migration-debt 0) — observed 12:03, not re-run'
|
||
- path: .claude/skills
|
||
source-kind: directory-listing
|
||
symbol: '78 skill directories present at 13:36 (unchanged)'
|
||
|
||
- id: F-ARCH-HOOKS
|
||
category: architecture
|
||
key: claude-code-hook-wiring
|
||
value:
|
||
PreToolUse: {script: guard_tools.py, matcher: 'Bash|Write|Edit|NotebookEdit|Read|Grep|Glob|WebFetch|WebSearch|Agent|Task'}
|
||
PostToolUse:
|
||
- {script: evidence_ledger.py, matcher: 'Bash|Write|Edit'}
|
||
- {script: 'usage_observer.py --event tool', matcher: 'Bash|Write|Edit|NotebookEdit|Read|Grep|Glob|WebFetch|WebSearch'}
|
||
SubagentStart: [subagent_register.py, 'usage_observer.py --event start']
|
||
SubagentStop: {scripts: ['usage_observer.py --event stop', stop_validate.py], mode: fail-closed}
|
||
Stop: {script: 'stop_validate.py --main', mode: advisory}
|
||
wiring-currency: '13:36 재추출 — usage_observer.py가 PostToolUse 2번째 matcher와 SubagentStart/SubagentStop에 새로 배선됐고 PreToolUse matcher에 WebFetch|WebSearch가 추가됐다. 12:03 추출에는 usage_observer가 없었다.'
|
||
permissions-deny: [Read(./.env), Read(./.env.*), Read(**/.env), Read(**/.env.*), Read(**/id_rsa), Read(**/id_rsa.*), Read(**/.aws/credentials), Read(**/.ssh/**), 'Bash(rm -rf:*)', 'Bash(rm -fr:*)']
|
||
permissions-ask: ['Bash(git push:*)', 'Bash(gh pr create:*)', 'Bash(gh pr merge:*)', 'Bash(kubectl:*)', 'Bash(terraform apply:*)', 'Bash(docker push:*)', 'Bash(helm upgrade:*)', 'Bash(serverless deploy:*)']
|
||
primary-boundary: Claude Code 네이티브 permission 시스템
|
||
secondary-boundary: guard_tools.py(defense-in-depth)
|
||
activation-condition: Claude Code가 이 저장소의 .claude/settings.json을 로드한 세션에서만 강제가 동작한다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/settings.json
|
||
line-start: 3
|
||
line-end: 49
|
||
source-kind: claude-code-configuration
|
||
symbol: hooks block
|
||
- path: .claude/settings.json
|
||
line-start: 19
|
||
line-end: 25
|
||
source-kind: claude-code-configuration
|
||
symbol: 'PostToolUse 2nd matcher -> usage_observer.py --event tool'
|
||
- path: .claude/settings.json
|
||
line-start: 50
|
||
line-end: 75
|
||
source-kind: claude-code-configuration
|
||
symbol: permissions block (deny 10 · ask 8)
|
||
- path: .claude/hooks/guard_tools.py
|
||
line-start: 2
|
||
line-end: 12
|
||
source-kind: guard-implementation
|
||
- path: CLAUDE.md
|
||
line-start: 70
|
||
line-end: 70
|
||
source-kind: runtime-limit-documentation
|
||
symbol: 'hook 강제는 설정(.claude/settings.json) 활성 시에만 동작한다'
|
||
|
||
- id: F-ARCH-EVIDENCE-GRADING
|
||
category: architecture
|
||
key: receipt-grounded-evidence-validation
|
||
value:
|
||
report-contract: report-header(BLUF) — bottom-line, decision-needed(+approver), confidence, risks, evidence[]
|
||
evidence-grades: E0~E5
|
||
receipt-ledger: <workspace>/evidence/ledger.jsonl
|
||
receipt-fields: [tool_use_id, tool_name, ts, cwd, command, exit_code, stdout_sha256, artifact_path, artifact_sha256]
|
||
enforcement: E4/E5 주장은 evidence-ledger의 실제 receipt(command+exit_code:0 또는 artifact_sha256)와 대조되며 receipt가 없으면 차단된다.
|
||
dissent-rule: synthesis 보고서는 linked-reports(실존)와 conflicts/dissent 리스트가 필수다.
|
||
typed-verifier-runner: .claude/hooks/verify_run.py — 검증자를 직접 실행해 exit status·argv·출력 해시·workflow/session/agent 문맥을 함께 receipt로 남긴다(셸 미사용).
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/hooks/validate_report.py
|
||
line-start: 2
|
||
line-end: 16
|
||
source-kind: report-validator-implementation
|
||
- path: .claude/hooks/evidence_ledger.py
|
||
line-start: 2
|
||
line-end: 14
|
||
source-kind: evidence-ledger-implementation
|
||
- path: .claude/hooks/verify_run.py
|
||
line-start: 2
|
||
line-end: 8
|
||
source-kind: verifier-runner-implementation
|
||
- path: CLAUDE.md
|
||
line-start: 61
|
||
line-end: 62
|
||
source-kind: project-documentation
|
||
symbol: 'report-header(BLUF) 강제 + evidence 없는 confidence:High 금지 / E4·E5 receipt 대조'
|
||
|
||
# ── artifacts / workspace ───────────────────────────────────────────────
|
||
- id: F-ARTIFACT-LAYOUT
|
||
category: artifacts
|
||
key: workspace-resolution-and-layout
|
||
value:
|
||
resolution-order: [ORGOS_WORKSPACE environment variable, .orgos-workspace pointer file]
|
||
pointer-parse-rule: 첫 non-comment·non-blank 줄
|
||
relative-vs-absolute: 상대값이면 repo root 기준, 절대경로면 그대로 사용
|
||
unresolved-behavior: WorkspaceNotSetError. require_workspace(advisory=False)를 쓰는 운영 훅은 exit 2로 fail-closed.
|
||
advisory-degrade: require_workspace(advisory=True)를 쓰는 계측 훅(evidence_ledger)은 경고 후 None을 반환하고 도구 실행을 막지 않는다.
|
||
directories:
|
||
completion-records: <workspace>/completion-records/<workflow>/
|
||
evidence: <workspace>/evidence/
|
||
reports: <workspace>/reports/
|
||
state: <workspace>/state/
|
||
slack-inbox: <workspace>/slack-inbox/
|
||
slack-outbox: <workspace>/slack-outbox/
|
||
design-system: <workspace>/design-system/
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/hooks/_workspace.py
|
||
line-start: 6
|
||
line-end: 15
|
||
source-kind: runtime-path-implementation
|
||
- path: .claude/hooks/_workspace.py
|
||
line-start: 28
|
||
line-end: 64
|
||
source-kind: runtime-path-implementation
|
||
- path: .claude/hooks/_workspace.py
|
||
line-start: 67
|
||
line-end: 118
|
||
source-kind: runtime-path-implementation
|
||
|
||
- id: F-ARTIFACT-CURRENT-WORKSPACES
|
||
category: artifacts
|
||
key: workspaces-present-in-tree
|
||
value:
|
||
pointer-file-value: hyeonworks
|
||
pointer-file-line: 20
|
||
test-workspace: _sandbox
|
||
test-workspace-convention: 테스트·CI는 명령마다 ORGOS_WORKSPACE=_sandbox를 명시한다.
|
||
product-workspace: hyeonworks
|
||
hyeonworks-subdirectories: [app, completion-records, design, design-direction, evidence, state]
|
||
sandbox-subdirectories: [completion-records, evidence, reports, state]
|
||
note: 과거에는 포인터가 의도적으로 비어 있었으나 현재 워킹 트리에서는 hyeonworks로 채워져 있다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: .orgos-workspace
|
||
line-start: 17
|
||
line-end: 20
|
||
source-kind: workspace-pointer
|
||
- path: hyeonworks
|
||
source-kind: directory-listing
|
||
- path: _sandbox
|
||
source-kind: directory-listing
|
||
- path: CLAUDE.md
|
||
line-start: 64
|
||
line-end: 64
|
||
source-kind: project-documentation
|
||
symbol: '운영 실행은 workspace 필수(#5)'
|
||
|
||
- id: F-ARTIFACT-PROVENANCE
|
||
category: artifacts
|
||
key: immutable-reports-and-receipts
|
||
value:
|
||
report-path: <workspace>/completion-records/<workflow>/<role>-<UTC timestamp>.report.yaml
|
||
report-policy: .report.yaml은 덮어쓰기·수정 금지(guard_tools 강제). 재작업도 new_report.py로 새 파일을 발급한다.
|
||
human-readable-render: render_report.py가 .report.yaml에서 MD를 생성하고 reports/INDEX.md가 목차 역할을 한다.
|
||
acceptance-history: append-only acceptance event로 관리
|
||
receipt-ledger: <workspace>/evidence/ledger.jsonl
|
||
receipt-records: [executed command and exit code, stdout sha256, written artifact path and SHA-256]
|
||
receipt-hook-limitation: workspace를 해석하지 못하면 계측을 생략하고 도구 실행 자체는 막지 않는다.
|
||
derived-dashboards: [reports/TOKENS.md (token_ledger), reports/KPI.md (kpi_ledger)]
|
||
dashboard-honesty-rule: kpi_ledger는 각 KPI를 measured/derived · manual · unmeasured로 구분 표기한다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/hooks/new_report.py
|
||
line-start: 2
|
||
line-end: 20
|
||
source-kind: report-path-implementation
|
||
- path: .claude/hooks/evidence_ledger.py
|
||
line-start: 2
|
||
line-end: 14
|
||
source-kind: evidence-ledger-implementation
|
||
- path: .claude/hooks/kpi_ledger.py
|
||
line-start: 2
|
||
line-end: 10
|
||
source-kind: kpi-collector-implementation
|
||
- path: CLAUDE.md
|
||
line-start: 54
|
||
line-end: 54
|
||
source-kind: project-documentation
|
||
symbol: '2단 보고 — .report.yaml=SoT, render_report.py가 MD 생성, reports/INDEX.md 목차'
|
||
|
||
# ── prerequisites ───────────────────────────────────────────────────────
|
||
- id: F-PREREQ-TOOLS
|
||
category: prerequisites
|
||
key: runtime-tool-versions
|
||
value:
|
||
required:
|
||
python: {minimum: '3.10', tested: '3.12.3', why: hook·validator·test 런타임}
|
||
pyyaml: {minimum: '6.0', tested: '6.0.1', pinned: '6.0.1', why: 모든 SSOT YAML 파싱}
|
||
recommended:
|
||
jsonschema: {minimum: '4.0', tested: '4.10.3', pinned: '4.10.3', degrade: 없으면 최소검증 폴백}
|
||
node: {minimum: '18.0', tested: '24.14.0', why: design-system(vite build)·preview_ui}
|
||
d2: {minimum: '0.6', tested: '0.7.1', why: diagram-as-code 실물 렌더}
|
||
optional:
|
||
marp: {minimum: '3.0', tested: null, fallback: HTML deck}
|
||
checked-by: .claude/hooks/doctor.py가 tool-versions.yaml을 읽어 런타임 버전을 대조한다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/tool-versions.yaml
|
||
line-start: 1
|
||
line-end: 16
|
||
source-kind: tool-version-configuration
|
||
- path: requirements.txt
|
||
line-start: 1
|
||
line-end: 7
|
||
source-kind: dependency-manifest
|
||
|
||
- id: F-PREREQ-INSTALL
|
||
category: prerequisites
|
||
key: dependency-install-procedure
|
||
value:
|
||
command: pip install -r requirements.txt
|
||
third-party-packages: [PyYAML==6.0.1, jsonschema==4.10.3]
|
||
note: 이 둘 외에는 Python 표준 라이브러리만 사용한다고 매니페스트가 선언한다.
|
||
same-for: [로컬, CI]
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: requirements.txt
|
||
line-start: 1
|
||
line-end: 7
|
||
source-kind: dependency-manifest
|
||
- path: .github/workflows/ci.yml
|
||
line-start: 30
|
||
line-end: 31
|
||
source-kind: CI-workflow
|
||
|
||
- id: F-PREREQ-UI
|
||
category: prerequisites
|
||
key: design-system-preview-tools
|
||
value:
|
||
required-for-full-render-check: [탐지된 패키지 매니저와 프로젝트 빌드 명령, Google Chrome 또는 Chromium 호환 실행 파일]
|
||
checked-properties: [비어있지 않은 mounted DOM, 생성된 JavaScript 번들, CSS 대비, 키보드 focus 가시성, 반응형 viewport 스크린샷]
|
||
limitation: render health를 검사하지만 시각적 차별성·타이포그래피·비례·spacing의 미학 품질은 판정하지 않는다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/hooks/preview_ui.py
|
||
line-start: 2
|
||
line-end: 41
|
||
source-kind: UI-verification-implementation
|
||
- path: .claude/hooks/preview_ui.py
|
||
line-start: 54
|
||
line-end: 62
|
||
source-kind: UI-verification-implementation
|
||
|
||
# ── verification ────────────────────────────────────────────────────────
|
||
- id: F-VERIFY-SUITE
|
||
category: verification
|
||
key: full-test-runner
|
||
value:
|
||
entrypoint: .claude/tests/run_all.py
|
||
documented-invocation: CLAUDE_PROJECT_DIR="$PWD" ORGOS_WORKSPACE=_sandbox python3 .claude/tests/run_all.py
|
||
preflight: [compile_artifact_registry.py --check, doctor.py, lint_refs.py]
|
||
test-discovery: .claude/tests/test_*.py (재추출 시점 32개)
|
||
execution: suite별로 순차 실행하며 새 프로세스 그룹에서 시작한다.
|
||
per-suite-timeout-seconds: 300
|
||
timeout-override-env: ORGOS_TEST_TIMEOUT
|
||
timeout-handling: SIGTERM 후 필요 시 SIGKILL로 프로세스 그룹 종료
|
||
failure-contract: 실패하거나 timeout된 suite가 하나라도 있으면 exit 1
|
||
no-preflight-option: --no-preflight
|
||
env-defaults: CLAUDE_PROJECT_DIR=repo root, ORGOS_WORKSPACE=_sandbox
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/tests/run_all.py
|
||
line-start: 2
|
||
line-end: 12
|
||
source-kind: test-runner
|
||
- path: .claude/tests/run_all.py
|
||
line-start: 23
|
||
line-end: 50
|
||
source-kind: test-runner
|
||
- path: .claude/tests/run_all.py
|
||
line-start: 53
|
||
line-end: 81
|
||
source-kind: test-runner
|
||
|
||
- id: F-VERIFY-SUITE-EXECUTED
|
||
category: verification
|
||
key: full-suite-run-result-superseded
|
||
value:
|
||
currency: SUPERSEDED — 현재 저장소에 대한 주장이 아니다.
|
||
superseded-reason: 이 실행은 2026-07-20 12:03에 이뤄졌고, 그 이후 다른 세션이 저장소를 리팩터해 agent 카드 101→75, hooks 35→40, test suite 31→32로 바뀌었다. 실행 대상 트리는 더 이상 존재하지 않는다.
|
||
not-re-run-reason: 동시 세션이 같은 _sandbox 워크스페이스에 같은 스위트를 실행 중이어서 재실행 시 충돌한다(재추출 시점 13:36에 .claude/tests/fixtures/ 와 benchmark/cascade/candidates/ 에 쓰기 관측). 두 결과 모두 신뢰할 수 없게 되므로 재실행하지 않았다.
|
||
historical-observation-2026-07-20T12:03:
|
||
command: CLAUDE_PROJECT_DIR="$PWD" ORGOS_WORKSPACE=_sandbox python3 .claude/tests/run_all.py
|
||
exit-code: 0
|
||
result: 34/34 green · failed 없음
|
||
entries: 3 preflight + 31 test_*.py suites
|
||
current-suite-count: 32 test_*.py (재추출 시점 파일 수 — 실행 결과 아님)
|
||
current-pass-state: UNKNOWN — 이 저장소의 전체 스위트가 현재 통과하는지 확인되지 않았다.
|
||
executed-by: Repository Evidence Analyst(이 파일 작성자). 하네스의 Execution Verifier 게이트가 아니다.
|
||
assertion-type: observed
|
||
confidence: medium
|
||
evidence:
|
||
- path: .claude/tests/run_all.py
|
||
source-kind: superseded-command-output
|
||
symbol: 'SUMMARY: 34/34 green · failed: 없음 (exit 0) — observed 12:03 against a tree that no longer exists'
|
||
- path: .claude/tests
|
||
source-kind: directory-listing
|
||
symbol: '32 test_*.py present at 13:36 (was 31 at 12:03)'
|
||
|
||
- id: F-VERIFY-DOCTOR-EXECUTED
|
||
category: verification
|
||
key: doctor-run-result-superseded
|
||
value:
|
||
currency: SUPERSEDED — 현재 저장소에 대한 주장이 아니다. doctor.py 자체가 수정됐고(파일 [M]) settings.json·hook 배선·agent 카드가 모두 바뀌었다.
|
||
not-re-run-reason: doctor는 run_all.py preflight의 일부이며 동시 실행 중인 스위트와 같은 워크스페이스를 읽는다. 재실행 결과의 독립성을 보장할 수 없어 재실행하지 않았다.
|
||
current-verdict: UNKNOWN
|
||
historical-run-date: '2026-07-20T12:03'
|
||
historical-command: CLAUDE_PROJECT_DIR="$PWD" ORGOS_WORKSPACE=_sandbox python3 .claude/hooks/doctor.py
|
||
historical-exit-code: 0
|
||
historical-summary: 35 OK · 0 WARN · 0 FAIL → verdict OK
|
||
section-count-current: 14
|
||
section-count-historical-2026-07-20T12:03: 13
|
||
section-count-currency: CURRENT — 재추출 시점 소스에서 직접 확인했다(실행이 아니라 정적 확인).
|
||
section-enumeration-mechanism:
|
||
source-of-truth: doctor.py main()의 리터럴 sections 리스트(749-764행). 이 리스트가 그대로 report.render(sections)로 전달된다.
|
||
not-a-reliable-proxy: 'def check_* 함수 수(14)를 세는 방법은 우연히 같은 값을 주지만 정본이 아니다 — load_settings()는 check_* 이름이 아니면서 섹션 1에 기록하고, check_wiring()도 섹션 1에 기록한다(2 함수 → 1 섹션). 대응은 load_settings+check_wiring→§1, check_referenced_scripts→§2, main() 루프의 12개 함수→§3-14.'
|
||
empty-section-rule: 'render()는 항목이 0개인 섹션을 출력에서 통째로 건너뛴다(83-84행 if not rows: continue). 따라서 리스트 길이가 곧 사용자가 보는 수는 아니다.'
|
||
reader-visible-count: 14 — 14개 섹션 각각을 담당하는 함수가 모든 코드 경로에서 최소 1개 항목(ok 또는 fail)을 기록하므로 빈 섹션으로 생략되지 않는다.
|
||
section-titles-current:
|
||
- '1. settings.json + hook 배선(C7)'
|
||
- '2. 참조 hook 스크립트 실존'
|
||
- '3. python / 의존성'
|
||
- '4. workspace 해석'
|
||
- '5. 커맨드→agent 참조 무결성(lint_refs.py)'
|
||
- '6. SSOT 소비 현황(#13: 정책 YAML이 코드에 실제로 읽히나)'
|
||
- '7. company-context 정합(lint_company_context)'
|
||
- '8. venture-bootstrap 배선(P1)'
|
||
- '9. design-direction 배선(P2)'
|
||
- '10. method-skill 배선(P3)'
|
||
- '11. method-contract machinery(P3-B)'
|
||
- '12. append-only JSONL 원장 무결성'
|
||
- '13. compiled artifact registry'
|
||
- '14. compiled Org OS registries + architecture views'
|
||
section-14-detail:
|
||
added-by: 동시 리팩터(12:03 추출에는 없었다)
|
||
backing-command: python3 .claude/hooks/compile_orgos_registry.py --check
|
||
independently-executed: '13:41 재실행 — exit 0, "OK orgos registry: 4 registries + generated README + 4 architecture views (checked)"'
|
||
read-only-basis: '--check는 compile_orgos_registry.py 286행 if not check: 로 쓰기가 차단된다.'
|
||
caveat: 이 섹션은 settings.json에 배선되지 않은 신규 모듈(compile_orgos_registry.py)을 호출한다. 섹션 자체는 통과하지만 그 대상 machinery는 아직 hook으로 배선돼 있지 않다.
|
||
known-quirk: 'main()의 예외 핸들러(779행)는 어떤 check 함수의 예외든 섹션 3(python / 의존성)에 기록한다. 따라서 §14에서 터진 오류가 §3 밑에 표시될 수 있다.'
|
||
historical-notable-observations:
|
||
python: 3.12.3
|
||
pyyaml: 6.0.1
|
||
jsonschema: 4.10.3
|
||
node: v24.14.0
|
||
d2: v0.7.1
|
||
marp: 없음 — consult 덱(.pptx/.pdf) 제한, 대체 경로 있음
|
||
ssot-consumption: 소비 8 · prose-only 5 / 총 13
|
||
jsonl-ledgers: 7개 파일 · non-empty row 38개
|
||
artifact-registry: 186 kinds
|
||
executed-by: Repository Evidence Analyst(이 파일 작성자). 하네스의 Execution Verifier 게이트가 아니다.
|
||
assertion-type: observed
|
||
confidence: medium
|
||
evidence:
|
||
- path: .claude/hooks/doctor.py
|
||
source-kind: superseded-command-output
|
||
symbol: 'summary: 35 OK · 0 WARN · 0 FAIL → verdict: OK (exit 0) — observed 12:03 against a tree that no longer exists'
|
||
- path: .claude/hooks/doctor.py
|
||
line-start: 95
|
||
line-end: 98
|
||
source-kind: doctor-implementation
|
||
symbol: 'render() summary line — n_ok/n_warn/n_fail -> verdict'
|
||
- path: .claude/hooks/doctor.py
|
||
line-start: 749
|
||
line-end: 764
|
||
source-kind: doctor-implementation
|
||
symbol: 'main() sections list — 14 labels, the enumeration source of truth'
|
||
- path: .claude/hooks/doctor.py
|
||
line-start: 81
|
||
line-end: 86
|
||
source-kind: doctor-implementation
|
||
symbol: 'render() skips sections with zero entries (if not rows: continue)'
|
||
- path: .claude/hooks/doctor.py
|
||
line-start: 729
|
||
line-end: 744
|
||
source-kind: doctor-implementation
|
||
symbol: 'check_orgos_registry — section 14, reports ok/fail on every path'
|
||
- path: .claude/hooks/compile_orgos_registry.py
|
||
line-start: 286
|
||
line-end: 289
|
||
source-kind: registry-compiler-implementation
|
||
symbol: 'if not check: — write guarded, --check is read-only'
|
||
- path: .claude/hooks/compile_orgos_registry.py
|
||
source-kind: executed-command-output
|
||
symbol: 'OK orgos registry: 4 registries + generated README + 4 architecture views (checked) — exit 0, re-run 13:41'
|
||
|
||
- id: F-VERIFY-GENAGENTS-EXECUTED
|
||
category: verification
|
||
key: agent-generation-check-actual-run-result
|
||
value:
|
||
run-date: '2026-07-20'
|
||
run-time: '13:36 (local) — re-executed against the current tree'
|
||
command: CLAUDE_PROJECT_DIR="$PWD" python3 .claude/hooks/gen_agents.py --check
|
||
exit-code: 0
|
||
stdout: 'OK gen_agents: 75 concrete agents (43 fan-out workers + 19 collapse workers + 10 direct workers + 3 lead; family metadata cards=0) validated (profiles=75)'
|
||
scope-limitation: --check는 registry에서 생성한 카드 집합이 개수·구조 계약을 만족하는지 검증한다. 디스크의 .claude/agents/*.md 바이트와의 비교는 이 출력에 나타나지 않는다.
|
||
currency: 현재 트리 기준. 단 저장소가 동시 수정 중이었으므로 이 결과도 13:36 시점의 스냅샷이다.
|
||
superseded-earlier-run: '12:03 실행은 101 agents를 보고했다. 그 트리는 더 이상 존재하지 않는다.'
|
||
executed-by: Repository Evidence Analyst(이 파일 작성자). 하네스의 Execution Verifier 게이트가 아니다.
|
||
assertion-type: executed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/hooks/gen_agents.py
|
||
source-kind: executed-command-output
|
||
symbol: 'OK gen_agents: 75 concrete agents ... validated (profiles=75) (exit 0, 13:36)'
|
||
- path: .claude/hooks/gen_agents.py
|
||
line-start: 525
|
||
line-end: 533
|
||
source-kind: generator-implementation
|
||
|
||
- id: F-VERIFY-LINTREFS-EXECUTED
|
||
category: verification
|
||
key: reference-integrity-actual-run-result
|
||
value:
|
||
run-date: '2026-07-20'
|
||
run-time: '13:36 (local) — re-executed against the current tree'
|
||
command: CLAUDE_PROJECT_DIR="$PWD" ORGOS_WORKSPACE=_sandbox python3 .claude/hooks/lint_refs.py
|
||
exit-code: 0
|
||
stdout: 'OK lint_refs: 18 command 참조 + 75 agent skills 참조 모두 해결됨'
|
||
currency: 현재 트리 기준.
|
||
superseded-earlier-run: '12:03 실행은 101 agent skills를 보고했다.'
|
||
executed-by: Repository Evidence Analyst(이 파일 작성자). 하네스의 Execution Verifier 게이트가 아니다.
|
||
assertion-type: executed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/hooks/lint_refs.py
|
||
source-kind: executed-command-output
|
||
symbol: 'OK lint_refs: 18 command 참조 + 75 agent skills 참조 모두 해결됨 (exit 0, 13:36)'
|
||
|
||
- id: F-VERIFY-BENCHMARK-EXECUTED
|
||
category: verification
|
||
key: golden-task-benchmark-actual-run-result
|
||
value:
|
||
run-date: '2026-07-20'
|
||
commands-run:
|
||
- {command: 'python3 .claude/hooks/benchmark.py list', exit-code: 0, result: '골든태스크 13개 (카테고리: code-bugfix, code-feature, refactor, docs, design, decision)', run-time: '13:36 — re-executed against the current tree', currency: current}
|
||
- {command: 'python3 .claude/hooks/benchmark.py compare', exit-code: 0, result: '[benchmark] compare -> benchmark/BENCHMARK.md (plain 2 · harness 2 표본)', run-time: '12:03', currency: SUPERSEDED, not-re-run-reason: 'BENCHMARK.md를 재생성하는 쓰기 부수효과가 있어 동시 수정 중인 트리에서 재실행하지 않았다.'}
|
||
task-ids: [GT-01, GT-02, GT-03, GT-04, GT-05, GT-06, GT-07, GT-08, GT-09, GT-10, GT-11, GT-12, GT-R2]
|
||
side-effect: compare는 gitignored 파일 benchmark/BENCHMARK.md를 runs.jsonl에서 재생성한다(새 표본을 만들지 않는다).
|
||
executed-by: Repository Evidence Analyst(이 파일 작성자). 하네스의 Execution Verifier 게이트가 아니다.
|
||
assertion-type: executed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/hooks/benchmark.py
|
||
source-kind: executed-command-output
|
||
symbol: 'list -> 13 golden tasks (exit 0, re-run 13:36); compare -> plain 2 · harness 2 (exit 0, 12:03, not re-run)'
|
||
- path: benchmark/golden-tasks.yaml
|
||
source-kind: benchmark-task-definition
|
||
|
||
- id: F-VERIFY-CASCADE-CLI-EXECUTED
|
||
category: verification
|
||
key: p4-cascade-controller-actual-run-result
|
||
value:
|
||
run-date: '2026-07-20T12:03'
|
||
currency: SUPERSEDED — 12:03 실행 결과이며 재실행하지 않았다. benchmark_cascade.py와 bench_cascade/ 자체는 재추출 시점에 변경되지 않았으나(git 상태 unchanged), plan은 role/agent registry를 읽으므로 리팩터 영향 가능성을 배제할 수 없다.
|
||
commands-run:
|
||
- {command: 'python3 .claude/hooks/benchmark_cascade.py plan', exit-code: 0, result: 'arms A/B/C · total-arm-runs 3 · pilot-pairwise-calls 18 · estimated-judge-calls 132 · preflight-violations []', currency: SUPERSEDED}
|
||
- {command: 'python3 .claude/hooks/benchmark_cascade.py probe', exit-code: 3, result: '[probe] not-implemented — orchestrator 미배선(pilot 실행 단계에서 배선)', currency: SUPERSEDED}
|
||
still-statically-true: stub subcommand 목록과 exit 3 동작은 benchmark_cascade.py 소스(37-61행)에서 정적으로 확인되며 이 파일은 재추출 시점에 변경되지 않았다.
|
||
wired-subcommands: [plan, approve-budget]
|
||
stub-subcommands-exit-3: [calibrate, arm-run, sanitize, judge, compare, probe]
|
||
budget-gate: calibrate/judge/arm-run에 --execute를 주면 예산 receipt가 없을 때 exit 2로 거부된다.
|
||
executed-by: Repository Evidence Analyst(이 파일 작성자). 하네스의 Execution Verifier 게이트가 아니다.
|
||
assertion-type: executed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/hooks/benchmark_cascade.py
|
||
line-start: 37
|
||
line-end: 61
|
||
source-kind: controller-cli-implementation
|
||
- path: .claude/hooks/benchmark_cascade.py
|
||
source-kind: superseded-command-output
|
||
symbol: 'plan -> exit 0; probe -> exit 3 not-implemented (observed 12:03, not re-run)'
|
||
|
||
- id: F-CI-WORKFLOW
|
||
category: verification
|
||
key: github-actions-ci
|
||
value:
|
||
file: .github/workflows/ci.yml
|
||
job: harness-enforcers
|
||
runner: ubuntu-latest
|
||
triggers: {push: [main, 'fix/**', 'feat/**'], pull-request: [main]}
|
||
environment: {CLAUDE_PROJECT_DIR: github.workspace, ORGOS_WORKSPACE: _sandbox, python: '3.12', node: '20'}
|
||
steps:
|
||
- pip install -r requirements.txt
|
||
- d2 v0.7.1 설치 시도(실패해도 skip 허용)
|
||
- python3 .claude/hooks/doctor.py
|
||
- python3 .claude/hooks/lint_refs.py
|
||
- python3 .claude/hooks/gen_agents.py --check
|
||
- python3 .claude/tests/run_all.py --no-preflight
|
||
ci-run-status-in-this-analysis: 확인하지 않음(GitHub Actions 실행 이력을 조회하지 않았다).
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: .github/workflows/ci.yml
|
||
line-start: 1
|
||
line-end: 46
|
||
source-kind: CI-workflow
|
||
|
||
- id: F-LIMIT-CONCURRENT-REFACTOR
|
||
category: limitation
|
||
key: repository-modified-concurrently-during-extraction
|
||
value:
|
||
status: 이 사실 추출은 정지된 스냅샷이 아니라 활발히 수정 중인 워킹 트리를 대상으로 수행됐다.
|
||
first-extraction: '2026-07-20T12:03'
|
||
re-extraction: '2026-07-20T13:36'
|
||
concurrent-agent: 별도 세션이 같은 저장소를 리팩터링 중이었고 재추출 시점에도 쓰기가 계속됐다.
|
||
write-activity-observed-at-re-extraction:
|
||
- '.claude/tests/fixtures/quality-data-hardening-ws/evidence/ledger.jsonl (13:36)'
|
||
- 'benchmark/cascade/candidates/run-x/** (13:36)'
|
||
- '.claude/hooks/orgos/planning/role_selector.py (13:30)'
|
||
changes-between-the-two-extractions:
|
||
agent-cards: 101 -> 75
|
||
deleted-files: 26 (all .claude/agents/fam-*.md)
|
||
top-level-hooks-py: 35 -> 40
|
||
test-suites: 31 -> 32
|
||
new-hook-modules: [usage_observer.py, compile_orgos_registry.py, intake_classifier.py, role_selector.py, spawn_bindings.py]
|
||
new-packages: ['.claude/hooks/orgos/planning', '.claude/hooks/orgos/state']
|
||
gen_agents-py-size: '831행 -> 537행 (13:39). 이 재추출 작업 도중에도 축소됐고 resolver/router/fam 카운터 코드가 제거됐다.'
|
||
rewritten-contracts: [agent-operating-kpi.yaml, artifact-type-vocabulary.yaml, collaboration-map.yaml, context-package-spec.yaml, design-direction-spec.yaml, execution-plans.yaml, execution-policy.yaml, report-templates.yaml]
|
||
settings-json: usage_observer 3곳 배선 추가 · PreToolUse matcher에 WebFetch|WebSearch 추가 · 67 -> 76행
|
||
claude-md: 128 -> 130행, roles.yaml 주석 73 -> 75로 수정
|
||
unchanged-between-the-two-extractions: [org-os/06-agent-work/workflow-contracts.yaml, roles.yaml, lens-registry.yaml, tool-versions.yaml, requirements.txt, .github/workflows/ci.yml, benchmark/ 정본 입력, benchmark_cascade.py]
|
||
consequence: 이 파일의 수치는 13:36 시점 관측이며, 그 이후 값이 다시 달라졌을 수 있다. 특히 전체 test suite의 현재 통과 여부는 확인되지 않았다.
|
||
mid-refactor-and-not-settled:
|
||
- '.claude/hooks/orgos/planning/role_selector.py — 13:30에도 쓰이는 중이었고 doctor/lint_refs가 이 모듈을 검사하는지 확인하지 않았다.'
|
||
- 'compile_orgos_registry.py · spawn_bindings.py · intake_classifier.py · role_selector.py — 최상위 hooks에 새로 나타났으나 settings.json에 배선돼 있지 않다(usage_observer만 배선됨).'
|
||
- 'org-os/06-agent-work/artifact-type-vocabulary.yaml +95행(161 types)으로 확장됐으나 생성 registry의 artifact-kind-count는 186으로 동일하다.'
|
||
- 'HEAD(00db337)는 fam-*.md 26개를 여전히 추적한다 — 삭제는 커밋되지 않았다.'
|
||
- 'gen_agents.py가 13:36과 13:39 사이에 831행에서 537행으로 다시 줄었다. 이 파일의 행 번호 증거는 특히 빨리 낡는다.'
|
||
assertion-type: executed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/agents
|
||
source-kind: executed-command-output
|
||
symbol: 'git status --porcelain | grep -c "^ D .claude/agents/fam-" -> 26; ls .claude/agents/*.md | wc -l -> 75'
|
||
- path: .claude/hooks/orgos/planning/role_selector.py
|
||
source-kind: executed-command-output
|
||
symbol: 'mtime 2026-07-20 13:30 — written during this extraction'
|
||
- path: .claude/hooks/usage_observer.py
|
||
source-kind: executed-command-output
|
||
symbol: 'mtime 2026-07-20 13:05 — absent at 12:03 extraction'
|
||
- path: .claude/settings.json
|
||
line-start: 19
|
||
line-end: 25
|
||
source-kind: claude-code-configuration
|
||
symbol: 'usage_observer.py PostToolUse block — new'
|
||
- path: org-os/06-agent-work
|
||
source-kind: executed-command-output
|
||
symbol: 'git diff --stat org-os/06-agent-work/ -> 8 files changed, 218 insertions(+), 54 deletions(-)'
|
||
|
||
# ── limitations ─────────────────────────────────────────────────────────
|
||
- id: F-LIMIT-HOOK-ACTIVATION
|
||
category: limitation
|
||
key: enforcement-requires-loaded-settings
|
||
value:
|
||
condition: 강제(형식·근거·권한·불변성)는 Claude Code가 이 저장소의 .claude/settings.json을 로드한 세션에서만 동작한다.
|
||
out-of-session: 다른 실행 환경이나 설정 미로드 상태에서는 같은 강제가 보장되지 않는다.
|
||
verification-hint: python3 .claude/hooks/doctor.py로 배선을 확인한다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: CLAUDE.md
|
||
line-start: 70
|
||
line-end: 70
|
||
source-kind: runtime-limit-documentation
|
||
symbol: 'hook 강제는 설정(.claude/settings.json) 활성 시에만 동작한다'
|
||
- path: .claude/settings.json
|
||
line-start: 2
|
||
line-end: 2
|
||
source-kind: claude-code-configuration
|
||
|
||
- id: F-LIMIT-GUARD-REGEX
|
||
category: limitation
|
||
key: guard-tools-is-secondary-defense
|
||
value:
|
||
role: allow-by-default regex 기반 2차 방어선(defense-in-depth)
|
||
primary-boundary: Claude Code 네이티브 permission 시스템(.claude/settings.json permissions)과 managed policy
|
||
self-declared-weakness: regex denylist는 원리상 셸 조합·인용·변형으로 우회 가능하므로 보안·품질 경계로 신뢰해서는 안 된다.
|
||
denied-category-source: org-os/00-role-registry/tool-permission-matrix.yaml (default-policy.external-side-effects)
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/hooks/guard_tools.py
|
||
line-start: 2
|
||
line-end: 12
|
||
source-kind: guard-implementation
|
||
- path: .claude/settings.json
|
||
line-start: 51
|
||
line-end: 51
|
||
source-kind: claude-code-configuration
|
||
symbol: 'permissions._comment — PRIMARY boundary'
|
||
|
||
- id: F-LIMIT-COMPANY-CONTEXT
|
||
category: limitation
|
||
key: current-company-context-state
|
||
value:
|
||
company-context-status: provisional
|
||
company-context-schema-version: 2
|
||
founder-context-status: filled
|
||
product-stage: pre-product
|
||
company-stage: reset-planning
|
||
unresolved-founder-inputs: [주당 가용시간, 자본·런웨이, 목표 사업 규모, 보유 유통채널, 운영·리스크 내성]
|
||
provenance-rule: status가 operating이 아니면 company 인용 항목은 E2/Med 상한이고 hypothesis 항목은 status와 무관하게 Med 상한이다(validate_report 강제).
|
||
implication: 자원·GTM 결정 전에 창업자 확인값을 채워야 한다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: org-os/01-company/company-context.yaml
|
||
line-start: 1
|
||
line-end: 2
|
||
source-kind: company-context
|
||
- path: org-os/01-company/company-context.yaml
|
||
line-start: 25
|
||
line-end: 33
|
||
source-kind: company-context
|
||
- path: org-os/01-company/founder-context.yaml
|
||
line-start: 5
|
||
line-end: 25
|
||
source-kind: company-context-input
|
||
- path: CLAUDE.md
|
||
line-start: 63
|
||
line-end: 63
|
||
source-kind: project-documentation
|
||
symbol: '회사 문맥 상한(#5)'
|
||
|
||
- id: F-LIMIT-BENCHMARK-GOLDEN
|
||
category: limitation
|
||
key: golden-task-benchmark-evidence-status
|
||
value:
|
||
golden-tasks-defined: 13
|
||
executed-samples: {plain: 2, harness: 2}
|
||
sampled-tasks: [GT-01, GT-R2]
|
||
sampled-task-category: code-bugfix/low
|
||
sample-dates: '2026-07-11'
|
||
measured-dimensions: 3
|
||
unmeasured-dimensions: 8
|
||
observed-result:
|
||
first-pass-acceptance: {plain: 1.0, harness: 1.0, delta: 0.0}
|
||
tests-pass-rate: {plain: 1.0, harness: 1.0, delta: 0.0}
|
||
unnecessary-change-lines: {plain: 0.0, harness: 0.0, delta: 0.0}
|
||
weighted-composite-delta: 0
|
||
conclusion: 현재 표본은 하네스의 품질 우위를 입증하지 않는다. 설계·문서·의사결정 카테고리는 미실행이다.
|
||
report-file-status: benchmark/BENCHMARK.md는 gitignored이며 runs.jsonl에서 재생성된다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: benchmark/BENCHMARK.md
|
||
line-start: 1
|
||
line-end: 20
|
||
source-kind: generated-benchmark-report
|
||
- path: benchmark/runs.jsonl
|
||
line-start: 1
|
||
line-end: 4
|
||
source-kind: benchmark-run-ledger
|
||
- path: .gitignore
|
||
line-start: 29
|
||
line-end: 30
|
||
source-kind: ignore-policy
|
||
|
||
- id: F-LIMIT-P4-PILOT-UNRUN
|
||
category: limitation
|
||
key: cascade-benchmark-ruler-built-pilot-not-run
|
||
value:
|
||
purpose: P1(venture-bootstrap)·P2(design-direction)·P3(prompt-skill 분리 + method-contract) 개선이 실제 산출물 품질을 올렸는지를 동일 제품 brief로 실증한다.
|
||
arms:
|
||
A: {label: P1+P2, commit: 72997e5a65724f9d74efabcd41217acc3d0ce62e}
|
||
B: {label: P1+P2+P3-A, commit: dfb047587aac506aa5a59fce86d5d5eb39a5570f}
|
||
C: {label: P1+P2+P3-B-active, commit: 353f1c6afe963b58939a198505d96c144ca6a583}
|
||
controller-cli: .claude/hooks/benchmark_cascade.py
|
||
modules: [aggregate, budget, calibrate, compare, inputs, judge, manifest, meter, paths, planner, probe, runner, sanitize]
|
||
module-total-lines: 889
|
||
tests: [.claude/tests/test_p4_cascade.py, .claude/tests/test_p4_cascade_exec.py]
|
||
wired-subcommands: [plan, approve-budget]
|
||
not-implemented-subcommands: [calibrate, arm-run, sanitize, judge, compare, probe]
|
||
not-implemented-exit-code: 3
|
||
not-implemented-message: 'not-implemented — orchestrator 미배선(pilot 실행 단계에서 배선)'
|
||
run-artifacts-present: {runs-dir: false, judgments-jsonl: false, cascade-benchmark-md: false}
|
||
status: ruler(측정 인프라)와 파일럿 계획은 존재하고 테스트가 통과하지만, 파일럿 실행 결과는 저장소에 없다.
|
||
deferred-by-design: [arm별 다중 repeat, Bradley–Terry/Elo, 통계적 우월성 결론, cascade 확장, HUMAN judge 패널, live-research 트랙]
|
||
mandated-disclaimer: 파일럿은 ruler의 판별력·arm 격리·실행 드라이버·P1~P3의 잠정적 품질 신호를 검증하며, arm별 단일 실행이므로 통계적 우월성이나 일반적 생산성 향상을 확정하지 않는다.
|
||
assertion-type: executed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/hooks/benchmark_cascade.py
|
||
line-start: 37
|
||
line-end: 61
|
||
source-kind: controller-cli-implementation
|
||
- path: benchmark/cascade/arm-manifest.yaml
|
||
line-start: 1
|
||
line-end: 11
|
||
source-kind: benchmark-arm-manifest
|
||
- path: docs/superpowers/specs/2026-07-14-p4-cascade-benchmark-design.md
|
||
line-start: 22
|
||
line-end: 40
|
||
source-kind: design-specification
|
||
- path: docs/superpowers/plans/2026-07-15-p4-cascade-benchmark.md
|
||
line-start: 26
|
||
line-end: 26
|
||
source-kind: implementation-plan
|
||
- path: benchmark/cascade
|
||
source-kind: executed-command-output
|
||
symbol: 'ls benchmark/cascade/runs -> No such file or directory; judgments.jsonl absent'
|
||
|
||
- id: F-LIMIT-BENCHMARK-CONTROLS
|
||
category: limitation
|
||
key: cascade-benchmark-fairness-controls
|
||
value:
|
||
external-web-access: denied
|
||
evidence-pack-required: true
|
||
evidence-pack-files: [market-context.md, competitor-snapshot.md, user-observations.md, sources.yaml]
|
||
web-block-enforcement: arm-runner의 evidence_env가 WebFetch/WebSearch를 실행 환경에서 차단·미배선한다.
|
||
human-gate-policy: pre-authorized-for-benchmark. 벤치마크 실행 전 발급된 사전승인 receipt를 전 arm 동일 적용하며 프로덕션 인간 승인을 대체하지 않는다.
|
||
forbidden-actions: [external-side-effect, deployment, real-purchase, account-change, prod-resource-create]
|
||
receipt-required-for: [plan-signoff, human-acceptance-gate, wave-signoff]
|
||
judging: blinded paired pairwise 패널만 승자 판정에 사용하며 rubric 8-criteria 절대 점수는 calibration 진단 전용이다.
|
||
rubric-criteria: [role-expertise, procedural-completeness, evidence-grounding, alternatives-and-counterarguments, practical-artifacts, handoff-completeness, + 2 more]
|
||
fixed-judge-calls-per-pilot: 18
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: benchmark/cascade/benchmark-policy.yaml
|
||
line-start: 1
|
||
line-end: 26
|
||
source-kind: benchmark-policy
|
||
- path: benchmark/cascade/rubric.yaml
|
||
line-start: 1
|
||
line-end: 2
|
||
source-kind: judge-rubric
|
||
- path: docs/superpowers/plans/2026-07-15-p4-cascade-benchmark.md
|
||
line-start: 17
|
||
line-end: 17
|
||
source-kind: implementation-plan
|
||
|
||
- id: F-LIMIT-UI-AESTHETICS
|
||
category: limitation
|
||
key: ui-preview-checks-render-health-not-aesthetics
|
||
value:
|
||
checks: render health(DOM mount, bundle, contrast, focus, responsive screenshot)
|
||
does-not-judge: [시각적 차별성, 타이포그래피, 비례, spacing의 미학 품질]
|
||
external-requirement: Chrome 또는 Chromium 호환 실행 파일
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/hooks/preview_ui.py
|
||
line-start: 2
|
||
line-end: 41
|
||
source-kind: UI-verification-implementation
|
||
|
||
- id: F-LIMIT-UNCOMMITTED-REGENERATION
|
||
category: limitation
|
||
key: agent-cards-regenerated-but-uncommitted
|
||
value:
|
||
observed-at: '2026-07-20T13:36'
|
||
head-tracked-agent-cards: 72
|
||
working-tree-agent-cards: 75
|
||
deleted-fam-cards: 26
|
||
deleted-fam-card-examples: [fam-ceo.md, fam-cto.md, fam-orch.md, fam-design.md, fam-qa.md]
|
||
nature-of-change: 26개 fam-*.md family 카드가 워킹 트리에서 삭제되고 concrete role 카드만 남았다. gen_agents는 이제 75개 concrete 카드만 생성하며 router/resolver/family 카드를 생성하지 않는다.
|
||
implication: 위 검증 결과는 워킹 트리 상태에 대한 것이며 커밋된 HEAD와 다르다. HEAD에는 fam-*.md가 여전히 존재한다.
|
||
superseded-earlier-reading: '12:03 시점에는 워킹 트리 101장 · untracked 29장 · fam-*.md 16개 수정(삭제 아님)이었다. 이후 동시 리팩터가 fam-*.md 26개를 삭제했다.'
|
||
assertion-type: executed
|
||
confidence: high
|
||
evidence:
|
||
- path: .claude/agents
|
||
source-kind: executed-command-output
|
||
symbol: 'git ls-tree -r HEAD .claude/agents | wc -l -> 72; ls .claude/agents/*.md | wc -l -> 75; git status --porcelain | grep -c "^ D .claude/agents/fam-" -> 26'
|
||
- path: org-os/00-role-registry/capability-families.yaml
|
||
line-start: 9
|
||
line-end: 9
|
||
source-kind: family-registry
|
||
symbol: '75개 concrete role card만 생성하며 router/resolver family card는 생성하지 않는다'
|
||
- path: .claude/hooks/gen_agents.py
|
||
line-start: 516
|
||
line-end: 523
|
||
source-kind: generator-contract
|
||
symbol: '개수 계약: 75 reference roles == 75 executable concrete cards; assert len(agents) == 75. resolver/router/family 카운터는 코드에서 완전히 제거됐다.'
|
||
|
||
- id: F-LIMIT-DOC-DRIFT
|
||
category: limitation
|
||
key: claude-md-role-count-drift-resolved
|
||
value:
|
||
status: RESOLVED — 재추출 시점에 드리프트가 존재하지 않는다.
|
||
claude-md-line-9-now: 'roles.yaml # 75 concrete 역할 taxonomy'
|
||
registry-states: 75
|
||
agreement: true
|
||
history: '12:03 시점에는 CLAUDE.md 9행이 73 참조 역할로 registry(75)와 불일치했다. 동시 리팩터가 이를 75로 수정했다.'
|
||
note: 이 fact는 더 이상 한계가 아니며 이력 기록으로만 남긴다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: CLAUDE.md
|
||
line-start: 9
|
||
line-end: 9
|
||
source-kind: project-documentation
|
||
symbol: 'roles.yaml # 75 concrete 역할 taxonomy'
|
||
- path: org-os/00-role-registry/roles.yaml
|
||
line-start: 3
|
||
line-end: 3
|
||
source-kind: role-registry
|
||
symbol: 'total-role-count: 75'
|
||
- path: org-os/00-role-registry/capability-families.yaml
|
||
line-start: 13
|
||
line-end: 13
|
||
source-kind: family-registry
|
||
symbol: 'role-count-covered: 75'
|
||
|
||
- id: F-LIMIT-STUB-CONTEXT-FOLDERS
|
||
category: limitation
|
||
key: company-context-folders-are-stubs
|
||
value:
|
||
stub-folders: [org-os/02-capabilities, org-os/03-products, org-os/04-architecture, org-os/05-operations, org-os/07-knowledge-base]
|
||
contents: 각 폴더는 README.md만 포함한다.
|
||
implication: 회사·제품 문맥 레이어는 아직 채워지지 않았다.
|
||
assertion-type: observed
|
||
confidence: high
|
||
evidence:
|
||
- path: org-os/02-capabilities
|
||
source-kind: directory-listing
|
||
symbol: README.md only
|
||
- path: CLAUDE.md
|
||
line-start: 21
|
||
line-end: 21
|
||
source-kind: project-documentation
|
||
|
||
commands:
|
||
- id: CMD-1
|
||
command: pip install -r requirements.txt
|
||
cwd: .
|
||
source: {path: .github/workflows/ci.yml, line-start: 30, line-end: 31, source-kind: CI-workflow}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-declared
|
||
limitations: [Repository Evidence Analyst가 실행하지 않음.]
|
||
|
||
- id: CMD-2
|
||
command: CLAUDE_PROJECT_DIR="$PWD" ORGOS_WORKSPACE=_sandbox python3 .claude/tests/run_all.py
|
||
cwd: .
|
||
source: {path: .claude/tests/run_all.py, line-start: 7, line-end: 9, source-kind: test-runner-usage}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-declared
|
||
limitations:
|
||
- Execution Verifier 역할이 아직 검증하지 않음(하네스 게이트 미통과).
|
||
- 참고— Evidence Analyst가 2026-07-20에 ad-hoc 실행한 결과는 F-VERIFY-SUITE-EXECUTED에 기록됨(exit 0, 34/34 green).
|
||
|
||
- id: CMD-3
|
||
command: python3 .claude/hooks/doctor.py
|
||
cwd: .
|
||
source: {path: .github/workflows/ci.yml, line-start: 36, line-end: 37, source-kind: CI-workflow}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-declared
|
||
limitations:
|
||
- 유효한 ORGOS_WORKSPACE 또는 .orgos-workspace 포인터가 필요함.
|
||
- Execution Verifier 역할이 아직 검증하지 않음.
|
||
- 참고 — Evidence Analyst가 2026-07-20T12:03에 ad-hoc 실행한 결과(exit 0, 35 OK/0 WARN/0 FAIL)는 SUPERSEDED다. 그 이후 doctor.py에 섹션 14가 추가됐고 저장소가 리팩터됐다. 현재 verdict는 확인되지 않았다 — F-VERIFY-DOCTOR-EXECUTED 참조.
|
||
|
||
- id: CMD-4
|
||
command: python3 .claude/hooks/lint_refs.py
|
||
cwd: .
|
||
source: {path: .github/workflows/ci.yml, line-start: 39, line-end: 40, source-kind: CI-workflow}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-declared
|
||
limitations:
|
||
- Execution Verifier 역할이 아직 검증하지 않음.
|
||
- 참고 — Evidence Analyst가 2026-07-20에 ad-hoc 실행한 결과는 F-VERIFY-LINTREFS-EXECUTED에 기록됨(exit 0).
|
||
|
||
- id: CMD-5
|
||
command: python3 .claude/hooks/compile_artifact_registry.py --check
|
||
cwd: .
|
||
source: {path: .claude/tests/run_all.py, line-start: 58, line-end: 60, source-kind: test-runner-preflight}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-observed-invocation
|
||
limitations:
|
||
- Execution Verifier 역할이 아직 검증하지 않음.
|
||
- 참고 — run_all.py preflight로 2026-07-20에 함께 실행됨([artifact-registry] OK 186 kinds).
|
||
|
||
- id: CMD-6
|
||
command: CLAUDE_PROJECT_DIR="$PWD" python3 .claude/hooks/gen_agents.py --check
|
||
cwd: .
|
||
source: {path: .github/workflows/ci.yml, line-start: 42, line-end: 43, source-kind: CI-workflow}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-declared
|
||
limitations:
|
||
- Execution Verifier 역할이 아직 검증하지 않음.
|
||
- 참고 — Evidence Analyst가 2026-07-20에 ad-hoc 실행한 결과는 F-VERIFY-GENAGENTS-EXECUTED에 기록됨(exit 0, 101 agents).
|
||
|
||
- id: CMD-7
|
||
command: CLAUDE_PROJECT_DIR="$PWD" python3 .claude/hooks/gen_agents.py
|
||
cwd: .
|
||
source: {path: CLAUDE.md, line-start: 118, line-end: 119, source-kind: project-documentation}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-declared
|
||
limitations: [.claude/agents/*.md를 덮어쓰는 생성 명령이므로 Repository Evidence Analyst가 실행하지 않음.]
|
||
|
||
- id: CMD-8
|
||
command: CLAUDE_PROJECT_DIR="$PWD" ORGOS_WORKSPACE=_sandbox python3 .claude/tests/test_enforcement.py
|
||
cwd: .
|
||
source: {path: CLAUDE.md, line-start: 114, line-end: 115, source-kind: project-documentation}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-declared
|
||
limitations: [개별 suite로는 실행하지 않음. run_all.py 전체 실행에는 포함됐고 green이었음(F-VERIFY-SUITE-EXECUTED).]
|
||
|
||
- id: CMD-9
|
||
command: ORGOS_WORKSPACE=_sandbox python3 .claude/hooks/kpi_ledger.py derive && python3 .claude/hooks/kpi_ledger.py dashboard
|
||
cwd: .
|
||
source: {path: CLAUDE.md, line-start: 120, line-end: 121, source-kind: project-documentation}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-declared
|
||
limitations: [reports/KPI.md를 생성하는 부수효과가 있어 Repository Evidence Analyst가 실행하지 않음.]
|
||
|
||
- id: CMD-10
|
||
command: python3 .claude/hooks/benchmark.py list
|
||
cwd: .
|
||
source: {path: .claude/hooks/benchmark.py, line-start: 12, line-end: 12, source-kind: benchmark-implementation}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-observed-invocation
|
||
limitations:
|
||
- Execution Verifier 역할이 아직 검증하지 않음.
|
||
- 참고 — Evidence Analyst가 2026-07-20에 ad-hoc 실행한 결과는 F-VERIFY-BENCHMARK-EXECUTED에 기록됨(exit 0, 13개 task).
|
||
|
||
- id: CMD-11
|
||
command: python3 .claude/hooks/benchmark.py compare
|
||
cwd: .
|
||
source: {path: .claude/hooks/benchmark.py, line-start: 19, line-end: 19, source-kind: benchmark-implementation}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-observed-invocation
|
||
limitations:
|
||
- 기존 benchmark run ledger를 비교하며 새 표본을 생성하지 않음.
|
||
- 참고 — Evidence Analyst가 2026-07-20에 ad-hoc 실행함(exit 0, gitignored BENCHMARK.md 재생성).
|
||
|
||
- id: CMD-12
|
||
command: python3 .claude/hooks/benchmark.py run --task GT-01 --arm plain --execute
|
||
cwd: .
|
||
source: {path: .claude/hooks/benchmark.py, line-start: 13, line-end: 15, source-kind: benchmark-implementation}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-observed-invocation
|
||
limitations: [claude CLI와 외부 실행 예산이 필요함. 기본값은 --dry-run이며 --execute가 있어야 실제 호출., Repository Evidence Analyst가 실행하지 않음.]
|
||
|
||
- id: CMD-13
|
||
command: python3 .claude/hooks/benchmark_cascade.py plan
|
||
cwd: .
|
||
source: {path: .claude/hooks/benchmark_cascade.py, line-start: 37, line-end: 41, source-kind: controller-cli-implementation}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-observed-invocation
|
||
limitations:
|
||
- Execution Verifier 역할이 아직 검증하지 않음.
|
||
- 참고 — Evidence Analyst가 2026-07-20에 ad-hoc 실행한 결과는 F-VERIFY-CASCADE-CLI-EXECUTED에 기록됨(exit 0).
|
||
|
||
- id: CMD-14
|
||
command: python3 .claude/hooks/benchmark_cascade.py approve-budget --plan-id <id> --max-tokens <n> --max-cost <n>
|
||
cwd: .
|
||
source: {path: .claude/hooks/benchmark_cascade.py, line-start: 42, line-end: 45, source-kind: controller-cli-implementation}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-observed-invocation
|
||
limitations: [예산 receipt 파일을 생성하는 부수효과가 있어 Repository Evidence Analyst가 실행하지 않음.]
|
||
|
||
- id: CMD-15
|
||
command: python3 .claude/hooks/benchmark_cascade.py judge --execute
|
||
cwd: .
|
||
source: {path: .claude/hooks/benchmark_cascade.py, line-start: 46, line-end: 56, source-kind: controller-cli-implementation}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-observed-invocation
|
||
limitations:
|
||
- 예산 receipt가 없으면 exit 2로 거부되고, receipt가 있어도 현재 구현은 exit 3(not-implemented)을 반환한다.
|
||
- Repository Evidence Analyst가 실행하지 않음.
|
||
|
||
- id: CMD-16
|
||
command: python3 .claude/hooks/gen_agents.py --check
|
||
cwd: .
|
||
source: {path: .github/workflows/ci.yml, line-start: 42, line-end: 43, source-kind: CI-workflow}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-declared
|
||
limitations:
|
||
- CI job이 CLAUDE_PROJECT_DIR을 job 수준 env로 설정하므로 워크플로 파일에는 접두사 없이 이 형태로 기록돼 있다.
|
||
- Execution Verifier 역할이 아직 검증하지 않음.
|
||
|
||
- id: CMD-17
|
||
command: python3 .claude/tests/run_all.py --no-preflight
|
||
cwd: .
|
||
source: {path: .github/workflows/ci.yml, line-start: 45, line-end: 46, source-kind: CI-workflow}
|
||
verification:
|
||
status: discovered
|
||
method: static extraction
|
||
level: repository-declared
|
||
limitations:
|
||
- --no-preflight는 CI 전용 호출 형태다. 선행 스텝이 이미 preflight를 게이트하기 때문이다.
|
||
- Execution Verifier 역할이 아직 검증하지 않음.
|