Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
72ea22e
chore: warm up CI checks
Sep 22, 2025
375d977
ci: install ripgrep; secrets_scan.sh fallback to grep\n\n- Add apt-ge…
Sep 22, 2025
9a2f16a
ci(docs): fix ajv validation temp file to .json\n\n- Use mktemp with …
Sep 22, 2025
82e5725
ci(gitleaks): pass GITHUB_TOKEN and use args instead of unsupported i…
Sep 22, 2025
92ef3a2
ci(gitleaks): checkout with fetch-depth 0 to fix unknown revision in …
Sep 22, 2025
0814800
ci: add auto-merge helper + workflow to auto-enable PR auto-merge\n\n…
Sep 22, 2025
47f6fbd
ci: refine branch protection API payload (json body)\n\nTimestamps: 2…
Sep 22, 2025
eaacd51
R9: 문서↔코드 상호 참조 강제 및 검증 스크립트 강화
Sep 22, 2025
5dfd2d0
CI: docs-validate에 cross-ref(R9) 검사 추가\n\nTimestamp: 2025-09-22 14:12…
Sep 22, 2025
b92c2b0
pre-commit: 비밀 파일(.env/키) 스테이징 차단 가드 추가\ntemplates: 문서/코드 템플릿 추가(doc-…
Sep 22, 2025
4be5eb9
R9 완료 처리: 체크리스트 체크 및 완료시각 기록\n\nTimestamp: 2025-09-22 14:19 UTC / 202…
Sep 22, 2025
6a17afc
R10: 마이그레이션 거버넌스 도입(CHANGELOG/README/템플릿/검증 스크립트/CI 연동)\n\nTimestamp:…
Sep 22, 2025
3f025b0
정책 반영: 실행 승인 후 안전한 권장 작업 자동 수행(AGENTS.md) + 세션 auto_followups=true 설정…
Sep 22, 2025
28145a7
R10 완료 마킹 및 R11 실행: 릴리즈/롤백 런북 추가, 상호참조 정합화, 검증 통과\n\nTimestamp: 2025-…
Sep 22, 2025
fe2542d
P1,P2,P3 완비: 코드헤더/사이드카 검증, 프리커밋/CI 연동, 백필 스크립트, 상호참조 보정 및 전역 검증 통과\n\…
Sep 22, 2025
d0cfa08
improvement-rounds: P1~P3 섹션 복원 및 updated 동기화, 전역 검증 통과\n\nTimestamp:…
Sep 22, 2025
1003372
다음 단계 문서 준비: m1-kickoff 계획 추가 및 참조 정합화\n\nTimestamp: 2025-09-22 15:06…
Sep 22, 2025
3f3365a
chore: setup monorepo tooling (2025-09-22 15:29 UTC / 2025-09-23 00:2…
Sep 22, 2025
ab5a186
ci: add build pipeline workflow (2025-09-22 15:38 UTC / 2025-09-23 00…
Sep 22, 2025
5b3ab76
docs: delegate all GitHub ops to agent (2025-09-22 15:55 UTC / 2025-0…
Sep 22, 2025
9d70a58
ci: enforce build pipeline checks (2025-09-22 16:03 UTC / 2025-09-23 …
Sep 22, 2025
4db8c4d
chore: phase0 frontmatter upgrade prep (2025-09-22 16:43 UTC / 2025-0…
Sep 22, 2025
e8d7eab
docs: record frontmatter upgrade phase0 completion (2025-09-22 16:50 …
Sep 22, 2025
74b7089
chore: complete frontmatter guard phase1
Sep 22, 2025
fd9603e
chore: tidy gh enable script header
Sep 22, 2025
6c07f92
chore: automate frontmatter timestamp updates
Sep 22, 2025
4cb3d55
chore: align docs-validate workflow with pnpm
Sep 22, 2025
d58263a
chore: whitelist known code_ref paths
Sep 22, 2025
5cb25cc
feat: enforce checkpoint metadata validation
Sep 22, 2025
6c563fc
feat: add sample data and template docs
Sep 22, 2025
3b1fe38
feat: scaffold admin web app with sample routes
Sep 22, 2025
0f28255
feat: add admin api skeleton
Sep 22, 2025
0a3dd5d
docs: record sprint 4 api progress
Sep 22, 2025
e32d17c
chore: polish ci and docs for api sprint
Sep 23, 2025
7a770da
docs: log sprint 5 completion
Sep 23, 2025
e7cffe0
feat: enhance admin document search
Sep 23, 2025
dd46c95
feat: extend document API and smoke tests
Sep 23, 2025
5bf692b
feat: wire up sentry and otel observability
Sep 23, 2025
3c2ce70
fix: satisfy lint for otel startup
Sep 23, 2025
13352b6
feat: sprint9 timeline graph groundwork
Sep 23, 2025
d41958a
fix: normalize mermaid gantt tasks
Sep 23, 2025
30c1316
fix: remove mermaid inline comments
Sep 23, 2025
278bb0a
fix: fallback to default mermaid gantt styles
Sep 23, 2025
18e16c4
feat: add zoom controls to mermaid timeline
Sep 23, 2025
62689f9
fix: restore gantt width and zoom behavior
Sep 23, 2025
8c38e6e
fix: satisfy eslint rule in global-error
Sep 23, 2025
ab44430
fix(web): ESLint 경고 제거 — Mermaid deps/unused param\n\n- MermaidTimeli…
Sep 23, 2025
7701151
ci: fix pnpm setup order and version\n\n- docs-validate: setup pnpm (…
Sep 23, 2025
8cde00a
ci(docs): exclude *.meta.yaml from hub schema validation\n\n- docs-va…
Sep 23, 2025
c970662
fix(ci): web build + docs validate\n\n- add missing dependency: react…
Sep 23, 2025
c4db012
docs(refs): add reciprocal doc_ref in RootLayout for m1-kickoff plan\…
Sep 23, 2025
b590331
ci: stabilize docs-validate and build:web\n\n- docs-validate: checkou…
Sep 23, 2025
705fb9b
chore: stabilize document build command
Sep 24, 2025
4195ad0
fix: run web build via pnpm in CI
Sep 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
root = true

[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true

[*.md]
trim_trailing_whitespace = false
23 changes: 22 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# file: .env.example
# owner: duksan
# created: 2025-09-22 11:15 UTC / 2025-09-22 20:15 KST
# updated: 2025-09-22 11:15 UTC / 2025-09-22 20:15 KST
# updated: 2025-09-23 06:33 UTC / 2025-09-23 15:33 KST
# description: 샘플 환경 변수 파일(민감값은 비워두고 문서화 목적)
# doc_refs: ["SECURITY.md", "THREAT_MODEL.md", "admin/plan/improvement-rounds.md"]

Expand All @@ -25,3 +25,24 @@ STORAGE_BUCKET=gg-real
STORAGE_ACCESS_KEY=your-access-key
STORAGE_SECRET_KEY=your-secret-key

# Observability / Monitoring
ENABLE_SENTRY=false
SENTRY_DSN=
SENTRY_ENVIRONMENT=development
SENTRY_TRACES_SAMPLE_RATE=0.1
SENTRY_PROFILES_SAMPLE_RATE=0.1
ENABLE_OTEL=false
OTEL_SERVICE_NAME=gg-real-api
OTEL_EXPORTER_OTLP_ENDPOINT=
OTEL_EXPORTER_OTLP_HEADERS=Authorization=Bearer YOUR_TOKEN

# Frontend Sentry
NEXT_PUBLIC_ENABLE_SENTRY=false
NEXT_PUBLIC_SENTRY_DSN=
NEXT_PUBLIC_SENTRY_ENVIRONMENT=development
NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE=0.1
NEXT_PUBLIC_SENTRY_PROFILES_SAMPLE_RATE=0.1

# Optional Sentry project metadata
SENTRY_ORG=
SENTRY_PROJECT=
40 changes: 39 additions & 1 deletion .githooks/pre-commit
Original file line number Diff line number Diff line change
@@ -1,10 +1,48 @@
#!/usr/bin/env bash
# Git pre-commit hook: 문서 변경 포함 시 자동 체크포인트 생성 후 스테이징
# Git pre-commit hook: 민감 파일 가드 + 문서 updated 자동 스탬프 + 문서 변경 시 체크포인트
set -euo pipefail

# 현재 스테이징된 파일 목록
staged=$(git diff --cached --name-only --diff-filter=ACMR || true)

# [Guard] 비밀/민감 파일 스테이징 차단(.env/키/자격증명 등)
if [[ -n "$staged" ]]; then
# 차단 패턴 목록(확장 가능)
deny_patterns=(
'^\.env(\..*)?$' # .env, .env.*
'(^|/)\.env(\..*)?$' # any path/.env*
'\.pem$' # private keys
'\b(id_rsa|id_ecdsa|id_ed25519)(\.pub)?$'
'\.p8$' # Apple keys
'\bservice-account.*\.json$'
)
for f in $staged; do
for pat in "${deny_patterns[@]}"; do
if [[ $f =~ $pat ]]; then
echo "[pre-commit][BLOCK] 민감 파일 스테이징 감지: $f" >&2
echo "[pre-commit] 해당 파일은 .gitignore에 추가하고 커밋에서 제외하세요." >&2
exit 1
fi
done
done
fi

# 문서 updated: 자동 스탬프(UTC/KST)
if [ -n "$staged" ]; then
if [ -x scripts/update_frontmatter_time.sh ]; then
bash scripts/update_frontmatter_time.sh >/dev/null 2>&1 || true
fi
fi

# 핵심 검사: 문서/참조/마이그/코드헤더/사이드카
if [ -n "$staged" ]; then
bash scripts/validate_docs.sh
bash scripts/validate_refs.sh
bash scripts/validate_migrations.sh
bash scripts/validate_code_headers.sh
bash scripts/validate_sidecar_meta.sh
fi

# 문서 변경이 있는지 검사(.md 또는 admin/docs 디렉토리 등)
if echo "$staged" | grep -Eq '\.(md)$|^AGENTS\.md$|^admin/|^docs/'; then
# 체크포인트 생성하고 파일을 커밋에 포함
Expand Down
31 changes: 31 additions & 0 deletions .github/workflows/auto-enable-automerge.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Auto Enable PR Auto-Merge

on:
pull_request:
types: [opened, ready_for_review]

permissions:
pull-requests: write
contents: read

jobs:
enable-automerge:
if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
runs-on: ubuntu-latest
steps:
- name: Enable auto-merge (squash)
uses: actions/github-script@v7
with:
script: |
const pr = context.payload.pull_request
try {
const query = `mutation($pr:ID!, $method: PullRequestMergeMethod!) {
enablePullRequestAutoMerge(input:{pullRequestId:$pr, mergeMethod:$method}) {
clientMutationId
}
}`
await github.graphql(query, { pr: pr.node_id, method: 'SQUASH' })
core.info('Auto-merge enabled (SQUASH)')
} catch (e) {
core.warning('Auto-merge enable failed: ' + e.message)
}
54 changes: 54 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Build Pipeline

on:
push:
branches: [main]
pull_request:
branches: [main]

permissions:
contents: read

jobs:
quality:
name: ${{ matrix.task }}
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
task:
- lint:root
- lint:web
- lint:api
- typecheck
- build:web
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9.12.0

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'pnpm'

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Build documents (verbose)
if: ${{ matrix.task == 'build:web' }}
run: pnpm --filter @gg-real/documents run build

- name: Build web (verbose)
if: ${{ matrix.task == 'build:web' }}
run: pnpm --filter web run build

- name: Run task (default)
if: ${{ matrix.task != 'build:web' }}
run: pnpm run ${{ matrix.task }}
10 changes: 8 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

- name: Install ripgrep (rg)
run: sudo apt-get update && sudo apt-get install -y ripgrep

- name: Run secrets scan (strict)
run: |
chmod +x scripts/secrets_scan.sh || true
Expand All @@ -23,12 +26,15 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # gitleaks가 PR 범위를 계산할 수 있게 전체 히스토리 필요

- name: Run gitleaks
uses: zricethezav/gitleaks-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
config-path: .gitleaks.toml
fail: true
args: "--source . --no-banner"

summary:
runs-on: ubuntu-latest
Expand Down
50 changes: 36 additions & 14 deletions .github/workflows/docs-validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,43 +2,65 @@ name: Docs Validate

on:
push:
branches: [ main ]
branches: [main]
pull_request:
branches: [ main ]
branches: [main]

jobs:
docs-validate:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9.12.0
run_install: false

- name: Setup Node
- name: Setup Node 20
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Run precommit:meta (docs + refs)
run: pnpm -s precommit:meta

- name: Run docs validator (full suite)
run: pnpm run validate:docs

- name: Install markdownlint-cli
run: npm i -g markdownlint-cli@0.38.0
- name: Run cross-ref validator (R9)
run: pnpm run validate:refs

- name: Install ajv-cli and js-yaml
run: npm i -g ajv-cli@5.0.0 js-yaml@4.1.0
- name: Run migration governance validator (R10)
run: pnpm exec bash scripts/validate_migrations.sh

- name: Run markdownlint (MD029 ordered)
run: markdownlint -q -c .markdownlint.json "**/*.md"
- name: Run code header validator (P1)
run: pnpm exec bash scripts/validate_code_headers.sh

- name: Run local docs validator
run: bash scripts/validate_docs.sh
- name: Run sidecar meta validator (P3)
env:
ALLOW_SIDECAR_MISSING: 'true'
run: pnpm exec bash scripts/validate_sidecar_meta.sh

- name: Validate hub manifests against schema
if: ${{ always() }}
run: |
set -e
shopt -s nullglob
for f in admin/manifests/*.yaml; do
# Skip sidecar files like *.meta.yaml — they are validated separately
case "$f" in *.meta.yaml) continue ;; esac
echo "Validating $f"
tmp=$(mktemp)
js-yaml "$f" > "$tmp"
ajv validate -s admin/schemas/hub.schema.json -d "$tmp"
tmp="$(mktemp).json"
pnpm exec js-yaml "$f" > "$tmp"
pnpm exec ajv validate -s admin/schemas/hub.schema.json -d "$tmp"
rm -f "$tmp"
done
25 changes: 25 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Environment
.env

# Node.js
node_modules/
.pnpm-store/
.pnp.*

# Build outputs
.next/
dist/
build/
out/
coverage/
.turbo/

# Logs and caches
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
*.log
.DS_Store
.idea/
.vscode/
5 changes: 5 additions & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/usr/bin/env sh
set -e

pnpm -s precommit:meta
pnpm exec lint-staged
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
v20.16.0
8 changes: 8 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Auto-generated checkpoint snapshots
admin/checkpoints/**

# pnpm lockfile formatting은 pnpm이 담당
pnpm-lock.yaml

# Git hooks 템플릿 등 바이너리성 스크립트
.githooks/**
Loading
Loading