qualia-framework 2.4.2 → 2.4.4

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 (97) hide show
  1. package/bin/cli.js +7 -7
  2. package/framework/hooks/pre-deploy-gate.sh +5 -4
  3. package/framework/install.sh +1 -1
  4. package/framework/qualia-framework/VERSION +1 -0
  5. package/framework/skills/ship/SKILL.md +20 -9
  6. package/package.json +1 -1
  7. package/framework/qualia-engine/VERSION +0 -1
  8. /package/framework/{qualia-engine → qualia-framework}/bin/collect-metrics.sh +0 -0
  9. /package/framework/{qualia-engine → qualia-framework}/bin/qualia-tools.js +0 -0
  10. /package/framework/{qualia-engine → qualia-framework}/bin/qualia-tools.test.js +0 -0
  11. /package/framework/{qualia-engine → qualia-framework}/references/checkpoints.md +0 -0
  12. /package/framework/{qualia-engine → qualia-framework}/references/completion-checklists.md +0 -0
  13. /package/framework/{qualia-engine → qualia-framework}/references/continuation-format.md +0 -0
  14. /package/framework/{qualia-engine → qualia-framework}/references/continuation-prompt.md +0 -0
  15. /package/framework/{qualia-engine → qualia-framework}/references/decimal-phase-calculation.md +0 -0
  16. /package/framework/{qualia-engine → qualia-framework}/references/design-quality.md +0 -0
  17. /package/framework/{qualia-engine → qualia-framework}/references/employee-guide.md +0 -0
  18. /package/framework/{qualia-engine → qualia-framework}/references/git-integration.md +0 -0
  19. /package/framework/{qualia-engine → qualia-framework}/references/git-planning-commit.md +0 -0
  20. /package/framework/{qualia-engine → qualia-framework}/references/model-profile-resolution.md +0 -0
  21. /package/framework/{qualia-engine → qualia-framework}/references/model-profiles.md +0 -0
  22. /package/framework/{qualia-engine → qualia-framework}/references/phase-argument-parsing.md +0 -0
  23. /package/framework/{qualia-engine → qualia-framework}/references/planning-config.md +0 -0
  24. /package/framework/{qualia-engine → qualia-framework}/references/questioning.md +0 -0
  25. /package/framework/{qualia-engine → qualia-framework}/references/tdd.md +0 -0
  26. /package/framework/{qualia-engine → qualia-framework}/references/ui-brand.md +0 -0
  27. /package/framework/{qualia-engine → qualia-framework}/references/verification-patterns.md +0 -0
  28. /package/framework/{qualia-engine → qualia-framework}/templates/DEBUG.md +0 -0
  29. /package/framework/{qualia-engine → qualia-framework}/templates/DESIGN.md +0 -0
  30. /package/framework/{qualia-engine → qualia-framework}/templates/UAT.md +0 -0
  31. /package/framework/{qualia-engine → qualia-framework}/templates/codebase/architecture.md +0 -0
  32. /package/framework/{qualia-engine → qualia-framework}/templates/codebase/concerns.md +0 -0
  33. /package/framework/{qualia-engine → qualia-framework}/templates/codebase/conventions.md +0 -0
  34. /package/framework/{qualia-engine → qualia-framework}/templates/codebase/integrations.md +0 -0
  35. /package/framework/{qualia-engine → qualia-framework}/templates/codebase/stack.md +0 -0
  36. /package/framework/{qualia-engine → qualia-framework}/templates/codebase/structure.md +0 -0
  37. /package/framework/{qualia-engine → qualia-framework}/templates/codebase/testing.md +0 -0
  38. /package/framework/{qualia-engine → qualia-framework}/templates/config.json +0 -0
  39. /package/framework/{qualia-engine → qualia-framework}/templates/context.md +0 -0
  40. /package/framework/{qualia-engine → qualia-framework}/templates/continue-here.md +0 -0
  41. /package/framework/{qualia-engine → qualia-framework}/templates/debug-subagent-prompt.md +0 -0
  42. /package/framework/{qualia-engine → qualia-framework}/templates/discovery.md +0 -0
  43. /package/framework/{qualia-engine → qualia-framework}/templates/lab-notes.md +0 -0
  44. /package/framework/{qualia-engine → qualia-framework}/templates/milestone-archive.md +0 -0
  45. /package/framework/{qualia-engine → qualia-framework}/templates/milestone.md +0 -0
  46. /package/framework/{qualia-engine → qualia-framework}/templates/phase-prompt.md +0 -0
  47. /package/framework/{qualia-engine → qualia-framework}/templates/planner-subagent-prompt.md +0 -0
  48. /package/framework/{qualia-engine → qualia-framework}/templates/project.md +0 -0
  49. /package/framework/{qualia-engine → qualia-framework}/templates/projects/ai-agent.md +0 -0
  50. /package/framework/{qualia-engine → qualia-framework}/templates/projects/mobile-app.md +0 -0
  51. /package/framework/{qualia-engine → qualia-framework}/templates/projects/voice-agent.md +0 -0
  52. /package/framework/{qualia-engine → qualia-framework}/templates/projects/website.md +0 -0
  53. /package/framework/{qualia-engine → qualia-framework}/templates/requirements.md +0 -0
  54. /package/framework/{qualia-engine → qualia-framework}/templates/research-project/ARCHITECTURE.md +0 -0
  55. /package/framework/{qualia-engine → qualia-framework}/templates/research-project/FEATURES.md +0 -0
  56. /package/framework/{qualia-engine → qualia-framework}/templates/research-project/PITFALLS.md +0 -0
  57. /package/framework/{qualia-engine → qualia-framework}/templates/research-project/STACK.md +0 -0
  58. /package/framework/{qualia-engine → qualia-framework}/templates/research-project/SUMMARY.md +0 -0
  59. /package/framework/{qualia-engine → qualia-framework}/templates/research.md +0 -0
  60. /package/framework/{qualia-engine → qualia-framework}/templates/roadmap.md +0 -0
  61. /package/framework/{qualia-engine → qualia-framework}/templates/state.md +0 -0
  62. /package/framework/{qualia-engine → qualia-framework}/templates/summary-complex.md +0 -0
  63. /package/framework/{qualia-engine → qualia-framework}/templates/summary-minimal.md +0 -0
  64. /package/framework/{qualia-engine → qualia-framework}/templates/summary-standard.md +0 -0
  65. /package/framework/{qualia-engine → qualia-framework}/templates/summary.md +0 -0
  66. /package/framework/{qualia-engine → qualia-framework}/templates/user-setup.md +0 -0
  67. /package/framework/{qualia-engine → qualia-framework}/templates/verification-report.md +0 -0
  68. /package/framework/{qualia-engine → qualia-framework}/workflows/add-phase.md +0 -0
  69. /package/framework/{qualia-engine → qualia-framework}/workflows/add-todo.md +0 -0
  70. /package/framework/{qualia-engine → qualia-framework}/workflows/audit-milestone.md +0 -0
  71. /package/framework/{qualia-engine → qualia-framework}/workflows/check-todos.md +0 -0
  72. /package/framework/{qualia-engine → qualia-framework}/workflows/complete-milestone.md +0 -0
  73. /package/framework/{qualia-engine → qualia-framework}/workflows/diagnose-issues.md +0 -0
  74. /package/framework/{qualia-engine → qualia-framework}/workflows/discovery-phase.md +0 -0
  75. /package/framework/{qualia-engine → qualia-framework}/workflows/discuss-phase.md +0 -0
  76. /package/framework/{qualia-engine → qualia-framework}/workflows/execute-phase.md +0 -0
  77. /package/framework/{qualia-engine → qualia-framework}/workflows/execute-plan.md +0 -0
  78. /package/framework/{qualia-engine → qualia-framework}/workflows/help.md +0 -0
  79. /package/framework/{qualia-engine → qualia-framework}/workflows/insert-phase.md +0 -0
  80. /package/framework/{qualia-engine → qualia-framework}/workflows/list-phase-assumptions.md +0 -0
  81. /package/framework/{qualia-engine → qualia-framework}/workflows/map-codebase.md +0 -0
  82. /package/framework/{qualia-engine → qualia-framework}/workflows/new-milestone.md +0 -0
  83. /package/framework/{qualia-engine → qualia-framework}/workflows/new-project.md +0 -0
  84. /package/framework/{qualia-engine → qualia-framework}/workflows/pause-work.md +0 -0
  85. /package/framework/{qualia-engine → qualia-framework}/workflows/plan-milestone-gaps.md +0 -0
  86. /package/framework/{qualia-engine → qualia-framework}/workflows/plan-phase.md +0 -0
  87. /package/framework/{qualia-engine → qualia-framework}/workflows/progress.md +0 -0
  88. /package/framework/{qualia-engine → qualia-framework}/workflows/quick.md +0 -0
  89. /package/framework/{qualia-engine → qualia-framework}/workflows/remove-phase.md +0 -0
  90. /package/framework/{qualia-engine → qualia-framework}/workflows/research-phase.md +0 -0
  91. /package/framework/{qualia-engine → qualia-framework}/workflows/resume-project.md +0 -0
  92. /package/framework/{qualia-engine → qualia-framework}/workflows/set-profile.md +0 -0
  93. /package/framework/{qualia-engine → qualia-framework}/workflows/settings.md +0 -0
  94. /package/framework/{qualia-engine → qualia-framework}/workflows/transition.md +0 -0
  95. /package/framework/{qualia-engine → qualia-framework}/workflows/update.md +0 -0
  96. /package/framework/{qualia-engine → qualia-framework}/workflows/verify-phase.md +0 -0
  97. /package/framework/{qualia-engine → qualia-framework}/workflows/verify-work.md +0 -0
