Skip to content

feat: 新增可追溯的简历工作室 - #61

Closed
Colin-Cai0318 wants to merge 3 commits into
shengjidaguai-china:mainfrom
Colin-Cai0318:codex/resume-studio
Closed

Colin-Cai0318 wants to merge 3 commits into
shengjidaguai-china:mainfrom
Colin-Cai0318:codex/resume-studio

Conversation

@Colin-Cai0318

Copy link
Copy Markdown
Contributor

关联 Issue

Closes #60

改动概述

新增本地「简历工作室」,将技术文档、项目说明和作品材料整理成带来源证据、可人工审核的事实库,再生成主简历版本并接入现有岗位定制简历流程。

主要实现

  • 将 MD/DOCX/PDF 转 Markdown 能力下沉到 resume_builder/documents.py,保留旧 Web 导入兼容
  • 新增材料、事实、主简历版本和版本事实引用四张 SQLite 表
  • 按材料分片调用现有 Anthropic/OpenAI-compatible 抽象提取候选事实
  • 候选事实必须包含可匹配的原文证据,并校验数字、日期、链接、邮箱和手机号等结构化 token
  • 用户可逐条修改、接受或拒绝事实;只有 accepted 事实进入主简历生成上下文
  • 主简历 AI 输出必须为带 fact_ids 的结构化 JSON,由服务端再次校验并确定性渲染 Markdown
  • 新增 Resume Studio Bottle API、React 页面、侧边栏入口、预览、下载和显式启用
  • 启用只更新 profile.resume_path,不删除旧简历;被版本引用的材料禁止删除
  • 同步更新 README、未发布说明和前端构建产物

安全与兼容性

  • AI 不能自动接受事实或启用主简历
  • 未审核和已拒绝事实不会进入生成上下文
  • 上传材料只保存在本地 data/,上传响应不回显完整标准化正文
  • 材料删除要求明确确认、受管目录路径校验和版本引用检查
  • /api/resume、/api/resume/upload 和 bosshunter resume --job-id 行为保持不变
  • 不使用简历工作室的现有用户无需迁移配置

验证

  • python -m pytest -q -p no:cacheprovider
    • 316 passed,11 subtests passed
  • 受影响简历/Web API 回归组
    • 90 passed
  • 新增 Resume Studio 核心与 API 测试
    • 11 passed
  • ruff check src/bosshunter/resume_builder tests/test_resume_builder.py tests/test_resume_studio_api.py
    • All checks passed
  • npm run build
    • TypeScript 与 Vite production build 通过
  • bosshunter --help / bosshunter --version
    • 通过
  • git diff --check
    • 通过
  • 提交文件秘密特征扫描
    • 未发现 token 或私钥签名

Review 文档

详细架构、数据表、API、关键不变量、测试证据和建议审查顺序见:

  • docs/RESUME_STUDIO_IMPLEMENTATION_REVIEW.md

暂不包含

  • 任意作品集 URL 抓取
  • 扫描 PDF OCR
  • 自动启用或自动发送生成的主简历
  • 富文本/PDF 模板设计

@powerycy

Copy link
Copy Markdown
Collaborator

本轮不采用。该 PR 新增材料上传、AI 事实提取、多张数据库表和简历版本系统,属于独立大型功能,不能与多平台采集一起发布;还需要单独完成隐私、文件解析、数据库迁移和威胁模型审查。建议拆为独立里程碑后再审。现关闭当前版本。

@powerycy

Copy link
Copy Markdown
Collaborator

按维护者要求重新打开,进入隔离复测;重点验证本地材料隐私、数据库迁移、事实追溯和旧流程兼容。

@powerycy powerycy reopened this Aug 23, 2026
@Colin-Cai0318

Copy link
Copy Markdown
Contributor Author

当前功能还在优化中,当前表现中规中矩,正在优化文档提取流程和LLM调用流程

powerycy added a commit that referenced this pull request Aug 23, 2026
Selectively adapted from PR #61 so invalid Markdown bytes cannot enter the local resume store.

Co-authored-by: 蔡志鹏 <caizhipeng318@gmail.com>
@powerycy

Copy link
Copy Markdown
Collaborator

已完成完整隔离复测和安全审查。

结果:

  • 322 passed,1 failed,11 subtests passed
  • 前端 production build 通过
  • 唯一失败来自 macOS 临时目录 /var 与 /private/var 的路径比较未统一 resolve;实际存储路径仍在受控目录内

已先纳入 #62 的可独立安全改进:

  • Markdown 上传必须通过 UTF-8 解码后才写入,避免无效材料污染正式数据

完整简历工作室暂不直接整体合并,仍需:

  • 修正 macOS 路径断言
  • 在把个人材料发送给外部 AI 前提供明确告知与同意
  • 对下载和激活所用文件路径增加二次约束

本 PR 保持打开,修正后继续复测,不作直接拒绝。

@powerycy

Copy link
Copy Markdown
Collaborator

最终状态更新:Markdown 上传 UTF-8 编码校验已通过 #62 合入 main,并在 #74 按“部分适配合入”署名。完整简历工作室暂未合并,原因仍是隔离回归存在 macOS 临时路径断言失败,且外部 AI 处理个人材料的明确告知/同意、下载与激活路径还需独立复核。本 PR 保持开放,后续只继续处理完整工作室本身,不会否认已经采用的编码校验贡献。

