Skip to content

feat(content-studio): unified pipeline v2 — LLM generation, post picker, thumbnails#565

Merged
thxforall merged 9 commits into
devfrom
feature/content-studio-pipeline-v2
May 21, 2026
Merged

feat(content-studio): unified pipeline v2 — LLM generation, post picker, thumbnails#565
thxforall merged 9 commits into
devfrom
feature/content-studio-pipeline-v2

Conversation

@thxforall
Copy link
Copy Markdown
Contributor

Summary

  • Research 모듈 제거 → unified content schema + rule keyword 기반 LLM generation으로 전환
  • PostPickerModal 추가 — post 검색 API + 모달 UI로 Post ID 선택
  • 채널 썸네일 생성 API — packet 기반 채널별 썸네일 생성
  • DB persistence — Supabase 로컬 패킷 저장/조회 (dev parity)
  • 타입 정합성 — 로컬 API 타입 추가, PostDetailResponse import 정렬

Changes

  • lib/content-studio/: research 모듈 완전 제거, unified schema/LLM generation/api-types 추가
  • app/admin/content-studio/: PostPickerModal, AssetPanel, ShortFormPanel 통합
  • app/api/v1/content/: packets, posts/search, assets/thumbnails 라우트
  • lib/content-studio/db.ts: Supabase 기반 패킷 CRUD

Verification

  • TypeScript: 0 errors
  • Tests: 42/42 passed (content-studio, assets, llm-generation, post-picker, panels)
  • Browser: 페이지 로드 정상, 콘솔 에러 없음

Test plan

  • admin 로그인 후 /admin/content-studio 접속
  • Browse 클릭 → PostPickerModal에서 post 검색/선택
  • Create Packet → 패킷 생성 확인
  • Template/Hybrid/LLM 모드 전환 후 Generate Variants
  • Asset Panel / ShortForm Panel 렌더링 확인

🤖 Generated with Claude Code

thxforall and others added 9 commits May 14, 2026 20:58
Replace packet_{postId} format that caused 'invalid input syntax for
type uuid' errors. DB uniqueness is enforced by content_packets.post_id
unique constraint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…t schema

Drop all Research/Firecrawl types (ResearchRun, ResearchSource, ResearchInsight,
etc.) and research-related fields from ContentPacket, ContentVariant,
generateVariantsRequestSchema, assetPlanRequestSchema, shortFormPlanRequestSchema.

Add unifiedContentResponseSchema for the new single-call LLM pipeline that
generates keywords + imagePrompts + channel variants together.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove the entire research subsystem (Firecrawl client, domain policy,
normalization, query suggestions, recommendations, service) and clean
all references from governance checks, LLM generation, asset/short-form
pipelines, UI components, API routes, and tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…eration

Single OpenAI call now returns keywords, image prompts, and channel variants
together, replacing the previous multi-call pattern. Template fallback preserved
when LLM is unavailable or validation fails.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- schemas.ts — thumbnailChannelSchema + generateThumbnailsRequestSchema
- assets/service.ts — generateChannelThumbnails(): parallel image gen per channel (youtube/instagram_feed/instagram_story) with partial failure handling
- assets/thumbnails/route.ts — POST /api/v1/content/assets/thumbnails with admin auth
- assets/index.ts — export new service functions
- tests — 6 new tests (schema validation + generation + partial failures), 28 total passing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Admin 전용 포스트 검색 API(GET /api/v1/content/posts/search)와
PostPickerModal 컴포넌트 추가. ILIKE 검색, cursor 기반 무한스크롤,
이미지 그리드 UI로 Content Studio에서 포스트를 시각적으로 선택 가능.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add Browse button next to Post ID input for visual post selection,
wiring PostPickerModal with open/close state and onSelect callback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace @/lib/api/generated/models imports with local api-types.ts
to resolve missing module errors. Fix 'response possibly undefined'
warnings in post-picker tests and add missing PostDetailResponse
fields in test fixtures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 21, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
decoded-app Ready Ready Preview, Comment May 21, 2026 10:45am

