From 540992158de069625b86c1b806553d23587cfd18 Mon Sep 17 00:00:00 2001 From: Codex Date: Tue, 21 Apr 2026 14:19:07 +0900 Subject: [PATCH] Migrate demo app and finalize Graphify docs --- .../skills/idea-refine/scripts/idea-refine.sh | 2 +- .harness/hooks/graphify-auto-refresh.sh | 8 +- .harness/reference/README.md | 5 +- README.ko.md | 13 ++- README.md | 13 ++- {docs => apps}/demo/bright.css | 0 {docs => apps}/demo/data/pipeline.js | 0 {docs => apps}/demo/data/recipes.js | 0 {docs => apps}/demo/data/taxonomy.js | 0 {docs => apps}/demo/index.html | 0 .../demo/screenshots/desktop-en.png | Bin .../demo/screenshots/desktop-kr.png | Bin {docs => apps}/demo/screenshots/mobile-en.png | Bin {docs => apps}/demo/src/app.jsx | 0 {docs => apps}/demo/src/components.jsx | 0 {docs => apps}/demo/src/i18n.js | 0 {docs => apps}/demo/tests/_loader.cjs | 0 {docs => apps}/demo/tests/i18n.test.cjs | 0 {docs => apps}/demo/tests/pipeline.test.cjs | 0 docs/README.md | 23 ++++ graphify-out/BUILD_INFO.json | 4 +- graphify-out/VERIFY_FULL_REFRESH.json | 105 ++++++++++++++++++ ideas/README.md | 2 +- scripts/graphify_ci_candidate.sh | 8 +- scripts/graphify_code_refresh.sh | 8 +- scripts/graphify_prepare_corpus.sh | 8 +- scripts/graphify_sync_staged.sh | 8 +- tests/test_graphify_harness.py | 41 +++++++ 28 files changed, 225 insertions(+), 23 deletions(-) rename {docs => apps}/demo/bright.css (100%) rename {docs => apps}/demo/data/pipeline.js (100%) rename {docs => apps}/demo/data/recipes.js (100%) rename {docs => apps}/demo/data/taxonomy.js (100%) rename {docs => apps}/demo/index.html (100%) rename {docs => apps}/demo/screenshots/desktop-en.png (100%) rename {docs => apps}/demo/screenshots/desktop-kr.png (100%) rename {docs => apps}/demo/screenshots/mobile-en.png (100%) rename {docs => apps}/demo/src/app.jsx (100%) rename {docs => apps}/demo/src/components.jsx (100%) rename {docs => apps}/demo/src/i18n.js (100%) rename {docs => apps}/demo/tests/_loader.cjs (100%) rename {docs => apps}/demo/tests/i18n.test.cjs (100%) rename {docs => apps}/demo/tests/pipeline.test.cjs (100%) create mode 100644 docs/README.md create mode 100644 graphify-out/VERIFY_FULL_REFRESH.json 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 파라미터로 한국어/영어를 전환하며, 빌드 단계 없이 클라이언트에서 모두 실행된다.

- - ZeroAlign-Rec 추천 데모 (데스크톱, KR) + + ZeroAlign-Rec 추천 데모 (데스크톱, KR)

@@ -26,16 +26,16 @@ 다른 뷰 — 영문 버전과 모바일 반응형

- 영문(EN) 버전 + 영문(EN) 버전

- 모바일 반응형 레이아웃 + 모바일 반응형 레이아웃

-소스는 [`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.

- - ZeroAlign-Rec recommendation demo (desktop, EN) + + ZeroAlign-Rec recommendation demo (desktop, EN)

@@ -26,16 +26,16 @@ A static HTML/JS bundle visualizes the four-module online pipeline (Interest Ske More views — Korean variant and mobile responsive

- Korean (KR) variant + Korean (KR) variant

- Mobile responsive layout + Mobile responsive layout

-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")