Files
pikasTech-unidesk/project-management/PJ2026-04/specs/PJ2026-04-findjob-workbench.md
T
pikastech d87c10e964
Pipelines as Code CI / hwlab-web-probe-sentinel-nc01- Success
Pipelines as Code CI / platform-infra-gitea-nc01- Success
Pipelines as Code CI / unidesk-host- Success
feat: 声明求职密码库 PostgreSQL 存储
2026-07-19 10:53:17 +02:00

6.9 KiB

PJ2026-04 求职工作台需求规格

1. 文档控制

字段 内容
编号 PJ2026-04
短名 求职工作台
层级 L1 项目
状态 已生效
需求规格模板 ISO/IEC/IEEE 29148 需求规格模板

2. 目的和范围

2.1 目的

求职工作台负责把候选单位、招聘渠道、账号、材料、岗位申请和需要本人参与的事项投影到统一 Web 入口,使求职执行状态可扫描、可扩展并能在验证码或资料缺口出现时及时获得本人输入。

2.2 范围内

  • 高校、企业、研究机构和其他单位的统一状态模型。
  • 账号、简历、岗位和申请状态投影。
  • 图形验证码、短信验证码、真人校验、资料补充和提交确认等人工事项。
  • 统一管理员密码认证、HTTPS 公开入口和受控会话。
  • 招聘账号密码在 host PostgreSQL 中按单位明文保存、生成、查看和复制。
  • Vite 前端与 Bun API 的 native 热重载开发形态。
  • 声明式业务状态、本地私密运行状态和外部表单工作流的边界。

2.3 范围外

  • 招聘单位外部系统的可用性和数据正确性。
  • 绕过图形、短信、滑块或其他真人验证。
  • 未经本人确认最终提交限报或提交后不可修改的岗位。
  • 把身份证、密码、验证码、Cookie 或本人补充的敏感答案写入 Git。

3. 术语

术语 定义
单位 高校、企业、研究机构或其他招聘主体。
招聘渠道 单位招聘系统、学院邮箱、第三方平台或线下联系人。
人工事项 自动流程需要本人查看、填写或确认后才能继续的任务。
业务状态 可提交到私有仓库的单位、材料和申请公开状态。
私密运行状态 工作流 ID、验证码 artifact、本人答案和其他不得提交的临时状态。
招聘密码库 在 host PostgreSQL 独立数据库中按单位保存招聘账号和明文密码的私密状态。

4. 系统边界

边界项 内容
外部使用者 求职者本人和受托执行 Agent。
外部输入 单位声明、招聘入口、申请状态、验证码、本人资料和确认结果。
外部输出 状态总览、人工事项、材料清单和操作结果摘要。
受控资源 统一密码来源、招聘工作流、验证码 artifact、本地私密状态和 HTTPS 入口。
用户接口 findjob.hwpod.com Web 入口和项目 CLI。

5. 架构

flowchart LR
  Career[单位与申请 YAML] --> API[Bun API]
  Tasks[本地人工事项] --> API
  Secret[统一密码 sourceRef] --> API
  Vault[host PostgreSQL 明文招聘密码库] <--> API
  Workflow[外部表单工作流] <--> API
  API --> Vite[Vite Web 工作台]
  Vite --> Edge[HTTPS 公共边缘]
  Edge --> User[求职者]
  • 业务状态由求职仓库声明式数据拥有。
  • 端口、启动命令、状态路径和认证来源由求职仓库 config.json 拥有。
  • 公共域名、TLS upstream 和 health path 由 UniDesk public exposure YAML 拥有。
  • 私密运行状态只保存在求职仓库 .state/
  • 招聘密码库使用受控 Secret sourceRef 连接 host PostgreSQL,不维护第二个主密码。
  • 招聘密码明文只在已认证会话的单条显式查看请求中返回。

6. 原子需求

6.1 FJ-REQ-001 统一状态总览

工作台应在首屏展示全部单位数量、已注册数量、待本人处理数量和可用材料数量,并以表格展示每个单位的账号、简历和申请状态。

6.2 FJ-REQ-002 可扩展单位模型

工作台应让高校、企业、研究机构和其他单位共用同一数据结构、筛选器和状态渲染。新增单位不应要求新增专用页面分支。

6.3 FJ-REQ-003 人工事项

工作台应把验证码、短信、真人校验、缺失资料、限报决策和提交确认表示为独立人工事项。人工事项应包含所属单位、说明、输入合同和处理状态。

6.4 FJ-REQ-004 外部表单续填

图形验证码事项应展示当前受控 artifact,并把本人输入经标准输入传给已声明的外部表单工作流。验证码值不得进入 URL、命令参数、日志、Git 或持久响应记录。

6.5 FJ-REQ-005 认证和隐私

工作台应使用统一管理员密码来源认证。正式 HTTPS 入口使用 SecureHttpOnlySameSite=Strict 会话 Cookie;公共入口故障期间的固定 HTTP 降级入口保留 HttpOnlySameSite=Strict 并显示传输降级警告。API 未认证时不得返回求职状态、材料路径或人工事项。

6.6 FJ-REQ-006 热重载

native 开发应同时保持前端 HMR 和 API 文件监听热重载。服务端口和生命周期应由项目配置和项目 CLI 固定管理。

6.7 FJ-REQ-007 公开入口

正式用户入口应为 YAML 声明的 HTTPS 域名。公共边缘应把该域名代理到固定前端端口,并通过同源 /api 到达 API 服务。

6.8 FJ-REQ-008 提交边界

账号注册可在本人授权和验证码完成后执行。每人限报一个、提交后不可修改或其他高影响岗位申请只能保存草稿,最终提交前必须生成人工确认事项。

6.9 FJ-REQ-009 招聘密码库

工作台应为每个单位管理独立招聘账号和密码,并满足以下要求:

  • 使用密码学安全随机源生成符合指定长度的密码。
  • 密码库使用 host PostgreSQL 独立数据库和最小权限角色。
  • password_plaintext 字段直接保存招聘密码明文,不进行应用层或字段级加密。
  • 数据库连接参数只从受控 Secret sourceRef 读取,不写入仓库。
  • 单位列表和密码库摘要只返回账号、密码是否存在和更新时间,不返回密码明文。
  • 查看或复制密码必须由已认证用户对单个单位显式触发。
  • 前端不得把全部密码预加载到页面状态。
  • API、CLI、日志、TaskTree、Git 和错误响应不得打印密码明文。
  • 更新密码时应覆盖该单位的当前明文记录,不保留可由普通接口读取的历史密码。

7. 验收契约

  • 未登录打开正式 HTTPS 入口时只显示登录界面。
  • 正确统一密码登录后能看到单位状态、材料和人工事项。
  • 新增一条企业声明后,无需修改前端即可出现在企业筛选结果中。
  • 图形验证码事项能显示受控图片并把值传入对应工作流,页面和日志不回显验证码。
  • 修改前端源码后 HMR 连接保持可用,修改 API 源码后服务自动重载。
  • 桌面和移动视口均无文本重叠、横向页面溢出或操作按钮不可达。
  • 正确登录后能为单个单位生成、查看和复制招聘密码。
  • 未登录请求、单位列表请求和密码库摘要请求均不能取得密码明文。
  • Git diff、CLI、日志和 TaskTree 中不出现招聘密码明文。