vigiles 14.8.0 → 14.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -186,7 +186,7 @@ function safety(r) {
186
186
  {
187
187
  n: hard.length,
188
188
  weight: score_core_js_1.W_TRIFECTA,
189
- label: "unit(s) holding all three lethal-trifecta legs (prompt-injection exfil path)",
189
+ label: score_core_js_1.TRIFECTA_LABEL,
190
190
  },
191
191
  ]);
192
192
  // inherits-all trifecta findings are ADVISORY: surfaced as a maximal-blast-radius
@@ -36,6 +36,16 @@ export declare const W_DANGLING_REF = 8;
36
36
  export declare const W_OVERLAP = 8;
37
37
  export declare const W_NO_CONTRACT = 5;
38
38
  export declare const W_TRIFECTA = 10;
39
+ /**
40
+ * The one canonical, jargon-free finding string for a HARD lethal-trifecta unit —
41
+ * shared by the Safety category card (audit-score) AND the verdict sentence / overall
42
+ * deduction (reportDeductions here), so the plain-language copy can't drift between
43
+ * surfaces (one-detector-no-drift). It NAMES the three legs and the consequence in
44
+ * plain words instead of the old "holding all three lethal-trifecta legs
45
+ * (prompt-injection exfil path)" shorthand a first-time reader can't parse. The
46
+ * `(s)` placeholder is resolved by the caller's pluralizer against the count.
47
+ */
48
+ export declare const TRIFECTA_LABEL = "unit(s) can read data, reach the web, and run commands \u2014 the \"lethal trifecta\", so a prompt injection could exfiltrate secrets";
39
49
  /** Map a 0–100 structural-health score to its letter grade (A ≥90 … F <60). */
40
50
  export declare function gradeFor(score: number): PluginScore["grade"];
41
51
  /** One deduction: a count, its per-item weight, and the label if non-zero. */
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.W_TRIFECTA = exports.W_NO_CONTRACT = exports.W_OVERLAP = exports.W_DANGLING_REF = exports.W_NO_DESCRIPTION = exports.W_MISSING_HOOK = void 0;
3
+ exports.TRIFECTA_LABEL = exports.W_TRIFECTA = exports.W_NO_CONTRACT = exports.W_OVERLAP = exports.W_DANGLING_REF = exports.W_NO_DESCRIPTION = exports.W_MISSING_HOOK = void 0;
4
4
  exports.gradeFor = gradeFor;
5
5
  exports.reportDeductions = reportDeductions;
6
6
  exports.isEmptyMachine = isEmptyMachine;
@@ -15,6 +15,16 @@ exports.W_DANGLING_REF = 8; // a referenced intra-plugin file that's missing →
15
15
  exports.W_OVERLAP = 8; // a description collision → the wrong skill fires
16
16
  exports.W_NO_CONTRACT = 5; // generic small-footgun weight (disallowedTools typo, invalid model/color)
17
17
  exports.W_TRIFECTA = 10; // a HARD lethal-trifecta contract (all three legs, explicit) → a prompt-injection exfil path. HALF the old 20: a DING, not a fail — a trifecta is a real risk worth surfacing in the grade, but official plugins ship the pattern by design, so it dents the score (e.g. feature-dev's 3 hard units → −30 → C) without a catastrophic F.
18
+ /**
19
+ * The one canonical, jargon-free finding string for a HARD lethal-trifecta unit —
20
+ * shared by the Safety category card (audit-score) AND the verdict sentence / overall
21
+ * deduction (reportDeductions here), so the plain-language copy can't drift between
22
+ * surfaces (one-detector-no-drift). It NAMES the three legs and the consequence in
23
+ * plain words instead of the old "holding all three lethal-trifecta legs
24
+ * (prompt-injection exfil path)" shorthand a first-time reader can't parse. The
25
+ * `(s)` placeholder is resolved by the caller's pluralizer against the count.
26
+ */
27
+ exports.TRIFECTA_LABEL = 'unit(s) can read data, reach the web, and run commands — the "lethal trifecta", so a prompt injection could exfiltrate secrets';
18
28
  // Two things are advisory, NOT graded penalties (shown, never scored — see scoreReport):
19
29
  // - untested surfaces — a hardening gap, not breakage.
20
30
  // - an agent that inherits all tools (no `tools:` line) — see reportDeductions for why.
@@ -56,7 +66,7 @@ function reportDeductions(r) {
56
66
  {
57
67
  n: hardTrifecta,
58
68
  weight: exports.W_TRIFECTA,
59
- label: "unit(s) holding all three lethal-trifecta legs (prompt-injection exfil path)",
69
+ label: exports.TRIFECTA_LABEL,
60
70
  },
61
71
  {
62
72
  n: missingHooks,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vigiles",
3
- "version": "14.8.0",
3
+ "version": "14.9.0",
4
4
  "description": "Lint & test the harness your AI agent runs on — verify the references in your CLAUDE.md / AGENTS.md and test that your hooks and skills actually work.",
5
5
  "keywords": [
6
6
  "claude-code",