
Evaluasi: {Perusahaan} -- {Role}【免费下载链接】career-opsOpen-source AI job search: scan job portals, evaluate listings into a structured A-H report with a global 1-5 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…)项目地址: https://gitcode.com/GitHub_Trending/ca/career-opsTanggal:{YYYY-MM-DD}Arketipe:{terdeteksi}Score:{X/5}URL:{URL lowongan}PDF:{path atau menunggu}A) Ringkasan role(isi lengkap blok A)B) Kecocokan dengan CV(isi lengkap blok B)C) Level dan strategi(isi lengkap blok C)D) Kompensasi dan permintaan(isi lengkap blok D)E) Rencana personalisasi(isi lengkap blok E)F) Rencana wawancara(isi lengkap blok F)G) Draft jawaban untuk lamaran(hanya jika score 4.5 -- draft jawaban untuk formulir lamaran)Kata kunci terekstraksi(daftar 15-20 kata kunci dari lowongan untuk optimasi ATS)其中 **G 块申请表答案草稿仅当 score ≥ 4.5 时生成**——低分职位不值得为表单写答案这是工作流内置的时间盒设计。报告尾部还要提取 15–20 个 ATS 优化关键词。 ### 11.3 源码深读reserve-report-num.mjs 如何做到原子分配 [modes/id/lowongan.md](https://link.gitcode.com/i/d908b6ea579d255fb994c40c8441d6ca) 只说了跑这条命令而 [reserve-report-num.mjs](https://link.gitcode.com/i/0df687b6beab93b7f3d8a1d80b703cc7) 揭示了它为什么必要、如何保证原子。核心机制均有源码与测试 [tests/reserve-report-num.test.mjs](https://link.gitcode.com/i/bd9d076f320d26b0034255cdc601a87e) 佐证 **占用号收集**分配前脚本从两个来源收集已占用的编号——reports/ 目录下所有 NNN- 前缀文件名[reserve-report-num.mjs#L72-L83](https://link.gitcode.com/i/0df687b6beab93b7f3d8a1d80b703cc7#L72-L83)以及 trackerdata/applications.md中所有行号与报告链接里出现的编号。两者并集决定最高已用号 1为候选基线。源码里有一段值得注意的防御注释纯日期文件如 scan-ats-full.mjs --md-out reports/ 会写出的 reports/2026-01-06.md必须排除否则会被误读成报告 #2026让所有后续编号永久跳位。 **哨兵与原子占用**候选号通过创建哨兵文件 NNN-RESERVED.md 声明文件内容是 {pid, token, created_at} JSON写入使用 wx 标志O_CREAT|O_EXCL[reserve-report-num.mjs#L118-L131](https://link.gitcode.com/i/0df687b6beab93b7f3d8a1d80b703cc7#L118-L131)——文件系统层面的不存在则创建跨进程天然互斥两个并发进程同时抢同一个号必有一个收到 EEXIST。token 是每次预订的 UUID释放时校验所有权releaseReportNumbers 无 token 直接抛错只有 CLI 的 --release 走 force 管理通道。 **锁与重试**tracker 扫描与哨兵创建在 tracker 写锁之下执行acquireTrackerLock与 tracker 写入方同一把锁占用冲突时最多重试 50 次MAX_RETRIES每次重试重新收集占用集并推进基线。编号格式化 formatReportNumber 强制 3 位零填充[reserve-report-num.mjs#L42-L47](https://link.gitcode.com/i/0df687b6beab93b7f3d8a1d80b703cc7#L42-L47)与命名规范 {###} 严格对应。 **CLI 能力**--help 输出[reserve-report-num.mjs#L300-L366](https://link.gitcode.com/i/0df687b6beab93b7f3d8a1d80b703cc7#L300-L366) text Usage: node reserve-report-num.mjs [--count 1-N] [--release NNN[-MMM]] [--gc] (no flags) Reserve 1 report number (default) --count 1-50 Reserve N report numbers, printed as a range --release NNN[-MMM] Release a previously reserved number or range --gc Garbage-collect stale reservation sentinels即node reserve-report-num.mjs输出单个编号--count 8一次预订连续 8 个批量评估场景--release 035释放--gc回收陈旧哨兵。GC 的判定是双保险的reserve-report-num.mjs#L259-L298哨兵年龄超过 TTL默认 4 小时MAX_SENTINEL_AGE_MS且持有它的进程 PID 已死亡才删除——进程还活着就不动防止误删正在进行的长评估。这套设计的动机在 modes/id/lowongan.md 里一句话讲清了lowongan评估、batch 批量评估、pipeline 并发评估可能同时运行若各自读最大号 1两个进程会拿到同一个号、写坏同一个文件名。哨兵 排他创建 共享锁把读-判-占压缩成文件系统的一次原子操作。12. 评估后动作 2登记 tracker第二个SELALU动作是登记data/applications.md用户层 tracker默认位于 data 根目录。modes/id/lowongan.md 指定的登记字段与表头| # | Tanggal | Perusahaan | Role | Score | Status | PDF | Report |【免费下载链接】career-opsOpen-source AI job search: scan job portals, evaluate listings into a structured A-H report with a global 1-5 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…)项目地址: https://gitcode.com/GitHub_Trending/ca/career-ops创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考