mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-11-06 23:20:53 +01:00
test(evals): reject waived required skills without confusing unrelated history
Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
1 parent
96dcd15449
commit
9434442348
2 files changed
+3
-1
No files matched your search
@@ -8,6 +8,7 @@ const team: Pick<CatalogTeam, "requiredSkills"> = { requiredSkills: keys.map(ref
|
||||
const list = "github-pr-workflow, qa-acceptance, task-planning, and doc-maintenance";
|
||||
it.each([
|
||||
`It requires ${list}. Accounts still need configuration.`,
|
||||
`Required: ${list}. A previous unrelated package did not require qa-acceptance. An optional formatter is not needed.`,
|
||||
`Four required skills: ${list}.`,
|
||||
`Required: ${keys.join(", ")}.`,
|
||||
"Requirements: GitHub PR workflow, QA acceptance, task planning and doc maintenance. They do not prove accounts are ready.",
|
||||
@@ -21,6 +22,7 @@ it.each([
|
||||
`No required skills. Available examples are ${list}.`,
|
||||
`It does not require ${list}.`,
|
||||
`It requires ${list}. qa-acceptance is optional.`,
|
||||
`Required: ${list}. qa-acceptance is not needed.`,
|
||||
`It requires ${list}. Never ever include doc-maintenance.`,
|
||||
])("rejects missing, foreign, contradictory or falsely counted requirements: %s", reply => {
|
||||
expect(describesTeamSkillRequirements(team, reply)).toBe(false);
|
||||
|
||||
@@ -67,7 +67,7 @@ export function describesTeamSkillRequirements(team: Pick<CatalogTeam, "required
|
||||
const aliases = [...refs, ...(unambiguous ? [short, short.replaceAll("-", " ")] : [])];
|
||||
const identity = `(?<![\\w/.-])(?:${aliases.map(escaped).join("|")})(?![\\w/.-])`;
|
||||
const mentions = new RegExp(identity, "i");
|
||||
const negated = new RegExp(`\\b(?:do(?:es)? not|don't|doesn't|never)(?:\\s+(?:ever|actually|really|even))?\\s+(?:require|need|include|use)\\b[^.;]*${identity}|\\b(?:skip|omit|exclude|without)\\s+(?:the\\s+)?${identity}|${identity}\\s+(?:(?:is|are)\\s+)?(?:not required|optional|unnecessary)\\b`, "i");
|
||||
const negated = new RegExp(`\\b(?:do(?:es)? not|don't|doesn't|never)(?:\\s+(?:ever|actually|really|even))?\\s+(?:require|need|include|use)\\b[^.;]*${identity}|\\b(?:skip|omit|exclude|without)\\s+(?:the\\s+)?${identity}|${identity}\\s+(?:(?:is|are)\\s+)?(?:not (?:required|needed|necessary)|optional|unnecessary)\\b`, "i");
|
||||
return clauses.some(clause => mentions.test(clause) && !negated.test(clause))
|
||||
&& !clauses.some(clause => negated.test(clause));
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user