src / planning / skills.ts
const ACADEMIC_TAG_REGEX =
/\b(academic|science|scientific|neuroscience|psychology|parapsychology|anthropology|medicine|medical|biology|physics|history|philosophy|religion|sociology|literature|empirical|statistical|methodology)\b/i;
export function matchSkillPackFromTags(tags: ReadonlyArray<string>, topic: string): "academic" | "market" | "policy" {
const combined = `${tags.join(" ")} ${topic}`.toLowerCase();
if (/\b(market|finance|economics|business|pricing|saas|valuation|revenue)\b/.test(combined)) {
return "market";
}
if (/\b(policy|law|legal|regulation|compliance|governance|statute)\b/.test(combined)) {
return "policy";
}
if (ACADEMIC_TAG_REGEX.test(combined)) {
return "academic";
}
return "academic"; // Safe default rubric so [SKILL] is never "none"
}
src / planning / skills.ts
const ACADEMIC_TAG_REGEX =
/\b(academic|science|scientific|neuroscience|psychology|parapsychology|anthropology|medicine|medical|biology|physics|history|philosophy|religion|sociology|literature|empirical|statistical|methodology)\b/i;
export function matchSkillPackFromTags(tags: ReadonlyArray<string>, topic: string): "academic" | "market" | "policy" {
const combined = `${tags.join(" ")} ${topic}`.toLowerCase();
if (/\b(market|finance|economics|business|pricing|saas|valuation|revenue)\b/.test(combined)) {
return "market";
}
if (/\b(policy|law|legal|regulation|compliance|governance|statute)\b/.test(combined)) {
return "policy";
}
if (ACADEMIC_TAG_REGEX.test(combined)) {
return "academic";
}
return "academic"; // Safe default rubric so [SKILL] is never "none"
}