Files
career-ops-vbleroy/modes/ja/kyujin.md
T
redlineo d295c7f139
Release Please / release-please (push) Failing after 4m2s
Web CI / web typecheck + build (push) Successful in 3m39s
CodeQL Analysis / Analyze (javascript-typescript) (push) Failing after 1h1m49s
CodeQL Analysis / Analyze (go) (push) Failing after 1h1m49s
init
2026-07-13 10:14:00 +03:00

298 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# モード: kyujin -- 完全評価 A-G
候補者が求人(テキストまたは URL)を貼り付けたら、必ず 7 ブロック(A-F の評価 + G の legitimacy)を出力する:
## Liveness gate (URL inputs)
候補者が **URL**(JD テキストではなく)を貼り付けた場合、評価を始める前に求人がまだ live であることを確認する。Dead link は Block A に進めない。404 / expired page に対して A-G 評価、report、PDF を作るのは無駄。
1. ページ内容を取得する。`auto-pipeline` から来た場合(Step 0.5 がすでに navigate し、link を確認済み)、その snapshot を再利用する。直接 URL が渡された場合は Playwright(`browser_navigate` + `browser_snapshot`)で navigate し、title、URL、visible content を読む。
2. 投稿を分類する:
- **active posting evidence:** title/role + 実際の job description または application/apply path
- **closed posting evidence:** expired/closed/"no longer accepting applications"、JD がなく nav/footer だけ、generic careers/search page への hard redirect、404/410
3. 投稿が closed に見える場合は、**Block A の前で stop**:候補者に link が dead であると伝える。entry が `data/pipeline.md` 由来なら、`- [x] ~~Company | Role~~ -- 求人非アクティブ` として mark する。評価、report、CV は生成しない。
4. 候補者が JD テキストだけを貼った場合(URL なし)、liveness は確認できない。その limitation を note して進む。確認する link がないため。
この gate が解決するまで Block A に進まない。ここで取得した snapshot は Block G の freshness signals に再利用する。
## Step 0 -- Archetype Detection
求人を 6 つの archetype のいずれかに分類する(`_shared.md` 参照)。Hybrid の場合は最も近い 2 つを示す。これにより以下が決まる:
- Block B でどの proof points を優先するか
- Block E で summary をどう書き換えるか
- Block F でどの STAR stories を準備するか
## Block A -- Role Summary
Table with:
- Archetype detected
- Domain (platform/agentic/LLMOps/ML/enterprise)
- Function (build/consult/manage/deploy)
- Seniority
- Remote (full/hybrid/onsite)
- Team size (if mentioned)
- TL;DR in 1 sentence
## Block B -- Match with CV
`cv.md` を読む。JD の各 requirement を CV の exact lines に mapping した table を作る。
**Adapted to the archetype:**
- If FDE → delivery speed と client-facing proof points を優先
- If SA → system design と integrations を優先
- If PM → product discovery と metrics を優先
- If LLMOps → evals、observability、pipelines を優先
- If Agentic → multi-agent、HITL、orchestration を優先
- If Transformation → change management、adoption、scaling を優先
**Gaps** section with mitigation strategy for each. 各 gap について:
1. Hard blocker か nice-to-have か
2. 候補者は adjacent experience を示せるか
3. Portfolio project がこの gap を cover しているか
4. Concrete mitigation plan(cover letter 用 phrase、quick project など)
## Block C -- Level and Strategy
1. **Level detected** in the JD vs **candidate's natural level for that archetype**
2. **"Sell senior without lying" plan**: archetype に適応した specific phrases、highlight すべき concrete achievements、founder experience を advantage として position する方法
3. **"If they downlevel me" plan**: compensation が fair なら受け入れる、6-month review を交渉する、clear promotion criteria を求める
## Block D -- Comp and Demand
WebSearch を使って調べる:
- その role の current salaries(OpenWork、ビズリーチ、Glassdoor、Levels.fyi、Blind)
- Company の compensation reputation
- その role の demand trend
Data と cited sources 付きの table を作る。Data がない場合は、捏造せずその旨を書く。
**日本市場 -- 必須チェック:**
- 正社員か業務委託か。正社員なら賞与、有給、社会保険、通勤・住宅手当、退職金を比較に含める
- 業務委託なら月額と正社員換算を計算する
- 賞与の記載はあるか。月給何ヶ月分か
- ストックオプションはあるか。vesting、cliff、税制を評価する
- 年俸制か。賞与が含まれるか別か
- みなし残業はあるか。何時間分含まれ、超過分は支払われるか
- 住宅・通勤手当はあるか。月額はいくらか
- 健康保険・厚生年金は標準か手厚いか
## Block E -- Customization Plan
| # | Section | Current status | Proposed change | Why |
|---|---------|---------------|------------------|-----|
| 1 | Summary | ... | ... | ... |
| ... | ... | ... | ... | ... |
Top 5 changes to CV + Top 5 changes to LinkedIn to maximize match.
## Block F -- Interview Plan
JD requirements に mapping した 6-10 STAR+R stories(STAR + **Reflection**):
| # | JD Requirement | STAR+R Story | S | T | A | R | Reflection |
|---|----------------|--------------|---|---|---|---|------------|
**Reflection** column は、何を学んだか、または次に何を変えるかを捉える。これは seniority の signal。Junior candidates は起きたことを説明する。Senior candidates は lessons を抽出する。
**Story Bank:** `interview-prep/story-bank.md` が存在する場合、これらの stories がすでにあるか確認する。なければ新しいものを append する。時間とともに、どの interview question にも適応できる 5-10 master stories の reusable bank を作る。
**Selected and framed according to the archetype:**
- FDE → delivery speed と client-facing を強調
- SA → architectural decisions を強調
- PM → discovery と trade-offs を強調
- LLMOps → metrics、evals、production hardening を強調
- Agentic → orchestration、error handling、HITL を強調
- Transformation → adoption、organizational change を強調
Also include:
- 1 recommended case study(どの project をどう present するか)
- Red-flag questions and how to answer them(例:"why did you sell your company?", "do you have a team of reports?")
## Block G -- Posting Legitimacy
Job posting を分析し、real, active opening かどうかを示す signals を出す。これは、ユーザーが hiring process につながりやすい機会に effort を優先配分するためのもの。
**Ethical framing:** Observations を提示し、accusations にしない。どの signal にも legitimate explanations があり得る。判断はユーザーが行う。
### Signals to analyze (in order):
**1. Posting Freshness**(liveness gate または `auto-pipeline` Step 0 で取得した Playwright snapshot から。JD テキストだけの場合は unavailable):
- Date posted または "X days ago" を page から抽出
- Apply button state(active / closed / missing / redirects to generic page)
- URL が generic careers page に redirect された場合は note する
**2. Description Quality**(JD text から):
- Specific technologies, frameworks, tools を named しているか
- Team size、reporting structure、org context に触れているか
- Requirements は realistic か(years of experience vs technology age)
- 最初の 6-12 months の scope が clear か
- Salary/compensation に触れているか
- JD のうち role-specific vs generic boilerplate の比率
- Internal contradictions があるか(entry-level title + staff requirements など)
**3. Company Hiring Signals**(2-3 WebSearch queries。Block D research と combine):
- Search: `"{company}" layoffs {year}` -- date、scale、departments を note
- Search: `"{company}" hiring freeze {year}` -- announcements を note
- Layoffs が見つかった場合、この role と同じ department か確認
**4. Reposting Detection**(scan-history.tsv から):
- company + similar role title が別 URL で過去に出ているか確認
- 回数と期間を note
**5. Role Market Context**(qualitative、additional queries なし):
- この role は通常 4-6 weeks で埋まる common role か
- Role が company business に合っているか
- Seniority level が長く open になりやすい type か
### Output format:
**Assessment:** One of three tiers:
- **High Confidence** -- Multiple signals suggest a real, active opening
- **Proceed with Caution** -- Mixed signals worth noting
- **Suspicious** -- Multiple ghost job indicators, investigate before investing time
**Signals table:** 観測した各 signal、finding、weight(Positive / Neutral / Concerning)を table にする。
**Context Notes:** Niche role、government job、evergreen position など、concerning signals を説明し得る caveats を書く。
### Edge case handling:
- **Government/academic postings:** Timeline が長いのが標準。Threshold を調整(60-90 days は normal)。
- **Evergreen/continuous hire postings:** JD が "ongoing" / "rolling" と明示する場合は context として note。これは ghost job ではなく pipeline role。
- **Niche/executive roles:** Staff+、VP、Director、highly specialized roles は months open でも legitimate。Age thresholds を調整。
- **Startup / pre-revenue:** Early-stage companies は role が genuinely undefined で JD が vague なことがある。Description vagueness の重みを下げる。
- **No date available:** Posting age が判断できず、他に concerning signals がない場合、limited data の note 付きで default to "Proceed with Caution"。Evidence なしで "Suspicious" にしない。
- **Recruiter-sourced (no public posting):** Freshness signals unavailable。Active recruiter contact 自体を positive legitimacy signal として note。
---
## Cover Letter Draft (auto-generated after Block G)
Report を保存し tracker に記録した後、report file に `## Cover Letter Draft` として cover letter draft を append する。これは starting point であり final letter ではない。ユーザーは `/career-ops cover {slug}` で完成させる。
**How to generate the draft:**
1. `cv.md` を読む。JD の top requirements に最も relevant な achievement bullets を 4 つ選ぶ(exact wording、real metrics only)
2. `config/profile.yml` を読む。candidate name、current role、years of experience を抽出する
3. Role title と JD mission language に基づく 2-sentence opening を書く
4. `cv.md` summary から 1-paragraph profile intro を書き、JD domain に合わせる
5. "Problems / Why this company / Approach" section は placeholder にする。ここは user input が必要
6. Gaps(domain mismatch、language requirement、start date urgency)を detect and flag し、ユーザーがすぐ確認できるようにする
**Draft format to append to the report:**
```markdown
## Cover Letter Draft
> Draft generated at evaluation time. Complete via `/career-ops cover {slug}` to fill in angles, confirm research, and generate the PDF.
> Gaps flagged below -- address them during the cover flow.
---
**Opening** *(placeholder -- refine with your "why this role" angle)*
{2-sentence opening based on JD role title and mission language}
**Profile introduction**
{1 paragraph from cv.md summary, adapted to JD domain and required competencies}
**Key achievements** *(selected from cv.md -- exact wording preserved)*
- **{lead from cv.md},** {impact sentence with metric}.
- **{lead from cv.md},** {impact sentence with metric}.
- **{lead from cv.md},** {impact sentence with metric}.
- **{lead from cv.md},** {impact sentence with metric}.
**Problems I will solve** *(placeholder -- requires company research + your input)*
> To be completed: what challenges does {company} face that you'd address? How would you approach them?
**Closing**
I am happy to discuss further at your convenience.
---
**Gaps flagged:**
{List any detected gaps -- domain mismatch, language requirement, start date urgency, title mismatch. If none, write "None detected."}
**JD keywords to mirror** *(extracted for ATS + human read)*
{8-10 exact phrases from the JD}
---
*Run `/career-ops cover {slug}` to complete angles, confirm company research, and generate the PDF.*
```
`_shared.md` の Professional Writing section にある language rules を draft content にすべて適用する。No em dashes、no buzzwords、active voice、concrete claims only。
---
## Post-evaluation
**ALWAYS** after generating blocks A-G:
### 1. Save report .md
Full evaluation を `reports/{###}-{company-slug}-{YYYY-MM-DD}.md` に保存する。
- `{###}` = next sequential number(3 digits, zero-padded)。競合を防ぐため、必ず `node reserve-report-num.mjs` を実行して番号を claim し(stdout returns `{###}`)、report を write してから `node reserve-report-num.mjs --release {###}` を実行して sentinel を release する。
- `{company-slug}` = company name in lowercase, without spaces(use hyphens)
- `{YYYY-MM-DD}` = current date
**Report format:**
```markdown
# Evaluation: {Company} -- {Role}
**Date:** {YYYY-MM-DD}
**URL:**
**Archetype:** {detected}
**Score:** {X/5}
**Legitimacy:** {High Confidence | Proceed with Caution | Suspicious}
**PDF:** {path or pending}
---
## A) Role Summary
(full content of block A)
## B) Match with CV
(full content of block B)
## C) Level and Strategy
(full content of block C)
## D) Comp and Demand
(full content of block D)
## E) Customization Plan
(full content of block E)
## F) Interview Plan
(full content of block F)
## G) Posting Legitimacy
(full content of block G)
## H) Draft Application Answers
(only if score >= 4.5 -- draft answers for the application form)
---
## Keywords extracted
(list of 15-20 keywords from the JD for ATS optimization)
```
### 2. Record in tracker
**ALWAYS** record in `data/applications.md`:
- Next sequential number
- Current date
- Company
- Role
- Score: match average (1-5)
- Status: `Evaluated`
- PDF: ❌(または auto-pipeline が PDF を生成した場合は ✅)
- Report: root-relative link `[001](reports/001-company-2026-01-01.md)`(`merge-tracker.mjs` 経由で merge されると tracker file からの相対 link に normalize される。例:`../reports/...`。#760 参照)
**Tracker format:**
```markdown
| # | Date | Company | Role | Score | Status | PDF | Report |
```