@handsupmin/gc-tree 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,51 +2,63 @@
2
2
 
3
3
  [English](concept.md) | [한국어](concept.ko.md) | [简体中文](concept.zh.md) | [日本語](concept.ja.md) | [Español](concept.es.md)
4
4
 
5
- ## 摘要
5
+ ## 概述
6
6
 
7
- `gctree` 是一层面向 AI 编码工具的轻量级全局上下文层。它把长期上下文放在单个仓库之外、以显式 markdown 文档的形式保存,让你可以在不同 gc-branch 之间切换,并且把每条 gc-branch 的影响范围限制在真正相关的仓库里。
7
+ `gctree` 是一个为 AI 编程工具设计的轻量级全局上下文层。它将长期上下文保存在任何单一代码仓库之外的显式 Markdown 文档中,支持在 gc-branch 之间切换,并可将每个 gc-branch 的作用范围限制在真正需要它的代码仓库中。
8
8
 
9
9
  ## `gctree` 是什么
10
10
 
11
- `gctree` 是一个用来管理可复用全局上下文的 CLI
12
- 它面向的是这样一种需求:长期上下文需要在多个仓库、多个会话、多个工具之间持续存在,但又不能变成一个看不见、摸不着的“隐式记忆黑盒”。
11
+ `gctree` 是一个用于管理可复用全局上下文的 CLI 工具。
12
+ 它专为希望重要上下文能够跨代码仓库、跨会话、跨工具持续存在,同时又不变成隐藏记忆的个人和团队而设计。
13
13
 
14
- 与其把重要知识分散在提示词文件、仓库内笔记和临时指令里,不如让 `gctree` 给这些知识一个稳定、可追踪、由文件承载的家。
14
+ 与其将关键知识分散在提示词文件、仓库本地笔记和临时指令中,`gctree` 为这些知识提供了一个稳定的、以文件为载体的归宿。
15
15
 
16
- ## 它解决什么问题
16
+ ## 它解决了什么问题
17
17
 
18
- 很多 AI 编码环境一开始都很简单:
18
+ 许多 AI 编程环境最初规模都很小:
19
19
 
20
20
  - 一个 `AGENTS.md`
21
21
  - 一个 `CLAUDE.md`
22
- - 一个仓库内提示词文件
23
- - 几段需要时再复制进提示词里的笔记
22
+ - 一个仓库本地提示词文件
23
+ - 几条在需要时复制进提示词的笔记
24
24
 
25
- 一开始这样完全够用。但一旦进入真实工作场景,这套做法很快就会吃力。
25
+ 这样的方式在一段时间内是可行的。但当真正的工作量到来时,裂缝就开始显现:
26
26
 
27
27
  - 不同产品需要不同的上下文
28
- - 客户项目之间必须隔离
29
- - 可复用的指导信息应该放在单个仓库之外
30
- - 多个工具应该能读取同一份 source of truth
31
- - 长期上下文应该通过安全、可审阅的流程来演进
32
- - 同一个人可能同时在多个仓库里跑很多个会话
28
+ - 客户项目需要清晰的隔离
29
+ - 可复用的指导内容应该存放在任何单一仓库之外
30
+ - 多个工具应该能够读取同一个可信来源
31
+ - 长期上下文应该通过明确的、可审查的流程来变更
32
+ - 一个人可能同时跨多个代码仓库开启多个会话
33
33
 
34
- `gctree` 存在的目的,就是把这一层问题单独而清晰地解决掉。
34
+ `gctree` 的存在,就是为了干净地处理这一层问题。
35
35
 
36
- ## 边界在哪里
36
+ ## resolve 的工作原理
37
37
 
38
- `gctree` 有意不去做下面这些事:
38
+ 当工具调用 `gctree resolve --query "..."` 时,gc-tree 会使用支持 Unicode 的关键词匹配,对当前活跃 gc-branch 中的每个文档与查询内容进行评分(韩语、中日韩文字及混合语言查询与英语的处理方式完全相同)。标题匹配的权重是正文匹配的两倍。
39
39
 
40
- - 从需求一路编排到 commit 的交付系统
41
- - 隐藏式记忆系统
40
+ 工具只会收到匹配的文档——包含标题、摘要和摘录——而非完整的知识库。实际上,每次查询注入的上下文约占总量的 4%。只有在摘要不足以满足需求时,工具才会读取完整文档。
41
+
42
+ 这种方式在不遮蔽任何内容的前提下保持了较低的 token 消耗。所有上下文仍然是显式的、以文件为载体的,且可供审查。
43
+
44
+ ## 提供商支持
45
+
46
+ `gctree` 同时支持 Claude Code 和 Codex。两个提供商使用相同的底层上下文存储。只需 scaffold 一次,两个工具便可从同一个 gc-branch 中执行 resolve、onboard 和上下文更新。
47
+
48
+ ## 范围边界
49
+
50
+ `gctree` 有意不做以下事情:
51
+
52
+ - 从需求到提交的交付编排器
53
+ - 隐藏记忆系统
42
54
  - 浏览器协作运行时
