옵션
집집 Skill 선적 서류 비치 shipping-artifacts

shipping-artifacts

phuryn/pm-skills phuryn/pm-skills

아키텍처, 권한, 비밀 정보 및 테스트 커버리지 맵을 포함한 AI 기반 앱의 문서를 작성하여, 출시 전에 검토할 수 있도록 합니다.

...모든 것을 확장하십시오
0
업데이트 된 시간 2026년 9월 29일

아티팩트 배포: AI가 생성한 코드를 검토 가능하게 만드는 문서

목적

AI 에이전트는 코드를 빠르게 작성하지만, 의도에 대한 지속적인 기록을 남기지 않습니다. 즉, 시스템이 무엇을 해야 하는지, 누가 무엇을 할 수 있는지, 기밀 정보가 어디에 저장되어 있는지, 어떤 규칙이 실제로 검증되었는지에 대한 기록이 없습니다. 이러한 기록이 없다면, 어떤 인간도(그리고 어떤 감사 에이전트도) 해당 코드를 안전하게 배포할 수 있는지 판단할 수 없습니다. 이 기술은 코드 검토 가능성을 회복시켜 주는 소수의 문서 집합을 정의합니다.

이 문서들은 /documentation/ 디렉터리에 저장되며, 인간 검토자와 다음 AI 코딩 에이전트라는 두 가지 독자층을 위해 작성됩니다. 이 문서들은 향후 모든 감사(보안 또는 성능 검토)에서 ‘의도된 상태’를 나타내는 기준이 되며, 코드와 비교할 수 있는 의도가 명확해야만 감사의 신뢰도가 보장됩니다.

문서 세트의 구성 방식

이 문서 세트는 고정된 목록이 아닙니다. 소수의 핵심 문서와 해당 기능이 존재할 때만 추가하는 조건부 문서로 구성됩니다.

  • 핵심 문서 — 검토 가능한 모든 앱에는 이러한 영역이 있으므로, 항상 작성해야 합니다.
  • 조건부 문서 — 앱에 해당 기능이 실제로 존재할 때만 포함하십시오. 기능이 없다면, 빈 문서를 새로 만드는 대신 architecture.md에 한 줄만 기재하십시오("예정된 작업 없음 — cron.md 없음."). 검토 가능성은 정직한 맵에서 비롯되며, “우리는 X를 하지 않습니다”라는 사실도 그 맵의 일부입니다.
  • 대부분의 문서는 /document-app을 통해 코드에서 역공학적으로 생성됩니다. 유일한 예외는 tests.md로, 이는 /derive-tests를 통해 다른 문서들에서 파생됩니다. 이 문서는 하위 시스템에 대한 설명이 아니라 검증 지도입니다.

과도한 우려에 사로잡히지 않으면서도 현재 상태에 대해 냉철하게 솔직해야 합니다. 우리의 임무는 정확한 지도를 그리는 것이지, 모든 것이 완벽하다는 증명서를 발급하는 것이 아닙니다. 각 문서는 짧고, 표와 글머리 기호를 많이 사용하며, 일반적인 이론은 생략합니다.

핵심 문서

