new vacancies
This commit is contained in:
1 parent
8f93056d35
commit
9d012f44c2
6 files changed
+333
-224
No files matched your search
@@ -154,78 +154,7 @@ node doctor.mjs --json
|
||||
|
||||
Output: `{"onboardingNeeded": <bool>, "missing": [...], "warnings": [...], "autoCopied": [...]}`, where `missing` lists whichever of `cv.md`, `config/profile.yml`, `modes/_profile.md`, `portals.yml` are absent. `warnings` is reserved for non-blocking setup signals, and `autoCopied` lists user customization files (`modes/_profile.md` or `modes/_custom.md`) that `doctor.mjs` automatically copied from their `.template.md` equivalents during the check.
|
||||
|
||||
**If `onboardingNeeded` is true (any of `cv.md` / `config/profile.yml` / `modes/_profile.md` / `portals.yml` is missing), enter onboarding mode.** Do NOT proceed with evaluations, scans, or any other mode until the basics are in place. Guide the user step by step:
|
||||
|
||||
#### Step 1: CV (required)
|
||||
If `cv.md` is missing, ask:
|
||||
> "I don't have your CV yet. You can either:
|
||||
> 1. Paste your CV here and I'll convert it to markdown
|
||||
> 2. Paste your LinkedIn URL and I'll extract the key info
|
||||
> 3. Tell me about your experience and I'll draft a CV for you
|
||||
>
|
||||
> Which do you prefer?"
|
||||
|
||||
Create `cv.md` from whatever they provide. Make it clean markdown with standard sections (Summary, Experience, Projects, Education, Skills).
|
||||
|
||||
#### Step 2: Profile (required)
|
||||
If `config/profile.yml` is missing, copy from `config/profile.example.yml` and then ask:
|
||||
> "I need a few details to personalize the system:
|
||||
> - Your full name and email
|
||||
> - Your location and timezone
|
||||
> - What roles are you targeting? (e.g., 'Senior Backend Engineer', 'AI Product Manager')
|
||||
> - Your salary target range
|
||||
>
|
||||
> I'll set everything up for you."
|
||||
|
||||
Fill in `config/profile.yml` with their answers. For archetypes and targeting narrative, store the user-specific mapping in `modes/_profile.md` or `config/profile.yml` rather than editing `modes/_shared.md`.
|
||||
|
||||
#### Step 3: Portals (recommended)
|
||||
If `portals.yml` is missing:
|
||||
> "I'll set up the job scanner with 45+ pre-configured companies. Want me to customize the search keywords for your target roles?"
|
||||
|
||||
Copy `templates/portals.example.yml` → `portals.yml`. If they gave target roles in Step 2, update `title_filter.positive` to match.
|
||||
|
||||
#### Step 4: Tracker
|
||||
If `data/applications.md` doesn't exist, create it:
|
||||
```markdown
|
||||
# Applications Tracker
|
||||
|
||||
| # | Date | Company | Role | Score | Status | PDF | Report | Notes |
|
||||
|---|------|---------|------|-------|--------|-----|--------|-------|
|
||||
```
|
||||
|
||||
#### Step 5: Get to know the user (important for quality)
|
||||
|
||||
After the basics are set up, proactively ask for more context. The more you know, the better your evaluations will be:
|
||||
|
||||
> "The basics are ready. But the system works much better when it knows you well. Can you tell me more about:
|
||||
> - What makes you unique? What's your 'superpower' that other candidates don't have?
|
||||
> - What kind of work excites you? What drains you?
|
||||
> - Any deal-breakers? (e.g., no on-site, no startups under 20 people, no Java shops)
|
||||
> - Your best professional achievement — the one you'd lead with in an interview
|
||||
> - Any projects, articles, or case studies you've published?
|
||||
>
|
||||
> The more context you give me, the better I filter. Think of it as onboarding a recruiter — the first week I need to learn about you, then I become invaluable."
|
||||
|
||||
Store any insights the user shares in `config/profile.yml` (under narrative), `modes/_profile.md`, or in `article-digest.md` if they share proof points. Do not put user-specific archetypes or framing into `modes/_shared.md`.
|
||||
|
||||
**After every evaluation, learn.** If the user says "this score is too high, I wouldn't apply here" or "you missed that I have experience in X", update your understanding in `modes/_profile.md`, `config/profile.yml`, or `article-digest.md`. The system should get smarter with every interaction without putting personalization into system-layer files.
|
||||
|
||||
#### Step 6: Ready
|
||||
Once all files exist, confirm:
|
||||
> "You're all set! You can now:
|
||||
> - Paste a job URL to evaluate it
|
||||
> - Run `/career-ops scan` to search portals
|
||||
> - Run `/career-ops` to see all commands
|
||||
>
|
||||
> Everything is customizable — just ask me to change anything.
|
||||
>
|
||||
> Tip: Having a personal portfolio dramatically improves your job search. If you don't have one yet, the author's portfolio is also open source: github.com/santifer/cv-santiago — feel free to fork it and make it yours."
|
||||
|
||||
Then suggest automation:
|
||||
> "Want me to scan for new offers automatically? I can set up a recurring scan every few days so you don't miss anything. Just say 'scan every 3 days' and I'll configure it."
|
||||
|
||||
If the user accepts, use the `/loop` or `/schedule` skill (if available) to set up a recurring `/career-ops scan`. If those aren't available, suggest adding a cron job or remind them to run `/career-ops scan` periodically.
|
||||
**If `onboardingNeeded` is true (any of `cv.md` / `config/profile.yml` / `modes/_profile.md` / `portals.yml` is missing), enter onboarding mode.** Do NOT proceed with evaluations, scans, or any other mode until the basics are in place. Invoke the `onboarding-wizard` skill for the exact step-by-step script (CV, profile, portals, tracker, getting to know the user, and the "ready" handoff).
|
||||
|
||||
### Personalization
|
||||
|
||||
@@ -311,21 +240,6 @@ Verify a posting is still live before applying — using the cheapest check that
|
||||
|
||||
---
|
||||
|
||||
## CI/CD and Quality
|
||||
|
||||
- **GitHub Actions** run on every PR: `test-all.mjs` (63+ checks), auto-labeler (risk-based: 🔴 core-architecture, ⚠️ agent-behavior, 📄 docs), welcome bot for first-time contributors
|
||||
- **Branch protection** on `main`: status checks must pass before merge. No direct pushes to main (except admin bypass).
|
||||
- **Dependabot** monitors npm, Go modules, and GitHub Actions for security updates
|
||||
- **Contributing process**: issue first → discussion → PR with linked issue → CI passes → maintainer review → merge
|
||||
|
||||
## Community and Governance
|
||||
|
||||
- **Code of Conduct**: Contributor Covenant 2.1 with enforcement actions (see `CODE_OF_CONDUCT.md`)
|
||||
- **Governance**: BDFL model with contributor ladder — Participant → Contributor → Triager → Reviewer → Maintainer (see `GOVERNANCE.md`)
|
||||
- **Security**: private vulnerability reporting via email (see `SECURITY.md`)
|
||||
- **Support**: help questions go to Discord/Discussions, not issues (see `SUPPORT.md`)
|
||||
- **Discord**: https://discord.gg/8pRpHETxa4
|
||||
|
||||
## Stack and Conventions
|
||||
|
||||
- Node.js (mjs modules), Playwright (PDF + scraping), YAML (config), HTML/CSS (template), Markdown (data), Canva MCP (optional visual CV)
|
||||
@@ -339,26 +253,7 @@ Verify a posting is still live before applying — using the cheapest check that
|
||||
|
||||
### TSV Format for Tracker Additions
|
||||
|
||||
Write one TSV file per evaluation to `batch/tracker-additions/{num}-{company-slug}.tsv`. Single line, 9 tab-separated columns:
|
||||
|
||||
```
|
||||
{num}\t{date}\t{company}\t{role}\t{status}\t{score}/5\t{pdf_emoji}\t[{num}](reports/{num}-{slug}-{date}.md)\t{note}
|
||||
```
|
||||
|
||||
**Column order (IMPORTANT -- status BEFORE score):**
|
||||
1. `num` -- sequential number (integer)
|
||||
2. `date` -- YYYY-MM-DD
|
||||
3. `company` -- short company name
|
||||
4. `role` -- job title
|
||||
5. `status` -- canonical status (e.g., `Evaluated`)
|
||||
6. `score` -- format `X.X/5` (e.g., `4.2/5`)
|
||||
7. `pdf` -- `✅` or `❌`
|
||||
8. `report` -- markdown link, always written **root-relative**: `[num](reports/...)`
|
||||
9. `notes` -- one-line summary
|
||||
|
||||
**Note:** In applications.md, score comes BEFORE status. The merge script handles this column swap automatically.
|
||||
|
||||
**Report link normalization:** The TSV always carries a **root-relative** `[num](reports/...)` link. `merge-tracker.mjs` rewrites it so the link is relative to the tracker file's own directory before writing it into the tracker — `../reports/...` when the tracker is at `data/applications.md`, or `reports/...` at the root layout. This keeps links clickable from the tracker (markdown links resolve relative to the file that contains them). Normalization is idempotent. To fix links in an existing tracker, run `node merge-tracker.mjs --migrate` (see #760).
|
||||
Full column spec (order, format, link normalization) lives in `modes/_shared.md` — read it before writing a tracker-additions TSV.
|
||||
|
||||
### Pipeline Integrity
|
||||
|
||||
|
||||
Reference in new issue
Block a user