Skip to content
Merged
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: "1.26.10"
go-version: "1.26.11"
cache: true

- name: Check formatting
Expand Down
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ doc/ 权威文档
### 5.1 工具链

- Windows 10/11 + **PowerShell 7(`pwsh`)**;
- **Go 1.26**(`go.mod` 声明 `go 1.26.0`;固定工具链 Go 1.26.10);
- **Go 1.26**(`go.mod` 声明 `go 1.26.0`;固定工具链 Go 1.26.11);
- MSYS2 UCRT64 **GCC/G++ 16.1.0**,`CGO_ENABLED=1`;
- golangci-lint 2.12.2+(可选,本机当前未安装)。

Expand Down Expand Up @@ -181,7 +181,7 @@ if ($unformatted) { $unformatted; throw "gofmt found unformatted files" }
### 5.4 CI

`.github/workflows/ci.yml`:push / PR 触发,`windows-latest` + `pwsh`,
步骤 = checkout → setup-go(固定 Go 1.26.10)→ gofmt 检查 → `go vet` → `go build` → `go test` → 固定版本 `govulncheck`。
步骤 = checkout → setup-go(固定 Go 1.26.11)→ gofmt 检查 → `go vet` → `go build` → `go test` → 固定版本 `govulncheck`。
本地基础验证门与 CI 保持一致;race detector 是并发相关改动的本地追加门,当前 CI 未覆盖,
不得把本机 race 结果表述成 CI 证据。

Expand Down
38 changes: 38 additions & 0 deletions doc/current/M10/设计-T10.18-Go安全更新.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# T10.18 Go 安全更新

日期:2026-11-12。