각 항목: 파일 · 한 줄로 요약한 목적 · 반드시 포함해야 할 내용 · 검토자가 이를 활용하는 방법.

  1. architecture.md — 시스템이 무엇이며 어떻게 구성되어 있는지.

    • 반드시 포함해야 할 내용: 제품 개요 + 핵심 가정; 기술 스택; 인증/세션/클레임의 종단 간 흐름; 신뢰 경계(예: 서비스 역할 대 클라이언트); 간략한 ‘알려진 위험 요소/가정’ 목록(각 항목은 일반적인 체크리스트가 아닌, 코드 내 해당 위치로 뒷받침됨); 생성된 다른 모든 문서를 정리한 ‘관련 문서’ 색인.
    • 검토자의 활용: 루트 문서 — 다른 모든 문서는 이곳에서 상호 참조됩니다.
  2. flows.md — 권한과 부수 효과가 실제로 적용되는 사용자 여정.

    • 반드시 포함해야 할 사항: 각 핵심 흐름을 행위자 + 전제 조건 + 성공 결과의 형태로 기술; UI → 서버 → 데이터 → 작업 → 제공자 → 에이전트를 거치는 단계별 순서; 각 보호 단계에서의 권한 검사 (어떤 클레임/역할/범위가, 어떤 리소스에 적용되며, 예상되는 거부 사례); 신뢰 경계 통과 지점 (브라우저→서버, 서버→프로바이더, 작업→앱, 에이전트→도구, 웹훅→앱); 각 단계에서 발생하는 상태 변경 및 부수 효과(쓰기, 대기 중인 이메일, 트리거된 작업, 아웃바운드 호출).
    • 검토자 활용: 정적 permissions.md 매트릭스로는 보여줄 수 없는 런타임 시점의 관점 — 즉, 권한 부여가 어디에서 어떤 순서로 적용되는지, 그리고 어디에서 생략될 수 있는지.
    • PRD(제품 요구 사항 문서) 배제 규칙: 권한, 데이터 무결성, 외부 부수 효과, 금전, 개인정보 보호 또는 운영 안전성과 관련이 없는 흐름은 여기에 포함되어서는 안 됩니다. 이는 보안/운영 지도이지, 기능 사양서가 아닙니다.
  3. permissions.md — 누가 무엇을 할 수 있는지.

    • 반드시 포함해야 할 내용: 역할/클레임; 범위(scope)가 어디서 파생되는지(토큰 대 DB); 리소스 × 작업 × 역할 매트릭스; 행 수준 보안(row-level security)이 적용된 테이블과 코드 기반 검사에 의존하는 테이블.
    • 검토자 활용: 액세스 제어 감사가 코드를 비교하는 기준이 됩니다. flows.md는 실제 동작을 보여주고, 이 문서는 정적 참조 자료입니다.
  4. variables.md — 구성 및 비밀 정보, 위험도와 연계됨.

    • 반드시 포함해야 할 내용: 이름 · 사용처 · 범위(서버/클라이언트) · 출처 · 교체 주기 · 위험 등급을 나타내는 표; 클라이언트 측에 비밀 정보가 번들링되지 않았음을 명시적으로 확인; 서비스 개시 전 체크리스트.
    • 검토자 사용: 기밀 정보/개인 식별 정보(PII) 유출 위험 영역 및 사고 대응 시의 교체 계획.
  5. tests.md — 검증 매핑: 문서화된 규칙 중 실제로 검사되는 항목, 제안된 항목, 그리고 아무런 검사도 받지 않는 항목을 나타냅니다.

    • 맵이 잘못된 ‘녹색’ 상태를 표시하지 않도록, 다음 세 가지 항목을 명확히 구분된 섹션으로 반드시 포함해야 합니다:
      • 기존 적용 범위 — 현재 저장소에 포함된 테스트로, 각각이 해당 테스트가 지정한 규칙과 연결되어 있어야 함(즉, 맵이 희망 사항 목록이 아닌 현실을 반영하도록).
      • 제안된 테스트 — 아직 작성되지 않은 권장 사례로, 테스트 유형 (자동화된 단위/통합 테스트 · 보호된 라이브 테스트 · 수동 검토)별로 표시됩니다.
      • 공백 — 검증 수단이 전혀 없는 문서화된 규칙으로, 이를 위반했을 때 드러나는 문제의 심각도에 따라 순위가 매겨집니다.
    • 각 행에는 다음 정보가 포함됩니다: 사용 사례 → 규칙 → 예상 동작(거부/부정 사례 포함) → 증거 출처(문서 + 코드) → 상태(기존 / 제안 / 없음). 또한 어떤 검사가 CI에서 필수이며 메인 브랜치 병합 시 게이트 역할을 하는지 표시합니다.
    • 검토자 활용: “문서화됨 == 구현됨”의 운영적 형태 — 다른 문서에서 주장하는 각 규칙이 현재 테스트로 실제로 검증되었는지, 제안된 상태인지, 아니면 검증되지 않았는지를 보여줍니다.
    • 이 문서는 /document-app이 아닌 /derive-tests에 의해 생성됩니다. 이는 하위 시스템에서 직접 읽어온 것이 아니라 다른 문서와 기존 테스트 스위트에서 파생되었기 때문입니다.

