@su-record/vibe 4.2.35 → 4.2.36

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.
Files changed (217) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/dist/cli/common.js +4 -1
  5. package/dist/cli/common.js.map +1 -1
  6. package/dist/cli/heldout.js +10 -4
  7. package/dist/cli/heldout.js.map +1 -1
  8. package/dist/cli/human.js +8 -4
  9. package/dist/cli/human.js.map +1 -1
  10. package/dist/cli/internal.js +37 -24
  11. package/dist/cli/internal.js.map +1 -1
  12. package/dist/cli/ledger.js +67 -0
  13. package/dist/cli/ledger.js.map +1 -0
  14. package/dist/cli/map.js +5 -3
  15. package/dist/cli/map.js.map +1 -1
  16. package/dist/cli/memory.js +104 -74
  17. package/dist/cli/memory.js.map +1 -1
  18. package/dist/cli/risks.js +20 -3
  19. package/dist/cli/risks.js.map +1 -1
  20. package/dist/cli/session.js +4 -2
  21. package/dist/cli/session.js.map +1 -1
  22. package/dist/cli/setup.js +44 -13
  23. package/dist/cli/setup.js.map +1 -1
  24. package/dist/cli/work.js +73 -21
  25. package/dist/cli/work.js.map +1 -1
  26. package/dist/cli.js +18 -6
  27. package/dist/cli.js.map +1 -1
  28. package/dist/core/analyze.js +21 -7
  29. package/dist/core/analyze.js.map +1 -1
  30. package/dist/core/artifact-paths.js +14 -3
  31. package/dist/core/artifact-paths.js.map +1 -1
  32. package/dist/core/capabilities.js +69 -15
  33. package/dist/core/capabilities.js.map +1 -1
  34. package/dist/core/check-authorization.js +37 -0
  35. package/dist/core/check-authorization.js.map +1 -0
  36. package/dist/core/check-process.js +12 -4
  37. package/dist/core/check-process.js.map +1 -1
  38. package/dist/core/check-report.js +66 -0
  39. package/dist/core/check-report.js.map +1 -0
  40. package/dist/core/check.js +59 -71
  41. package/dist/core/check.js.map +1 -1
  42. package/dist/core/checks/changed.js +20 -6
  43. package/dist/core/checks/changed.js.map +1 -1
  44. package/dist/core/checks/eval.js +35 -10
  45. package/dist/core/checks/eval.js.map +1 -1
  46. package/dist/core/checks/file.js +26 -23
  47. package/dist/core/checks/file.js.map +1 -1
  48. package/dist/core/checks/fileRules.js +42 -16
  49. package/dist/core/checks/fileRules.js.map +1 -1
  50. package/dist/core/checks/http.js +35 -34
  51. package/dist/core/checks/http.js.map +1 -1
  52. package/dist/core/checks/packs.js +1 -1
  53. package/dist/core/checks/packs.js.map +1 -1
  54. package/dist/core/checks/review.js +75 -40
  55. package/dist/core/checks/review.js.map +1 -1
  56. package/dist/core/checks/run.js +5 -2
  57. package/dist/core/checks/run.js.map +1 -1
  58. package/dist/core/checks/schema.js +25 -0
  59. package/dist/core/checks/schema.js.map +1 -0
  60. package/dist/core/checks/source.js +11 -6
  61. package/dist/core/checks/source.js.map +1 -1
  62. package/dist/core/config.js +9 -2
  63. package/dist/core/config.js.map +1 -1
  64. package/dist/core/consent.js +24 -16
  65. package/dist/core/consent.js.map +1 -1
  66. package/dist/core/context-notes.js +15 -7
  67. package/dist/core/context-notes.js.map +1 -1
  68. package/dist/core/context.js +24 -12
  69. package/dist/core/context.js.map +1 -1
  70. package/dist/core/conventions.js +22 -9
  71. package/dist/core/conventions.js.map +1 -1
  72. package/dist/core/docs/cfb.js +81 -45
  73. package/dist/core/docs/cfb.js.map +1 -1
  74. package/dist/core/docs/html.js +14 -3
  75. package/dist/core/docs/html.js.map +1 -1
  76. package/dist/core/docs/hwp.js +44 -22
  77. package/dist/core/docs/hwp.js.map +1 -1
  78. package/dist/core/docs/office.js +20 -10
  79. package/dist/core/docs/office.js.map +1 -1
  80. package/dist/core/docs/pdf.js +10 -4
  81. package/dist/core/docs/pdf.js.map +1 -1
  82. package/dist/core/docs/read.js +32 -24
  83. package/dist/core/docs/read.js.map +1 -1
  84. package/dist/core/docs/zip.js +32 -15
  85. package/dist/core/docs/zip.js.map +1 -1
  86. package/dist/core/evidence.js +17 -7
  87. package/dist/core/evidence.js.map +1 -1
  88. package/dist/core/failure-message.js +35 -13
  89. package/dist/core/failure-message.js.map +1 -1
  90. package/dist/core/failure.js +49 -14
  91. package/dist/core/failure.js.map +1 -1
  92. package/dist/core/github.js +3 -1
  93. package/dist/core/github.js.map +1 -1
  94. package/dist/core/handoff.js +20 -7
  95. package/dist/core/handoff.js.map +1 -1
  96. package/dist/core/heldout-run.js +6 -3
  97. package/dist/core/heldout-run.js.map +1 -1
  98. package/dist/core/heldout.js +24 -13
  99. package/dist/core/heldout.js.map +1 -1
  100. package/dist/core/inbox.js +3 -1
  101. package/dist/core/inbox.js.map +1 -1
  102. package/dist/core/inputs.js +6 -3
  103. package/dist/core/inputs.js.map +1 -1
  104. package/dist/core/inspect.js +61 -20
  105. package/dist/core/inspect.js.map +1 -1
  106. package/dist/core/intent.js +35 -13
  107. package/dist/core/intent.js.map +1 -1
  108. package/dist/core/knowledge-find.js +31 -12
  109. package/dist/core/knowledge-find.js.map +1 -1
  110. package/dist/core/knowledge.js +22 -12
  111. package/dist/core/knowledge.js.map +1 -1
  112. package/dist/core/lang.js +5 -2
  113. package/dist/core/lang.js.map +1 -1
  114. package/dist/core/ledger.js +44 -20
  115. package/dist/core/ledger.js.map +1 -1
  116. package/dist/core/locations.js +12 -0
  117. package/dist/core/locations.js.map +1 -0
  118. package/dist/core/map/imports.js +20 -9
  119. package/dist/core/map/imports.js.map +1 -1
  120. package/dist/core/map/index.js +28 -13
  121. package/dist/core/map/index.js.map +1 -1
  122. package/dist/core/map/symbols.js +27 -12
  123. package/dist/core/map/symbols.js.map +1 -1
  124. package/dist/core/output-capture.js +7 -4
  125. package/dist/core/output-capture.js.map +1 -1
  126. package/dist/core/paths.js +2 -1
  127. package/dist/core/paths.js.map +1 -1
  128. package/dist/core/performance.js +43 -17
  129. package/dist/core/performance.js.map +1 -1
  130. package/dist/core/profile.js +6 -3
  131. package/dist/core/profile.js.map +1 -1
  132. package/dist/core/reader.js +32 -16
  133. package/dist/core/reader.js.map +1 -1
  134. package/dist/core/readerSession.js +34 -14
  135. package/dist/core/readerSession.js.map +1 -1
  136. package/dist/core/recent.js +20 -6
  137. package/dist/core/recent.js.map +1 -1
  138. package/dist/core/regress.js +21 -12
  139. package/dist/core/regress.js.map +1 -1
  140. package/dist/core/repair.js +22 -4
  141. package/dist/core/repair.js.map +1 -1
  142. package/dist/core/research-queries.js +85 -0
  143. package/dist/core/research-queries.js.map +1 -0
  144. package/dist/core/research.js +89 -88
  145. package/dist/core/research.js.map +1 -1
  146. package/dist/core/results.js +15 -6
  147. package/dist/core/results.js.map +1 -1
  148. package/dist/core/risk-signals.js +53 -15
  149. package/dist/core/risk-signals.js.map +1 -1
  150. package/dist/core/run-id.js +10 -6
  151. package/dist/core/run-id.js.map +1 -1
  152. package/dist/core/scenarios.js +91 -60
  153. package/dist/core/scenarios.js.map +1 -1
  154. package/dist/core/session.js +3 -2
  155. package/dist/core/session.js.map +1 -1
  156. package/dist/core/size.js +28 -8
  157. package/dist/core/size.js.map +1 -1
  158. package/dist/core/skills.js +66 -28
  159. package/dist/core/skills.js.map +1 -1
  160. package/dist/core/skillsmp.js +26 -12
  161. package/dist/core/skillsmp.js.map +1 -1
  162. package/dist/core/source-basis.js +21 -9
  163. package/dist/core/source-basis.js.map +1 -1
  164. package/dist/core/status.js +26 -13
  165. package/dist/core/status.js.map +1 -1
  166. package/dist/core/table.js +8 -1
  167. package/dist/core/table.js.map +1 -1
  168. package/dist/core/tokens.js +20 -10
  169. package/dist/core/tokens.js.map +1 -1
  170. package/dist/core/tree.js +26 -16
  171. package/dist/core/tree.js.map +1 -1
  172. package/dist/core/verification-plan.js +24 -8
  173. package/dist/core/verification-plan.js.map +1 -1
  174. package/dist/core/verification.js +14 -7
  175. package/dist/core/verification.js.map +1 -1
  176. package/dist/core/view.js +93 -44
  177. package/dist/core/view.js.map +1 -1
  178. package/dist/install/global.js +37 -18
  179. package/dist/install/global.js.map +1 -1
  180. package/dist/install/hooks.js +17 -8
  181. package/dist/install/hooks.js.map +1 -1
  182. package/dist/install/manifest.js +11 -0
  183. package/dist/install/manifest.js.map +1 -0
  184. package/dist/install/mcpb.js +52 -23
  185. package/dist/install/mcpb.js.map +1 -1
  186. package/dist/install/plugin.js +73 -33
  187. package/dist/install/plugin.js.map +1 -1
  188. package/dist/install/project.js +8 -7
  189. package/dist/install/project.js.map +1 -1
  190. package/dist/install/register.js +83 -48
  191. package/dist/install/register.js.map +1 -1
  192. package/dist/install/tree.js +27 -11
  193. package/dist/install/tree.js.map +1 -1
  194. package/dist/install/update.js +46 -20
  195. package/dist/install/update.js.map +1 -1
  196. package/hooks/code-map.cjs +22 -9
  197. package/hooks/journal.cjs +18 -16
  198. package/hooks/knowledge-auto.cjs +55 -21
  199. package/hooks/knowledge-journal.cjs +47 -20
  200. package/hooks/knowledge-projects.cjs +50 -21
  201. package/hooks/knowledge-recall.cjs +16 -6
  202. package/hooks/knowledge-upkeep.cjs +22 -5
  203. package/hooks/locations.cjs +35 -0
  204. package/hooks/notify.js +52 -24
  205. package/hooks/obsidian.cjs +17 -7
  206. package/hooks/private-store.cjs +25 -10
  207. package/hooks/retest.cjs +39 -16
  208. package/hooks/session-context.cjs +30 -13
  209. package/hooks/session-files.cjs +44 -21
  210. package/hooks/session-repair.cjs +26 -11
  211. package/hooks/session-state.cjs +78 -38
  212. package/hooks/session.js +19 -8
  213. package/hooks/slice-command.cjs +38 -17
  214. package/hooks/slice-guard.cjs +20 -6
  215. package/hooks/slice-store.cjs +25 -12
  216. package/mcpb/server/index.js +40 -12
  217. package/package.json +1 -1