@yukinoshi yukinoshi added the status: partially-adopted Selected parts were adapted and merged; the source PR is superseded label Aug 31, 2026
@yuppiez99999

Copy link
Copy Markdown
Collaborator

🔎 状态排查(triage,非合并)

结论:与其它 PR 不同——这不是「差一次变基就能合」的机械冲突,而是维护者已明确的范围/里程碑决策:一个独立大型功能,暂缓整体合并。当前既有硬性阻塞(严重落后 main、缺外部 AI 告知/同意、CI 未跑),作者本人也仍在重构提取/LLM 流程。属「已受理、按独立里程碑推进中」,短期不具备合并条件。

已核对 head 438bfd0(base b17e1dd)。

维护者既定立场(@powerycy,多轮一致)

  • 该功能「属于独立大型功能,不能与多平台采集一起发布」,需拆为独立里程碑,另行完成隐私、文件解析、数据库迁移与威胁模型审查。
  • 其中可独立复用的贡献已合入:Markdown 上传 UTF-8 编码校验经 feat: collection-only Zhilian and 51job support #62 合入 main、并在 docs: 更新多平台功能与社区贡献榜 #74 「部分适配合入」署名。
  • 完整工作室保持开放但暂不整体合并,明确待办三项:① 修正 macOS 临时路径断言(/var vs /private/var 未统一 resolve);② 在把个人材料发送给外部 AI 前提供明确告知与同意;③ 对下载/激活所用文件路径增加二次约束。
  • 作者亦表示「当前功能还在优化中……正在优化文档提取流程和 LLM 调用流程」。

代码侧核对(抽验关键安全点)

  • ✅ AI 不能自动接受事实 — 抽取产物为 candidate,仅 status="accepted" 的事实进入主简历生成上下文(service.py 中确认)。人工闭环存在。
  • ⚠️ 外部 AI 告知/同意门控:未实现 — 在 resume_builder 全模块检索 consent/同意/告知/授权/acknowledge 无任何命中,直接印证维护者待办 ②仍未闭环。这是设计级阻塞,非机械冲突。

硬性阻塞 ⚠️

  1. 严重落后 main — compare 显示 behind 72 / ahead 3, diverged(base 停在 b17e1dd)。+6215/−379、32 文件、4 张新 SQLite 表,变基/迁移成本高,需作者主导。
  2. 外部 AI 同意门控缺失(见上),属合并前必做的安全设计项。
  3. CI 未运行 — head 上 check-runs=0。
  4. dist/ 产物亦基于旧 main 构建,需重建。

建议

维持维护者结论:按独立里程碑推进,不与采集功能同批发布。作者侧优先补齐外部 AI 告知/同意与下载/激活路径二次约束、修正 macOS 路径断言,并变基到最新 main 后重跑隔离复测;届时再进入完整安全审查。此 PR 不宜按「快速可合」处理。

说明:本条为状态排查,未改动代码、未合并(受权限所限)。整体合并与否属维护者里程碑决策。

@yuppiez99999

Copy link
Copy Markdown
Collaborator

感谢贡献 🙏 当前该 PR 与最新 main 存在冲突(mergeable: CONFLICTING),冲突根因主要来自前端构建产物 src/bosshunter/web/frontend/dist/(index.html + assets/*.js/*.css)——多个 PR 同时修改这些自动生成的产物文件,导致频繁互相冲突。

我们正在通过 #147 从根本上解决该问题:dist/ 将不再纳入版本控制,改为由 CI / 打包时按需构建。建议如下:

  1. 等 build(frontend): 停止跟踪 dist,改为按需构建以消除产物合并冲突 #147 合并后,将本分支变基到最新 main:
    git fetch upstream
    git rebase upstream/main
  2. 变基时丢弃对 src/bosshunter/web/frontend/dist/ 的所有改动(这些产物不再跟踪),只保留前端源码(src/...tsx/ts)与后端改动:
    git rm -r --cached src/bosshunter/web/frontend/dist   # 若变基后仍残留
  3. 前端源码改完后本地跑 npm ci && npm run build 自测即可,无需提交 dist/。

这样后续这类产物冲突会大幅消失。变基并推送后我们会尽快复核。

@powerycy

powerycy commented Sep 9, 2026

Copy link
Copy Markdown
Collaborator

本轮范围决策:完整简历工作室暂不纳入当前版本,关闭这条实现 PR,需求继续由 #60 保留为独立里程碑。

已核对当前改动:新增事实库、材料上传、AI 提取、版本启用及数据库迁移,涉及 32 个文件,属于独立产品流程。此前审核要求的外部 AI 处理个人材料告知/同意、下载与激活路径、跨平台解析验证仍需独立闭环,不适合长期挂在当前采集与投递功能的待合并队列中。

已通过 #62 采用、并在 #74 记录的 Markdown UTF-8 校验贡献保持原有记录。本次关闭的是完整工作室实现;未来明确里程碑后,可基于最新 main 拆分提交,沿用 #60 与本 PR 的设计和讨论。感谢此前的实现与修复。

@powerycy powerycy closed this Sep 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status: partially-adopted Selected parts were adapted and merged; the source PR is superseded

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] 从技术文档和作品材料生成可追溯主简历

4 participants