조건부 문서 (해당 기능이 존재할 때만 포함)

  1. emails.md — 시스템이 보내는 모든 알림. 앱이 트랜잭션 또는 자동 이메일을 보내는 경우에만 포함합니다.

    • 반드시 포함해야 할 사항: 큐 → 프로세서 → 제공자 경로; 템플릿 및 해당 템플릿이 수용하는 변수; 재시도/백오프 동작; 전송 실패 시 확인해야 할 위치.
    • 검토자 활용: 검증되지 않은 템플릿 입력값 및 개인 식별 정보(PII) 노출 경계를 파악하는 데 사용.
  2. cron.md — 모든 예약된 작업 및 이를 안전하게 운영하는 방법. 예약된 작업이나 백그라운드 작업이 존재하는 경우에만 포함합니다.

    • 반드시 포함해야 할 사항: 인벤토리 테이블(작업 → 일정 → 함수 → 비밀 정보 → 제한 사항 → 재시도); 각 작업이 어떻게 항등성을 유지하는지; 내부 호출의 인증 방식; 마지막 실행 내역을 확인할 수 있는 위치.
    • 검토자 활용: 조작 가능한 트리거 및 제한이 없는 백그라운드 작업 식별.
  3. seo.md — 단일 페이지 애플리케이션(SPA)이 SEO 및 소셜 미리보기를 처리하는 방식. 공개/색인 가능 경로나 봇 대상 경로가 있는 경우에만 포함합니다.

    • 반드시 포함해야 할 사항: 미리보기 방식(정적 메타 / 프리렌더링 / 엣지 HTML); 경로 → SEO 필요 여부 → 공개 데이터 전용 테이블; 동적 메타데이터가 어떻게 정제되는지; 봇 대 사용자 라우팅.
    • 검토자 활용: ‘공개 데이터 전용’ 규칙 위반 및 봇 경로에서의 메타데이터 주입 탐지.
  4. automation.md — 내장 에이전트 및 기타 자동화 경로. 앱에 AI 에이전트, LLM 워크플로, 도구 호출, 웹훅 또는 외부 자동화가 포함된 경우에만 포함합니다.

    • 각 자동화/에이전트별로 다음 사항을 반드시 명시해야 합니다: 트리거 + 소유자 + 자동 실행 여부 또는 승인 후 실행 여부; 읽을 수 있는 입력값과 호출할 수 있는 정확한 도구/API (도구 표면 자체가 강력한 안전 장치임); 제어 지점(프롬프트)과 프롬프트 외부의 강력한 안전 장치; 앱으로 반환되는 출력 계약 (스키마, 유효성 검사, 오류 처리); 앱 소유의 부수 효과 대 에이전트 소유의 제안; 그리고 제어 수단 — 승인 게이트, 감사/타임라인 로깅, 속도 제한, 재시도, 킬 스위치.
    • 검토자 활용: 숨겨진 자동화 경로를 가시화하고, 에이전트가 제안하는 내용과 앱이 강제하는 내용 사이의 경계를 명확히 그어줍니다. 이는 현대 AI 기반 앱에서 가장 위험도가 높은 영역입니다.

참고 사항

  • 생성된 각 문서는 architecture.md의 “관련 문서(Related Documents)” 섹션에 자체 참조를 추가하므로, 전체 세트를 쉽게 찾을 수 있습니다.
  • 적용되지 않는 조건부 문서는 건너뛰고, 내용을 억지로 만들지 말고 한 줄로 그 사실을 명시하십시오.
  • 이 문서들에는 예제나 완성된 템플릿을 포함하지 마십시오 — 이 문서들은 일반적인 방법이 아닌 이 시스템을 설명하는 것입니다.
  • 에이전트 운영 컨텍스트 파일(CLAUDE.md / AGENTS.md)은 별도의 산출물입니다. 이는 시스템 문서가 아니라 이 문서들에서 파생된 지침입니다. 이 파일은 여기에서가 아니라 /ship-check에 의한 인계 단계에서 생성됩니다.
  • tests.md는 /derive-tests에 의해 생성되며, 나머지는 /document-app에 의해 생성됩니다.
  • “최종 업데이트 날짜” 줄은 포함하지 마십시오. 파일의 변경 내역이 유일한 신뢰할 수 있는 정보원입니다.