@@ -6,7 +6,24 @@ import { readPrivate, writePrivate } from './private-store.js';
6
6
  import { denied } from './errors.js';
7
7
  import { RISK_KINDS } from './verification.js';
8
8
  import { mutationOf, actionOf } from './checks/mutation.js';
9
- const SKIP = new Set(['.git', '.vibe', 'node_modules', 'dist', '.venv', '.codex', '.claude']);
9
+ import { CLAUDE_DIR, CODEX_DIR } from './locations.js';
10
+ import { VIBE_DIR, vibePath } from './paths.js';
11
+ const SKIP = new Set(['.git', VIBE_DIR, 'node_modules', 'dist', '.venv', CODEX_DIR, CLAUDE_DIR]);
12
+ const GIT_TIMEOUT_MS = 5000;
13
+ const GIT_MAX_BUFFER = 2 * 1024 * 1024;
14
+ /** A project outside Git is scanned file by file; past this many paths the scan stops instead of walking on. */
15
+ const MAX_SCANNED_PATHS = 20_000;
16
+ const RULES_FILE = 'risk-rules.json';
17
+ const RULES_FILE_MAX_BYTES = 64 * 1024;
18
+ const MAX_RULES = 100;
19
+ /** Uncovered risks named in the failure message; the count says how many more there are. */
20
+ const MAX_REPORTED = 20;
21
+ const GIT_OBJECT_ID = /^[a-f0-9]{40,64}$/;
22
+ /** Documentation, tests and fixtures never raise a built-in path signal. */
23
+ const NOT_RISKY = /\.(?:md|txt)$|(?:^|\/)(?:tests?|__tests__|fixtures)\/|\.(?:test|spec)\./i;
24
+ /** Actions that change what runs in production; every other mutating action touches data. */
25
+ const DEPLOY_ACTIONS = ['push', 'publish', 'deploy', 'apply'];
26
+ const READ_ONLY_METHODS = ['GET', 'HEAD'];
10
27
  const RULES = [
11
28
  ['access', /(?:^|\/)(?:auth(?:entication|orization)?|permissions?|rbac|acl|oauth|consent|tokens?)(?:[./_-]|$)/i],
12
29
  ['data', /(?:^|\/)(?:migrations?|schema|prisma)(?:[./_-]|$)|\.sql$/i],
@@ -15,7 +32,7 @@ const RULES = [
15
32
  ['integration', /(?:^|\/)(?:connectors?|webhooks?)(?:[./_-]|$)/i],
16
33
  ];
17
34
  function git(root, args, optional = false) {
18
- const r = spawnSync('git', args, { cwd: root, encoding: 'utf8', timeout: 5000, maxBuffer: 2_097_152 });
35
+ const r = spawnSync('git', args, { cwd: root, encoding: 'utf8', timeout: GIT_TIMEOUT_MS, maxBuffer: GIT_MAX_BUFFER });
19
36
  if (r.status === 0)
20
37
  return r.stdout;
21
38
  if (optional && (!r.error || r.error.code === 'ENOENT'))
@@ -28,7 +45,7 @@ export function riskBase(root) {
28
45
  if (text === null)
29
46
  return null;
30
47
  const value = JSON.parse(text);
31
- if (!value || (value.head !== null && !/^[a-f0-9]{40,64}$/.test(value.head)))
48
+ if (!value || (value.head !== null && !GIT_OBJECT_ID.test(value.head)))
32
49
  throw denied('invalid risk baseline; inspect the task baseline');
33
50
  return value;
34
51
  }
@@ -47,8 +64,8 @@ function localPaths(root) {
47
64
  continue;
48
65
  const name = rel + item.name;
49
66
  visited++;
50
- if (visited > 20_000)
51
- throw denied('risk scan exceeds 20000 paths; narrow the project root');
67
+ if (visited > MAX_SCANNED_PATHS)
68
+ throw denied(`risk scan exceeds ${MAX_SCANNED_PATHS} paths; narrow the project root`);
52
69
  if (item.isDirectory())
53
70
  visit(name + '/');
54
71
  else
@@ -70,50 +87,71 @@ export function changedPaths(root) {
70
87
  const untracked = git(root, ['ls-files', '--others', '--exclude-standard', '-z']);
71
88
  return [...new Set((tracked + untracked).split('\0').filter(Boolean))];
72
89
  }
90
+ function validRule(rule) {
91
+ if (!rule || typeof rule.prefix !== 'string' || !rule.prefix)
92
+ return false;
93
+ if (rule.prefix.startsWith('/') || rule.prefix.includes('..'))
94
+ return false;
95
+ return RISK_KINDS.includes(rule.kind);
96
+ }
73
97
  export function riskRules(root) {
74
- const file = path.join(root, '.vibe', 'risk-rules.json');
98
+ const file = vibePath(root, RULES_FILE);
75
99
  const stat = fs.lstatSync(file, { throwIfNoEntry: false });
76
100
  if (!stat)
77
101
  return [];
78
- if (!stat.isFile() || stat.size > 65536)
102
+ if (!stat.isFile() || stat.size > RULES_FILE_MAX_BYTES)
79
103
  throw denied('risk rules must be a regular JSON file below 64 KiB');
80
104
  const rules = JSON.parse(fs.readFileSync(file, 'utf8'));
81
- if (!Array.isArray(rules) || rules.length > 100 || rules.some(r => !r || typeof r.prefix !== 'string' || !r.prefix || r.prefix.startsWith('/') || r.prefix.includes('..') || !RISK_KINDS.includes(r.kind)))
105
+ if (!Array.isArray(rules) || rules.length > MAX_RULES || !rules.every(validRule)) {
82
106
  throw denied('risk rules require project-relative prefix and supported kind');
107
+ }
83
108
  return rules;
84
109
  }
85
110
  export function pathWithin(file, prefix) {
86
111
  return file === prefix || file.startsWith(prefix.replace(/\/$/, '') + '/');
87
112
  }
88
- export function riskSignals(root, scenarios) {
113
+ function pathSignals(root) {
89
114
  const signals = [];
90
115
  const custom = riskRules(root);
91
116
  for (const file of changedPaths(root)) {
92
- for (const rule of custom)
117
+ for (const rule of custom) {
93
118
  if (pathWithin(file, rule.prefix))
94
119
  signals.push({ kind: rule.kind, source: 'path', target: file, reason: 'project path rule' });
95
- if (/\.(?:md|txt)$|(?:^|\/)(?:tests?|__tests__|fixtures)\/|\.(?:test|spec)\./i.test(file))
120
+ }
121
+ if (NOT_RISKY.test(file))
96
122
  continue;
97
123
  for (const [kind, pattern] of RULES)
98
124
  if (pattern.test(file))
99
125
  signals.push({ kind, source: 'path', target: file, reason: 'built-in path rule' });
100
126
  }
127
+ return signals;
128
+ }
129
+ function commandSignals(scenarios) {
130
+ const signals = [];
101
131
  for (const s of scenarios) {
102
132
  const action = s.irreversible ? actionOf(s.irreversible) : s.check.type === 'run' ? mutationOf(s.check.cmd) : null;
103
133
  if (action)
104
- signals.push({ kind: ['push', 'publish', 'deploy', 'apply'].includes(action) ? 'deployment' : 'data', source: 'command', target: s.id, reason: `action ${action}` });
105
- if (s.check.type === 'http' && !['GET', 'HEAD'].includes((s.check.method ?? 'GET').toUpperCase()))
134
+ signals.push({ kind: DEPLOY_ACTIONS.includes(action) ? 'deployment' : 'data', source: 'command', target: s.id, reason: `action ${action}` });
135
+ if (s.check.type === 'http' && !READ_ONLY_METHODS.includes((s.check.method ?? 'GET').toUpperCase())) {
106
136
  signals.push({ kind: 'integration', source: 'command', target: s.id, reason: 'HTTP write method' });
137
+ }
107
138
  }
108
139
  return signals;
109
140
  }
141
+ export function riskSignals(root, scenarios) {
142
+ return [...pathSignals(root), ...commandSignals(scenarios)];
143
+ }
110
144
  export function uncoveredRisks(root, scenarios, signals = riskSignals(root, scenarios)) {
111
145
  return signals.filter(signal => !scenarios.some(s => s.risk?.kind === signal.kind &&
112
146
  (signal.source === 'command' ? s.id === signal.target : s.risk.paths?.some(prefix => pathWithin(signal.target, prefix)))));
113
147
  }
114
148
  export function requireRiskCoverage(root, scenarios) {
115
149
  const missing = uncoveredRisks(root, scenarios);
116
- if (missing.length)
117
- throw denied(`required risk verification missing: ${JSON.stringify(missing.slice(0, 20))}${missing.length > 20 ? ` (${missing.length} total)` : ''}; connect these outcomes to failure/recovery checks using risk.kind and risk.paths, then draft and approve`);
150
+ if (!missing.length)
151
+ return;
152
+ const listed = JSON.stringify(missing.slice(0, MAX_REPORTED));
153
+ const more = missing.length > MAX_REPORTED ? ` (${missing.length} total)` : '';
154
+ const fix = 'connect these outcomes to failure/recovery checks using risk.kind and risk.paths, then draft and approve';
155
+ throw denied(`required risk verification missing: ${listed}${more}; ${fix}`);
118
156
  }
119
157
  //# sourceMappingURL=risk-signals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"risk-signals.js","sourceRoot":"","sources":["../../src/core/risk-signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAa,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG5D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAC9F,MAAM,KAAK,GAAkC;IAC3C,CAAC,QAAQ,EAAE,oGAAoG,CAAC;IAChH,CAAC,MAAM,EAAE,2DAA2D,CAAC;IACrE,CAAC,WAAW,EAAE,6EAA6E,CAAC;IAC5F,CAAC,YAAY,EAAE,2GAA2G,CAAC;IAC3H,CAAC,aAAa,EAAE,gDAAgD,CAAC;CAClE,CAAC;AACF,SAAS,GAAG,CAAC,IAAY,EAAE,IAAc,EAAE,QAAQ,GAAG,KAAK;IACzD,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IACvG,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAK,CAAC,CAAC,KAA+B,CAAC,IAAI,KAAK,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAChG,MAAM,MAAM,CAAC,wEAAwE,CAAC,CAAC;AACzF,CAAC;AACD,SAAS,QAAQ,CAAC,IAAY,IAAY,OAAO,aAAa,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACxI,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAAE,MAAM,MAAM,CAAC,kDAAkD,CAAC,CAAC;IAC/I,OAAO,KAAK,CAAC;AACf,CAAC;AACD,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,OAAgB;IAC5D,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO;IACvC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IAChF,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC;AACD,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,KAAK,GAAG,CAAC,GAAW,EAAQ,EAAE;QAClC,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACjF,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAClC,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;YAC7B,OAAO,EAAE,CAAC;YACV,IAAI,OAAO,GAAG,MAAM;gBAAE,MAAM,MAAM,CAAC,wDAAwD,CAAC,CAAC;YAC7F,IAAI,IAAI,CAAC,WAAW,EAAE;gBAAE,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;;gBACrC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC;IACF,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,OAAO,KAAK,CAAC;AACf,CAAC;AACD,wGAAwG;AACxG,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/D,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAAE,MAAM,MAAM,CAAC,kFAAkF,CAAC,CAAC;QAC7I,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAE,CAAC;IACzI,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE,IAAI,CAAC,CAAE,CAAC;IACnF,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AACD,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK;QAAE,MAAM,MAAM,CAAC,qDAAqD,CAAC,CAAC;IAC7G,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,MAAM,MAAM,CAAC,+DAA+D,CAAC,CAAC;IAC1R,OAAO,KAAK,CAAC;AACf,CAAC;AACD,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,MAAc;IACrD,OAAO,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAC7E,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,SAAqB;IAC7D,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,MAAM;YAAE,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC3J,IAAI,0EAA0E,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QACpG,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK;YAAE,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAClJ,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACnH,IAAI,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,MAAM,EAAE,EAAE,CAAC,CAAC;QACjL,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACzM,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AACD,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,SAAqB,EAAE,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC;IACxG,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,IAAI;QAC/E,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/H,CAAC;AACD,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,SAAqB;IACrE,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,MAAM,CAAC,uCAAuC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,EAAE,4GAA4G,CAAC,CAAC;AACtR,CAAC"}
1
+ {"version":3,"file":"risk-signals.js","sourceRoot":"","sources":["../../src/core/risk-signals.ts"],"names":[],"mappings":"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"}
@@ -2,16 +2,20 @@ import fs from 'node:fs';
2
2
  import { vibePath } from './paths.js';
3
3
  import { writeState } from './state.js';
4
4
  import { ensureDir } from './store.js';
5
+ /** Run ids are `r-<n>`; the evidence file of a run is `<id>.json`. */
6
+ export const RUN_PREFIX = 'r-';
7
+ export const RUNS_DIR = 'runs';
8
+ export const EVIDENCE_DIR = 'evidence';
5
9
  /** Reserve before execution. A crash may leave a gap; it must never reuse another run's evidence. */
6
10
  export function reserveRun(root, state) {
7
- ensureDir(vibePath(root, 'runs'));
11
+ ensureDir(vibePath(root, RUNS_DIR));
8
12
  let number = state.runs;
9
13
  for (;;) {
10
- const run = `r-${++number}`;
11
- if (fs.existsSync(vibePath(root, 'evidence', `${run}.json`)))
14
+ const run = `${RUN_PREFIX}${++number}`;
15
+ if (fs.existsSync(vibePath(root, EVIDENCE_DIR, `${run}.json`)))
12
16
  continue;
13
17
  try {
14
- fs.writeFileSync(vibePath(root, 'runs', run), '', { flag: 'wx' });
18
+ fs.writeFileSync(vibePath(root, RUNS_DIR, run), '', { flag: 'wx' });
15
19
  }
16
20
  catch (error) {
17
21
  if (error.code === 'EEXIST')
@@ -23,7 +27,7 @@ export function reserveRun(root, state) {
23
27
  }
24
28
  }
25
29
  export function writeRunEvidence(root, run, evidence) {
26
- ensureDir(vibePath(root, 'evidence'));
27
- fs.writeFileSync(vibePath(root, 'evidence', `${run}.json`), `${JSON.stringify(evidence, null, 2)}\n`, { flag: 'wx' });
30
+ ensureDir(vibePath(root, EVIDENCE_DIR));
31
+ fs.writeFileSync(vibePath(root, EVIDENCE_DIR, `${run}.json`), `${JSON.stringify(evidence, null, 2)}\n`, { flag: 'wx' });
28
32
  }
29
33
  //# sourceMappingURL=run-id.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-id.js","sourceRoot":"","sources":["../../src/core/run-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,qGAAqG;AACrG,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,KAAgB;IACvD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAClC,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,SAAS,CAAC;QACR,MAAM,GAAG,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC;QAC5B,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;YAAE,SAAS;QACvE,IAAI,CAAC;YAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAC1E,OAAO,KAAK,EAAE,CAAC;YAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAAC,MAAM,KAAK,CAAC;QAAC,CAAC;QAChG,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7F,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,GAAW,EAAE,QAAiB;IAC3E,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IACtC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACxH,CAAC"}
1
+ {"version":3,"file":"run-id.js","sourceRoot":"","sources":["../../src/core/run-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,sEAAsE;AACtE,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC/B,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AAEvC,qGAAqG;AACrG,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,KAAgB;IACvD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpC,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,SAAS,CAAC;QACR,MAAM,GAAG,GAAG,GAAG,UAAU,GAAG,EAAE,MAAM,EAAE,CAAC;QACvC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;YAAE,SAAS;QACzE,IAAI,CAAC;YAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAC5E,OAAO,KAAK,EAAE,CAAC;YAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAAC,MAAM,KAAK,CAAC;QAAC,CAAC;QAChG,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7F,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,GAAW,EAAE,QAAiB;IAC3E,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IACxC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,GAAG,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1H,CAAC"}
@@ -3,7 +3,21 @@ import { artifactPathsValid } from './artifact-paths.js';
3
3
  import { bindRiskChecks, riskReason } from './verification.js';
4
4
  import { mutationOf } from './checks/mutation.js';
5
5
  const CHECK_TYPES = new Set(['run', 'file', 'http', 'eval', 'review', 'human']);
6
- const ID_RE = /^[a-z][a-z0-9-]{0,39}$/;
6
+ /** The longest scenario id; a regression id (`r-<n>-<slug>`) keeps to it too. */
7
+ export const SCENARIO_ID_MAX = 40;
8
+ const ID_RE = new RegExp(`^[a-z][a-z0-9-]{0,${SCENARIO_ID_MAX - 1}}$`);
9
+ const EXIT_CODE_MAX = 255;
10
+ /** A reviewer pack is a `reviewers/` directory name: lowercase words joined by single hyphens. */
11
+ const PACK_NAME = /^[a-z0-9]+(-[a-z0-9]+)*$/;
12
+ /** The mark and the Mermaid stroke of each result on the work graph. */
13
+ const GRAPH_MARK = { pass: '✔', fail: '✘', blocked: '⊘', pending: '?', never: '·' };
14
+ const GRAPH_STYLES = [
15
+ ' classDef pass stroke:#2e7d32',
16
+ ' classDef fail stroke:#c62828',
17
+ ' classDef blocked stroke:#ef6c00,stroke-dasharray:4',
18
+ ' classDef pending stroke:#6a1b9a',
19
+ ' classDef never stroke:#9e9e9e',
20
+ ];
7
21
  function isRecord(value) {
8
22
  return typeof value === 'object' && value !== null && !Array.isArray(value);
9
23
  }
@@ -27,16 +41,21 @@ function strList(value) {
27
41
  * Checkability — a scenario is stored only when bound to exactly one check type.
28
42
  * Prose that cannot be checked is not part of the contract (principle ①).
29
43
  */
44
+ /** File-check keys that hold a text rule (the others are `exists`, `a11y` and `sum`). */
45
+ const FILE_RULES = ['pattern', 'contains', 'absent', 'traceable', 'schema'];
30
46
  function checkReason(check) {
31
47
  if (!isRecord(check))
32
48
  return 'missing check — one check type (run·file·http·eval·review·human) is required';
33
49
  const type = check['type'];
34
50
  if (typeof type !== 'string' || !CHECK_TYPES.has(type))
35
51
  return `unknown check type: ${String(type)}`;
36
- if (check['timeoutMs'] !== undefined && (typeof check['timeoutMs'] !== 'number' || !Number.isFinite(check['timeoutMs']) || check['timeoutMs'] <= 0))
52
+ const timeout = check['timeoutMs'];
53
+ if (timeout !== undefined && (typeof timeout !== 'number' || !Number.isFinite(timeout) || timeout <= 0))
37
54
  return 'timeoutMs must be a positive finite number';
38
- if (type === 'run' && check['expect'] !== undefined && (!Number.isInteger(check['expect']) || Number(check['expect']) < 0 || Number(check['expect']) > 255))
39
- return 'run expect must be an exit code from 0 to 255';
55
+ const expected = check['expect'];
56
+ if (type === 'run' && expected !== undefined && (!Number.isInteger(expected) || Number(expected) < 0 || Number(expected) > EXIT_CODE_MAX)) {
57
+ return `run expect must be an exit code from 0 to ${EXIT_CODE_MAX}`;
58
+ }
40
59
  if (type === 'run' && check['cwd'] !== undefined && !str(check['cwd']))
41
60
  return 'run cwd must be a nonempty directory path';
42
61
  switch (type) {
@@ -46,9 +65,10 @@ function checkReason(check) {
46
65
  if (!str(check['path']))
47
66
  return 'file check requires path';
48
67
  const sum = check['sum'];
49
- if (sum !== undefined && !(isRecord(sum) && str(sum['column']) && typeof sum['equals'] === 'number'))
68
+ const sumValid = isRecord(sum) && str(sum['column']) && typeof sum['equals'] === 'number';
69
+ if (sum !== undefined && !sumValid)
50
70
  return 'file sum requires column and equals (a number)';
51
- const hasRule = check['exists'] !== undefined || str(check['pattern']) || str(check['contains']) || str(check['absent']) || str(check['traceable']) || check['a11y'] === true || str(check['schema']) || sum !== undefined;
71
+ const hasRule = check['exists'] !== undefined || FILE_RULES.some((rule) => str(check[rule])) || check['a11y'] === true || sum !== undefined;
52
72
  return hasRule ? null : 'file check requires one of exists·pattern·contains·absent·traceable·a11y·schema·sum';
53
73
  }
54
74
  case 'http':
@@ -63,7 +83,7 @@ function checkReason(check) {
63
83
  if (!str(check['path']))
64
84
  return 'review check requires path (the manuscript)';
65
85
  const pack = check['pack'];
66
- if (pack !== undefined && (typeof pack !== 'string' || !/^[a-z0-9]+(-[a-z0-9]+)*$/.test(pack)))
86
+ if (pack !== undefined && (typeof pack !== 'string' || !PACK_NAME.test(pack)))
67
87
  return 'review pack must be a reviewers/ directory name';
68
88
  const changed = check['changed'];
69
89
  if (changed !== undefined && changed !== true && !str(changed))
@@ -85,6 +105,59 @@ function inputPaths(value) {
85
105
  const outside = (p) => p.startsWith('/') || p.split(/[\\/]/).includes('..') || p.includes('\\') || p === '.';
86
106
  return inputs === null || inputs.some(outside) ? null : inputs;
87
107
  }
108
+ const ARTIFACTS_REASON = 'artifacts must contain 1–16 project-relative file paths outside .git and .vibe';
109
+ /** One list entry: the scenario it declares, or why it is rejected. `seen` holds the ids already taken. */
110
+ function parseItem(item, index, seen) {
111
+ const label = isRecord(item) && typeof item['id'] === 'string' ? item['id'] : `#${index + 1}`;
112
+ if (!isRecord(item))
113
+ return { id: label, reason: 'item is not an object' };
114
+ const id = str(item['id']);
115
+ if (!id || !ID_RE.test(id)) {
116
+ return { id: label, reason: `id must be 1-${SCENARIO_ID_MAX} chars of lowercase letters, digits, hyphens` };
117
+ }
118
+ if (seen.has(id))
119
+ return { id, reason: 'duplicate id' };
120
+ const then = str(item['then']);
121
+ if (!then)
122
+ return { id, reason: 'then (the success statement) is required' };
123
+ const reason = checkReason(item['check']);
124
+ if (reason)
125
+ return { id, reason };
126
+ const needs = strList(item['needs']);
127
+ if (needs === null)
128
+ return { id, reason: 'needs must be a list of scenario ids' };
129
+ const verifiers = strList(item['verifiers']);
130
+ if (verifiers === null)
131
+ return { id, reason: 'verifiers must be a list of file paths' };
132
+ if (item['artifacts'] !== undefined && !artifactPathsValid(item['artifacts']))
133
+ return { id, reason: ARTIFACTS_REASON };
134
+ const inputs = inputPaths(item['inputs']);
135
+ if (inputs === null)
136
+ return { id, reason: 'inputs must be project-relative files or directories, not the whole project' };
137
+ const invalidRisk = item['risk'] === undefined ? null : riskReason(item['risk']);
138
+ if (invalidRisk)
139
+ return { id, reason: invalidRisk };
140
+ seen.add(id);
141
+ const scenario = { id, then, check: item['check'], ...(inputs.length > 0 ? { inputs } : {}) };
142
+ const given = str(item['given']);
143
+ const when = str(item['when']);
144
+ const irreversible = str(item['irreversible']);
145
+ if (item['risk'] !== undefined)
146
+ scenario.risk = item['risk'];
147
+ if (given)
148
+ scenario.given = given;
149
+ if (when)
150
+ scenario.when = when;
151
+ if (irreversible)
152
+ scenario.irreversible = irreversible;
153
+ if (needs.length > 0)
154
+ scenario.needs = needs;
155
+ if (verifiers.length > 0)
156
+ scenario.verifiers = verifiers;
157
+ if (item['artifacts'] !== undefined)
158
+ scenario.artifacts = item['artifacts'];
159
+ return scenario;
160
+ }
88
161
  export function parseScenarios(text) {
89
162
  let raw;
90
163
  try {
@@ -99,54 +172,11 @@ export function parseScenarios(text) {
99
172
  const rejections = [];
100
173
  const seen = new Set();
101
174
  raw.forEach((item, index) => {
102
- const label = isRecord(item) && typeof item['id'] === 'string' ? item['id'] : `#${index + 1}`;
103
- if (!isRecord(item))
104
- return void rejections.push({ id: label, reason: 'item is not an object' });
105
- const id = str(item['id']);
106
- if (!id || !ID_RE.test(id))
107
- return void rejections.push({ id: label, reason: 'id must be 1-40 chars of lowercase letters, digits, hyphens' });
108
- if (seen.has(id))
109
- return void rejections.push({ id, reason: 'duplicate id' });
110
- const then = str(item['then']);
111
- if (!then)
112
- return void rejections.push({ id, reason: 'then (the success statement) is required' });
113
- const reason = checkReason(item['check']);
114
- if (reason)
115
- return void rejections.push({ id, reason });
116
- const needs = strList(item['needs']);
117
- if (needs === null)
118
- return void rejections.push({ id, reason: 'needs must be a list of scenario ids' });
119
- const verifiers = strList(item['verifiers']);
120
- if (verifiers === null)
121
- return void rejections.push({ id, reason: 'verifiers must be a list of file paths' });
122
- if (item['artifacts'] !== undefined && !artifactPathsValid(item['artifacts']))
123
- return void rejections.push({ id, reason: 'artifacts must contain 1–16 project-relative file paths outside .git and .vibe' });
124
- const inputs = inputPaths(item['inputs']);
125
- if (inputs === null)
126
- return void rejections.push({ id, reason: 'inputs must be project-relative files or directories, not the whole project' });
127
- const invalidRisk = item['risk'] === undefined ? null : riskReason(item['risk']);
128
- if (invalidRisk)
129
- return void rejections.push({ id, reason: invalidRisk });
130
- seen.add(id);
131
- const scenario = { id, then, check: item['check'], ...(inputs.length > 0 ? { inputs } : {}) };
132
- const given = str(item['given']);
133
- const when = str(item['when']);
134
- const irreversible = str(item['irreversible']);
135
- if (item['risk'] !== undefined)
136
- scenario.risk = item['risk'];
137
- if (given)
138
- scenario.given = given;
139
- if (when)
140
- scenario.when = when;
141
- if (irreversible)
142
- scenario.irreversible = irreversible;
143
- if (needs.length > 0)
144
- scenario.needs = needs;
145
- if (verifiers.length > 0)
146
- scenario.verifiers = verifiers;
147
- if (item['artifacts'] !== undefined)
148
- scenario.artifacts = item['artifacts'];
149
- scenarios.push(scenario);
175
+ const parsed = parseItem(item, index, seen);
176
+ if ('reason' in parsed)
177
+ rejections.push(parsed);
178
+ else
179
+ scenarios.push(parsed);
150
180
  });
151
181
  detectMutations(scenarios);
152
182
  bindRiskChecks(scenarios, rejections);
@@ -178,8 +208,9 @@ function rejectBadEdges(scenarios, rejections) {
178
208
  rejections.push({ id: s.id, reason: `needs unknown scenario: ${need}` });
179
209
  else if (need === s.id)
180
210
  rejections.push({ id: s.id, reason: 'a scenario cannot need itself' });
181
- else if (parent.check.type === 'human')
211
+ else if (parent.check.type === 'human') {
182
212
  rejections.push({ id: s.id, reason: `needs ${need}, a human scenario — it has no verdict and would block forever` });
213
+ }
183
214
  else
184
215
  continue;
185
216
  bad.add(s.id);
@@ -195,10 +226,11 @@ function rejectBadEdges(scenarios, rejections) {
195
226
  }
196
227
  function cycleMembers(scenarios) {
197
228
  const indegree = new Map(scenarios.map((s) => [s.id, 0]));
198
- for (const s of scenarios)
229
+ for (const s of scenarios) {
199
230
  for (const need of s.needs ?? [])
200
231
  if (indegree.has(need))
201
232
  indegree.set(s.id, (indegree.get(s.id) ?? 0) + 1);
233
+ }
202
234
  const queue = scenarios.filter((s) => indegree.get(s.id) === 0).map((s) => s.id);
203
235
  const seen = new Set();
204
236
  while (queue.length > 0) {
@@ -233,16 +265,15 @@ export function ancestorsOf(scenarios, ids) {
233
265
  }
234
266
  /** The work graph as mermaid — one node per scenario, one edge per `needs` entry, the last result on each node. */
235
267
  export function graphMermaid(scenarios, lastOf) {
236
- const mark = { pass: '✔', fail: '✘', blocked: '⊘', pending: '?', never: '·' };
237
268
  const lines = ['graph LR'];
238
269
  for (const s of scenarios) {
239
270
  const last = lastOf(s.id);
240
- lines.push(` ${s.id}["${s.id} ${mark[last] ?? last}"]:::${last}`);
271
+ lines.push(` ${s.id}["${s.id} ${GRAPH_MARK[last] ?? last}"]:::${last}`);
241
272
  }
242
273
  for (const s of scenarios)
243
274
  for (const need of s.needs ?? [])
244
275
  lines.push(` ${need} --> ${s.id}`);
245
- lines.push(' classDef pass stroke:#2e7d32', ' classDef fail stroke:#c62828', ' classDef blocked stroke:#ef6c00,stroke-dasharray:4', ' classDef pending stroke:#6a1b9a', ' classDef never stroke:#9e9e9e');
276
+ lines.push(...GRAPH_STYLES);
246
277
  return lines.join('\n');
247
278
  }
248
279
  export function isHuman(scenario) {
@@ -1 +1 @@
1
- {"version":3,"file":"scenarios.js","sourceRoot":"","sources":["../../src/core/scenarios.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scenarios.js","sourceRoot":"","sources":["../../src/core/scenarios.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,15 @@
1
1
  import { createRequire } from 'node:module';
2
+ import { vibePath } from './paths.js';
2
3
  import { denied } from './errors.js';
3
4
  import { inspectContract } from './inspect.js';
4
5
  import { listRegressions, regressionProblems } from './regress.js';
5
6
  import fs from 'node:fs';
6
- import path from 'node:path';
7
+ const SCENARIOS_FILE = 'scenarios.yaml';
7
8
  const runtime = createRequire(import.meta.url)('../../hooks/session-state.cjs');
8
9
  export function bindSession(root, requested) {
9
10
  try {
10
11
  const id = runtime.identity(requested ? { session_id: requested } : {});
11
- const contract = fs.existsSync(path.join(root, '.vibe/scenarios.yaml')) ? inspectContract(root) : { scenarios: [], rejections: [] };
12
+ const contract = fs.existsSync(vibePath(root, SCENARIOS_FILE)) ? inspectContract(root) : { scenarios: [], rejections: [] };
12
13
  if (contract.rejections.length || regressionProblems(root).length)
13
14
  throw denied('cannot bind an invalid contract; inspect and correct it first');
14
15
  return runtime.bindSession(root, id, [...contract.scenarios, ...listRegressions(root)]);
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAsB,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAY7B,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,+BAA+B,CAK7E,CAAC;AACF,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,SAAkB;IAC1D,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QACpI,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM;YAAE,MAAM,MAAM,CAAC,+DAA+D,CAAC,CAAC;QACjJ,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,MAAM,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;AAC7D,CAAC;AACD,MAAM,UAAU,aAAa,CAAC,SAAkB,IAAiB,OAAO,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5I,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,KAAwB;IACvE,IAAI,CAAC;QAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAAC,CAAC;IAChD,OAAO,KAAK,EAAE,CAAC;QAAC,MAAM,MAAM,CAAC,yCAA0C,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IAAC,CAAC;AACtG,CAAC"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAsB,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAYxC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,+BAA+B,CAK7E,CAAC;AACF,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,SAAkB;IAC1D,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAC3H,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM;YAAE,MAAM,MAAM,CAAC,+DAA+D,CAAC,CAAC;QACjJ,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,MAAM,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;AAC7D,CAAC;AACD,MAAM,UAAU,aAAa,CAAC,SAAkB,IAAiB,OAAO,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5I,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,KAAwB;IACvE,IAAI,CAAC;QAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAAC,CAAC;IAChD,OAAO,KAAK,EAAE,CAAC;QAAC,MAAM,MAAM,CAAC,yCAA0C,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IAAC,CAAC;AACtG,CAAC"}
package/dist/core/size.js CHANGED
@@ -5,8 +5,18 @@ import { relPosix } from './paths.js';
5
5
  // The edit hook ships without dist, so the patterns and the limit live in its dependency-free module.
6
6
  const limit = createRequire(import.meta.url)('../../hooks/file-size.cjs');
7
7
  export const { MAX_FILE_LINES, SOURCE, DEFAULT_EXCLUDE, limited, lineCount } = limit;
8
- /** A function-like header for the brace languages: a named function, `func`/`fn` with an optional receiver, an arrow assigned to a binding, or a bare `name(...) {` method. */
9
- export const BRACE_HEADER = /^\s*(?:export\s+)?(?:default\s+)?(?:async\s+)?(?:function\s*\*?\s*([A-Za-z_$][\w$]*)|(?:public|private|protected|static|override|final|\s)*\s*(?:func|fn)\s+(?:\([^)]*\)\s*)?([A-Za-z_$][\w$]*)|(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*(?:async\s*)?(?:\([^)]*\)|[A-Za-z_$][\w$]*)\s*(?::[^=]+)?=>\s*\{\s*$|(?:public|private|protected|static|async|override|\s)*\s*([A-Za-z_$][\w$]*)\s*\([^)]*\)\s*(?::\s*[^{]+)?\{\s*$)/;
8
+ const IDENT = String.raw `[A-Za-z_$][\w$]*`;
9
+ const BRACE_HEADER_ALTERNATIVES = [
10
+ String.raw `function\s*\*?\s*(${IDENT})`,
11
+ String.raw `(?:public|private|protected|static|override|final|\s)*\s*(?:func|fn)\s+(?:\([^)]*\)\s*)?(${IDENT})`,
12
+ String.raw `(?:const|let|var)\s+(${IDENT})\s*=\s*(?:async\s*)?(?:\([^)]*\)|${IDENT})\s*(?::[^=]+)?=>\s*\{\s*$`,
13
+ String.raw `(?:public|private|protected|static|async|override|\s)*\s*(${IDENT})\s*\([^)]*\)\s*(?::\s*[^{]+)?\{\s*$`,
14
+ ];
15
+ /**
16
+ * A function-like header for the brace languages: a named function, `func`/`fn` with an optional receiver,
17
+ * an arrow assigned to a binding, or a bare `name(...) {` method.
18
+ */
19
+ export const BRACE_HEADER = new RegExp(String.raw `^\s*(?:export\s+)?(?:default\s+)?(?:async\s+)?(?:${BRACE_HEADER_ALTERNATIVES.join('|')})`);
10
20
  /** A Python `def`, indentation-delimited. */
11
21
  export const INDENT_HEADER = /^(\s*)(?:async\s+)?def\s+([A-Za-z_]\w*)\s*\(/;
12
22
  /** Every source file under `dir`, skipping `exclude`. */
@@ -43,14 +53,23 @@ function stepCode(ch, st) {
43
53
  }
44
54
  return 0;
45
55
  }
56
+ /** Characters after which a `/` opens a regex literal rather than dividing. */
57
+ const REGEX_AFTER_PUNCTUATION = '(,=:[!&|?{};+-*%<>~^';
58
+ /** Control-flow words that look like a method header (`if (x) {`) and are not one. */
59
+ const NOT_A_FUNCTION = ['if', 'for', 'while', 'switch', 'catch', 'else', 'return', 'with'];
60
+ const DEFAULT_PATHS = ['.'];
61
+ const ANONYMOUS = '(anonymous)';
46
62
  const REGEX_AFTER_WORD = new Set(['return', 'typeof', 'case', 'do', 'else', 'in', 'of', 'instanceof', 'void', 'delete', 'throw', 'await', 'yield']);
47
- /** A `/` starts a regex literal where an expression can start: after an operator, an opener, a separator, a keyword, or at the start of the line — not after a value. */
63
+ /**
64
+ * A `/` starts a regex literal where an expression can start: after an operator, an opener, a separator, a keyword,
65
+ * or at the start of the line — not after a value.
66
+ */
48
67
  function regexCanStart(line, i) {
49
68
  const before = line.slice(0, i).replace(/\s+$/, '');
50
69
  if (before === '')
51
70
  return true;
52
71
  const last = before.at(-1);
53
- if ('(,=:[!&|?{};+-*%<>~^'.includes(last))
72
+ if (REGEX_AFTER_PUNCTUATION.includes(last))
54
73
  return true;
55
74
  const word = /([A-Za-z_$][\w$]*)$/.exec(before)?.[1];
56
75
  return word !== undefined && REGEX_AFTER_WORD.has(word);
@@ -116,8 +135,8 @@ function braceFunctions(lines) {
116
135
  const m = BRACE_HEADER.exec(lines[i]);
117
136
  if (!m || !lines[i].includes('{'))
118
137
  continue;
119
- const name = m[1] ?? m[2] ?? m[3] ?? m[4] ?? '(anonymous)';
120
- if (['if', 'for', 'while', 'switch', 'catch', 'else', 'return', 'with'].includes(name))
138
+ const name = m[1] ?? m[2] ?? m[3] ?? m[4] ?? ANONYMOUS;
139
+ if (NOT_A_FUNCTION.includes(name))
121
140
  continue;
122
141
  let depth = 0;
123
142
  let end = i;
@@ -155,7 +174,7 @@ function indentFunctions(lines) {
155
174
  export function measureSize(root, paths, options) {
156
175
  const exclude = options.exclude ?? DEFAULT_EXCLUDE;
157
176
  const files = [];
158
- for (const p of paths.length ? paths : ['.']) {
177
+ for (const p of paths.length ? paths : DEFAULT_PATHS) {
159
178
  const full = path.resolve(root, p);
160
179
  if (!fs.existsSync(full))
161
180
  continue;
@@ -176,9 +195,10 @@ export function measureSize(root, paths, options) {
176
195
  if (lines.length > options.maxFile)
177
196
  findings.push({ file: rel, kind: 'file', name: rel, lines: lines.length, limit: options.maxFile });
178
197
  const fns = /\.py$/.test(file) ? indentFunctions(lines) : braceFunctions(lines);
179
- for (const fn of fns)
198
+ for (const fn of fns) {
180
199
  if (fn.lines > options.maxFunction)
181
200
  findings.push({ file: rel, kind: 'function', name: fn.name, lines: fn.lines, limit: options.maxFunction });
201
+ }
182
202
  }
183
203
  return { files: files.length, totalLines, largestFile: largest, findings };
184
204
  }