43
55
  - 通用知识库产品
44
56
 
45
- 它只专注一件事:管理可复用的全局上下文分支,以及这些分支上的显式更新。
57
+ 它专注于一件事:管理可复用的全局上下文分支,以及明确的持久化更新。
46
58
 
47
59
  ## 文件模型
48
60
 
49
- 一个典型的主目录结构大致如下:
61
+ 一个典型的主目录结构如下:
50
62
 
51
63
  ```text
52
64
  ~/.gctree/
@@ -60,22 +72,22 @@
60
72
  docs/
61
73
  ```
62
74
 
63
- - `HEAD` 记录默认激活的 gc-branch。
64
- - `settings.json` 保存 provider 模式、运行时启动时选用的 onboarding provider,以及偏好的工作流语言。
65
- - `branch-repo-map.json` 保存每条 gc-branch 对哪些仓库包含或排除。
66
- - `branch.json` 保存轻量级的 gc-branch 元数据。
67
- - `index.md` 是工具首先进入的紧凑入口。
68
- - `docs/` 用来保存 source-of-truth markdown 文档。
75
+ - `HEAD` 记录后备的活跃 gc-branch。
76
+ - `settings.json` 存储提供商模式、运行时启动时选择的 onboarding 提供商,以及首选的工作流语言。
77
+ - `branch-repo-map.json` 存储每个 gc-branch 包含或排除的代码仓库。
78
+ - `branch.json` 存储轻量级的 gc-branch 元数据。
79
+ - `index.md` 是工具的简洁入口点——保持在 2000 字符以内,以便快速加载而不消耗大量 token 预算。
80
+ - `docs/` 存放作为可信来源的 Markdown 文档。
69
81
 
70
- ## 面向仓库的行为
82
+ ## 仓库感知行为
71
83
 
72
- gc-branch 不需要在所有地方都生效。
73
- 如果 branch `A` 只和仓库 `B`、`C`、`D` 有关,`gctree` 就可以把这件事记录到 `branch-repo-map.json` 里。
84
+ gc-branch 不必应用于所有地方。
85
+ 如果分支 `A` 只与代码仓库 `B`、`C` 和 `D` 相关,`gctree` 可以将这一关系记录在 `branch-repo-map.json` 中。
74
86
 
75
- 这样一来,当你在另一个仓库 `F` 里执行 `gctree resolve` 时,它可以这样处理:
87
+ `gctree resolve` 在另一个代码仓库(例如 `F`)中运行时,它可以:
76
88
 
77
- - 只这一次继续
78
- - 以后在 `F` 里始终使用这条 gc-branch
79
- - 在 `F` 里忽略这条 gc-branch
89
+ - 继续一次
90
+ - 始终在 `F` 中使用该 gc-branch
91
+ - 在 `F` 中忽略该 gc-branch
80
92
 
81
- 对于那些同时在多个互不相关仓库里开很多并行会话的重度用户来说,这会让 gc-tree 安全得多,也更实用。
93
+ 这使得 gc-tree 对于同时跨多个无关代码仓库保持大量并行会话的重度用户来说更加安全。
@@ -4,24 +4,24 @@
4
4
 
5
5
  ## Resumen
6
6
 
7
- El desarrollo local sigue un flujo estándar de Node.js 20+: instalar dependencias, compilar la CLI, ejecutarla localmente y verificar los cambios con la suite de tests existente antes de enviarlos.
7
+ El desarrollo local sigue un flujo de trabajo estándar de Node.js 20+: instalar dependencias, compilar la CLI, ejecutarla localmente y verificar los cambios con el conjunto de pruebas existente antes de enviarlos.
8
8
 
9
9
  ## Requisitos previos
10
10
 
11
11
  - Node.js 20+
12
12
  - npm
13
- - binarios locales de `codex` y / o `claude` si quieres probar manualmente el arranque de providers
13
+ - binarios locales de `codex` y/o `claude` si quieres hacer pruebas manuales con los lanzamientos de proveedores
14
14
 
15
- ## Preparación
15
+ ## Configuración
16
16
 
17
17
  ```bash
18
18
  npm install
19
19
  npm run build
20
20
  ```
21
21
 
22
- ## Ejecuta la CLI en local
22
+ ## Ejecutar la CLI localmente
23
23
 
24
- ### Opción 1: ejecutar directamente la entrada ya compilada
24
+ ### Opción 1: ejecutar el punto de entrada compilado directamente
25
25
 
26
26
  ```bash
27
27
  node dist/src/cli.js status
@@ -34,7 +34,7 @@ npm link
34
34
  gctree status
35
35
  ```
36
36
 
37
- Si cambias archivos TypeScript, vuelve a compilar antes de probar otra vez la CLI.
37
+ Si cambias archivos TypeScript, vuelve a compilar antes de probar la CLI de nuevo.
38
38
 
