diff --git a/.agents/skills/idea-refine/scripts/idea-refine.sh b/.agents/skills/idea-refine/scripts/idea-refine.sh
index a53cb5a..03a296f 100644
--- a/.agents/skills/idea-refine/scripts/idea-refine.sh
+++ b/.agents/skills/idea-refine/scripts/idea-refine.sh
@@ -3,7 +3,7 @@ set -e
# This script helps initialize the ideas directory for the idea-refine skill.
-IDEAS_DIR="docs/ideas"
+IDEAS_DIR="ideas"
if [ ! -d "$IDEAS_DIR" ]; then
mkdir -p "$IDEAS_DIR"
diff --git a/.harness/hooks/graphify-auto-refresh.sh b/.harness/hooks/graphify-auto-refresh.sh
index 5dd9935..246d542 100755
--- a/.harness/hooks/graphify-auto-refresh.sh
+++ b/.harness/hooks/graphify-auto-refresh.sh
@@ -2,7 +2,13 @@
set -euo pipefail
-cd "$(git rev-parse --show-toplevel)"
+repo_root="$(git rev-parse --show-toplevel 2>/dev/null || true)"
+if [ -z "$repo_root" ]; then
+ script_dir="$(cd "$(dirname "$0")" && pwd)"
+ repo_root="$(cd "$script_dir/../.." && pwd)"
+fi
+
+cd "$repo_root"
mkdir -p .graphify-work
diff --git a/.harness/reference/README.md b/.harness/reference/README.md
index efec4a2..b481d5a 100644
--- a/.harness/reference/README.md
+++ b/.harness/reference/README.md
@@ -1,6 +1,6 @@
# Harness Reference
-이 디렉터리는 `addyosmani/agent-skills`에서 가져온 문서 스냅샷과
+이 디렉터리는 upstream skill pack에서 가져온 문서 스냅샷과
로컬 적응 규칙을 담는 하네스 내부 reference 레이어다.
## 포함 내용
@@ -17,7 +17,8 @@
- Source repository: `https://github.com/addyosmani/agent-skills`
- Imported on: `2026-04-08`
-활성 스킬 자체는 `.agents/skills/`에 있고, 체크리스트는 루트 `references/`에 있다.
+활성 스킬 자체는 `.agents/skills/`에 있고, 로컬 `agent-skills/` 미러 없이도 동작한다.
+체크리스트는 루트 `references/`에 있다.
command-style prompt 초안은 `command-drafts/`, persona markdown 스냅샷은
`agent-personas/`에 보관한다.
diff --git a/README.ko.md b/README.ko.md
index 656b5a3..feedf52 100644
--- a/README.ko.md
+++ b/README.ko.md
@@ -17,8 +17,8 @@
4-모듈 온라인 파이프라인(관심 스케치 → 시맨틱 검색 → 제로샷 리랭킹 → MSCP 신뢰도)을 26개 Food.com 시드 레시피 위에서 시각화하는 정적 HTML/JS 번들이다. `?lang=` URL 파라미터로 한국어/영어를 전환하며, 빌드 단계 없이 클라이언트에서 모두 실행된다.
-
-
+
+
@@ -26,16 +26,16 @@
다른 뷰 — 영문 버전과 모바일 반응형
-
+
-
+
-소스는 [`docs/demo/`](docs/demo/) 아래에 있다. 로컬 HTTP 서버로 `index.html`을 열거나(예: `python3 -m http.server --directory docs/demo`), 폴더를 GitHub Pages로 배포하면 공유 가능한 링크가 된다. 시뮬레이션 파이프라인 단위 테스트는 `docs/demo/tests/`에 있고 `node --test`로 실행한다.
+소스는 [`apps/demo/`](apps/demo/) 아래에 있다. 로컬 HTTP 서버로 `index.html`을 열거나(예: `python3 -m http.server --directory apps/demo`), 폴더를 GitHub Pages로 배포하면 공유 가능한 링크가 된다. 시뮬레이션 파이프라인 단위 테스트는 `apps/demo/tests/`에 있고 `node --test`로 실행한다.
## 목차
@@ -279,9 +279,10 @@ uv run mypy src
| `src/sid_reco/` | application package |
| `src/sid_reco/sid/` | Phase 1 SID serialization 및 embedding artifact helper |
| `tests/` | automated tests |
+| `apps/demo/` | 추천 파이프라인을 보여주는 정적 frontend demo |
| `data/` | local datasets and processed artifacts |
| `artifacts/` | generated reports, branding, and outputs |
-| `docs/` | source materials plus legacy wiki archive |
+| `docs/` | legacy docs-first knowledge archive |
| `graphify-out/` | primary committed knowledge graph artifacts |
| `.github/` | Copilot-facing instructions and agent personas |
| `.agents/skills/` | repo-local agent skills |
diff --git a/README.md b/README.md
index a4b19f5..c72b47a 100644
--- a/README.md
+++ b/README.md
@@ -17,8 +17,8 @@ Current Phase 1 progress also includes an in-repository `sid` package plus a pub
A static HTML/JS bundle visualizes the four-module online pipeline (Interest Sketch → Semantic Search → Zero-Shot Rerank → MSCP Confidence) on a 26-recipe Food.com seed. The bundle is bilingual via the `?lang=` URL parameter and runs entirely client-side, so no build step or server is required.
-
-
+
+
@@ -26,16 +26,16 @@ A static HTML/JS bundle visualizes the four-module online pipeline (Interest Ske
More views — Korean variant and mobile responsive
-
+
-
+
-Source lives under [`docs/demo/`](docs/demo/). Open `index.html` over any local HTTP server (for example `python3 -m http.server --directory docs/demo`), or publish the folder via GitHub Pages for shareable access. Unit tests for the simulated pipeline live in `docs/demo/tests/` and run with `node --test`.
+Source lives under [`apps/demo/`](apps/demo/). Open `index.html` over any local HTTP server (for example `python3 -m http.server --directory apps/demo`), or publish the folder via GitHub Pages for shareable access. Unit tests for the simulated pipeline live in `apps/demo/tests/` and run with `node --test`.
## Table of Contents
@@ -321,9 +321,10 @@ uv run sid-reco structure-taxonomy-batch --help
| `src/sid_reco/` | application package |
| `src/sid_reco/sid/` | Phase 1 SID serialization and embedding artifact helpers |
| `tests/` | automated tests |
+| `apps/demo/` | static frontend demo for the recommendation pipeline |
| `data/` | local datasets and processed artifacts |
| `artifacts/` | generated reports, branding, and outputs |
-| `docs/` | source materials plus legacy wiki archive |
+| `docs/` | legacy docs-first knowledge archive |
| `graphify-out/` | primary committed knowledge graph artifacts |
| `.github/` | Copilot-facing instructions and agent personas |
| `.agents/skills/` | repo-local agent skills |
diff --git a/docs/demo/bright.css b/apps/demo/bright.css
similarity index 100%
rename from docs/demo/bright.css
rename to apps/demo/bright.css
diff --git a/docs/demo/data/pipeline.js b/apps/demo/data/pipeline.js
similarity index 100%
rename from docs/demo/data/pipeline.js
rename to apps/demo/data/pipeline.js
diff --git a/docs/demo/data/recipes.js b/apps/demo/data/recipes.js
similarity index 100%
rename from docs/demo/data/recipes.js
rename to apps/demo/data/recipes.js
diff --git a/docs/demo/data/taxonomy.js b/apps/demo/data/taxonomy.js
similarity index 100%
rename from docs/demo/data/taxonomy.js
rename to apps/demo/data/taxonomy.js
diff --git a/docs/demo/index.html b/apps/demo/index.html
similarity index 100%
rename from docs/demo/index.html
rename to apps/demo/index.html
diff --git a/docs/demo/screenshots/desktop-en.png b/apps/demo/screenshots/desktop-en.png
similarity index 100%
rename from docs/demo/screenshots/desktop-en.png
rename to apps/demo/screenshots/desktop-en.png
diff --git a/docs/demo/screenshots/desktop-kr.png b/apps/demo/screenshots/desktop-kr.png
similarity index 100%
rename from docs/demo/screenshots/desktop-kr.png
rename to apps/demo/screenshots/desktop-kr.png
diff --git a/docs/demo/screenshots/mobile-en.png b/apps/demo/screenshots/mobile-en.png
similarity index 100%
rename from docs/demo/screenshots/mobile-en.png
rename to apps/demo/screenshots/mobile-en.png
diff --git a/docs/demo/src/app.jsx b/apps/demo/src/app.jsx
similarity index 100%
rename from docs/demo/src/app.jsx
rename to apps/demo/src/app.jsx
diff --git a/docs/demo/src/components.jsx b/apps/demo/src/components.jsx
similarity index 100%
rename from docs/demo/src/components.jsx
rename to apps/demo/src/components.jsx
diff --git a/docs/demo/src/i18n.js b/apps/demo/src/i18n.js
similarity index 100%
rename from docs/demo/src/i18n.js
rename to apps/demo/src/i18n.js
diff --git a/docs/demo/tests/_loader.cjs b/apps/demo/tests/_loader.cjs
similarity index 100%
rename from docs/demo/tests/_loader.cjs
rename to apps/demo/tests/_loader.cjs
diff --git a/docs/demo/tests/i18n.test.cjs b/apps/demo/tests/i18n.test.cjs
similarity index 100%
rename from docs/demo/tests/i18n.test.cjs
rename to apps/demo/tests/i18n.test.cjs
diff --git a/docs/demo/tests/pipeline.test.cjs b/apps/demo/tests/pipeline.test.cjs
similarity index 100%
rename from docs/demo/tests/pipeline.test.cjs
rename to apps/demo/tests/pipeline.test.cjs
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000..354f545
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,23 @@
+# docs
+
+이 디렉터리는 이제 기존 docs-first 지식 저장소의 legacy archive다.
+현재 정본 source corpus는 `raw/`이고, primary machine-readable knowledge layer는
+`graphify-out/`다. 라이브 정적 프론트엔드 데모는 `apps/demo/`로 이동했다.
+
+## 현재 정본 경로
+
+| 용도 | 현재 정본 |
+|---|---|
+| 설계/ADR/노트 source | `raw/design/` |
+| 외부 문서 source | `raw/external/` |
+| machine-readable graph | `graphify-out/` |
+| 데모 frontend | `apps/demo/` |
+
+## 운영 원칙
+
+- 새 설계 문서, ADR, 외부 참고 자료는 `docs/`가 아니라 `raw/` 아래에 추가한다.
+- 코드베이스/아키텍처 질의는 먼저 `graphify-out/GRAPH_REPORT.md`와 `graphify-out/graph.json`을 본다.
+- `docs/wiki/`와 `docs/sources/`는 legacy archive로만 유지한다.
+- 라이브 데모 UI 변경은 `apps/demo/`에서 작업한다.
+- 자세한 Graphify 운영 규칙은 `AGENTS.md`, `.github/copilot-instructions.md`,
+ `.harness/reference/local-adaptation.md`를 따른다.
diff --git a/graphify-out/BUILD_INFO.json b/graphify-out/BUILD_INFO.json
index e47c0f9..b53bd90 100644
--- a/graphify-out/BUILD_INFO.json
+++ b/graphify-out/BUILD_INFO.json
@@ -1,9 +1,9 @@
{
"graphify_version": "0.4.23",
"mode": "full_refresh",
- "command": "python3 scripts/graphify_full_refresh.py /Users/skiiwoo/.codex/worktrees/c911/Training-Free-SID-Reco/.graphify-work/corpus",
+ "command": "python3 scripts/graphify_full_refresh.py /Users/skiiwoo/PERSONAL/Training-Free-SID-Reco/.graphify-work/corpus",
"generated_at": "2026-04-20T09:06:08.466995+00:00",
- "corpus_path": "/Users/skiiwoo/.codex/worktrees/c911/Training-Free-SID-Reco/.graphify-work/corpus",
+ "corpus_path": "/Users/skiiwoo/PERSONAL/Training-Free-SID-Reco/.graphify-work/corpus",
"verified": true,
"semantic_backend": "heuristic",
"verification_profile": "raw-source-coverage-v3",
diff --git a/graphify-out/VERIFY_FULL_REFRESH.json b/graphify-out/VERIFY_FULL_REFRESH.json
new file mode 100644
index 0000000..30640fd
--- /dev/null
+++ b/graphify-out/VERIFY_FULL_REFRESH.json
@@ -0,0 +1,105 @@
+{
+ "verified": true,
+ "verified_at": "2026-04-21T04:48:04.188466+00:00",
+ "required_semantic_files": [
+ "raw/design/adr/adr-001-dev-environment.md",
+ "raw/design/adr/adr-002-foodcom-preprocessing-policy.md",
+ "raw/design/adr/adr-003-neighbor-context-retrieval.md",
+ "raw/design/adr/adr-004-taxonomy-dictionary-generation.md",
+ "raw/design/adr/adr-005-taxonomy-dictionary-hardening.md",
+ "raw/design/adr/adr-006-strict-tid-hardening.md",
+ "raw/design/notes/dev-environment.md",
+ "raw/design/notes/food-com-dataset.md",
+ "raw/design/notes/food-taxonomy-dictionary.md",
+ "raw/design/notes/neighbor-context-index.md",
+ "raw/design/notes/phase2-recommendation-runtime-validation.md",
+ "raw/design/notes/phase2-recommendation-runtime.md",
+ "raw/design/notes/sid-compilation-indexing.md",
+ "raw/design/notes/sid-phase1-validation-run.md",
+ "raw/design/notes/taxonomy-dictionary-development-issues.md",
+ "raw/design/notes/taxonomy-item-structuring.md"
+ ],
+ "presence_only_files": [],
+ "verification_profile": "raw-source-coverage-v3",
+ "verification_metrics": {
+ "semantic_link_count": 2283,
+ "relation_counts": {
+ "references": 1675,
+ "rationale_for": 471,
+ "semantically_related": 137
+ },
+ "coverage": {
+ "raw/design/adr/adr-001-dev-environment.md": [
+ "rationale_for",
+ "references",
+ "semantically_related"
+ ],
+ "raw/design/adr/adr-002-foodcom-preprocessing-policy.md": [
+ "rationale_for",
+ "references",
+ "semantically_related"
+ ],
+ "raw/design/adr/adr-003-neighbor-context-retrieval.md": [
+ "rationale_for",
+ "references",
+ "semantically_related"
+ ],
+ "raw/design/adr/adr-004-taxonomy-dictionary-generation.md": [
+ "rationale_for",
+ "references",
+ "semantically_related"
+ ],
+ "raw/design/adr/adr-005-taxonomy-dictionary-hardening.md": [
+ "rationale_for",
+ "references",
+ "semantically_related"
+ ],
+ "raw/design/adr/adr-006-strict-tid-hardening.md": [
+ "rationale_for",
+ "references",
+ "semantically_related"
+ ],
+ "raw/design/notes/dev-environment.md": [
+ "references",
+ "semantically_related"
+ ],
+ "raw/design/notes/food-com-dataset.md": [
+ "references",
+ "semantically_related"
+ ],
+ "raw/design/notes/food-taxonomy-dictionary.md": [
+ "references",
+ "semantically_related"
+ ],
+ "raw/design/notes/neighbor-context-index.md": [
+ "references",
+ "semantically_related"
+ ],
+ "raw/design/notes/phase2-recommendation-runtime-validation.md": [
+ "references",
+ "semantically_related"
+ ],
+ "raw/design/notes/phase2-recommendation-runtime.md": [
+ "references",
+ "semantically_related"
+ ],
+ "raw/design/notes/sid-compilation-indexing.md": [
+ "references",
+ "semantically_related"
+ ],
+ "raw/design/notes/sid-phase1-validation-run.md": [
+ "references",
+ "semantically_related"
+ ],
+ "raw/design/notes/taxonomy-dictionary-development-issues.md": [
+ "references",
+ "semantically_related"
+ ],
+ "raw/design/notes/taxonomy-item-structuring.md": [
+ "references",
+ "semantically_related"
+ ]
+ },
+ "missing_confidence": []
+ }
+}
diff --git a/ideas/README.md b/ideas/README.md
index 8553ece..512ee34 100644
--- a/ideas/README.md
+++ b/ideas/README.md
@@ -4,4 +4,4 @@
- 형식: 자유로운 Markdown
- 생성 시점: 사용자 확인 후에만 저장
-- 주의: 위키 지식 저장소와 다르므로 `docs/wiki/` 대신 여기 둔다
+- 주의: Graphify source corpus와 다르므로 `raw/design/` 대신 여기 둔다
diff --git a/scripts/graphify_ci_candidate.sh b/scripts/graphify_ci_candidate.sh
index f79d9cf..8b7067f 100755
--- a/scripts/graphify_ci_candidate.sh
+++ b/scripts/graphify_ci_candidate.sh
@@ -2,7 +2,13 @@
set -euo pipefail
-cd "$(git rev-parse --show-toplevel)"
+repo_root="$(git rev-parse --show-toplevel 2>/dev/null || true)"
+if [ -z "$repo_root" ]; then
+ script_dir="$(cd "$(dirname "$0")" && pwd)"
+ repo_root="$(cd "$script_dir/.." && pwd)"
+fi
+
+cd "$repo_root"
mkdir -p .graphify-work
diff --git a/scripts/graphify_code_refresh.sh b/scripts/graphify_code_refresh.sh
index f4d88f7..bc21afc 100755
--- a/scripts/graphify_code_refresh.sh
+++ b/scripts/graphify_code_refresh.sh
@@ -2,7 +2,13 @@
set -euo pipefail
-cd "$(git rev-parse --show-toplevel)"
+repo_root="$(git rev-parse --show-toplevel 2>/dev/null || true)"
+if [ -z "$repo_root" ]; then
+ script_dir="$(cd "$(dirname "$0")" && pwd)"
+ repo_root="$(cd "$script_dir/.." && pwd)"
+fi
+
+cd "$repo_root"
GRAPHIFY_VERSION="0.4.23"
GRAPHIFY_CMD=(uvx --from "graphifyy==$GRAPHIFY_VERSION" graphify)
diff --git a/scripts/graphify_prepare_corpus.sh b/scripts/graphify_prepare_corpus.sh
index defb9ca..b1093ed 100755
--- a/scripts/graphify_prepare_corpus.sh
+++ b/scripts/graphify_prepare_corpus.sh
@@ -2,7 +2,13 @@
set -euo pipefail
-cd "$(git rev-parse --show-toplevel)"
+repo_root="$(git rev-parse --show-toplevel 2>/dev/null || true)"
+if [ -z "$repo_root" ]; then
+ script_dir="$(cd "$(dirname "$0")" && pwd)"
+ repo_root="$(cd "$script_dir/.." && pwd)"
+fi
+
+cd "$repo_root"
CORPUS_ROOT=".graphify-work/corpus"
rm -rf "$CORPUS_ROOT"
diff --git a/scripts/graphify_sync_staged.sh b/scripts/graphify_sync_staged.sh
index 8ab5712..dd05d71 100755
--- a/scripts/graphify_sync_staged.sh
+++ b/scripts/graphify_sync_staged.sh
@@ -2,7 +2,13 @@
set -euo pipefail
-cd "$(git rev-parse --show-toplevel)"
+repo_root="$(git rev-parse --show-toplevel 2>/dev/null || true)"
+if [ -z "$repo_root" ]; then
+ script_dir="$(cd "$(dirname "$0")" && pwd)"
+ repo_root="$(cd "$script_dir/.." && pwd)"
+fi
+
+cd "$repo_root"
STAGED_DIR="${1:-.graphify-work/corpus/graphify-out}"
ROOT_GRAPH_DIR="graphify-out"
diff --git a/tests/test_graphify_harness.py b/tests/test_graphify_harness.py
index 743fa87..e1e49f9 100644
--- a/tests/test_graphify_harness.py
+++ b/tests/test_graphify_harness.py
@@ -227,6 +227,47 @@ def test_docs_manager_marks_full_refresh_as_explicit_only() -> None:
assert "legacy wiki" not in content
+def test_active_doc_surfaces_no_longer_point_to_legacy_wiki_paths() -> None:
+ documentation_skill = (
+ ROOT / ".agents" / "skills" / "documentation-and-adrs" / "SKILL.md"
+ ).read_text(encoding="utf-8")
+ meta_skill = (ROOT / ".agents" / "skills" / "using-agent-skills" / "SKILL.md").read_text(
+ encoding="utf-8"
+ )
+ docs_manager_agent = (
+ ROOT / ".agents" / "skills" / "docs-manager" / "agents" / "openai.yaml"
+ ).read_text(encoding="utf-8")
+ doc_manager_agent = (
+ ROOT / ".agents" / "skills" / "doc-manager" / "agents" / "openai.yaml"
+ ).read_text(encoding="utf-8")
+ issue_template = (
+ ROOT / ".github" / "ISSUE_TEMPLATE" / "research-attribution-review.yml"
+ ).read_text(encoding="utf-8")
+ ideas_readme = (ROOT / "ideas" / "README.md").read_text(encoding="utf-8")
+ idea_refine_script = (
+ ROOT / ".agents" / "skills" / "idea-refine" / "scripts" / "idea-refine.sh"
+ ).read_text(encoding="utf-8")
+
+ for content in (
+ documentation_skill,
+ meta_skill,
+ docs_manager_agent,
+ doc_manager_agent,
+ issue_template,
+ ideas_readme,
+ idea_refine_script,
+ ):
+ assert "docs/wiki" not in content
+ assert "docs/sources" not in content
+
+ assert "raw/design/adr/" in documentation_skill
+ assert "raw/design/notes/" in documentation_skill
+ assert "raw/" in meta_skill
+ assert "raw/design/adr" in docs_manager_agent
+ assert "raw/design/notes" in issue_template
+ assert 'IDEAS_DIR="ideas"' in idea_refine_script
+
+
def test_pr_creation_rules_require_template_based_flow() -> None:
claude = (ROOT / "CLAUDE.md").read_text(encoding="utf-8")
copilot = (ROOT / ".github" / "copilot-instructions.md").read_text(encoding="utf-8")