1. 07 Sep, 2026 3 commits
    • 李文光'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
  2. 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
  3. 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
  4. 02 Sep, 2026 8 commits
  5. 01 Sep, 2026 9 commits
  6. 31 Aug, 2026 6 commits
    • 李文光's avatar
    • 李文光's avatar
    • 李文光's avatar
      61e871cb
    • 李文光's avatar
      feat: 多用户登录与按用户隔离工作区 · d588921d
      李文光 authored
      - 激活 User 表(username/role/password_hash/is_active/last_login_at),13 张业务表加 owner_id,AppStateMeta 改 String 主键(工作区键)
      - 认证中间件支持 Bearer 令牌 + Basic 兼容;ADMIN_PASSWORD 为登录总开关,未设置保持开放模式(local 工作区)
      - 密码 PBKDF2-SHA256 哈希、HMAC 签名令牌(SESSION_SECRET),零新依赖
      - 新增 /api/auth/* 路由:登录/登出/me/改密/用户 CRUD(admin 专属,含最后管理员保护)
      - 状态读写/采集落库按 owner 隔离,admin 可 ?owner= 切换工作区
      - 前端:登录页、用户管理页、user store、路由守卫、AppShell 用户菜单/工作区切换器,localStorage 按工作区分键
      - 旧库启动自动补 owner_id 回填 local 并重建 users/app_state_meta,历史数据不丢
      - 新增 create_user.py CLI(create/list/reset/disable/enable)
      - 测试 25 passed(新增 test_auth.py 14 用例),文档同步更新
      d588921d
    • 李文光's avatar
      docs: 补充项目文档并清理失效启动脚本 · cca6d880
      李文光 authored
      - 新增 AGENTS.md(AI 编码助手规范)、docs/project_handoff.md(交接文档)
      - 启动统一走 backend/scripts/start_server.py,支持 --with-frontend 构建同步前端;
        删除 backend/package.json 及失效脚本 sync_frontend_static.py / legacy-server.mjs
      - 学校/专业/技能词典抽为共享数据 shared/resume-dictionaries.json,
        后端 resume_parser_core.py 与前端 constants.js 均引用同一份
      - 更新各 README、.gitignore(忽略 .codegraph/);测试断言改为 Vue 前端资源
      cca6d880
    • 李文光's avatar
      Initial commit · 2e37711d
      李文光 authored
      2e37711d