Skip to content

Commit 7f9649f

Browse files
committed
fix: harden release documentation and optimize text retrieval
1 parent 1d0b7aa commit 7f9649f

52 files changed

Lines changed: 858 additions & 161 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/ci.yml‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ on:
44
push:
55
pull_request:
66
workflow_dispatch:
7+
workflow_call:
8+
inputs:
9+
commit:
10+
description: Immutable commit supplied by the release workflow
11+
required: true
12+
type: string
713

814
permissions:
915
contents: read
@@ -19,6 +25,7 @@ jobs:
1925
steps:
2026
- uses: actions/checkout@v7
2127
with:
28+
ref: ${{ inputs.commit || github.sha }}
2229
persist-credentials: false
2330
- uses: actions/setup-node@v7
2431
with:

‎.github/workflows/docs-ci.yml‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ on:
3131
- ".github/workflows/docs-deploy.yml"
3232
- ".github/workflows/release.yml"
3333
workflow_dispatch:
34+
workflow_call:
35+
inputs:
36+
commit:
37+
description: Immutable commit supplied by the release workflow
38+
required: true
39+
type: string
3440

3541
env:
3642
CG_ARTIFACTS_DIR: ${{ github.workspace }}/../capability-graph-artifacts
@@ -45,6 +51,7 @@ jobs:
4551
steps:
4652
- uses: actions/checkout@v7
4753
with:
54+
ref: ${{ inputs.commit || github.sha }}
4855
persist-credentials: false
4956
- uses: actions/setup-node@v7
5057
with:
@@ -78,6 +85,7 @@ jobs:
7885
steps:
7986
- uses: actions/checkout@v7
8087
with:
88+
ref: ${{ inputs.commit || github.sha }}
8189
persist-credentials: false
8290
- uses: actions/setup-node@v7
8391
with:
@@ -97,6 +105,7 @@ jobs:
97105
steps:
98106
- uses: actions/checkout@v7
99107
with:
108+
ref: ${{ inputs.commit || github.sha }}
100109
persist-credentials: false
101110
- id: browser-artifacts
102111
name: Normalize the external browser report path

‎.github/workflows/release.yml‎

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,26 @@ jobs:
6767
exit 1
6868
}
6969
70-
gates:
70+
compatibility:
71+
needs: freeze
72+
uses: ./.github/workflows/ci.yml
73+
with:
74+
commit: ${{ needs.freeze.outputs.release_commit }}
75+
76+
framework:
7177
needs: freeze
78+
uses: ./.github/workflows/vextjs-ci.yml
79+
with:
80+
commit: ${{ needs.freeze.outputs.release_commit }}
81+
82+
documentation:
83+
needs: freeze
84+
uses: ./.github/workflows/docs-ci.yml
85+
with:
86+
commit: ${{ needs.freeze.outputs.release_commit }}
87+
88+
gates:
89+
needs: [freeze, compatibility, framework, documentation]
7290
runs-on: ubuntu-latest
7391
steps:
7492
- uses: actions/checkout@v7
@@ -79,22 +97,9 @@ jobs:
7997
with:
8098
node-version: "22.12.0"
8199
cache: npm
82-
cache-dependency-path: |
83-
package-lock.json
84-
website/package-lock.json
85100
- run: npm ci
86-
- run: npm test
87-
- run: npm run test:package:built
101+
- run: npm run build && npm run build:tests
88102
- run: npm run evaluate:built
89-
- run: npm ci --ignore-scripts
90-
working-directory: examples/seed-mcp
91-
- run: npm test
92-
working-directory: examples/seed-mcp
93-
- run: npm ci
94-
working-directory: website
95-
- run: npx playwright install --with-deps chromium
96-
- run: npm run check:built
97-
working-directory: website
98103

99104
package:
100105
needs: [freeze, gates]

‎.github/workflows/vextjs-ci.yml‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ on:
66
pull_request:
77
paths: ['src/**', 'examples/**', 'scripts/**', 'test/**', 'package*.json', 'tsconfig*.json', '.github/workflows/vextjs-ci.yml']
88
workflow_dispatch:
9+
workflow_call:
10+
inputs:
11+
commit:
12+
description: Immutable commit supplied by the release workflow
13+
required: true
14+
type: string
915

