Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
228 changes: 228 additions & 0 deletions docs/releases/3.1.0-verification.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,228 @@
{
"Version": "3.1.0",
"Commit": "d018501e8a9c4fbc54b9ff9fd583d6331667c782",
"CheckedAtUtc": "2026-10-26T07:20:27.4553541+00:00",
"ReleaseUrl": "https://github.com/CSJ608/TemplateFrame/releases/tag/v3.1.0",
"Assets": [
{
"name": "TemplateFrame.3.1.0.nupkg",
"size": 137581,
"digest": "sha256:affa8326f73cbf2e3d5ce3e33d0c1fe8ea59c978542f5509da888f7778aaafd5"
},
{
"name": "TemplateFrame.3.1.0.snupkg",
"size": 43979,
"digest": "sha256:56ee9a9c340f26a2a3b3e4c3e401b7d28948110632389141eb016a630e1aea73"
},
{
"name": "TemplateFrame.Excel.3.1.0.nupkg",
"size": 198641,
"digest": "sha256:6ca97e099c5ee6cfbd3f8fe1184691272d441c311c8df12718cb0f122f229f00"
},
{
"name": "TemplateFrame.Excel.3.1.0.snupkg",
"size": 67428,
"digest": "sha256:08c1f129769da47004f85bd5db5e8725fefb7edde4481a15bf61848d84a6fb4c"
},
{
"name": "TemplateFrame.Excel.Simple.3.1.0.nupkg",
"size": 166088,
"digest": "sha256:7f8b9f06e0176dde4145d09e8cb4569450ac2417349bf93cec81ba5db2d02cee"
},
{
"name": "TemplateFrame.Excel.Simple.3.1.0.snupkg",
"size": 60704,
"digest": "sha256:4ef09882955c0f874aeab8823a78739fee0cd0c07bb63f06de2a85800b458421"
},
{
"name": "TemplateFrame.Word.3.1.0.nupkg",
"size": 119451,
"digest": "sha256:b631e4e137d7ff2b0b5fa9b25bfe521aed261196d32eafb46f7ee27331229f03"
},
{
"name": "TemplateFrame.Word.3.1.0.snupkg",
"size": 39799,
"digest": "sha256:aaaefd96f79eb500d6b7ac73edd1231edd0525d6153cf55a45f8c3a776b1aa2f"
}
],
"Packages": [
{
"Package": "TemplateFrame",
"Version": "3.1.0",
"EntriesCompared": 15,
"RepositoryCommit": "d018501e8a9c4fbc54b9ff9fd583d6331667c782",
"Result": "Passed"
},
{
"Package": "TemplateFrame.Word",
"Version": "3.1.0",
"EntriesCompared": 15,
"RepositoryCommit": "d018501e8a9c4fbc54b9ff9fd583d6331667c782",
"Result": "Passed"
},
{
"Package": "TemplateFrame.Excel",
"Version": "3.1.0",
"EntriesCompared": 15,
"RepositoryCommit": "d018501e8a9c4fbc54b9ff9fd583d6331667c782",
"Result": "Passed"
},
{
"Package": "TemplateFrame.Excel.Simple",
"Version": "3.1.0",
"EntriesCompared": 15,
"RepositoryCommit": "d018501e8a9c4fbc54b9ff9fd583d6331667c782",
"Result": "Passed"
}
],
"SymbolDistinctSuccessCount": 12,
"Symbols": [
{
"Package": "TemplateFrame",
"Framework": "net462",
"Status": 200,
"SHA256": "2B73D8FAF6B23762C2D3B306AE947EEA565AACEADC9B1EDD4F58FC7E09EA43DB",
"Result": "Passed",
"EvidenceFile": "symbols-004c0db274934fb19fd9f4bfedebfc82.json",
"RecordedAtUtc": "2026-10-26T07:15:21.4517973Z"
},
{
"Package": "TemplateFrame",
"Framework": "net8.0",
"Status": 200,
"SHA256": "71BA1D76021A1B81FFAC5D7FCD31ED5C6407D68AFBA915FBEF802A7D0BF12AAE",
"Result": "Passed",
"EvidenceFile": "symbols-3236f60c2e8e4136a541df57477d9113.json",
"RecordedAtUtc": "2026-10-26T07:16:54.5170079Z"
},
{
"Package": "TemplateFrame",
"Framework": "netstandard2.0",
"Status": 200,
"SHA256": "F20BF8C68A16CDE34CB6ADE76B45984EE03ECE88CA9CD0EF1993E8754DBB17F7",
"Result": "Passed",
"EvidenceFile": "symbols-3236f60c2e8e4136a541df57477d9113.json",
"RecordedAtUtc": "2026-10-26T07:16:54.5170079Z"
},
{
"Package": "TemplateFrame.Excel",
"Framework": "net462",
"Status": 200,
"SHA256": "EA46E39A1AD3CF64C36CC16025F82E9ED48A5AA2E320C1E0CEF7B99257A40703",
"Result": "Passed",
"EvidenceFile": "symbols-3236f60c2e8e4136a541df57477d9113.json",
"RecordedAtUtc": "2026-10-26T07:16:54.5170079Z"
},
{
"Package": "TemplateFrame.Excel",
"Framework": "net8.0",
"Status": 200,
"SHA256": "32D089E64E7EF015BBD039427153D2A888E4B4014C28834C5D40BB4F6DBE0EC5",
"Result": "Passed",
"EvidenceFile": "symbols-68894f9cbfbd4050bf194dbe8d9695fb.json",
"RecordedAtUtc": "2026-10-26T07:19:34.3172760Z"
},
{
"Package": "TemplateFrame.Excel",
"Framework": "netstandard2.0",
"Status": 200,
"SHA256": "440CB97BCDE5A46CAD6D5030526608CE722DF83812E91A7471B5091730B98F16",
"Result": "Passed",
"EvidenceFile": "symbols-004c0db274934fb19fd9f4bfedebfc82.json",
"RecordedAtUtc": "2026-10-26T07:15:21.4517973Z"
},
{
"Package": "TemplateFrame.Excel.Simple",
"Framework": "net462",
"Status": 200,
"SHA256": "8D5C3E832A80252113DA96EA4D797B3992B595E0C747027C9A6C29468E23841F",
"Result": "Passed",
"EvidenceFile": "symbols-68894f9cbfbd4050bf194dbe8d9695fb.json",
"RecordedAtUtc": "2026-10-26T07:19:34.3172760Z"
},
{
"Package": "TemplateFrame.Excel.Simple",
"Framework": "net8.0",
"Status": 200,
"SHA256": "22054733B81B7BD90E9C93DCE38AC9244CB34888BB1D30E356671C74F2441074",
"Result": "Passed",
"EvidenceFile": "symbols-3236f60c2e8e4136a541df57477d9113.json",
"RecordedAtUtc": "2026-10-26T07:16:54.5170079Z"
},
{
"Package": "TemplateFrame.Excel.Simple",
"Framework": "netstandard2.0",
"Status": 200,
"SHA256": "AA6D74A3E3792DE5367DADE836A28E0C13236893E1C49840AAD244C9717856A2",
"Result": "Passed",
"EvidenceFile": "symbols-3236f60c2e8e4136a541df57477d9113.json",
"RecordedAtUtc": "2026-10-26T07:16:54.5170079Z"
},
{
"Package": "TemplateFrame.Word",
"Framework": "net462",
"Status": 200,
"SHA256": "0043A8CA5A699D5FAF14F5C05E3B424F2C0C092903957F5FA1E2C87D3B992BE2",
"Result": "Passed",
"EvidenceFile": "symbols-68894f9cbfbd4050bf194dbe8d9695fb.json",
"RecordedAtUtc": "2026-10-26T07:19:34.3172760Z"
},
{
"Package": "TemplateFrame.Word",
"Framework": "net8.0",
"Status": 200,
"SHA256": "7572454242CD96DE7B9F31A344EA78D01A282838800090B0DBE59DAB44839339",
"Result": "Passed",
"EvidenceFile": "symbols-3236f60c2e8e4136a541df57477d9113.json",
"RecordedAtUtc": "2026-10-26T07:16:54.5170079Z"
},
{
"Package": "TemplateFrame.Word",
"Framework": "netstandard2.0",
"Status": 200,
"SHA256": "A7859198FD4557F5CC35E24A2BCC9A66A84D011961454CACDFE7BA4D62076E51",
"Result": "Passed",
"EvidenceFile": "symbols-3236f60c2e8e4136a541df57477d9113.json",
"RecordedAtUtc": "2026-10-26T07:16:54.5170079Z"
}
],
"SymbolAttempts": [
{
"File": "symbols-573ad30fdc8e4211b098bbb178951470.json",
"RecordedAtUtc": "2026-10-26T07:07:13.5930282Z",
"Passed": 0,
"NotVerified": 12
},
{
"File": "symbols-e3aff3ab173144f183dfcff479404fd3.json",
"RecordedAtUtc": "2026-10-26T07:13:42.1769418Z",
"Passed": 4,
"NotVerified": 8
},
{
"File": "symbols-004c0db274934fb19fd9f4bfedebfc82.json",
"RecordedAtUtc": "2026-10-26T07:15:21.4517973Z",
"Passed": 4,
"NotVerified": 8
},
{
"File": "symbols-3236f60c2e8e4136a541df57477d9113.json",
"RecordedAtUtc": "2026-10-26T07:16:54.5170079Z",
"Passed": 7,
"NotVerified": 5
},
{
"File": "symbols-656fba5e58a44370b20a615828b30b56.json",
"RecordedAtUtc": "2026-10-26T07:18:08.3053186Z",
"Passed": 0,
"NotVerified": 3
},
{
"File": "symbols-68894f9cbfbd4050bf194dbe8d9695fb.json",
"RecordedAtUtc": "2026-10-26T07:19:34.3172760Z",
"Passed": 3,
"NotVerified": 0
}
],
"Limitations": "Symbols verified across retries, not a claim of simultaneous or uninterrupted availability. Earlier 404 and 200/404 fluctuations retained in local raw records. NuGet payload comparison excludes repository signature only; 60 other entries matched GitHub byte-for-byte."
}
36 changes: 36 additions & 0 deletions docs/releases/3.1.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# TemplateFrame 3.1.0 发布记录