39
39
  ## Verificación
40
40
 
@@ -45,33 +45,55 @@ npm run build
45
45
  npm test
46
46
  ```
47
47
 
48
- ## Tests de repo scope
48
+ ### Suite de evaluación
49
49
 
50
- La suite de tests cubre ahora:
50
+ Además de las pruebas unitarias, una suite de evaluación mide la calidad de resolve contra fixtures realistas:
51
51
 
52
- - persistencia del modo de provider (`claude-code`, `codex`, `both`)
53
- - persistencia del idioma preferido y aplicación estricta del idioma en los launch prompts
54
- - selección de gc-branch con conciencia de repositorio
55
- - decisiones interactivas de include / exclude durante `resolve`
56
- - actualizaciones del branch repo map
57
- - límites del flujo guiado de onboarding / update
52
+ ```bash
53
+ npm run eval # suite sintética de 5 escenarios (onboarding, resolve, eficiencia de tokens, actualización, aislamiento)
54
+ npm run eval:verbose # lo mismo, con detalle por caso
55
+ npm run eval:multi-repo # prueba de aislamiento entre repositorios usando fixtures de estilo cosmo
56
+ npm run eval:real-docs # recall y precisión contra exportaciones reales de Notion (requiere documentos locales)
57
+ npm run eval:autoresearch # bucle iterativo de mejora de resolve (modifica src/resolve.ts en su lugar)
58
+ ```
59
+
60
+ Líneas base esperadas (ejecuta `npm run eval` para verificar):
61
+
62
+ | Suite | Objetivo |
63
+ | --- | --- |
64
+ | Sintética (5 escenarios) | 5/5 PASS, media ≥ 90% |
65
+ | Multi-repo | ≥ 80% en total |
66
+ | Real-docs | Recall ≥ 90%, F1 ≥ 80% |
67
+
68
+ Si modificas `src/resolve.ts`, ejecuta `npm test && npm run eval && npm run eval:real-docs` antes de abrir un PR.
69
+
70
+ ## Cobertura de pruebas
71
+
72
+ El conjunto de pruebas unitarias cubre actualmente:
73
+
74
+ - persistencia del modo de proveedor (`claude-code`, `codex`, `both`)
75
+ - persistencia del idioma preferido y aplicación estricta del idioma en los prompts de lanzamiento
76
+ - selección de gc-branch según el repositorio
77
+ - decisiones interactivas de incluir/excluir durante `resolve`
78
+ - actualizaciones del mapa de repositorios de la branch
79
+ - límites del flujo guiado de onboarding/actualización
58
80
 
59
- ## Comprobaciones manuales E2E de providers
81
+ ## Verificaciones E2E manuales del proveedor
60
82
 
61
- Los tests automatizados desactivan el lanzamiento de providers para poder verificar los launch plans sin abrir sesiones reales de Codex o Claude Code.
62
- Si quieres probar la ruta real de lanzamiento, ejecuta uno de estos comandos dentro de un directorio desechable:
83
+ Las pruebas automatizadas deshabilitan el lanzamiento del proveedor para poder verificar los planes de lanzamiento sin abrir sesiones reales de Codex o Claude Code.
84
+ Si quieres hacer pruebas con el camino de lanzamiento real, ejecuta uno de estos en un directorio de prueba:
63
85
 
64
86
  ```bash
65
87
  gctree init --provider codex
66
88
  gctree init --provider claude-code
67
89
  ```
68
90
 
69
- Deberías ver que el provider se abre y recibe inmediatamente `$gc-onboard` o `/gc-onboard`.
91
+ Deberías ver cómo se abre el proveedor y recibe inmediatamente `$gc-onboard` o `/gc-onboard`.
70
92
 
71
93
  ## Estructura del proyecto
72
94
 
73
- - `src/` — CLI, almacenamiento de contexto, selección de provider, mapeo de repo scope, flujos guiados de onboarding / update y lógica de scaffolding
74
- - `tests/` — tests de CLI y de comportamiento
75
- - `skills/` — habilidades de flujo de trabajo independientes de la herramienta
76
- - `scaffolds/` — plantillas de arranque específicas por host
95
+ - `src/` — CLI, almacenamiento de contexto, selección de proveedor, mapeo de alcance del repositorio, flujos guiados de onboarding/actualización y lógica de scaffolding
96
+ - `tests/` — pruebas unitarias y scripts de evaluación
97
+ - `skills/` — skills de flujo de trabajo agnósticas a la herramienta (usadas por Claude Code)
98
+ - `scaffolds/` — directorios de marcador de posición; el contenido de los archivos de scaffold se genera programáticamente en `src/scaffold.ts`
77
99
  - `docs/` — documentación de concepto, principios, uso y desarrollo
@@ -2,15 +2,15 @@
2
2
 
3
3
  [English](local-development.md) | [한국어](local-development.ko.md) | [简体中文](local-development.zh.md) | [日本語](local-development.ja.md) | [Español](local-development.es.md)
4
4
 
5
- ## 要約
5
+ ## 概要
6
6
 
7
- ローカル開発は、一般的な Node.js 20+ の流れに沿っています。依存関係を入れ、CLI をビルドし、ローカルで実行し、変更を送る前に既存のテストスイートで検証します。
7
+ ローカル開発は標準的な Node.js 20+ の流れに沿っています。依存関係をインストールし、CLI をビルドし、ローカルで実行し、変更を送る前に既存のテストスイートで検証します。
8
8
 
9
9
  ## 前提条件
10
10
 
11
11
  - Node.js 20+
12
12
  - npm
13
- - provider 起動を自分で試したい場合はローカルの `codex` / または `claude` バイナリ
13
+ - プロバイダー起動を手元で試したい場合はローカルの `codex` `claude` バイナリ
14
14
 
15
15
  ## セットアップ
16
16
 
@@ -45,33 +45,55 @@ npm run build
45
45
  npm test
46
46
  ```
