@uzysjung/agent-harness 26.88.0 → 26.89.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.ko.md +3 -26
  2. package/README.md +8 -32
  3. package/dist/{chunk-QHYH6P32.js → chunk-EZZOJPG4.js} +1 -11
  4. package/dist/chunk-EZZOJPG4.js.map +1 -0
  5. package/dist/index.js +262 -748
  6. package/dist/index.js.map +1 -1
  7. package/dist/trust-tier-drift.js +1 -1
  8. package/package.json +1 -1
  9. package/templates/agents/plan-checker.md +3 -4
  10. package/templates/agents/reviewer.md +1 -1
  11. package/templates/antigravity/AGENTS.md.template +0 -28
  12. package/templates/codex/AGENTS.md.template +0 -25
  13. package/templates/codex/README.md +5 -15
  14. package/templates/codex/config.toml.template +0 -10
  15. package/templates/codex/hooks/README.md +0 -2
  16. package/templates/hooks/checkpoint-snapshot.sh +1 -22
  17. package/templates/hooks/session-start.sh +1 -1
  18. package/templates/hooks/spec-drift-check.sh +2 -20
  19. package/templates/opencode/AGENTS.md.template +3 -38
  20. package/templates/opencode/README.md +0 -4
  21. package/templates/opencode/opencode.json.template +1 -3
  22. package/templates/project-claude/fragments/csr-fastapi/boundaries.md +0 -1
  23. package/templates/project-claude/fragments/csr-fastapi/commands.md +0 -1
  24. package/templates/project-claude/fragments/csr-fastapi/plugins.md +1 -1
  25. package/templates/project-claude/fragments/csr-fastify/boundaries.md +0 -1
  26. package/templates/project-claude/fragments/csr-fastify/commands.md +0 -1
  27. package/templates/project-claude/fragments/csr-fastify/plugins.md +1 -1
  28. package/templates/project-claude/fragments/csr-supabase/boundaries.md +0 -1
  29. package/templates/project-claude/fragments/csr-supabase/commands.md +0 -1
  30. package/templates/project-claude/fragments/csr-supabase/plugins.md +1 -1
  31. package/templates/project-claude/fragments/csr-supabase/supabase-auth.md +0 -2
  32. package/templates/project-claude/fragments/data/boundaries.md +0 -1
  33. package/templates/project-claude/fragments/data/commands.md +0 -1
  34. package/templates/project-claude/fragments/data/plugins.md +1 -1
  35. package/templates/project-claude/fragments/executive/boundaries.md +0 -1
  36. package/templates/project-claude/fragments/executive/commands.md +0 -1
  37. package/templates/project-claude/fragments/executive/skills.md +1 -1
  38. package/templates/project-claude/fragments/executive/workflow.md +1 -2
  39. package/templates/project-claude/fragments/growth-marketing/boundaries.md +0 -1
  40. package/templates/project-claude/fragments/growth-marketing/commands.md +0 -1
  41. package/templates/project-claude/fragments/growth-marketing/skills.md +1 -1
  42. package/templates/project-claude/fragments/growth-marketing/workflow.md +1 -2
  43. package/templates/project-claude/fragments/project-management/boundaries.md +0 -1
  44. package/templates/project-claude/fragments/project-management/commands.md +0 -1
  45. package/templates/project-claude/fragments/project-management/skills.md +1 -1
  46. package/templates/project-claude/fragments/project-management/workflow.md +1 -2
  47. package/templates/project-claude/fragments/ssr-htmx/boundaries.md +0 -1
  48. package/templates/project-claude/fragments/ssr-htmx/commands.md +0 -1
  49. package/templates/project-claude/fragments/ssr-htmx/plugins.md +1 -1
  50. package/templates/project-claude/fragments/ssr-nextjs/boundaries.md +0 -1
  51. package/templates/project-claude/fragments/ssr-nextjs/commands.md +0 -1
  52. package/templates/project-claude/fragments/ssr-nextjs/plugins.md +1 -1
  53. package/templates/project-claude/fragments/tooling/boundaries.md +0 -1
  54. package/templates/project-claude/fragments/tooling/commands.md +0 -1
  55. package/templates/project-claude/fragments/tooling/skills.md +1 -1
  56. package/templates/rules/git-policy.md +2 -2
  57. package/templates/rules/ship-checklist.md +3 -3
  58. package/templates/settings.json +0 -13
  59. package/templates/skills/gh-issue-workflow/SKILL.md +8 -8
  60. package/templates/skills/north-star/SKILL.md +4 -4
  61. package/templates/skills/ui-visual-review/SKILL.md +6 -6
  62. package/dist/chunk-QHYH6P32.js.map +0 -1
  63. package/templates/codex/hooks/gate-check.sh +0 -7
  64. package/templates/codex/skills/uzys-build/SKILL.md +0 -24
  65. package/templates/codex/skills/uzys-plan/SKILL.md +0 -24
  66. package/templates/codex/skills/uzys-review/SKILL.md +0 -24
  67. package/templates/codex/skills/uzys-ship/SKILL.md +0 -24
  68. package/templates/codex/skills/uzys-spec/SKILL.md +0 -28
  69. package/templates/codex/skills/uzys-test/SKILL.md +0 -24
  70. package/templates/commands/uzys/auto.md +0 -190
  71. package/templates/commands/uzys/build.md +0 -42
  72. package/templates/commands/uzys/plan.md +0 -55
  73. package/templates/commands/uzys/review.md +0 -44
  74. package/templates/commands/uzys/ship.md +0 -49
  75. package/templates/commands/uzys/spec.md +0 -93
  76. package/templates/commands/uzys/test.md +0 -58
  77. package/templates/hooks/agentshield-gate.sh +0 -101
  78. package/templates/hooks/gate-check.sh +0 -138
  79. package/templates/opencode/.opencode/commands/uzys-build.md +0 -22
  80. package/templates/opencode/.opencode/commands/uzys-plan.md +0 -22
  81. package/templates/opencode/.opencode/commands/uzys-review.md +0 -22
  82. package/templates/opencode/.opencode/commands/uzys-ship.md +0 -22
  83. package/templates/opencode/.opencode/commands/uzys-spec.md +0 -28
  84. package/templates/opencode/.opencode/commands/uzys-test.md +0 -22
  85. package/templates/opencode/.opencode/plugins/uzys-harness.ts +0 -146
  86. package/templates/project-claude/fragments/csr-fastapi/workflow.md +0 -8
  87. package/templates/project-claude/fragments/csr-fastify/workflow.md +0 -8
  88. package/templates/project-claude/fragments/csr-supabase/workflow.md +0 -8
  89. package/templates/project-claude/fragments/data/workflow.md +0 -9
  90. package/templates/project-claude/fragments/ssr-htmx/workflow.md +0 -8
  91. package/templates/project-claude/fragments/ssr-nextjs/workflow.md +0 -8
  92. package/templates/project-claude/fragments/tooling/workflow.md +0 -5
@@ -16,5 +16,4 @@
16
16
  - 시크릿 하드코딩
17
17
  - Server Component에서 useState/useEffect 사용
18
18
  - 프로덕션 DB 직접 조작
19
- - 게이트 건너뛰기 (Hotfix 예외)
20
19
  - DO NOT CHANGE 영역 수정
@@ -1,6 +1,5 @@
1
1
  | Namespace | Command | 용도 |
2
2
  |-----------|---------|------|
3
- | uzys: | spec, plan, build, test, review, ship | 6-gate 개발 사이클 |
4
3
  | ecc: | security-scan, instinct-status, evolve, promote | 보안 스캔, 학습 관리 |
5
4
  | imm: | teach, polish, critique, audit, shape, adapt | 디자인 품질 관리 |
6
5
  | gsd: | (선택 설치) | 대형 프로젝트 오케스트레이션 |
@@ -1,2 +1,2 @@
1
- - **agent-skills**: 6-gate 워크플로우 엔진
1
+ - **agent-skills**: 개발 워크플로우 백본
2
2
  - **Railway**: 배포 자동화 (Next.js standalone 빌드)
@@ -14,4 +14,3 @@
14
14
  - main 직접 커밋
15
15
  - `.env`, lock 파일, 인증서 파일 수정
16
16
  - `--no-verify`로 hook 우회
17
- - 게이트 건너뛰기 (`/uzys:` 순서 무시)
@@ -1,4 +1,3 @@
1
1
  | Namespace | 용도 |
2
2
  |-----------|------|
3
- | `/uzys:*` (6개) | 6단계 워크플로우 |
4
3
  | `/ecc:*` (8개) | security-scan, instinct 관리, checkpoint |
@@ -1,4 +1,4 @@
1
- - **agent-skills**: 6단계 워크플로우 (필수)
1
+ - **agent-skills**: 개발 워크플로우 백본 (필수)
2
2
  - **continuous-learning-v2**: 경험 축적 (선택, observer disabled by default)
3
3
  - **spec-scaling**: SPEC.md > 300줄 시 분할
4
4
  - **strategic-compact**: 장시간 세션 컨텍스트 압축
@@ -40,7 +40,7 @@ Types: feat, fix, refactor, docs, test, chore, perf, ci
40
40
 
41
41
  ship 보고 시 두 상태를 **반드시 분리**해서 보여줄 것:
42
42
 
43
- - **Local gate 상태**: build/verify/review checkbox completed (`.claude/gate-status.json`)
43
+ - **Local gate 상태**: build/verify/review checkbox completed
44
44
  - **Remote 상태**: PR merged into main + tag pushed + release 게시
45
45
 
46
46
  gate ✓ 만 보고 ship 완료라 단정하지 않는다. open PR 1건이라도 있으면 cycle 미완.
@@ -48,7 +48,7 @@ gate ✓ 만 보고 ship 완료라 단정하지 않는다. open PR 1건이라도
48
48
  ### 보고 형식 예
49
49
 
