ErrLookup › santifer/career-ops
santifer/career-ops
Open-source AI job search: scan job portals, evaluate listings with a structured A-F rubric into a 1.0-5.0 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…) · JavaScript · 390 source files
Analyzed at 9b17a8ac97 on 2026-08-13. 341 documented errors.
| Code / Message | Type | Severity | Tags |
|---|---|---|---|
| The apply feature needs Google Chrome. Install Chrome (or ru | exception | critical | playwright, browser, environment, setup, apply |
| ${msg} | exception | error | playwright, navigation, timeout, apply, runtime |
| apply session not found (it may have expired) | exception | error | session, expiry, state, apply, in-memory |
| apply session not found | exception | error | session, expiry, state, apply, handoff |
| payload must include at least one of: cv, articleDigest | exception | error | validation, schema, add-entry, api-contract |
| payload.cv requires { section, entry } | exception | error | validation, schema, add-entry, cv |
| payload.cv requires a non-empty dedupKey (used for dedup/ide | exception | error | validation, idempotency, add-entry, cv, dedup |
| payload.articleDigest requires { entry } | exception | error | validation, schema, add-entry, article-digest |
| Application answer state must be one of: ${[...VALID_STATES] | exception | error | validation, cli, state-machine, application-answers |
| Missing value for ${arg} | exception | error | validation, cli, argv, application-answers |
| reportNum must be a numeric report number | exception | error | validation, path, application-artifacts, report-num |
| version must be a positive integer | exception | error | validation, path, application-artifacts, version |
| decision must be one of: ${[...DECISIONS].join(', ')} | exception | error | validation, audit, application-artifacts, state-machine |
| --${name} is required | exception | error | validation, cli, assessment-log, required-fields |
| --${name} must not contain tabs or newlines | exception | error | validation, tsv, cli, assessment-log, sanitization |
| --${name} must be a percentage (e.g. 70 or 70%), got "${v}" | exception | error | validation, cli, assessment-log, percentage, numeric |
| Unsupported profile photo style: ${style} (expected rounded, | exception | error | validation, config, build-cv-html, photo, enum |
| Unsupported profile photo data URL (expected base64 PNG, JPE | exception | error | validation, photo, data-url, build-cv-html, security |
| Unsupported profile photo URL scheme: ${photo.split(':', 1)[ | exception | error | validation, photo, url-scheme, build-cv-html, security |
| Unsupported profile photo format: ${photo} (expected PNG, JP | exception | error | validation, photo, file-format, build-cv-html |
| Profile photo not found or unreadable: ${photo} (${err.code | exception | error | |
| Profile photo is empty: ${photo} | exception | error | |
| Unresolved placeholders: ${[...new Set(unresolved)].join(', | exception | error | |
| unknown option: ${arg} | exception | error | |
| --limit must be an integer from 1 to 100 | exception | error | |
| --months must be an integer from 1 to 120 | exception | error | |
| --sort must be date or score | exception | error | |
| unknown source in --sources: ${source} | exception | error | |
| Unknown template format: ${format} | exception | error | |
| Unsupported template format: ${format} (expected html or tex | exception | error | |
| Unknown template kind: ${kind} | exception | error | |
| Template not found for kind=${kind} name=${chosen} (${fileFo | exception | error | |
| Template ${fileFor(chosen)} missing required placeholders: $ | exception | error | |
| missing replay fixture: ${fixture} — record it or run --live | exception | error | |
| openai-eval.mjs exited ${res.status}: ${(res.stderr || '').s | exception | error | |
| invalid golden case ${f}: need string id/jd and label.{arche | validation | error | |
INVALID_DATE Application #${row?.num ?? '?'} notes carry an impossible "Applied ${notesDate}" | validation | error | |
LOCK_TIMEOUT Timed out waiting for follow-ups lock at ${lockDir} | exception | error | locking, concurrency, filesystem, followups, timeout |
USAGE Invalid appNum: ${appNum} | validation | error | validation, api, usage, programmatic |
ROW_NOT_FOUND Tracker not found at ${trackerPath} | validation | error | filesystem, tracker, onboarding, config |
NOT_APPLIED Application #${appNum} is not Applied (status: "${row.status.trim()}"); use --fo | validation | warning | validation, workflow, status, followups |
| Cannot read benchmarks at ${path}: ${err.message} | exception | error | config, yaml, filesystem, benchmarks |
| Malformed benchmarks file at ${path}: expected a top-level " | validation | error | config, yaml, validation, benchmarks |
| Gemini returned an invalid career-ops report: ${issues.join( | validation | error | llm, validation, gemini, eval, report |
| Missing required field: ${context}.${key} | validation | error | validation, payload, cover-letter, required-fields |
| Unresolved placeholders: ${[...unresolved].join(', ')} | validation | error | template, validation, cover-letter, placeholder |
| CV section order diverges from cv.md: rendered ${renderedOrd | validation | warning | cv, validation, template, pdf, section-order |
| Could not determine the rendered PDF page count (received ${ | exception | error | pdf, playwright, validation, chromium |
| Invalid page budget "${maxPages}". Use a positive integer. | validation | error | validation, configuration, pdf, type-coercion |
| CV is ${pageCount} ${actualLabel}; the allowed maximum is ${ | validation | error | pdf, configuration, validation, ci-gate |
| Could not determine the rendered PDF page count from its pag | exception | error | pdf, parsing, playwright, chromium, io |
| Unsupported image type: ${extname(inputPath) || '(no extensi | validation | error | image, pdf, validation, file-format |
| Image failed to decode within 10s (unreadable or corrupt fil | exception | error | image, pdf, playwright, timeout, corrupt-file |
| DNS resolution returned no addresses for ${hostname} | exception | error | network, dns, liveness, ssrf, validation |
| Access denied: Egress guard blocked private target IP ${ip} | exception | error | security, ssrf, network, liveness, validation |
| [models] Failed to fetch free model list: ${reason}. Check t | exception | error | network, api, configuration, openrouter, startup |
| OPENROUTER_API_KEY not found. Copy .env.example to .env and | validation | critical | configuration, openrouter, secrets, startup, api |
| HTTP ${resp.status}: ${t.slice(0, 120)} | http | error | api, openrouter, http, configuration, pinned-model |
| ${data.error.message} | exception | error | api, openrouter, llm, pinned-model, content-policy |
| Empty response | exception | error | api, openrouter, llm, pinned-model, empty-response |
| Pinned model timed out after ${MODEL_TIMEOUT_MS / 1000}s | exception | error | api, openrouter, timeout, network, pinned-model |
| No free OpenRouter models are available. Model loading may h | exception | error | openrouter, configuration, startup, model-rotation |
| All loaded models have been blacklisted this session. | exception | error | openrouter, model-rotation, blacklist, rate-limit, configuration |
| Timeout after ${MODEL_TIMEOUT_MS / 1000}s | exception | error | api, openrouter, timeout, network, model-rotation |
| All ${active.length} active models failed. Last error: ${las | exception | critical | api, openrouter, model-rotation, terminal-failure, network |
| Invalid URL: ${url} | validation | error | validation, url, ssrf, configuration, network |
| Refusing non-HTTP(S) URL: ${url} | validation | error | ssrf, url-validation, network, security, openrouter-runner |
| Refusing private/loopback host: ${host} | validation | error | ssrf, network, security, private-network, openrouter-runner |
| HTTP ${r.status} ${r.statusText} | exception | warning | network, http-status, fetch, openrouter-runner |
| Could not fetch job page: ${e.message} | exception | warning | network, fetch, error-wrapping, openrouter-runner |
| portals.yml not found | exception | error | config, onboarding, file-not-found, portals, openrouter-runner |
| Could not parse existing candidates file at ${candidatesPath | exception | error | json, file-corruption, paste-reply, data-integrity |
| Existing candidates file at ${candidatesPath} is not a JSON | exception | error | json, schema, paste-reply, data-integrity |
| pipeline lock timeout: ${lockDir} held > ${timeoutMs}ms | exception | error | locking, concurrency, timeout, pipeline-lock |
| refusing non-GitHub/unsafe repo URL: ${arg} (expected https: | validation | error | security, url-validation, plugins, github, supply-chain |
| repo must be named "career-ops-plugin-<name>" (got "${repoNa | validation | error | plugins, naming-convention, validation, supply-chain |
| a 40-hex commit --sha is required (got ${JSON.stringify(sha) | validation | error | plugins, git, sha-pinning, security, supply-chain |
| clone of ${url}@${sha.slice(0, 10)} failed — ${err.stderr ? | exception | error | plugins, git, network, clone, supply-chain |
| plugins.local/${id} already exists — `node plugins.mjs remov | exception | error | plugins, filesystem, idempotency, install |
| plugin rejected: - ${result.problems.join('\n - ')} | validation | error | plugins, validation, manifest, supply-chain |
| plugin name must match [a-z0-9-] (got "${name}") | validation | error | plugins, naming-convention, validation, scaffold |
| plugins/_template/ not found | exception | error | plugins, scaffold, file-not-found, repo-integrity |
| plugins.local/${name} already exists | exception | error | plugins, scaffold, filesystem, idempotency |
| plugin egress must use HTTPS: ${u.href} | validation | error | plugins, security, tls, egress, ssrf |
| plugin egress to "${u.hostname}" is not in allowedHosts [${[ | validation | error | plugins, security, allowlist, egress, least-privilege |
| too many redirects (>${MAX_REDIRECTS}) for ${url} | exception | warning | plugins, network, redirects, egress, loop |
| plugin "${id}" inactive: ${reason}. Run `node doctor.mjs` fo | exception | error | plugin, configuration, setup, doctor |
| cannot read ${rel || '.'}: ${err.message} | exception | error | plugin, lock, filesystem, permissions, integrity |
| refusing to hash symlink: ${childRel} | validation | error | plugin, lock, integrity, symlink, security |
| refusing to hash non-regular file: ${childRel} | validation | error | plugin, lock, integrity, filesystem, special-files |
| plugin egress to ${hostname} is blocked (private/loopback/me | validation | critical | network, ssrf, security, egress, plugin |
| plugin egress: cannot resolve ${hostname} — ${err.message} | exception | error | network, dns, egress, plugin, configuration |
| plugin egress: ${hostname} resolved to no addresses | exception | error | network, dns, egress, plugin |
| plugin egress: ${hostname} resolves to a blocked address (${ | validation | critical | network, ssrf, security, dns, rebinding, egress, plugin |
| apify: invalid actorId ${JSON.stringify(actorId)}. Expected | validation | error | apify, validation, security, path-traversal, configuration |
| Apify did not return a run id: ${JSON.stringify(body).slice( | exception | error | apify, api, response-shape, network |
| Apify run ${runId} did not finish within ${Math.round(timeou | exception | error | apify, timeout, network, performance |
| Apify run ${runId} returned non-array dataset payload | exception | error | apify, api, response-shape, dataset |
| APIFY_TOKEN not set | exception | error | apify, configuration, environment, auth, secrets |
| apify: invalid timeoutMs ${JSON.stringify(timeoutMs)} (must | validation | error | apify, validation, configuration, timeout |
| Apify actor ${actorId} finished with status ${run.status}${r | exception | error | apify, actor-failure, api, configuration |
| APIFY_TOKEN not set — enable apify in config/plugins.yml and | validation | error | apify, configuration, environment, auth, secrets, plugin |
| apify: entry ${entry.name} missing 'actor' (e.g. misceres/in | validation | error | apify, configuration, validation, plugin |
| apify: entry ${entry.name} has invalid field_map. Each of ti | validation | error | apify, configuration, validation, field-map, plugin |
| Gmail token refresh failed: ${res.status} ${(await res.text( | exception | error | gmail, oauth, auth, network, secrets |
| Gmail token refresh returned no access_token | exception | error | gmail, oauth, auth, response-shape, network |
| gmail: missing GMAIL_CLIENT_ID / GMAIL_CLIENT_SECRET / GMAIL | validation | error | gmail, oauth, env, credentials, plugin |
| gmail: invalid days_back "${ctx?.settings?.days_back}" (must | validation | error | gmail, config, validation, plugin |
| NOTION_ACCESS_TOKEN is not set (.env) — the Notion plugin ne | validation | error | notion, env, credentials, plugin, auth |
| Notion ${method} ${path} -> ${j.code}: ${j.message} | exception | error | notion, api, network, auth, rate-limit, plugin |
| Set NOTION_PARENT_PAGE_ID in .env (the "Career Ops" parent p | validation | error | notion, env, config, plugin |
| No "Applications" database found under the Career Ops page — | exception | error | notion, config, setup, plugin |
| portal-health lock timeout: ${lockDir} held > ${timeoutMs}ms | exception | error | lock, concurrency, portal-health, filesystem |
| a16z-speedrun-talent: invalid URL: ${url} | validation | error | a16z, url, validation, provider, ssrf-guard |
| a16z-speedrun-talent: URL must use HTTPS: ${url} | validation | error | a16z, https, ssrf-guard, provider, security, url |
| a16z-speedrun-talent: untrusted hostname "${parsed.hostname} | validation | error | a16z, ssrf-guard, allowlist, provider, security, url |
| a16z-speedrun-talent: unexpected API response on page ${page | exception | error | a16z, api, response-shape, provider, validation |
| agentic-jobs: invalid URL: ${url} | validation | error | agentic-jobs, url, validation, provider, ssrf-guard |
| agentic-jobs: URL must use HTTPS: ${url} | validation | error | agentic-jobs, https, ssrf-guard, provider, security, url |
| agentic-jobs: untrusted hostname "${parsed.hostname}" — must | validation | error | agentic-jobs, ssrf-guard, allowlist, provider, security, url |
| agentic-jobs: unexpected API response shape on page ${page} | exception | error | agentic-jobs, api, response-shape, provider, validation |
| agentic-jobs: parsed 0 jobs from the API — the response shap | exception | error | agentic-jobs, api, response-shape, provider, normalization, validation |
| API error: ${json.errorMsg || json.errorCode || 'success=fal | exception | error | alibaba, api-error, csrf, scraping, in-band-error |
| arbeitnow: invalid URL: ${url} | validation | error | arbeitnow, url-validation, ssrf, config |
| arbeitnow: URL must use HTTPS: ${url} | validation | error | arbeitnow, url-validation, https, ssrf |
| arbeitnow: untrusted hostname "${parsed.hostname}" — must be | validation | error | arbeitnow, ssrf, host-allowlist, security |
| arbeitnow: unexpected API response on page ${page} — expecte | exception | error | arbeitnow, api-contract, response-parsing, validation |
| arbeitsagentur: entry "${entry.name || '(unnamed)'}" has no | validation | error | arbeitsagentur, config, validation, yaml |
| arbeitsagentur: all ${keywords.length} keyword request(s) fa | exception | error | arbeitsagentur, network, outage, retry-logic |
| ashby: invalid URL: ${url} | validation | error | ashby, url-validation, ssrf, config |
| ashby: URL must use HTTPS: ${url} | validation | error | ashby, url-validation, https, ssrf |
| ashby: untrusted hostname "${parsed.hostname}" — must be one | validation | error | ashby, ssrf, host-allowlist, security |
| ashby: cannot derive API URL for ${entry.name} | validation | error | ashby, config, missing-field, validation |
| avature: cannot resolve origin for ${entry.name} | exception | error | avature, config, host-derivation, validation |
| bamboohr: invalid URL: ${url} | exception | error | bamboohr, url-validation, ssrf, config |
| bamboohr: URL must use HTTPS: ${url} | exception | error | bamboohr, url-validation, https, ssrf |
| bamboohr: untrusted hostname "${parsed.hostname}" — must mat | exception | error | bamboohr, ssrf, host-allowlist, security, regex |
| bamboohr: cannot derive API URL for ${entry.name} | exception | error | bamboohr, config, missing-field, host-derivation |
| beesite: cannot resolve search host for ${entry.name} | exception | error | beesite, config, missing-field, host-derivation |
| breezy: invalid URL: ${url} | exception | error | breezy, url-validation, ssrf, config |
| breezy: URL must use HTTPS: ${url} | exception | error | breezy, url-validation, https, ssrf |
| breezy: untrusted hostname "${parsed.hostname}" — must match | exception | error | breezy, ssrf, host-allowlist, security, regex |
| breezy: cannot derive API URL for ${entry.name} | exception | error | config, breezy, ats, url-resolution, ssrf |
| comeet: invalid URL: ${redactToken(url)} | exception | warning | url-validation, comeet, ssrf, defense-in-depth, token-redaction |
| comeet: URL must use HTTPS: ${redactToken(url)} | exception | warning | url-validation, comeet, ssrf, tls, defense-in-depth |
| comeet: untrusted hostname "${parsed.hostname}" — must be ${ | exception | warning | url-validation, comeet, ssrf, hostname-pin, defense-in-depth |
| comeet: URL path must be the careers-api endpoint: ${redactT | exception | warning | url-validation, comeet, ssrf, path-validation, defense-in-depth |
| comeet: cannot derive API URL for ${entry.name} (set api: to | exception | error | config, comeet, ats, url-resolution, token, ssrf |
| consider: ${entry.name} needs an https careers_url on a publ | exception | error | config, consider, ats, url-resolution, ssrf, hostname-guard |
| csod: cannot resolve careersite URL for ${entry.name} | exception | error | config, csod, cornerstone, ats, url-resolution, ssrf |
| csod: no anonymous token on ${cfg.homeUrl} | exception | error | csod, cornerstone, runtime, token, waf, parsing |
| deutschebahn: cannot resolve db.jobs search id for ${entry.n | exception | error | config, deutschebahn, ats, url-resolution, db-jobs |
| echojobs: invalid URL: ${url} | exception | warning | url-validation, echojobs, ssrf, defense-in-depth |
| echojobs: URL must use HTTPS: ${url} | exception | warning | url-validation, echojobs, ssrf, tls, defense-in-depth |
| echojobs: untrusted hostname "${parsed.hostname}" — must be | exception | warning | url-validation, echojobs, ssrf, hostname-pin, defense-in-depth |
| echojobs: unexpected API response on page ${page} — expected | exception | error | echojobs, runtime, api-contract, response-shape, parsing |
| eightfold: invalid URL: ${url} | exception | warning | url-validation, eightfold, ssrf, defense-in-depth |
| eightfold: URL must use HTTPS: ${url} | exception | warning | url-validation, eightfold, ssrf, tls, defense-in-depth |
| eightfold: untrusted hostname "${parsed.hostname}" — must ma | exception | warning | url-validation, eightfold, ssrf, hostname-pin, defense-in-depth |
| eightfold: cannot derive API URL for ${entry.name} | exception | error | config, eightfold, ats, url-resolution, hostname-pin, ssrf |
| flowxtra: invalid URL: ${url} | exception | warning | url-validation, flowxtra, ssrf, defense-in-depth |
| flowxtra: URL must use HTTPS: ${url} | exception | warning | url-validation, flowxtra, ssrf, tls, defense-in-depth |
| flowxtra: untrusted hostname "${parsed.hostname}" — must be | exception | error | ssrf-guard, url-validation, host-allowlist, flowxtra, config |
| flowxtra: unexpected API response on page ${page} — expected | exception | error | api-response-shape, runtime, flowxtra, third-party-api |
| gem: invalid URL: ${url} | exception | error | url-validation, gem, config, ssrf-guard |
| gem: URL must use HTTPS: ${url} | exception | error | url-validation, tls, ssrf-guard, gem, config |
| gem: untrusted hostname "${parsed.hostname}" — must be one o | exception | error | ssrf-guard, host-allowlist, url-validation, gem, config |
| gem: cannot derive board id for ${entry.name} | exception | error | config, portals-yml, gem, provider-config, validation |
| gem: JobBoardList failed: ${listResult.errors[0]?.message || | exception | error | graphql, third-party-api, gem, runtime, provider-config |
| getonbrd: invalid URL: ${url} | exception | error | url-validation, getonbrd, config, ssrf-guard |
| getonbrd: URL must use HTTPS: ${url} | exception | error | url-validation, tls, ssrf-guard, getonbrd, config |
| getonbrd: untrusted hostname "${parsed.hostname}" — must be | exception | error | ssrf-guard, host-allowlist, url-validation, getonbrd, config |
| getonbrd: unexpected API response on page ${page} — expected | exception | error | api-response-shape, runtime, getonbrd, third-party-api |
| getro: ${entry.name} needs a numeric 'getro_collection' in p | exception | error | config, portals-yml, getro, provider-config, validation |
| glints: invalid URL: ${url} | exception | error | url-validation, glints, config, portals-yml |
| glints: URL must use HTTPS: ${url} | exception | error | url-validation, tls, glints, config, portals-yml |
| glints: untrusted hostname "${parsed.hostname}" — must be on | exception | error | ssrf-guard, host-allowlist, url-validation, glints, config |
| glints: HTTP ${err.status} — ${detail} | exception | error | http-error, rate-limit, waf, glints, runtime, third-party-api |
| glints: unexpected API response — ${JSON.stringify(json).sli | exception | error | graphql, api-response-shape, glints, runtime, third-party-api |
| greenhouse: invalid URL: ${url} | exception | error | url-validation, greenhouse, config, portals-yml |
| greenhouse: URL must use HTTPS: ${url} | exception | error | url-validation, tls, greenhouse, config, portals-yml |
| greenhouse: untrusted hostname "${parsed.hostname}" — must b | exception | error | ssrf-guard, host-allowlist, url-validation, greenhouse, config |
| greenhouse: cannot derive API URL for ${entry.name} | exception | error | config, url-resolution, greenhouse, ats |
| hackernews: could not find "Ask HN: Who is hiring?" thread i | exception | error | network, external-api, hackernews, transient |
| hackernews: unexpected item response for thread ${threadId} | exception | error | network, external-api, hackernews, data-integrity |
| hecklerkoch: cannot resolve vacancy list for ${entry.name} | exception | error | config, url-resolution, hecklerkoch, ats |
| himalayas: invalid URL: ${url} | exception | error | ssrf, url-validation, himalayas, defense-in-depth |
| himalayas: URL must use HTTPS: ${url} | exception | error | ssrf, url-validation, tls, himalayas, defense-in-depth |
| himalayas: untrusted hostname "${parsed.hostname}" - must be | exception | error | ssrf, url-validation, allowlist, himalayas, defense-in-depth |
| himalayas: unexpected API response - expected { jobs: [...] | exception | error | external-api, data-integrity, himalayas, contract-drift |
| ibm: unexpected API response — expected hits.hits[], got key | exception | error | external-api, data-integrity, ibm, contract-drift, elastic |
| icims: cannot derive portal origin for ${entry.name} | exception | error | config, url-resolution, icims, ats |
| jibeapply: careers_url required | exception | error | config, required-field, jibeapply, ats |
| jibeapply: cannot derive API URL for ${entry.name} | exception | error | config, url-resolution, jibeapply, ats |
| jobicy: unexpected API response — expected { jobs: [...] }, | exception | error | external-api, data-integrity, jobicy, contract-drift |
| jobspresso: invalid URL: ${url} | exception | error | ssrf, url-validation, jobspresso, defense-in-depth |
| jobspresso: URL must use HTTPS: ${url} | exception | error | ssrf, url-validation, tls, jobspresso, defense-in-depth |
| jobspresso: untrusted hostname "${parsed.hostname}" - must b | exception | error | ssrf, url-validation, allowlist, jobspresso, defense-in-depth |
| jobstreet: invalid URL: ${url} | exception | error | config, url-validation, jobstreet, ssrf |
| jobstreet: URL must use HTTPS: ${url} | exception | error | config, url-validation, tls, jobstreet, ssrf |
| jobstreet: untrusted hostname "${parsed.hostname}" — must be | exception | error | config, url-validation, allowlist, jobstreet, ssrf |
| jobvite: invalid URL: ${url} | exception | error | ssrf, url-validation, jobvite, defense-in-depth |
| jobvite: URL must use HTTPS: ${url} | exception | error | jobvite, ssrf-guard, url-validation, config |
| jobvite: untrusted hostname "${parsed.hostname}" — must be $ | exception | error | jobvite, ssrf-guard, hostname-allowlist, config |
| jobvite: cannot derive a company id for ${entry.name} — set | exception | error | jobvite, config, company-eid, missing-identifier |
| jobvite: could not find companyEId on ${boardUrl} for ${entr | exception | error | jobvite, discovery, scraping, company-eid, board-redesign |
| join: cannot extract slug from careers_url | exception | error | join, url-validation, config, slug-extraction |
| join: __NEXT_DATA__ not found or unexpected structure | exception | error | join, nextjs, scraping, structure-change, fail-closed |
| joinup: ${entry.name} page is missing __NEXT_DATA__ (structu | exception | error | joinup, nextjs, scraping, structure-change, fail-closed |
| joinup: ${entry.name} failed to parse __NEXT_DATA__ — ${err. | exception | error | joinup, nextjs, json-parse, structure-change, scraping |
| justjoin: invalid URL: ${url} | exception | error | justjoin, url-validation, ssrf-guard, config |
| justjoin: URL must use HTTPS: ${url} | exception | error | justjoin, ssrf-guard, url-validation, config |
| justjoin: untrusted hostname "${parsed.hostname}" — must be | exception | error | justjoin, ssrf-guard, hostname-allowlist, config |
| justjoin: URL path must be /job-offers or /api/candidate-api | exception | error | justjoin, url-validation, api-version, config |
| justjoin: unexpected API response — expected { data: [...] } | exception | error | justjoin, api-contract, response-parsing, structure-change |
| justjoin: careers_url or api must be a trusted justjoin.it U | exception | error | justjoin, config, missing-url, provider-mismatch |
| landingjobs: invalid URL: ${url} | exception | error | landingjobs, url-validation, ssrf-guard, config |
| landingjobs: URL must use HTTPS: ${url} | exception | error | landingjobs, ssrf-guard, url-validation, config |
| landingjobs: untrusted hostname "${parsed.hostname}" — must | exception | error | landingjobs, ssrf-guard, hostname-allowlist, config |
| landingjobs: unexpected API response — expected a JSON array | exception | error | api-contract, json, landingjobs, response-shape |
| larajobs: invalid URL: ${url} | exception | error | url-validation, config, larajobs, ssrf-guard |
| larajobs: URL must use HTTPS: ${url} | exception | error | url-validation, https, transport-security, larajobs |
| larajobs: untrusted hostname "${parsed.hostname}" - must be | exception | error | url-validation, ssrf, host-allowlist, larajobs, security |
| lever: invalid URL: ${url} | exception | error | url-validation, config, lever, ssrf-guard |
| lever: URL must use HTTPS: ${url} | exception | error | url-validation, https, transport-security, lever |
| lever: untrusted hostname "${parsed.hostname}" — must be one | exception | error | url-validation, ssrf, host-allowlist, lever, security |
| lever: cannot derive API URL for ${entry.name} | exception | error | config, lever, missing-url, provider-config |
| local-parser: careers_url is not a valid URL: ${value} | exception | error | url-validation, local-parser, argument-injection, config |
| local-parser: careers_url must be http(s): ${value} | exception | error | url-validation, scheme-allowlist, local-parser, argument-injection |
| local-parser: company name cannot start with '-': ${value} | exception | error | argument-injection, security, local-parser, config |
| local-parser: path escapes the project root: ${rawPath} | exception | error | path-traversal, security, local-parser, symlink |
| local-parser: parser.command is required | exception | error | config, local-parser, missing-field, provider-config |
| local-parser: interpreter command requires an in-repo parser | exception | error | config, local-parser, interpreter, code-execution-guard, security |
| local-parser: the parser script must be the interpreter's fi | exception | error | argument-injection, code-execution-guard, security, local-parser, interpreter |
| local parser returned invalid JSON | exception | error | json, local-parser, stdout-contract, parser-output |
| local parser JSON must be an array or contain jobs[]/results | exception | error | json, response-shape, local-parser, parser-output, api-contract |
| manfred: invalid URL: ${url} | exception | error | url-validation, manfred, ssrf-guard, config |
| manfred: URL must use HTTPS: ${url} | exception | error | url-validation, https, transport-security, manfred |
| manfred: untrusted hostname "${parsed.hostname}" — must be $ | exception | error | url-validation, ssrf, host-allowlist, manfred, security |
| manfred: unexpected API response — expected a JSON array of | exception | error | api-contract, response-validation, manfred, json |
| nodesk: invalid URL: ${url} | exception | error | url-validation, ssrf-guard, nodesk, config |
| nodesk: URL must use HTTPS: ${url} | exception | error | url-validation, ssrf-guard, https, nodesk, config |
| nodesk: untrusted hostname "${parsed.hostname}" - must be ${ | exception | error | url-validation, ssrf-guard, hostname-allowlist, nodesk, security |
| nofluffjobs: invalid URL: ${url} | exception | error | url-validation, ssrf-guard, nofluffjobs, config |
| nofluffjobs: URL must use HTTPS: ${url} | exception | error | url-validation, ssrf-guard, https, nofluffjobs, config |
| nofluffjobs: untrusted hostname "${parsed.hostname}" — must | exception | error | url-validation, ssrf-guard, hostname-allowlist, nofluffjobs, security |
| nofluffjobs: unexpected API response — expected { postings: | exception | error | api-contract, response-validation, nofluffjobs, json |
| nofluffjobs: careers_url or api must be a trusted nofluffjob | exception | error | config-validation, ssrf-guard, nofluffjobs, config |
| oraclecloud: invalid URL: ${url} | exception | error | url-validation, ssrf-guard, oraclecloud, config |
| oraclecloud: URL must use HTTPS: ${url} | exception | error | url-validation, ssrf-guard, https, oraclecloud, config |
| oraclecloud: untrusted hostname "${parsed.hostname}" — must | validation | error | url-validation, ssrf-guard, hostname-regex, oraclecloud, security |
| oraclecloud: cannot derive API URL for ${entry.name} | validation | error | config-validation, ssrf-guard, oraclecloud, config |
| personio: invalid URL: ${url} | validation | error | url-validation, ssrf-guard, personio, config |
| personio: URL must use HTTPS: ${url} | validation | error | url-validation, ssrf-guard, https, personio, config |
| personio: untrusted hostname "${parsed.hostname}" — must mat | validation | error | url-validation, ssrf-guard, hostname-regex, personio, security |
| personio: cannot derive feed URL for ${entry.name} | validation | error | config-validation, ssrf-guard, personio, config |
| phenom: cannot resolve origin for ${entry.name} | validation | error | config-validation, phenom, config |
| pinpoint: invalid URL: ${url} | validation | error | url-validation, ssrf-guard, pinpoint, config |
| pinpoint: URL must use HTTPS: ${url} | validation | error | url-validation, ssrf-guard, https, pinpoint, config |
| pinpoint: untrusted hostname "${parsed.hostname}" — must mat | validation | error | ssrf, url-validation, hostname-allowlist, provider, pinpoint, security |
| pinpoint: cannot derive API URL for ${entry.name} | validation | error | config, provider, pinpoint, missing-url, resolution |
| radancy: cannot resolve search-jobs URL for ${entry.name} | validation | error | config, provider, radancy, missing-url, resolution, branded-domain |
| recruitee: invalid URL: ${url} | validation | error | url-validation, provider, recruitee, malformed-url |
| recruitee: URL must use HTTPS: ${url} | validation | error | url-validation, https, provider, recruitee, security |
| recruitee: untrusted hostname "${parsed.hostname}" — must ma | validation | error | ssrf, url-validation, hostname-allowlist, provider, recruitee, security |
| recruitee: cannot derive API URL for ${entry.name} | validation | error | config, provider, recruitee, missing-url, resolution |
| remoteok: unexpected API response — expected a JSON array, g | validation | error | api-contract, parsing, provider, remoteok, response-shape, network |
| remotive: unexpected API response — expected { jobs: [...] } | validation | error | api-contract, parsing, provider, remotive, response-shape, network |
| remotli: invalid URL: ${url} | validation | error | url-validation, provider, remotli, malformed-url, internal-bug |
| remotli: URL must use HTTPS: ${url} | validation | error | url-validation, https, provider, remotli, security |
| remotli: untrusted hostname "${parsed.hostname}" — must be r | validation | error | ssrf, url-validation, hostname-allowlist, provider, remotli, security |
| remotli: unexpected API response — expected { jobs: [...] }, | validation | error | api-contract, parsing, provider, remotli, response-shape, pagination, network |
| rheinmetall: cannot resolve vacancies URL for ${entry.name} | validation | error | config, provider, rheinmetall, missing-url, resolution, hostname-allowlist |
| rippling: invalid URL: ${url} | validation | error | url-validation, provider, rippling, malformed-url, internal-bug |
| rippling: URL must use HTTPS: ${url} | validation | error | url-validation, https, provider, rippling, security |
| rippling: untrusted hostname "${parsed.hostname}" — must be | validation | error | ssrf, url-validation, hostname-allowlist, provider, rippling, security |
| rippling: cannot derive API URL for ${entry.name} | validation | error | config, provider, rippling, missing-url, resolution, slug-validation |
| smartrecruiters: invalid URL: ${url} | validation | error | url-validation, provider, smartrecruiters, malformed-url |
| smartrecruiters: URL must use HTTPS: ${url} | validation | error | url-validation, https, provider, smartrecruiters, security |
| smartrecruiters: untrusted hostname "${parsed.hostname}" — m | validation | error | ssrf-guard, url-validation, smartrecruiters, unreachable-defensive |
| smartrecruiters: cannot derive API URL for ${entry.name} | validation | error | config, smartrecruiters, slug, portals-yml, detection |
| softgarden: cannot resolve widget URL for ${entry.name} | validation | error | config, softgarden, url-validation, portals-yml, detection |
| solidjobs: invalid URL: ${url} | validation | error | url-validation, config, solidjobs, portals-yml |
| solidjobs: URL must use HTTPS: ${url} | validation | error | url-validation, https, config, solidjobs, portals-yml |
| solidjobs: untrusted hostname "${parsed.hostname}" — must be | validation | error | ssrf-guard, url-validation, hostname, config, solidjobs, portals-yml |
| solidjobs: URL path must start with /public-api/offers/: ${u | validation | error | url-validation, api-endpoint, config, solidjobs, portals-yml |
| solidjobs: careers_url required | validation | error | config, missing-field, solidjobs, portals-yml |
| solidjobs: unexpected API response — expected { jobs: [...] | validation | error | api-contract, runtime, solidjobs, response-shape |
| successfactors: cannot resolve origin for ${entry.name} | validation | error | config, successfactors, url-validation, portals-yml, detection |
| teamtailor: invalid URL: ${url} | validation | error | url-validation, config, teamtailor, portals-yml |
| teamtailor: URL must use HTTPS: ${url} | exception | error | url-validation, https, config, teamtailor, portals-yml |
| teamtailor: untrusted hostname "${parsed.hostname}" — must b | exception | error | ssrf-guard, url-validation, hostname, config, teamtailor, portals-yml |
| teamtailor: cannot derive jobs.rss URL for ${fallbackCompany | exception | error | config, teamtailor, missing-field, portals-yml, detection |
| thehub: unexpected API response on page ${page} — expected { | exception | error | api-contract, runtime, thehub, response-shape |
| themuse: invalid URL: ${url} | exception | error | ssrf-guard, url-validation, themuse, unreachable-defensive |
| themuse: URL must use HTTPS: ${url} | exception | error | ssrf-guard, url-validation, https, themuse, unreachable-defensive |
| themuse: untrusted hostname "${parsed.hostname}" — must be $ | exception | error | ssrf-guard, url-validation, hostname, themuse, unreachable-defensive |
| themuse: unexpected API response on page ${page} — expected | exception | error | api-contract, runtime, themuse, response-shape |
| tkms: cannot resolve jobs host for ${entry.name} | exception | error | config, tkms, url-validation, hostname, portals-yml, detection |
| vdab: entry "${entry.name || '(unnamed)'}" has no vdab.keywo | exception | error | config, vdab, validation, onboarding, portals-yml |
| vdab: all ${keywords.length} keyword request(s) failed — ${e | exception | error | network, vdab, outage, retry, key-rotation |
| weworkremotely: invalid URL: ${url} | exception | error | validation, url, ssrf-guard, weworkremotely, invariant |
| weworkremotely: URL must use HTTPS: ${url} | exception | error | validation, url, ssrf-guard, https, weworkremotely, invariant |
| weworkremotely: untrusted hostname "${parsed.hostname}" - mu | exception | error | validation, url, ssrf-guard, hostname, weworkremotely, invariant |
| workable: invalid URL: ${url} | exception | error | validation, url, ssrf-guard, workable, invariant |
| workable: URL must use HTTPS: ${url} | exception | error | validation, url, ssrf-guard, https, workable, invariant |
| workable: untrusted hostname "${parsed.hostname}" — must be | exception | error | validation, url, ssrf-guard, hostname, workable, invariant |
| workable: cannot derive feed URL for ${entry.name} | exception | error | config, workable, detection, portals-yml, url-pattern |
| workday: cannot derive CXS endpoint for ${entry.name} | exception | error | config, workday, detection, url-pattern, portals-yml |
| workingnomads: unexpected API response — expected a JSON arr | exception | error | api-contract, workingnomads, validation, parsing |
| wttj: invalid URL: ${url} | exception | error | validation, url, ssrf-guard, wttj, invariant |
| wttj: URL must use HTTPS: ${url} | exception | error | validation, url, ssrf-guard, https, wttj, invariant |
| wttj: untrusted ${label} hostname "${parsed.hostname}" — mus | exception | error | validation, url, ssrf-guard, hostname, wttj, algolia |
| wttj: /api/env payload has no JSON object | exception | error | api-contract, wttj, parsing, algolia |
| wttj: /api/env payload is not valid JSON | exception | error | api-contract, wttj, parsing, json, algolia |
| wttj: unexpected Algolia app id "${appId}" | exception | error | api-contract, wttj, algolia, validation, key-rotation |
| wttj: unexpected Algolia api key shape | exception | error | api-contract, wttj, algolia, validation, key-rotation |
| wttj: the WTTJ board is global — configure explicit searches | exception | error | config, wttj, validation, portals-yml |
| wttj: unexpected Algolia response for query "${query}" — exp | exception | error | api-contract, wttj, algolia, auth, validation |
| Report number must be a positive integer, got ${num} | exception | error | validation, report-number, typeerror, argument-validation |
| Reservation count must be an integer from 1 to ${MAX_COUNT} | exception | error | validation, report-number, rangeerror, batch-reservation |
| No safe report-number range remains | exception | critical | overflow, rangeerror, report-number, defensive-guard |
| Could not claim ${count} report slot(s) after ${MAX_RETRIES} | exception | error | contention, locking, report-number, concurrency, retries |
| Reservation ownership token is required for release | exception | error | reservation, ownership, locking, report-number, token |
| runSeedScan: unknown seed "${seedId}" | exception | error | seed-sources, registry, validation, scan |
| --liveness requires Playwright with Chromium (run "npx playw | exception | error | playwright, liveness, dynamic-import, dependencies, scan |
| --verify requires Playwright with Chromium (run "npx playwri | exception | error | playwright, verify, dynamic-import, dependencies, scan |
| --verify could not launch Chromium (run "npx playwright inst | exception | error | playwright, chromium, browser-launch, dependencies, scan, ci |
| ${provider.id}: fetch() did not return an array | exception | error | provider, contract-violation, scan, ats, type-check |
| HTTP ${res.status}${snippet ? ': ' + snippet.replace(/\s+/g, | exception | error | network, http, seeds, vc-portfolios, rate-limiting |
| vc-portfolios: YC API fetch failed — ${err.message} | exception | error | network, seeds, vc-portfolios, yc-api, fetch |
| vc-portfolios: a16z portfolio fetch failed — ${err.message} | exception | error | network, seeds, vc-portfolios, a16z, fetch, html-scraping |
| tracker-parse.mjs: cannot load tracker-aliases.json (${e.mes | exception | critical | install, bootstrap, tracker-parse, json, config-integrity |
| Malformed states file at ${statesPath}: expected a top-level | exception | critical | config, states-yml, tracker, yaml, config-integrity |
| Cannot verify tracker lock ownership at ${lockDir} | exception | critical | locking, lock-ownership, tracker, concurrency, toctou |
| Malformed states file at ${statesPath}: expected a top-level | exception | critical | config, states-yml, tracker, yaml, config-integrity, set-status |
| ${describeGitCommand(args)} timed out after ${timeoutSeconds | exception | error | network, git, timeout, update-system, configuration |
| Validation failed (${err.message}) and revert also failed ($ | exception | error | git, update-system, corruption, filesystem, atomicity, lock |
| Safety violation (${violation.message}) and revert also fail | exception | critical | safety-invariant, update-system, git, data-loss-prevention, atomicity, user-layer |
MODE_MISSING AI search needs a newer career-ops — update to enable it. | error_code | warning | web, api, version-skew, update-system, graceful-degradation, filesystem |
| opening URLs is not supported on %s | exception | warning | go, build-constraint, cross-platform, dashboard, unsupported-os |