47
47
 
48
- ## repo-scope テスト
48
+ ### eval スイート
49
49
 
50
- 現在のテストスイートでは、次をカバーしています。
50
+ ユニットテストに加えて、eval スイートがリアルなフィクスチャに対して resolve の品質を測定します。
51
51
 
52
- - provider モードの保存(`claude-code`、`codex`、`both`)
53
- - 優先言語の保存と launch prompt での強い言語維持
52
+ ```bash
53
+ npm run eval # 5 シナリオの合成スイート(オンボーディング、resolve、トークン効率、更新、分離)
54
+ npm run eval:verbose # 同上、ケースごとの詳細付き
55
+ npm run eval:multi-repo # cosmo スタイルのフィクスチャを使ったクロスリポジトリ分離テスト
56
+ npm run eval:real-docs # 実際の Notion エクスポートに対する再現率と適合率(ローカルドキュメントが必要)
57
+ npm run eval:autoresearch # 反復的な resolve 改善ループ(src/resolve.ts をその場で変更します)
58
+ ```
59
+
60
+ 期待されるベースライン(`npm run eval` を実行して確認):
61
+
62
+ | スイート | 目標 |
63
+ | --- | --- |
64
+ | 合成(5 シナリオ) | 5/5 PASS、平均 ≥ 90% |
65
+ | マルチリポジトリ | 全体 ≥ 80% |
66
+ | 実ドキュメント | 再現率 ≥ 90%、F1 ≥ 80% |
67
+
68
+ `src/resolve.ts` を変更した場合は、PR を開く前に `npm test && npm run eval && npm run eval:real-docs` を実行してください。
69
+
70
+ ## テストカバレッジ
71
+
72
+ 現在のユニットテストスイートでは次をカバーしています。
73
+
74
+ - プロバイダーモードの永続化(`claude-code`、`codex`、`both`)
75
+ - 優先言語の永続化と起動プロンプトでの言語強制
54
76
  - リポジトリを意識した gc-branch 選択
55
- - `resolve` 実行中の include / exclude の対話
77
+ - `resolve` 実行中の include / exclude の対話的な決定
56
78
  - branch repo map の更新
57
- - ガイド付きオンボーディング / 更新の境界条件
79
+ - ガイド付きオンボーディング・更新フローの境界条件
58
80
 
59
- ## provider の手動 E2E チェック
81
+ ## プロバイダーの手動 E2E チェック
60
82
 
61
- 自動テストでは、Codex や Claude Code のセッションを実際に開かなくても launch plan を検証できるよう、provider 起動を無効化しています。
62
- 本物の launch path を試したい場合は、使い捨てディレクトリで次のどちらかを実行してください。
83
+ 自動テストでは、Codex や Claude Code のセッションを実際に開かなくても起動計画を検証できるよう、プロバイダー起動を無効化しています。
84
+ 本物の起動パスを試したい場合は、使い捨てディレクトリで次のどちらかを実行してください。
63
85
 
64
86
  ```bash
65
87
  gctree init --provider codex
66
88
  gctree init --provider claude-code
67
89
  ```
68
90
 
69
- 正しく動けば、provider が起動し、すぐに `$gc-onboard` または `/gc-onboard` を受け取るはずです。
91
+ 正しく動けば、プロバイダーが起動し、すぐに `$gc-onboard` または `/gc-onboard` を受け取るはずです。
70
92
 
71
93
  ## プロジェクト構成
72
94
 