50
50
  ```
51
- gate: build ✓ / verify ✓ / review ✓ / ship ✓ (local gate-status)
51
+ gate: build ✓ / verify ✓ / review ✓ / ship ✓
52
52
  main: PR #123 merged ✓ / tag v26.39.3 pushed ✓ / release ✓
53
53
  OR
54
54
  PR #123 OPEN — CI pass / mergeable / 사용자 결정 대기
@@ -1,15 +1,15 @@
1
1
  # Ship Checklist
2
2
 
3
- `/uzys:ship` 실행 시 아래 모든 항목을 통과해야 배포 가능.
3
+ ship 단계 실행 시 아래 모든 항목을 통과해야 배포 가능.
4
4
 
5
5
  ## Pre-Ship Gates
6
6
 
7
- - [ ] **E2E 테스트 통과**: 핵심 사용자 흐름 E2E 테스트 전부 PASS (인증/결제/DB — `/uzys:test` 단계에서 검증됨)
7
+ - [ ] **E2E 테스트 통과**: 핵심 사용자 흐름 E2E 테스트 전부 PASS (인증/결제/DB — test 단계에서 검증됨)
8
8
  - [ ] **커버리지 기준 충족**: test-policy.md의 Track별 threshold 확인
9
9
  - [ ] **Security Scan 통과**: `npx ecc-agentshield scan` 결과 CRITICAL/HIGH 없음
10
10
  - [ ] **의존성 감사 통과**: `npm audit` (Node.js) 또는 `pip audit` (Python) 실행. critical/high 취약점 없음
11
11
  - [ ] **SPEC/PRD 정합성**: `bash .claude/hooks/spec-drift-check.sh ship` (exit 2 시 차단)
12
- - [ ] **Review 게이트 통과**: `/uzys:review`에서 CRITICAL 이슈 없음 확인
12
+ - [ ] **Review 게이트 통과**: review 단계에서 CRITICAL 이슈 없음 확인
13
13
 
14
14
  ## Post-Ship Actions
15
15
 
@@ -31,19 +31,6 @@
31
31
  }
32
32
  ]
33
33
  },
34
- {
35
- "matcher": "Skill",
36
- "hooks": [
37
- {
38
- "type": "command",
39
- "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/gate-check.sh\""
40
- },
41
- {
42
- "type": "command",
43
- "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/agentshield-gate.sh\""
44
- }
45
- ]
46
- },
47
34
  {
48
35
  "matcher": "mcp__.*",
49
36
  "hooks": [
@@ -19,11 +19,11 @@ dyld-vantage 프로젝트의 실제 운용 패턴(`#52~#55`)을 일반화. 1인
19
19
 
20
20
  | 트리거 | 행동 |
21
21
  |--------|------|
22
- | `/uzys:spec` 시작 + GitHub remote 존재 | "epic issue 만들까?" 1회 권유 (선택) |
23
- | `/uzys:plan` 시작 | OPEN issue 목록 fetch → 우선순위 결정 후 todo.md로 이관 |
24
- | `/uzys:build` 중 사용자가 새 bug/req 발견 | "issue로 backlog?" 권유 |
25
- | `/uzys:build` commit | message에 `Refs #N` (작업 진행 기록) |
26
- | `/uzys:ship` PR 작성 | body에 `Closes #N` (자동 close) |
22
+ | 프로젝트 착수 + GitHub remote 존재 | "epic issue 만들까?" 1회 권유 (선택) |
23
+ | 작업 계획 시작 | OPEN issue 목록 fetch → 우선순위 결정 후 todo.md로 이관 |
24
+ | 구현 중 사용자가 새 bug/req 발견 | "issue로 backlog?" 권유 |
25
+ | 구현 commit | message에 `Refs #N` (작업 진행 기록) |
26
+ | PR 작성 | body에 `Closes #N` (자동 close) |
27
27
  | 의사결정 갈림길 등장 | issue body에 `방향성 (OPEN)` 로 등록 → 사용자 대기 |
28
28
 
29
29
  ## Pre-conditions
@@ -113,9 +113,9 @@ GitHub Projects board를 칸반 형태 backlog로 활용 시:
113
113
 
114
114
  본 섹션은 GitHub Projects 활용을 강제하지 않음 — 사용자 선호에 따라.
115
115
 
116
- ### 6. `/uzys:auto` 와의 결합
116
+ ### 6. 백로그 자동 처리 시퀀스
117
117
 
118
- `/uzys:auto` 사이클 시작 시 다음 시퀀스:
118
+ 작업 사이클 시작 시 다음 시퀀스:
119
119
 
120
120
  ```
121
121
  1. gh issue list --state open --json number,title,labels,body
@@ -124,7 +124,7 @@ GitHub Projects board를 칸반 형태 backlog로 활용 시:
124
124
  → 확정된 것만 작업 가능 후보
125
125
  3. 전제 미충족 issue 제외
126
126
  4. 우선순위 정렬 (label P0 > P1 > P2 > unlabeled)
127
- 5. 상위 1-3개를 docs/todo.md로 이관 + Plan 단계 진입
127
+ 5. 상위 1-3개를 docs/todo.md로 이관 + 계획 단계 진입
128
128
  ```
129
129
 
130
130
  ### 7. Commit / PR 컨벤션
@@ -18,10 +18,10 @@ CLAUDE.md의 P1(가정 금지) / P2(Simplicity First) / Decision Making 메타
18
18
 
19
19
  | 트리거 | 행동 |
20
20
  |--------|------|
21
- | 신규 프로젝트 (`/uzys:spec` 시작) | `docs/NORTH_STAR.md` 부재 시 작성 제안 |
21
+ | 신규 프로젝트 시작 | `docs/NORTH_STAR.md` 부재 시 작성 제안 |
22
22
  | Major CR / scope 확대 의심 | 4-gate 통과 여부 점검 |
23
23
  | 분기 1회 정기 리뷰 | NSM 변경, Phase 정의 변경, Won't 변경 검토 |
24
- | 신규 기능 요청 진입 시 (`/uzys:plan`) | 4-gate 통과 시만 우선순위 진입 |
24
+ | 신규 기능 요청 진입 시 | 4-gate 통과 시만 우선순위 진입 |
25
25
 
26
26
  ## Process
27
27
 
@@ -82,8 +82,8 @@ NSM 결정 기준:
82
82
 
83
83
  ## Integration with Workflow
84
84
 
85
- - **`/uzys:spec`**: 시작 `docs/NORTH_STAR.md` 존재 확인. 없으면 본 skill 호출 권유.
86
- - **`/uzys:plan`**: 신규 task 진입 4-gate 체크. 1개 이상 게이트 fail 시 사용자에게 보고 후 결정 대기.
85
+ - **신규 프로젝트 시작 시**: `docs/NORTH_STAR.md` 존재 확인. 없으면 본 skill 호출 권유.
86
+ - **신규 task 진입 전**: 4-gate 체크. 1개 이상 게이트 fail 시 사용자에게 보고 후 결정 대기.
87
87
  - **자동 hook 없음** — 의식적 결정을 강제하지 않음. 게이트는 가이드 도구.
88
88
 
89
89
  ## Anti-Patterns
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ui-visual-review
3
- description: "Captures screenshots of key UI flows after E2E tests pass, runs an agent-side first-pass diff (regressions, console errors, layout shifts), then surfaces a checklist for the user's final approval. Use after /uzys:test passes on a UI track (csr-*, ssr-*, full). Adapts the GoalTrack screenshot-review pattern into a repeatable workflow."
3
+ description: "Captures screenshots of key UI flows after E2E tests pass, runs an agent-side first-pass diff (regressions, console errors, layout shifts), then surfaces a checklist for the user's final approval. Use after E2E tests pass on a UI track (csr-*, ssr-*, full). Adapts the GoalTrack screenshot-review pattern into a repeatable workflow."
4
4
  ---
5
5
 
6
6
  # UI Visual Review