GitHub에서 보기
---
name: shipping-artifacts
description: Documents AI-built apps with architecture, permissions, secrets, and test coverage maps to make them reviewable before shipping.
---

# Shipping Artifacts: The Docs That Make AI-Built Code Reviewable

## Purpose

AI agents write code fast, but they leave no durable record of *intent* — what the system is supposed to do, who is allowed to do what, where the secrets live, which rules are actually verified. Without that record, no human (and no auditing agent) can tell whether the code is safe to ship. This skill defines the small set of documents that restore reviewability.

These docs live in `/documentation/` and are written for two readers: a human reviewer and the next AI coding agent. They are the **intended-state** half of every later audit — a security or performance review is only as good as the intent it can compare the code against.

## How the set is organized

The set is **not** a fixed list — it is a small **core** plus **conditional** docs you add only when the capability exists.

- **Core docs** — every reviewable app has these surfaces, so always produce them.
- **Conditional docs** — include one only if the app actually has that capability. If it doesn't, write a single line in `architecture.md` ("No scheduled work — no `cron.md`.") rather than inventing an empty document. Reviewability comes from an honest map, and "we don't do X" is part of the map.
- Most docs are reverse-engineered from code by `/document-app`. The one exception is `tests.md`, which is *derived from the other docs* by `/derive-tests` — it is the verification map, not a description of a subsystem.

Be brutally honest about the current state without being paranoid. The job is an accurate map, not a clean bill of health. Each doc is short, table-and-bullet heavy, and skips generic theory.

## Core documents

Each entry: file · one-line purpose · what it must capture · how a reviewer uses it.

1. **`architecture.md`** — what the system is and how it hangs together.
   - Must capture: product overview + key assumptions; tech stack; how auth/sessions/claims flow end to end; the trust boundaries (e.g. service-role vs. client); a short **Known risks / assumptions** list (each entry backed by where it shows up in the code, not a generic checklist); a "Related Documents" index of every other doc produced.
   - Reviewer use: the root document — everything else is cross-referenced from here.

2. **`flows.md`** — the journeys where permissions and side effects are actually exercised.
   - Must capture: each load-bearing flow as actor + precondition + success outcome; the step-by-step sequence across UI → server → data → jobs → providers → agents; the **authz check at each protected step** (which claim/role/scope, on which resource, and the expected *deny* case); the **trust-boundary crossings** (browser→server, server→provider, job→app, agent→tool, webhook→app); the state changes and side effects each step causes (writes, emails queued, jobs triggered, outbound calls).
   - Reviewer use: the runtime view a static `permissions.md` matrix can't show — *where* and *in what order* authorization is enforced, and where it can be skipped.
   - **Anti-PRD rule:** a flow that doesn't touch permissions, data integrity, external side effects, money, privacy, or operational safety does not belong here. This is a security/operations map, not a feature spec.

3. **`permissions.md`** — who is allowed to do what.
   - Must capture: roles/claims; where scope is derived (token vs. DB); a resource × operation × role matrix; which tables have row-level security and which rely on code-enforced checks.
   - Reviewer use: the baseline an access-control audit compares the code against. `flows.md` shows it in motion; this is the static reference.

4. **`variables.md`** — configuration and secrets, mapped to risk.
   - Must capture: a table of Name · used-by · scope (server/client) · source · rotation · risk; explicit confirmation that no secret is bundled client-side; a pre-go-live checklist.
   - Reviewer use: the secrets/PII-leak surface and the rotation plan during incident response.

