1. 09 Sep, 2026 1 commit
  2. 08 Sep, 2026 6 commits
    • 李文光's avatar
      feat(resumes): 简历解析异步化并在候选人列表实时显示进度 · 55cc26ed
      李文光 authored
      - 新增 resume_parse_tasks 异步解析任务表,独立于整包 state 同步
      
      - POST /api/resume-tasks 落盘即返 taskId+文件信息+正则兜底字段,后台跑 LLM 深抽;GET 轮询/DELETE 清理,创建时自动清理 24h 前已完成/失败任务
      
      - 新增/批量上传保存后立即关闭弹窗,候选人带 parseStatus 先入库,深抽结果回填
      
      - 列表/详情显示解析中/解析失败进度,刷新后 boot 续跑未完成任务
      
      - LLM 结构化抽取默认关推理(reasoning_effort=none)并收紧超时/重试
      55cc26ed
    • 李文光's avatar
      feat(offer): 优化 Offer 流程页布局配色并补齐邮件草稿展示 · 7ebb14a3
      李文光 authored
      - 工作流步骤条加连接线/完成勾,后续步骤弱化
      - 把当前唯一「下一步」提为步骤面板主 CTA,右侧按 推进 / 风险终止 分组
      - 补齐「邮件草稿」预览(此前只生成不展示)+复制/重新生成
      - 头部加语义色状态 chip、审批驳回/终止风险横幅
      - 审批材料缺失项改为「待补充」标签+缺失汇总
      - Offer 明细表单改为两列网格(原 .two 未定义实际单列)并加响应式折叠
      - 抽出 offerStatusMeta 统一 Offer 列表与流程页状态色
      7ebb14a3
    • 李文光's avatar
      feat(dashboard): 重做招聘数据看板配色与图表方案 · 3fdbebc5
      李文光 authored
      - 看板级语义配色(蓝/青/紫/琥珀/绿)映射招聘漏斗,提升白底对比度
      
      - KPI 卡片加图标色块与语义色调;新增关键洞察条(周期/转化)
      
      - 漏斗/趋势/来源/ROI 统一看板色;趋势补 Y 轴刻度,漏斗内嵌数值自适应文字色
      
      - 招聘日历改为左侧月格+右侧事件卡片双栏,宽屏自适应多列,加图例与数量角标
      3fdbebc5
    • 李文光's avatar
      fix(jd): JD 粘贴解析保留序号/列表符号,匹配与外发时再清洗 · 3605d466
      李文光 authored
      粘贴 JD/需求模板解析时不再剥离 1、-、• 等列表符号,让「JD 与匹配标准」下的核心职责、任职要求展示为带序号/符号的列表;匹配评分与对外 JD 导出时统一去掉行首符号,避免污染关键词。
      3605d466
    • 李文光's avatar
      fix(resumes): 修复批量上传简历状态不刷新导致确认入库按钮置灰 · 0e40e7ce
      李文光 authored
      entry 以普通对象 push 进响应式数组后直接改 status,绕过 Vue 代理
      set 陷阱,界面停留在解析中且 canImport 不重算。改为 reactive() 包裹
      后所有字段变更正常触发更新。
      0e40e7ce
    • 李文光's avatar
      fix(ingest): 修复 SQLite 外键序导致采集入库与整包状态写入 500 · 3485580a
      李文光 authored
      采集 upsert_ingest_candidate 与整包 replace_state 在无 ORM relationship 时,SQLAlchemy 同一 commit 内不保证按外键依赖顺序插入,子表(ingest_items / tasks / recruitment_events)可能在父行(candidates / resume_files / offers)存在前被写入,SQLite 开启 PRAGMA foreign_keys 时报 FOREIGN KEY constraint failed。
      
      - ingest: 在添加 ingest_items 前显式 flush 父行。
      - state: 在候选人/Offer/任务各循环后显式 flush,强制 岗位→候选人→Offer→任务→事件 顺序;并对任务/事件的外键做兜底:目标行不存在时置空,避免孤儿引用(如迁入 _pool 又被清空的候选人)导致 500。
      - 新增开启外键约束的回归测试(测试夹具引擎未开 PRAGMA,此前掩蔽此类问题)。
      3485580a
  3. 07 Sep, 2026 7 commits
    • 李文光's avatar
      fix(extension): 修复浏览器扩展登录与登录态恢复 · 72e22009
      李文光 authored
      - main.py: CORS 放行 chrome-extension 源并开启 Private Network Access,解决扩展跨域预检 400
      - security.py: 鉴权中间件放行 OPTIONS 预检,避免需登录接口(如 /api/auth/me)预检被 401 拦截
      - popup.js: 令牌仅在 401/403 时清除,瞬态校验失败保留登录信息;测试连接按钮结束后复位
      - test_static_security.py: 新增认证接口预检回归测试
      72e22009
    • 李文光's avatar
      feat(ingest): 采集数据按登录用户归属(ADR 0007) + 扩展 v1.5 + 后端监听 0.0.0.0 · 755cfd9d
      李文光 authored
      /api/ingest 改为依赖 get_current_user, 以登录用户名作为 owner; 移除 ingest_owner 配置与开放模式合成用户/INGEST_OWNER 回落, 采集归属与登录态强绑定
      
      security: /api/ingest 不再豁免 DeploymentAuthMiddleware(改走统一登录); 智能体/外部JD同步等机器调用仍走 INGEST_TOKEN
      
      同步更新后端测试(conftest/auth/ingest/external_claims/pool/reports/recruiting_rules_agent), 122 passed
      
      浏览器扩展 v1.5(弹窗/后台/README) 与 start_server.py 监听 0.0.0.0
      
      新增 docs/adr/0007-per-user-ingest-attribution.md
      755cfd9d
    • 李文光's avatar
      feat(需求3): 岗位类型细分——jobType 枚举替换 category + 公司级 admin 可配置 + 列表筛选 · de329be8
      李文光 authored
      - 后端: services/job_types.py(data/job-types.json 读写/引用禁删/未分类兜底)+ GET|PUT /api/job-types
      - 后端: 启动一次性幂等回填旧 category->jobType; main.py 注册路由
      - 前端: constants 默认枚举 + store jobTypeOptions + JobEdit 下拉/JobList 筛选与徽标/JobDetail 展示
      - 前端: normalize/search 文本改用 jobType 取代 category; admin 页新增岗位类型配置
      - 文档: CONTEXT 词表(岗位类型/商务两口径, category 标 _Avoid)+ ADR 0006; requirements 需求3 标记已实现
      - 测试: backend/tests/test_job_types.py(6 例); 前端 build/lint/test 通过
      de329be8
    • 李文光's avatar
    • 李文光's avatar
      fix(ai): LLM 直连超时/异常时回退本地结构化,不再 500 · c77014f9
      李文光 authored
      generate_jd_draft / analyze_resume / parse_pasted_jd / generate_v2_analysis 在调用 _chat_json
      超时(如 'Request timed out.')时原先会直接抛异常,导致 JD 生成/简历分析/粘贴解析/富报告
      报错。现在统一捕获 LLM 调用异常并回退本地结构化/规则/小节切分,补充超时回退单测。
      c77014f9
    • 李文光's avatar
      fix(state): 修复 offers 残留 UNIQUE(candidate_id) 导致整包覆盖 500 · cac52e1c
      李文光 authored
      模型已允许同一候选人多条 Offer(一条进行中 + 历史已拒绝/已作废),但旧库 offers 表仍残留
      UNIQUE(candidate_id);replace_state 写入多条同候选人 Offer 时触发 UNIQUE constraint failed,
      PUT /api/state 返回 500。启动时自动检测并重建表移除该约束(保留数据/owner_id 索引/外键),
      并补充旧库自动修复与多 Offer 写入单测。
      cac52e1c
    • 李文光's avatar
      fix(plugin): 采集插件跨域改走后台代理 + 后端地址动态授权 + 后端 CORS 放开 · 65c3cb13
      李文光 authored
      内容脚本跨域 fetch 改为经 background Service Worker 转发, 解决同步时本地服务未启动(Chrome MV3 内容脚本跨源请求始终按跨源处理, 即使有 host_permissions 也被 CORS 拦截)
      
      扩展新增 optional_host_permissions + 运行时 chrome.permissions.request 动态授权, 换后端地址只需在弹窗填新地址并点一次测试连接, 无需改 manifest
      
      后端 CORS 默认放宽为 *, 同步更新 test_static_security 的 Access-Control-Allow-Origin 断言
      65c3cb13
  4. 04 Sep, 2026 6 commits
    • 李文光's avatar
      fix(ui): Element Plus 启用中文语言包(zh-cn) · 45ea60ee
      李文光 authored
      引入 element-plus/es/locale/lang/zh-cn,使组件(日期/分页/弹窗等)显示中文。
      45ea60ee
    • 李文光's avatar
      feat(offer): 补齐 Offer 异常分支与重开 + 审批材料单源化 + 前端单测 · feba71f1
      李文光 authored
      - Offer 状态新增 审批驳回(回路)/已拒绝/已作废(终止),流程面板以退回/终止徽标展示,不再硬塞线性五步
      - 允许同一候选人重开 Offer:放开 offers.candidate_id 唯一约束,重开带 reofferOf,保留历史
      - 审批材料/薪资摘要单源化到 utils/offer.js(buildOfferApprovalMaterials/offerBlockers),删除 store 重复实现与死代码
      - 风险作为审批材料一行展示,默认不作流程硬门槛;驳回/作废理由写入 approvalNote 并记事件
      - 修复 OfferList 打开未设 selectedOfferId 的入口 bug;修复 OfferList 仍引用已删 store.offerSalarySummary 的回归
      - 新增 utils/offer.js Vitest 单测(14 用例);AGENTS/CONTEXT 更新;新增 ADR 0005
      feba71f1
    • 李文光's avatar
      fix(offer): 收敛 Offer 状态机并打通 Offer→待入职→已入职流程 · a47022ac
      李文光 authored
      - Offer 状态枚举统一为 待 HR 确认/审批中/审批通过/待入职/已入职,
        去掉「邮件审批中/邮件审批待发送」双轨(offer.js/recruitment.js/constants.js)
      - OfferFlow 流程按钮按状态顺序门控,未满足条件禁用并给原因
      - 确认已入职前置校验入职日期(startDate),缺失则阻止并提示
      - 简历库抽屉 footer 随候选阶段动态渲染;Offer/待入职/已入职只留「去录用入职处理」入口
      - reconcileRecruitmentLinks 阶段与 Offer 状态解耦:只做 已入职/待入职 单向推进,
        不再强置非 Offer/入职阶段为 Offer 中
      - 候选人「评估」页新增 快速匹配/AI 评估 切换,有有效 AI 报告时可随时切回
      - CONTEXT.md 增补 Offer 状态词条;新增 ADR 0004
      a47022ac
    • 李文光's avatar
    • 李文光's avatar
    • 李文光's avatar
      feat: 需求9 粘贴JD自动结构化 + 招聘需求模板(含对内约束), 入口重排至新建流程 · 22f1e111
      李文光 authored
      新增 backend/app/services/jd_import.py: build_requirement_template 生成《招聘需求模板》(发给用人部门填写,含对内约束:性别/年龄/试用期/竞业/验证), parse_pasted_jd 把填好的模板或整段 JD 拆成结构化岗位字段(LLM 优先,无 Key/失败回退本地小节切分); 新增接口 /api/jd/parse-pasted 与 /api/jd/requirement-template。前端: 岗位管理列表 hero 新增「从 JD / 需求模板创建」直达(自动打开粘贴), 新建岗位页顶部两步引导卡(01 生成需求模板 / 02 粘贴自动创建), JobEdit JD 页保留编辑老岗位的小入口, 对内约束回填岗位字段持久化(不上对外 JD)。测试: test_jd_import.py, 全量 103 passed。文档 requirements/CONTEXT 同步。
      22f1e111
  5. 03 Sep, 2026 5 commits
    • 李文光's avatar
    • 李文光's avatar
      feat: 招聘规则库+agent只读(Phase2) 与 ADR0003 skill 契约校正 · 09cee42c
      李文光 authored
      - 规则库: GET/PUT /api/recruiting-rules(登录读/admin写, data/recruiting-rules.json, 不进业务表)
      - agent 只读: GET /api/agent/recruiting-rules + GET /api/agent/jobs(jobId/title, 含对内字段, X-Ingest-Token), security 放行
      - llm.py: internalNote 纳入 _INTERNAL_ONLY_JOB_KEYS, 对内笔记 MD 不出对外/LLM
      - skill 契约按 battle 定稿校正: 入口2=产出定稿包 -> agent 代建 OA 单(不用"同步到招聘系统"话术); OA bill 双轨(对外MD+执行字段进OA, 对内笔记 internalOnly 载荷按 oaBillNo 认领时合并归档 internalNote); jd-sync 改为内部/QA 导入通道
      - 后端 96 passed
      09cee42c
    • 李文光's avatar
      feat: 分析报告公网分享(ADR 0002) + 外部岗位认领 Phase1(ADR 0003) + skill 镜像与词表 · 84e9cff1
      李文光 authored
      - 报告分享: candidate_reports 独立快照表 + 令牌公网只读(reports/report_repository/ShareReportView/security 放行/配置开关)
      - 外部岗位认领: external_job_claims 待认领区 + sync-external 落区 + 认领行级接口(GET /api/job-claims, POST /api/job-claims/{id}/claim) + 前端「岗位认领」页 + 外部已审批岗位「核对后确认生效」流转
      - docs/recruit-grill skill 镜像、CONTEXT.md 术语(外部岗位/待认领岗位/岗位认领/岗位对内档案/招聘规则库/OA 审批直读)、ADR 0003 与落地清单
      - 后端 90 passed; vue-app npm run build 通过
      84e9cff1
    • 李文光's avatar
      feat: 需求17 风险点固定维度——四维本地规则 + LLM 对齐 + 前端固定维度面板 · ba4d5ed2
      李文光 authored
      新增 backend/app/services/risk_profile.py 本地确定性规则(跳槽频率/竞业协议/职业空窗/高层职业道德),从简历原文按章节提取任职时间线(自动排除教育/实习/项目段);local-structured 与 LLM 评估统一合并 riskProfile,LLM prompt 将 risks 限定固定四维;前端评估报告优先展示固定维度命中项,候选人详情「评估」Tab 新增「风险点评估」面板(正常/提示/需确认 + 依据 + 建议)。测试:test_risk_profile.py + test_ai.py prompt 断言,全量 72 passed。文档 requirements_from_interview.md 同步标注 
      ba4d5ed2
    • 李文光's avatar
      feat: 需求14 自述优势约束、需求4/22 岗位联动与简历量统计、看板图表重构 · 1249554d
      李文光 authored
      - 需求14: 评估/解析 prompt 加入「候选人自述优势不作匹配依据、只作面试待验证线索」铁律, 同步 CONTEXT.md 术语与 test_ai.py 单测
      - 需求4: 确认入职后 hired>=headcount 自动置「已招满」并记 job_filled 事件, 待办关注/徽标/动作卡口径同步
      - 需求22: 简历库顶部「各岗位简历量」统计 chips, 点击按岗位聚焦筛选候选人
      - 看板: 修复 dashboardScope 漏返回 filters 导致的 TypeError; 漏斗改按「已达阶段累计」梯形展示(与 KPI 口径一致); 来源环图改数据驱动(扇区=真实占比); 日历跟随筛选月份; 趋势/ROI 明细与转化展示优化
      1249554d
  6. 02 Sep, 2026 8 commits
  7. 01 Sep, 2026 7 commits