chain-hiring

Chain · 招聘 —— 首个应用,而非产品本身

上级:requirements-to-design

L0 · 愿景

boundaries —— 招聘是建立在基础设施之上的一个应用,明确地不是产品本身。transaction-needs-difference —— 一笔交易需要差异性;简历是把信息有损压缩成一种HR可解析的格式;StandMeet的工作是把这份差异性放回去dont-repeat-myself —— 同一个工作故事,要在30到50场面试里被讲述5到15遍。

L1 · 承诺

在招聘这笔交易中,owner本人具体的、可证实的、带有主见的细节要能抵达招聘方——一条路径是简历上的二维码,把对方带入一场以某个岗位为框架的对话;另一条是owner一侧的主动外呼循环。

L2 · 需求(旅程与功能)

owner一侧的职位/简历/申请三条旅程,加上跨角色的闭环:招聘方扫描二维码 → 落地到 /<handle>?code=… → 这个code被吸收并暂存(延迟发放:session只在访客选定名字之后才会发放——刻意不做自动开始)。功能面:Jobs工具(jobs.fetch_new,18种来源——backend/internal/owner/jobs/fetch/jobfetch.go:36-63,由e2e/test/admin-sources.spec.ts:26-30断言;2026-09-02再加六种(7dd19527b),含通用的schema.org JSON-LD摄入器,2026-09-04加通用RSS适配器+预置默认聚合源(d235f9817))、Resume(resume.draft/update_draft/discard_draft;2026-09-07起是/admin/edit-resume/[id]上的可视化Puck composer——756c0eb1d,app/src/components/admin/composer/PuckResumeEditor.tsx——PDF由同一份Puck配置绘制,经gotenberg的Chromium打印/print/application/<id>——1b1ebed2b,backend/cmd/server/boot_pdf.go)、applications.commit;每张code自带落地路径/c/<slug>(c6c54ce88,2026-09-06,app/src/app/c/[slug]/page.tsxaccess/entity/access_code.go:85),code字符串可轮换以应对泄漏(codes.rotate,505b3fc4f,access/repo/codes_rotate.go;管理端弹窗6ed1759bb);管理端的Applications(可按公司/岗位/状态搜索——af263d4eb,2026-09-05)+ Sources + Listings。

L3 · 设计决策

职位闭环(job-loop)的设计(已建成;docs/design/job-loop.md是记录):状态与推理分离(StandMeet承担状态,Claude通过Playwright MCP承担推理——这个MCP server跑在owner一侧的Claude上,不属于我们的两个平面中的任何一个,confusables);AccessCode统一充当邀请码;强制分级提交(draft → preview → owner点头 → commit——绝不允许"Claude直接发送");二维码放在右上角,指向<public_url>/?code=<code>jobsuc/applications.go:317-322),不设/gate过渡页;history.replaceState?code从地址栏抹掉(app/src/lib/gate/use-absorb-code.ts);无效code落到/gate(230a17025);draft对职位行做快照。只有一个渲染器:2026-09-01加过一个带owner可选模板的Typst渲染器(340ffabf9),2026-09-07又拿掉了(1b1ebed2b)——Puck同时绘制编辑画布和PDF,预览与打印不可能分叉。IDEAS.md里的待办事项:resume采用git式模型(2026-05-28起UI已去掉git相关措辞)、application合并包、bullet与wiki之间的反向链接。

L4 · 工程产物

backend/internal/owner/jobs/——一个域模块(fetch / dedup / cache / jobsuc / jobsmcp / jobsadmin / printsess);数据表job_sources / job_fingerprints / resume_drafts / applicationscode_bookings已不存在——按code的订会配额归booker管,b73c932bb,2026-07-25);printsess + gotenberg(生成PDF,boot_pdf.go);用于测试的mock-stack,job-board伪造上游。

L5 · 验证

端到端测试[✓ applications-commit, -qr-works, -playwright-hint][✓ qr-code-absorb]coded-landing-slugapplications-searchjob-fetch-rss、以及resume-composer-* / resume-pdf-render / resume-look / composer-pdf-fidelity这一批(e2e/test/);以及booking的回归测试套件。

现状与缺口

职位闭环的各阶段已建成(jobs / resume / applications / QR → 带码落地页均已上线;不存在日历钩子——在36789537d的backend里找不到next_event_at);强制分级提交这条纪律,就是这条chain自己的安全递归闸门——任何东西发出去之前都要owner点头。需要警惕的边界风险:按boundaries自己的警告来看,这是最容易被过度投入的一条chain。

about this entry

One of sijie's wiki entries. The AI on this site is grounded in the same corpus and answers in sijie's voice, with citations back to entries like this one — answering costs sijie money, so it waits behind a code: enter an access code →