Files
command-center/agent/managed-skills/frank-job-hunt-maintenance/SKILL.md
T

3.5 KiB
Raw Blame History

name, description
name description
frank-job-hunt-maintenance Maintain frank-job-hunt agents: live-census gate hardening loop, registry locator verification, and the workstation/Dankserver/Dankclaw deploy-sync ritual.

frank-job-hunt maintenance

Repo ~/Projects/frank-job-hunt (Gitea dank/frank-job-hunt on Dankclaw 192.168.0.143:3000). Production: Dankserver user timers frank-job-sweep.timer 07:30, frank-job-digest.timer 08:15 (Linger=yes). ntfy relay: Dankclaw quadlet ntfy.service, route ntfy.franksdank.cloud (no anubis), LAN record in hosts/custom.list (Pi-hole v6 file at /home/dank/Containers/pihole/etc-pihole/hosts/custom.list; v6 API paths are hostile — edit the file, then podman exec pihole pihole restartdns). Secrets: ~/.config/frank-job-hunt.env (600, workstation + Dankserver).

Law (validated 2026-10-11)

  • The fleet judge (frank-zealot, dankclaw:7771) is a ranker, never a gate — it inflates anything reaching it (non-technical roles scored 88-91). All discrimination lives in deterministic gates (agents/lib/gates.ts); zealot only ranks survivors.
  • Thinking-model fault: verdict lands in reasoning_content with content:"" → judge sends chat_template_kwargs:{enable_thinking:false} (0.7s clean JSON).
  • Family beats topic: role family (recruiter/sales/finance/PM/designer/people-ops/revops/…) gates gate:scope unconditionally — no infra-token override ("DevOps Recruiter" is recruiting). Compound technical titles keep the INFRA_TITLE override via NEG_TITLE branch.
  • gate:region: remote is US-only (visa reality). "Remote - Bangalore" = onsite abroad → gate; US regex pass wins over NONUS match ("U.S. & Canada" passes).

Gate hardening loop (live-census, TDD)

  1. bun agents/sweep.ts --dry (full lane ≈ 30–90 s; 852 postings ≈ 62 pass / 790 filed).
  2. Classify leaks in the top-10: family gap / region gap / scoring tail. Accept long tail (Director/Founder edge cases) — digest + human curation is the design.
  3. Token fix in gates.ts regexes (NEG_FAMILY = no override; METRO/US/NONUS for arrangement). NEVER dedupe-check by memory — read file first; the file has bitten line-offset edits repeatedly.
  4. Pin every leak with a named regression test in agents/test/gates.test.ts before/with the fix.
  5. bun test agents/test/ && bun x tsc --noEmit — hooks re-run these at commit.
  6. Ship: git commit (pre-commit = tests + tsc + docs-link + secret scan) → git push → ssh dankserver 'cd ~/Projects/frank-job-hunt && git pull' (timers pull from master; Dankserver drift = tomorrow's run is stale).

Registry verification (monthly, agents/verify-registry.ts)

Scouts' ats/ats_identifier are guesses (14/84 were wrong). Ritual:

  1. bun agents/verify-registry.ts (dry, ~70 s serial) → REPAIR census.
  2. --write applies; repairs with live jobs preferred over empty boards (0-job boards 404 later).
  3. Unresolved = honest manual lane (vanity Workdays, self-built ATS incl. majors, neogov) — NOT a code bug; per-entry error census in sweep output is the same signal.
  4. Update targets/README.md census lines + docs/log.md; commit/push/pull (same ship step).

Pitfalls

  • --ats=<x> smoke filters the census line — "N API-sweepable" reflects the filter, not the registry; don't diagnose a phantom bug.
  • Workday vanity careers URLs (careers.uw.edu) are NOT CXS-API-resolvable; tenant-only identifiers are (site path required).
  • Root README.md vs targets/README.md name collision in edit anchors: use full path headers.
  • Zealot endpoint probe: curl http://192.168.0.143:7771/v1/models.