5. **`tests.md`** — the verification map: which documented rules are actually checked, which are only proposed, and which are checked by nothing.
   - Must capture, in three clearly separated sections so the map can't read falsely green:
     - **Existing coverage** — tests that are in the repo *today*, each tied to the rule it pins (so the map reflects reality, not a wish-list).
     - **Proposed tests** — recommended cases not yet written, marked by **test type** (automated unit/integration · guarded live · manual review).
     - **Gaps** — documented rules with no verification at all, ranked by what crossing them exposes.
   - Each row carries: use-case → rule → expected behavior (including the deny/negative case) → evidence source (doc + code) → status (existing / proposed / none). It also notes which checks are CI-required and gate merges to `main`.
   - Reviewer use: the operational form of "documented == implemented" — it shows whether each rule the other docs claim is actually pinned by a test today, only proposed, or unverified.
   - Produced by `/derive-tests` (not `/document-app`), because it is derived from the other docs and the existing test suite rather than read off a subsystem.

## Conditional documents (include only when the capability exists)

6. **`emails.md`** — every notification the system sends. *Include only if the app sends transactional or automated email.*
   - Must capture: the queue → processor → provider path; templates and the variables they accept; retry/backoff behavior; where to look when a send fails.
   - Reviewer use: spotting unvalidated template inputs and PII exposure boundaries.

7. **`cron.md`** — all scheduled work and how to operate it safely. *Include only if scheduled or background jobs exist.*
   - Must capture: an inventory table (job → schedule → function → secrets → limits → retry); how each job stays idempotent; how internal calls authenticate; where to see last runs.
   - Reviewer use: finding forgeable triggers and unbounded background jobs.

8. **`seo.md`** — how a single-page app handles SEO and social previews. *Include only if there are public/indexable or bot-facing routes.*
   - Must capture: the preview approach (static meta / prerender / edge HTML); a route → needs-SEO → public-data-only table; how dynamic metadata is sanitized; bot-vs-human routing.
   - Reviewer use: catching public-data-only violations and metadata injection on bot routes.

9. **`automation.md`** — embedded agents and other automation paths. *Include only if the app embeds AI agents, LLM workflows, tool-calling, webhooks, or external automation.*
   - Must capture, per automation/agent: trigger + owner + whether it runs automatically or only after approval; the inputs it may read and the **exact tools/APIs it may call** (the tool surface is itself a hard guardrail); where **steering** lives (the prompt) vs. the **non-prompt hard guardrails**; the **output contract** back to the app (schema, validation, failure handling); **app-owned side effects vs. agent-owned suggestions**; and the controls — approval gates, audit/timeline logging, rate limits, retries, kill switch.
   - Reviewer use: makes hidden automation paths visible and draws the line between what an agent *proposes* and what the app *enforces* — the highest-risk surface in modern AI-built apps.

## Notes

- Each produced doc adds a reference to itself in `architecture.md` under a "Related Documents" section, so the set stays discoverable.
- Skip any conditional document that doesn't apply, and say so in one line rather than inventing content.
- Keep examples and finished templates out of these docs — they describe *this* system, not the general method.
- The agent operating-context file (`CLAUDE.md` / `AGENTS.md`) is a *different* artifact — instructions derived from these docs, not system documentation. It is produced at the handoff step by `/ship-check`, not here.
- `tests.md` is produced by `/derive-tests`; the rest are produced by `/document-app`.
- Do not include an "updated date" line; the file's history is the source of truth.

모든 파일

1개 파일

shipping-artifacts 설치

스킬 파일을 다운로드하여 .claude/skills/ 디렉터리에 압축을 풀어주세요.

ZIP 다운로드

저장소를 클론하고 스킬 파일을 프로젝트에 복사하세요.

git clone https://github.com/phuryn/pm-skills/tree/main/pm-ai-shipping/skills/shipping-artifacts # Copy SKILL.md to your .claude/skills/ directory

복사 복사
빠른 설정: 스킬 폴더를 .claude/skills/로 복사하세요. Claude가 해당 스킬을 자동으로 감지하여 사용할 것입니다.
저장소 phuryn/pm-skills

관련 스킬

tc-tracker
업데이트 된 시간 2026년 8월 27일
nuxthub
업데이트 된 시간 2026년 8월 23일
golang-dependency-injection
업데이트 된 시간 2026년 6월 29일
altimate-data-engineering-skills
업데이트 된 시간 2026년 8월 23일
OR