73
- - `src/` — CLI、本体のコンテキスト保存、provider 選択、repo-scope マッピング、ガイド付きオンボーディング / 更新フロー、scaffolding ロジック
74
- - `tests/` — CLI と振る舞いのテスト
75
- - `skills/` — ツール非依存のワークフロースキル
76
- - `scaffolds/` — ホスト別のブートストラップテンプレート
77
- - `docs/` — 概念、原則、使い方、開発ドキュメント
95
+ - `src/` — CLI、コンテキストストレージ、プロバイダー選択、repo-scope マッピング、ガイド付きオンボーディング・更新フロー、および scaffolding ロジック
96
+ - `tests/` — ユニットテストと eval スクリプト
97
+ - `skills/` — ツールに依存しないワークフロースキル(Claude Code が使用)
98
+ - `scaffolds/` — プレースホルダーディレクトリ。scaffold ファイルの内容は `src/scaffold.ts` でプログラム的に生成されます
99
+ - `docs/` — コンセプト・原則・使い方・開発ドキュメント
@@ -4,13 +4,13 @@
4
4
 
5
5
  ## 요약
6
6
 
7
- 로컬 개발은 일반적인 Node.js 20+ 흐름을 따릅니다. 의존성을 설치하고, CLI 빌드하고, 로컬에서 실행해 보고, 변경을 보내기 전에 기존 테스트 스위트로 검증하면 됩니다.
7
+ 로컬 개발은 표준 Node.js 20+ 워크플로우를 따릅니다: 의존성 설치, CLI 빌드, 로컬 실행, 변경 사항을 내보내기 전에 기존 테스트 스위트로 검증.
8
8
 
9
- ## 준비물
9
+ ## 사전 요구 사항
10
10
 
11
11
  - Node.js 20+
12
12
  - npm
13
- - provider 실행을 직접 확인해보고 싶다면 로컬 `codex` / 또는 `claude` 바이너리
13
+ - 프로바이더 실행을 직접 도그푸딩하려면 로컬에 `codex` 및/또는 `claude` 바이너리 필요
14
14
 
15
15
  ## 설정
16
16
 
@@ -19,59 +19,81 @@ npm install
19
19
  npm run build
20
20
  ```
21
21
 
22
- ## 로컬에서 CLI 실행하기
22
+ ## CLI 로컬 실행
23
23
 
24
- ### 방법 1: 빌드된 엔트리를 직접 실행
24
+ ### 옵션 1: 빌드된 엔트리를 직접 실행
25
25
 
26
26
  ```bash
27
27
  node dist/src/cli.js status
28
28
  ```
29
29
 
30
- ### 방법 2: CLI를 셸에 링크해서 사용
30
+ ### 옵션 2: CLI를 셸에 링크
31
31
 
32
32
  ```bash
33
33
  npm link
34
34
  gctree status
35
35
  ```
36
36
 
37
- TypeScript 소스를 수정했다면 CLI를 다시 테스트하기 전에 한 번 더 빌드하세요.
37
+ TypeScript 소스를 변경한 경우, CLI를 다시 테스트하기 전에 재빌드하세요.
38
38
 
39
39
  ## 검증
40
40
 
41
- PR을 열기 전에 아래 명령을 실행하세요.
41
+ 리퀘스트를 열기 전에 다음을 실행하세요:
42
42
 
43
43
  ```bash
44
44
  npm run build
45
45
  npm test
46
46
  ```
47
47
 
48
- ## repo-scope 테스트
48
+ ### 평가 스위트
49
49
 
50
- 현재 테스트 스위트는 다음을 커버합니다.
50
+ 유닛 테스트 외에도, 현실적인 픽스처를 기반으로 resolve 품질을 측정하는 평가 스위트가 있습니다:
51
51
 
52
- - provider 모드 저장 (`claude-code`, `codex`, `both`)
53
- - 선호 언어 저장과 launch prompt에서의 강한 언어 유지
54
- - 레포 인식 gc-branch 선택
55
- - `resolve` include / exclude 인터랙션
56
- - branch repo map 업데이트
57
- - 가이드형 온보딩 / 업데이트 경계
52
+ ```bash
53
+ npm run eval # 5시나리오 합성 스위트 (온보딩, resolve, 토큰 효율성, 업데이트, 격리)
54
+ npm run eval:verbose # 동일, 케이스별 상세 출력
55
+ npm run eval:multi-repo # cosmo 스타일 픽스처를 사용한 크로스 저장소 격리 테스트
56
+ npm run eval:real-docs # 실제 Notion 익스포트에 대한 재현율 및 정밀도 측정 (로컬 문서 필요)
57
+ npm run eval:autoresearch # 반복적 resolve 개선 루프 (src/resolve.ts를 직접 수정함)
58
+ ```
59
+
60
+ 예상 기준선 (`npm run eval` 실행으로 확인):
61
+
62
+ | 스위트 | 목표 |
63
+ | --- | --- |
64
+ | 합성 (5 시나리오) | 5/5 PASS, 평균 ≥ 90% |
65
+ | 다중 저장소 | 전체 ≥ 80% |
66
+ | 실제 문서 | 재현율 ≥ 90%, F1 ≥ 80% |
67
+
68
+ `src/resolve.ts`를 수정한 경우, PR을 열기 전에 `npm test && npm run eval && npm run eval:real-docs`를 실행하세요.
69
+
70
+ ## 테스트 커버리지
71
+
72
+ 유닛 테스트 스위트가 현재 다루는 항목:
73
+
74
+ - 프로바이더 모드 영속성 (`claude-code`, `codex`, `both`)
75
+ - 선호 언어 영속성 및 실행 프롬프트에서의 강력한 언어 적용
76
+ - 저장소 인식 gc-branch 선택
77
+ - `resolve` 중 인터랙티브 포함/제외 결정
78
+ - 브랜치 저장소 맵 업데이트
79
+ - 안내된 온보딩/업데이트 흐름 경계
58
80
 
59
- ## provider 수동 E2E 확인
81
+ ## 수동 프로바이더 E2E 확인
60
82
 
61
- 자동화 테스트는 Codex나 Claude Code 세션을 실제로 열지 않고도 launch plan을 검증할 수 있도록 provider 실행을 비활성화해 둡니다.
62
- 실제 launch 경로를 직접 확인해보고 싶다면, 임시 디렉터리에서 아래 중 하나를 실행해 보세요.
83
+ 자동화된 테스트는 실제 Codex나 Claude Code 세션을 열지 않고 실행 계획을 검증할 수 있도록 프로바이더 실행을 비활성화합니다.
84
+ 실제 실행 경로를 도그푸딩하려면 임시 디렉토리에서 다음 중 하나를 실행하세요:
63
85
 
64
86
  ```bash