1016
permissions:
1117
contents: read
@@ -33,6 +39,7 @@ jobs:
3339
steps:
3440
- uses: actions/checkout@v7
3541
with:
42+
ref: ${{ inputs.commit || github.sha }}
3643
persist-credentials: false
3744
- uses: actions/setup-node@v7
3845
with:
@@ -97,6 +104,7 @@ jobs:
97104
steps:
98105
- uses: actions/checkout@v7
99106
with:
107+
ref: ${{ inputs.commit || github.sha }}
100108
persist-credentials: false
101109
- uses: actions/setup-node@v7
102110
with:
@@ -133,6 +141,7 @@ jobs:
133141
shell: bash
134142
run: |
135143
set -euo pipefail
144+
npm run test:docs:vextjs -- "$VEXT_ROOT"
136145
docker pull mongo:8.0
137146
node scripts/validation/vextjs-consumer.mjs "$VEXT_ROOT" "$VEXT_SOURCE_COMMIT" --https
138147
- uses: actions/upload-artifact@v4

‎CONTRIBUTING.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737

3838
文档材料维护:最小 acme.http/route 对照为 test/fixtures/website/minimal-provider,输入来自公开页面;test/fixtures/website/advanced-provider 是独立的关系、知识、Specification 高级回归,不能暗中给最小教程补文件。两者由 check:examples 分别验证,不向读者解释内部夹具组织。
3939

40-
VextJS 已有原生 Provider/Runtime 源码参考与默认合同回归,固定来源下另有真实 MCP、TCP Session 和文档来源矩阵验证。根 `npm test` 对该集成的证明范围仍为 `Contract-only`;需要外部源码、安装快照或服务的验证应单列前置条件、命令、来源身份及结果,不作为通用生产认证或 Agent 任务成功的证据。具体入口与兼容边界见 [examples/vextjs/README.md](examples/vextjs/README.md)。新增 `Runnable` 声明需要真实自动执行路径、公开包入口及页面同源验证,不能只补代码或状态标签。
40+
VextJS 是有前置条件的可运行源码示例,固定来源已有真实 MCP、TCP Session、官方文档和独立实装业务验证。根 `npm test` 只覆盖默认接入合同;需要外部源码、安装快照或服务的验证应单列前置条件、命令、来源身份及结果,不作为通用生产认证或 Agent 任务成功的证据。具体入口与兼容边界见 [examples/vextjs/README.md](examples/vextjs/README.md)。新增 `Runnable` 声明需要真实自动执行路径、公开包入口及页面同源验证,不能只补代码或状态标签。
4141

4242
主题覆盖依赖固定的 Rspress 2.0.22 搜索 hook/SuggestItem 内部入口;保留其本地索引和排序,覆盖事件、模态与失败恢复。显式重试或失败后重开须重建失败搜索器及请求缓存,成功搜索器继续复用;不得直接修改 node_modules。侧栏覆盖布局按 ≤768px,目录展开按 ≤1279px,触发器/关闭按钮/模态语义与布局同步,跨断点必须释放滚动和 inert。升级依赖时运行 check:types 与完整浏览器回归,特别是索引 503 恢复、空/关闭搜索 Enter、IME、焦点约束、导航/搜索叠加、跨断点、目录 Escape 和折叠语义。侧栏与分区快速跳转只从同一 _meta 派生,不另建导航配置。
4343

