docs: 校正文档分类与当前边界
bat-rust / Build and test Rust (push) Canceled after 0s
bat-rust / Build and test Go API (push) Canceled after 0s

This commit is contained in:
2026-09-04 19:58:07 +08:00
parent 34e2f0d907
commit d21c01a697
25 changed files with 727 additions and 985 deletions
+52 -14
View File
@@ -27,15 +27,25 @@ require_regex() {
}
required_docs=(
"README.md"
"CONTRIBUTING.md"
"AGENTS.md"
"DOCS_INDEX.md"
"CURRENT_STATUS.md"
"USERGUIDE.md"
"PROJECT_PLAN.md"
"docs/architecture/README.md"
"docs/architecture/adr/0004-rust-bat-go-bat-api-resource-boundary.md"
"docs/architecture/assetbundle.md"
"docs/architecture/resource-release-layout.md"
"docs/guides/development.md"
"docs/guides/deployment.md"
"docs/reference/rpc-backend-api.md"
"docs/reports/CURRENT_GAPS.md"
"docs/reports/GO_STATUS.md"
"docs/reports/PARSER_FREEZE.md"
"docs/reports/BAT_API_CONTRACT_FIXTURE_HANDOFF.md"
"api/openapi/bat-api.yaml"
"internal/api/openapi.go"
"internal/api/testdata/contract/README.md"
)
@@ -43,6 +53,24 @@ for file in "${required_docs[@]}"; do
require_file "${file}"
done
[[ ! -e "Agents.md" ]] || fail "stale agent document path exists: Agents.md"
[[ ! -e "CHECK.md" ]] || fail "obsolete CHECK.md still exists"
[[ ! -e "docs/reports/PARSER_FREEZE.md" ]] ||
fail "obsolete parser freeze document still exists"
go_version="$(sed -n 's/^go[[:space:]]\{1,\}//p' go.mod | head -n 1)"
[[ -n "${go_version}" ]] || fail "go.mod is missing a Go version"
require_contains "README.md" "Go ${go_version}+"
require_contains "docs/guides/development.md" "Go ${go_version}+"
require_contains "DOCS_INDEX.md" "## 1. 项目入口与协作规则"
require_contains "DOCS_INDEX.md" "## 3. 架构、决策与稳定契约"
require_contains "DOCS_INDEX.md" "## 7. 历史归档"
require_contains "DOCS_INDEX.md" "docs/reports/historical/"
require_contains "docs/architecture/README.md" "目标设计"
require_contains "docs/architecture/README.md" "实际实现状态以源码、测试和根目录 \`CURRENT_STATUS.md\` 为准;\`PROJECT_PLAN.md\` 只描述目标和路线图"
require_contains "docs/architecture/adr/0004-rust-bat-go-bat-api-resource-boundary.md" 'Rust `bat` 是官方资源生产者和状态拥有者'
require_contains "docs/architecture/adr/0001-engine-and-application-boundaries.md" "资源同步职责已由 ADR 0004 取代"
placeholder_readmes=(
"api/README.md"
"api/proto/README.md"
@@ -64,25 +92,17 @@ for file in "${placeholder_readmes[@]}"; do
require_contains "${file}" "docs/reports/GO_STATUS.md"
done
parser_freeze_docs=(
"CURRENT_STATUS.md"
"PROJECT_PLAN.md"
"docs/architecture/assetbundle.md"
"docs/guides/development.md"
"docs/reports/CURRENT_GAPS.md"
)
for file in "${parser_freeze_docs[@]}"; do
require_contains "${file}" "docs/reports/PARSER_FREEZE.md"
done
require_contains "USERGUIDE.md" "scope=resource_bootstrap_only"
require_contains "USERGUIDE.md" "package_update_manifest=false"
require_contains "docs/reports/GO_STATUS.md" "resource bootstrap + CDN path"
require_contains "docs/reports/GO_STATUS.md" "internal/api/testdata/contract/"
require_contains "CURRENT_STATUS.md" "cmd/bat-api"
require_contains "CURRENT_STATUS.md" "internal/api/testdata/contract/"
require_contains "docs/reports/CURRENT_GAPS.md" "非完整官方游戏 API"
require_contains "CURRENT_STATUS.md" "不提供官方账号登录、游戏网关协议或完整 package update manifest"
if grep -Fq "响应只来自已发布 snapshot/RPC,不提供登录、网关、鉴权" CURRENT_STATUS.md; then
fail "CURRENT_STATUS.md contradicts its documented bat-api token authentication"
fi
require_contains "docs/reports/CURRENT_GAPS.md" "不是完整官方游戏 API"
require_contains "docs/reports/CURRENT_GAPS.md" "daemon.clean-stable"
require_contains "docs/reference/rpc-backend-api.md" "daemon.restart"
require_contains "docs/reference/rpc-backend-api.md" "daemon.clean-stable"
@@ -93,5 +113,23 @@ require_contains ".gitea/workflows/bat.yml" "make check-docs"
require_contains ".gitea/workflows/bat.yml" "make test-go-api"
require_contains ".gitea/workflows/bat.yml" "go vet ./internal/api/... ./internal/backendrpc/... ./cmd/bat-api/..."
require_contains ".gitea/workflows/bat.yml" "go build -o /tmp/bat-api ./cmd/bat-api"
require_contains "Makefile" "cargo clippy --workspace --all-targets -- -D warnings"
openapi_tmp="$(mktemp)"
trap 'rm -f "${openapi_tmp}"' EXIT
awk '
/^const openAPISpecYAML = `/ {
started = 1
sub(/^const openAPISpecYAML = `/, "")
print
next
}
started && /^`$/ { exit }
started { print }
' internal/api/openapi.go > "${openapi_tmp}"
cmp -s "api/openapi/bat-api.yaml" "${openapi_tmp}" ||
fail "static OpenAPI document differs from internal/api/openapi.go"
bash scripts/check-doc-links.sh
printf 'doc status check ok\n'