65
87
  gctree init --provider codex
66
88
  gctree init --provider claude-code
67
89
  ```
68
90
 
69
- 정상이라면 provider가 열리고 바로 `$gc-onboard` 또는 `/gc-onboard`를 받게 됩니다.
91
+ 프로바이더가 열리고 즉시 `$gc-onboard` 또는 `/gc-onboard`를 받는 것을 확인해야 합니다.
70
92
 
71
- ## 프로젝트 구조
93
+ ## 프로젝트 레이아웃
72
94
 
73
- - `src/` — CLI, 컨텍스트 저장소, provider 선택, repo-scope 매핑, 가이드형 온보딩 / 업데이트 흐름, 스캐폴딩 로직
74
- - `tests/` — CLI동작 테스트
75
- - `skills/` — 도구 비종속 워크플로 스킬
76
- - `scaffolds/` — 호스트별 부트스트랩 템플릿
95
+ - `src/` — CLI, 컨텍스트 저장소, 프로바이더 선택, 저장소 범위 매핑, 안내된 온보딩/업데이트 흐름, scaffold 로직
96
+ - `tests/` — 유닛 테스트 평가 스크립트
97
+ - `skills/` — 도구에 구애받지 않는 워크플로우 스킬 (Claude Code에서 사용)
98
+ - `scaffolds/` — 플레이스홀더 디렉토리; scaffold 파일 내용은 `src/scaffold.ts`에서 프로그래밍 방식으로 생성됨
77
99
  - `docs/` — 개념, 원칙, 사용법, 개발 문서
@@ -45,9 +45,31 @@ npm run build
45
45
  npm test
46
46
  ```
47
47
 
48
- ## Repo-scope tests
48
+ ### Eval suite
49
49
 
50
- The test suite currently covers:
50
+ In addition to the unit tests, an eval suite measures resolve quality against realistic fixtures:
51
+
52
+ ```bash
53
+ npm run eval # 5-scenario synthetic suite (onboarding, resolve, token efficiency, update, isolation)
54
+ npm run eval:verbose # same, with per-case detail
55
+ npm run eval:multi-repo # cross-repo isolation test using cosmo-style fixtures
56
+ npm run eval:real-docs # recall and precision against real Notion exports (requires local docs)
57
+ npm run eval:autoresearch # iterative resolve improvement loop (modifies src/resolve.ts in place)
58
+ ```
59
+
60
+ Expected baselines (run `npm run eval` to verify):
61
+
62
+ | Suite | Target |
63
+ | --- | --- |
64
+ | Synthetic (5 scenarios) | 5/5 PASS, mean ≥ 90% |
65
+ | Multi-repo | ≥ 80% overall |
66
+ | Real-docs | Recall ≥ 90%, F1 ≥ 80% |
67
+
68
+ If you modify `src/resolve.ts`, run `npm test && npm run eval && npm run eval:real-docs` before opening a PR.
69
+
70
+ ## Test coverage
71
+
72
+ The unit test suite currently covers:
51
73
 
52
74
  - provider mode persistence (`claude-code`, `codex`, `both`)
53
75
  - preferred language persistence and strong language enforcement in launch prompts