‎README.md‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,22 @@ Capability Graph 为 Provider 自有的 API、MCP 等接入提供协议无关的
1212
- [贡献与维护](CONTRIBUTING.md)
1313
- [未发布改动](changelogs/unreleased.md)
1414
- [1.0.1 迁移与变更](changelogs/1.0.1.md)
15-
- [1.1.0 待发布变更](changelogs/1.1.0.md)
15+
- [1.1.0 变更](changelogs/1.1.0.md)
1616
- [1.0.0 变更](changelogs/1.0.0.md)
1717
- [许可证](#license)
1818

1919
<a id="status"></a>
2020

2121
## 当前状态
2222

23-
Registry 当前已发布 `1.0.1`;仓库为待发布 `1.1.0`。新目录模式、知识根别名及正文分页需使用本仓库构建的安装包;提交源码不会发布 npm 包或部署站点。主包只有 ESM 根入口,固定依赖 BCP 47 解析器与 IANA 注册表数据;MCP 示例为独立私有包,不导出 `./mcp`。文档源码位于 [website](website/)。
23+
本文与仓库教程对应 `1.1.0`。先查询确切版本,确认 Registry 可用后安装;未发布时按[安装页的固定源码步骤](website/docs/getting-started/installation.mdx)构建。网络或镜像失败不代表版本不存在。主包只有 ESM 根入口,固定依赖 BCP 47 解析器与 IANA 注册表数据;MCP 示例为独立私有包,不导出 `./mcp`。
2424

2525
```sh
26-
npm install @devcodex/capability-graph@1.0.1
26+
npm view @devcodex/capability-graph@1.1.0 version
27+
npm install @devcodex/capability-graph@1.1.0
2728
```
2829

29-
上面的 Registry 命令安装已发布 1.0.1。使用下文的目录模式、知识根和分页功能,请先按[当前预览版安装说明](website/docs/getting-started/installation.mdx)构建并安装 1.1.0。本仓库教程与[已部署站点](https://devcodex-labs.github.io/capability-graph/)可能处于不同版本;首次接入按[最小 Provider](website/docs/getting-started/first-provider.mdx)开始,再按[进阶教程](website/docs/guides/progressive-discovery.mdx)增强。
30+
首次接入按[最小 Provider](website/docs/getting-started/first-provider.mdx)开始,再按[进阶教程](website/docs/guides/progressive-discovery.mdx)增强。已有 1.0.1 用户参照[升级清单](website/docs/getting-started/installation.mdx#从-101-升级到-110)。[站点](https://devcodex-labs.github.io/capability-graph/)的 `release.json` 记录实际包版本和文档提交;源码提交本身不会发布包或部署站点。
3031

3132
已实现文件权威加载、校验、单 Provider 正式图、跨 Provider 联合目录、范围控制、修订快照、按需知识读取,以及可插拔的数据库、检索和 Runtime 合同。真实 Seed 同时提供普通 API 与 MCP 接入。
3233

@@ -108,7 +109,7 @@ directory 只收集 capabilities/**/*.json,缺少目录、目录外遗留定
108109
| `queryKnowledge` | 对已选知识执行检索,校验证据、内容版本与片段边界 |
109110
| `queryRuntime` | 查询单 Provider、指定项目和环境下的运行实例 |
110111

111-
大文档使用 `readDocumentPage` / `readSpecificationPage`,模型决定范围与是否续读。默认 32 KiB 是页大小,文档总大小不设准入门槛;全文与本页哈希分开,内容变化拒绝旧游标。旧全文接口保持完整返回语义,超过单次响应容量时改用分页。
112+
大文档使用 `readDocumentPage` / `readSpecificationPage`,模型决定范围与是否续读。`read.maxBytes` 保留全文单篇返回预算,默认 32 KiB;`read.maxPageBytes` 独立控制页大小,默认 32 KiB,文档总大小不设准入门槛;全文与本页哈希分开,内容变化拒绝旧游标。旧全文接口保持完整返回语义,超过单次响应容量时改用分页。
112113

113114
已知身份可直接查详情或读取,不强制从目录开始。第一轮目录只含能力摘要;显式选择由调用者决定,Core 只沿 `requires` 补齐必要上下文。分页必须保留过滤条件及修订;检查 `meta.completeness`、`warnings` 和 `nextCursor`,不能把部分结果当成全集。批量结果逐项检查 `ok`。
114115

‎changelogs/1.1.0.md‎

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
1-
# 1.1.0(待发布)
1+
# 1.1.0
22

3-
此版本尚未发布到 Registry。源码与类型版本为 1.1.0;发布必须使用匹配的包与站点制品。
3+
本记录对应 1.1.0。安装可用性以 Registry 的确切版本查询为准;发布使用匹配的包与站点制品。
44

55
- 显式 `definitionLayout: 'directory'` 收集 `capabilities/**/*.json`,不再要求 `.capability` 后缀。旧配置缺省 `legacy`;同记录和 locator 的迁移保留逻辑身份及 Static Revision。混用、嵌套 Provider、错误目录、链接定义、大小写冲突和重复身份明确失败。
66
- 每 Provider 的 `knowledgeRoots` 可绑定获准目录或实际安装包;`relative-file` 的 `root` 引用别名,支持 scoped/pnpm、中文和空格,保留真实路径边界及私有来源上下文。
77
- 正文分页不设文档总大小准入门槛;模型选择范围和是否续读。全文与分页保留原始 BOM/CRLF,MD/MDX MIME 一致,全文哈希与本页哈希分别表达。
8+
- 全文单篇预算 `read.maxBytes` 保持兼容,新增独立 `read.maxPageBytes` 控制分页/流块;段落边界采用线性扫描并保留 CRLF 原始偏移。
89
- KnowledgeReader 新增可选 isContentCurrent 强来源核验合同;正文续页可复用有界私有副本,HTTP 参考用条件 HEAD/强 ETag,减少重复完整扫描。普通文件、弱验证器及缓存未命中继续完整核验,内容变化拒绝旧游标。缓存每实例最多 4 MiB、16 条,文档不设大小准入限制。
910
- 外部检索即使不调用 access,也核验全部来源与命中范围,包括零命中。数据库 Catalog 与全部八类关系检查完整性,漏项和假空流明确失败。
1011
- Runtime 保留白名单修订/上下文错误及安全动作,移除 Adapter 私有 message/details;期限或未知异常仍为 unavailable。
1112
- HTTP 与词法检索源码参考增加宿主代理 Agent、强 ETag 完整快照复用和受预算约束的流式 Top-K。缓存预算不限制文档大小。
1213
- VextJS 固定源/安装构建指纹、原生回读、官方章节映射、独立召回门槛与 MonSQLize 双 Provider 真实来源矩阵可复现。来源材料与作者关联分别溯源,文档验证不代表功能执行或 Agent 成功。
1314
- VextJS verified 导出绑定物理来源根、固定提交与逐篇 Git blob;CI 增加全部 91 篇官方文档、46 个主题的 63 条独立任务,以及全新安装项目业务验收。参考能力检索使用中文词组、常见否定处理和词项加权,仍是有限词法参考。
15+
- 文本参考检索器增量统计流式 UTF-8 字节,空词项块不占用缓存条目;性能基准按实际索引缓存状态区分冷查询、命中、容量溢出及零命中,持续核验来源和原始片段偏移。
1416

15-
迁移:旧定义无需批量重命名;使用目录模式时迁移文件并同步配置,不混用旧目录外定义。新增接口不能在 Registry 1.0.1 上验证。外部知识索引需实际来源 Reader;数据库 Adapter 需完整支持八类关系。失效的索引/游标由宿主显式刷新和 invalidate/rebuild,Core 不自动更新后端。
17+
- VextJS 统一标记为固定来源、有前置条件的可运行源码示例;首次导出和发现教程直接还原为真实安装消费者验证,检索任务与 Jobs 的证明范围分别说明。
18+
- 站点改善浅色/深色文字对比度、文档选项语义、隐藏锚点与宽表格键盘操作;加入独立无障碍检查与常见任务词搜索回归。
19+
- 安装文案使用确切版本查询与固定提交源码回退,补齐 1.0.1 升级路径;发布校验拒绝过时文案,发布门禁复用同一冻结提交的 Core、VextJS、Docs 兼容工作流。
20+
- 开发工具升级 YAML,并覆盖 FTP 间接依赖的安全版本;生产依赖与主包入口保持原范围。
1621

17-
主包仍为单一 ESM 入口;VextJS、HTTP、MCP 是源码参考,未新增主包专用后端导出。详细未发布历史见 [unreleased.md](unreleased.md)。
22+
迁移:旧定义无需批量重命名;使用目录模式时迁移文件并同步配置,不混用旧目录外定义。新增接口需安装 1.1.0;是否已发布以 Registry 查询为准,未发布时使用同提交源码构建。外部知识索引需实际来源 Reader;数据库 Adapter 需完整支持八类关系。失效的索引/游标由宿主显式刷新和 invalidate/rebuild,Core 不自动更新后端。
23+
24+
主包仍为单一 ESM 入口;VextJS、HTTP、MCP 是源码参考,未新增主包专用后端导出。开发记录见 [unreleased.md](unreleased.md)。

‎changelogs/unreleased.md‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
- MCP 增加 Collection 与检索协议回归;新增 `npm run evaluate:capacity`,从仓库外的真实文件来源执行多 Provider 混合查询、reload、close 验证,报告同样保存在仓库同级目录。
88
- 文档测试移到根 `test/website`,固定材料移到 `test/fixtures/website`,验证工具移到 `scripts/validation/website`。站点生成片段、制品、临时消费者、截图与报告位于仓库同级 `capability-graph-artifacts`;Docs CI 同步输入路径并增加 Firefox/WebKit 代表性冒烟。
99

10-
以上为仓库中的未发布改动,不能据此认为 Registry 的 `1.0.1` 或公网站点已经更新。Core 变化须走新版本的包发布,再部署匹配文档;保留现有发布、防回退和制品身份校验。
10+
上述 1.1.0 内容汇总于 [版本记录](1.1.0.md)。实际发布与站点版本以 Registry 和站点 release.json 为准。
1111

1212

13-
## 待发布 1.1.0
13+
## 1.1.0 汇总
1414

1515
- 新增显式 directory 文件布局:capabilities/**/*.json;旧配置缺省 legacy。能力身份取 capabilityId,布局迁移不改变同记录修订。错误目录、混用、嵌套 manifest 和文件冲突明确失败;Seed、MCP 与站点消费者教程一起迁移。
1616
- 新增每 Provider knowledgeRoots 与 relative-file locator.root。显式获准目录、scoped/普通安装包、pnpm 真实根和 Unicode/空格路径可直接读取;私有路径不进入 Retriever 或结果。
@@ -19,4 +19,6 @@
1919
- HTTP 源码参考支持宿主代理 Agent、强 ETag 完整快照复用和无验证器/超缓存预算流式回退;参考索引按计账字节/条目预算保留,超额流式 Top-K,文档总大小不设准入上限。
2020
- VextJS 固定源码/安装构建指纹、原生回读、独立任务召回门槛、官方章节关联与 VextJS/MonSQLize 双 Provider 来源矩阵可复现。无官方章节关联的原生条目明确单列,文档验证不等同于执行或 Agent 成功。
2121

22-
外部索引须配置真实来源 Reader;无需调用 access 才能接入,但未经核验的自报哈希不能继续充当 current 证据。数据库 Adapter 须完整返回八类关系,漏项会明确拒绝。新 API 当前仅仓库构建可用;本次不发布 Registry/tag 或部署站点。
22+
外部索引须配置真实来源 Reader;无需调用 access 才能接入,但未经核验的自报哈希不能继续充当 current 证据。数据库 Adapter 须完整返回八类关系,漏项会明确拒绝。新 API 需对应版本的安装包;源码提交不会自动发布 Registry/tag 或部署站点。
23+
24+
- `read.maxPageBytes=32768` 与旧全文单篇 `read.maxBytes` 分离;大文档继续完整分页,短段落边界扫描不再反复计算所有 UTF-8 前缀。

‎examples/seed-runtime/README.md‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616

1717
分块保留 UTF-8 BOM 和补充字符,偏移对应原始正文的字节。缓存按选择做 LRU 淘汰;即便正文和静态修订相同,切换知识根目录仍须失效旧映射。每次检索固定读取预算、分块和停用词配置;invalidate 按 Provider 标记在途请求,旧请求可以完成原来的快照,但不能在失效后回填旧缓存或覆盖新缓存。无关 Provider 的失效保持隔离,查询结束时释放在途标记。来源读取失败不会伪装成缓存成功,能力索引重建超容量也不会发布半个索引。这些边界分别由根 `test/http-retrieval.test.ts` 和 `test/text-retrieval.test.ts` 通过真实来源验收。
1818

19+
流式分块增量统计 UTF-8 字节,避免短行密集时反复统计整个剩余字符串。空行、纯标点或停用词过滤后没有词项的块仍推进原始字节偏移,但不占用索引缓存条目;缓存预算不足时仍完成全文扫描和 Top-K 检索。
20+
21+
构建 Core 和测试源码后,可运行 `node scripts/validation/knowledge-profile.mjs` 测量受控 HTTP 来源。基准分别覆盖可缓存、短行密集和容量溢出场景,每个场景使用独立检索器及固定选择,记录实际 `cachedSelections`、`cachedEntries`、`cachedBytes`,分别汇总冷查询、索引缓存命中、未命中和零命中。索引命中仍会核验实际来源,不表示免除 HTTP 读取;无样本的耗时字段为 null,缓存字节计账也不等于堆内存峰值。
22+
1923
检索按已选 targets 重查内容身份,零命中也需要有效证据。静态定义、正文或分块配置变更后,由接入方显式重建或调用 invalidate,Core 不自动刷新。这条路径使用零次模型调用,证明本机 HTTP 和检索链路,不证明语义搜索质量或 Agent 任务成功率。临时 Provider 位于仓库同级 `capability-graph-artifacts`,结束后关闭 Reader、graph、HTTP 服务并清理自建目录。正式回归位于根 `test/http-retrieval.test.ts` 和 `test/text-retrieval.test.ts`。
2024

2125
## 运行

0 commit comments

Comments
 (0)