成绩导入(R173 落地 → R174 改为三小问四列制) - app/lib/bigScoreImport.js(新增 · 判据唯一真相源 · 零依赖:不 require Egg / 不连库 / 不读文件) · R174 删除 splitScoreAcrossSubs(均分),改为 scoreSubs 逐项取值 · 留空 SUB_MISSING(整行拒绝,⛔ 不按 0 分)· 非数值 SUB_INVALID · 超单问上限 SUB_OUT_OF_RANGE · 文件级 LEGACY_TEMPLATE(旧两列模板)与 SUB_COLUMNS_MISSING(缺一小问整列)⇒ 整份拒绝 · 定位键必须带 group:(group, team_uid),因 team_uid 跨组重号 - app/service/bigQuestion.js · buildScoreTemplate 改四列 + 说明书重写(删均分段,补"三列必须全填"与"旧模板不再支持") · previewScoreImport 回带 subRaws/subs/total;importScores 逐项写 setSubScores · ⛔ 不新增第二条写成绩通路:仍只走 setSubScores → admin.updateScores - app/lib/docx.js:run 支持 color(6 位 hex);w:color 必须排在 w:sz 之前(CT_RPr sequence) - app/controller/admin.js + app/router.js:import-template / import-preview(零写入)/ import-scores · 上传内存解析不落盘(app/public 对静态服务开放 ⇒ 成绩表可被猜名下载) 节点备份调度器(R168/R170) - app/lib/nodeBackupScheduler.js(新增):考试开始前 30min / 结束后 10min / 成绩发布瞬间 · 幂等键 group:node:fireAtISO(时间点即身份);overdue 判定用 clamp:false 的数学时刻 · 非生产 enabled 强制 false 且 fail-safe(与 DEPLOY_ENV_LOCAL_SKIP_PREFIXES 同源) - config/config.default.js:config.nodeBackup 四项路径全走环境变量,默认值只覆盖本地 (生产目录布局与仓库不一致,⛔ 不许用 __dirname 推导) - app.js:启动构造单例 + hydrate 未到期计划 缺陷修复 - app/controller/admin.js:R161 临时文件路径移到 try 外声明,否则导入抛错即跳过清理 - app/service/admin.js:R166「已答 N / N 题」恒真显示(原 totalQuestions = answeredCount) - app/service/upload.js + app/controller/upload.js:R157/R162 删除结果计数 + @no-temp-cleanup 标注 测试 - .gitignore + test/lib.test.js:R134 候选 ㊴ —— test/* + !test/*.test.js, 使第 26 步裸 mocha 在干净检出上可复现(改前 rc=1 ↔ 改后 23 passing)
68 lines
1.9 KiB
Plaintext
68 lines
1.9 KiB
Plaintext
# Dependencies
|
||
node_modules/
|
||
|
||
# Build output
|
||
dist/
|
||
dist-ssr/
|
||
|
||
# Logs
|
||
logs/
|
||
*.log
|
||
npm-debug.log*
|
||
yarn-debug.log*
|
||
yarn-error.log*
|
||
pnpm-debug.log*
|
||
|
||
# Runtime (egg)
|
||
run/
|
||
.wb_*/
|
||
.wb_check_state.js
|
||
.egg-config.json
|
||
|
||
# Env / secrets (defense-in-depth; real .env.production lives outside this repo)
|
||
.env*
|
||
!.env.example
|
||
|
||
# 本地开发配置(Egg 仅在 serverEnv=local 时加载,生产不加载)
|
||
# 含本地 DB 口令,故排除入库;如需团队共享请提交不含口令的 config.local.example.js
|
||
config/config.local.js
|
||
|
||
# sequelize-cli 数据库配置(含本地 DB 口令)—— 2026-09-23 入库口令处置 P1
|
||
# 仓库内保留不含口令的 database/config.json.example;使用前复制并填入口令:
|
||
# cp database/config.json.example database/config.json
|
||
database/config.json
|
||
|
||
# Coverage / cache
|
||
coverage/
|
||
.cache/
|
||
|
||
# Agent / tooling state
|
||
.workbuddy/
|
||
|
||
# Editor
|
||
.vscode/*
|
||
!.vscode/extensions.json
|
||
.idea
|
||
.DS_Store
|
||
|
||
# Uploaded / runtime data under app/public (keep templates as source)
|
||
app/public/uploads/
|
||
app/public/answers/
|
||
app/public/works/
|
||
app/public/materials/
|
||
app/public/news/
|
||
app/public/carousel/
|
||
app/public/tmp/
|
||
app/public/exports/
|
||
|
||
# Tests —— 上传目的=运行必须:`test/` 下的夹具 / 临时物 / 子目录**不入库**。
|
||
# 例外(P1 ㉚a · R134 候选 ㊴ 修复):`test/` 顶层的 `*.test.js` 最小单测集**必须入库** ——
|
||
# `scripts/ci-gates.sh` 第 26 步(裸 mocha)直跑它;若被忽略则「本地绿 ≠ 可复现绿」
|
||
# (干净检出上该步拿不到文件 ⇒ 必红)。
|
||
# 注:此处必须用 `test/*` 而非 `test/` —— 目录被整体排除后 git 不再进入该目录,
|
||
# 其内文件无法用 `!` 反忽略(R134 已实测:`test/` + `!test/lib.test.js` 无效)。
|
||
# 改用 `test/*` 后子目录(如 `test/sub/`)与其它文件仍被忽略,政策不破。
|
||
test/*
|
||
!test/*.test.js
|
||
test_dir/
|