检查日期:2026-10-06。冲突解决后以当前 main 的运行代码为基准复核,不接入生产数据库、不调用收费模型、不注册账号,不修改 Python、JavaScript、CSS、HTML、依赖或部署配置。
可以运行一个历史数据命令行闭环,但不是可直接部署的完整网站。
15 个 Python 源文件语法解析通过。当前机器已经安装相关依赖;这不意味着仅安装 requirements.txt 的干净环境也能运行全部脚本。
实际执行 python -B scripts/parlay_predictor.py --matches matches.json,退出码 0,读取英超、西甲、意甲、德甲四份历史特征文件,输出四场示例的单场概率和组合结果。仓库缺少 data/features_FL12024.csv,因此本路径没有加载法甲 CSV。运行成功不等于数据新鲜、概率经过校准或模型有效;旧版泊松截断后部分概率总和小于 1,需要在另一次明确授权的代码修复中处理。
使用 Flask test_client() 在进程内检查,无监听端口。数据库连接和 HTTP 调用均由测试拦截,不能发送真实外部请求。
/返回 200:旧页面可渲染。/api/teams返回 200:返回五个联赛的简化球队列表。/api/lottery/matches返回 404:离线测试拦截了数据库连接,代码按暂无数据处理;这不代表线上数据库没有比赛。- PostgreSQL 数据库对象可构建,但真实连通性和数据结构未验收;AI 服务和赛程服务未加载。
没有把登录、支付、AI 请求或生产写入作为测试步骤。
- 数据库部署不完整:当前主分支使用 PostgreSQL,需要维护者自己的连接配置与已初始化数据结构;
docs/legacy/backup.sql为空,不能作为数据库安装脚本。没有用源码中的默认连接配置去尝试真实数据库连接。 - 导入路径不匹配:
app.py从根目录导入lottery_api和ai_predictor,实际文件位于scripts/。正常从仓库根目录运行时相关服务不会加载。 - 数据处理链不完整:多个脚本导入
config,仓库没有config.py;scripts/config_example.py仅是示例。scripts/match.py读取的data/features.csv也不存在。 - 依赖不完整:
requirements.txt没有声明多个脚本使用的 pandas、NumPy、SciPy、scikit-learn。本地示例的额外依赖在首页命令中单独列出,依赖文件未被修改。 - 旧部署说明有误:
app.py直接启动使用 8000 端口,不是旧 README 中的 5000;直接执行会启用 debug 并监听0.0.0.0,不推荐在公网运行。
- 主分支历史代码包含硬编码的默认数据库连接配置,应由维护者移到环境变量并核对、轮换可能曾公开的凭证。这里不复述任何值,也不将其复制到文档或配置示例。本次按“仅文档”范围保留主分支代码,不能因此宣称其安全。
- 旧模板将服务端
GEMINI_API_KEY写入window.GEMINI_API_KEY。即使是自己的密钥,也不应在这个旧示例中填入真实生产密钥。 - 默认会话密钥是占位值;登录密码采用直接 SHA-256,缺少现代密码哈希保护。
- CORS 会反射任意 Origin,并允许凭证;同时保留会话调试接口。
- Cookie 默认强制 Secure / SameSite=None,HTTP 本地登录需要额外核对。
- 没有执行完整安全审计,也没有保证旧前端算法的概率正确性。仅通过语法检查或 HTTP 200 不能视为生产可用。
没有复制线上私有核心组件,没有修复上述代码,没有修改 requirements.txt、vercel.json、next.config.js,没有安装依赖到项目目录,没有接入生产环境。文档和冲突整合通过公开仓库 PR 提交,不部署服务。
最初文档整理时检查的是 ok 的 Supabase REST 实现,它缺少 self.key、self.url 初始化,导致数据库模块导入失败。解决 PR 冲突时没有把这个旧实现切换到 main,而是保留 main 的现有运行文件,因此最初的“数据库对象未加载 / 500”检查结果不再作为合并版本的现状描述。
如后续需要“最小可部署 Web 版”,应另行授权一次小范围修复:修正数据库配置与导入、补齐依赖和结构、移除浏览器密钥暴露、增加安全的演示模式,再验收完整用户路径。这不是本次文档更新已经完成的内容。