santifer/career-ops · error · Error
wttj: the WTTJ board is global — configure explicit searches
Error message
wttj: the WTTJ board is global — configure explicit searches via `wttj: { queries: ["…"] }` What it means
WTTJ's board is global and huge, so the provider refuses to scan an arbitrary default slice — it requires an explicit wttj: { queries: [...] } block. resolveConfig throws when, after filtering, there are zero non-empty string queries.
Source
Thrown at providers/wttj.mjs:144
: 0;
if (min || max) {
job.salary = {
min: min || max,
max: max || min,
currency: typeof h.salary_currency === 'string' ? h.salary_currency.trim().toUpperCase() : '',
};
}
return job;
}
/** Resolve config: required queries list + optional per-query hit cap. */
function resolveConfig(entry) {
const cfg = entry?.wttj && typeof entry.wttj === 'object' ? entry.wttj : {};
const queries = Array.isArray(cfg.queries)
? cfg.queries.filter((q) => typeof q === 'string' && q.trim()).map((q) => q.trim())
: [];
if (queries.length === 0) {
throw new Error(
'wttj: the WTTJ board is global — configure explicit searches via `wttj: { queries: ["…"] }`',
);
}
const maxHits =
Number.isInteger(cfg.max_hits) && cfg.max_hits > 0 ? Math.min(cfg.max_hits, MAX_HITS_CAP) : DEFAULT_MAX_HITS;
return { queries, maxHits };
}
/** @type {Provider} */
export default {
id: 'wttj',
detect(entry) {
return entry?.provider === 'wttj' ? { url: SITE_ORIGIN } : null;
},
async fetch(entry, ctx) {
const { queries, maxHits } = resolveConfig(entry);View on GitHub (pinned to 9b17a8ac97)
Solutions
- Add wttj: { queries: ["finops", "data platform engineer"] } to the entry.
- Confirm the YAML indentation puts queries under wttj:, not at the entry root.
- Optionally add max_hits (per-query, capped at 200) alongside queries.
Example fix
# before
- name: Welcome to the Jungle
provider: wttj
# after
- name: Welcome to the Jungle
provider: wttj
wttj:
queries: ["finops", "data platform engineer", "snowflake"]
max_hits: 100 Defensive patterns
Strategy: validation
Validate before calling
function wttjQueriesConfigured(entry) {
const cfg = entry?.wttj && typeof entry.wttj === "object" ? entry.wttj : {};
return Array.isArray(cfg.queries) &&
cfg.queries.some(q => typeof q === "string" && q.trim());
}
if (entry.provider === "wttj" && !wttjQueriesConfigured(entry)) {
console.warn(`skip ${entry.name}: add wttj.queries`);
continue;
} Type guard
const hasWttjQueries = (e) => Array.isArray(e?.wttj?.queries) && e.wttj.queries.some(q => typeof q === "string" && q.trim());
Prevention
- Always pair provider: wttj with a wttj.queries block.
- Lint portals.yml for wttj entries lacking queries.
- Watch for the query/queries singular typo.
When it happens
Trigger: An entry with provider: wttj but no wttj: block; a wttj: block whose queries is missing / not an array / all-empty / contains non-strings; a typo like query: instead of queries:; queries placed at the entry root instead of under wttj:.
Common situations: User copies the WTTJ sample and deletes the queries; misspells queries; indents queries wrong so it lands outside the wttj: map.
Related errors
- gem: cannot derive board id for ${entry.name}
- getro: ${entry.name} needs a numeric 'getro_collection' in p
- vdab: entry "${entry.name || '(unnamed)'}" has no vdab.keywo
- Unsupported profile photo style: ${style} (expected rounded,
- Malformed benchmarks file at ${path}: expected a top-level "
AI-assisted analysis of santifer/career-ops@9b17a8ac97 (2026-08-13).
Data as JSON: /api/errors/fef876581c7ab69b.
Report an issue: GitHub.