@@ -71,7 +93,7 @@ You should see the provider open and immediately receive `$gc-onboard` or `/gc-o
71
93
  ## Project layout
72
94
 
73
95
  - `src/` — CLI, context storage, provider selection, repo-scope mapping, guided onboarding/update flows, and scaffolding logic
74
- - `tests/` — CLI and behavior tests
75
- - `skills/` — tool-agnostic workflow skills
76
- - `scaffolds/` — host-specific bootstrap templates
96
+ - `tests/` — unit tests and eval scripts
97
+ - `skills/` — tool-agnostic workflow skills (used by Claude Code)
98
+ - `scaffolds/` — placeholder directories; scaffold file content is generated programmatically in `src/scaffold.ts`
77
99
  - `docs/` — concept, principles, usage, and development documentation
@@ -45,9 +45,31 @@ npm run build
45
45
  npm test
46
46
  ```
47
47
 
48
- ## repo-scope 测试
48
+ ### 评估套件
49
49
 
50
- 当前测试套件覆盖了以下内容:
50
+ 除单元测试外,还有一套 eval 套件,用于衡量 resolve 在真实场景下的质量:
51
+
52
+ ```bash
53
+ npm run eval # 5 场景综合测试(onboarding、resolve、token 效率、update、隔离性)
54
+ npm run eval:verbose # 同上,输出每条用例的详情
55
+ npm run eval:multi-repo # 跨仓库隔离测试,使用 cosmo 风格的 fixtures
56
+ npm run eval:real-docs # 基于真实 Notion 导出文件的 recall 和 precision 测试(需要本地文档)
57
+ npm run eval:autoresearch # 迭代式 resolve 改进循环(会直接修改 src/resolve.ts)
58
+ ```
59
+
60
+ 预期基线(运行 `npm run eval` 可验证):
61
+
62
+ | 套件 | 目标 |
63
+ | --- | --- |
64
+ | 综合(5 场景) | 5/5 PASS,均值 ≥ 90% |
65
+ | 多仓库 | 整体 ≥ 80% |
66
+ | 真实文档 | Recall ≥ 90%,F1 ≥ 80% |
67
+
68
+ 如果你修改了 `src/resolve.ts`,在发 PR 之前请运行 `npm test && npm run eval && npm run eval:real-docs`。
69
+
70
+ ## 测试覆盖范围
71
+
72
+ 当前单元测试套件覆盖了以下内容:
51
73
 
52
74
  - provider 模式持久化(`claude-code`、`codex`、`both`)
53
75
  - 偏好语言持久化,以及 launch prompt 中的强语言约束
@@ -71,7 +93,7 @@ gctree init --provider claude-code
71
93
  ## 项目结构
72
94
 
73
95
  - `src/` — CLI、本地上下文存储、provider 选择、repo-scope 映射、带引导的 onboarding / update 流程,以及 scaffolding 逻辑
74
- - `tests/` — CLI 与行为测试
75
- - `skills/` — 与工具无关的工作流技能
76
- - `scaffolds/` — 面向不同 host 的引导模板
96
+ - `tests/` — 单元测试与 eval 脚本
97
+ - `skills/` — 与工具无关的工作流技能(供 Claude Code 使用)
98
+ - `scaffolds/` — 占位目录;scaffold 文件内容由 `src/scaffold.ts` 动态生成
77
99
  - `docs/` — 概念、原则、使用方式与开发文档
@@ -4,47 +4,60 @@
4
4
 
5
5
  ## Resumen
6
6
 
7
- `gctree` sigue unas pocas reglas de producto muy claras: mantener el contexto con conciencia de rama, mantener los documentos source con enfoque summary-first, mantener los índices ligeros y hacer explícito el repo scope para que cada gc-branch solo influya donde realmente le toca.
7
+ `gctree` sigue un pequeño conjunto de reglas de producto: mantener el contexto consciente de las branches, mantener los documentos fuente con el resumen primero, mantener los índices compactos, hacer el alcance del repositorio explícito, inyectar solo lo relevante y admitir cualquier proveedor que pueda ejecutar comandos de shell.
8
8
 
9
- ## 1. Mantén el contexto con conciencia de rama
9
+ ## 1. Mantener el contexto consciente de las branches
10
10
 
11
- Una misma máquina debería poder contener varios árboles de contexto global sin mezclarlos.
12
- Por eso `gctree` usa lenguaje tipo Git como `checkout` y `checkout -b`, mientras que en la interfaz orientada al usuario se refiere a la rama activa como **gc-branch**.
11
+ Una misma máquina debe poder mantener múltiples árboles de contexto global sin mezclarlos entre sí.
12
+ Por eso `gctree` usa terminología similar a git como `checkout` y `checkout -b`, aunque sigue refiriéndose a la branch activa como **gc-branch** en el texto orientado al usuario.
13
13
 
14
- ## 2. Haz explícito el repo scope
14
+ ## 2. Mantener el alcance del repositorio explícito
15
15
 
16
- Un gc-branch no debería afectar en silencio a todos los repositorios de la máquina.
16
+ Una gc-branch no debería afectar silenciosamente a todos los repositorios de la máquina.
17
17
  `gctree` usa `branch-repo-map.json` para registrar si un repositorio está:
18
18
 
19
- - incluido para un gc-branch
20
- - excluido para un gc-branch
21
- - todavía sin mapear
19
+ - incluido para una gc-branch
20
+ - excluido para una gc-branch
21
+ - aún no mapeado
22
22
 
23
- Si `resolve` se llama desde un repositorio no mapeado, la persona usuaria puede decidir si quiere continuar una vez, usar siempre ese gc-branch allí o ignorarlo en ese repo.
23
+ Si se llama a `resolve` desde un repositorio no mapeado, el usuario puede decidir si continuar una vez, usar siempre esa gc-branch allí o ignorarla.
24
24
 
25
- ## 3. Mantén `index.md` ligero
25
+ ## 3. Mantener `index.md` compacto
26
26
 
27
- El `index.md` de nivel superior es un índice, no un vertedero de contenido.
28
- Su trabajo es ayudar a herramientas y personas a encontrar rápido el documento source correcto.
29
- Debe seguir siendo compacto y orientado a enlaces, en lugar de duplicar todo el conocimiento en línea.
27
+ El `index.md` de nivel superior es un índice, no un volcado.
28
+ Su función es ayudar a las herramientas y a las personas a encontrar rápidamente el documento fuente correcto.
29
+ Debe mantenerse por debajo de **2000 caracteres** y orientarse a los enlaces en lugar de duplicar el conocimiento completo de forma inline.
30
30
 
31
- ## 4. Haz que los documentos source sean summary-first
31
+ ## 4. Hacer que los documentos fuente empiecen con el resumen
32
32
 
33
- Todo documento markdown que actúe como source of truth debería incluir una sección `## Summary` cerca del inicio.
34
- Eso le da a las herramientas una ruta rápida: leer primero la versión corta y ampliar solo cuando haga falta más detalle.
33
+ Cada documento markdown que sea fuente de verdad debe incluir una sección `## Summary` cerca del principio.
34
+ Esto le da a las herramientas aguas abajo un camino rápido: leer primero la versión corta y expandir solo cuando realmente se necesite más detalle.
35
35
 
36
- ## 5. Haz que el onboarding sea explícito y guiado
36
+ ## 5. Hacer el onboarding explícito y guiado
37
37
 
38
- Una persona no debería tener que escribir a mano un JSON de onboarding solo para crear un árbol de contexto útil.
39
- `gctree init` y `gctree onboard` deberían guiar el flujo con el provider elegido y escribir el contexto resultante en el gc-branch activo.
38
+ Un usuario no debería tener que escribir a mano JSON de onboarding solo para crear un árbol de contexto útil.
39
+ `gctree init` y `gctree onboard` deben guiar al usuario a través de su proveedor preferido y escribir el contexto resultante en la gc-branch activa.
40
40
 
41
- El onboarding solo aplica a gc-branches vacíos.
42
- Si un gc-branch ya contiene contexto, el camino correcto es uno de estos dos:
41
+ El onboarding es solo para gc-branches vacías.
42
+ Si una gc-branch ya contiene contexto, el camino correcto es:
43
43
 
44
- - restablecer ese gc-branch y volver a hacer onboarding
45
- - o lanzar una actualización duradera guiada
44
+ - resetear esa gc-branch y hacer onboarding de nuevo
45
+ - o ejecutar una actualización duradera guiada
46
46
 
47
- ## 6. Haz que las actualizaciones duraderas sean intencionales
47
+ ## 6. Mantener las actualizaciones duraderas intencionales
48
48
 
49
49
  El contexto duradero no debería cambiar por accidente ni a través de memoria oculta.
50
- El flujo de actualización debe ser explícito, guiado por el provider y estar ligado al gc-branch activo en ese momento.
50
+ El flujo de actualización debe ser explícito, impulsado por el proveedor y vinculado a la gc-branch actualmente activa.
51
+
52
+ ## 7. Inyectar solo lo relevante
53
+
54
+ Una sesión de herramienta nunca debería recibir la base de conocimiento completa.
55
+ `gctree resolve` puntúa los documentos contra la consulta y devuelve solo los que coinciden — título, resumen y fragmento. El documento completo se lee solo cuando el resumen no es suficiente.
56
+
57
+ En la práctica, esto significa que se inyecta aproximadamente el 4 % del contexto almacenado total por consulta. El 96 % restante permanece en disco, fuera de la ventana de tokens, hasta que se necesite realmente.
58
+
59
+ ## 8. Mantenerse agnóstico al proveedor
60
+
61
+ `gctree` almacena el contexto en archivos markdown simples que cualquier herramienta puede leer.
62
+ Claude Code y Codex hacen scaffold contra el mismo almacén subyacente mediante `gctree scaffold`.
63
+ Agregar soporte para un nuevo proveedor significa escribir una nueva plantilla de scaffold — sin cambios en la lógica central de almacenamiento ni de resolve.