@thxforall thxforall moved this from Todo to In Progress in decoded-monorepo May 21, 2026
@thxforall thxforall added the bump:minor Backward-compatible additions label May 21, 2026
@thxforall thxforall merged commit a0c2e9d into dev May 21, 2026
8 of 9 checks passed
@github-project-automation github-project-automation Bot moved this from In Progress to Done in decoded-monorepo May 21, 2026
@thxforall thxforall deleted the feature/content-studio-pipeline-v2 branch May 21, 2026 10:50
CIOI added a commit that referenced this pull request May 24, 2026
…loader ops) (#577)

* feat(data-pipeline): Instagram 엔티티 enrichment 파이프라인 추가 (#544)

* feat(data-pipeline): add Instagram entity enrichment

Adds a quota-aware Instagram account enrichment pipeline that keeps runtime state in assets while writing reviewed entity catalog data to operation.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(data-pipeline): retry stale entity enrichment steps

Co-authored-by: Cursor <cursoragent@cursor.com>

* style(data-pipeline): format enrichment admin routes

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(admin): improve group member management UI (#546)

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(web): add legal pages and minimal footer for Rakuten affiliate (#553)

Add About, Privacy Policy, Terms of Service, and Affiliate Disclosure pages with a streamlined footer so affiliate reviewers can reach policy content and contact email without dedicated contact routes.

Closes #552

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs: Step 1 (ADR+architecture stub) + Step 2 (미분류 문서 매핑) — refs #518 (#542)

* docs: ADR + architecture → vault stub 전환 (refs #518)

본문이 decoded-docs vault Architecture/ 로 이미 마이그레이션(M2) 완료된 상태.
monorepo 원본은 vault redirect stub만 남김 — sync-policy.md 의 "MOVED" 룰
대로 vault 가 SoT, monorepo 원본은 stub.

변경 파일 (6):
- docs/adr/ADR-0001-ai-dev-boilerplate.md
- docs/adr/ADR-0002-llm-wiki-foundation.md
- docs/architecture/README.md
- docs/architecture/assets-project.md
- docs/architecture/data-pipeline.md
- docs/architecture/state-management.md

각 파일은 vault GitHub 링크 + Obsidian path + sync-policy 참조만 보유.
검증: vault 본문은 monorepo 본문에 frontmatter(date/tags/source/migrated_on)
만 추가된 형태로 정보 손실 없음.

CLAUDE.md / docs/agent/ 의 architecture·adr 링크는 stub 을 거쳐 vault 로
redirect 되는 구조이므로 깨지지 않음. CLAUDE.md 직링크 교체는 Step 5(라우팅
업데이트)에서 처리.

* docs: Step 2 — 미분류 문서 매핑 (refs #518)

decoded-docs vault 마이그레이션 Step 2 산출물. docs/ + .planning/codebase/
전체 파일을 transition-design.md §분류 원칙(5가지 판단 기준)에 따라
🟢 MONOREPO / 🔵 VAULT / ⚪ STUB / 🟡 ARCHIVE 로 분류.

핵심 결정:
- wiki/ 전체 MONOREPO 유지 — tools/wiki/lib/config.ts 의 INDEX_PATH +
  INGEST_TOPICS 하드코딩, CLAUDE.md SSOT import 의존성 (spec과 충돌,
  Step 5 PR에서 spec 정정 예정)
- .planning/codebase/ STUB 패턴 — CLAUDE.md L19/L25/L87-93 8건 직접
  링크. Step 1 (ADR/architecture) 와 동일 패턴 적용
- qa-screenshots/ MONOREPO — visual-qa.spec.ts:41 테스트 출력 경로

집계: 🟢 65% / 🔵 28% / ⚪ 11% / 🟡 2%, 🔴 REVIEW 0건 (전부 확정).

다음: 팀 리뷰 → Step 3 (vault 복사 + stub 생성)

* docs: Step 2 매핑 재점검 — Q3 B + Q4 E 반영 (refs #518)

grill-docs 재점검 (2026-05-21, Q1~Q5) 결과 Step 2 매핑 정정:

- Section A: post-centric, home-sections-feasibility → 🟢 MONOREPO 정정
- Section I: plans/specs/briefs 전체 🟢 MONOREPO 잔류 (Q4 E, 5-criteria 4/5 monorepo)
- Section K: research/incidents/handoffs 전체 🟢 MONOREPO 잔류
- Section N: `.planning/codebase/*` STUB 패턴 폐기 → 🟢 MONOREPO 잔류 (Q3 B)
  · 갱신 책임 모호 + outdated 스냅샷이 vault "팀 지식"으로 위장하는 비용 회피
  · CLAUDE.md L19/L25/L87-L93 직접 링크 변경 없음

집계 재계산:
- 🟢 MONOREPO ~145 / ⚪ STUB 6 (Step 1) / 🔵 VAULT 9 / 🟡 ARCHIVE 2
- vault 이동 대상이 종전 ~35건 → 9건으로 축소

Step 3 scope:
- A (이 commit): Step 2 매핑 정정. monorepo 변경 0건.
- B (다음): vault `decoded-docs`에 9개 파일 복사 + frontmatter, 별도 PR.

`Archive/` 신설안(Q2 C)은 Q4 E 채택으로 자연 폐기.

* fix(docs): vault stub frontmatter 추가 — wiki-lint 통과 (refs #518)

Step 1 (PR #542 first commit `64a5a76`) 에서 ADR + architecture 본문을 vault
redirect stub으로 전환할 때 frontmatter도 함께 제거되어 wiki-lint MISSING_FRONTMATTER
실패. 6개 stub에 minimal frontmatter 추가:

- docs/adr/ADR-0001-ai-dev-boilerplate.md
- docs/adr/ADR-0002-llm-wiki-foundation.md
- docs/architecture/README.md
- docs/architecture/assets-project.md
- docs/architecture/data-pipeline.md
- docs/architecture/state-management.md

각 stub: owner=llm, status=deprecated (Step 5에서 삭제 예정),
tags 에 [obsidian, deprecated] 포함하여 wiki-lint 허용 어휘 준수.

ADR 의 title 콜론은 YAML parse 위해 큰따옴표 인용.

* fix(vton): handle Vertex AI RAI filter error (#535)

* docs: add content-studio pipeline v2 design spec (#530)

Post picker modal, UUID packet ID fix, unified LLM call,
channel thumbnails, and Research/Firecrawl removal.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(vton): handle Vertex AI RAI filter with user-friendly error

Vertex AI returns raiFilteredReason instead of image data when safety
filter triggers. Log full response in dev and surface actionable message.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: add content studio spec frontmatter

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

* ci(github): dispatch git events to decoded-docs vault (#556)

Trigger decoded-docs repository_dispatch (git-event) when a PR is merged
into main/dev, a release is published, or via manual workflow_dispatch.
Pairs with the vault-sync workflow in decoded-docs to record changelog
entries automatically.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* ci(github): sync issue and project status automation (#555)

* docs: add content-studio pipeline v2 design spec (#530)

Post picker modal, UUID packet ID fix, unified LLM call,
channel thumbnails, and Research/Firecrawl removal.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* ci(github): close linked issues on dev merge

* ci(github): sync issue and project status automation

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

* revert: ci: dispatch git events to decoded-docs vault (#557)

Reverts PR #556. An external dispatch source (likely decoded-app or a
GitHub App) is already populating decoded-docs vault Changelog with a
richer set of events (pr-opened, pr-merged, push, deploy-success). The
new workflow added in PR #556 was duplicating dispatches and causing
vault-sync concurrency cancellations.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(spec): mark telegram-bot-vault-integration as deprecated/superseded (#554)

원안(5/14) Phase 1+2가 decoded-agent의 manager agent + conversation digest
agent로 흡수·발전되어 본 spec은 역사적 참조용으로 전환.

- frontmatter status: draft → deprecated
- superseded_by, superseded_date 필드 추가
- 본문 최상단에 redirect 안내 + 신규 위치(decoded-agent#61, vault history note) 링크
- H1 title (SUPERSEDED) 마커
- tags: superseded → deprecated (wiki-lint 허용 어휘)

Refs:
- closes/supersedes monorepo #516, #517 (both closed as not-planned/superseded)
- decoded-agent epic: #61 (conversation digest)
- vault history: decoded-docs Project/integrations/telegram-vault-bot.md

* docs(harness): docs/agent + skills/commands 정합성 점검 (audit #558) (#559)

* docs(harness): add 2026-05-21 docs/agent + skills/commands audit report

HIGH/MEDIUM/LOW findings for .agents/skills/* (9 new), .claude/commands/*
(6 new), and docs/agent ↔ decoded-docs vault routing. Confirms
vault-dispatch.yml is intended state (#557 reverted a separate duplicate
workflow). Companion master issue will track follow-up actions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(skills): add excalidraw-generator and meeting-prep skills

audit (2026-05-21)에서 즉시 커밋 가능 판정된 2개 스킬.
- excalidraw-generator: 다이어그램 JSON 생성
- meeting-prep: 주간 업데이트 요약, 실 사용 검증된 동적 조회 사용

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(skills): add 7 generator skills with F1/F2/F3 fixes applied

audit #558 즉시 체크리스트 적용:
- F1: model: Codex-sonnet-4-20250514 비표준 ID 줄 제거
- F2: specs/shared/ → specs/_shared/ (실제 경로 정정)
- F2: git-workflow .Codex/agents/ → ~/.claude/agents/ 정정
- F3: data-model-generator lib/types/ → packages/shared/types/ prefix 추가
- F3: component-template-generator @/lib/types → @decoded/shared/types 정정

신규 스킬:
- api-contract-generator, component-template-generator
- data-model-generator, git-workflow
- pencil-screen-ui, screen-spec-generator
- supabase-migration-generator

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(commands): add Matt Pocock slash commands with F4 path fix

audit #558 F4 적용:
- /Users/kiyeol/.agents/ → ~/.agents/ (타 머신 호환)
- gstack.md 컨벤션과 일치

신규 commands:
- /grill, /grill-docs (plan/design 인터뷰)
- /to-prd, /to-issues (PRD/이슈 분해)
- /zoom-out (맥락 확장)
- /setup-matt-skills (1회성 setup)

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(agent): add decoded-docs vault routing note to README

audit #558 F6 적용. docs/agent/README.md가 CLAUDE.md의 vault 라우팅
컨벤션과 drift 상태였음 — vault 위치와 sync-policy 링크를 intro 직후에
추가하여 에이전트가 회의/결정/기획 질의를 vault로 라우팅하도록 명시.

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(claude): register 9 new skills + 6 Matt Pocock commands in skill routing

audit #558 routing 표 등록. 신규 9개 spec/generator 스킬과 6개 Matt Pocock
slash command를 CLAUDE.md Skill routing 섹션에 트리거 키워드와 함께 등록하여
에이전트가 자동으로 라우팅하도록 함.

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(agents): add Matt Pocock skills setup (F5)

audit #558 F5 적용. /to-prd, /to-issues, /grill 등 Matt Pocock skills가
요구하는 1회성 setup 완료:

- docs/agents/issue-tracker.md: GitHub Issues + gh CLI 컨벤션
- docs/agents/triage-labels.md: canonical 5-role mapping
- docs/agents/domain.md: multi-context (monorepo) layout
- CLAUDE.md: ## Agent skills 블록 추가 (3개 docs로 라우팅)

decisions:
- Issue tracker: GitHub (decodedcorp/decoded)
- Triage labels: canonical defaults (기존 triage 라벨 없음)
- Domain docs: multi-context, .planning/codebase/* + docs/adr/ 기반

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(wiki): replace UNKNOWN_TAG values in harness-audit frontmatter

wiki-lint CI 실패 해결 — "audit", "docs"는 tag vocabulary
(docs/wiki/schema/tags.md)에 없는 태그. 의미가 가까운 "ops"와
audit이 위치한 폴더 기반 "superpowers"로 대체.

before: [harness, agent, audit, docs]
after:  [harness, agent, ops, superpowers]

Refs #558 #559

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(harness): audit #558 후속 정리 — gitignore + plans + command 등록 (#560)

* chore(gitignore): ignore per-package OMC artifacts, .next.bak, .scratch

audit #558 후속 F7. PR #559 작업 중 untracked 노이즈가 다수 — root .omc/
정책(state 폴더 ignore, project-memory.json만 tracked)을 package 레벨에도
일관되게 적용.

ignore:
- packages/*/.omc/ (per-package OMC state, project-memory)
- packages/*/.next.bak/ (Next.js 빌드 백업)
- .scratch/ (로컬 작업물 디렉토리)

검증: git status -s에서 packages/web/.omc/, packages/api-server/.omc/,
packages/web/.next.bak/, .scratch/ 모두 사라짐.

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(plans): add profile-tries-detail-modal + content-studio-pipeline-v2 plans

audit #558 후속. 5/7, 5/14 작성된 구현 plan 2개를 작업 이력으로 보존.
specs/...-design.md(origin/dev)가 설계 SOT, plans는 구현 task breakdown.

- 2026-05-07-profile-tries-detail-modal.md (1293 lines)
- 2026-05-14-content-studio-pipeline-v2.md (1892 lines)

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(commands): register /improve-codebase-architecture slash command

audit #558 후속. Matt Pocock의 improve-codebase-architecture 스킬을
/grill, /to-prd 등과 동일 패턴으로 .claude/commands/에 등록.

- 코드베이스 deepening opportunities 발견
- docs/agents/domain.md + docs/adr/ 기반 (PR #559 setup 결과 활용)
- subagent_type=Explore 사용
- \$ARGUMENTS로 대상 영역 지정 (예: packages/web/lib/supabase)

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(content-studio): unified pipeline v2 — LLM generation, post picker, thumbnails (#565)

* fix(content-studio): use crypto.randomUUID() for packet/variant IDs

Replace packet_{postId} format that caused 'invalid input syntax for
type uuid' errors. DB uniqueness is enforced by content_packets.post_id
unique constraint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(content-studio): remove research schemas, add unified content schema

Drop all Research/Firecrawl types (ResearchRun, ResearchSource, ResearchInsight,
etc.) and research-related fields from ContentPacket, ContentVariant,
generateVariantsRequestSchema, assetPlanRequestSchema, shortFormPlanRequestSchema.

Add unifiedContentResponseSchema for the new single-call LLM pipeline that
generates keywords + imagePrompts + channel variants together.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(content-studio): remove research module and all dependencies

Remove the entire research subsystem (Firecrawl client, domain policy,
normalization, query suggestions, recommendations, service) and clean
all references from governance checks, LLM generation, asset/short-form
pipelines, UI components, API routes, and tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(content-studio): add rule keyword extraction and unified LLM generation

Single OpenAI call now returns keywords, image prompts, and channel variants
together, replacing the previous multi-call pattern. Template fallback preserved
when LLM is unavailable or validation fails.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(content-studio): add channel thumbnail generation API

- schemas.ts — thumbnailChannelSchema + generateThumbnailsRequestSchema
- assets/service.ts — generateChannelThumbnails(): parallel image gen per channel (youtube/instagram_feed/instagram_story) with partial failure handling
- assets/thumbnails/route.ts — POST /api/v1/content/assets/thumbnails with admin auth
- assets/index.ts — export new service functions
- tests — 6 new tests (schema validation + generation + partial failures), 28 total passing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(content-studio): add PostPickerModal and post search API

Admin 전용 포스트 검색 API(GET /api/v1/content/posts/search)와
PostPickerModal 컴포넌트 추가. ILIKE 검색, cursor 기반 무한스크롤,
이미지 그리드 UI로 Content Studio에서 포스트를 시각적으로 선택 가능.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(content-studio): integrate PostPickerModal into page.tsx

Add Browse button next to Post ID input for visual post selection,
wiring PostPickerModal with open/close state and onSelect callback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(content-studio): add local API types and fix test type warnings

Replace @/lib/api/generated/models imports with local api-types.ts
to resolve missing module errors. Fix 'response possibly undefined'
warnings in post-picker tests and add missing PostDetailResponse
fields in test fixtures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(content-studio): align PostDetailResponse import to local api-types

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

* chore(harness): entry SSOT + ownership-matrix + folder unify (#561 PR-A) (#562)

* docs(harness): add docs/agent/skills.md as skills inventory canonical (#561)

* docs(plan): add #561 harness docs/wiki SSOT implementation plan

* docs(harness): expand AGENTS.md as canonical cross-tool entry (#561)

* docs(harness): shrink CLAUDE.md to Claude Code overlay (#561)

* docs(harness): align WARP.md as Warp overlay, defer common rules to AGENTS.md (#561)

* docs(harness): point .cursor/rules to AGENTS.md as common entry (#561)

* docs(harness): redirect AGENT.md to AGENTS.md (#561)

* docs(harness): promote ownership-matrix to routing SSOT, add 5 new rows (#561)

* docs(harness): merge docs/agents/ into docs/agent/setup/ (#561)

* docs(wiki): add `skills` tag to vocabulary for docs/agent/skills.md (#561)

`docs/agent/skills.md` introduced in this PR uses `tags: [agent, harness, skills]`
but `skills` was missing from the vocab, breaking wiki-lint.

Add `skills` to the domain category — slash command / skill 카탈로그 의미.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(modal): prevent maximize/close buttons from overlapping social actions (#528) (#566)

- Keep maximize/close buttons fixed at top-right on all breakpoints
- Convert SocialActions footer to floating pill bar matching full-page style

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

* chore(harness): recover #561 PR-B/PR-C commits that missed dev (#567)

* docs(adr): add monorepo index pointing to vault canonical (#561)

* docs(adr): convert ADR-0001/0002 to vault redirect stubs (#561)

* docs(adr): make ADR stubs wiki-lint compliant (#561)

ADR redirect stubs were failing wiki-lint due to:
- MISSING_FIELD owner/tags
- INVALID_STATUS "superseded-by-vault" (not in vocab)
- H1_TITLE_MISMATCH
- UNKNOWN_TAG "adr" in docs/adr/index.md

Normalize frontmatter to the existing vocab:
- status: deprecated for redirect stubs (vault is canonical)
- tags: [harness, agent]
- align H1 with title; move "(redirect to vault)" into body callout

No semantic change — vault remains the canonical ADR source.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(archive): create docs/_archive/, move warehouse-schema (#561)

* docs(wiki): fix INDEX.md interface/impl drift, manual maintenance explicit (#561)

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(harness): expand vault-dispatch to issues/comments/reviews/release (#569)

* feat(harness): expand vault-dispatch to issues/comments/reviews/release (#540)

Adds 4 new event types to the changelog dispatch:
- issues (opened/closed/reopened/labeled/assigned)
- issue_comment (created)
- pull_request_review (submitted)
- release (published)

projects_v2_item is deferred — needs org-level webhook config and
additional PAT scope (projects: read).

Closes #540

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* chore(ci): bump actions/checkout v4 → v6 (Node.js 24 support)

GitHub Actions runner removes Node.js 20 on 2026-09-16.
v6 explicitly supports Node.js 24.

Affected: backend-release, db-drift-check, api-server-invariants,
wiki-lint, daily-digest, health-check, deploy-backend.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>

* chore(harness): #561 follow-up — archive misc docs + qa-screenshots quarterly + conventions lint cleanup (#570)

#561 잔여 follow-up 3건을 하나의 PR로:

1. qa-screenshots 분기별 archive 정책
   - docs/qa-screenshots/{40 PNG, DIFFERENCES.md, README.md} → docs/_archive/qa-screenshots-2026-Q1/
   - docs/qa-screenshots/는 visual-qa.spec.ts 출력 경로로 유지 (새 placeholder README)
   - docs/_archive/README.md에 분기 정책 명시 (QN cutoff, 디렉토리 명명)

2. 미분류 docs 3건 archive (이전 grill-docs 재결정)
   - post-centric-refactoring-summary.md → _archive/ (2025-12-18 완료 회고 snapshot)
   - home-sections-backend-feasibility.md → _archive/ (MVP feasibility, home 리뉴얼로 superseded)
   - backend-frontend-status.md → _archive/ (2026-02-08 상태 snapshot)
   - 각 파일에 frontmatter status: archived + archive 사유 callout 추가
   - docs/superpowers/plans/2026-05-15-docs-migration-step2-mapping.md에 재결정 노트

3. docs/wiki/schema/conventions.md TOO_MANY_RELATED warning 해소 (6→4)
   - 제거: .cursor/rules/{api-routes,react-components,rust-api}.mdc (파일별 패턴)
   - 추가: AGENTS.md (canonical entry)
   - 최종: ownership-matrix.md, AGENTS.md, CLAUDE.md, .cursor/rules/monorepo.mdc

Verification:
- bun run wiki:lint → 0 errors, 0 warnings (이전: 1 warning)
- archived 파일 참조는 historical plan(2026-05-15 mapping, 2026-05-21 #561 plan)만 잔존, OK

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(design-system): map magazine palette to colors tokens (#573)

Adds magPrimary/magAccent/magBg/magText to the colors object so TS
consumers can reach the editorial palette without raw CSS vars.

The --mag-* CSS vars already exist in globals.css; this only closes
the TS-side SSOT drift.

Refs #311

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>

* feat(web): add GA4 integration for Rakuten affiliate traffic (#568) (#574)

Load Google Analytics when NEXT_PUBLIC_GA_MEASUREMENT_ID is set so production
traffic can be reported for affiliate program approval.

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore(ops): mount Instaloader session volume for prod ai-server (#575) (#576)

Persist Instagram Instaloader sessions across ai container restarts and
sync .env.backend.example with prod-required RAW_POSTS_R2_* / INSTAGRAM_* keys.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Kiyori <113906780+thxforall@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
CIOI added a commit that referenced this pull request May 25, 2026
)

* feat(data-pipeline): Instagram 엔티티 enrichment 파이프라인 추가 (#544)

* feat(data-pipeline): add Instagram entity enrichment

Adds a quota-aware Instagram account enrichment pipeline that keeps runtime state in assets while writing reviewed entity catalog data to operation.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(data-pipeline): retry stale entity enrichment steps

Co-authored-by: Cursor <cursoragent@cursor.com>

* style(data-pipeline): format enrichment admin routes

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(admin): improve group member management UI (#546)

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(web): add legal pages and minimal footer for Rakuten affiliate (#553)

Add About, Privacy Policy, Terms of Service, and Affiliate Disclosure pages with a streamlined footer so affiliate reviewers can reach policy content and contact email without dedicated contact routes.

Closes #552

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs: Step 1 (ADR+architecture stub) + Step 2 (미분류 문서 매핑) — refs #518 (#542)

* docs: ADR + architecture → vault stub 전환 (refs #518)

본문이 decoded-docs vault Architecture/ 로 이미 마이그레이션(M2) 완료된 상태.
monorepo 원본은 vault redirect stub만 남김 — sync-policy.md 의 "MOVED" 룰
대로 vault 가 SoT, monorepo 원본은 stub.

변경 파일 (6):
- docs/adr/ADR-0001-ai-dev-boilerplate.md
- docs/adr/ADR-0002-llm-wiki-foundation.md
- docs/architecture/README.md
- docs/architecture/assets-project.md
- docs/architecture/data-pipeline.md
- docs/architecture/state-management.md

각 파일은 vault GitHub 링크 + Obsidian path + sync-policy 참조만 보유.
검증: vault 본문은 monorepo 본문에 frontmatter(date/tags/source/migrated_on)
만 추가된 형태로 정보 손실 없음.

CLAUDE.md / docs/agent/ 의 architecture·adr 링크는 stub 을 거쳐 vault 로
redirect 되는 구조이므로 깨지지 않음. CLAUDE.md 직링크 교체는 Step 5(라우팅
업데이트)에서 처리.

* docs: Step 2 — 미분류 문서 매핑 (refs #518)

decoded-docs vault 마이그레이션 Step 2 산출물. docs/ + .planning/codebase/
전체 파일을 transition-design.md §분류 원칙(5가지 판단 기준)에 따라
🟢 MONOREPO / 🔵 VAULT / ⚪ STUB / 🟡 ARCHIVE 로 분류.

핵심 결정:
- wiki/ 전체 MONOREPO 유지 — tools/wiki/lib/config.ts 의 INDEX_PATH +
  INGEST_TOPICS 하드코딩, CLAUDE.md SSOT import 의존성 (spec과 충돌,
  Step 5 PR에서 spec 정정 예정)
- .planning/codebase/ STUB 패턴 — CLAUDE.md L19/L25/L87-93 8건 직접
  링크. Step 1 (ADR/architecture) 와 동일 패턴 적용
- qa-screenshots/ MONOREPO — visual-qa.spec.ts:41 테스트 출력 경로

집계: 🟢 65% / 🔵 28% / ⚪ 11% / 🟡 2%, 🔴 REVIEW 0건 (전부 확정).

다음: 팀 리뷰 → Step 3 (vault 복사 + stub 생성)

* docs: Step 2 매핑 재점검 — Q3 B + Q4 E 반영 (refs #518)

grill-docs 재점검 (2026-05-21, Q1~Q5) 결과 Step 2 매핑 정정:

- Section A: post-centric, home-sections-feasibility → 🟢 MONOREPO 정정
- Section I: plans/specs/briefs 전체 🟢 MONOREPO 잔류 (Q4 E, 5-criteria 4/5 monorepo)
- Section K: research/incidents/handoffs 전체 🟢 MONOREPO 잔류
- Section N: `.planning/codebase/*` STUB 패턴 폐기 → 🟢 MONOREPO 잔류 (Q3 B)
  · 갱신 책임 모호 + outdated 스냅샷이 vault "팀 지식"으로 위장하는 비용 회피
  · CLAUDE.md L19/L25/L87-L93 직접 링크 변경 없음

집계 재계산:
- 🟢 MONOREPO ~145 / ⚪ STUB 6 (Step 1) / 🔵 VAULT 9 / 🟡 ARCHIVE 2
- vault 이동 대상이 종전 ~35건 → 9건으로 축소

Step 3 scope:
- A (이 commit): Step 2 매핑 정정. monorepo 변경 0건.
- B (다음): vault `decoded-docs`에 9개 파일 복사 + frontmatter, 별도 PR.

`Archive/` 신설안(Q2 C)은 Q4 E 채택으로 자연 폐기.

* fix(docs): vault stub frontmatter 추가 — wiki-lint 통과 (refs #518)

Step 1 (PR #542 first commit `64a5a76`) 에서 ADR + architecture 본문을 vault
redirect stub으로 전환할 때 frontmatter도 함께 제거되어 wiki-lint MISSING_FRONTMATTER
실패. 6개 stub에 minimal frontmatter 추가:

- docs/adr/ADR-0001-ai-dev-boilerplate.md
- docs/adr/ADR-0002-llm-wiki-foundation.md
- docs/architecture/README.md
- docs/architecture/assets-project.md
- docs/architecture/data-pipeline.md
- docs/architecture/state-management.md

각 stub: owner=llm, status=deprecated (Step 5에서 삭제 예정),
tags 에 [obsidian, deprecated] 포함하여 wiki-lint 허용 어휘 준수.

ADR 의 title 콜론은 YAML parse 위해 큰따옴표 인용.

* fix(vton): handle Vertex AI RAI filter error (#535)

* docs: add content-studio pipeline v2 design spec (#530)

Post picker modal, UUID packet ID fix, unified LLM call,
channel thumbnails, and Research/Firecrawl removal.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(vton): handle Vertex AI RAI filter with user-friendly error

Vertex AI returns raiFilteredReason instead of image data when safety
filter triggers. Log full response in dev and surface actionable message.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: add content studio spec frontmatter

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

* ci(github): dispatch git events to decoded-docs vault (#556)

Trigger decoded-docs repository_dispatch (git-event) when a PR is merged
into main/dev, a release is published, or via manual workflow_dispatch.
Pairs with the vault-sync workflow in decoded-docs to record changelog
entries automatically.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* ci(github): sync issue and project status automation (#555)

* docs: add content-studio pipeline v2 design spec (#530)

Post picker modal, UUID packet ID fix, unified LLM call,
channel thumbnails, and Research/Firecrawl removal.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* ci(github): close linked issues on dev merge

* ci(github): sync issue and project status automation

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

* revert: ci: dispatch git events to decoded-docs vault (#557)

Reverts PR #556. An external dispatch source (likely decoded-app or a
GitHub App) is already populating decoded-docs vault Changelog with a
richer set of events (pr-opened, pr-merged, push, deploy-success). The
new workflow added in PR #556 was duplicating dispatches and causing
vault-sync concurrency cancellations.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(spec): mark telegram-bot-vault-integration as deprecated/superseded (#554)

원안(5/14) Phase 1+2가 decoded-agent의 manager agent + conversation digest
agent로 흡수·발전되어 본 spec은 역사적 참조용으로 전환.

- frontmatter status: draft → deprecated
- superseded_by, superseded_date 필드 추가
- 본문 최상단에 redirect 안내 + 신규 위치(decoded-agent#61, vault history note) 링크
- H1 title (SUPERSEDED) 마커
- tags: superseded → deprecated (wiki-lint 허용 어휘)

Refs:
- closes/supersedes monorepo #516, #517 (both closed as not-planned/superseded)
- decoded-agent epic: #61 (conversation digest)
- vault history: decoded-docs Project/integrations/telegram-vault-bot.md

* docs(harness): docs/agent + skills/commands 정합성 점검 (audit #558) (#559)

* docs(harness): add 2026-05-21 docs/agent + skills/commands audit report

HIGH/MEDIUM/LOW findings for .agents/skills/* (9 new), .claude/commands/*
(6 new), and docs/agent ↔ decoded-docs vault routing. Confirms
vault-dispatch.yml is intended state (#557 reverted a separate duplicate
workflow). Companion master issue will track follow-up actions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(skills): add excalidraw-generator and meeting-prep skills

audit (2026-05-21)에서 즉시 커밋 가능 판정된 2개 스킬.
- excalidraw-generator: 다이어그램 JSON 생성
- meeting-prep: 주간 업데이트 요약, 실 사용 검증된 동적 조회 사용

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(skills): add 7 generator skills with F1/F2/F3 fixes applied

audit #558 즉시 체크리스트 적용:
- F1: model: Codex-sonnet-4-20250514 비표준 ID 줄 제거
- F2: specs/shared/ → specs/_shared/ (실제 경로 정정)
- F2: git-workflow .Codex/agents/ → ~/.claude/agents/ 정정
- F3: data-model-generator lib/types/ → packages/shared/types/ prefix 추가
- F3: component-template-generator @/lib/types → @decoded/shared/types 정정

신규 스킬:
- api-contract-generator, component-template-generator
- data-model-generator, git-workflow
- pencil-screen-ui, screen-spec-generator
- supabase-migration-generator

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(commands): add Matt Pocock slash commands with F4 path fix

audit #558 F4 적용:
- /Users/kiyeol/.agents/ → ~/.agents/ (타 머신 호환)
- gstack.md 컨벤션과 일치

신규 commands:
- /grill, /grill-docs (plan/design 인터뷰)
- /to-prd, /to-issues (PRD/이슈 분해)
- /zoom-out (맥락 확장)
- /setup-matt-skills (1회성 setup)

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(agent): add decoded-docs vault routing note to README

audit #558 F6 적용. docs/agent/README.md가 CLAUDE.md의 vault 라우팅
컨벤션과 drift 상태였음 — vault 위치와 sync-policy 링크를 intro 직후에
추가하여 에이전트가 회의/결정/기획 질의를 vault로 라우팅하도록 명시.

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(claude): register 9 new skills + 6 Matt Pocock commands in skill routing

audit #558 routing 표 등록. 신규 9개 spec/generator 스킬과 6개 Matt Pocock
slash command를 CLAUDE.md Skill routing 섹션에 트리거 키워드와 함께 등록하여
에이전트가 자동으로 라우팅하도록 함.

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(agents): add Matt Pocock skills setup (F5)

audit #558 F5 적용. /to-prd, /to-issues, /grill 등 Matt Pocock skills가
요구하는 1회성 setup 완료:

- docs/agents/issue-tracker.md: GitHub Issues + gh CLI 컨벤션
- docs/agents/triage-labels.md: canonical 5-role mapping
- docs/agents/domain.md: multi-context (monorepo) layout
- CLAUDE.md: ## Agent skills 블록 추가 (3개 docs로 라우팅)

decisions:
- Issue tracker: GitHub (decodedcorp/decoded)
- Triage labels: canonical defaults (기존 triage 라벨 없음)
- Domain docs: multi-context, .planning/codebase/* + docs/adr/ 기반

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(wiki): replace UNKNOWN_TAG values in harness-audit frontmatter

wiki-lint CI 실패 해결 — "audit", "docs"는 tag vocabulary
(docs/wiki/schema/tags.md)에 없는 태그. 의미가 가까운 "ops"와
audit이 위치한 폴더 기반 "superpowers"로 대체.

before: [harness, agent, audit, docs]
after:  [harness, agent, ops, superpowers]

Refs #558 #559

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(harness): audit #558 후속 정리 — gitignore + plans + command 등록 (#560)

* chore(gitignore): ignore per-package OMC artifacts, .next.bak, .scratch

audit #558 후속 F7. PR #559 작업 중 untracked 노이즈가 다수 — root .omc/
정책(state 폴더 ignore, project-memory.json만 tracked)을 package 레벨에도
일관되게 적용.

ignore:
- packages/*/.omc/ (per-package OMC state, project-memory)
- packages/*/.next.bak/ (Next.js 빌드 백업)
- .scratch/ (로컬 작업물 디렉토리)

검증: git status -s에서 packages/web/.omc/, packages/api-server/.omc/,
packages/web/.next.bak/, .scratch/ 모두 사라짐.

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(plans): add profile-tries-detail-modal + content-studio-pipeline-v2 plans

audit #558 후속. 5/7, 5/14 작성된 구현 plan 2개를 작업 이력으로 보존.
specs/...-design.md(origin/dev)가 설계 SOT, plans는 구현 task breakdown.

- 2026-05-07-profile-tries-detail-modal.md (1293 lines)
- 2026-05-14-content-studio-pipeline-v2.md (1892 lines)

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(commands): register /improve-codebase-architecture slash command

audit #558 후속. Matt Pocock의 improve-codebase-architecture 스킬을
/grill, /to-prd 등과 동일 패턴으로 .claude/commands/에 등록.

- 코드베이스 deepening opportunities 발견
- docs/agents/domain.md + docs/adr/ 기반 (PR #559 setup 결과 활용)
- subagent_type=Explore 사용
- \$ARGUMENTS로 대상 영역 지정 (예: packages/web/lib/supabase)

Refs #558

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(content-studio): unified pipeline v2 — LLM generation, post picker, thumbnails (#565)

* fix(content-studio): use crypto.randomUUID() for packet/variant IDs

Replace packet_{postId} format that caused 'invalid input syntax for
type uuid' errors. DB uniqueness is enforced by content_packets.post_id
unique constraint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(content-studio): remove research schemas, add unified content schema

Drop all Research/Firecrawl types (ResearchRun, ResearchSource, ResearchInsight,
etc.) and research-related fields from ContentPacket, ContentVariant,
generateVariantsRequestSchema, assetPlanRequestSchema, shortFormPlanRequestSchema.

Add unifiedContentResponseSchema for the new single-call LLM pipeline that
generates keywords + imagePrompts + channel variants together.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(content-studio): remove research module and all dependencies

Remove the entire research subsystem (Firecrawl client, domain policy,
normalization, query suggestions, recommendations, service) and clean
all references from governance checks, LLM generation, asset/short-form
pipelines, UI components, API routes, and tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(content-studio): add rule keyword extraction and unified LLM generation

Single OpenAI call now returns keywords, image prompts, and channel variants
together, replacing the previous multi-call pattern. Template fallback preserved
when LLM is unavailable or validation fails.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(content-studio): add channel thumbnail generation API

- schemas.ts — thumbnailChannelSchema + generateThumbnailsRequestSchema
- assets/service.ts — generateChannelThumbnails(): parallel image gen per channel (youtube/instagram_feed/instagram_story) with partial failure handling
- assets/thumbnails/route.ts — POST /api/v1/content/assets/thumbnails with admin auth
- assets/index.ts — export new service functions
- tests — 6 new tests (schema validation + generation + partial failures), 28 total passing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(content-studio): add PostPickerModal and post search API

Admin 전용 포스트 검색 API(GET /api/v1/content/posts/search)와
PostPickerModal 컴포넌트 추가. ILIKE 검색, cursor 기반 무한스크롤,
이미지 그리드 UI로 Content Studio에서 포스트를 시각적으로 선택 가능.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(content-studio): integrate PostPickerModal into page.tsx

Add Browse button next to Post ID input for visual post selection,
wiring PostPickerModal with open/close state and onSelect callback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(content-studio): add local API types and fix test type warnings

Replace @/lib/api/generated/models imports with local api-types.ts
to resolve missing module errors. Fix 'response possibly undefined'
warnings in post-picker tests and add missing PostDetailResponse
fields in test fixtures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(content-studio): align PostDetailResponse import to local api-types

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

* chore(harness): entry SSOT + ownership-matrix + folder unify (#561 PR-A) (#562)

* docs(harness): add docs/agent/skills.md as skills inventory canonical (#561)

* docs(plan): add #561 harness docs/wiki SSOT implementation plan

* docs(harness): expand AGENTS.md as canonical cross-tool entry (#561)

* docs(harness): shrink CLAUDE.md to Claude Code overlay (#561)

* docs(harness): align WARP.md as Warp overlay, defer common rules to AGENTS.md (#561)

* docs(harness): point .cursor/rules to AGENTS.md as common entry (#561)

* docs(harness): redirect AGENT.md to AGENTS.md (#561)

* docs(harness): promote ownership-matrix to routing SSOT, add 5 new rows (#561)

* docs(harness): merge docs/agents/ into docs/agent/setup/ (#561)

* docs(wiki): add `skills` tag to vocabulary for docs/agent/skills.md (#561)

`docs/agent/skills.md` introduced in this PR uses `tags: [agent, harness, skills]`
but `skills` was missing from the vocab, breaking wiki-lint.

Add `skills` to the domain category — slash command / skill 카탈로그 의미.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(modal): prevent maximize/close buttons from overlapping social actions (#528) (#566)

- Keep maximize/close buttons fixed at top-right on all breakpoints
- Convert SocialActions footer to floating pill bar matching full-page style

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

* chore(harness): recover #561 PR-B/PR-C commits that missed dev (#567)

* docs(adr): add monorepo index pointing to vault canonical (#561)

* docs(adr): convert ADR-0001/0002 to vault redirect stubs (#561)

* docs(adr): make ADR stubs wiki-lint compliant (#561)

ADR redirect stubs were failing wiki-lint due to:
- MISSING_FIELD owner/tags
- INVALID_STATUS "superseded-by-vault" (not in vocab)
- H1_TITLE_MISMATCH
- UNKNOWN_TAG "adr" in docs/adr/index.md

Normalize frontmatter to the existing vocab:
- status: deprecated for redirect stubs (vault is canonical)
- tags: [harness, agent]
- align H1 with title; move "(redirect to vault)" into body callout

No semantic change — vault remains the canonical ADR source.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(archive): create docs/_archive/, move warehouse-schema (#561)

* docs(wiki): fix INDEX.md interface/impl drift, manual maintenance explicit (#561)

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(harness): expand vault-dispatch to issues/comments/reviews/release (#569)

* feat(harness): expand vault-dispatch to issues/comments/reviews/release (#540)

Adds 4 new event types to the changelog dispatch:
- issues (opened/closed/reopened/labeled/assigned)
- issue_comment (created)
- pull_request_review (submitted)
- release (published)

projects_v2_item is deferred — needs org-level webhook config and
additional PAT scope (projects: read).

Closes #540

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* chore(ci): bump actions/checkout v4 → v6 (Node.js 24 support)

GitHub Actions runner removes Node.js 20 on 2026-09-16.
v6 explicitly supports Node.js 24.

Affected: backend-release, db-drift-check, api-server-invariants,
wiki-lint, daily-digest, health-check, deploy-backend.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>

* chore(harness): #561 follow-up — archive misc docs + qa-screenshots quarterly + conventions lint cleanup (#570)

#561 잔여 follow-up 3건을 하나의 PR로:

1. qa-screenshots 분기별 archive 정책
   - docs/qa-screenshots/{40 PNG, DIFFERENCES.md, README.md} → docs/_archive/qa-screenshots-2026-Q1/
   - docs/qa-screenshots/는 visual-qa.spec.ts 출력 경로로 유지 (새 placeholder README)
   - docs/_archive/README.md에 분기 정책 명시 (QN cutoff, 디렉토리 명명)

2. 미분류 docs 3건 archive (이전 grill-docs 재결정)
   - post-centric-refactoring-summary.md → _archive/ (2025-12-18 완료 회고 snapshot)
   - home-sections-backend-feasibility.md → _archive/ (MVP feasibility, home 리뉴얼로 superseded)
   - backend-frontend-status.md → _archive/ (2026-02-08 상태 snapshot)
   - 각 파일에 frontmatter status: archived + archive 사유 callout 추가
   - docs/superpowers/plans/2026-05-15-docs-migration-step2-mapping.md에 재결정 노트

3. docs/wiki/schema/conventions.md TOO_MANY_RELATED warning 해소 (6→4)
   - 제거: .cursor/rules/{api-routes,react-components,rust-api}.mdc (파일별 패턴)
   - 추가: AGENTS.md (canonical entry)
   - 최종: ownership-matrix.md, AGENTS.md, CLAUDE.md, .cursor/rules/monorepo.mdc

Verification:
- bun run wiki:lint → 0 errors, 0 warnings (이전: 1 warning)
- archived 파일 참조는 historical plan(2026-05-15 mapping, 2026-05-21 #561 plan)만 잔존, OK

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(design-system): map magazine palette to colors tokens (#573)

Adds magPrimary/magAccent/magBg/magText to the colors object so TS
consumers can reach the editorial palette without raw CSS vars.

The --mag-* CSS vars already exist in globals.css; this only closes
the TS-side SSOT drift.

Refs #311

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>

* feat(web): add GA4 integration for Rakuten affiliate traffic (#568) (#574)

Load Google Analytics when NEXT_PUBLIC_GA_MEASUREMENT_ID is set so production
traffic can be reported for affiliate program approval.

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore(ops): mount Instaloader session volume for prod ai-server (#575) (#576)

Persist Instagram Instaloader sessions across ai container restarts and
sync .env.backend.example with prod-required RAW_POSTS_R2_* / INSTAGRAM_* keys.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(admin): serve instagram enrichment list via api-server (#578) (#583)

* fix(admin): serve instagram enrichment list via api-server, not web service role

Fixes #578 — move operation DB reads to GET /api/v1/admin/entity-enrichment/instagram-accounts
so Vercel web never needs DATABASE_SERVICE_ROLE_KEY. Web BFF proxies with admin JWT only.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(database): note api-server admin reads and #580 program links

Part of #578 — enrichment RFC points to epic/issues; operating-model table
links program tracking on GitHub instead of a separate monorepo file.

Co-authored-by: Cursor <cursoragent@cursor.com>

* style(web): format instagram-accounts admin proxy route

Co-authored-by: Cursor <cursoragent@cursor.com>

* style(api-server): rustfmt entity_enrichment admin module

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(api-server): satisfy clippy on entity_enrichment SQL statements

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(api-server): unit tests for entity enrichment instagram-accounts admin API

Covers ILIKE escaping, summary pending counts, account row mapping, and DB errors.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Kiyori <113906780+thxforall@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bump:minor Backward-compatible additions

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant