# Artifacts

외부에서 확인해야 하는 정적 산출물의 공개 URL, 저장 규칙, 로그 색인 계약을 관리하는 리포입니다.

현재 주요 용도는 QA/E2E 실행 결과 공개이며, 앞으로는 QA 결과 외의 정적 파일도 같은 도메인에서 서빙합니다.

## 공개 URL

```text
https://artifacts.deepheart.duckdns.org/...
```

예시:

```text
~/workspace/artifacts/qa/golf-memo/runs/2026/05/20260512-224240-87819dd-web/summary.md
-> https://artifacts.deepheart.duckdns.org/qa/golf-memo/runs/2026/05/20260512-224240-87819dd-web/summary.md
```

URL path는 파일 루트 아래 상대 경로와 동일하게 유지합니다.

## 디렉토리 구조

최상위 디렉토리는 산출물 종류를 나타내고, 그 아래에 프로젝트 이름을 둡니다.

```text
artifacts/
  qa/
    golf-memo/
      latest.json
      latest.html
      reports/
        issue-20260508-230542-7e31f80.md
        e2e-20260508-230542-7e31f80.html
      runs/
        2026/
          05/
            20260512-224240-87819dd-web/
              index.html
              summary.md
              issue-body.md
              report.html
              metadata.json
              playwright-report/
              test-results/

  static/
    golf-memo/
      ...

  previews/
    golf-memo/
      ...

  downloads/
    ...
```

## 경로 규칙

- QA 실행 결과: `/qa/{project}/runs/{YYYY}/{MM}/{run-id}/`
- QA 최신 결과: `/qa/{project}/latest.html`, `/qa/{project}/latest.json`
- QA 파생 리포트: `/qa/{project}/reports/...`
- 앱 정적 파일: `/static/{project}/...`
- 임시 미리보기: `/previews/{project}/...`
- 배포 또는 공유 파일: `/downloads/...`

`run-id`는 `YYYYMMDD-HHMMSS-{commit-or-label}-{mode}` 형식을 권장합니다.

## 저장 원칙

- 생성 산출물 원본은 Git으로 관리하지 않습니다.
- 현재 파일 루트는 `~/workspace/artifacts`입니다.
- `deepheart-gw`는 파일 루트를 정적 서버에 read-only로 마운트합니다.
- 스크린샷, trace, HTML report에는 토큰, 쿠키, 개인정보, 운영 고객 데이터가 포함되지 않아야 합니다.
- `latest.*`처럼 고정 URL로 노출되는 파일은 항상 같은 프로젝트와 산출물 종류 안에서만 갱신합니다.
- 신규 QA 산출물은 `qa/{project}/...` 아래에만 생성합니다.

## QA 실행 메타데이터

각 QA run 디렉토리에는 가능한 한 `metadata.json`을 함께 둡니다.

```json
{
  "project": "golf-memo",
  "type": "qa",
  "run_id": "20260512-224240-87819dd-web",
  "commit": "87819dd",
  "mode": "web",
  "status": "passed",
  "started_at": "2026-05-12T22:42:40+09:00",
  "report_url": "https://artifacts.deepheart.duckdns.org/qa/golf-memo/runs/2026/05/20260512-224240-87819dd-web/"
}
```

## 운영 계약

- 공개 도메인: `artifacts.deepheart.duckdns.org`
- Traefik service/router 이름: `artifacts`
- 로그 디렉터리: `deepheart-gw/data/artifacts-logs`
- OpenSearch 인덱스 prefix: `logs-artifacts-`
- OpenSearch 문서 `service`: `artifacts`
- 주요 event:
  - `http.access`
  - `nginx.error`

## 관련 구현 위치

- 공개 라우팅, nginx 정적 서버, access/error log 저장: `deepheart-gw`
- `logs-artifacts-*` 인덱스 템플릿과 보존 정책: `open-search`
- 관리 repo 등록: `backlog`
