2026-09-10 用户确认 F01–F12、原型通过,并要求按四阶段建议推进。原型验收:#1 评论 7498。阶段 4;覆盖 B04、F01–F12 集成验收。
在干净测试环境部署完整 MVP,用两个虚构账号走通学习闭环,再从备份恢复到空实例,为少量用户试用提供可执行交付材料。
前置:#14。状态:待验收(2026-09-15,提交 38d8975,PR #35;契约见评论 8099,实施证据见最新评论)。前置尚未通过时不得标进行中;每单完成停在待验收,由用户验收后关闭。技术验证可与不依赖其结论的工作分工,但不提前冻结未验证契约。
复用固定底座部署入口,补 LexGo 文件/资源一致性;没有备份管理 UI。
无新增 UI 原型;部署恢复步骤和集成测试结果为验收证据。
后端不为建表/API 单独画页面原型;先写数据、接口、状态、隔离与幂等契约。学习端采用 #1 已验收 v1,未做的 LinguaCafe 对照不标完成。
预计 4~6 人日(8 小时/人日),包含本单设计、前后端实现、相关测试、修正和文档;是规划估算,不是交付日期或 AI 运行时间。仅 F 范围,X 系列不纳入。数据变更先在隔离测试库验证迁移/回退,保留既有数据和原型。
实施时按影响更新 Architecture-and-Code-Map、Business-Rules-and-Glossary、Local-Development-and-Verification;需求变化更新 Product-Requirements-Overview,交付单补实际部署恢复文档。Wiki 先写再回读同步;结束评论记录测试、未验证内容、提交及 revision。工单正文保留基线,重要变化追加评论。
Gitea MCP 指向其他站点,沿用目标 git.ilapage.cn API 回退;凭据仅进入进程。
用户 2026-09-15 指示「先按原范围把 #15 做完、再回来处理 #21」,并在只读诊断后选择按建议的默认方案执行。前置 #14 已验收关闭。分支 feat/15-self-hosted-delivery 从 main 20e13e9 创建。
feat/15-self-hosted-delivery
20e13e9
127.0.0.1
dist
bootstrap
scripts/ops.py
install-check
.env.local
backup --out DIR
mysqldump --single-transaction --routines --triggers --hex-blob --no-tablespaces
.sql.gz
manifest.json
restore --dump F --database NAME --confirm
lexgo
lexgo_schema
--force
--confirm
verify
verify --database NAME [--manifest F] [--api URL] [--user U --password-env V]
备份 lexgo_dev → 恢复到空库 lexgo_restore_drill → 用覆盖环境变量在同一台机起第二个 API 实例(LEXGO_DB_NAME/LEXGO_LISTEN 覆盖,不改代码)→ 在恢复实例上跑两账号闭环与越权验证 → 比对恢复前后的行数与关键数据 → 拆掉演练实例与演练库。演练过程中产生的证据(manifest、行数比对、API 输出摘要)写入工单,不复制任何真实数据内容。
lexgo_restore_drill
LEXGO_DB_NAME
LEXGO_LISTEN
TestMySQLLibraryIsolationAndOwnership
TestMySQLTermIsolationAndInputRules
TestMySQLPhraseRulesAndIsolation
TestMySQLReviewAnswerErrorsAndOwnership
TestMySQLAccountIsolationAndRevocation
TestMySQLIngestRecoveryWithoutRestart
TestMySQLIngestRecoveryAfterRestart
TestMySQLIngestAttemptsAreBoundedAndManualRetryRestarts
TestMySQLRetryAfterContentRestoredPublishesSameChapter
TestMySQLRecoverySkipsSupersededJobs
TestMySQLReviewConcurrentReplayOfOneAnswer
TestConcurrentDuplicateAccountHasOneWinner
TestMySQLConcurrentChapterDelete
TestMySQLDeleteDuringProcessing
TestMySQLPasteRejectsInvalidInputAndLimits
TestMySQLTextUploadKeepsChapterLimit
TestMySQLTextUploadRejectsInvalidSubmissions
TestDictionaryAPIResourcesAndOwnership
TestMigrationRefusesUnownedOrUnsupportedSchema
TestMigrationFrom*
scripts/bench.py 在人造数据集(1 本书、20 章 × 约 5k 词;5000 词条;20000 条复习记录;含短语)上测量登录、书库、章节正文与分词、生词本列表与搜索、到期队列、答题、进度等接口,输出请求数、p50/p95 与错误数,并记录 CPU/内存/操作系统/MySQL 版本。只报告实测值,不承诺容量。 数据集只写演练库,用完删除。
scripts/bench.py
Deployment-and-Operations
docs/templates/deployment.md
wiki-docs.json
README.md
AGENTS.md
不对外部署、不做 HTTPS、不做灰度/多机/容器化、不做定时备份与监控告警、不做附件存储(#21)、不做数据脱敏导出。风险:恢复演练会创建并删除演练库(只操作 lexgo_ 前缀的演练库,不触碰 lexgo_dev 与生产库);性能数字只代表本机环境。
纯工具、文档与演练库改动,无 schema 变化;删除演练库与演练进程即可,仓库侧回到上一提交。
Gitea MCP 仍指向其他站点,沿用目标站点 API 回退;凭据仅从既有安全配置读入进程。
用户 2026-09-15 选择「按建议的默认」执行,契约见评论 8099。分支 feat/15-self-hosted-delivery 从 main 20e13e9 创建,提交 38d8975(含 bdb3897 的部署页映射)已推送;PR #35 未合并,工单不关闭,停在待用户验收。
38d8975
bdb3897
init-database
backup
restore
smoke
CREATE DATABASE
USE
tests/test_lexgo_ops.py
docs/11-deployment-and-operations.md
2b08a33c0c246841deb52450d7fa411d76dc2eee
.local/evidence/issue15-drill.log
.local/issue15-drill-evidence.json
migrate
lexgo_dev
数据集:20 章 × 约 500 词、2000 词条、8000 条作答;环境 Windows 10、8 核、31.7 GB、MySQL 8.4.3、Go 工具链固定 1.26.5。/books p50 5.9 ms、/terms 10.2 ms、搜索 12.3 ms、/progress 15.7 ms、/reviews/queue 22.7 ms、/login 82.2 ms;全部 0 错误。登录接口每地址每分钟限 30 次,故登录只测 10 次,不代表登录吞吐。
/books
/terms
/progress
/reviews/queue
/login
越权/隔离、任务崩溃重试、并发答题与并发删除、长文与输入上限、迁移与回退标记共 20 余个既有 Go 用例全部通过(对应关系见 Wiki 的 Local-Development 页);LEXGO_TEST_DB_NAME=lexgo_test_issue13 python scripts/server.py test-integration 70 项、治理 65 项(新增 9)、学习端 147 单测与 23 项 E2E、管理端 31 项,全部通过。
LEXGO_TEST_DB_NAME=lexgo_test_issue13 python scripts/server.py test-integration
mysqldump --databases
bd4a0e705abe722f153a7410435def91a21d472a
5f2912edd09256cf5fc52059145d65918e99f9cb
caa80888cf42fd7fd7f040e9fe1147203fe7bfe3
a1847957e287c7eb1a54905e13632aeca4cd75f7
22731c2b344b3e0c75eb892c897d36d1f153a441
sync --check
纯工具、文档与演练库改动,无 schema 变化、无接口变化:git revert 到 20e13e9 或恢复上一提交即可;演练库已删除,不影响 lexgo_dev。
git revert
证据文件(本机,不入仓库):.local/evidence/issue15-drill.log(演练完整输出)、.local/issue15-drill-evidence.json(27 项检查)、.local/evidence/issue15-bench.json(性能报告);演练账号密码由演练进程生成、只经环境变量传入,未写入任何文件、日志或本评论。
.local/evidence/issue15-bench.json
用户 2026-09-15 选择方案 C,并指出「项目是纯 Go,为什么要运行 Python 脚本」。核实后的事实与决定记录如下。
server/go.mod
wordnet-resource.json
dev_scripts/harness.py
wiki_docs.py
tests/
scripts/server.py
go run/build/test
bench.py
python scripts/server.py migrate
migrate|bootstrap|serve|audit-cleanup
lexgo backup
lexgo restore
lexgo verify
LEXGO_*
mysqldump
lexgo migrate
lexgo bootstrap
lexgo backup|restore|verify
本追加并入本单 #15(工单仍停在待验收,不另行建单);dev_scripts/ 与 tests/ 的 Python 属于框架规定,不在移除范围。既有 Python 通道已验证可用,移植完成后保留。
dev_scripts/
按评论 8108 确认的方案 C 实施完毕,提交 420365f(实现)与 dde2ac1(文档镜像)已推送到同一分支与 PR。工单仍停在待验收。
420365f
dde2ac1
lexgo backup --out DIR [--database N] [--force]
lexgo restore --dump F --database N --confirm [--force] [--skip-manifest-check]
lexgo verify [--manifest F] [--database N]
与既有 migrate|bootstrap|serve|audit-cleanup 同一入口;server/app/lexgo/ops.go 实现(操作客户端不选 schema,SQL 显式限定库名,保证能写一个还不存在的库)。备份仍调用 mysqldump——自己实现一致性导出风险更高,文档已写明部署机需要 MySQL 客户端。
server/app/lexgo/ops.go
go test
ops_test.go
TestMySQLOpsBackupRestoreRoundTrip
lexgo serve
harness.py check --strict
证据:.local/evidence/issue15-binary-drill-evidence.json、.local/evidence/issue15-crosscheck-evidence.json、.local/evidence/issue15-drill.log。
.local/evidence/issue15-binary-drill-evidence.json
.local/evidence/issue15-crosscheck-evidence.json
ops.py smoke
verify --api
library.go
ChapterSummary
gofmt
e2e/phrase.spec.ts:63
用户 2026-09-15 回复「A,并新开章级工单」,其中方案 A 即:先验收 #15,再按顺序合并 #15 与 #21 两个 PR。据此记录本单验收。
dacdad8a9385b2fde153a0dd1fe2579b57a810fd
08472d2c98a5b4ac1b0354b09c6319ac74d321f7
2d6563574e807c9a167b90b7c772ee8b9b81e76d
eef77f39332c2bef01d5e9788a2c6c89796b2a1a
2599afbb5e7cb47655fabe372596ca50cacb7a60
单元工单关闭;#16 的 #15 复选框同步勾选。
No dependencies set.
The note is not visible to the blocked user.
来源与目标
2026-09-10 用户确认 F01–F12、原型通过,并要求按四阶段建议推进。原型验收:#1 评论 7498。阶段 4;覆盖 B04、F01–F12 集成验收。
在干净测试环境部署完整 MVP,用两个虚构账号走通学习闭环,再从备份恢复到空实例,为少量用户试用提供可执行交付材料。
验收标准
依赖与执行
前置:#14。状态:待验收(2026-09-15,提交 38d8975,PR #35;契约见评论 8099,实施证据见最新评论)。前置尚未通过时不得标进行中;每单完成停在待验收,由用户验收后关闭。技术验证可与不依赖其结论的工作分工,但不提前冻结未验证契约。
参考模块与设计证据
复用固定底座部署入口,补 LexGo 文件/资源一致性;没有备份管理 UI。
无新增 UI 原型;部署恢复步骤和集成测试结果为验收证据。
后端不为建表/API 单独画页面原型;先写数据、接口、状态、隔离与幂等契约。学习端采用 #1 已验收 v1,未做的 LinguaCafe 对照不标完成。
工作量、范围与风险
预计 4~6 人日(8 小时/人日),包含本单设计、前后端实现、相关测试、修正和文档;是规划估算,不是交付日期或 AI 运行时间。仅 F 范围,X 系列不纳入。数据变更先在隔离测试库验证迁移/回退,保留既有数据和原型。
文档与证据
实施时按影响更新 Architecture-and-Code-Map、Business-Rules-and-Glossary、Local-Development-and-Verification;需求变化更新 Product-Requirements-Overview,交付单补实际部署恢复文档。Wiki 先写再回读同步;结束评论记录测试、未验证内容、提交及 revision。工单正文保留基线,重要变化追加评论。
Gitea MCP 指向其他站点,沿用目标 git.ilapage.cn API 回退;凭据仅进入进程。
#15 方案确认与实施启动(2026-09-15)
用户 2026-09-15 指示「先按原范围把 #15 做完、再回来处理 #21」,并在只读诊断后选择按建议的默认方案执行。前置 #14 已验收关闭。分支
feat/15-self-hosted-delivery从 main20e13e9创建。D0 用户确认的六个默认(2026-09-15)
127.0.0.1,不做 HTTPS;文档写出对外部署时的入口与证书注意事项,但不作为本次执行内容。dist(零后端代码改动);本机演练用等价的静态托管验证产物与 API 契约,并明确记录 nginx 配置本身未在本机执行。bootstrap建号;不使用 lexgo_dev 的开发数据,不带默认可用密码。D1 交付物:
scripts/ops.py(目标无关,可在任意主机复用)install-check.env.local键名齐全),逐项输出预期结果;只读backup --out DIRmysqldump --single-transaction --routines --triggers --hex-blob --no-tablespaces导出全库为.sql.gz,并写manifest.json:schema 版本、产品标识、Git 提交、dump 与文件 sha256、逐表行数、mysqldump/服务端版本、库名。不写入任何凭据restore --dump F --database NAME --confirmlexgo、拒绝系统库、目标已有lexgo_schema数据时必须显式--force,且必须带--confirm;恢复后自动跑verifyverify --database NAME [--manifest F] [--api URL] [--user U --password-env V]D2 本机完整恢复演练(本单核心证据)
备份 lexgo_dev → 恢复到空库
lexgo_restore_drill→ 用覆盖环境变量在同一台机起第二个 API 实例(LEXGO_DB_NAME/LEXGO_LISTEN覆盖,不改代码)→ 在恢复实例上跑两账号闭环与越权验证 → 比对恢复前后的行数与关键数据 → 拆掉演练实例与演练库。演练过程中产生的证据(manifest、行数比对、API 输出摘要)写入工单,不复制任何真实数据内容。D3 集成验证矩阵(复用既有 Go 测试,按验收标准逐条对应)
TestMySQLLibraryIsolationAndOwnership、TestMySQLTermIsolationAndInputRules、TestMySQLPhraseRulesAndIsolation、TestMySQLReviewAnswerErrorsAndOwnership、TestMySQLAccountIsolationAndRevocationTestMySQLIngestRecoveryWithoutRestart、TestMySQLIngestRecoveryAfterRestart、TestMySQLIngestAttemptsAreBoundedAndManualRetryRestarts、TestMySQLRetryAfterContentRestoredPublishesSameChapter、TestMySQLRecoverySkipsSupersededJobsTestMySQLReviewConcurrentReplayOfOneAnswer、TestConcurrentDuplicateAccountHasOneWinner、TestMySQLConcurrentChapterDelete、TestMySQLDeleteDuringProcessingTestMySQLPasteRejectsInvalidInputAndLimits、TestMySQLTextUploadKeepsChapterLimit、TestMySQLTextUploadRejectsInvalidSubmissionsTestDictionaryAPIResourcesAndOwnership与词典禁用/缺失时的查询状态(实施时确认对应断言并如实记录)TestMigrationRefusesUnownedOrUnsupportedSchema、全部TestMigrationFrom*D4 性能测量
scripts/bench.py在人造数据集(1 本书、20 章 × 约 5k 词;5000 词条;20000 条复习记录;含短语)上测量登录、书库、章节正文与分词、生词本列表与搜索、到期队列、答题、进度等接口,输出请求数、p50/p95 与错误数,并记录 CPU/内存/操作系统/MySQL 版本。只报告实测值,不承诺容量。 数据集只写演练库,用完删除。D5 文档
Deployment-and-Operations(按docs/templates/deployment.md结构:服务概览、环境要求、首次部署、supervisor/nginx、配置与凭据来源、日常运维、健康检查、升级与回滚、备份与恢复、已知限制),并加入wiki-docs.json映射与核心镜像README.md、AGENTS.md常用命令D6 范围外与风险
不对外部署、不做 HTTPS、不做灰度/多机/容器化、不做定时备份与监控告警、不做附件存储(#21)、不做数据脱敏导出。风险:恢复演练会创建并删除演练库(只操作 lexgo_ 前缀的演练库,不触碰 lexgo_dev 与生产库);性能数字只代表本机环境。
D7 回退
纯工具、文档与演练库改动,无 schema 变化;删除演练库与演练进程即可,仓库侧回到上一提交。
Gitea MCP 仍指向其他站点,沿用目标站点 API 回退;凭据仅从既有安全配置读入进程。
#15 实施完成,待用户验收(2026-09-15)
用户 2026-09-15 选择「按建议的默认」执行,契约见评论 8099。分支
feat/15-self-hosted-delivery从 main20e13e9创建,提交38d8975(含bdb3897的部署页映射)已推送;PR #35 未合并,工单不关闭,停在待用户验收。交付内容
scripts/ops.py:install-check、init-database、backup、restore、verify、smoke。备份=MySQL 全库 dump +manifest.json(schema 版本、提交、sha256、逐表行数、客户端/服务端版本;不含凭据)。恢复默认只写空库,--confirm必需,覆盖需--force,拒绝系统库与带CREATE DATABASE/USE的 dump,并在恢复前后比对源库逐表内容校验和。scripts/bench.py:人造数据集性能测量。tests/test_lexgo_ops.py:9 项无库测试(含「备份的工具输出不得含库名切换」与 manifest 字段白名单)。Deployment-and-Operations(docs/11-deployment-and-operations.md,revision2b08a33c0c246841deb52450d7fa411d76dc2eee)+wiki-docs.json映射;含服务概览、环境要求、首次部署、配置与凭据来源、日常运维、健康检查、升级与回滚、备份与恢复、已知限制。本机完整演练(27 项顶层检查全部通过,日志
.local/evidence/issue15-drill.log,证据.local/issue15-drill-evidence.json)migrate(v7,14 张表)→ 确认无账号无数据 →bootstrap建管理员 → 再次 bootstrap 被拒绝(不覆盖管理员)。smoke19 项):粘贴 → 处理完成 → 分词 → 词典查询 → 保存词义 → 对方查不到 → 立即到期 → 作答 → 重复作答不重复记账 → 完成章节只记已读 → 进度反映活动;越权读他人书籍/章节均 404。--confirm。lexgo_dev与测试库保留且仍为 v7。性能观察(单机无并发,只作观察不给承诺)
数据集:20 章 × 约 500 词、2000 词条、8000 条作答;环境 Windows 10、8 核、31.7 GB、MySQL 8.4.3、Go 工具链固定 1.26.5。
/booksp50 5.9 ms、/terms10.2 ms、搜索 12.3 ms、/progress15.7 ms、/reviews/queue22.7 ms、/login82.2 ms;全部 0 错误。登录接口每地址每分钟限 30 次,故登录只测 10 次,不代表登录吞吐。集成验证矩阵
越权/隔离、任务崩溃重试、并发答题与并发删除、长文与输入上限、迁移与回退标记共 20 余个既有 Go 用例全部通过(对应关系见 Wiki 的 Local-Development 页);
LEXGO_TEST_DB_NAME=lexgo_test_issue13 python scripts/server.py test-integration70 项、治理 65 项(新增 9)、学习端 147 单测与 23 项 E2E、管理端 31 项,全部通过。实施中发现并修掉的问题(如实记录)
mysqldump --databases,dump 里带CREATE DATABASE/USE,恢复时数据被灌回源库而不是目标库。发现后立刻核实源库:dump 与源库内容一致且期间无其他写入,没有数据损失;随后改为导出不带库名切换的 dump,并加了「拒绝加载带库名切换的旧 dump」与「恢复前后比对源库校验和」两道防线,并补了单元测试。init-database步骤并写进部署页。install-check起初误判为合格(把协议版本 14.14 当成客户端版本);修正解析后正确判失败,部署页写明「客户端不得低于服务端」。未验证与边界
127.0.0.1起两个临时实例。文档
2b08a33c0c246841deb52450d7fa411d76dc2eeebd4a0e705abe722f153a7410435def91a21d472a5f2912edd09256cf5fc52059145d65918e99f9cbcaa80888cf42fd7fd7f040e9fe1147203fe7bfe3a1847957e287c7eb1a54905e13632aeca4cd75f722731c2b344b3e0c75eb892c897d36d1f153a441sync --check通过,6 个变更页逐字节正文比对一致;README 与 AGENTS.md 已同步回退
纯工具、文档与演练库改动,无 schema 变化、无接口变化:
git revert到20e13e9或恢复上一提交即可;演练库已删除,不影响lexgo_dev。Gitea MCP 仍指向其他站点,沿用目标站点 API 回退;凭据仅从既有安全配置读入进程。
证据文件(本机,不入仓库):
.local/evidence/issue15-drill.log(演练完整输出)、.local/issue15-drill-evidence.json(27 项检查)、.local/evidence/issue15-bench.json(性能报告);演练账号密码由演练进程生成、只经环境变量传入,未写入任何文件、日志或本评论。#15 范围追加:把备份、恢复与校验做进 Go 二进制(2026-09-15)
用户 2026-09-15 选择方案 C,并指出「项目是纯 Go,为什么要运行 Python 脚本」。核实后的事实与决定记录如下。
事实澄清
server/go.mod只有 gin/gorm/mysql 驱动等 Go 依赖,产品代码里唯一的 "python" 字样是wordnet-resource.json中「无 Python 进程」的说明。后端、学习端、管理端运行时都不含 Python。dev_scripts/harness.py与wiki_docs.py(DevHarness 治理,AGENTS.md 要求工具保持原样)、tests/(治理测试)、scripts/server.py(加载.env.local并固定工具链后调用go run/build/test,无业务逻辑)。scripts/ops.py/bench.py时沿用了这套既有约定,但也确实让运维机需要 Python——尽管这不是新增前提:部署文档第一步python scripts/server.py migrate从 #2 起就如此。这层没有说清楚,是本单文档的疏漏。lexgo二进制本来就有migrate|bootstrap|serve|audit-cleanup子命令,安装路径可以不依赖 Python,文档此前没有把它写成主路径。决定(方案 C)
lexgo backup/lexgo restore/lexgo verify,与既有子命令同一入口、同一份LEXGO_*配置。目标产物:运维机只需要一个二进制 + MySQL 客户端(备份仍调用mysqldump,因为自己实现一致性导出风险更高,这点在文档写明)。lexgo migrate、lexgo bootstrap、lexgo backup|restore|verify不经过 Python;Python 通道保留为交叉验证与开发便利入口,并在文档中说明两者关系。CREATE DATABASE/USE的 dump、恢复前后比对源库逐表内容校验和。范围与状态
本追加并入本单 #15(工单仍停在待验收,不另行建单);
dev_scripts/与tests/的 Python 属于框架规定,不在移除范围。既有 Python 通道已验证可用,移植完成后保留。Gitea MCP 仍指向其他站点,沿用目标站点 API 回退;凭据仅从既有安全配置读入进程。
#15 范围追加完成:纯二进制运维(方案 C)
按评论 8108 确认的方案 C 实施完毕,提交
420365f(实现)与dde2ac1(文档镜像)已推送到同一分支与 PR。工单仍停在待验收。事实澄清(回应「项目是纯 Go,为什么跑 Python」)
server/go.mod只有 gin/gorm/mysql 驱动等 Go 依赖,产品代码里唯一的 "python" 字样是wordnet-resource.json中「无 Python 进程」的说明。dev_scripts/(DevHarness 治理,AGENTS.md 要求保持原样)、tests/(治理测试)、scripts/server.py(加载配置并调用 go 命令,无业务逻辑)。新增的 Go 子命令
lexgo backup --out DIR [--database N] [--force]mysqldump全库 → gzip →manifest.json(schema 版本、提交、sha256、逐表行数、客户端/服务端版本;不含凭据)lexgo restore --dump F --database N --confirm [--force] [--skip-manifest-check]CREATE DATABASE/USE的 dump;恢复前后比对源库逐表内容校验和;恢复后自动校验lexgo verify [--manifest F] [--database N]与既有
migrate|bootstrap|serve|audit-cleanup同一入口;server/app/lexgo/ops.go实现(操作客户端不选 schema,SQL 显式限定库名,保证能写一个还不存在的库)。备份仍调用mysqldump——自己实现一致性导出风险更高,文档已写明部署机需要 MySQL 客户端。验证
go test(含ops_test.go)--confirm、拒绝系统库、缺备份/缺 manifest、校验和比较、manifest 无凭据字段)TestMySQLOpsBackupRestoreRoundTrip:备份 → 恢复到空库 → 校验通过 → 拒绝二次覆盖 → 源库校验和不变lexgo migrate(v7,14 表)→ 空库无账号 →lexgo bootstrap→ 重复 bootstrap 被拒 →lexgo verify通过 →lexgo serve健康检查 → 两账号走通闭环(19 项)→ 演练库删除harness.py check --strict与sync --check全部通过证据:
.local/evidence/issue15-binary-drill-evidence.json、.local/evidence/issue15-crosscheck-evidence.json、.local/evidence/issue15-drill.log。边界(写入部署页)
ops.py smoke/verify --api);Go 二进制覆盖数据库层的备份、恢复与校验。mysqldump;未验证大库恢复耗时与磁盘上限。顺带记录的问题
library.go的 gofmt 遗留:#13 提交的ChapterSummary字段对齐未过gofmt,本次一并修正(纯空白)。e2e/phrase.spec.ts:63存在偶发失败(#11 时期的用例,与本次改动无关;前端代码未变):单跑必过,全量并行跑时约 6 次中出现 2 次失败。已如实记录,未在本单修改它的测试逻辑;如需修可另开小单或授权本次一并处理。#15 验收通过(2026-09-15)
用户 2026-09-15 回复「A,并新开章级工单」,其中方案 A 即:先验收 #15,再按顺序合并 #15 与 #21 两个 PR。据此记录本单验收。
lexgo backup|restore|verify、部署与运维 Wiki 页;不对外部署、不创建发布标签、不邀请用户。dde2ac1。dacdad8a9385b2fde153a0dd1fe2579b57a810fd、Architecture08472d2c98a5b4ac1b0354b09c6319ac74d321f7、Product-Requirements2d6563574e807c9a167b90b7c772ee8b9b81e76d、Homeeef77f39332c2bef01d5e9788a2c6c89796b2a1a、Project-Profile2599afbb5e7cb47655fabe372596ca50cacb7a60。git revert到20e13e9或恢复上一提交即可(演练库已删除)。单元工单关闭;#16 的 #15 复选框同步勾选。