init: readme 작성 하네스 설계

This commit is contained in:
DongHyeonka
2026-07-24 13:26:18 +09:00
parent 7fb4217f7c
commit c708cbcf9a
317 changed files with 24223 additions and 1 deletions
@@ -0,0 +1,214 @@
# Content Harness
<!-- section-id: overview -->
Content Harness는 자연어 기반 콘텐츠 요청을 문서 계획, 정확한 기술 시각화, 유기적 이미지 생성, 검토된 publication output으로 연결하는 provider-neutral Python 시스템입니다. <!-- claim-id: C-IDENTITY -->
문서 작성과 기술 도형, 유기적 이미지에는 서로 다른 생성·검토 기준이 필요합니다. 이 저장소는 세 production harness를 sibling으로 유지하고, `workflow-runtime`만 라우팅·DAG 실행·결과 전달·publication을 조정하도록 책임을 나눕니다. <!-- claim-id: C-SIBLING-MODEL -->
이 README는 저장소를 처음 평가하는 개발자에게는 실행 가능한 contract chain을, 기여자에게는 capability별 변경 위치를, 리뷰어에게는 실제 생성 산출물과 현재 qualification 한계를 보여줍니다.
## 책임이 섞이지 않는 네 capability
<!-- section-id: capabilities -->
### Document Writing
`document-writing`은 독자·서사·근거 연결·시각화 기회를 다루고, ContentJobRequest·Content Manifest·Narrative Plan·publication draft·Visual Request를 만듭니다. 원문을 제자리에서 덮어쓰거나 renderer와 image provider를 선택하지 않습니다. <!-- claim-id: C-DOCUMENT-CAPABILITY -->
### Technical Visualization
`technical-visualization`은 근거에 묶인 semantic model, visual grammar, D2 렌더링, 문서·발표용 rendition을 소유합니다. 현재 실행 가능한 visual type은 `dependency-graph``runtime-sequence`이며, accepted ArtifactSet에는 서로 다른 reviewer가 작성한 technical-semantic·technical-visual review가 필요합니다. <!-- claim-id: C-TECHNICAL-CAPABILITY -->
### Image Generation
`image-generation`은 사진·일러스트·재질·분위기 같은 organic raster를 소유합니다. production 경로는 해시된 후보 3개, pairwise comparison, 명시적 선택, 최대 한 번의 bounded repair를 사용하며, exact architecture relation·chart·state machine·긴 정확 텍스트는 이 capability의 범위 밖입니다. <!-- claim-id: C-IMAGE-CAPABILITY -->
### Workflow Runtime과 Integrations
`workflow-runtime`은 contract validation, routing, cycle-free DAG, freshness, retry, immutable result 수집, integration dispatch, event와 portable output publication을 소유합니다. sibling harness는 서로를 직접 호출하지 않습니다. <!-- claim-id: C-RUNTIME-CAPABILITY -->
Markdown·Slides·HTML adapter는 runtime이 선택해 동결한 publication projection 하나만 소비하며, 내용·관점·route·renderer·provider를 다시 결정하지 않습니다. <!-- claim-id: C-INTEGRATIONS -->
## 2분 검증
<!-- section-id: quick-start -->
### 전제 조건
핵심 contract와 runtime은 Python 3에서 동작하며 PyYAML과 jsonschema를 사용합니다. Raster 검증·preview에는 Pillow가, technical rendering에는 D2가, SVG의 browser preview에는 Chrome 또는 Chromium이 필요합니다. 저장소는 이 도구들의 버전을 고정하지 않습니다. <!-- claim-id: C-PREREQUISITES -->
현재 저장소에는 `pyproject.toml`, `requirements.txt`, `setup.py`, `setup.cfg`, `Pipfile`, `poetry.lock`, `uv.lock`이 없어 하나의 정본 설치 명령을 제시할 수 없습니다. 필요한 도구를 환경에 준비한 뒤 아래 검증을 실행하십시오. <!-- claim-id: C-INSTALLATION-LIMIT -->
### 1. 자연어 요청의 contract 확인
```bash
python3 -m packages.content_job_contract.validate_content_job examples/clean-architecture/content-job-request.yaml --repo-root .
```
<!-- claim-id: C-CMD-CONTENT-JOB -->
이 명령은 이번 README 작성 세션에서 exit code 0으로 완료됐습니다. 출력 없이 종료되면 체크인된 ContentJobRequest가 현재 contract를 통과한 것입니다. <!-- claim-id: C-RESULT-CONTENT-JOB -->
### 2. Front door 계획 확인
```bash
python3 -m packages.workflow_runtime.content_runtime front-door --workflow-request examples/clean-architecture/workflow-request.content-job.yaml --repo-root .
```
<!-- claim-id: C-CMD-FRONT-DOOR -->
이 명령도 exit code 0으로 완료됐고 `primary_capability: document-writing`인 plan을 출력했습니다. 이는 계획 단계의 확인이며 author·review provider를 호출하는 production 실행은 아닙니다. <!-- claim-id: C-RESULT-FRONT-DOOR -->
## 요청에서 publication까지
<!-- section-id: execution-model -->
Contract chain은 `ContentJobRequest``Content Manifest``Narrative Plan``Visual Request``ArtifactSet` → frozen publication projection 순서로 책임을 좁혀 갑니다. JSON Schema는 구조를, Python validator는 현재 파일 hash·safe path·cross-contract ID·evidence·routing·freshness처럼 schema만으로 표현하기 어려운 조건을 확인합니다. <!-- claim-id: C-CONTRACT-CHAIN -->
Visual Request의 신호가 technical-only이면 `technical-visualization`, image-only이면 `image-generation`, 둘 다이면 runtime-owned hybrid DAG로 라우팅됩니다. 신호가 없으면 `BLOCKED_UNRESOLVED`, 명시적 충돌이면 `ROUTING_CONFLICT`입니다. <!-- claim-id: C-ROUTING -->
각 harness는 plan 또는 immutable JobResult를 runtime에 반환합니다. Runtime만 sibling 결과를 조립하고 accepted rendition의 publication projection을 동결해 integration adapter로 넘깁니다. <!-- claim-id: C-RUNTIME-OWNERSHIP -->
Deterministic validation은 expert review를 대신하지 않습니다. 필수 review가 없는 유효한 technical 결과는 `produced`에 머물며 `accepted`나 integration-ready로 승격되지 않습니다. <!-- claim-id: C-ACCEPTANCE-BOUNDARY -->
다음 흐름은 request와 contract가 runtime에서 sibling capability로 분기한 뒤 reviewed draft 또는 accepted ArtifactSet으로 합류하는 지점을 요약합니다. <!-- claim-id: C-FLOW-VISUAL -->
```mermaid
flowchart LR
A["자연어 요청"] --> B["ContentJobRequest / Visual Request"]
B --> R{"workflow-runtime<br/>routing · DAG · freshness"}
R --> D["document-writing"]
R --> T["technical-visualization"]
R --> I["image-generation"]
T --> H["runtime-owned<br/>hybrid composition"]
I --> H
D --> O["reviewed publication draft"]
T --> S["accepted ArtifactSet"]
I --> S
H --> S
O --> P["frozen publication projection"]
S --> P
P --> G["Markdown · Slides · HTML"]
```
<!-- visual-id: content-flow -->
## 생성 산출물 둘러보기
<!-- section-id: artifacts -->
### 버전 관리되는 contract example
[Clean Architecture 예제](examples/clean-architecture/)는 ContentJobRequest부터 Visual Request와 ArtifactSet까지 이어지는 체크인된 contract chain입니다. `artifact/attempt-01/`에는 document·presentation·reveal-step SVG와 `accepted`/`ready` 상태의 manifest가 있지만, 이는 renderer-backed golden이 아니라 최소 contract fixture입니다. <!-- claim-id: C-VERSIONED-FIXTURE -->
- [ArtifactSet manifest](examples/clean-architecture/artifact/attempt-01/artifact-set.yaml)
- [문서용 SVG fixture](examples/clean-architecture/artifact/attempt-01/dependency-directions.svg)
- [발표용 SVG fixture](examples/clean-architecture/artifact/attempt-01/dependency-directions.presentation.svg)
### 현재 작업 사본의 로컬 테스트 산출물
현재 작업 사본에는 문서 작성·기술 시각화·이미지 생성을 함께 통과시킨 로컬 P6 결과가 있습니다. `runs/p6-all-harness-quality-executable-clean-architecture-20260717/output/` 아래에는 `final-document.md`, `index.html`, 전체 문서 `preview.png`, 문서·발표용 dependency-direction SVG, organic PNG 두 target, image candidate contact sheet와 validation manifest가 있습니다. <!-- claim-id: C-LOCAL-P6-OUTPUT -->
문서와 기술 시각화를 함께 시험한 `runs/docvis-20260716-executable-clean-architecture-part1/`에는 통합 HTML, desktop·mobile 문서 preview, 두 figure의 target별 SVG와 PNG fallback, delivery·asset manifest가 있습니다. <!-- claim-id: C-LOCAL-DOCVIS-OUTPUT -->
Best-of-three 이미지 예제인 `runs/img-20260716-japanese-animation-test/`는 3개 후보 중 attempt 2를 `BEST_OF_N_PASS`로 선택하고 `outputs/final-selected.png`를 남겼습니다. <!-- claim-id: C-LOCAL-IMAGE-OUTPUT -->
| 산출물 유형 | 로컬 예시 | 확인할 것 |
| --- | --- | --- |
| 생성 문서 | `output/final-document.md`, `output/index.html`, `output/preview.png` | Markdown·HTML·전체 페이지 preview와 delivery manifest |
| 기술 시각화 | `assets/dependency-directions.document.svg`, `assets/dependency-directions.presentation.svg` | 같은 semantic source의 target별 크기·표현 |
| 생성 이미지 | `assets/editorial-workbench.document.png`, `assets/editorial-workbench.presentation.png` | target별 organic rendition과 선택된 candidate hash |
| 비교·검토 자료 | `assets/image-candidates.png`, `validation-summary.yaml` | 후보 contact sheet와 capability별 validation 결과 |
`runs/**``.gitignore` 대상인 로컬 immutable 실행 작업공간이며 cache나 source of truth가 아닙니다. 새 실행은 `runs/<purpose>/run-<YYYYMMDDTHHMMSSZ>-NNN/`을 할당하고, reviewed deliverable이 있으면 `<run-root>/output/index.html`과 hash-bound `manifest.yaml`을 만들 수 있습니다. <!-- claim-id: C-RUNS-POLICY -->
따라서 위 로컬 PNG·SVG를 README에 직접 임베드하지 않았습니다. GitHub에서 지속되는 gallery가 필요하면 검토된 파일을 `examples/` 또는 별도 versioned 문서 asset 경로로 승격하고, provenance와 manifest를 함께 갱신해야 합니다. <!-- claim-id: C-ASSET-PROMOTION -->
자세한 실행 데이터 정책은 [Runtime workspace](runs/README.md)를 참고하십시오.
## 저장소 구조와 변경 위치
<!-- section-id: architecture -->
| 경로 | 정본 책임 | 변경할 때 함께 볼 곳 |
| --- | --- | --- |
| `.agents/`, `.codex/` | AI 도구의 thin discovery adapter | 해당 capability의 `harnesses/` 정본 |
| `harnesses/` | document·technical visual·image capability 정책과 구현 | `packages/` contract, capability test |
| `packages/` | contract, schema support, workflow runtime | schema fixture, conformance·runtime test |
| `integrations/` | frozen projection을 받는 Markdown·Slides·HTML adapter | publication adapter test |
| `tests/` | conformance, contract, runtime, failure injection, E2E | `tests/golden/` regression oracle |
| `examples/` | versioned executable contract chain | validator와 example manifest |
| `benchmarks/` | suite, failure corpus, qualification result | policy의 qualification 상태 |
| `runs/` | ignored local execution data | `runs/README.md`; 정본으로 사용 금지 |
이 소유권 지도에서 `.agents/.codex`는 adapter, `harnesses`는 capability 구현, `packages`는 contract와 runtime, `integrations`는 publication target을 담당합니다. <!-- claim-id: C-LAYER-OWNERSHIP -->
정본 의존 방향은 adapter → harnesses → packages이며, `workflow-runtime`은 handler registry를 통해 harness를 실행하고 frozen projection만 integrations로 보냅니다. Contract와 integration adapter가 harness implementation을 역으로 소유하지 않습니다. <!-- claim-id: C-DEPENDENCY-DIRECTION -->
구체적인 contract chain과 hybrid composition 경계는 [ARCHITECTURE.md](ARCHITECTURE.md)에 있습니다.
## 검증 명령과 증거 수준
<!-- section-id: verification -->
이번 README 작업에서는 다음 세 검증도 저장소 루트에서 실제 실행했습니다.
```bash
python3 -m packages.content_contract.validate_content examples/clean-architecture/content-manifest.yaml --repo-root .
```
<!-- claim-id: C-CMD-CONTENT-MANIFEST -->
결과: `VALID`, exit code 0. <!-- claim-id: C-RESULT-CONTENT-MANIFEST -->
```bash
python3 -m packages.artifact_contract.validate_artifact_set examples/clean-architecture/artifact/attempt-01/artifact-set.yaml --request examples/clean-architecture/visual-request.yaml
```
<!-- claim-id: C-CMD-ARTIFACT-SET -->
결과: `VALID`, exit code 0. 이 검증은 체크인된 contract fixture를 대상으로 하며 fresh renderer execution을 대신하지 않습니다. <!-- claim-id: C-RESULT-ARTIFACT-SET -->
```bash
python3 -m unittest tests.conformance.test_repository_layout
```
<!-- claim-id: C-CMD-LAYOUT-TEST -->
결과: 18개 test가 통과했습니다. 이 범위는 canonical directory와 adapter boundary를 확인하며 전체 suite를 대신하지 않습니다. <!-- claim-id: C-RESULT-LAYOUT-TEST -->
전체 discovery 명령은 다음과 같이 정의돼 있습니다.
```bash
python3 -m unittest discover -s tests -p 'test_*.py'
```
<!-- claim-id: C-CMD-FULL-SUITE -->
전체 suite는 이번 README 작업에서 재실행하지 않았습니다. [2026-07-18 refactoring review](docs/refactoring-review.md#verification-performed)는 별도의 300-test pass를 기록하지만, 이를 이번 실행 결과로 재표현하지 않습니다. <!-- claim-id: C-FULL-SUITE-SCOPE -->
Renderer-backed E2E는 외부 Java/Gradle evidence repository, 외부 source document 또는 scope별 expert review 파일을 요구합니다. exact run root를 단계 사이에 전달하는 명령은 [End-to-end workflows](tests/end-to-end/README.md)에 분리돼 있습니다. <!-- claim-id: C-E2E-PREREQUISITES -->
## 현재 상태와 한계
<!-- section-id: limitations -->
- **설치 재현성:** dependency packaging manifest와 version pin이 없으므로 README는 임의의 패키지 설치 명령이나 최소 버전을 만들지 않습니다. <!-- claim-id: C-LIMIT-PACKAGING -->
- **산출물 지속성:** 실제 PNG·SVG·HTML·Markdown 샘플은 로컬 `runs/`에 있지만 clean checkout이나 GitHub 링크의 영속성을 보장하지 않습니다. <!-- claim-id: C-LIMIT-RUNS -->
- **Benchmark 성숙도:** document-writing과 image-generation suite는 corpus만 정의되고 결과가 pending입니다. Technical visualization의 dependency-direction 비교도 일부 condition과 human preference가 남아 있습니다. <!-- claim-id: C-LIMIT-BENCHMARKS -->
- **Hybrid qualification:** `d2-svg-layer-compositor`의 자동 16-case 증거는 PASS지만 human Gate 3는 `PENDING`입니다. 이 renderer는 qualification candidate이며 qualified renderer로 소개하면 안 됩니다. <!-- claim-id: C-LIMIT-HYBRID -->
- **E2E 입력:** 전체 품질·dependency-direction·redraw 경로는 이 저장소만으로 완결되지 않고 외부 evidence/source와 완료된 expert review를 요구합니다. <!-- claim-id: C-LIMIT-E2E -->
## 문서와 정본 지도
<!-- section-id: documentation -->
정본 설계는 `ARCHITECTURE.md`, 문서 색인은 `docs/README.md`, 실행 작업공간 정책은 `runs/README.md`에 있습니다. <!-- claim-id: C-DOCUMENTATION-MAP -->
- [Architecture](ARCHITECTURE.md) — layering, contract chain, routing, review authority, run identity
- [Documentation map](docs/README.md) — 현재 문서와 historical implementation 기록의 구분
- [Runtime workspace](runs/README.md) — fresh allocation, exact resume, output publication
- [Document Writing Harness](harnesses/document-writing/README.md)
- [Technical Visualization Harness](harnesses/technical-visualization/README.md)
- [Image Generation Harness](harnesses/image-generation/README.md)
- [Workflow Runtime](packages/workflow-runtime/README.md)
- [Clean Architecture example](examples/clean-architecture/)
- [End-to-end workflows](tests/end-to-end/README.md)
- [Benchmarks](benchmarks/technical-visualization/README.md) · [image quality](benchmarks/image-quality/README.md) · [hybrid composition](benchmarks/hybrid-composition/README.md)
과거 phase 문서는 구현 이력일 뿐 현재 capability 정의가 아닙니다. 현재 동작을 바꿀 때는 위 정본과 관련 contract·test·benchmark를 함께 갱신하십시오.
@@ -0,0 +1,214 @@
# Content Harness
<!-- section-id: overview -->
Content Harness는 자연어 기반 콘텐츠 요청을 문서 계획, 정확한 기술 시각화, 유기적 이미지 생성, 검토된 publication output으로 연결하는 provider-neutral Python 시스템입니다. <!-- claim-id: C-IDENTITY -->
문서 작성과 기술 도형, 유기적 이미지에는 서로 다른 생성·검토 기준이 필요합니다. 이 저장소는 세 production harness를 sibling으로 유지하고, `workflow-runtime`만 라우팅·DAG 실행·결과 전달·publication을 조정하도록 책임을 나눕니다. <!-- claim-id: C-SIBLING-MODEL -->
이 README는 저장소를 처음 평가하는 개발자에게는 실행 가능한 contract chain을, 기여자에게는 capability별 변경 위치를, 리뷰어에게는 실제 생성 산출물과 현재 qualification 한계를 보여줍니다.
## 책임이 섞이지 않는 네 capability
<!-- section-id: capabilities -->
### Document Writing
`document-writing`은 독자·서사·근거 연결·시각화 기회를 다루고, ContentJobRequest·Content Manifest·Narrative Plan·publication draft·Visual Request를 만듭니다. 원문을 제자리에서 덮어쓰거나 renderer와 image provider를 선택하지 않습니다. <!-- claim-id: C-DOCUMENT-CAPABILITY -->
### Technical Visualization
`technical-visualization`은 근거에 묶인 semantic model, visual grammar, D2 렌더링, 문서·발표용 rendition을 소유합니다. 현재 실행 가능한 visual type은 `dependency-graph``runtime-sequence`이며, accepted ArtifactSet에는 서로 다른 reviewer가 작성한 technical-semantic·technical-visual review가 필요합니다. <!-- claim-id: C-TECHNICAL-CAPABILITY -->
### Image Generation
`image-generation`은 사진·일러스트·재질·분위기 같은 organic raster를 소유합니다. production 경로는 해시된 후보 3개, pairwise comparison, 명시적 선택, 최대 한 번의 bounded repair를 사용하며, exact architecture relation·chart·state machine·긴 정확 텍스트는 이 capability의 범위 밖입니다. <!-- claim-id: C-IMAGE-CAPABILITY -->
### Workflow Runtime과 Integrations
`workflow-runtime`은 contract validation, routing, cycle-free DAG, freshness, retry, immutable result 수집, integration dispatch, event와 portable output publication을 소유합니다. sibling harness는 서로를 직접 호출하지 않습니다. <!-- claim-id: C-RUNTIME-CAPABILITY -->
Markdown·Slides·HTML adapter는 runtime이 선택해 동결한 publication projection 하나만 소비하며, 내용·관점·route·renderer·provider를 다시 결정하지 않습니다. <!-- claim-id: C-INTEGRATIONS -->
## 2분 검증
<!-- section-id: quick-start -->
### 전제 조건
핵심 contract와 runtime은 Python 3에서 동작하며 PyYAML과 jsonschema를 사용합니다. Raster 검증·preview에는 Pillow가, technical rendering에는 D2가, SVG의 browser preview에는 Chrome 또는 Chromium이 필요합니다. 저장소는 이 도구들의 버전을 고정하지 않습니다. <!-- claim-id: C-PREREQUISITES -->
현재 저장소에는 `pyproject.toml`, `requirements.txt`, `setup.py`, `setup.cfg`, `Pipfile`, `poetry.lock`, `uv.lock`이 없어 하나의 정본 설치 명령을 제시할 수 없습니다. 필요한 도구를 환경에 준비한 뒤 아래 검증을 실행하십시오. <!-- claim-id: C-INSTALLATION-LIMIT -->
### 1. 자연어 요청의 contract 확인
```bash
python3 -m packages.content_job_contract.validate_content_job examples/clean-architecture/content-job-request.yaml --repo-root .
```
<!-- claim-id: C-CMD-CONTENT-JOB -->
이 명령은 이번 README 작성 세션에서 exit code 0으로 완료됐습니다. 출력 없이 종료되면 체크인된 ContentJobRequest가 현재 contract를 통과한 것입니다. <!-- claim-id: C-RESULT-CONTENT-JOB -->
### 2. Front door 계획 확인
```bash
python3 -m packages.workflow_runtime.content_runtime front-door --workflow-request examples/clean-architecture/workflow-request.content-job.yaml --repo-root .
```
<!-- claim-id: C-CMD-FRONT-DOOR -->
이 명령도 exit code 0으로 완료됐고 `primary_capability: document-writing`인 plan을 출력했습니다. 이는 계획 단계의 확인이며 author·review provider를 호출하는 production 실행은 아닙니다. <!-- claim-id: C-RESULT-FRONT-DOOR -->
## 요청에서 publication까지
<!-- section-id: execution-model -->
Contract chain은 `ContentJobRequest``Content Manifest``Narrative Plan``Visual Request``ArtifactSet` → frozen publication projection 순서로 책임을 좁혀 갑니다. JSON Schema는 구조를, Python validator는 현재 파일 hash·safe path·cross-contract ID·evidence·routing·freshness처럼 schema만으로 표현하기 어려운 조건을 확인합니다. <!-- claim-id: C-CONTRACT-CHAIN -->
Visual Request의 신호가 technical-only이면 `technical-visualization`, image-only이면 `image-generation`, 둘 다이면 runtime-owned hybrid DAG로 라우팅됩니다. 신호가 없으면 `BLOCKED_UNRESOLVED`, 명시적 충돌이면 `ROUTING_CONFLICT`입니다. <!-- claim-id: C-ROUTING -->
각 harness는 plan 또는 immutable JobResult를 runtime에 반환합니다. Runtime만 sibling 결과를 조립하고 accepted rendition의 publication projection을 동결해 integration adapter로 넘깁니다. <!-- claim-id: C-RUNTIME-OWNERSHIP -->
Deterministic validation은 expert review를 대신하지 않습니다. 필수 review가 없는 유효한 technical 결과는 `produced`에 머물며 `accepted`나 integration-ready로 승격되지 않습니다. <!-- claim-id: C-ACCEPTANCE-BOUNDARY -->
다음 흐름은 request와 contract가 runtime에서 sibling capability로 분기한 뒤 reviewed draft 또는 accepted ArtifactSet으로 합류하는 지점을 요약합니다. <!-- claim-id: C-FLOW-VISUAL -->
```mermaid
flowchart LR
A["자연어 요청"] --> B["ContentJobRequest / Visual Request"]
B --> R{"workflow-runtime<br/>routing · DAG · freshness"}
R --> D["document-writing"]
R --> T["technical-visualization"]
R --> I["image-generation"]
T --> H["runtime-owned<br/>hybrid composition"]
I --> H
D --> O["reviewed publication draft"]
T --> S["accepted ArtifactSet"]
I --> S
H --> S
O --> P["frozen publication projection"]
S --> P
P --> G["Markdown · Slides · HTML"]
```
<!-- visual-id: content-flow -->
## 생성 산출물 둘러보기
<!-- section-id: artifacts -->
### 버전 관리되는 contract example
[Clean Architecture 예제](examples/clean-architecture/)는 ContentJobRequest부터 Visual Request와 ArtifactSet까지 이어지는 체크인된 contract chain입니다. `artifact/attempt-01/`에는 document·presentation·reveal-step SVG와 `accepted`/`ready` 상태의 manifest가 있지만, 이는 renderer-backed golden이 아니라 최소 contract fixture입니다. <!-- claim-id: C-VERSIONED-FIXTURE -->
- [ArtifactSet manifest](examples/clean-architecture/artifact/attempt-01/artifact-set.yaml)
- [문서용 SVG fixture](examples/clean-architecture/artifact/attempt-01/dependency-directions.svg)
- [발표용 SVG fixture](examples/clean-architecture/artifact/attempt-01/dependency-directions.presentation.svg)
### 현재 작업 사본의 로컬 테스트 산출물
현재 작업 사본에는 문서 작성·기술 시각화·이미지 생성을 함께 통과시킨 로컬 P6 결과가 있습니다. `runs/p6-all-harness-quality-executable-clean-architecture-20260717/output/` 아래에는 `final-document.md`, `index.html`, 전체 문서 `preview.png`, 문서·발표용 dependency-direction SVG, organic PNG 두 target, image candidate contact sheet와 validation manifest가 있습니다. <!-- claim-id: C-LOCAL-P6-OUTPUT -->
문서와 기술 시각화를 함께 시험한 `runs/docvis-20260716-executable-clean-architecture-part1/`에는 통합 HTML, desktop·mobile 문서 preview, 두 figure의 target별 SVG와 PNG fallback, delivery·asset manifest가 있습니다. <!-- claim-id: C-LOCAL-DOCVIS-OUTPUT -->
Best-of-three 이미지 예제인 `runs/img-20260716-japanese-animation-test/`는 3개 후보 중 attempt 2를 `BEST_OF_N_PASS`로 선택하고 `outputs/final-selected.png`를 남겼습니다. <!-- claim-id: C-LOCAL-IMAGE-OUTPUT -->
| 산출물 유형 | 로컬 예시 | 확인할 것 |
| --- | --- | --- |
| 생성 문서 | `output/final-document.md`, `output/index.html`, `output/preview.png` | Markdown·HTML·전체 페이지 preview와 delivery manifest |
| 기술 시각화 | `assets/dependency-directions.document.svg`, `assets/dependency-directions.presentation.svg` | 같은 semantic source의 target별 크기·표현 |
| 생성 이미지 | `assets/editorial-workbench.document.png`, `assets/editorial-workbench.presentation.png` | target별 organic rendition과 선택된 candidate hash |
| 비교·검토 자료 | `assets/image-candidates.png`, `validation-summary.yaml` | 후보 contact sheet와 capability별 validation 결과 |
`runs/**``.gitignore` 대상인 로컬 immutable 실행 작업공간이며 cache나 source of truth가 아닙니다. 새 실행은 `runs/<purpose>/run-<YYYYMMDDTHHMMSSZ>-NNN/`을 할당하고, reviewed deliverable이 있으면 `<run-root>/output/index.html`과 hash-bound `manifest.yaml`을 만들 수 있습니다. <!-- claim-id: C-RUNS-POLICY -->
따라서 위 로컬 PNG·SVG를 README에 직접 임베드하지 않았습니다. GitHub에서 지속되는 gallery가 필요하면 검토된 파일을 `examples/` 또는 별도 versioned 문서 asset 경로로 승격하고, provenance와 manifest를 함께 갱신해야 합니다. <!-- claim-id: C-ASSET-PROMOTION -->
자세한 실행 데이터 정책은 [Runtime workspace](runs/README.md)를 참고하십시오.
## 저장소 구조와 변경 위치
<!-- section-id: architecture -->
| 경로 | 정본 책임 | 변경할 때 함께 볼 곳 |
| --- | --- | --- |
| `.agents/`, `.codex/` | AI 도구의 thin discovery adapter | 해당 capability의 `harnesses/` 정본 |
| `harnesses/` | document·technical visual·image capability 정책과 구현 | `packages/` contract, capability test |
| `packages/` | contract, schema support, workflow runtime | schema fixture, conformance·runtime test |
| `integrations/` | frozen projection을 받는 Markdown·Slides·HTML adapter | publication adapter test |
| `tests/` | conformance, contract, runtime, failure injection, E2E | `tests/golden/` regression oracle |
| `examples/` | versioned executable contract chain | validator와 example manifest |
| `benchmarks/` | suite, failure corpus, qualification result | policy의 qualification 상태 |
| `runs/` | ignored local execution data | `runs/README.md`; 정본으로 사용 금지 |
이 소유권 지도에서 `.agents/.codex`는 adapter, `harnesses`는 capability 구현, `packages`는 contract와 runtime, `integrations`는 publication target을 담당합니다. <!-- claim-id: C-LAYER-OWNERSHIP -->
정본 의존 방향은 adapter → harnesses → packages이며, `workflow-runtime`은 handler registry를 통해 harness를 실행하고 frozen projection만 integrations로 보냅니다. Contract와 integration adapter가 harness implementation을 역으로 소유하지 않습니다. <!-- claim-id: C-DEPENDENCY-DIRECTION -->
구체적인 contract chain과 hybrid composition 경계는 [ARCHITECTURE.md](ARCHITECTURE.md)에 있습니다.
## 검증 명령과 증거 수준
<!-- section-id: verification -->
이번 README 작업에서는 다음 세 검증도 저장소 루트에서 실제 실행했습니다.
```bash
python3 -m packages.content_contract.validate_content examples/clean-architecture/content-manifest.yaml --repo-root .
```
<!-- claim-id: C-CMD-CONTENT-MANIFEST -->
결과: `VALID`, exit code 0. <!-- claim-id: C-RESULT-CONTENT-MANIFEST -->
```bash
python3 -m packages.artifact_contract.validate_artifact_set examples/clean-architecture/artifact/attempt-01/artifact-set.yaml --request examples/clean-architecture/visual-request.yaml
```
<!-- claim-id: C-CMD-ARTIFACT-SET -->
결과: `VALID`, exit code 0. 이 검증은 체크인된 contract fixture를 대상으로 하며 fresh renderer execution을 대신하지 않습니다. <!-- claim-id: C-RESULT-ARTIFACT-SET -->
```bash
python3 -m unittest tests.conformance.test_repository_layout
```
<!-- claim-id: C-CMD-LAYOUT-TEST -->
결과: 18개 test가 통과했습니다. 이 범위는 canonical directory와 adapter boundary를 확인하며 전체 suite를 대신하지 않습니다. <!-- claim-id: C-RESULT-LAYOUT-TEST -->
전체 discovery 명령은 다음과 같이 정의돼 있습니다.
```bash
python3 -m unittest discover -s tests -p 'test_*.py'
```
<!-- claim-id: C-CMD-FULL-SUITE -->
전체 suite는 이번 README 작업에서 재실행하지 않았습니다. [2026-07-18 refactoring review](docs/refactoring-review.md#verification-performed)는 별도의 300-test pass를 기록하지만, 이를 이번 실행 결과로 재표현하지 않습니다. <!-- claim-id: C-FULL-SUITE-SCOPE -->
Renderer-backed E2E는 외부 Java/Gradle evidence repository, 외부 source document 또는 scope별 expert review 파일을 요구합니다. exact run root를 단계 사이에 전달하는 명령은 [End-to-end workflows](tests/end-to-end/README.md)에 분리돼 있습니다. <!-- claim-id: C-E2E-PREREQUISITES -->
## 현재 상태와 한계
<!-- section-id: limitations -->
- **설치 재현성:** dependency packaging manifest와 version pin이 없으므로 README는 임의의 패키지 설치 명령이나 최소 버전을 만들지 않습니다. <!-- claim-id: C-LIMIT-PACKAGING -->
- **산출물 지속성:** 실제 PNG·SVG·HTML·Markdown 샘플은 로컬 `runs/`에 있지만 clean checkout이나 GitHub 링크의 영속성을 보장하지 않습니다. <!-- claim-id: C-LIMIT-RUNS -->
- **Benchmark 성숙도:** document-writing과 image-generation suite는 corpus만 정의되고 결과가 pending입니다. Technical visualization의 dependency-direction 비교도 일부 condition과 human preference가 남아 있습니다. <!-- claim-id: C-LIMIT-BENCHMARKS -->
- **Hybrid qualification:** `d2-svg-layer-compositor`의 자동 16-case 증거는 PASS지만 human Gate 3는 `PENDING`입니다. 이 renderer는 qualification candidate이며 qualified renderer로 소개하면 안 됩니다. <!-- claim-id: C-LIMIT-HYBRID -->
- **E2E 입력:** 전체 품질·dependency-direction·redraw 경로는 이 저장소만으로 완결되지 않고 외부 evidence/source와 완료된 expert review를 요구합니다. <!-- claim-id: C-LIMIT-E2E -->
## 문서와 정본 지도
<!-- section-id: documentation -->
정본 설계는 `ARCHITECTURE.md`, 문서 색인은 `docs/README.md`, 실행 작업공간 정책은 `runs/README.md`에 있습니다. <!-- claim-id: C-DOCUMENTATION-MAP -->
- [Architecture](ARCHITECTURE.md) — layering, contract chain, routing, review authority, run identity
- [Documentation map](docs/README.md) — 현재 문서와 historical implementation 기록의 구분
- [Runtime workspace](runs/README.md) — fresh allocation, exact resume, output publication
- [Document Writing Harness](harnesses/document-writing/README.md)
- [Technical Visualization Harness](harnesses/technical-visualization/README.md)
- [Image Generation Harness](harnesses/image-generation/README.md)
- [Workflow Runtime](packages/workflow-runtime/README.md)
- [Clean Architecture example](examples/clean-architecture/)
- [End-to-end workflows](tests/end-to-end/README.md)
- [Benchmarks](benchmarks/technical-visualization/README.md) · [image quality](benchmarks/image-quality/README.md) · [hybrid composition](benchmarks/hybrid-composition/README.md)
과거 phase 문서는 구현 이력일 뿐 현재 capability 정의가 아닙니다. 현재 동작을 바꿀 때는 위 정본과 관련 contract·test·benchmark를 함께 갱신하십시오.
@@ -0,0 +1,364 @@
--- README.md (current)
+++ README.md (candidate)
@@ -1,153 +1,214 @@
# Content Harness
-A provider-neutral system for planning technical documents, producing exact
-technical visuals, generating organic imagery, and integrating accepted assets
-without coupling sibling capabilities.
-
-Natural-language requests enter through `ContentJobRequest`; users are not
-expected to author the YAML. The document-writing intake normalizes conversation
-plus IDE/provider context, after which workflow-runtime plans the job or routes
-later Visual Requests.
-
-The canonical design is documented in [ARCHITECTURE.md](ARCHITECTURE.md), with
-a task-oriented index in [docs/README.md](docs/README.md). AI tools enter
-through thin skills under `.agents/`; implementation and policy live under
-`packages/`, `harnesses/`, and `integrations/`. Earlier delivery phases are
-kept only as [implementation history](docs/README.md#implementation-history).
-The latest ownership and lifecycle audit is the
-[repository refactoring review](docs/refactoring-review.md).
-
-Current execution additionally enforces current-file freshness at execution
-and integration, content-addressed validation receipts, independent scoped
-reviews, exact per-target technical semantics, and best-of-three raster
-candidate selection. Missing expert review remains an honest `produced` state;
-it is never promoted to `accepted` by deterministic checks alone.
-
-## Capabilities
-
-- `document-writing`: narrative profiles and plans, evidence bindings,
- repetition and abstraction control, natural technical prose, and visual
- request emission.
-- `technical-visualization`: grounded semantic models, exact technical grammar,
- deterministic renderers, document/presentation/reveal variants, and semantic
- plus visual review.
-- `image-generation`: photography, illustration, organic raster editing,
- art-directed candidate search, independent review, and bounded local repair.
-- `workflow-runtime`: contract validation, freshness, routing, DAG execution,
- immutable result collection, rollback dispatch, events, integration, and
- automatic portable `<run-root>/output/` publication for reviewed results.
-
-## Execution model
-
-Every intake or production invocation that passes its pre-execution contract
-and freshness checks starts a new immutable run. Invalid or stale input fails
-before allocation. The runtime does not scan `runs/` for a similar request,
-borrow prior artifacts, or infer resume from a matching request or workflow ID.
-It allocates:
-
-```text
-runs/<purpose>/run-<YYYYMMDDTHHMMSSZ>-NNN/run.yaml
-```
-
-`<purpose>` is a stable, lower-case kebab-case description of the intended
-outcome. The timestamp is UTC; `NNN` resolves same-second collisions. The
-request ID identifies the content intent, the workflow ID identifies its
-planned DAG, and the run ID identifies one concrete execution. They are never
-interchangeable.
-
-Resume is an explicit recovery operation only. The user must name the exact
-failed run; the runtime validates its frozen inputs and appends a
-`WORKFLOW_RESUMED` event without changing immutable `run.yaml`. Completed,
-stale, or merely similar runs are never resume candidates. See the full
-[runtime workspace policy](runs/README.md).
-
-## Repository organization
-
-- `packages/`: contracts, shared validation, reference registry, export
- validation, and workflow runtime.
-- `harnesses/`: capability-owned policies, profiles, workflows, validators,
- reviewers, and implementation.
-- `integrations/`: publication-only Markdown, Slides, and HTML adapters.
-- `examples/`: versioned executable examples.
-- `tests/`: conformance, regression, failure-injection, and golden artifacts.
-- `benchmarks/`: evaluation suites, results, and failure corpora.
-- `runs/`: ignored local executions; never a canonical source.
-- `docs/`: documentation index and clearly separated implementation history.
-
-Directories are created when a capability has content to own or when a run
-actually reaches that stage. Empty placeholder trees are intentionally avoided;
-optional run subdirectories may therefore be absent.
-
-Canonical capability directories keep their hyphenated IDs on disk. Stable
-Python imports use only thin underscore namespace adapters under `packages/`;
-there is no second implementation tree under `harnesses/`.
-
-## Quick validation
-
-The checked-in Clean Architecture example forms one executable contract chain.
-
-```bash
-python3 -m packages.content_job_contract.validate_content_job \
- examples/clean-architecture/content-job-request.yaml --repo-root .
-
-python3 -m packages.workflow_runtime.content_runtime front-door \
- --workflow-request \
- examples/clean-architecture/workflow-request.content-job.yaml \
- --repo-root .
-```
-
-```bash
-python3 -m packages.content_contract.validate_content \
- examples/clean-architecture/content-manifest.yaml --repo-root .
-
-python3 -m packages.content_contract.validate_narrative_plan \
- examples/clean-architecture/narrative-plan.yaml \
- --content-manifest examples/clean-architecture/content-manifest.yaml \
- --reference-registry examples/clean-architecture/reference-registry.yaml \
- --publication examples/clean-architecture/source.md
-
-python3 -m packages.visual_request_contract.validate_visual_request \
- examples/clean-architecture/visual-request.yaml --repo-root . \
- --content-manifest examples/clean-architecture/content-manifest.yaml \
- --reference-registry examples/clean-architecture/reference-registry.yaml
-
-python3 -m packages.artifact_contract.validate_artifact_set \
- examples/clean-architecture/artifact/attempt-01/artifact-set.yaml \
- --request examples/clean-architecture/visual-request.yaml
-
-python3 -m packages.workflow_runtime.content_runtime plan \
- --request examples/clean-architecture/visual-request.yaml \
- --content-manifest examples/clean-architecture/content-manifest.yaml \
- --reference-registry examples/clean-architecture/reference-registry.yaml \
- --repo-root .
-```
-
-Fresh execution asks the allocator for a purpose-scoped run:
-
-```bash
-python3 -m packages.workflow_runtime.content_runtime execute \
- --request examples/clean-architecture/visual-request.yaml \
- --content-manifest examples/clean-architecture/content-manifest.yaml \
- --reference-registry examples/clean-architecture/reference-registry.yaml \
- --repo-root . \
- --runs-dir runs \
- --purpose render-clean-architecture-dependencies
-```
-
-For intake and explicit recovery commands, follow the runtime package
-[usage guide](packages/workflow-runtime/README.md); do not copy a local run path
-from documentation or a previous session.
-
-Image-generation implementation and templates are under
-`harnesses/image-generation/`; technical-visual contracts, templates, and
-validators are under `harnesses/technical-visualization/`.
-
-## Tests
+<!-- section-id: overview -->
+
+Content Harness는 자연어 기반 콘텐츠 요청을 문서 계획, 정확한 기술 시각화, 유기적 이미지 생성, 검토된 publication output으로 연결하는 provider-neutral Python 시스템입니다. <!-- claim-id: C-IDENTITY -->
+
+문서 작성과 기술 도형, 유기적 이미지에는 서로 다른 생성·검토 기준이 필요합니다. 이 저장소는 세 production harness를 sibling으로 유지하고, `workflow-runtime`만 라우팅·DAG 실행·결과 전달·publication을 조정하도록 책임을 나눕니다. <!-- claim-id: C-SIBLING-MODEL -->
+
+이 README는 저장소를 처음 평가하는 개발자에게는 실행 가능한 contract chain을, 기여자에게는 capability별 변경 위치를, 리뷰어에게는 실제 생성 산출물과 현재 qualification 한계를 보여줍니다.
+
+## 책임이 섞이지 않는 네 capability
+
+<!-- section-id: capabilities -->
+
+### Document Writing
+
+`document-writing`은 독자·서사·근거 연결·시각화 기회를 다루고, ContentJobRequest·Content Manifest·Narrative Plan·publication draft·Visual Request를 만듭니다. 원문을 제자리에서 덮어쓰거나 renderer와 image provider를 선택하지 않습니다. <!-- claim-id: C-DOCUMENT-CAPABILITY -->
+
+### Technical Visualization
+
+`technical-visualization`은 근거에 묶인 semantic model, visual grammar, D2 렌더링, 문서·발표용 rendition을 소유합니다. 현재 실행 가능한 visual type은 `dependency-graph`와 `runtime-sequence`이며, accepted ArtifactSet에는 서로 다른 reviewer가 작성한 technical-semantic·technical-visual review가 필요합니다. <!-- claim-id: C-TECHNICAL-CAPABILITY -->
+
+### Image Generation
+
+`image-generation`은 사진·일러스트·재질·분위기 같은 organic raster를 소유합니다. production 경로는 해시된 후보 3개, pairwise comparison, 명시적 선택, 최대 한 번의 bounded repair를 사용하며, exact architecture relation·chart·state machine·긴 정확 텍스트는 이 capability의 범위 밖입니다. <!-- claim-id: C-IMAGE-CAPABILITY -->
+
+### Workflow Runtime과 Integrations
+
+`workflow-runtime`은 contract validation, routing, cycle-free DAG, freshness, retry, immutable result 수집, integration dispatch, event와 portable output publication을 소유합니다. sibling harness는 서로를 직접 호출하지 않습니다. <!-- claim-id: C-RUNTIME-CAPABILITY -->
+
+Markdown·Slides·HTML adapter는 runtime이 선택해 동결한 publication projection 하나만 소비하며, 내용·관점·route·renderer·provider를 다시 결정하지 않습니다. <!-- claim-id: C-INTEGRATIONS -->
+
+## 2분 검증
+
+<!-- section-id: quick-start -->
+
+### 전제 조건
+
+핵심 contract와 runtime은 Python 3에서 동작하며 PyYAML과 jsonschema를 사용합니다. Raster 검증·preview에는 Pillow가, technical rendering에는 D2가, SVG의 browser preview에는 Chrome 또는 Chromium이 필요합니다. 저장소는 이 도구들의 버전을 고정하지 않습니다. <!-- claim-id: C-PREREQUISITES -->
+
+현재 저장소에는 `pyproject.toml`, `requirements.txt`, `setup.py`, `setup.cfg`, `Pipfile`, `poetry.lock`, `uv.lock`이 없어 하나의 정본 설치 명령을 제시할 수 없습니다. 필요한 도구를 환경에 준비한 뒤 아래 검증을 실행하십시오. <!-- claim-id: C-INSTALLATION-LIMIT -->
+
+### 1. 자연어 요청의 contract 확인
+
+```bash
+python3 -m packages.content_job_contract.validate_content_job examples/clean-architecture/content-job-request.yaml --repo-root .
+```
+<!-- claim-id: C-CMD-CONTENT-JOB -->
+
+이 명령은 이번 README 작성 세션에서 exit code 0으로 완료됐습니다. 출력 없이 종료되면 체크인된 ContentJobRequest가 현재 contract를 통과한 것입니다. <!-- claim-id: C-RESULT-CONTENT-JOB -->
+
+### 2. Front door 계획 확인
+
+```bash
+python3 -m packages.workflow_runtime.content_runtime front-door --workflow-request examples/clean-architecture/workflow-request.content-job.yaml --repo-root .
+```
+<!-- claim-id: C-CMD-FRONT-DOOR -->
+
+이 명령도 exit code 0으로 완료됐고 `primary_capability: document-writing`인 plan을 출력했습니다. 이는 계획 단계의 확인이며 author·review provider를 호출하는 production 실행은 아닙니다. <!-- claim-id: C-RESULT-FRONT-DOOR -->
+
+## 요청에서 publication까지
+
+<!-- section-id: execution-model -->
+
+Contract chain은 `ContentJobRequest` → `Content Manifest` → `Narrative Plan` → `Visual Request` → `ArtifactSet` → frozen publication projection 순서로 책임을 좁혀 갑니다. JSON Schema는 구조를, Python validator는 현재 파일 hash·safe path·cross-contract ID·evidence·routing·freshness처럼 schema만으로 표현하기 어려운 조건을 확인합니다. <!-- claim-id: C-CONTRACT-CHAIN -->
+
+Visual Request의 신호가 technical-only이면 `technical-visualization`, image-only이면 `image-generation`, 둘 다이면 runtime-owned hybrid DAG로 라우팅됩니다. 신호가 없으면 `BLOCKED_UNRESOLVED`, 명시적 충돌이면 `ROUTING_CONFLICT`입니다. <!-- claim-id: C-ROUTING -->
+
+각 harness는 plan 또는 immutable JobResult를 runtime에 반환합니다. Runtime만 sibling 결과를 조립하고 accepted rendition의 publication projection을 동결해 integration adapter로 넘깁니다. <!-- claim-id: C-RUNTIME-OWNERSHIP -->
+
+Deterministic validation은 expert review를 대신하지 않습니다. 필수 review가 없는 유효한 technical 결과는 `produced`에 머물며 `accepted`나 integration-ready로 승격되지 않습니다. <!-- claim-id: C-ACCEPTANCE-BOUNDARY -->
+
+다음 흐름은 request와 contract가 runtime에서 sibling capability로 분기한 뒤 reviewed draft 또는 accepted ArtifactSet으로 합류하는 지점을 요약합니다. <!-- claim-id: C-FLOW-VISUAL -->
+
+```mermaid
+flowchart LR
+ A["자연어 요청"] --> B["ContentJobRequest / Visual Request"]
+ B --> R{"workflow-runtime<br/>routing · DAG · freshness"}
+ R --> D["document-writing"]
+ R --> T["technical-visualization"]
+ R --> I["image-generation"]
+ T --> H["runtime-owned<br/>hybrid composition"]
+ I --> H
+ D --> O["reviewed publication draft"]
+ T --> S["accepted ArtifactSet"]
+ I --> S
+ H --> S
+ O --> P["frozen publication projection"]
+ S --> P
+ P --> G["Markdown · Slides · HTML"]
+```
+
+<!-- visual-id: content-flow -->
+
+## 생성 산출물 둘러보기
+
+<!-- section-id: artifacts -->
+
+### 버전 관리되는 contract example
+
+[Clean Architecture 예제](examples/clean-architecture/)는 ContentJobRequest부터 Visual Request와 ArtifactSet까지 이어지는 체크인된 contract chain입니다. `artifact/attempt-01/`에는 document·presentation·reveal-step SVG와 `accepted`/`ready` 상태의 manifest가 있지만, 이는 renderer-backed golden이 아니라 최소 contract fixture입니다. <!-- claim-id: C-VERSIONED-FIXTURE -->
+
+- [ArtifactSet manifest](examples/clean-architecture/artifact/attempt-01/artifact-set.yaml)
+- [문서용 SVG fixture](examples/clean-architecture/artifact/attempt-01/dependency-directions.svg)
+- [발표용 SVG fixture](examples/clean-architecture/artifact/attempt-01/dependency-directions.presentation.svg)
+
+### 현재 작업 사본의 로컬 테스트 산출물
+
+현재 작업 사본에는 문서 작성·기술 시각화·이미지 생성을 함께 통과시킨 로컬 P6 결과가 있습니다. `runs/p6-all-harness-quality-executable-clean-architecture-20260717/output/` 아래에는 `final-document.md`, `index.html`, 전체 문서 `preview.png`, 문서·발표용 dependency-direction SVG, organic PNG 두 target, image candidate contact sheet와 validation manifest가 있습니다. <!-- claim-id: C-LOCAL-P6-OUTPUT -->
+
+문서와 기술 시각화를 함께 시험한 `runs/docvis-20260716-executable-clean-architecture-part1/`에는 통합 HTML, desktop·mobile 문서 preview, 두 figure의 target별 SVG와 PNG fallback, delivery·asset manifest가 있습니다. <!-- claim-id: C-LOCAL-DOCVIS-OUTPUT -->
+
+Best-of-three 이미지 예제인 `runs/img-20260716-japanese-animation-test/`는 3개 후보 중 attempt 2를 `BEST_OF_N_PASS`로 선택하고 `outputs/final-selected.png`를 남겼습니다. <!-- claim-id: C-LOCAL-IMAGE-OUTPUT -->
+
+| 산출물 유형 | 로컬 예시 | 확인할 것 |
+| --- | --- | --- |
+| 생성 문서 | `output/final-document.md`, `output/index.html`, `output/preview.png` | Markdown·HTML·전체 페이지 preview와 delivery manifest |
+| 기술 시각화 | `assets/dependency-directions.document.svg`, `assets/dependency-directions.presentation.svg` | 같은 semantic source의 target별 크기·표현 |
+| 생성 이미지 | `assets/editorial-workbench.document.png`, `assets/editorial-workbench.presentation.png` | target별 organic rendition과 선택된 candidate hash |
+| 비교·검토 자료 | `assets/image-candidates.png`, `validation-summary.yaml` | 후보 contact sheet와 capability별 validation 결과 |
+
+`runs/**`는 `.gitignore` 대상인 로컬 immutable 실행 작업공간이며 cache나 source of truth가 아닙니다. 새 실행은 `runs/<purpose>/run-<YYYYMMDDTHHMMSSZ>-NNN/`을 할당하고, reviewed deliverable이 있으면 `<run-root>/output/index.html`과 hash-bound `manifest.yaml`을 만들 수 있습니다. <!-- claim-id: C-RUNS-POLICY -->
+
+따라서 위 로컬 PNG·SVG를 README에 직접 임베드하지 않았습니다. GitHub에서 지속되는 gallery가 필요하면 검토된 파일을 `examples/` 또는 별도 versioned 문서 asset 경로로 승격하고, provenance와 manifest를 함께 갱신해야 합니다. <!-- claim-id: C-ASSET-PROMOTION -->
+
+자세한 실행 데이터 정책은 [Runtime workspace](runs/README.md)를 참고하십시오.
+
+## 저장소 구조와 변경 위치
+
+<!-- section-id: architecture -->
+
+| 경로 | 정본 책임 | 변경할 때 함께 볼 곳 |
+| --- | --- | --- |
+| `.agents/`, `.codex/` | AI 도구의 thin discovery adapter | 해당 capability의 `harnesses/` 정본 |
+| `harnesses/` | document·technical visual·image capability 정책과 구현 | `packages/` contract, capability test |
+| `packages/` | contract, schema support, workflow runtime | schema fixture, conformance·runtime test |
+| `integrations/` | frozen projection을 받는 Markdown·Slides·HTML adapter | publication adapter test |
+| `tests/` | conformance, contract, runtime, failure injection, E2E | `tests/golden/` regression oracle |
+| `examples/` | versioned executable contract chain | validator와 example manifest |
+| `benchmarks/` | suite, failure corpus, qualification result | policy의 qualification 상태 |
+| `runs/` | ignored local execution data | `runs/README.md`; 정본으로 사용 금지 |
+
+이 소유권 지도에서 `.agents/.codex`는 adapter, `harnesses`는 capability 구현, `packages`는 contract와 runtime, `integrations`는 publication target을 담당합니다. <!-- claim-id: C-LAYER-OWNERSHIP -->
+
+정본 의존 방향은 adapter → harnesses → packages이며, `workflow-runtime`은 handler registry를 통해 harness를 실행하고 frozen projection만 integrations로 보냅니다. Contract와 integration adapter가 harness implementation을 역으로 소유하지 않습니다. <!-- claim-id: C-DEPENDENCY-DIRECTION -->
+
+구체적인 contract chain과 hybrid composition 경계는 [ARCHITECTURE.md](ARCHITECTURE.md)에 있습니다.
+
+## 검증 명령과 증거 수준
+
+<!-- section-id: verification -->
+
+이번 README 작업에서는 다음 세 검증도 저장소 루트에서 실제 실행했습니다.
+
+```bash
+python3 -m packages.content_contract.validate_content examples/clean-architecture/content-manifest.yaml --repo-root .
+```
+<!-- claim-id: C-CMD-CONTENT-MANIFEST -->
+
+결과: `VALID`, exit code 0. <!-- claim-id: C-RESULT-CONTENT-MANIFEST -->
+
+```bash
+python3 -m packages.artifact_contract.validate_artifact_set examples/clean-architecture/artifact/attempt-01/artifact-set.yaml --request examples/clean-architecture/visual-request.yaml
+```
+<!-- claim-id: C-CMD-ARTIFACT-SET -->
+
+결과: `VALID`, exit code 0. 이 검증은 체크인된 contract fixture를 대상으로 하며 fresh renderer execution을 대신하지 않습니다. <!-- claim-id: C-RESULT-ARTIFACT-SET -->
+
+```bash
+python3 -m unittest tests.conformance.test_repository_layout
+```
+<!-- claim-id: C-CMD-LAYOUT-TEST -->
+
+결과: 18개 test가 통과했습니다. 이 범위는 canonical directory와 adapter boundary를 확인하며 전체 suite를 대신하지 않습니다. <!-- claim-id: C-RESULT-LAYOUT-TEST -->
+
+전체 discovery 명령은 다음과 같이 정의돼 있습니다.
```bash
python3 -m unittest discover -s tests -p 'test_*.py'
```
-
-Python helpers require Python 3, PyYAML, jsonschema, and Pillow. Supported
-technical rendering requires D2. SVG preview rendering uses a local Chrome or
-Chromium executable.
+<!-- claim-id: C-CMD-FULL-SUITE -->
+
+전체 suite는 이번 README 작업에서 재실행하지 않았습니다. [2026-07-18 refactoring review](docs/refactoring-review.md#verification-performed)는 별도의 300-test pass를 기록하지만, 이를 이번 실행 결과로 재표현하지 않습니다. <!-- claim-id: C-FULL-SUITE-SCOPE -->
+
+Renderer-backed E2E는 외부 Java/Gradle evidence repository, 외부 source document 또는 scope별 expert review 파일을 요구합니다. exact run root를 단계 사이에 전달하는 명령은 [End-to-end workflows](tests/end-to-end/README.md)에 분리돼 있습니다. <!-- claim-id: C-E2E-PREREQUISITES -->
+
+## 현재 상태와 한계
+
+<!-- section-id: limitations -->
+
+- **설치 재현성:** dependency packaging manifest와 version pin이 없으므로 README는 임의의 패키지 설치 명령이나 최소 버전을 만들지 않습니다. <!-- claim-id: C-LIMIT-PACKAGING -->
+- **산출물 지속성:** 실제 PNG·SVG·HTML·Markdown 샘플은 로컬 `runs/`에 있지만 clean checkout이나 GitHub 링크의 영속성을 보장하지 않습니다. <!-- claim-id: C-LIMIT-RUNS -->
+- **Benchmark 성숙도:** document-writing과 image-generation suite는 corpus만 정의되고 결과가 pending입니다. Technical visualization의 dependency-direction 비교도 일부 condition과 human preference가 남아 있습니다. <!-- claim-id: C-LIMIT-BENCHMARKS -->
+- **Hybrid qualification:** `d2-svg-layer-compositor`의 자동 16-case 증거는 PASS지만 human Gate 3는 `PENDING`입니다. 이 renderer는 qualification candidate이며 qualified renderer로 소개하면 안 됩니다. <!-- claim-id: C-LIMIT-HYBRID -->
+- **E2E 입력:** 전체 품질·dependency-direction·redraw 경로는 이 저장소만으로 완결되지 않고 외부 evidence/source와 완료된 expert review를 요구합니다. <!-- claim-id: C-LIMIT-E2E -->
+
+## 문서와 정본 지도
+
+<!-- section-id: documentation -->
+
+정본 설계는 `ARCHITECTURE.md`, 문서 색인은 `docs/README.md`, 실행 작업공간 정책은 `runs/README.md`에 있습니다. <!-- claim-id: C-DOCUMENTATION-MAP -->
+
+- [Architecture](ARCHITECTURE.md) — layering, contract chain, routing, review authority, run identity
+- [Documentation map](docs/README.md) — 현재 문서와 historical implementation 기록의 구분
+- [Runtime workspace](runs/README.md) — fresh allocation, exact resume, output publication
+- [Document Writing Harness](harnesses/document-writing/README.md)
+- [Technical Visualization Harness](harnesses/technical-visualization/README.md)
+- [Image Generation Harness](harnesses/image-generation/README.md)
+- [Workflow Runtime](packages/workflow-runtime/README.md)
+- [Clean Architecture example](examples/clean-architecture/)
+- [End-to-end workflows](tests/end-to-end/README.md)
+- [Benchmarks](benchmarks/technical-visualization/README.md) · [image quality](benchmarks/image-quality/README.md) · [hybrid composition](benchmarks/hybrid-composition/README.md)
+
+과거 phase 문서는 구현 이력일 뿐 현재 capability 정의가 아닙니다. 현재 동작을 바꿀 때는 위 정본과 관련 contract·test·benchmark를 함께 갱신하십시오.
@@ -0,0 +1,7 @@
schema-version: 1
mode: bootstrap
target-rel: README.md
generated-hash: sha256:bb63802996c738e926449e65ee9319825b4bf4f2ab3379ee31afa85e1d5c3cc4
target-before-hash: sha256:85b08ed1275078bd6ab2a3b72f591658c16ac17e3d3b9f9d9d902542dd119b50
repository-snapshot-hash: sha256:d65d7446cad11d46dabd2080c8393059f36fab426f4d62f18183b2c144c3de29
review-score: 94
@@ -0,0 +1,288 @@
schema-version: 1
claims:
- id: C-IDENTITY
type: factual
statement: Content Harness는 자연어 기반 콘텐츠 요청을 문서 계획, 정확한 기술 시각화, 유기적 이미지 생성, 검토된 publication output으로 연결하는 provider-neutral Python 시스템입니다.
section: overview
sources: [{fact-id: F-IDENTITY}, {fact-id: F-CONTRACT-CHAIN}, {fact-id: F-INTEGRATIONS}]
status: supported
- id: C-SIBLING-MODEL
type: factual
statement: 이 저장소는 세 production harness를 sibling으로 유지하고, `workflow-runtime`만 라우팅·DAG 실행·결과 전달·publication을 조정하도록 책임을 나눕니다.
section: overview
sources: [{fact-id: F-SIBLING-HARNESSES}, {fact-id: F-ROUTING}]
status: supported
- id: C-DOCUMENT-CAPABILITY
type: factual
statement: "`document-writing`은 독자·서사·근거 연결·시각화 기회를 다루고, ContentJobRequest·Content Manifest·Narrative Plan·publication draft·Visual Request를 만듭니다."
section: capabilities
sources: [{fact-id: F-CAPABILITY-DOCUMENT}]
status: supported
- id: C-TECHNICAL-CAPABILITY
type: factual
statement: "`technical-visualization`은 근거에 묶인 semantic model, visual grammar, D2 렌더링, 문서·발표용 rendition을 소유합니다."
section: capabilities
sources: [{fact-id: F-CAPABILITY-TECHNICAL}]
status: supported
- id: C-IMAGE-CAPABILITY
type: factual
statement: "`image-generation`은 사진·일러스트·재질·분위기 같은 organic raster를 소유합니다."
section: capabilities
sources: [{fact-id: F-CAPABILITY-IMAGE}]
status: supported
- id: C-RUNTIME-CAPABILITY
type: factual
statement: "`workflow-runtime`은 contract validation, routing, cycle-free DAG, freshness, retry, immutable result 수집, integration dispatch, event와 portable output publication을 소유합니다."
section: capabilities
sources: [{fact-id: F-SIBLING-HARNESSES}, {fact-id: F-RUN-WORKSPACE}, {fact-id: F-PORTABLE-OUTPUT}]
status: supported
- id: C-INTEGRATIONS
type: factual
statement: Markdown·Slides·HTML adapter는 runtime이 선택해 동결한 publication projection 하나만 소비하며, 내용·관점·route·renderer·provider를 다시 결정하지 않습니다.
section: capabilities
sources: [{fact-id: F-INTEGRATIONS}]
status: supported
- id: C-PREREQUISITES
type: factual
statement: 핵심 contract와 runtime은 Python 3에서 동작하며 PyYAML과 jsonschema를 사용합니다.
section: quick-start
sources: [{fact-id: F-PREREQUISITES}]
status: supported
- id: C-INSTALLATION-LIMIT
type: factual
statement: 현재 저장소에는 `pyproject.toml`, `requirements.txt`, `setup.py`, `setup.cfg`, `Pipfile`, `poetry.lock`, `uv.lock`이 없어 하나의 정본 설치 명령을 제시할 수 없습니다.
section: quick-start
sources: [{fact-id: F-NO-PACKAGE-MANIFEST}]
status: supported
- id: C-CMD-CONTENT-JOB
type: factual
statement: python3 -m packages.content_job_contract.validate_content_job examples/clean-architecture/content-job-request.yaml --repo-root .
section: quick-start
sources: [{fact-id: F-EXAMPLE-CHAIN}, {fact-id: F-EXECUTED-QUICK-CHECKS}]
status: supported
- id: C-RESULT-CONTENT-JOB
type: factual
statement: 이 명령은 이번 README 작성 세션에서 exit code 0으로 완료됐습니다.
section: quick-start
sources: [{fact-id: F-EXECUTED-QUICK-CHECKS}]
status: supported
- id: C-CMD-FRONT-DOOR
type: factual
statement: python3 -m packages.workflow_runtime.content_runtime front-door --workflow-request examples/clean-architecture/workflow-request.content-job.yaml --repo-root .
section: quick-start
sources: [{fact-id: F-EXAMPLE-CHAIN}, {fact-id: F-EXECUTED-QUICK-CHECKS}]
status: supported
- id: C-RESULT-FRONT-DOOR
type: factual
statement: "이 명령도 exit code 0으로 완료됐고 `primary_capability: document-writing`인 plan을 출력했습니다."
section: quick-start
sources: [{fact-id: F-EXECUTED-QUICK-CHECKS}]
status: supported
- id: C-CONTRACT-CHAIN
type: factual
statement: Contract chain은 `ContentJobRequest` → `Content Manifest` → `Narrative Plan` → `Visual Request` → `ArtifactSet` → frozen publication projection 순서로 책임을 좁혀 갑니다.
section: execution-model
sources: [{fact-id: F-CONTRACT-CHAIN}]
status: supported
- id: C-ROUTING
type: factual
statement: Visual Request의 신호가 technical-only이면 `technical-visualization`, image-only이면 `image-generation`, 둘 다이면 runtime-owned hybrid DAG로 라우팅됩니다.
section: execution-model
sources: [{fact-id: F-ROUTING}]
status: supported
- id: C-RUNTIME-OWNERSHIP
type: factual
statement: 각 harness는 plan 또는 immutable JobResult를 runtime에 반환합니다.
section: execution-model
sources: [{fact-id: F-SIBLING-HARNESSES}, {fact-id: F-INTEGRATIONS}]
status: supported
- id: C-ACCEPTANCE-BOUNDARY
type: factual
statement: 필수 review가 없는 유효한 technical 결과는 `produced`에 머물며 `accepted`나 integration-ready로 승격되지 않습니다.
section: execution-model
sources: [{fact-id: F-CAPABILITY-TECHNICAL}]
status: supported
- id: C-FLOW-VISUAL
type: factual
statement: 다음 흐름은 request와 contract가 runtime에서 sibling capability로 분기한 뒤 reviewed draft 또는 accepted ArtifactSet으로 합류하는 지점을 요약합니다.
section: execution-model
sources: [{fact-id: F-SIBLING-HARNESSES}, {fact-id: F-CONTRACT-CHAIN}, {fact-id: F-INTEGRATIONS}]
status: supported
- id: C-VERSIONED-FIXTURE
type: factual
statement: "`artifact/attempt-01/`에는 document·presentation·reveal-step SVG와 `accepted`/`ready` 상태의 manifest가 있지만, 이는 renderer-backed golden이 아니라 최소 contract fixture입니다."
section: artifacts
sources: [{fact-id: F-VERSIONED-VISUALS}]
status: supported
- id: C-LOCAL-P6-OUTPUT
type: factual
statement: "`runs/p6-all-harness-quality-executable-clean-architecture-20260717/output/` 아래에는 `final-document.md`, `index.html`, 전체 문서 `preview.png`, 문서·발표용 dependency-direction SVG, organic PNG 두 target, image candidate contact sheet와 validation manifest가 있습니다."
section: artifacts
sources: [{fact-id: F-LOCAL-CROSS-HARNESS-OUTPUT}]
status: supported
- id: C-LOCAL-DOCVIS-OUTPUT
type: factual
statement: 문서와 기술 시각화를 함께 시험한 `runs/docvis-20260716-executable-clean-architecture-part1/`에는 통합 HTML, desktop·mobile 문서 preview, 두 figure의 target별 SVG와 PNG fallback, delivery·asset manifest가 있습니다.
section: artifacts
sources: [{fact-id: F-LOCAL-DOCUMENT-VISUALIZATION}]
status: supported
- id: C-LOCAL-IMAGE-OUTPUT
type: factual
statement: Best-of-three 이미지 예제인 `runs/img-20260716-japanese-animation-test/`는 3개 후보 중 attempt 2를 `BEST_OF_N_PASS`로 선택하고 `outputs/final-selected.png`를 남겼습니다.
section: artifacts
sources: [{fact-id: F-LOCAL-IMAGE-OUTPUT}]
status: supported
- id: C-RUNS-POLICY
type: factual
statement: "`runs/**`는 `.gitignore` 대상인 로컬 immutable 실행 작업공간이며 cache나 source of truth가 아닙니다."
section: artifacts
sources: [{fact-id: F-RUNS-NONCANONICAL}, {fact-id: F-RUN-WORKSPACE}, {fact-id: F-PORTABLE-OUTPUT}]
status: supported
- id: C-ASSET-PROMOTION
type: factual
statement: GitHub에서 지속되는 gallery가 필요하면 검토된 파일을 `examples/` 또는 별도 versioned 문서 asset 경로로 승격하고, provenance와 manifest를 함께 갱신해야 합니다.
section: artifacts
sources: [{fact-id: F-RUNS-NONCANONICAL}]
status: supported
- id: C-LAYER-OWNERSHIP
type: factual
statement: 이 소유권 지도에서 `.agents/.codex`는 adapter, `harnesses`는 capability 구현, `packages`는 contract와 runtime, `integrations`는 publication target을 담당합니다.
section: architecture
sources: [{fact-id: F-REPOSITORY-LAYERS}]
status: supported
- id: C-DEPENDENCY-DIRECTION
type: factual
statement: 정본 의존 방향은 adapter → harnesses → packages이며, `workflow-runtime`은 handler registry를 통해 harness를 실행하고 frozen projection만 integrations로 보냅니다.
section: architecture
sources: [{fact-id: F-REPOSITORY-LAYERS}, {fact-id: F-SIBLING-HARNESSES}, {fact-id: F-INTEGRATIONS}]
status: supported
- id: C-CMD-CONTENT-MANIFEST
type: factual
statement: python3 -m packages.content_contract.validate_content examples/clean-architecture/content-manifest.yaml --repo-root .
section: verification
sources: [{fact-id: F-EXAMPLE-CHAIN}, {fact-id: F-EXECUTED-QUICK-CHECKS}]
status: supported
- id: C-RESULT-CONTENT-MANIFEST
type: factual
statement: "결과: `VALID`, exit code 0."
section: verification
sources: [{fact-id: F-EXECUTED-QUICK-CHECKS}]
status: supported
- id: C-CMD-ARTIFACT-SET
type: factual
statement: python3 -m packages.artifact_contract.validate_artifact_set examples/clean-architecture/artifact/attempt-01/artifact-set.yaml --request examples/clean-architecture/visual-request.yaml
section: verification
sources: [{fact-id: F-VERSIONED-VISUALS}, {fact-id: F-EXECUTED-QUICK-CHECKS}]
status: supported
- id: C-RESULT-ARTIFACT-SET
type: factual
statement: 이 검증은 체크인된 contract fixture를 대상으로 하며 fresh renderer execution을 대신하지 않습니다.
section: verification
sources: [{fact-id: F-VERSIONED-VISUALS}, {fact-id: F-EXECUTED-QUICK-CHECKS}]
status: supported
- id: C-CMD-LAYOUT-TEST
type: factual
statement: python3 -m unittest tests.conformance.test_repository_layout
section: verification
sources: [{fact-id: F-TEST-INVENTORY}, {fact-id: F-EXECUTED-QUICK-CHECKS}]
status: supported
- id: C-RESULT-LAYOUT-TEST
type: factual
statement: "결과: 18개 test가 통과했습니다."
section: verification
sources: [{fact-id: F-TEST-INVENTORY}, {fact-id: F-EXECUTED-QUICK-CHECKS}]
status: supported
- id: C-CMD-FULL-SUITE
type: factual
statement: python3 -m unittest discover -s tests -p 'test_*.py'
section: verification
sources: [{fact-id: F-TEST-INVENTORY}]
status: supported
- id: C-FULL-SUITE-SCOPE
type: factual
statement: 전체 suite는 이번 README 작업에서 재실행하지 않았습니다.
section: verification
sources: [{fact-id: F-TEST-INVENTORY}]
status: supported
- id: C-E2E-PREREQUISITES
type: factual
statement: Renderer-backed E2E는 외부 Java/Gradle evidence repository, 외부 source document 또는 scope별 expert review 파일을 요구합니다.
section: verification
sources: [{fact-id: F-E2E-INPUTS}]
status: supported
- id: C-LIMIT-PACKAGING
type: factual
statement: dependency packaging manifest와 version pin이 없으므로 README는 임의의 패키지 설치 명령이나 최소 버전을 만들지 않습니다.
section: limitations
sources: [{fact-id: F-NO-PACKAGE-MANIFEST}, {fact-id: F-PREREQUISITES}]
status: supported
- id: C-LIMIT-RUNS
type: factual
statement: 실제 PNG·SVG·HTML·Markdown 샘플은 로컬 `runs/`에 있지만 clean checkout이나 GitHub 링크의 영속성을 보장하지 않습니다.
section: limitations
sources: [{fact-id: F-RUNS-NONCANONICAL}, {fact-id: F-LOCAL-CROSS-HARNESS-OUTPUT}]
status: supported
- id: C-LIMIT-BENCHMARKS
type: factual
statement: document-writing과 image-generation suite는 corpus만 정의되고 결과가 pending입니다.
section: limitations
sources: [{fact-id: F-BENCHMARK-MATURITY}]
status: supported
- id: C-LIMIT-HYBRID
type: factual
statement: "`d2-svg-layer-compositor`의 자동 16-case 증거는 PASS지만 human Gate 3는 `PENDING`입니다."
section: limitations
sources: [{fact-id: F-HYBRID-PENDING}]
status: supported
- id: C-LIMIT-E2E
type: factual
statement: 전체 품질·dependency-direction·redraw 경로는 이 저장소만으로 완결되지 않고 외부 evidence/source와 완료된 expert review를 요구합니다.
section: limitations
sources: [{fact-id: F-E2E-INPUTS}]
status: supported
- id: C-DOCUMENTATION-MAP
type: factual
statement: 정본 설계는 `ARCHITECTURE.md`, 문서 색인은 `docs/README.md`, 실행 작업공간 정책은 `runs/README.md`에 있습니다.
section: documentation
sources: [{fact-id: F-REPOSITORY-LAYERS}, {fact-id: F-RUN-WORKSPACE}]
status: supported
@@ -0,0 +1,13 @@
schema-version: 1
mode: bootstrap
profile: generic
repository-snapshot-hash: sha256:d65d7446cad11d46dabd2080c8393059f36fab426f4d62f18183b2c144c3de29
artifacts:
readme-request.yaml: sha256:0519446d82eff751f66484c9914405c2eeb9f76fcc3215b5a3474966cd817d66
repository-facts.yaml: sha256:92a9f4f57f2ee17521fd80c718716025349fd1fb47e1145597475b0dc5ee0d02
readme-brief.yaml: sha256:76e14ebd90aa11f052f69a05f61e2fed2c95885b15b3801082870ff341b84585
readme-outline.yaml: sha256:331fdd38611d0301cc08960ba3f355e0787591042499bc888bcd335dc73899ce
README.candidate.md: sha256:bb63802996c738e926449e65ee9319825b4bf4f2ab3379ee31afa85e1d5c3cc4
claim-map.yaml: sha256:8156e3921c056a5d5a13aff31e400be758c8f9c4cf4b84ded92554b9325d0824
visual-plan.yaml: sha256:d3d394a7d83a0757a3edd196721808a37e61ec3f637c2f41d5ffc28ac9997bd4
review-findings.yaml: sha256:91840232609197295c642263473c3752f9f0aafee4c6e64c565f32ba679a25a4
@@ -0,0 +1,59 @@
schema-version: 1
project-profile:
primary: generic
secondary:
- multi-capability content workflow
- contract-driven Python system
audiences:
primary:
- 콘텐츠 하네스의 적용 범위와 실행 방법을 평가하는 개발자
- document-writing, technical-visualization, image-generation 흐름에 기여하는 개발자
secondary:
- 생성 문서와 시각 산출물의 계약·검증 방식을 검토하는 기술 리더
reader-outcomes:
- 네 capability의 책임과 서로 호출하지 않는 경계를 설명할 수 있다.
- 체크인된 Clean Architecture 예제를 검증하고 계획 결과를 확인할 수 있다.
- 버전 관리되는 fixture와 무시되는 로컬 생성 산출물을 혼동하지 않는다.
- 변경하려는 계약·하네스·런타임·통합 어댑터의 소유 경로를 찾을 수 있다.
- 현재 의존성, 검증 수준, qualification 한계를 확인할 수 있다.
project-story:
value-proposition: 자연어 콘텐츠 요청을 문서 계획, 기술 시각화, 유기적 이미지, 검토된 publication output으로 연결하되 capability별 책임과 증거 경계를 파일 계약으로 유지한다.
problem: 문서 작성과 정확한 기술 도형, 유기적 이미지 생성, 최종 통합을 한 흐름에서 다루면서도 sibling capability 사이의 의미·검토·실행 책임이 섞이지 않아야 한다.
target-reader: 저장소를 평가·실행하거나 capability와 contract에 기여하는 개발자
notable-traits:
- text: document-writing, technical-visualization, image-generation은 sibling이며 workflow-runtime만 라우팅과 DAG 실행을 소유한다.
fact-ids: [F-SIBLING-HARNESSES, F-ROUTING]
- text: ContentJobRequest에서 ArtifactSet과 publication projection까지 단계별 계약이 분리돼 있다.
fact-ids: [F-CONTRACT-CHAIN, F-INTEGRATIONS]
- text: technical visualization은 의미 모델과 target별 rendition을 묶고, image generation은 exact technical geometry를 의도적으로 거부한다.
fact-ids: [F-CAPABILITY-TECHNICAL, F-CAPABILITY-IMAGE]
- text: 새 실행은 이전 결과를 검색하거나 재사용하지 않고 목적별 immutable run workspace를 할당한다.
fact-ids: [F-RUN-WORKSPACE]
- text: 로컬 테스트에는 문서·PNG·SVG가 함께 생성된 사례가 있지만 runs 경로는 무시되는 운영 데이터다.
fact-ids: [F-LOCAL-CROSS-HARNESS-OUTPUT, F-LOCAL-DOCUMENT-VISUALIZATION, F-LOCAL-IMAGE-OUTPUT, F-RUNS-NONCANONICAL]
maturity: 핵심 계약, 세 capability handler, runtime routing, 통합 adapter, 테스트와 로컬 실행 산출물이 구현돼 있다. 다만 일부 benchmark 결과와 d2-svg-layer-compositor의 사람 qualification은 완료되지 않았다.
limitations:
- 저장소에는 의존성 버전과 설치를 고정하는 packaging manifest가 없다.
- 전체 end-to-end 경로에는 외부 evidence repository와 별도 expert review 파일이 필요하다.
- runs 아래 실제 생성 결과는 로컬·ignored 데이터이므로 GitHub README의 영구 이미지 링크로 사용할 수 없다.
- d2-svg-layer-compositor는 자동 증거가 PASS지만 사람 Gate 3가 PENDING인 qualification candidate다.
narrative-variant: product
reader-journey:
- reader-question: 이 저장소는 무엇을 만들며 누구를 위한 것인가?
section-id: overview
- reader-question: 각 capability는 무엇을 소유하고 어디서 경계가 갈리는가?
section-id: capabilities
- reader-question: 가장 짧은 검증 경로로 구현 상태를 어떻게 확인하는가?
section-id: quick-start
- reader-question: 요청이 계획·생성·검토·publication으로 어떻게 이동하는가?
section-id: execution-model
- reader-question: 생성된 이미지·문서·기술 시각화는 어디서 어떻게 확인하는가?
section-id: artifacts
- reader-question: 기능을 수정하려면 어느 디렉터리와 계약을 봐야 하는가?
section-id: architecture
- reader-question: 명령의 실제 검증 수준과 전체 테스트 진입점은 무엇인가?
section-id: verification
- reader-question: 현재 과장 없이 밝혀야 할 제약과 qualification 상태는 무엇인가?
section-id: limitations
- reader-question: 더 깊은 설계·운영·benchmark 문서는 어디에 있는가?
section-id: documentation
@@ -0,0 +1,146 @@
schema-version: 1
sections:
- id: overview
title-guidance: Content Harness
level: 1
purpose: 프로젝트의 구체적 결과, provider-neutral 경계, 대상 독자를 첫 화면에서 설명한다.
required: true
content-strategy: inline
content-requirements:
- 한 문단 정체성과 가치
- 네 capability와 publication 결과를 한 줄로 요약
- 대상 독자와 README가 제공하는 최소 경로
visual-slot:
decision: exclude
reader-question: 첫 화면에 별도 hero 이미지가 이해를 실질적으로 높이는가?
rationale: 저장소 소유의 영구 hero asset이 없고 로컬 runs 이미지는 ignored이므로 구체적 설명이 더 정확하다.
- id: capabilities
title-guidance: 책임이 섞이지 않는 네 capability
level: 2
purpose: document writing, technical visualization, image generation, workflow runtime의 책임·출력·금지 경계를 비교한다.
required: true
content-strategy: inline
content-requirements:
- 네 capability 비교표
- 기술 도형과 유기적 이미지의 선택 기준
- integrations가 publication projection만 소비한다는 경계
visual-slot:
decision: exclude
reader-question: capability별 책임을 비교할 때 별도 그림이 표보다 나은가?
rationale: 책임·입력·출력·금지를 정확히 짝짓는 표가 탐색과 유지보수에 더 적합하다.
- id: quick-start
title-guidance: 2분 검증
level: 2
purpose: 의존성 전제와 체크인된 예제의 contract validation 및 front-door 계획을 재현한다.
required: true
content-strategy: inline
content-requirements:
- Python과 feature-specific 도구 전제
- canonical install manifest 부재 고지
- 실행 확인된 content-job validation
- 실행 확인된 front-door plan
- 기대 결과와 production execution이 아님을 명시
visual-slot:
decision: exclude
reader-question: 짧은 복사 실행 경로에 그림이 필요한가?
rationale: 두 command와 기대 결과를 순서대로 제시하는 편이 더 직접적이다.
- id: execution-model
title-guidance: 요청에서 publication까지
level: 2
purpose: contract chain, routing, sibling harness, ArtifactSet, integration의 데이터 흐름과 경계를 설명한다.
required: true
content-strategy: inline
content-requirements:
- ContentJobRequest에서 publication projection까지의 단계
- technical-only, image-only, hybrid routing
- runtime만 sibling 결과를 조립한다는 관계
- 검토되지 않은 결과가 publication으로 넘어가지 않는 경계
visual-slot:
decision: include
reader-question: 세 sibling branch와 contract chain이 어디서 합류하는가?
rationale: 선형 설명만으로는 document, technical, image branch와 runtime 소유 합류점을 동시에 파악하기 어렵다.
purpose: 요청과 contract가 workflow-runtime을 통해 sibling capability로 분기하고 검토된 publication으로 합류하는 흐름을 보여준다.
- id: artifacts
title-guidance: 생성 산출물 둘러보기
level: 2
purpose: versioned fixture, 로컬 테스트 생성 문서·이미지·기술 시각화, portable output의 차이를 명시한다.
required: true
content-strategy: inline
content-requirements:
- 체크인된 Clean Architecture contract fixture 링크
- 현재 작업 사본에서 확인된 cross-harness output 유형과 경로
- document visualization 및 best-of-three image 예시
- runs가 ignored이고 정본이 아니라는 경고
- GitHub에 보일 gallery로 쓰려면 examples 또는 docs로 승격해야 한다는 안내
visual-slot:
decision: exclude
reader-question: 로컬 test output을 README에 직접 임베드해도 지속 가능한가?
rationale: runs 전체가 ignored라 링크가 clean checkout과 GitHub에서 깨지므로 경로·유형·승격 정책을 표로 설명한다.
- id: architecture
title-guidance: 저장소 구조와 변경 위치
level: 2
purpose: adapters, harnesses, packages, integrations, tests, examples, benchmarks, runs의 소유권과 의존 방향을 연결한다.
required: true
content-strategy: inline
content-requirements:
- 주요 디렉터리 책임 표
- canonical dependency direction
- 계약·capability·runtime·publication 변경 시 시작 위치
visual-slot:
decision: exclude
reader-question: 기여 위치를 찾는 데 두 번째 구조 그림이 필요한가?
rationale: 이미 execution flow visual이 있고 경로·책임 표가 파일 탐색에는 더 정확하다.
- id: verification
title-guidance: 검증 명령과 증거 수준
level: 2
purpose: 이번 README 작업에서 실행한 명령과 발견만 한 전체 suite를 분리해 제시한다.
required: true
content-strategy: inline
content-requirements:
- 실행 확인한 contract, ArtifactSet, layout test 명령
- full unittest discovery command는 미실행임을 명시
- end-to-end는 외부 evidence와 review 파일이 필요하다는 링크
- 명령별 성공 신호
visual-slot:
decision: exclude
reader-question: 검증 수준 선택에 그림이 필요한가?
rationale: 목적·명령·성공 신호·실행 수준을 짝지은 표가 더 명료하다.
- id: limitations
title-guidance: 현재 상태와 한계
level: 2
purpose: dependency metadata, ignored outputs, benchmark maturity, external inputs, qualification 상태를 과장 없이 밝힌다.
required: true
content-strategy: inline
content-requirements:
- canonical dependency installer와 version pin 부재
- runs 출력의 비영속성
- document/image benchmark 결과 pending
- d2-svg-layer-compositor 사람 Gate 3 pending
- 전체 unittest suite는 이번 README 작업에서 재실행하지 않았다는 검증 범위
visual-slot:
decision: exclude
reader-question: 현재 제약을 이해하는 데 그림이 필요한가?
rationale: 상태·영향·후속 행동을 한 줄씩 연결한 목록이 더 정확하다.
- id: documentation
title-guidance: 문서와 정본 지도
level: 2
purpose: architecture, runtime workspace, capability guide, examples, benchmark로 목적별 이동 경로를 제공한다.
required: true
content-strategy: inline
content-requirements:
- ARCHITECTURE.md와 docs/README.md
- runs/README.md
- 세 harness README와 workflow runtime README
- examples, end-to-end, benchmark index
visual-slot:
decision: exclude
reader-question: 세부 정본을 찾는 데 시각화가 필요한가?
rationale: 목적별 상대 링크 목록이 GitHub 탐색과 유지보수에 가장 적합하다.
@@ -0,0 +1,51 @@
schema-version: 1
target:
repository: /home/donghyeon/workspace/ai-tool/image-haness
readme-path: README.md
mode: bootstrap
profile-override: generic
project-intent:
purpose: 저장소의 문서 작성, 기술 시각화, 이미지 생성, 통합 실행 흐름을 실제 구현과 검증 가능한 산출물에 근거해 한눈에 설명한다.
positioning: 콘텐츠 하네스를 평가·실행하려는 개발자와 각 capability에 기여하려는 개발자를 위한 저장소 진입 문서다.
maturity: 체크인된 구현·테스트·실행 산출물과 현재 의존성 및 한계를 과장 없이 구분해 문서화한다.
audience:
primary:
- 콘텐츠 하네스의 적용 범위와 실행 방법을 평가하는 개발자
- document-writing, technical-visualization, image-generation 흐름에 기여하는 개발자
secondary:
- 생성 문서와 시각 산출물의 계약·검증 방식을 검토하는 기술 리더
reader-actions:
- 프로젝트가 해결하는 문제와 capability 경계를 빠르게 파악한다.
- 대표 예제를 정적으로 검증하고 전체 테스트 진입점을 찾는다.
- 테스트로 생성된 이미지, 문서, 기술 시각화의 실제 예시를 탐색한다.
- 주요 패키지와 하네스의 책임 및 실행 데이터 흐름을 이해한다.
- 필수·선택 도구와 현재 한계를 확인한다.
content-policy:
language: ko-KR
tone: 간결하고 기술적이며 검증 수준과 산출물 성격을 명확히 구분하는 설명체
target-length: long
preserve-existing-copy: false
detail-docs-policy: summary-and-link
visual-policy:
mode: when-useful
max-visuals: 2
preferred-formats:
- repository-owned raster or SVG artifact
- mermaid
placeholder-format: HTML 주석 기반 제작 사양; 검증된 기존 산출물은 저장소 상대 경로로 직접 표시
must-include:
- 프로젝트 개요와 대상 독자
- document-writing, technical-visualization, image-generation, workflow-runtime의 책임과 연결 관계
- 대표 검증 또는 실행 흐름과 명령별 검증 수준
- 테스트로 생성된 이미지, 문서, 기술 시각화 산출물의 실제 경로와 성격
- 저장소 구조와 기여 위치
- 필수 및 선택 도구
- runs 디렉터리의 실행 기록 성격과 정본으로 사용하지 않는다는 경계
- 현재 구현 상태와 확인된 한계
- ARCHITECTURE.md와 docs 색인 링크
must-exclude:
- 저장소 근거가 없는 기능·버전·성능·품질 우위 주장
- 실패·중간 후보 산출물을 성공 예시로 오인시키는 표현
- 비밀 값 또는 개인 환경의 절대 경로
- 상세 설계 이력과 모든 run 파일의 장문 나열
protected-sections: []
@@ -0,0 +1,583 @@
schema-version: 1
repository-snapshot-hash: sha256:d65d7446cad11d46dabd2080c8393059f36fab426f4d62f18183b2c144c3de29
project-name: Content Harness
languages: [Python, YAML, JSON, Markdown]
facts:
- id: F-IDENTITY
category: identity
key: project-purpose
value:
name: Content Harness
purpose: provider-neutral technical-document planning, exact technical visualization, organic image generation, and accepted-asset publication
assertion-type: derived
confidence: high
evidence:
- path: README.md
line-start: 1
line-end: 14
source-kind: project-documentation
- path: packages/workflow-runtime/handlers.yaml
line-start: 1
line-end: 8
source-kind: handler-registry
- id: F-REPOSITORY-LAYERS
category: architecture
key: canonical-layer-ownership
value:
.agents-and-.codex: thin provider discovery adapters
harnesses: capability policy and implementation canon
packages: contracts and runtime canon
integrations: publication target adapters
tests: repository-wide validation and golden artifacts
examples: versioned executable examples
benchmarks: evaluation suites and failure corpora
runs: ignored local workflow data
assertion-type: observed
confidence: high
evidence:
- path: ARCHITECTURE.md
line-start: 3
line-end: 28
source-kind: architecture-documentation
- path: .codex/agents/natural-prose-reviewer.toml
line-start: 1
line-end: 9
source-kind: thin-provider-adapter
- id: F-SIBLING-HARNESSES
category: architecture
key: sibling-harness-runtime-boundary
value:
handlers: [document-writing, technical-visualization, image-generation]
rule: sibling harnesses return plans or results and do not call one another
runtime-responsibility: validation, routing, DAG execution, retries, result transfer, integration, and events
execution-boundary: workflow-runtime -> handlers.yaml -> HarnessHandler -> immutable JobResult
assertion-type: observed
confidence: high
evidence:
- path: ARCHITECTURE.md
line-start: 30
line-end: 53
source-kind: architecture-documentation
- path: packages/workflow-runtime/handlers.yaml
line-start: 1
line-end: 8
source-kind: handler-registry
- path: tests/conformance/test_repository_layout.py
line-start: 43
line-end: 51
source-kind: conformance-test
- id: F-CAPABILITY-DOCUMENT
category: capability
key: document-writing
value:
owns: [narrative, audience, evidence linkage, visual-opportunity detection, figure context]
operations: [document-writing.intake, document-writing.analyze, document-writing.plan, document-writing.revise, document-writing.draft]
outputs: [content-job-request, publication-draft, content-manifest, narrative-plan, narrative-analysis, reviews, visual-requests]
boundary: never edits the source document in place and does not select renderers or generate imagery
assertion-type: observed
confidence: high
evidence:
- path: harnesses/document-writing/README.md
line-start: 3
line-end: 29
source-kind: capability-documentation
- path: harnesses/document-writing/capability.yaml
line-start: 1
line-end: 22
source-kind: capability-declaration
- path: harnesses/document-writing/handler.py
line-start: 253
line-end: 345
symbol: DocumentWritingHandler
source-kind: implementation
- id: F-CAPABILITY-TECHNICAL
category: capability
key: technical-visualization
value:
owns: [evidence-grounded semantic models, visual grammar, deterministic rendering, target-specific renditions]
executable-visual-types: [dependency-graph, runtime-sequence]
renderer: d2
output-profiles: [document, presentation]
acceptance-boundary: separate exact-input technical-semantic and technical-visual expert reviews are required
assertion-type: observed
confidence: high
evidence:
- path: harnesses/technical-visualization/README.md
line-start: 3
line-end: 23
source-kind: capability-documentation
- path: harnesses/technical-visualization/capability.yaml
line-start: 1
line-end: 23
source-kind: capability-declaration
- path: harnesses/technical-visualization/handler.py
line-start: 904
line-end: 962
symbol: TechnicalVisualizationHandler
source-kind: implementation
- id: F-CAPABILITY-IMAGE
category: capability
key: image-generation
value:
owns: [organic raster imagery, photography, illustration, bounded candidate search, local repair]
operations: [image-generation.generate, image-generation.generate-component]
production-model: three hashed candidates, pairwise comparison, explicit selection, and at most one bounded repair
excluded: [exact architecture relations, charts, state transitions, long exact text, evidence-derived technical geometry]
assertion-type: observed
confidence: high
evidence:
- path: harnesses/image-generation/README.md
line-start: 3
line-end: 26
source-kind: capability-documentation
- path: harnesses/image-generation/capability.yaml
line-start: 1
line-end: 24
source-kind: capability-declaration
- path: harnesses/image-generation/handler.py
line-start: 246
line-end: 301
symbol: ImageGenerationHandler
source-kind: implementation
- id: F-ROUTING
category: architecture
key: visual-routing-policy
value:
technical-only: technical-visualization
image-only: image-generation
both: hybrid DAG
neither: BLOCKED_UNRESOLVED
explicit-conflict: ROUTING_CONFLICT
assertion-type: observed
confidence: high
evidence:
- path: ARCHITECTURE.md
line-start: 100
line-end: 118
source-kind: architecture-documentation
- path: packages/workflow-runtime/policies/routing.yaml
line-start: 27
line-end: 31
source-kind: runtime-policy
- id: F-CONTRACT-CHAIN
category: architecture
key: content-to-publication-contract-chain
value:
- ContentJobRequest
- Content Manifest
- Narrative Plan
- Visual Request
- ArtifactSet
- frozen publication projection
assertion-type: observed
confidence: high
evidence:
- path: ARCHITECTURE.md
line-start: 69
line-end: 98
source-kind: architecture-documentation
- id: F-INTEGRATIONS
category: capability
key: publication-adapters
value:
targets: [Markdown, Slides, HTML]
input: one runtime-selected frozen publication projection
boundary: adapters do not choose content, route, renderer, provider, or visual grammar
assertion-type: observed
confidence: high
evidence:
- path: integrations/README.md
line-start: 1
line-end: 11
source-kind: integration-documentation
- id: F-EXAMPLE-CHAIN
category: examples
key: checked-in-clean-architecture-chain
value:
root: examples/clean-architecture
contracts: [content-job-request.yaml, content-manifest.yaml, narrative-plan.yaml, reference-registry.yaml, visual-request.yaml, workflow-request.content-job.yaml, workflow-request.visual.yaml, artifact/attempt-01/artifact-set.yaml]
assertion-type: observed
confidence: high
evidence:
- path: tests/conformance/test_repository_layout.py
line-start: 480
line-end: 496
source-kind: conformance-test
- path: examples/clean-architecture/content-job-request.yaml
source-kind: versioned-example
- id: F-VERSIONED-VISUALS
category: artifacts
key: checked-in-technical-visual-contract-fixture
value:
artifact-status: accepted
integration-status: ready
scope: contract-only fixture rather than renderer-backed golden comparison
renditions:
- {path: examples/clean-architecture/artifact/attempt-01/dependency-directions.svg, target: document, dimensions: 820x460}
- {path: examples/clean-architecture/artifact/attempt-01/dependency-directions.presentation.svg, target: presentation, dimensions: 1600x900}
- {path: examples/clean-architecture/artifact/attempt-01/dependency-directions.presentation-step-1.svg, target: presentation-reveal-step, dimensions: 1600x900}
assertion-type: observed
confidence: high
evidence:
- path: examples/clean-architecture/artifact/attempt-01/artifact-set.yaml
line-start: 2
line-end: 78
source-kind: artifact-manifest
- path: tests/golden/dependency-directions/README.md
line-start: 1
line-end: 7
source-kind: golden-fixture-documentation
- id: F-RUN-WORKSPACE
category: runtime
key: fresh-run-allocation
value:
path: runs/<purpose>/run-<YYYYMMDDTHHMMSSZ>-NNN/
semantics: each valid fresh intake or execution creates a new immutable workspace; matching request or workflow ids do not authorize reuse
optional-output: <run-root>/output/
assertion-type: observed
confidence: high
evidence:
- path: runs/README.md
line-start: 1
line-end: 32
source-kind: runtime-workspace-policy
- path: packages/workflow-runtime/README.md
line-start: 86
line-end: 98
source-kind: runtime-documentation
- id: F-PORTABLE-OUTPUT
category: artifacts
key: reviewed-output-bundle
value:
location: <run-root>/output/
entrypoint: index.html
manifest: manifest.yaml
condition: reviewed publication draft or accepted integration-ready ArtifactSet
assertion-type: observed
confidence: high
evidence:
- path: packages/workflow-runtime/README.md
line-start: 216
line-end: 221
source-kind: runtime-documentation
- path: tests/runtime/test_output_bundle.py
line-start: 176
line-end: 204
symbol: test_bundle_is_portable_and_manifest_hashes_match
source-kind: runtime-test
- id: F-LOCAL-CROSS-HARNESS-OUTPUT
category: artifacts
key: local-cross-harness-test-output
value:
root: runs/p6-all-harness-quality-executable-clean-architecture-20260717/output
generated-document: [README.md, final-document.md, index.html, preview.png]
technical-visualization: [assets/dependency-directions.document.svg, assets/dependency-directions.presentation.svg]
image-generation: [assets/editorial-workbench.document.png, assets/editorial-workbench.presentation.png, assets/image-candidates.png]
validation: validation-summary.yaml
assertion-type: observed
confidence: high
evidence:
- path: runs/p6-all-harness-quality-executable-clean-architecture-20260717/output/manifest.yaml
line-start: 1
line-end: 35
source-kind: local-generated-output-manifest
- path: runs/p6-all-harness-quality-executable-clean-architecture-20260717/output/README.md
line-start: 1
line-end: 12
source-kind: local-generated-document
- path: runs/p6-all-harness-quality-executable-clean-architecture-20260717/output/preview.png
source-kind: local-generated-preview
- id: F-LOCAL-DOCUMENT-VISUALIZATION
category: artifacts
key: local-document-visualization-test-output
value:
root: runs/docvis-20260716-executable-clean-architecture-part1
document-output: document/part1-integrated.html
figures: [fig-invisible-shortcut, fig-enforcement-gradient]
formats: [desktop-SVG, mobile-SVG, PNG-fallback]
previews: [integrated-previews/part1-desktop.png, integrated-previews/part1-mobile-v2.png]
assertion-type: observed
confidence: high
evidence:
- path: runs/docvis-20260716-executable-clean-architecture-part1/delivery/delivery-manifest.yaml
line-start: 1
line-end: 24
source-kind: local-delivery-manifest
- path: runs/docvis-20260716-executable-clean-architecture-part1/figures/fig-enforcement-gradient/asset-manifest.yaml
line-start: 1
line-end: 30
source-kind: local-figure-manifest
- id: F-LOCAL-IMAGE-OUTPUT
category: artifacts
key: local-best-of-three-image-test-output
value:
root: runs/img-20260716-japanese-animation-test
generation-candidates: 3
selected-attempt: 2
selected-output: outputs/final-selected.png
selection-label: BEST_OF_N_PASS
assertion-type: observed
confidence: high
evidence:
- path: runs/img-20260716-japanese-animation-test/selection.json
line-start: 1
line-end: 64
source-kind: local-selection-record
- path: runs/img-20260716-japanese-animation-test/outputs/final-selected.png
source-kind: local-generated-image
- id: F-RUNS-NONCANONICAL
category: limitation
key: local-run-durability
value: runs/** is ignored local operational data, not a cache or source of truth; reusable examples belong under examples, regression oracles under tests/golden, and evaluation corpora under benchmarks
assertion-type: observed
confidence: high
evidence:
- path: .gitignore
line-start: 5
line-end: 7
source-kind: ignore-policy
- path: runs/README.md
line-start: 1
line-end: 7
source-kind: runtime-workspace-policy
- path: docs/README.md
line-start: 23
line-end: 35
source-kind: documentation-policy
- id: F-PREREQUISITES
category: prerequisites
key: runtime-tools
value:
language: Python 3
python-packages: [PyYAML, jsonschema, Pillow]
feature-specific-tools:
technical-rendering: D2
SVG-preview: Chrome or Chromium
version-pins: not declared
assertion-type: derived
confidence: high
evidence:
- path: README.md
line-start: 151
line-end: 153
source-kind: project-documentation
- path: packages/schema-support/src/contract_support.py
line-start: 13
line-end: 14
source-kind: dependency-import
- path: packages/export-validator/src/validate_export.py
line-start: 1
line-end: 14
source-kind: dependency-import
- path: harnesses/technical-visualization/renderers/d2/renderer.py
line-start: 206
line-end: 213
source-kind: renderer-implementation
- path: harnesses/image-generation/scripts/render_svg_preview.py
line-start: 18
line-end: 31
source-kind: preview-implementation
- id: F-NO-PACKAGE-MANIFEST
category: limitation
key: dependency-installation-metadata
value: no pyproject.toml, requirements.txt, setup.py, setup.cfg, Pipfile, poetry.lock, or uv.lock is present; dependency versions and one canonical installation command cannot be evidenced
assertion-type: observed
confidence: high
evidence:
- path: .
source-kind: repository-file-scan
- id: F-TEST-INVENTORY
category: tests
key: unittest-suite
value:
framework: unittest
observed-test-methods: 300
groups: [conformance, contracts, failure_injection, harnesses, integrations, runtime]
declared-latest-full-run: 300 tests passed in repository refactoring review
current-readme-run-check: repository-layout module passed 18 tests
assertion-type: derived
confidence: high
evidence:
- path: tests
source-kind: test-directory-scan
- path: docs/refactoring-review.md
line-start: 76
line-end: 91
source-kind: declared-verification-report
- path: tests/conformance/test_repository_layout.py
source-kind: executed-test-module
- id: F-EXECUTED-QUICK-CHECKS
category: verification
key: readme-authoring-session-executions
value:
date: 2026-07-18
content-job-request-validation: {exit-code: 0}
content-manifest-validation: {exit-code: 0, output: VALID}
front-door-content-plan: {exit-code: 0, primary-capability: document-writing}
artifact-set-validation: {exit-code: 0, output: VALID}
repository-layout-tests: {tests: 18, result: PASS}
assertion-type: executed
confidence: high
evidence:
- path: packages/content-job-contract/src/validate_content_job.py
source-kind: executed-entrypoint
- path: packages/content-contract/src/validate_content.py
source-kind: executed-entrypoint
- path: packages/workflow-runtime/src/content_runtime.py
source-kind: executed-entrypoint
- path: packages/artifact-contract/src/validate_artifact_set.py
source-kind: executed-entrypoint
- path: tests/conformance/test_repository_layout.py
source-kind: executed-test-module
- id: F-E2E-INPUTS
category: prerequisites
key: end-to-end-external-inputs
value:
dependency-directions: [external Java/Gradle evidence repository, completed technical review file, completed narrative review file]
part1-redraw: [external source document, completed expert review file]
all-harness-quality: [external Java/Gradle evidence repository, stage-specific review files]
assertion-type: declared
confidence: high
evidence:
- path: tests/end-to-end/README.md
line-start: 68
line-end: 139
source-kind: end-to-end-documentation
- id: F-HYBRID-PENDING
category: limitation
key: d2-svg-layer-compositor-status
value:
automated-evidence: PASS
human-qualification: PENDING
production-status: qualification candidate, not qualified renderer
assertion-type: observed
confidence: high
evidence:
- path: packages/workflow-runtime/policies/qualification.yaml
line-start: 29
line-end: 33
source-kind: qualification-policy
- path: benchmarks/hybrid-composition/results/d2-svg-layer-compositor-qualification.yaml
line-start: 1
line-end: 9
source-kind: automated-qualification-result
- path: benchmarks/hybrid-composition/results/d2-svg-layer-compositor-qualification.yaml
line-start: 65
line-end: 72
source-kind: human-qualification-result
- id: F-BENCHMARK-MATURITY
category: limitation
key: qualification-corpus-status
value:
document-writing: corpus-defined-results-pending
image-generation: corpus-defined-results-pending
technical-visualization: dependency-directions comparison has unexecuted conditions and pending human preference
assertion-type: observed
confidence: high
evidence:
- path: benchmarks/document-writing/suite.yaml
line-start: 1
line-end: 32
source-kind: benchmark-suite
- path: benchmarks/image-quality/suite.yaml
line-start: 1
line-end: 41
source-kind: benchmark-suite
- path: benchmarks/technical-visualization/results/dependency-directions-qualification.yaml
line-start: 1
line-end: 25
source-kind: benchmark-result
- id: F-NO-GIT-METADATA
category: limitation
key: repository-snapshot
value: the supplied directory has an empty .git directory, so no commit SHA or clean/dirty Git state can be established; the README run uses a repository content hash instead
assertion-type: observed
confidence: high
evidence:
- path: .
source-kind: filesystem-and-git-probe
commands:
- id: CMD-001
command: python3 -m packages.content_job_contract.validate_content_job examples/clean-architecture/content-job-request.yaml --repo-root .
cwd: .
source: {path: packages/content-job-contract/README.md, line-start: 21, line-end: 25}
verification:
status: executed
method: executed from the repository root on 2026-07-18; exit code 0
level: isolated-execution
limitations: [validates the checked-in ContentJobRequest only]
- id: CMD-002
command: python3 -m packages.workflow_runtime.content_runtime front-door --workflow-request examples/clean-architecture/workflow-request.content-job.yaml --repo-root .
cwd: .
source: {path: README.md, line-start: 93, line-end: 96}
verification:
status: executed
method: executed from the repository root on 2026-07-18; exit code 0 and a document-writing plan was emitted
level: isolated-execution
limitations: [plans the checked-in request but does not execute production providers]
- id: CMD-003
command: python3 -m packages.content_contract.validate_content examples/clean-architecture/content-manifest.yaml --repo-root .
cwd: .
source: {path: README.md, line-start: 99, line-end: 102}
verification:
status: executed
method: executed from the repository root on 2026-07-18; exit code 0 and output VALID
level: isolated-execution
limitations: [validates the checked-in Content Manifest only]
- id: CMD-004
command: python3 -m packages.artifact_contract.validate_artifact_set examples/clean-architecture/artifact/attempt-01/artifact-set.yaml --request examples/clean-architecture/visual-request.yaml
cwd: .
source: {path: README.md, line-start: 114, line-end: 116}
verification:
status: executed
method: executed from the repository root on 2026-07-18; exit code 0 and output VALID
level: isolated-execution
limitations: [validates the checked-in contract fixture rather than a fresh renderer run]
- id: CMD-005
command: python3 -m unittest tests.conformance.test_repository_layout
cwd: .
source: {path: tests/conformance/test_repository_layout.py}
verification:
status: executed
method: executed from the repository root on 2026-07-18; 18 tests passed
level: isolated-execution
limitations: [covers repository layout only, not the full suite]
- id: CMD-006
command: python3 -m unittest discover -s tests -p 'test_*.py'
cwd: .
source: {path: README.md, line-start: 145, line-end: 149}
verification:
status: discovered
method: located in the current root README and unittest tree
level: static
limitations: [not executed during this README rewrite; the refactoring review separately declares an earlier 300-test pass]
@@ -0,0 +1,7 @@
{
"git-sha": null,
"dirty": true,
"diff-hash": "sha256:d65d7446cad11d46dabd2080c8393059f36fab426f4d62f18183b2c144c3de29",
"scanned-at": null,
"file-count": 560
}
@@ -0,0 +1,54 @@
schema-version: 1
verdict: PASS
score: 94
scores:
project-specificity:
score: 5
evidence:
- "overview·capabilities: ContentJobRequest, sibling harness, workflow-runtime, ArtifactSet, frozen publication projection 등 이 저장소 고유의 책임과 계약을 첫 화면부터 구체적으로 설명한다. 근거: F-IDENTITY, F-SIBLING-HARNESSES, F-CONTRACT-CHAIN, F-INTEGRATIONS."
- "artifacts: 체크인된 Clean Architecture fixture와 P6·docvis·best-of-three 로컬 결과를 실제 경로·산출물 유형·검토 상태로 구분한다. 근거: F-VERSIONED-VISUALS, F-LOCAL-CROSS-HARNESS-OUTPUT, F-LOCAL-DOCUMENT-VISUALIZATION, F-LOCAL-IMAGE-OUTPUT."
reader-journey:
score: 5
evidence:
- overview → capability 경계 → 2분 검증 → 실행 모델 → 산출물 → 변경 위치 → 검증 수준 → 한계 → 정본 문서 순서가 평가자와 기여자의 질문을 자연스럽게 해소한다.
- artifacts와 limitations에서 ignored runs를 실제 결과의 탐색 위치로 안내하면서도 clean checkout·GitHub에서 지속되는 정본으로 오인하지 않도록 즉시 경계를 설명한다.
technical-explanation:
score: 5
evidence:
- "execution-model: contract chain, technical-only·image-only·hybrid routing, runtime-owned composition, expert review와 acceptance 경계를 책임 흐름으로 연결한다. 근거: F-CONTRACT-CHAIN, F-ROUTING, F-SIBLING-HARNESSES, F-CAPABILITY-TECHNICAL."
- "architecture: adapter·harnesses·packages·integrations의 소유권과 adapter → harnesses → packages 의존 방향을 변경 위치 표 및 정본 링크와 함께 설명한다. 근거: F-REPOSITORY-LAYERS, F-SIBLING-HARNESSES, F-INTEGRATIONS."
task-usability:
score: 4
evidence:
- "quick-start: 전제 조건, packaging manifest 부재, 실행 위치가 명확한 두 명령, 기대 결과, front-door가 production provider 실행이 아니라는 범위를 한 경로로 제공한다."
- "verification: CMD-001부터 CMD-005까지의 실제 exit 0 실행과 CMD-006의 명시적 미실행을 구분하고, fixture 검증·layout test가 전체 실행을 대신하지 않는다고 밝힌다. 다만 정본 설치 명령과 version pin이 없어 새 환경에서는 독자가 의존성을 별도로 준비해야 한다."
prose-clarity:
score: 4
evidence:
- 전체 문서는 짧은 문단, 경로·책임 표, 제한 목록으로 214줄의 긴 범위를 탐색 가능하게 유지하며 성공·accepted·ready·pending 상태를 과장 없이 구분한다.
- capabilities와 execution-model 일부에서 contract·publication·rendition·provider 같은 영문 용어가 밀집하고, 실행 확인이 quick-start와 verification 두 곳에 나뉘지만 의미 중복은 제한적이고 섹션 목적은 분명하다.
visual-judgment:
score: 5
evidence:
- execution-model의 Mermaid는 세 sibling branch, runtime-owned hybrid 합류, reviewed output과 frozen projection의 관계를 한 화면에서 보여 주어 인접 문장만으로 파악하기 어려운 흐름을 보완한다.
- "artifacts에서는 ignored runs의 PNG·SVG를 영구 gallery처럼 임베드하지 않고, versioned fixture만 상대 링크로 제공하며 asset 승격 조건을 설명해 시각적 매력보다 provenance와 링크 지속성을 우선한다. 근거: F-RUNS-NONCANONICAL, F-VERSIONED-VISUALS."
hard-gates:
passed: true
failures: []
reader-simulations:
30-seconds:
outcome: PASS
evidence:
- overview의 제목과 세 문단만으로 자연어 콘텐츠 요청을 문서·기술 시각화·유기적 이미지·publication output으로 연결하는 시스템이라는 정체성과 책임 분리의 이유를 설명할 수 있다.
- overview 마지막 문장에서 평가 개발자, capability 기여자, 산출물 리뷰어가 대상임을 바로 확인할 수 있다.
5-minutes:
outcome: PASS
evidence:
- capabilities와 execution-model에서 핵심 가치와 책임 흐름을, quick-start에서 최소 확인 경로를, architecture에서 구조를, limitations에서 packaging·benchmark·qualification·E2E 한계를 찾을 수 있다.
- artifacts에서 버전 관리되는 contract fixture와 ignored 로컬 생성 문서·이미지·기술 시각화를 구분하고 각각의 실제 탐색 경로를 확인할 수 있다.
contributor:
outcome: PASS
evidence:
- architecture 표에서 capability 구현은 harnesses, 계약과 runtime은 packages, publication adapter는 integrations에서 시작해야 함을 찾을 수 있다.
- verification에서 layout test와 전체 unittest discovery 진입점을 확인하고, documentation에서 각 harness README·runtime·E2E·benchmark 정본으로 이동할 수 있다.
findings: []
@@ -0,0 +1,10 @@
# README 품질 검토
- 판정: **PASS**
- 가중 점수: **94/100**
- Hard gate: 모두 통과
- 독자 시뮬레이션: 30초·5분·기여자 모두 통과
후보 문서는 Content Harness의 네 capability, contract chain, runtime 소유 경계와 publication 흐름을 저장소 고유 정보로 설명합니다. 체크인된 fixture와 로컬 P6·docvis·이미지 테스트 산출물을 실제 경로로 안내하면서, `runs/**`가 ignored 운영 데이터이며 정본이나 영구 gallery가 아니라는 정책도 명확히 유지합니다.
명령의 증거 수준도 정직합니다. 다섯 명령의 실제 성공 결과와 전체 suite 명령의 미실행을 분리하고, fixture·layout 검증이 fresh renderer 실행이나 전체 suite를 대신하지 않는다고 밝힙니다. 설치 정본과 version pin 부재로 새 환경의 준비 마찰이 남고 일부 영문 계약 용어가 조밀하지만, 이는 공개된 저장소 한계이며 독자 과업이나 품질 통과를 막지 않습니다.
@@ -0,0 +1,11 @@
{
"schema-version": 1,
"run-id": "20260718-rewrite",
"repo-id": "image-haness",
"mode": "bootstrap",
"target-repository": "/home/donghyeon/workspace/ai-tool/image-haness",
"harness-version": "0.1.0",
"started-at": null,
"tool-adapter": "codex",
"input-hashes": {}
}
@@ -0,0 +1,302 @@
{
"schema-version": 1,
"mode": "bootstrap",
"current": "APPLIED",
"history": [
{
"state": "INITIALIZED"
},
{
"state": "INPUT_CAPTURED",
"gates": [
{
"name": "request",
"ok": true,
"warnings": [],
"data": null
}
]
},
{
"state": "REPOSITORY_SNAPSHOTTED",
"gates": [
{
"name": "snapshot",
"ok": true,
"warnings": [],
"data": {
"diff-hash": "sha256:d65d7446cad11d46dabd2080c8393059f36fab426f4d62f18183b2c144c3de29"
}
}
]
},
{
"state": "FACTS_EXTRACTED",
"gates": [
{
"name": "facts",
"ok": true,
"warnings": [],
"data": {
"fact_ids": [
"F-IDENTITY",
"F-REPOSITORY-LAYERS",
"F-SIBLING-HARNESSES",
"F-CAPABILITY-DOCUMENT",
"F-CAPABILITY-TECHNICAL",
"F-CAPABILITY-IMAGE",
"F-ROUTING",
"F-CONTRACT-CHAIN",
"F-INTEGRATIONS",
"F-EXAMPLE-CHAIN",
"F-VERSIONED-VISUALS",
"F-RUN-WORKSPACE",
"F-PORTABLE-OUTPUT",
"F-LOCAL-CROSS-HARNESS-OUTPUT",
"F-LOCAL-DOCUMENT-VISUALIZATION",
"F-LOCAL-IMAGE-OUTPUT",
"F-RUNS-NONCANONICAL",
"F-PREREQUISITES",
"F-NO-PACKAGE-MANIFEST",
"F-TEST-INVENTORY",
"F-EXECUTED-QUICK-CHECKS",
"F-E2E-INPUTS",
"F-HYBRID-PENDING",
"F-BENCHMARK-MATURITY",
"F-NO-GIT-METADATA"
]
}
}
]
},
{
"state": "PROJECT_PROFILED",
"gates": [
{
"name": "profile",
"ok": true,
"warnings": [],
"data": {
"profile": "generic"
}
}
]
},
{
"state": "README_PLANNED",
"gates": [
{
"name": "brief",
"ok": true,
"warnings": [],
"data": null
},
{
"name": "outline",
"ok": true,
"warnings": [],
"data": {
"section_ids": [
"overview",
"capabilities",
"quick-start",
"execution-model",
"artifacts",
"architecture",
"verification",
"limitations",
"documentation"
]
}
}
]
},
{
"state": "README_DRAFTED",
"gates": [
{
"name": "conformance",
"ok": true,
"warnings": [],
"data": {
"sections": [
"overview",
"capabilities",
"quick-start",
"execution-model",
"artifacts",
"architecture",
"verification",
"limitations",
"documentation"
]
}
},
{
"name": "claim_map",
"ok": true,
"warnings": [],
"data": {
"claims": [
"C-IDENTITY",
"C-SIBLING-MODEL",
"C-DOCUMENT-CAPABILITY",
"C-TECHNICAL-CAPABILITY",
"C-IMAGE-CAPABILITY",
"C-RUNTIME-CAPABILITY",
"C-INTEGRATIONS",
"C-PREREQUISITES",
"C-INSTALLATION-LIMIT",
"C-CMD-CONTENT-JOB",
"C-RESULT-CONTENT-JOB",
"C-CMD-FRONT-DOOR",
"C-RESULT-FRONT-DOOR",
"C-CONTRACT-CHAIN",
"C-ROUTING",
"C-RUNTIME-OWNERSHIP",
"C-ACCEPTANCE-BOUNDARY",
"C-FLOW-VISUAL",
"C-VERSIONED-FIXTURE",
"C-LOCAL-P6-OUTPUT",
"C-LOCAL-DOCVIS-OUTPUT",
"C-LOCAL-IMAGE-OUTPUT",
"C-RUNS-POLICY",
"C-ASSET-PROMOTION",
"C-LAYER-OWNERSHIP",
"C-DEPENDENCY-DIRECTION",
"C-CMD-CONTENT-MANIFEST",
"C-RESULT-CONTENT-MANIFEST",
"C-CMD-ARTIFACT-SET",
"C-RESULT-ARTIFACT-SET",
"C-CMD-LAYOUT-TEST",
"C-RESULT-LAYOUT-TEST",
"C-CMD-FULL-SUITE",
"C-FULL-SUITE-SCOPE",
"C-E2E-PREREQUISITES",
"C-LIMIT-PACKAGING",
"C-LIMIT-RUNS",
"C-LIMIT-BENCHMARKS",
"C-LIMIT-HYBRID",
"C-LIMIT-E2E",
"C-DOCUMENTATION-MAP"
]
}
}
]
},
{
"state": "VISUALS_PLANNED",
"gates": [
{
"name": "visual_plan",
"ok": true,
"warnings": [],
"data": {
"visuals": [
"content-flow"
]
}
}
]
},
{
"state": "STRUCTURALLY_VALIDATED",
"gates": [
{
"name": "github_markdown",
"ok": true,
"warnings": [],
"data": null
}
]
},
{
"state": "TECHNICALLY_VERIFIED",
"gates": [
{
"name": "verify",
"ok": true,
"warnings": [
"manual verification required: python3 -m packages.content_job_contract.validate_content_job examples/clean-architecture/content-job-request.yaml --repo-root . (unsupported-static-verifier)",
"manual verification required: python3 -m packages.workflow_runtime.content_runtime front-door --workflow-request examples/clean-architecture/workflow-request.content-job.yaml --repo-root . (unsupported-static-verifier)",
"manual verification required: python3 -m packages.content_contract.validate_content examples/clean-architecture/content-manifest.yaml --repo-root . (unsupported-static-verifier)",
"manual verification required: python3 -m packages.artifact_contract.validate_artifact_set examples/clean-architecture/artifact/attempt-01/artifact-set.yaml --request examples/clean-architecture/visual-request.yaml (unsupported-static-verifier)",
"manual verification required: python3 -m unittest tests.conformance.test_repository_layout (unsupported-static-verifier)",
"manual verification required: python3 -m unittest discover -s tests -p 'test_*.py' (unsupported-static-verifier)"
],
"data": {
"schema-version": 1,
"state": "PASS_WITH_MANUAL",
"verification-level": "static",
"execution-verified": false,
"checks": {
"commands": {
"total": 6,
"verified": 0,
"manual-required": 6,
"failed": 0
},
"paths": {
"total": 20,
"verified": 20,
"failed": 0
},
"anchors": {
"total": 0,
"verified": 0,
"failed": 0
},
"readme-contracts": {
"total": 0,
"verified": 0,
"failed": 0
}
},
"failures": [],
"limitations": [
"manual verification required: python3 -m packages.content_job_contract.validate_content_job examples/clean-architecture/content-job-request.yaml --repo-root . (unsupported-static-verifier)",
"manual verification required: python3 -m packages.workflow_runtime.content_runtime front-door --workflow-request examples/clean-architecture/workflow-request.content-job.yaml --repo-root . (unsupported-static-verifier)",
"manual verification required: python3 -m packages.content_contract.validate_content examples/clean-architecture/content-manifest.yaml --repo-root . (unsupported-static-verifier)",
"manual verification required: python3 -m packages.artifact_contract.validate_artifact_set examples/clean-architecture/artifact/attempt-01/artifact-set.yaml --request examples/clean-architecture/visual-request.yaml (unsupported-static-verifier)",
"manual verification required: python3 -m unittest tests.conformance.test_repository_layout (unsupported-static-verifier)",
"manual verification required: python3 -m unittest discover -s tests -p 'test_*.py' (unsupported-static-verifier)"
]
}
},
{
"name": "secret_scan",
"ok": true,
"warnings": [],
"data": null
}
]
},
{
"state": "QUALITY_REVIEWED",
"gates": [
{
"name": "review",
"ok": true,
"warnings": [],
"data": {
"verdict": "PASS",
"score": 94,
"findings": []
}
}
]
},
{
"state": "READY_FOR_APPLY",
"gates": []
},
{
"state": "APPLIED",
"gates": []
}
],
"rework": {
"iterations": 0,
"findings": {}
}
}
@@ -0,0 +1,38 @@
{
"schema-version": 1,
"state": "PASS_WITH_MANUAL",
"verification-level": "static",
"execution-verified": false,
"checks": {
"commands": {
"total": 6,
"verified": 0,
"manual-required": 6,
"failed": 0
},
"paths": {
"total": 20,
"verified": 20,
"failed": 0
},
"anchors": {
"total": 0,
"verified": 0,
"failed": 0
},
"readme-contracts": {
"total": 0,
"verified": 0,
"failed": 0
}
},
"failures": [],
"limitations": [
"manual verification required: python3 -m packages.content_job_contract.validate_content_job examples/clean-architecture/content-job-request.yaml --repo-root . (unsupported-static-verifier)",
"manual verification required: python3 -m packages.workflow_runtime.content_runtime front-door --workflow-request examples/clean-architecture/workflow-request.content-job.yaml --repo-root . (unsupported-static-verifier)",
"manual verification required: python3 -m packages.content_contract.validate_content examples/clean-architecture/content-manifest.yaml --repo-root . (unsupported-static-verifier)",
"manual verification required: python3 -m packages.artifact_contract.validate_artifact_set examples/clean-architecture/artifact/attempt-01/artifact-set.yaml --request examples/clean-architecture/visual-request.yaml (unsupported-static-verifier)",
"manual verification required: python3 -m unittest tests.conformance.test_repository_layout (unsupported-static-verifier)",
"manual verification required: python3 -m unittest discover -s tests -p 'test_*.py' (unsupported-static-verifier)"
]
}
@@ -0,0 +1,36 @@
schema-version: 1
visuals:
- id: content-flow
section: execution-model
type: request-flow
purpose: 자연어 request와 두 contract entry가 workflow-runtime에서 sibling capability로 분기하고 reviewed publication으로 다시 합류하는 소유 경계를 한 화면에 설명한다.
placeholder-text: Mermaid flowchart로 request, runtime routing, 세 sibling harness, hybrid composition, reviewed outputs, publication adapter를 표시한다.
must-show:
- 자연어 요청과 ContentJobRequest 또는 Visual Request
- workflow-runtime의 routing, DAG, freshness 책임
- document-writing, technical-visualization, image-generation sibling branch
- runtime-owned hybrid composition
- reviewed publication draft와 accepted ArtifactSet
- frozen publication projection과 Markdown, Slides, HTML adapter
relationships:
- 자연어 요청 -> ContentJobRequest 또는 Visual Request -> workflow-runtime
- workflow-runtime -> document-writing
- workflow-runtime -> technical-visualization
- workflow-runtime -> image-generation
- technical-visualization + image-generation -> runtime-owned hybrid composition
- reviewed draft 또는 accepted ArtifactSet -> frozen projection -> publication adapter
emphasize:
- sibling harness는 서로 직접 호출하지 않음
- runtime이 분기와 합류를 모두 소유함
- 검토된 결과만 publication projection으로 이동함
avoid:
- image-generation이 exact technical semantics를 소유하는 것처럼 표현하기
- integrations가 route나 content를 다시 선택하는 것처럼 표현하기
- 로컬 runs 산출물을 canonical input으로 그리기
placement:
after-section-id: execution-model
accessibility:
alt-text: 자연어 요청이 ContentJobRequest 또는 Visual Request로 정규화되고 workflow-runtime에서 문서 작성, 기술 시각화, 이미지 생성으로 분기한 뒤 검토된 draft 또는 ArtifactSet과 publication adapter로 합류하는 흐름
production:
format: mermaid
status: embedded