PR #35 的 [CI 43145779274](https://github.com/AUTO-MAS-Project/AUTO-MAS-Runtime/actions/runs/43145779274)
已通过格式、vet、build 和完整测试,唯一失败为 govulncheck 报告 net/http@go1.26.10 的
GO-2026-6859,可达链涉及下载、中继和健康 HTTP 调用;检查注明修复于 go1.26.11。
[Go 官方下载](https://go.dev/dl/#go1.26.11) 已提供对应版本。

范围是 go.mod 的 toolchain、CI 的 setup-go 固定版本和 AGENTS.md 当前开发说明。
保留 go 1.26.0 语言版本、固定 govulncheck@v1.9.0、依赖版本、Action SHA 和全部检查。
本地由标准 GOTOOLCHAIN=auto 选择工具链,不替换全局 Go 安装,不改 Runtime 协议或业务代码。

验证使用真实工具链与漏洞扫描,不增加复述版本字符串的单元测试。执行计划:

1. 保存旧工具链的固定 govulncheck 失败,确认错误是 GO-2026-6859。
2. 只改 go.mod、.github/workflows/ci.yml 和 AGENTS.md 三处当前配置。
3. 确认 go version 实际为 go1.26.11,执行 gofmt、vet、build、完整 test、diff check 和固定 govulncheck。
4. 构建临时 EXE,用 go version -m 确认实际工具链;按用户授权提交并推送 #35,跟踪最新 Windows CI。
5. 本机已知 SUBST、Job 和 TempDir 清理限制如实记录,远端完整 CI 必须包含漏洞检查成功。

代码和设计提交范围仅为上述三文件及本设计;任务进度和最终验收独立提交。
不触发合并、安装版替换、Tag、签名或 Release。

## 本地验收

实现提交 `474fb13`。旧 Go 1.26.10 的固定 govulncheck 命令退出 1,工具退出状态 3,
准确报告 GO-2026-6859;同一业务代码切换为 Go 1.26.11 后,固定命令退出 0、可达漏洞 0。
仍有 3 项 require 模块级提示,但不在导入或可达调用中,不把扫描结果表述为所有依赖零提示。

`go version` 和临时 EXE 的 `go version -m` 均确认为 go1.26.11 windows/amd64。
gofmt 无输出,vet、build、diff check 退出 0;完整 `go test ./... -count=1` 退出 1,
仅有先前已在未修改基线复现的 SUBST W: 未就绪和 breakaway Job 归属断言失败,其余包全通过,
包括 filesystem、CLI、backend Windows E2E、release 和 telemetry。没有修改相关实现或夹具。
没有生产并发改动,本机原有 CGO/gcc 限制未处理,不新增 race 通过结论。

证据与候选 EXE 保存在 `%TEMP%/auto-mas-pr35-go-20261112/`。待 #35 本轮 Windows CI 验收,
任务在合入前保持进行中,不触发发布。
56 changes: 56 additions & 0 deletions doc/current/M12/计划-T12.11-锁依赖与恢复诊断.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# T12.11 实施计划

## 会话增补

代码提交范围:`internal/cli/{backend,cli,session,telemetry,session_diagnostics}.go`、
`internal/cli/{contract_staging,telemetry,session_diagnostics}_test.go`、
`internal/filesystem/{state_files,state_files_windows,state_diagnostics_windows_test}.go`、
`internal/logging/{logger,volume}.go`、`internal/state/{diagnostics,diagnostics_test,errors,write}.go`、
`internal/telemetry/{diagnostics,observer,observer_test,sentry,runtime_context_test}.go`,
以及本设计/计划和架构增补。任务进度与最终验收独立提交。

1. 先增加 TestSessionDiagnostics_Lifecycle、TestSessionDiagnostics_EarlyFailure、
TestSessionDiagnostics_ReadOnly、TestSessionDiagnostics_Concurrent:真实文件中验证版本、操作 ID、
成功摘要、阶段计时、状态顺序及早期失败;只读成功无日志。确认原实现字段缺失红灯。
2. 增加 TestSentry_CorrelationReceipt、TestSanitizeDiagnostics_RuntimeContext、
TestStateErrors_DiagnosticDetails、TestStateFiles_FailureUnlinkMode,确认缺失字段红灯;
实现 renderer 装饰、事件回执 API、白名单及状态模式快照,所有替身同步迁移。
3. 定向测试 -count=10 -v,完整基础门、protocol -count=100 和完整 race;
审查实际文件和 fake transport。代码提交后独立提交验收记录,继续更新 PR #35。

1. 锁与通用观察:扩展锁故障夹具与 CLI 回归,确认缺少操作/系统错误码的红灯,再实现诊断接口和错误链合并。
固定用例 `TestNewSet_FailureDiagnostics`、`TestRunOperation_PreservesNestedFailureDiagnostics`。
2. 依赖:中继同步退出 0 且输出读取失败,诊断必须保留底层分类,协议和清理保持原状。
固定用例 `TestDependencies_RelayPreservesExecutionDiagnostics`,扩展现有失败阶段测试。
P2 复审:`TestDependencies_MirrorFallbackPreservesExecutionDiagnostics` 覆盖中继启动失败后的官方回退和仅镜像耗尽,最后一次失败必须与之前尝试区分。
3. 恢复:扩展 `TestRecovery_SwapDamagedRepositoryWithPreviousHasNoSideEffects` 和
`TestRecovery_NonCloneReaderFailureRemainsAmbiguous`,先证明缺少快照再补局部快照。
4. 最终出口:`TestSentry_OperationalFailureDiagnostics` 验证两种新增容器、执行分类与隐私净化;
检查协议未增加诊断字段、离线/关闭路径保持。完成后回写设计与任务证据。
5. 状态失败补齐:先增加 `TestWriteError_DiagnosticDetails`、`TestReadError_DiagnosticDetails`、
`TestSentry_StateFailureDiagnostics`、`TestBootstrap_EarlyStateFailureIsRecorded`、
`TestRunOperation_StateDiagnosticsRespectSelectedFailure`、`TestRecordOperationFailure_StateErrorChain`
与 `TestRunOperation_StateFailureLogFallback`,确认现有实现缺少字段或文件记录,再实现最小改动。
`TestLocalStateErrorChain_Bounds` 验证本地错误链数量、文本与 UTF-8 边界。
文件为 `internal/state/diagnostics{,_test}.go`、`internal/cli/{cli,session,telemetry,state_diagnostics}.go` 及对应测试、
`internal/telemetry/{diagnostics.go,sentry_test.go}`。提交前检查暂存清单只含这些文件与本任务文档。
定向回归通过后执行完整标准门与审查,追加到现有 PR #35,不合并、发布或替换安装版。

6. 目录操作:先补 `TestSwapper_OperationDiagnostics`、`TestFetcher_CleanupDiagnostics`、
`TestSentry_RepositoryFailureDiagnostics` 及 CLI 本地结构诊断回归,再修改 gitrepo 错误和操作边界。
文件为 `internal/gitrepo/{errors,operation_diagnostics,swap,clone,recovery}.go` 及对应测试、
`internal/cli/{workspace,session}.go` 及测试、遥测白名单与本任务文档。
7. uv/Python:先补 `TestRunner_IsolationFailureDiagnostics`、`TestPython_InstallFailureDiagnostics`。
私有 Job 工厂确定性注入创建/Assign 失败,确认字段红灯后实现;文件为
`internal/uv/{runner,python,python_relay,network,execution_diagnostics,dependencies,dependencies_mirror}.go`
及对应测试。定向回归、全仓标准门与审查后追加现有 PR #35。

```powershell
$env:GOCACHE = Join-Path $env:TEMP 'auto-mas-runtime-verify'
go test ./internal/lock ./internal/uv ./internal/gitrepo ./internal/cli ./internal/telemetry -run 'TestNewSet_FailureDiagnostics|TestRunOperation_PreservesNestedFailureDiagnostics|TestRunOperation_DiagnosticsRespectSelectedFailure|TestDependencies_(RelayPreservesExecutionDiagnostics|MirrorFallbackPreservesExecutionDiagnostics)|TestRecovery_SwapDamagedRepositoryWithPreviousHasNoSideEffects|TestRecovery_NonCloneReaderFailureRemainsAmbiguous|TestSentry_OperationalFailureDiagnostics' -count=1 -v
if ($LASTEXITCODE -ne 0) { throw 'targeted tests failed' }
```

验证须确认出现目标 PASS 且无 `[no tests to run]`,随后执行仓库标准门。
按用户授权提交独立分支并向上游 `main` 提 PR;本机完整门的失败及基线对照范围写入正文,
等待 Windows CI 复核。未授权合并、替换安装版或发布,任务保留进行中状态。
Loading