@@ -20,8 +20,8 @@ GoalTrack의 `docs/screenshots/` 수동 패턴(mvp-home / v3-search / v4-wiki
20
20
 
21
21
  | 트리거 | 행동 |
22
22
  |--------|------|
23
- | `/uzys:test` PASS + UI Track(csr-*/ssr-*/full) | 본 skill 호출 권유 |
24
- | `/uzys:review` UI 변경 PR | visual diff 결과 review 입력으로 |
23
+ | E2E 테스트 PASS + UI Track(csr-*/ssr-*/full) | 본 skill 호출 권유 |
24
+ | UI 변경 PR review | visual diff 결과 review 입력으로 |
25
25
  | 의도적 디자인 변경 후 baseline 갱신 | "approve all" 옵션 |
26
26
  | Track이 data/tooling/executive | **skip** — UI 없음 |
27
27
 
@@ -132,9 +132,9 @@ L2/L3 fail이거나 차이가 임계 이상이면 에이전트가 다음 휴리
132
132
 
133
133
  ## Integration with Workflow
134
134
 
135
- - **`/uzys:test`**: UI Track + `docs/visual-pages.json` 존재 시 PASS 후 본 skill 자동 호출 권유
136
- - **`/uzys:review`**: visual-review-<phase>.md 가 있으면 review 입력으로 흡수. REGRESSION 1건이라도 있으면 Review Gate 차단
137
- - **`/uzys:auto`**: revision loop 포함 (REGRESSION → 수정 → 재캡처 → 재diff)
135
+ - **E2E 테스트 후**: UI Track + `docs/visual-pages.json` 존재 시 PASS 후 본 skill 자동 호출 권유
136
+ - **Review 시**: visual-review-<phase>.md 가 있으면 review 입력으로 흡수. REGRESSION 1건이라도 있으면 차단
137
+ - **Revision loop 중**: REGRESSION → 수정 → 재캡처 → 재diff 로 포함
138
138
 
139
139
  ## Anti-Patterns
140
140
 
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../src/external-assets.ts","../src/track-match.ts","../src/categories.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","/**\n * External asset matrix — bash setup-harness.sh L791~1067 등가 데이터.\n *\n * SPEC: docs/specs/cli-rewrite-completeness.md F3\n * Source: setup-harness.sh@911c246~1 (v27.18 직전, bash cutover 전)\n *\n * Track 또는 옵션 조건이 충족되면 install pipeline에서 method를 호출.\n * 실패는 \"warn-skip\" — 종료 시 누락 자산 보고 (OQ1 결정).\n *\n * code-style 800줄 cap 예외: 본 파일은 ~85% 가 큐레이션 자산 카탈로그(43 entry × ~13줄)\n * = 데이터. 로직(interface·condition 평가·shouldInstallAsset)은 소량. 데이터/로직 분리는\n * 별도 사이클(Phase R) 후보 — 현재는 카탈로그 단일 SSOT 가독성 우선. (v26.79.0 기준 802줄)\n */\n\nimport type { Category, Source } from \"./categories.js\";\nimport { hasDevTrack } from \"./track-match.js\";\nimport type { OptionFlags, Track } from \"./types.js\";\n\nexport type ExternalAssetMethod =\n /** `npx skills add <source>[ --skill <name>] --yes` */\n | { kind: \"skill\"; source: string; skill?: string }\n /** `claude plugin marketplace add <marketplace>` + `claude plugin install <pluginId>` */\n | { kind: \"plugin\"; marketplace: string; pluginId: string }\n /**\n * `npm install --save-dev <pkg>@<version>` (global scope 시 `-g`).\n * v26.80.0 — `version` 필수 (pinning). vetting 은 시점 검증인데 unpinned 는 미래 코드\n * 실행 = hijacked vetted repo 직행 구멍 (ADR-021 \"지속 검증\" 주장과 모순). pkg 는 bare\n * 이름 유지 (detectVersion 이 `<npm root>/<pkg>/package.json` 경로로 사용). bump 정책:\n * A2 자산 audit 주기에 Docker 검증 후 갱신 (docs/COMPATIBILITY.md §pinning).\n */\n | { kind: \"npm\"; pkg: string; version: string }\n /** `npx <cmd>@<version> [args...]` — fire-and-forget 실행. v26.80.0 — version 필수 (위와 동일 근거). */\n | { kind: \"npx-run\"; cmd: string; version: string; args?: string[] }\n /** `bash <script> <args...>` — 로컬 스크립트 (예: prune-ecc.sh) */\n | { kind: \"shell-script\"; script: string; args: string[] }\n /**\n * v26.81.0 (ADR-022) — 내부 템플릿 자산. external-installer 가 spawn 하지 않음 —\n * installer Phase 1 의 manifest/transform 게이팅이 `isAssetSelected(key)` 로 읽는다.\n * (이전 OptionFlags.withTauri/withUzysHarness 자리. wizard/CLI 표면은 일반 자산과 동일)\n */\n | {\n kind: \"internal\";\n key:\n | \"tauri-desktop\"\n | \"uzys-harness\"\n // v26.87.0 — dev-method skills (uzys 1st-party, repo-bundled templates).\n | \"multi-persona-review\"\n | \"gap-analysis-e2e\"\n | \"ultracode-service-audit\"\n | \"asis-tobe-decision\"\n | \"compaction-handoff\"\n | \"northstar-roadmap\";\n };\n\nexport type ExternalAssetCondition =\n /** Track 중 1개 이상이 set와 일치 */\n | { kind: \"any-track\"; tracks: Track[] }\n /** dev track (executive 외 모두) */\n | { kind: \"has-dev-track\" }\n /** OptionFlags 의 특정 플래그 true (잔존 동작 옵션용 — ADR-022 후 자산 토글엔 사용 금지) */\n | { kind: \"option\"; flag: keyof OptionFlags }\n /**\n * v26.81.0 (ADR-022) — 순수 opt-in: condition 매치 항상 false. wizard 체크 또는\n * `--with <id>` 의 forceInclude 로만 설치. 이전의 자산 1:1 OptionFlags(`withBmad` 등\n * 13종)를 대체 — 자산 추가 시 플래그 코드 0곳.\n */\n | { kind: \"opt-in\" };\n\nexport interface ExternalAsset {\n /** 안정 식별자 — 로깅 + 누락 보고 + 테스트에서 사용 */\n id: string;\n /** 사람이 읽는 라벨 (한 줄) */\n description: string;\n /** v26.43.0 — Category-based UI 그룹화. SPEC §3.1. */\n category: Category;\n /** v26.43.0 — 정확한 출처 (GitHub org/user). Step 2 라벨. SPEC §3.5 R6. */\n source: Source;\n condition: ExternalAssetCondition;\n method: ExternalAssetMethod;\n /**\n * v26.79.0 — 검증 Trust Tier. 자산 entry 의 **필수 필드** (SSOT). 이전엔 별도 `TRUST_TIER`\n * Record 였으나 누락(컴파일러 미검출) + stale(좀비 키, v26.76.0 content-creator 제거 전례)\n * drift 가 가능했음 → entry 에 통합: **누락은 컴파일 에러, stale 은 구조적 불가능**.\n * `TRUST_TIER` / `assetTrustTier` 는 이 필드에서 derive (EXTERNAL_ASSETS 정의 뒤).\n * star snapshot(2026-05~06)은 각 entry tier 라인 주석. 실 drift 판정은 trust-tier-drift 가 live fetch.\n */\n tier: TrustTier;\n}\n\n/**\n * v26.71.0 (PRD v26-71) — 검증 Trust Tier. North Star 세 기둥 ②.\n * - official: Anthropic 공식 marketplace + 본 하네스 자체.\n * - vetted: star ≥ 1000 + 활성 유지보수 (D2; 라이선스 미표기/비-OSI 는 출처 신뢰).\n * - experimental: star < 1000 — opt-in + 경고 (pre-check 제외).\n */\nexport type TrustTier = \"official\" | \"vetted\" | \"experimental\";\n\nconst ALL_CSR_SSR_FULL: Track[] = [\n \"csr-supabase\",\n \"csr-fastify\",\n \"csr-fastapi\",\n \"ssr-htmx\",\n \"ssr-nextjs\",\n \"full\",\n];\n\n/** csr-*|ssr-nextjs|full per bash setup-harness.sh L1041 (ssr-htmx 제외 — htmx는 React 미사용). */\nconst CSR_SSR_NEXTJS_FULL: Track[] = [\n \"csr-supabase\",\n \"csr-fastify\",\n \"csr-fastapi\",\n \"ssr-nextjs\",\n \"full\",\n];\n\nconst RAILWAY_TRACKS: Track[] = [\"csr-fastify\", \"csr-fastapi\", \"ssr-htmx\", \"ssr-nextjs\", \"full\"];\n\n/**\n * v0.8.1 — executive-style Track SSOT (reviewer MEDIUM-3 fix).\n *\n * 3 Track 모두 dev/UI baseline 미적용 — `.claude/agents/strategist` + project-claude/<track>.md만.\n * `track-match.ts:hasDevTrack()` 의 negation domain. 사용처:\n * - `shouldInstallAsset` `has-dev-track` 분기 코멘트 (L458)\n * - `tests/external-assets.test.ts` invariant\n *\n * 신규 executive-style Track 추가 시 이 상수만 수정 → 모든 사용처 자동 반영.\n */\nexport const EXECUTIVE_STYLE_TRACKS: ReadonlyArray<Track> = [\n \"executive\",\n \"project-management\",\n \"growth-marketing\",\n];\n\n/**\n * v0.8.1 — `hasDevTrack` SSOT 의 array 표현 (reviewer MEDIUM-3 fix).\n *\n * `track-match.ts:hasDevTrack()` 와 동등 (TRACKS \\ EXECUTIVE_STYLE_TRACKS = 8 Track).\n * `any-track` condition 에 dev set 전체를 인라인하지 않도록 사용.\n */\nexport const DEV_TRACKS: ReadonlyArray<Track> = [\n \"csr-supabase\",\n \"csr-fastify\",\n \"csr-fastapi\",\n \"ssr-htmx\",\n \"ssr-nextjs\",\n \"data\",\n \"tooling\",\n \"full\",\n];\n\n/**\n * v0.8.1 — dev + project-management 합집합 (reviewer MEDIUM-3 fix).\n *\n * `product-skills` (PM 도메인까지 사용) 의 9-Track 인라인 배열을 SSOT 상수로 교체.\n */\nexport const DEV_PLUS_PM_TRACKS: ReadonlyArray<Track> = [...DEV_TRACKS, \"project-management\"];\n\n/**\n * 58 자산 매트릭스 (v26.87.0 dev-method skills 6종 internal + v26.86.0 Visual & Media 프레젠테이션 4종 + v26.85.0 5종 + v26.81.0 internal 2종 — ADR-022). bash setup-harness.sh@911c246~1 L791~1067 + 1320~1370 동등.\n *\n * 호출 순서: data → dev-baseline → railway → supabase-cli → impeccable → dev-tools →\n * supabase-skills → react/ui → next → executive → GSD → ToB → ECC.\n */\nexport const EXTERNAL_ASSETS: ReadonlyArray<ExternalAsset> = [\n // === data Track ===\n {\n id: \"polars-K-Dense\",\n tier: \"vetted\", // K-Dense-AI 26k\n description: \"Polars — fast Rust-based DataFrame (pandas alternative, data track)\",\n category: \"data\",\n source: \"K-Dense-AI\",\n condition: { kind: \"any-track\", tracks: [\"data\", \"full\"] },\n method: { kind: \"skill\", source: \"K-Dense-AI/scientific-agent-skills\", skill: \"polars\" },\n // v26.56.0 — description 보강: 트랙 hint + 한 줄 의미\n },\n {\n id: \"dask-K-Dense\",\n tier: \"vetted\", // K-Dense-AI 26k\n description: \"Dask — distributed processing (large DataFrames · cluster, data track)\",\n category: \"data\",\n source: \"K-Dense-AI\",\n condition: { kind: \"any-track\", tracks: [\"data\", \"full\"] },\n method: { kind: \"skill\", source: \"K-Dense-AI/scientific-agent-skills\", skill: \"dask\" },\n },\n {\n id: \"python-resource-management\",\n tier: \"vetted\", // wshobson/agents 36k\n description: \"Python memory · CPU management patterns (wshobson, data track)\",\n category: \"data\",\n source: \"wshobson\",\n condition: { kind: \"any-track\", tracks: [\"data\", \"full\"] },\n method: {\n kind: \"skill\",\n source: \"https://github.com/wshobson/agents\",\n skill: \"python-resource-management\",\n },\n },\n {\n id: \"python-performance-optimization\",\n tier: \"vetted\", // wshobson/agents 36k\n description: \"Python performance optimization (profiling · vectorize, wshobson, data track)\",\n category: \"data\",\n source: \"wshobson\",\n condition: { kind: \"any-track\", tracks: [\"data\", \"full\"] },\n method: {\n kind: \"skill\",\n source: \"https://github.com/wshobson/agents\",\n skill: \"python-performance-optimization\",\n },\n },\n {\n id: \"anthropic-data-plugin\",\n tier: \"official\", // anthropics/knowledge-work-plugins 18k\n description: \"Anthropic data plugin (visualization, SQL exploration)\",\n category: \"data\",\n source: \"anthropics\",\n condition: { kind: \"any-track\", tracks: [\"data\", \"full\"] },\n method: {\n kind: \"plugin\",\n marketplace: \"anthropics/knowledge-work-plugins\",\n pluginId: \"data@knowledge-work-plugins\",\n },\n },\n\n // === Internal template assets (v26.81.0, ADR-022 — 이전 OptionFlags.withTauri/withUzysHarness) ===\n {\n id: \"tauri-desktop\",\n tier: \"official\", // uzys 본 하네스 자체 템플릿\n description: \"Tauri desktop rule template (CSR/full tracks — manifest rule mapping)\",\n category: \"frontend\",\n source: \"uzys\",\n condition: { kind: \"opt-in\" },\n method: { kind: \"internal\", key: \"tauri-desktop\" },\n },\n {\n id: \"uzys-harness\",\n tier: \"official\", // uzys 본 하네스 자체 템플릿\n description:\n \"uzys-harness 6-Gate workflow — /uzys:spec /plan /build /test /review /ship slash commands (+ Codex/Antigravity skills·workflows)\",\n category: \"workflow\",\n source: \"uzys\",\n condition: { kind: \"opt-in\" },\n method: { kind: \"internal\", key: \"uzys-harness\" },\n },\n\n // === Dev-method skills (uzys 1st-party, v26.87.0) ===\n // 본 하네스의 작업 방법론 skill 6종 (repo-bundled templates). tier official, core on dev tracks\n // (has-dev-track → 기본 설치; wizard uncheck / --without <id> 로 제외 가능 — isAssetSelected 게이팅).\n {\n id: \"multi-persona-review\",\n tier: \"official\", // uzys 본 하네스 자체 템플릿\n description:\n \"Multi-persona review — critique one artifact via 3-5 parallel user personas, then synthesize P0/P1/P2 fixes\",\n category: \"dev-tools\",\n source: \"uzys\",\n condition: { kind: \"has-dev-track\" },\n method: { kind: \"internal\", key: \"multi-persona-review\" },\n },\n {\n id: \"gap-analysis-e2e\",\n tier: \"official\", // uzys 본 하네스 자체 템플릿\n description:\n \"Gap analysis E2E — detect north-star / correctness / UX gaps, then benchmark how reference services solved each\",\n category: \"dev-tools\",\n source: \"uzys\",\n condition: { kind: \"has-dev-track\" },\n method: { kind: \"internal\", key: \"gap-analysis-e2e\" },\n },\n {\n id: \"ultracode-service-audit\",\n tier: \"official\", // uzys 본 하네스 자체 템플릿\n description:\n \"Ultracode service audit — multi-agent, adversarially-verified full-service audit across 7 dimensions → milestone roadmap\",\n category: \"dev-tools\",\n source: \"uzys\",\n condition: { kind: \"has-dev-track\" },\n method: { kind: \"internal\", key: \"ultracode-service-audit\" },\n },\n {\n id: \"asis-tobe-decision\",\n tier: \"official\", // uzys 본 하네스 자체 템플릿\n description:\n \"ASIS→TOBE decision — present an A-or-B / approval moment as context → recommendation → option table → AS-IS/TO-BE contrast\",\n category: \"workflow\",\n source: \"uzys\",\n condition: { kind: \"has-dev-track\" },\n method: { kind: \"internal\", key: \"asis-tobe-decision\" },\n },\n {\n id: \"compaction-handoff\",\n tier: \"official\", // uzys 본 하네스 자체 템플릿\n description:\n \"Compaction handoff — persist durable state + git snapshot + resume anchor before a context /compact so nothing is lost\",\n category: \"workflow\",\n source: \"uzys\",\n condition: { kind: \"has-dev-track\" },\n method: { kind: \"internal\", key: \"compaction-handoff\" },\n },\n {\n id: \"northstar-roadmap\",\n tier: \"official\", // uzys 본 하네스 자체 템플릿\n description:\n \"North-star roadmap — measure current state vs the vision doc, then propose a ranked feature backlog persisted to docs/plans + memory\",\n category: \"workflow\",\n source: \"uzys\",\n condition: { kind: \"has-dev-track\" },\n method: { kind: \"internal\", key: \"northstar-roadmap\" },\n },\n\n // === Option-gated (v26.42.0 — opt-in, BREAKING vs prior has-dev-track auto-install) ===\n {\n id: \"addy-agent-skills\",\n tier: \"vetted\", // addyosmani 47k\n description: \"addy agent-skills (general dev)\",\n category: \"workflow\",\n source: \"addyosmani\",\n condition: { kind: \"opt-in\" },\n method: {\n kind: \"plugin\",\n marketplace: \"addyosmani/agent-skills\",\n pluginId: \"agent-skills@addy-agent-skills\",\n },\n },\n {\n id: \"superpowers\",\n tier: \"official\", // anthropics/claude-plugins-official 공식 배포 (소스 obra 213k)\n // 저자 = obra (190k★ github.com/obra/superpowers). 호스팅 = Anthropic 공식\n // marketplace github.com/anthropics/claude-plugins-official (\"Official,\n // Anthropic-managed directory of high quality Claude Code Plugins\").\n // source/marketplace 분리는 의도적 — source=저자, marketplace=registry.\n description: \"Superpowers — agentic skills framework (obra, Anthropic official marketplace)\",\n category: \"workflow\",\n source: \"obra\",\n condition: { kind: \"opt-in\" },\n method: {\n kind: \"plugin\",\n marketplace: \"anthropics/claude-plugins-official\",\n pluginId: \"superpowers@claude-plugins-official\",\n },\n },\n {\n // v26.75.0 (ADR-021) — wshobson/agents marketplace.json name = \"claude-code-workflows\"\n // (84 plugins). 대표 = full-stack-orchestration. 다른 orchestrator(agent-orchestration/\n // tdd-workflows/ship-mate 등): `claude plugin install <name>@claude-code-workflows`.\n id: \"wshobson-agents\",\n tier: \"vetted\", // wshobson/agents 36k\n description: \"wshobson agents — multi-agent orchestration workflows (full-stack/tdd/review)\",\n category: \"workflow\",\n source: \"wshobson\",\n condition: { kind: \"opt-in\" },\n method: {\n kind: \"plugin\",\n marketplace: \"wshobson/agents\",\n pluginId: \"full-stack-orchestration@claude-code-workflows\",\n },\n },\n {\n // v26.75.0 (ADR-021) — `npm i --save-dev @fission-ai/openspec` 후 `openspec init` 로 슬래시 주입.\n id: \"openspec\",\n tier: \"vetted\", // Fission-AI/OpenSpec 53k\n description: \"OpenSpec — spec-driven brownfield delta workflow (propose → apply → archive)\",\n category: \"workflow\",\n source: \"fission-ai\",\n condition: { kind: \"opt-in\" },\n method: { kind: \"npm\", pkg: \"@fission-ai/openspec\", version: \"1.4.1\" },\n },\n {\n // v26.75.0 (ADR-021) — 비대화형 install. v26.75.1: `--directory .` 누락 시 \"Installation\n // directory\" 프롬프트에서 hang (Docker realcli 검출). cwd(=project) 기준 `.` 지정으로 봉합.\n id: \"bmad-method\",\n tier: \"vetted\", // bmad-code-org/BMAD-METHOD 48k\n description: \"BMAD-METHOD — multi-agent agile workflow (PM/Architect/Dev, 12+ agents)\",\n category: \"workflow\",\n source: \"bmad-code-org\",\n condition: { kind: \"opt-in\" },\n method: {\n kind: \"npx-run\",\n cmd: \"bmad-method\",\n version: \"6.8.0\",\n args: [\"install\", \"--directory\", \".\", \"--tools\", \"claude-code\", \"--yes\"],\n },\n },\n\n // === Railway (csr-fastify|csr-fastapi|ssr-*|full) ===\n // v0.6.3 — railway-plugin entry 제거. railwayapp/railway-plugin repo 자체 존재 안 함\n // (404 Not Found). 공식 docs (https://docs.railway.com/ai/claude-code-plugin) 형식은\n // marketplace add `railwayapp/railway-skills` + plugin install `railway@railway-skills`만.\n // → 아래 railway-skills entry로 단일화.\n {\n id: \"railway-skills\",\n tier: \"experimental\", // railwayapp/railway-skills 268\n description: \"Railway agent-skills (deploy + project/service/env management)\",\n category: \"backend\",\n source: \"railwayapp\",\n condition: { kind: \"any-track\", tracks: RAILWAY_TRACKS },\n method: {\n kind: \"plugin\",\n marketplace: \"railwayapp/railway-skills\",\n pluginId: \"railway@railway-skills\",\n },\n },\n\n // === csr-supabase|full CLI ===\n {\n id: \"vercel-cli\",\n tier: \"vetted\", // vercel/vercel 15k\n description: \"Vercel CLI (npm)\",\n category: \"backend\",\n source: \"vercel\",\n condition: { kind: \"any-track\", tracks: [\"csr-supabase\", \"full\"] },\n method: { kind: \"npm\", pkg: \"vercel\", version: \"54.11.1\" },\n },\n {\n id: \"netlify-cli\",\n tier: \"vetted\", // netlify/cli 1.9k\n description: \"Netlify CLI (npm)\",\n category: \"backend\",\n source: \"netlify\",\n condition: { kind: \"any-track\", tracks: [\"csr-supabase\", \"full\"] },\n method: { kind: \"npm\", pkg: \"netlify-cli\", version: \"26.1.0\" },\n },\n {\n id: \"supabase-cli\",\n tier: \"vetted\", // supabase 103k\n description: \"Supabase CLI (npm) — first 'supabase login' requires OAuth\",\n category: \"backend\",\n source: \"supabase\",\n condition: { kind: \"any-track\", tracks: [\"csr-supabase\", \"full\"] },\n method: { kind: \"npm\", pkg: \"supabase\", version: \"2.105.0\" },\n },\n\n // === UI tracks (csr-*|ssr-*|full) ===\n {\n id: \"impeccable\",\n tier: \"vetted\", // pbakaus 31k\n description:\n \"Impeccable — UI design guide + visual consistency review (pbakaus, single-skill repo)\",\n category: \"frontend\",\n source: \"pbakaus\",\n condition: { kind: \"any-track\", tracks: ALL_CSR_SSR_FULL },\n // v26.54.1 — skills cli 1.5.7 부터 `--skill <name>` 명시 필수 (single-skill repo 도)\n method: { kind: \"skill\", source: \"pbakaus/impeccable\", skill: \"impeccable\" },\n },\n\n // === dev tools (has_dev_track) ===\n {\n id: \"playwright-skill\",\n tier: \"experimental\", // testdino-hq/playwright-skill 264\n description: \"Playwright — browser automation E2E test authoring guide (testdino-hq)\",\n category: \"dev-tools\",\n source: \"testdino-hq\",\n condition: { kind: \"has-dev-track\" },\n // v26.54.1 — skills cli 1.5.7 부터 `--skill <name>` 명시 필수\n method: {\n kind: \"skill\",\n source: \"testdino-hq/playwright-skill\",\n skill: \"playwright-skill\",\n },\n },\n {\n id: \"find-skills\",\n tier: \"vetted\", // vercel-labs/skills 20k (license none — 출처 신뢰)\n description: \"find-skills — search · rank all installed skills (vercel-labs, all dev tracks)\",\n category: \"dev-tools\",\n source: \"vercel-labs\",\n condition: { kind: \"has-dev-track\" },\n method: { kind: \"skill\", source: \"vercel-labs/skills\", skill: \"find-skills\" },\n },\n {\n id: \"agent-browser\",\n tier: \"vetted\", // vercel-labs/agent-browser 34k\n description:\n \"agent-browser — agent-friendly Playwright wrapper (screenshot · DOM search CLI, dev tracks)\",\n // v26.78.0 — Understanding 으로 재분류: 웹 지각(screenshot·DOM). 영상/코드 지각과 같은 축.\n category: \"understanding\",\n source: \"vercel-labs\",\n condition: { kind: \"has-dev-track\" },\n method: { kind: \"npm\", pkg: \"agent-browser\", version: \"0.27.2\" },\n },\n // v26.78.0 — Understanding 신규 3종 (plugin, opt-in). 에이전트 인지 증강: 영상·코드 지각 + 메모리.\n {\n id: \"claude-video\",\n tier: \"vetted\", // bradautomates/claude-video 1.8k\n description:\n \"Claude Video — /watch downloads any video, extracts frames + transcript so Claude can see + hear it (yt-dlp/ffmpeg auto on first run)\",\n category: \"understanding\",\n source: \"bradautomates\",\n condition: { kind: \"opt-in\" },\n method: {\n kind: \"plugin\",\n marketplace: \"bradautomates/claude-video\",\n pluginId: \"watch@claude-video\",\n },\n },\n {\n id: \"understand-anything\",\n tier: \"vetted\", // Lum1104/Understand-Anything 53k\n description:\n \"Understand Anything — multi-agent pipeline builds an interactive knowledge graph of your codebase (files/functions/deps) to explore + query\",\n category: \"understanding\",\n source: \"Lum1104\",\n condition: { kind: \"opt-in\" },\n method: {\n kind: \"plugin\",\n marketplace: \"Lum1104/Understand-Anything\",\n pluginId: \"understand-anything@understand-anything\",\n },\n },\n {\n id: \"agentmemory\",\n tier: \"vetted\", // rohitg00/agentmemory 21k\n description:\n \"AgentMemory — persistent memory runtime; plugin auto-wires MCP (53 tools) + hooks + skills. Runtime server: npx @agentmemory/agentmemory\",\n category: \"understanding\",\n source: \"rohitg00\",\n condition: { kind: \"opt-in\" },\n method: {\n kind: \"plugin\",\n marketplace: \"rohitg00/agentmemory\",\n pluginId: \"agentmemory@agentmemory\",\n },\n },\n\n // === Visual & Media (v26.85.0) — 코드-퍼스트 제작 자산. 전부 opt-in. ===\n // Docker 실설치 검증 PASS (실 claude 2.1.177): plugin install / npx skills add resolve 확인.\n {\n id: \"frontend-slides\",\n tier: \"vetted\", // zarazhangrui/frontend-slides 21k\n description:\n \"frontend-slides — dependency-free HTML slide decks (presets · templates · PPTX→HTML · PDF export)\",\n category: \"visual-media\",\n source: \"zarazhangrui\",\n condition: { kind: \"opt-in\" },\n method: {\n kind: \"plugin\",\n marketplace: \"zarazhangrui/frontend-slides\",\n pluginId: \"frontend-slides@frontend-slides\",\n },\n },\n {\n id: \"marp-slide\",\n tier: \"vetted\", // softaworks/agent-toolkit 2k\n description: \"marp-slide — Marp Markdown slides (7 themes · PPTX/PDF export)\",\n category: \"visual-media\",\n source: \"softaworks\",\n // softaworks plugin dir 는 plugin.json 부재 → skill 경로가 안전 (Docker 검증).\n condition: { kind: \"opt-in\" },\n method: { kind: \"skill\", source: \"softaworks/agent-toolkit\", skill: \"marp-slide\" },\n },\n {\n id: \"mermaid-diagrams\",\n tier: \"vetted\", // softaworks/agent-toolkit 2k\n description:\n \"mermaid-diagrams — Mermaid flow/sequence/ER/state diagram authoring (code · docs)\",\n category: \"visual-media\",\n source: \"softaworks\",\n condition: { kind: \"opt-in\" },\n method: { kind: \"skill\", source: \"softaworks/agent-toolkit\", skill: \"mermaid-diagrams\" },\n },\n {\n id: \"gsap-skills\",\n tier: \"vetted\", // greensock/gsap-skills 9k (GSAP 본가 공식)\n description:\n \"GSAP skills — official GreenSock motion/scroll animation guide (8 skills: timeline · scrolltrigger · react)\",\n category: \"visual-media\",\n source: \"greensock\",\n condition: { kind: \"opt-in\" },\n method: {\n kind: \"plugin\",\n marketplace: \"greensock/gsap-skills\",\n pluginId: \"gsap-skills@gsap-skills\",\n },\n },\n {\n // remotion: star 3.6k → vetted (star 기반 tier SSOT + trust-tier-drift CI 정합, 사용자 결정 2026-06-13).\n // 코어 BUSL(Business Source License) — opt-in + description 고지로 신중 취급 (경고 배지 대신).\n // --skill 값 = remotion-best-practices (dir `remotion` ≠ frontmatter name, Docker 실측 확정).\n id: \"remotion\",\n tier: \"vetted\", // remotion-dev/skills 3.6k (license none — 출처 신뢰; 코어 BUSL 고지)\n description:\n \"Remotion — programmatic MP4 video from React components (data-driven). Core license = BUSL\",\n category: \"visual-media\",\n source: \"remotion-dev\",\n condition: { kind: \"opt-in\" },\n method: { kind: \"skill\", source: \"remotion-dev/skills\", skill: \"remotion-best-practices\" },\n },\n // Issue #176 — 프레젠테이션 생성 스택 4종 (Docker 실설치 4/4 PASS: skills@1.5.11 add <src> --agent claude-code --skill, 2026-06-20).\n {\n id: \"ppt-master\",\n tier: \"vetted\", // hugohe3/ppt-master 29k\n description:\n \"ppt-master — editable PowerPoint (.pptx) from any document (native shapes · speaker notes · custom .pptx template)\",\n category: \"visual-media\",\n source: \"hugohe3\",\n condition: { kind: \"opt-in\" },\n method: { kind: \"skill\", source: \"hugohe3/ppt-master\", skill: \"ppt-master\" },\n },\n {\n // deer-flow 72k 거대 harness지만 --skill 로 ppt-generation 단일 skill만 설치 (skills/public/ 중첩, Docker 확인).\n id: \"ppt-generation\",\n tier: \"vetted\", // bytedance/deer-flow 72k\n description:\n \"ppt-generation — PPTX by generating an image per slide and composing into PowerPoint (deer-flow skill)\",\n category: \"visual-media\",\n source: \"bytedance\",\n condition: { kind: \"opt-in\" },\n method: { kind: \"skill\", source: \"bytedance/deer-flow\", skill: \"ppt-generation\" },\n },\n {\n id: \"web-video-presentation\",\n tier: \"vetted\", // ConardLi/garden-skills 8.4k\n description:\n \"web-video-presentation — click-driven 16:9 web decks that look like video (optional TTS narration; garden-skills)\",\n category: \"visual-media\",\n source: \"ConardLi\",\n condition: { kind: \"opt-in\" },\n method: { kind: \"skill\", source: \"ConardLi/garden-skills\", skill: \"web-video-presentation\" },\n },\n {\n id: \"revealjs\",\n tier: \"experimental\", // ryanbbrown/revealjs-skill 347 (<1000 → experimental, opt-in + 경고)\n description:\n \"reveal.js — polished HTML presentations (themes · multi-column · code highlight · speaker notes, no build step)\",\n category: \"visual-media\",\n source: \"ryanbbrown\",\n condition: { kind: \"opt-in\" },\n method: { kind: \"skill\", source: \"ryanbbrown/revealjs-skill\", skill: \"revealjs\" },\n },\n {\n id: \"architecture-decision-record\",\n tier: \"experimental\", // yonatangross/orchestkit 179\n description:\n \"ADR — Architecture Decision Record template + status flow (orchestkit, one of 80+ skills)\",\n category: \"dev-tools\",\n source: \"yonatangross\",\n condition: { kind: \"has-dev-track\" },\n method: {\n kind: \"skill\",\n source: \"yonatangross/orchestkit\",\n skill: \"architecture-decision-record\",\n },\n },\n\n // === Supabase agent-skills (csr-supabase|full) ===\n {\n id: \"supabase-agent-skills\",\n tier: \"vetted\", // supabase/agent-skills 2.2k\n description:\n \"Supabase — RLS · auth · edge function · realtime guide (csr-supabase · full tracks)\",\n category: \"backend\",\n source: \"supabase\",\n condition: { kind: \"any-track\", tracks: [\"csr-supabase\", \"full\"] },\n method: {\n kind: \"plugin\",\n marketplace: \"supabase/agent-skills\",\n pluginId: \"supabase@supabase-agent-skills\",\n },\n },\n {\n id: \"postgres-best-practices\",\n tier: \"vetted\", // supabase/agent-skills 2.2k\n description:\n \"Postgres best practices — schema · index · query patterns (csr-supabase · full tracks)\",\n category: \"backend\",\n source: \"supabase\",\n condition: { kind: \"any-track\", tracks: [\"csr-supabase\", \"full\"] },\n method: {\n kind: \"plugin\",\n marketplace: \"supabase/agent-skills\",\n pluginId: \"postgres-best-practices@supabase-agent-skills\",\n },\n },\n\n // === React + Next UI tracks ===\n // v0.6.3 — vercel-labs/agent-skills source는 short form 안 됨. full HTTPS URL 필요.\n // 사용자 확인 형식: `npx skills add https://github.com/vercel-labs/agent-skills --skill <name>`.\n {\n id: \"react-best-practices\",\n tier: \"vetted\", // vercel-labs/agent-skills 27k (license none — 출처 신뢰)\n description:\n \"React best practices — Vercel's hook · perf · component patterns (CSR · SSR · Next tracks)\",\n category: \"frontend\",\n source: \"vercel-labs\",\n condition: { kind: \"any-track\", tracks: CSR_SSR_NEXTJS_FULL },\n method: {\n kind: \"skill\",\n source: \"https://github.com/vercel-labs/agent-skills\",\n // v0.6.5 — skills.sh registry name. GitHub dir 이름(react-best-practices)과 다름.\n // skills.sh: 대부분 vercel- prefix (web-design-guidelines, deploy-to-vercel만 예외).\n skill: \"vercel-react-best-practices\",\n },\n },\n {\n id: \"shadcn-ui\",\n tier: \"vetted\", // shadcn-ui/ui 115k\n description: \"shadcn/ui — Radix-based React component copy + Tailwind theme (shadcn official)\",\n category: \"frontend\",\n source: \"shadcn-ui\",\n condition: { kind: \"any-track\", tracks: CSR_SSR_NEXTJS_FULL },\n // v26.54.1 — shadcn/ui repo 의 실제 skill 이름은 `shadcn` (자산 id 와 다름).\n method: { kind: \"skill\", source: \"shadcn/ui\", skill: \"shadcn\" },\n },\n {\n id: \"web-design-guidelines\",\n tier: \"vetted\", // vercel-labs/agent-skills 27k (license none — 출처 신뢰)\n description:\n \"Web design guidelines — Vercel's visual hierarchy · color · spacing (CSR · SSR · Next tracks)\",\n category: \"frontend\",\n source: \"vercel-labs\",\n condition: { kind: \"any-track\", tracks: CSR_SSR_NEXTJS_FULL },\n method: {\n kind: \"skill\",\n source: \"https://github.com/vercel-labs/agent-skills\",\n skill: \"web-design-guidelines\",\n },\n },\n {\n id: \"next-skills\",\n tier: \"experimental\", // vercel-labs/next-skills 895\n description:\n \"Next-skills — Next.js App Router · Server Action patterns (ssr-nextjs · full tracks)\",\n category: \"backend\",\n source: \"vercel-labs\",\n condition: { kind: \"any-track\", tracks: [\"ssr-nextjs\", \"full\"] },\n method: { kind: \"skill\", source: \"vercel-labs/next-skills\" },\n },\n\n // === Executive tracks ===\n {\n id: \"anthropic-document-skills\",\n tier: \"official\", // anthropics/skills 144k\n description: \"Anthropic document-skills (pptx/docx/xlsx/pdf)\",\n category: \"business\",\n source: \"anthropics\",\n condition: { kind: \"any-track\", tracks: [\"executive\", \"full\"] },\n method: {\n kind: \"plugin\",\n marketplace: \"anthropics/skills\",\n pluginId: \"document-skills@anthropic-agent-skills\",\n },\n },\n // alirezarezvani/claude-skills marketplace (v2.3.0) — 2026-04-25 통합 갱신.\n // 기존 alirezarezvani/c-level-skills + alirezarezvani/finance-skills 별도 marketplace\n // → 통합된 alirezarezvani/claude-skills marketplace (claude-code-skills 이름)로 이동.\n {\n id: \"c-level-skills\",\n tier: \"vetted\", // alirezarezvani 16k\n description: \"c-level-skills (claude-code-skills, 28 advisory)\",\n category: \"business\",\n source: \"alirezarezvani\",\n condition: { kind: \"any-track\", tracks: [\"executive\", \"full\"] },\n method: {\n kind: \"plugin\",\n marketplace: \"alirezarezvani/claude-skills\",\n pluginId: \"c-level-skills@claude-code-skills\",\n },\n },\n {\n id: \"business-growth-skills\",\n tier: \"vetted\", // alirezarezvani 16k\n description: \"business-growth-skills (4 — customer success, sales eng, revops, contract)\",\n category: \"business\",\n source: \"alirezarezvani\",\n // v0.5.0 — growth-marketing Track에서도 재사용. 합집합 조건.\n condition: { kind: \"any-track\", tracks: [\"executive\", \"full\", \"growth-marketing\"] },\n method: {\n kind: \"plugin\",\n marketplace: \"alirezarezvani/claude-skills\",\n pluginId: \"business-growth-skills@claude-code-skills\",\n },\n },\n {\n id: \"finance-skills\",\n tier: \"vetted\", // alirezarezvani 16k\n description: \"finance-skills (3 — financial analyst, SaaS metrics, investment advisor)\",\n category: \"business\",\n source: \"alirezarezvani\",\n condition: { kind: \"any-track\", tracks: [\"executive\", \"full\"] },\n method: {\n kind: \"plugin\",\n marketplace: \"alirezarezvani/claude-skills\",\n pluginId: \"finance-skills@claude-code-skills\",\n },\n },\n\n // === Project Management Track (v0.5.0) ===\n // SPEC docs/specs/new-tracks-pm-growth.md §3.5 — pm-skills 4/4.\n {\n id: \"pm-skills\",\n tier: \"vetted\", // alirezarezvani 16k\n description:\n \"pm-skills (6 — senior PM, scrum master, Jira/Confluence/Atlassian admin, template creator)\",\n category: \"business\",\n source: \"alirezarezvani\",\n condition: { kind: \"any-track\", tracks: [\"project-management\"] },\n method: {\n kind: \"plugin\",\n marketplace: \"alirezarezvani/claude-skills\",\n pluginId: \"pm-skills@claude-code-skills\",\n },\n },\n // SPEC §3.5 — product-skills: has-dev-track + project-management 합집합 (executive/growth-marketing 제외).\n // v0.8.1 — DEV_PLUS_PM_TRACKS 상수로 SSOT 통일 (reviewer MEDIUM-3 fix).\n {\n id: \"product-skills\",\n tier: \"vetted\", // alirezarezvani 16k\n description: \"product-skills (15 — RICE, PRD, agile PO, UX research, SaaS scaffolder ...)\",\n category: \"dev-tools\",\n source: \"alirezarezvani\",\n condition: { kind: \"any-track\", tracks: [...DEV_PLUS_PM_TRACKS] },\n method: {\n kind: \"plugin\",\n marketplace: \"alirezarezvani/claude-skills\",\n pluginId: \"product-skills@claude-code-skills\",\n },\n },\n\n // === Growth Marketing Track (v0.5.0) ===\n // SPEC docs/specs/new-tracks-pm-growth.md §3.5 — 4 entries 모두 4/4.\n {\n id: \"marketing-skills\",\n tier: \"vetted\", // alirezarezvani 16k\n description:\n \"marketing-skills (44 — content/SEO/CRO/channels/growth/intelligence/sales/twitter)\",\n category: \"business\",\n source: \"alirezarezvani\",\n condition: { kind: \"any-track\", tracks: [\"growth-marketing\"] },\n method: {\n kind: \"plugin\",\n marketplace: \"alirezarezvani/claude-skills\",\n pluginId: \"marketing-skills@claude-code-skills\",\n },\n },\n // v26.76.0 — content-creator / demand-gen 제거: alirezarezvani/claude-skills marketplace.json 에\n // 해당 plugin 부재(Docker 실설치 검출, exit 1). 거짓 광고 0건 원칙(Promise=Implementation).\n // growth-marketing 트랙은 business-growth-skills + marketing-skills + research-summarizer 유지.\n {\n id: \"research-summarizer\",\n tier: \"vetted\", // alirezarezvani 16k\n description: \"research-summarizer (market research summarization)\",\n category: \"business\",\n source: \"alirezarezvani\",\n condition: { kind: \"any-track\", tracks: [\"growth-marketing\"] },\n method: {\n kind: \"plugin\",\n marketplace: \"alirezarezvani/claude-skills\",\n pluginId: \"research-summarizer@claude-code-skills\",\n },\n },\n\n // === Code-quality enforcement (has-dev-track, v0.5.0) ===\n // SPEC §3.5 — karpathy-coder 4/4. CLAUDE.md P1-P4 선언적 원칙의 검출 도구 layer.\n // 4 Python tools (stdlib only) + reviewer agent + /karpathy-check + pre-commit hook.\n {\n id: \"karpathy-coder\",\n tier: \"vetted\", // alirezarezvani 16k\n description:\n \"karpathy-coder (4 Python tool + reviewer agent + /karpathy-check + pre-commit hook)\",\n category: \"dev-tools\",\n source: \"alirezarezvani\",\n condition: { kind: \"has-dev-track\" },\n method: {\n kind: \"plugin\",\n marketplace: \"alirezarezvani/claude-skills\",\n pluginId: \"karpathy-coder@claude-code-skills\",\n },\n },\n\n // === Option-gated ===\n {\n id: \"gsd-orchestrator\",\n tier: \"vetted\", // gsd-build/get-shit-done 63k\n description: \"GSD orchestrator (npx get-shit-done-cc)\",\n category: \"workflow\",\n source: \"get-shit-done-cc\",\n condition: { kind: \"opt-in\" },\n method: { kind: \"npx-run\", cmd: \"get-shit-done-cc\", version: \"1.42.3\" },\n },\n {\n // v26.39.2 fix — marketplace name = \"trailofbits\" (NOT \"trailofbits-skills\") +\n // \"trailofbits-skills\" plugin 자체가 존재하지 않음. marketplace 안에 14+ 개별 plugin.\n // 단일 대표 plugin = `differential-review` (코드 변경 보안 리뷰, 가장 보편).\n // 추가 plugin 원하는 사용자는: `claude plugin install <name>@trailofbits` (예: audit-context-building)\n id: \"trailofbits-skills\",\n tier: \"vetted\", // trailofbits/skills 5.5k (CC-BY-SA — 출처 신뢰)\n description: \"Trail of Bits differential-review plugin (security-focused code review)\",\n category: \"dev-tools\",\n source: \"trailofbits\",\n condition: { kind: \"opt-in\" },\n method: {\n kind: \"plugin\",\n marketplace: \"trailofbits/skills\",\n pluginId: \"differential-review@trailofbits\",\n },\n },\n {\n id: \"ecc-plugin\",\n tier: \"vetted\", // affaan-m/everything-claude-code 199k\n description: \"ECC — 60 agents · 230 skills · 75 commands. Affaan's hackathon package\",\n category: \"ecc-suite\",\n source: \"affaan-m\",\n condition: { kind: \"opt-in\" },\n // v26.54.1 — upstream marketplace.json 의 name 은 \"ecc\" (plugin name 도 \"ecc\").\n // 기존 매핑 `everything-claude-code@everything-claude-code` 는 marketplace 가\n // 그 이름으로 등록되던 옛 버전 기준. fresh install 에서는 \"Plugin not found\" 발생.\n method: {\n kind: \"plugin\",\n marketplace: \"affaan-m/everything-claude-code\",\n pluginId: \"ecc@ecc\",\n },\n },\n {\n id: \"ecc-prune\",\n tier: \"official\", // uzys 본 하네스 자체\n description:\n \"ECC prune (drop items beyond curated 89 KEEP → copy to .claude/local-plugins/ecc/)\",\n category: \"ecc-suite\",\n source: \"uzys\",\n condition: { kind: \"option\", flag: \"withPrune\" },\n method: {\n kind: \"shell-script\",\n script: \"scripts/prune-ecc.sh\",\n args: [\"--apply\", \"--force\"],\n },\n },\n];\n\n/**\n * v26.87.0 — dev-method skill ids (uzys 1st-party, internal templates). installer 의\n * `selectedInternalSkills` 계산 + manifest copy 게이팅 + 테스트가 공유하는 SSOT.\n * 각 id 는 method.kind===\"internal\" 이며 `templates/skills/<id>/SKILL.md` 로 번들된다.\n */\nexport const DEV_METHOD_SKILL_IDS: ReadonlyArray<string> = [\n \"multi-persona-review\",\n \"gap-analysis-e2e\",\n \"ultracode-service-audit\",\n \"asis-tobe-decision\",\n \"compaction-handoff\",\n \"northstar-roadmap\",\n];\n\n/**\n * v26.79.0 — `TRUST_TIER` 는 EXTERNAL_ASSETS.tier 에서 derive (단일 출처). 별도 Record 유지 시\n * 누락/stale drift 가능 → 제거. 기존 소비자(prompts.ts·gen-compatibility·trust-tier-drift)는\n * 이 derived map 을 그대로 import. id 키는 각 자산 id 와 1:1 (자산 추가 시 자동 반영).\n */\nexport const TRUST_TIER: Record<string, TrustTier> = Object.fromEntries(\n EXTERNAL_ASSETS.map((a) => [a.id, a.tier]),\n);\n\n/** 자산의 검증 tier. 미분류(catalog 외 id)는 보수적으로 experimental. */\nexport function assetTrustTier(assetId: string): TrustTier {\n return TRUST_TIER[assetId] ?? \"experimental\";\n}\n\n/**\n * v26.47.0 — User override of preset/option condition (Phase C full, SPEC §3.1).\n * - `forceInclude`: condition 무관 강제 포함 (사용자가 명시 추가)\n * - `forceExclude`: condition 무관 강제 제외 (사용자가 추천 ✓ 풀음)\n *\n * 우선순위: `forceExclude` > `forceInclude` > `condition`.\n */\nexport interface UserOverride {\n forceInclude: ReadonlyArray<string>;\n forceExclude: ReadonlyArray<string>;\n}\n\n/**\n * 조건 평가 — 주어진 spec(tracks + options + userOverride)에서 자산이 설치 대상인지 판정.\n */\nexport function shouldInstallAsset(\n asset: ExternalAsset,\n ctx: {\n tracks: ReadonlyArray<Track>;\n options: OptionFlags;\n userOverride?: UserOverride;\n },\n): boolean {\n // v26.47.0 — userOverride 우선순위: forceExclude > forceInclude > condition.\n if (ctx.userOverride?.forceExclude.includes(asset.id)) return false;\n if (ctx.userOverride?.forceInclude.includes(asset.id)) return true;\n // v26.71.1 — experimental(T3) opt-in only (PRD v26-71 R6/AC4). condition 매치만으론 미설치.\n // --with <id> (forceInclude) 또는 interactive 체크(→forceInclude) 시에만 설치 — 선택권 유지(강제 차단 아님).\n // v26.71.0 은 recommendedExternalAssets(pre-check)에만 제외 적용 → 비대화형/미체크 install 경로 누락 버그 fix.\n // 게이트는 명시 분류(TRUST_TIER[id])만 본다 — assetTrustTier()의 unknown→experimental default 는\n // DISPLAY(경고 배지)용이며 설치 게이트엔 미적용. 실 자산 전부 매핑은 \"no-missing\" 테스트가 강제(AC1).\n if (TRUST_TIER[asset.id] === \"experimental\") return false;\n return matchesCondition(asset, ctx);\n}\n\n/**\n * Track/option condition 매치만 평가 (tier·override 무관). shouldInstallAsset 의 조건절 +\n * experimentalOptInCandidates 의 \"조건은 맞지만 T3\" 판정에서 공유 (SSOT).\n */\nfunction matchesCondition(\n asset: ExternalAsset,\n ctx: { tracks: ReadonlyArray<Track>; options: OptionFlags },\n): boolean {\n const cond = asset.condition;\n switch (cond.kind) {\n case \"any-track\":\n return ctx.tracks.some((t) => cond.tracks.includes(t));\n case \"has-dev-track\":\n // SSOT — track-match.ts hasDevTrack(): csr-*|ssr-*|data|full|tooling (= DEV_TRACKS).\n // EXECUTIVE_STYLE_TRACKS (executive + project-management + growth-marketing) 는 제외.\n return hasDevTrack(ctx.tracks);\n case \"option\":\n return ctx.options[cond.flag] === true;\n case \"opt-in\":\n // v26.81.0 (ADR-022) — 순수 opt-in: condition 으론 절대 설치 안 됨.\n // forceInclude(wizard 체크 / --with <id>)가 shouldInstallAsset 상위에서 처리.\n return false;\n }\n}\n\n/**\n * v26.81.0 (ADR-022) — spec 에서 특정 자산의 선택 여부 판정.\n * 내부 자산(tauri-desktop/uzys-harness)의 manifest/transform 게이팅이 이전\n * `spec.options.withTauri` 등 boolean 자리를 대체해 호출. (wizard 체크/--with 는\n * forceInclude 로 들어오므로 shouldInstallAsset 가 그대로 판정)\n */\nexport function isAssetSelected(\n assetId: string,\n ctx: {\n tracks: ReadonlyArray<Track>;\n options: OptionFlags;\n userOverride?: UserOverride;\n },\n): boolean {\n const asset = EXTERNAL_ASSETS.find((a) => a.id === assetId);\n return asset ? shouldInstallAsset(asset, ctx) : false;\n}\n\n/**\n * v26.71.1 — track/option condition 은 매치하지만 T3(experimental)라서 default 설치에서 제외된 자산.\n * forceInclude(--with / interactive 체크)된 것은 이미 설치되므로 제외. 비대화형 install 의\n * discoverability 힌트용 (Transparent Defaults — 숨김 0건. --with 로 opt-in 가능함을 사용자에게 알림).\n */\nexport function experimentalOptInCandidates(ctx: {\n tracks: ReadonlyArray<Track>;\n options: OptionFlags;\n userOverride?: UserOverride;\n}): ReadonlyArray<ExternalAsset> {\n return EXTERNAL_ASSETS.filter(\n (a) =>\n TRUST_TIER[a.id] === \"experimental\" &&\n !ctx.userOverride?.forceInclude.includes(a.id) &&\n matchesCondition(a, ctx),\n );\n}\n\n/**\n * spec에 적용 가능한 자산 필터.\n */\nexport function filterApplicableAssets(\n assets: ReadonlyArray<ExternalAsset>,\n ctx: {\n tracks: ReadonlyArray<Track>;\n options: OptionFlags;\n userOverride?: UserOverride;\n },\n): ReadonlyArray<ExternalAsset> {\n return assets.filter((a) => shouldInstallAsset(a, ctx));\n}\n","import type { Track } from \"./types.js\";\n\n/** Match a track against a glob-style pattern (bash-compatible: `csr-*`, `csr-*|full`). */\nexport function matchTrack(track: Track, pattern: string): boolean {\n return pattern.split(\"|\").some((p) => globToRegex(p.trim()).test(track));\n}\n\nexport function anyTrack(tracks: ReadonlyArray<Track>, pattern: string): boolean {\n return tracks.some((t) => matchTrack(t, pattern));\n}\n\nexport function hasDevTrack(tracks: ReadonlyArray<Track>): boolean {\n // Dev tracks = anything that is NOT executive AND NOT tooling-only-meta.\n // Mirrors setup-harness.sh has_dev_track: csr-*, ssr-*, data, full, tooling.\n return anyTrack(tracks, \"csr-*|ssr-*|data|full|tooling\");\n}\n\nexport function hasUiTrack(tracks: ReadonlyArray<Track>): boolean {\n return anyTrack(tracks, \"csr-*|ssr-*|full\");\n}\n\n/** Convert a bash glob (only `*` is supported) to a strict-anchored RegExp. */\nfunction globToRegex(pattern: string): RegExp {\n const escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, \"\\\\$&\").replace(/\\*/g, \".*\");\n return new RegExp(`^${escaped}$`);\n}\n","/**\n * Category-based installer (v26.43.0) — 분야별 대표 스킬 큐레이션.\n *\n * 9 카테고리: Frontend / Backend / Data / Business / Dev Tools / Understanding / Visual & Media / Workflow / ECC Suite.\n * 각 카테고리 안에서 자산은 (출처, ExternalAsset.id) 로 식별. Step 2 UI 그룹화 기준.\n *\n * Source labels = 정확한 GitHub org/user (Phase A의 SSOT).\n * `[3rd-party]` 같은 generic 라벨 금지 (SPEC R6).\n */\n\nexport const CATEGORIES = [\n \"frontend\",\n \"backend\",\n \"data\",\n \"business\",\n \"dev-tools\",\n \"understanding\",\n \"visual-media\",\n \"workflow\",\n \"ecc-suite\",\n] as const;\nexport type Category = (typeof CATEGORIES)[number];\n\nexport const CATEGORY_TITLES: Record<Category, string> = {\n frontend: \"🎨 Frontend (UI · Design)\",\n backend: \"🗄️ Backend (API · DB · Deploy)\",\n data: \"📊 Data\",\n business: \"💼 Business (Documents)\",\n \"dev-tools\": \"🛡️ Dev Tools (Security · Quality)\",\n // v26.78.0 — 에이전트 인지 증강: 환경에 대한 지각(영상·웹·코드) + 기억(memory).\n understanding: \"🧠 Understanding (Perception · Memory)\",\n // v26.85.0 — 코드-퍼스트 비주얼/미디어 제작: 슬라이드·다이어그램·모션·동영상.\n \"visual-media\": \"🎬 Visual & Media (Slides · Diagrams · Motion · Video)\",\n workflow: \"🔄 Workflow (Development Cycle)\",\n \"ecc-suite\": \"📦 ECC Suite\",\n};\n\n/** Source labels — GitHub org/user. Maps the canonical owner shown to the user. */\nexport const SOURCE_LABELS = {\n anthropics: \"anthropics\",\n \"vercel-labs\": \"vercel-labs\",\n \"shadcn-ui\": \"shadcn/ui\",\n vercel: \"vercel\",\n netlify: \"netlify\",\n supabase: \"supabase\",\n railwayapp: \"railwayapp\",\n trailofbits: \"trailofbits\",\n obra: \"obra\",\n addyosmani: \"addyosmani\",\n pbakaus: \"pbakaus\",\n \"K-Dense-AI\": \"K-Dense-AI\",\n wshobson: \"wshobson\",\n \"testdino-hq\": \"testdino-hq\",\n yonatangross: \"yonatangross\",\n alirezarezvani: \"alirezarezvani\",\n \"affaan-m\": \"affaan-m\",\n \"get-shit-done-cc\": \"get-shit-done-cc\",\n \"fission-ai\": \"Fission-AI\",\n \"bmad-code-org\": \"bmad-code-org\",\n // v26.78.0 — Understanding 카테고리 신규 출처\n bradautomates: \"bradautomates\",\n Lum1104: \"Lum1104\",\n rohitg00: \"rohitg00\",\n // v26.85.0 — Visual & Media 카테고리 출처 (Docker 실설치 검증 PASS).\n zarazhangrui: \"zarazhangrui\",\n greensock: \"greensock\",\n softaworks: \"softaworks\",\n \"remotion-dev\": \"remotion-dev\",\n // v26.86.0 — Visual & Media 프레젠테이션 4종 (Issue #176, Docker 실설치 4/4 PASS).\n hugohe3: \"hugohe3\",\n bytedance: \"bytedance\",\n ConardLi: \"ConardLi\",\n ryanbbrown: \"ryanbbrown\",\n uzys: \"this project\",\n} as const;\nexport type Source = keyof typeof SOURCE_LABELS;\n"],"mappings":"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","names":[]}
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Placeholder — Phase C에서 `.claude/hooks/gate-check.sh`로부터 포팅
3
- # stdin JSON 필드는 Claude Code와 호환 (ADR-002 v2 D5)
4
- # Codex event 매핑은 templates/codex/hooks/README.md 참조
5
- set -euo pipefail
6
- echo "not-yet-implemented (Phase C)" >&2
7
- exit 0
@@ -1,24 +0,0 @@
1
- ---
2
- name: uzys-build
3
- description: "Build phase — TDD로 점진적 구현한다. Codex 포팅 (원본: .claude/commands/uzys/build.md)"
4
- ---
5
-
6
- # /uzys-build — build Phase (Codex)
7
-
8
- > **Generated from**: `.claude/commands/uzys/build.md` via `scripts/claude-to-codex.sh` (Phase C)
9
- > **Slash**: `/uzys-build`
10
-
11
- ## Pre-flight
12
-
13
- 이 skill 호출 전 확인:
14
- - 직전 phase 완료 체크: `docs/todo.md`에서 이전 Phase 체크박스 확인
15
- - `pre_tool_use` hook이 Skill matcher로 순서 강제 (Codex hook 시스템, ADR-002 v2)
16
- - 직전 phase 미완료 시 exit 2로 차단됨
17
-
18
- ## Goal
19
-
20
- {SKILL_BODY_PLACEHOLDER}
21
-
22
- ---
23
-
24
- *Phase C에서 본 SKILL.md 본문이 `.claude/commands/uzys/build.md`로부터 포팅됨.*
@@ -1,24 +0,0 @@
1
- ---
2
- name: uzys-plan
3
- description: "Plan phase — 작업을 검증 가능한 작은 단위로 분해한다. Codex 포팅 (원본: .claude/commands/uzys/plan.md)"
4
- ---
5
-
6
- # /uzys-plan — plan Phase (Codex)
7
-
8
- > **Generated from**: `.claude/commands/uzys/plan.md` via `scripts/claude-to-codex.sh` (Phase C)
9
- > **Slash**: `/uzys-plan`
10
-
11
- ## Pre-flight
12
-
13
- 이 skill 호출 전 확인:
14
- - 직전 phase 완료 체크: `docs/todo.md`에서 이전 Phase 체크박스 확인
15
- - `pre_tool_use` hook이 Skill matcher로 순서 강제 (Codex hook 시스템, ADR-002 v2)
16
- - 직전 phase 미완료 시 exit 2로 차단됨
17
-
18
- ## Goal
19
-
20
- {SKILL_BODY_PLACEHOLDER}
21
-
22
- ---
23
-
24
- *Phase C에서 본 SKILL.md 본문이 `.claude/commands/uzys/plan.md`로부터 포팅됨.*
@@ -1,24 +0,0 @@
1
- ---
2
- name: uzys-review
3
- description: "Review phase — 다중 관점 리뷰로 품질을 검증한다. Codex 포팅 (원본: .claude/commands/uzys/review.md)"
4
- ---
5
-
6
- # /uzys-review — review Phase (Codex)
7
-
8
- > **Generated from**: `.claude/commands/uzys/review.md` via `scripts/claude-to-codex.sh` (Phase C)
9
- > **Slash**: `/uzys-review`
10
-
11
- ## Pre-flight
12
-
13
- 이 skill 호출 전 확인:
14
- - 직전 phase 완료 체크: `docs/todo.md`에서 이전 Phase 체크박스 확인
15
- - `pre_tool_use` hook이 Skill matcher로 순서 강제 (Codex hook 시스템, ADR-002 v2)
16
- - 직전 phase 미완료 시 exit 2로 차단됨
17
-
18
- ## Goal
19
-
20
- {SKILL_BODY_PLACEHOLDER}
21
-
22
- ---
23
-
24
- *Phase C에서 본 SKILL.md 본문이 `.claude/commands/uzys/review.md`로부터 포팅됨.*
@@ -1,24 +0,0 @@
1
- ---
2
- name: uzys-ship
3
- description: "Ship phase — 프리런치 체크리스트 실행 후 배포한다. Codex 포팅 (원본: .claude/commands/uzys/ship.md)"
4
- ---
5
-
6
- # /uzys-ship — ship Phase (Codex)
7
-
8
- > **Generated from**: `.claude/commands/uzys/ship.md` via `scripts/claude-to-codex.sh` (Phase C)
9
- > **Slash**: `/uzys-ship`
10
-
11
- ## Pre-flight
12
-
13
- 이 skill 호출 전 확인:
14
- - 직전 phase 완료 체크: `docs/todo.md`에서 이전 Phase 체크박스 확인
15
- - `pre_tool_use` hook이 Skill matcher로 순서 강제 (Codex hook 시스템, ADR-002 v2)
16
- - 직전 phase 미완료 시 exit 2로 차단됨
17
-
18
- ## Goal
19
-
20
- {SKILL_BODY_PLACEHOLDER}
21
-
22
- ---
23
-
24
- *Phase C에서 본 SKILL.md 본문이 `.claude/commands/uzys/ship.md`로부터 포팅됨.*
@@ -1,28 +0,0 @@
1
- ---
2
- name: uzys-spec
3
- description: "Define phase — 구조화된 스펙을 코드 작성 전에 작성한다. Codex 포팅 (원본: .claude/commands/uzys/spec.md)"
4
- ---
5
-
6
- # /uzys-spec — Define Phase (Codex)
7
-
8
- > **Generated from**: `.claude/commands/uzys/spec.md` via `scripts/claude-to-codex.sh` (Phase C)
9
- > **Slash**: `/uzys-spec` (Codex namespace 미지원으로 `:` → `-` rename)
10
-
11
- ## Pre-flight
12
-
13
- 이 skill 호출 전 확인:
14
- - 직전 단계 없음 (최초 진입점)
15
- - `docs/SPEC.md` 또는 `docs/specs/<feature>.md`가 아직 없거나 갱신 필요한 상황
16
-
17
- ## Goal
18
-
19
- {SKILL_BODY_PLACEHOLDER}
20
-
21
- ## Codex 제약 참고
22
-
23
- - `pre_tool_use` hook이 Bash 툴만 감지 (Issue #16732) — spec 작성 시 ApplyPatch 경로는 sandbox가 보호
24
- - `child_agents_md=disabled` — docs/specs/*.md 계층 merge 수동 관리 필요
25
-
26
- ---
27
-
28
- *Phase C에서 본 SKILL.md 본문이 `.claude/commands/uzys/spec.md`로부터 포팅됨.*
@@ -1,24 +0,0 @@
1
- ---
2
- name: uzys-test
3
- description: "Verify phase — TDD 워크플로우와 Track별 커버리지 게이트를 실행한다. Codex 포팅 (원본: .claude/commands/uzys/test.md)"
4
- ---
5
-
6
- # /uzys-test — test Phase (Codex)
7
-
8
- > **Generated from**: `.claude/commands/uzys/test.md` via `scripts/claude-to-codex.sh` (Phase C)
9
- > **Slash**: `/uzys-test`
10
-
11
- ## Pre-flight
12
-
13
- 이 skill 호출 전 확인:
14
- - 직전 phase 완료 체크: `docs/todo.md`에서 이전 Phase 체크박스 확인
15
- - `pre_tool_use` hook이 Skill matcher로 순서 강제 (Codex hook 시스템, ADR-002 v2)
16
- - 직전 phase 미완료 시 exit 2로 차단됨
17
-
18
- ## Goal
19
-
20
- {SKILL_BODY_PLACEHOLDER}
21
-
22
- ---
23
-
24
- *Phase C에서 본 SKILL.md 본문이 `.claude/commands/uzys/test.md`로부터 포팅됨.*