init: readme 작성 하네스 설계
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user