@axiomatic-labs/claudeflow 2.32.4 → 2.32.5

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 (2) hide show
  1. package/lib/panel.js +25 -9
  2. package/package.json +1 -1
package/lib/panel.js CHANGED
@@ -230,16 +230,32 @@ function getSetupContextInfo(cwd) {
230
230
  try { ctx = JSON.parse(fs.readFileSync(p, 'utf8')); }
231
231
  catch { return { exists: false, path: p }; }
232
232
 
233
- const canonicalToolingTypes = ['unit_test', 'integration_test', 'api_contract_test', 'e2e_test', 'security_test'];
233
+ // Canonical evidence types per test-tooling-schema.md: the 5 binary `_test`
234
+ // types + the 2 observational `_verification` types. (benchmark /
235
+ // exploratory_test are conditional — triggered only by PERFORMANCE_CHANGE or
236
+ // unmeasurable correctness — so they are NOT required for "complete".)
237
+ // Source of truth: .claude/skills/claudeflow-init/references/test-tooling-schema.md.
238
+ const canonicalToolingTypes = [
239
+ 'unit_test',
240
+ 'integration_test',
241
+ 'api_contract_test',
242
+ 'e2e_test',
243
+ 'security_test',
244
+ 'browser_verification',
245
+ 'visual_verification',
246
+ ];
234
247
  const tooling = ctx.test_tooling || {};
235
- const toolingComplete = canonicalToolingTypes.every((t) => {
236
- const e = tooling[t];
237
- return e && typeof e === 'object' && typeof e.command_pattern === 'string' && e.command_pattern.trim();
238
- });
239
- const missingTooling = canonicalToolingTypes.filter((t) => {
240
- const e = tooling[t];
241
- return !(e && typeof e === 'object' && e.command_pattern && e.command_pattern.trim());
242
- });
248
+ // An entry is "defined" when it is shell-backed (`command_pattern`) OR
249
+ // Skill-backed (`invocation`). browser_verification is Skill-backed and
250
+ // legitimately carries NO command_pattern, so a command_pattern-only check
251
+ // would false-flag it as missing.
252
+ const isToolingDefined = (e) =>
253
+ e &&
254
+ typeof e === 'object' &&
255
+ ((typeof e.command_pattern === 'string' && e.command_pattern.trim()) ||
256
+ (typeof e.invocation === 'string' && e.invocation.trim()));
257
+ const toolingComplete = canonicalToolingTypes.every((t) => isToolingDefined(tooling[t]));
258
+ const missingTooling = canonicalToolingTypes.filter((t) => !isToolingDefined(tooling[t]));
243
259
 
244
260
  return {
245
261
  exists: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axiomatic-labs/claudeflow",
3
- "version": "2.32.4",
3
+ "version": "2.32.5",
4
4
  "description": "Claudeflow — AI-powered development toolkit for Claude Code. Skills, agents, hooks, and quality gates that ship production apps.",
5
5
  "bin": {
6
6
  "claudeflow": "./bin/cli.js"