四包统一版本 **3.1.0**,发布提交 `d018501e8a9c4fbc54b9ff9fd583d6331667c782`,正式 tag `v3.1.0`。用户确认完整发布范围、已知 SST 文本边界和 NuGet + GitHub Release 目标后执行;没有继续性能开发或调整默认资源限额。

主要内容与使用边界见 [CHANGELOG](../../CHANGELOG.md#310---2026-10-26)。新增显式流式导入/导出,保留原入口;SST 实体 CRLF 在新流式路径转为 LF 的差异已披露,未修复,不宣称新旧路径文本逐字等价。

## 发布链路

| 证据 | 结果 |
|---|---|
| 发布 PR | [#9](https://github.com/CSJ608/TemplateFrame/pull/9),head `aee932036acd0da89c5c701be8df686e0a4693ef` |
| PR CI | [40282610589](https://github.com/CSJ608/TemplateFrame/actions/runs/40282610589),Windows / Ubuntu 均成功 |
| 合并后 CI | [40282936493](https://github.com/CSJ608/TemplateFrame/actions/runs/40282936493),Windows / Ubuntu 均成功 |
| 正式发布 | [40283322176](https://github.com/CSJ608/TemplateFrame/actions/runs/40283322176),Windows test → Ubuntu release 成功 |
| OIDC 与推送 | 登录成功;V3 主包 4 次、符号包 4 次 `Your package was pushed`,没有用跳过重复代替上传 |
| GitHub Release | [v3.1.0](https://github.com/CSJ608/TemplateFrame/releases/tag/v3.1.0),2026-10-26 15:05:46(Asia/Shanghai),非草稿/非预发布,八个资产齐全 |

遵守 main 的 PR 与双平台检查保护,未使用 admin bypass、force push 或移动已有 tag。合并树与已验证 PR head 完全一致。原先本地成果均保留在合并历史中。

Release 正文来自 CHANGELOG 的 3.1.0 段;发布后仅将三处仓库内文档链接改为 `blob/v3.1.0` 的绝对链接,未改变说明内容、资产或 tag。

## 本地与制品验证

- 3.1.0 下 restore、完整 format、Release build 通过,零警告/错误;net472/net8/net10 共 2,381 次测试通过,零失败。
- 17 项目、59 个依赖版本 OSV 审计无发现,已知漏洞阳性对照通过。NuGet 元数据过期警告保留,不放宽门禁;准备阶段两次网络失败及恢复后成功已记录在[准备清单](next-preparation-2026-10-26.md)。
- 本地 4 nupkg + 4 snupkg 检查通过;正式包取自发布工作流,没有上传本地验证包。
- GitHub 八资产逐个核验 API 提供的 SHA-256 与大小;四主包的 ID/版本、三组依赖、DLL/XML/en 卫星资源、README/icon 和条目白名单均通过,四符号包含三目标 Portable PDB。README 与 Windows 工作区比较仅规范化 CRLF/LF,icon 按原始哈希比较。
- 主包公开索引与符号服务器在刚上传后尚未就绪;初次主包索引无 3.1.0,12 个新符号请求为 404。3.0.0 符号阳性对照返回 200 且完整哈希匹配。这些初次结果保留,不视为上传失败,也不冒充分发验证通过。

## 分发验收完成

四个 NuGet V3 版本索引均已包含 3.1.0,四主包实际下载成功。每包 15 个非签名 ZIP 条目、共 60 项 SHA-256 均与 GitHub 对应制品相同;NuGet 仓库签名不纳入整包等价比较。四包 nuspec 的 RepositoryCommit 均为 `d018501e8a9c4fbc54b9ff9fd583d6331667c782`。

四包 × 三目标共 12 个 Portable PDB 均已从 NuGet 符号服务下载成功,完整文件 SHA-256 与对应 GitHub snupkg 条目一致。请求按 DLL CodeView GUID 构造 key,并携带 PE PdbChecksum 的 SymbolChecksum 头,沿用 [3.0.0 已核验协议](../reviews/security-2026-10-22/symbol-protocol-reference.json)。验收跨多次重试完成,不是一次请求全部成功,也不承诺持续可用;传播期曾出现同一文件 200/404 波动,失败结果和最终成功证据均保留,未重推包或移动 tag。

摘要及每个 PDB 的成功哈希见 [验证记录](3.1.0-verification.json)。本机下载、验证脚本、各轮完整符号结果、TRX 与审计证据保存在 `artifacts/release-check-3.1.0/`,不覆盖或删除历史实验。至此正式 Release、四个主包和十二个符号文件均已完成验收。
16 changes: 9 additions & 7 deletions docs/releases/next-preparation-2026-10-26.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,15 @@
## 发布门槛

- [x] 用户确认版本、完整范围、已知文本差异以及发布目标,并解除本次发布禁止 push。
- [ ] 确认后同步四包 Version、CHANGELOG 正式段与拟用 tag;确认 tag/包版本尚未使用。
- [ ] 最终内容 Release 构建、三框架测试、完整 format 与依赖审计;探针如改动须独立构建/format。
- [ ] 最终版本本地四包 pack:4 nupkg + 4 snupkg;检查 ID/版本/依赖、三目标 DLL/XML/en 资源、README/icon、PDB,无测试/日志混入。
- [ ] 审阅最终提交,授权后才 push;确认该提交 Windows/Linux CI 成功。
- [ ] 发布者确认 Trusted Publisher 与 NUGET_USER 配置可用(不能从代码断言平台授权正常)。
- [ ] 单独授权 tag 推送:现有 `release.yml` 会在 Windows 测试后,自动向 nuget.org 推送四主包及四符号包,再创建 GitHub Release。若只要 GitHub 或仅本地包,不能推 tag 沿用此流程。
- [ ] 发布后核对 Actions 提交、Release 八资产、NuGet 四包及符号处理结果。
- [x] 同步四包 Version、CHANGELOG 正式段与 tag;发布前确认版本未占用。
- [x] 最终内容 Release 构建、三框架测试、完整 format 与依赖审计;本轮探针未改动。
- [x] 最终版本本地四包 pack:4 nupkg + 4 snupkg;ID/版本/依赖、三目标 DLL/XML/en 资源、README/icon、PDB 与条目白名单通过。
- [x] 授权后 push;PR 与合并提交 Windows/Linux CI 均成功。
- [x] NUGET_USER 非空,Trusted Publisher 通过正式工作流 OIDC 登录及上传实证可用,未导出凭据。
- [x] 用户确认完整发布目标后推送 tag;现有工作流完成四主包、四符号包与 GitHub Release 发布。
- [x] Actions 提交、Release 八资产、NuGet 四包及 12 个符号文件完成核验,传播期失败与重试保留。

最终状态与证据见 [3.1.0 发布记录](3.1.0.md)。下方本地检查及准备阶段描述保留当时状态,不代表发布仍待执行。

## 本轮本地检查结果

Expand Down
Loading