package/bin/cli.js CHANGED
@@ -229,7 +229,7 @@ async function runInstall() {
229
229
  // Step 2: Copy framework files
230
230
  step(2, TOTAL, 'Installing framework files ...');
231
231
 
232
- const dirs = ['skills', 'hooks', 'agents', 'rules', 'qualia-engine', 'scripts', 'knowledge'];
232
+ const dirs = ['skills', 'hooks', 'agents', 'rules', 'qualia-framework', 'scripts', 'knowledge'];
233
233
  for (const dir of dirs) {
234
234
  const src = path.join(FRAMEWORK_DIR, dir);
235
235
  const dest = path.join(CLAUDE_DIR, dir);
@@ -260,8 +260,8 @@ async function runInstall() {
260
260
  const p = path.join(CLAUDE_DIR, f);
261
261
  if (fs.existsSync(p)) try { fs.chmodSync(p, 0o755); } catch {}
262
262
  }
263
- // Make qualia-engine bin executable
264
- const engineBin = path.join(CLAUDE_DIR, 'qualia-engine', 'bin');
263
+ // Make qualia-framework bin executable
264
+ const engineBin = path.join(CLAUDE_DIR, 'qualia-framework', 'bin');
265
265
  if (fs.existsSync(engineBin)) {
266
266
  for (const f of fs.readdirSync(engineBin)) {
267
267
  const p = path.join(engineBin, f);
@@ -273,7 +273,7 @@ async function runInstall() {
273
273
  ok(`${countDir(hooksDir, 'files')} hooks (chmod +x)`);
274
274
  ok(`${countDir(path.join(CLAUDE_DIR, 'agents'), 'files')} agents`);
275
275
  ok(`${countDir(path.join(CLAUDE_DIR, 'rules'), 'files')} rule files`);
276
- ok('qualia-engine');
276
+ ok('qualia-framework');
277
277
  ok('knowledge base');
278
278
 
279
279
  // Step 3: Generate CLAUDE.md
@@ -383,7 +383,7 @@ async function runUpdate() {
383
383
  log('');
384
384
 
385
385
  // Count what's changing
386
- const frameworkDirs = ['skills', 'hooks', 'agents', 'rules', 'qualia-engine', 'scripts', 'knowledge'];
386
+ const frameworkDirs = ['skills', 'hooks', 'agents', 'rules', 'qualia-framework', 'scripts', 'knowledge'];
387
387
  const counts = {};
388
388
  let totalFiles = 0;
389
389
 
@@ -434,7 +434,7 @@ async function runUpdate() {
434
434
  }
435
435
 
436
436
  // Re-chmod engine bin
437
- const engineBin = path.join(CLAUDE_DIR, 'qualia-engine', 'bin');
437
+ const engineBin = path.join(CLAUDE_DIR, 'qualia-framework', 'bin');
438
438
  if (fs.existsSync(engineBin)) {
439
439
  for (const f of fs.readdirSync(engineBin)) {
440
440
  try { fs.chmodSync(path.join(engineBin, f), 0o755); } catch {}
@@ -498,7 +498,7 @@ function runVerify() {
498
498
  ['hooks/', () => fs.existsSync(path.join(CLAUDE_DIR, 'hooks'))],
499
499
  ['skills/', () => countDir(path.join(CLAUDE_DIR, 'skills'), 'dirs') > 50],
500
500
  ['agents/', () => countDir(path.join(CLAUDE_DIR, 'agents'), 'files') > 15],
501
- ['qualia-engine/', () => fs.existsSync(path.join(CLAUDE_DIR, 'qualia-engine', 'bin'))],
501
+ ['qualia-framework/', () => fs.existsSync(path.join(CLAUDE_DIR, 'qualia-framework', 'bin'))],
502
502
  ['rules/', () => countDir(path.join(CLAUDE_DIR, 'rules'), 'files') >= 4],
503
503
  ['.env.claude', () => fs.existsSync(path.join(CLAUDE_DIR, '.env.claude'))],
504
504
  ];
@@ -19,10 +19,11 @@ else
19
19
  COMMAND=""
20
20
  fi
21
21
 
22
- # Only gate production deploys
23
- if ! echo "$COMMAND" | grep -qE '(npx\s+|bunx\s+)?vercel\s+.*--prod|(npx\s+|bunx\s+)?vercel\s+--prod'; then
24
- exit 0
25
- fi
22
+ # Only gate actual production deploy commands (not commit messages containing the word)
23
+ case "$COMMAND" in
24
+ vercel\ *--prod*|npx\ vercel\ *--prod*|bunx\ vercel\ *--prod*) ;;
25
+ *) exit 0 ;;
26
+ esac
26
27
 
27
28
 
28
29
  # Skip if gate was passed recently (within 5 minutes)
@@ -123,7 +123,7 @@ HOOK_COUNT=$(find "$CLAUDE_DIR/hooks" -name "*.sh" -type f | wc -l)
123
123
  printf "${Q_PASS} ✓ $HOOK_COUNT hooks${Q_RESET}\n"
124
124
 
125
125
  # Qualia Engine
126
- cp -r "$SCRIPT_DIR"/qualia-engine/* "$CLAUDE_DIR/qualia-framework/" 2>/dev/null || true
126
+ cp -r "$SCRIPT_DIR"/qualia-framework/* "$CLAUDE_DIR/qualia-framework/" 2>/dev/null || true
127
127
  # Clean up old path if it exists from previous installs
128
128
  [ -d "$CLAUDE_DIR/qualia-engine" ] && rm -rf "$CLAUDE_DIR/qualia-engine"
129
129
  printf "${Q_PASS} ✓ Qualia engine${Q_RESET}\n"
@@ -0,0 +1 @@
1
+ 2.4.4
@@ -98,15 +98,26 @@ If no test infrastructure: skip silently.
98
98
 
99
99
  ### 2b. Review Gate
100
100
 
101
- Check for review results:
102
-
103
- 1. Read `.planning/REVIEW.md` or `.review/REVIEW.md`
104
- 2. If `status: has_blockers`:
105
- - List unresolved CRITICAL/HIGH findings
106
- - Ask: "Fix these first, or deploy anyway?"
107
- - If user says fix → stop
108
- - If user says deploy anyway → continue with warning logged
109
- 3. If `status: clean` or file not found → continue (advisory note if not found)
101
+ **IMPORTANT: The pre-deploy-gate hook will BLOCK `vercel --prod` if REVIEW.md is missing or stale. This gate must pass BEFORE attempting deploy.**
102
+
103
+ Check and auto-fix review freshness:
104
+
105
+ 1. Find REVIEW.md: `.planning/REVIEW.md` or `.review/REVIEW.md`
106
+ 2. **If missing:** Run `/qualia-review` to generate it. Then continue.
107
+ 3. **If exists, check freshness:**
108
+ ```bash
109
+ REVIEW_MTIME=$(stat -c %Y "$REVIEW_FILE" 2>/dev/null || echo 0)
110
+ LATEST_CODE_MTIME=0
111
+ for DIR in src app pages lib components; do
112
+ [ -d "$DIR" ] && DIR_LATEST=$(find "$DIR" -type f \( -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.jsx" \) -printf '%T@\n' 2>/dev/null | sort -rn | head -1 | cut -d. -f1)
113
+ [ -n "$DIR_LATEST" ] && [ "$DIR_LATEST" -gt "$LATEST_CODE_MTIME" ] && LATEST_CODE_MTIME=$DIR_LATEST
114
+ done
115
+ ```
116
+ - If `LATEST_CODE_MTIME > REVIEW_MTIME`: REVIEW.md is stale. Run `/qualia-review` to refresh it, then continue.
117
+ - If fresh: continue.
118
+ 4. Read the review content:
119
+ - If `status: has_blockers`: list unresolved CRITICAL/HIGH findings, ask "Fix these first, or deploy anyway?"
120
+ - If `status: clean` → continue
110
121
 
111
122
  ### 3. Type-Specific Checks
112
123
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qualia-framework",
3
- "version": "2.4.2",
3
+ "version": "2.4.4",
4
4
  "description": "Qualia Solutions — Claude Code Framework",
5
5
  "bin": {
6
6
  "qualia-framework": "./bin/cli.js"
@@ -1 +0,0 @@
1
- 2.4.2