Enable canonical versioned Go module consumption

Why: Allow consumers to download an immutable module revision without nested source checkouts or local path replacements.

Evidence: SELF package tests and the prior canonical-path rejection are recorded in the Dev dependency-workspace task card; remote consumption is replayed against the committed candidate.

Impact: Change the module identity and its Go imports while preserving API behavior. Existing historical submodule revisions remain buildable.

Refs: Versioned dependencies U1/U3; feature/dependency-workspace
This commit is contained in:
2026-10-13 15:36:11 +00:00
parent 343b1e6d9a
commit 3a8468c83a
12 changed files with 34 additions and 37 deletions
+7 -7
View File
@@ -5,10 +5,10 @@
## 仓库与操作
- 目标/产品边界:通用意图识别基础库。提供意图定义(spec)、注册表与配置合并(registry/loader)、四级漏斗识别器(guard → expectation → rules → adjudicate)、槽位抽取与诊断(conformance/catalogcheck/intentctl)。不做动作执行、不内置 LLM 客户端、不含任何业务意图内容,不依赖 Agent-Native / Agent-Squad / Agent-System。
- 源码、资产、文档、机器契约位置:Go 源码在仓库根包目录;模块路径 `agent-intent`;人类文档在根 `README.md`、`docs/`、`policy/`;过程记录在 `docs/records/`;机器契约以 `intent` 包公开类型为准。
- 源码、资产、文档、机器契约位置:Go 源码在仓库根包目录;模块路径 `git-ssh.u1680832.nyat.app/weichen/Agent-Intent.git`;人类文档在根 `README.md`、`docs/`、`policy/`;过程记录在 `docs/records/`;机器契约以 `intent` 包公开类型为准。
- 权威远端、集成基线、受保护分支:`ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Intent.git`,集成基线 `main`。
- 并行共同基线记录位置、合入通知/主动检查方式:任务主记录在 Gitea Issue/PR;合入前在本仓 `main` 上 `git fetch` 并确认 HEAD。
- 发布线与批准版本/实际制品查询入口:当前无独立制品仓库。可构建性以本仓 `main` 的 `go test` 为准;依赖子模块版本以 gitlink 为准,不把工作区未提交文件当发布组合。
- 发布线与批准版本/实际制品查询入口:当前无独立制品仓库。可构建性以本仓 `main` 的 `go test` 为准;Go 依赖以 `go.mod` / `go.sum` 为准,不把工作区未提交文件当发布组合。
- 提交/审核/合并/发布身份与权限:仓库所有者 weichen。本机提交不代替远端合并。
- 任务唯一来源:Gitea `weichen/Agent-Intent` 的 Issue 与 Pull Request。
- 规范性文档目录:`policy/`。
@@ -21,8 +21,8 @@
| 逻辑 ID | 路径 | 角色 |
|---|---|---|
| development-guidelines | `deps/development-guidelines` | development-only,规范文本 |
| error-code-system | `deps/error-code-system` | build-required,规范码目录(catalogcheck 对齐 + `intent.*` 常量值) |
| logging-system | `deps/logging-system` | build-required,可选日志器 |
| error-code-system | `go.mod` / `go.sum` | build-required,规范码目录(catalogcheck 对齐 + `intent.*` 常量值) |
| logging-system | `go.mod` / `go.sum` | build-required,可选日志器 |
克隆:
@@ -31,9 +31,9 @@ git clone --recurse-submodules ssh://git@git-ssh.u1680832.nyat.app:31411/weichen
# 已克隆时:git submodule update --init --recursive
```
构建、审核和发布固定父仓 gitlink,不执行 `submodule update --remote`。
Go 构建、审核固定 `go.mod` / `go.sum` 版本,正式消费使用 `GOWORK=off`。既有源码 gitlink 暂留用于旧提交与在途分支重建;开发规范仍由 gitlink 固定。
消费方(Agent-Squad / Agent-Native)接入本仓时须自带全部 replace:依赖模块内部的 replace 在上层构建中不生效。
消费方接入完整模块路径的批准提交,由 `go get MODULE@COMMIT` 生成版本;本地联调由 Dev 显式链接组件,不写入正式 `go.mod`。
## 验证命令
@@ -42,7 +42,7 @@ git clone --recurse-submodules ssh://git@git-ssh.u1680832.nyat.app:31411/weichen
| 文档 | 人工核对 `AGENTS.md`、`PROJECT.md`、`policy/` 相对链接 | 不证明运行时行为 |
| 模块/接口 | 仓库根:`GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./...` | 需要 Go 1.27 |
| 并发/快照隔离 | 仓库根:`GOWORK=off go test -count=1 -race ./...` | 覆盖 Reload 与识别并发 |
| 依赖纪律 | 仓库根:`GOWORK=off go list -m all` 仅标准库 + 两个生态模块 | 不证明宿主接入正确性 |
| 依赖纪律 | 仓库根:`GOWORK=off go list -m all` 核对生态模块及 `golang.org/x/text` 的实际版本 | 不证明宿主接入正确性 |
| 宿主行为验收 | 消费方仓内跑 `conformance.Run` | 本命令不覆盖真实宿主配置 |
## 环境与数据
+8 -10
View File
@@ -2,7 +2,7 @@
可定义、可配置、可扩展的通用意图识别基础库:把「输入文本 → 意图 + 槽位 + 分支裁决」做成纯内存、确定性的库能力,供宿主在 LLM 之前完成确定性分流——守卫拦截(安全红线、识别即拒绝)、系统功能命令识别、路由提示与多轮澄清入口。
本仓库是该模块的源码位置。Go 模块路径为 `agent-intent`。不依赖 Agent-Native、Agent-Squad 或任何第三方模块;错误码与日志和 Error-Code-System / Logging-System 轻接入对齐(常量对齐 + 鸭子接口,核心包不依赖错误码库)。
本仓库是该模块的源码位置。Go 模块路径为 `git-ssh.u1680832.nyat.app/weichen/Agent-Intent.git`。不依赖 Agent-Native 或 Agent-Squad;文本处理依赖 `golang.org/x/text`,错误码与日志和 Error-Code-System / Logging-System 轻接入对齐(常量对齐 + 鸭子接口,核心包不依赖错误码库)。
设计目标与边界:
@@ -128,27 +128,25 @@ go run ./cmd/intentctl catalog -root configs/intents # 能力目录(注入
错误常量与 Error-Code-System 对齐(`intent.invalid_spec` / `intent.spec_protected` / `intent.load_failed`,调用方错误复用 `sys.invalid_argument`),`catalogcheck` 测试防双权威;映射表见 [Error-Code-System 的 agent-intent 映射](deps/error-code-system/docs/agent-intent-mapping.md)。错误类型实现 `ErrorCode()` / `ErrorFields()`,logsys 自动展开码与字段。日志为可选注入(`Options.Log`,nil→Nop),事件:`intent recognized`(branch/top/confidence/revision/duration)、`intent snapshot reloaded`、`intent config rejected`;原始输入不写入日志。
## 作为 submodule 使用
## 版本依赖与消费
消费方把本库固定为 submodule,推荐路径 `deps/agent-intent`;版本以消费方 gitlink 为准,不执行 `submodule update --remote`:
消费方在已配置私有传输的环境中获取批准提交,由 Go 写入实际版本:
```bash
git submodule add ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Intent.git deps/agent-intent
go get git-ssh.u1680832.nyat.app/weichen/Agent-Intent.git@<approved-commit>
GOWORK=off go test ./...
```
```text
require agent-intent v0.0.0
replace agent-intent => ./deps/agent-intent
```
`go.mod` / `go.sum` 固定错误码与日志依赖,无源码目录 `replace`。正式构建使用 `GOWORK=off`;本地源码联调通过 Dev 的显式组件链接管理。接入后建议在消费方测试里用 `conformance.Run` 跑自己的用例集。
依赖模块内部的 replace 在上层构建中不生效:消费方须自带 `error-code-system` 与 `logging-system` 的 require + replace,并保持与本仓 gitlink 相同的组合。接入后建议在消费方测试里用 `conformance.Run` 跑自己的用例集。
既有 `deps/` gitlink 暂留供旧提交和在途分支重建;本版本 Go 编译不消费这些目录,开发规范仍固定于 `deps/development-guidelines`。在途分支显式迁移 import 与模块前缀,不改意图、命令或历史事件标识。
## 验证
```bash
GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./...
GOWORK=off go test -count=1 -race ./...
GOWORK=off go list -m all # 仅标准库 + 两个生态模块
GOWORK=off go list -m all # 核对固定版本与 MVS 解析结果
```
需要 Go 1.27。规则入口见 [AGENTS.md](AGENTS.md),项目事实见 [PROJECT.md](PROJECT.md),设计与验证记录见 `docs/records/`。
+3 -3
View File
@@ -5,10 +5,10 @@ package catalogcheck
import (
"testing"
_ "error-code-system/domains" // 填充 errcode.Default 种子码
"error-code-system/errcode"
_ "git-ssh.u1680832.nyat.app/weichen/Error-Code-System.git/domains" // 填充 errcode.Default 种子码
"git-ssh.u1680832.nyat.app/weichen/Error-Code-System.git/errcode"
"agent-intent/intent"
"git-ssh.u1680832.nyat.app/weichen/Agent-Intent.git/intent"
)
func TestIntentCodesAlignWithCatalog(t *testing.T) {
+1 -1
View File
@@ -11,7 +11,7 @@ import (
"sort"
"strings"
"agent-intent/intent"
"git-ssh.u1680832.nyat.app/weichen/Agent-Intent.git/intent"
)
func main() {
+1 -1
View File
@@ -9,7 +9,7 @@ import (
"sync"
"testing"
"agent-intent/intent"
"git-ssh.u1680832.nyat.app/weichen/Agent-Intent.git/intent"
)
// Case 单条行为验收用例。ExpectTopID 为空断言 Top 为 nil;
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"testing"
"testing/fstest"
"agent-intent/intent"
"git-ssh.u1680832.nyat.app/weichen/Agent-Intent.git/intent"
)
func TestRunAcceptsCompliantRecognizer(t *testing.T) {
+2 -2
View File
@@ -7,8 +7,8 @@ import (
"embed"
"testing"
"agent-intent/conformance"
"agent-intent/intent"
"git-ssh.u1680832.nyat.app/weichen/Agent-Intent.git/conformance"
"git-ssh.u1680832.nyat.app/weichen/Agent-Intent.git/intent"
)
//go:embed specs/*.json
+4 -9
View File
@@ -1,14 +1,9 @@
module agent-intent
module git-ssh.u1680832.nyat.app/weichen/Agent-Intent.git
go 1.27
require (
error-code-system v0.0.0
logging-system v0.0.0
git-ssh.u1680832.nyat.app/weichen/Error-Code-System.git v0.0.0-20261013150648-28d2d5074347
git-ssh.u1680832.nyat.app/weichen/Logging-System.git v0.0.0-20261013150647-9c5442f06d05
golang.org/x/text v0.29.0
)
require golang.org/x/text v0.29.0 // indirect
replace error-code-system => ./deps/error-code-system
replace logging-system => ./deps/logging-system
+4
View File
@@ -1,2 +1,6 @@
git-ssh.u1680832.nyat.app/weichen/Error-Code-System.git v0.0.0-20261013150648-28d2d5074347 h1:mESnwe9ZpZqpLoGPzLyCWEmXDHKm7ouKC8qpF8EztEQ=
git-ssh.u1680832.nyat.app/weichen/Error-Code-System.git v0.0.0-20261013150648-28d2d5074347/go.mod h1:b8CDy31Xo3uRzAhA3HldwcgNnk0x5Lb02osIb9ewJ3A=
git-ssh.u1680832.nyat.app/weichen/Logging-System.git v0.0.0-20261013150647-9c5442f06d05 h1:gtFuWlGr7GlpEkuoIfIw6f/uXHUlYXlHU2qgLWAV46Y=
git-ssh.u1680832.nyat.app/weichen/Logging-System.git v0.0.0-20261013150647-9c5442f06d05/go.mod h1:Jg/bDRsd1/g5YjIoEUYkCsTgJOrTolYccfyb/tc57Dk=
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"strings"
"time"
"logging-system/logsys"
"git-ssh.u1680832.nyat.app/weichen/Logging-System.git/logsys"
)
// Recognizer 是识别的公开端口(Query 语义:纯函数式、无副作用)。
+1 -1
View File
@@ -11,7 +11,7 @@ import (
"sync"
"sync/atomic"
"logging-system/logsys"
"git-ssh.u1680832.nyat.app/weichen/Logging-System.git/logsys"
)
// Options 注册表与识别器的共享选项。零值字段在构建时填入默认值;
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"os"
"testing"
"agent-intent/intent"
"git-ssh.u1680832.nyat.app/weichen/Agent-Intent.git/intent"
)
func TestIntentSpecRoundTrip(t *testing.T) {