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.
- package/bin/cli.js +7 -7
- package/framework/hooks/pre-deploy-gate.sh +5 -4
- package/framework/install.sh +1 -1
- package/framework/qualia-framework/VERSION +1 -0
- package/framework/skills/ship/SKILL.md +20 -9
- package/package.json +1 -1
- package/framework/qualia-engine/VERSION +0 -1
- /package/framework/{qualia-engine → qualia-framework}/bin/collect-metrics.sh +0 -0
- /package/framework/{qualia-engine → qualia-framework}/bin/qualia-tools.js +0 -0
- /package/framework/{qualia-engine → qualia-framework}/bin/qualia-tools.test.js +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/checkpoints.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/completion-checklists.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/continuation-format.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/continuation-prompt.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/decimal-phase-calculation.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/design-quality.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/employee-guide.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/git-integration.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/git-planning-commit.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/model-profile-resolution.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/model-profiles.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/phase-argument-parsing.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/planning-config.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/questioning.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/tdd.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/ui-brand.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/references/verification-patterns.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/DEBUG.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/DESIGN.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/UAT.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/codebase/architecture.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/codebase/concerns.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/codebase/conventions.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/codebase/integrations.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/codebase/stack.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/codebase/structure.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/codebase/testing.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/config.json +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/context.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/continue-here.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/debug-subagent-prompt.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/discovery.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/lab-notes.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/milestone-archive.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/milestone.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/phase-prompt.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/planner-subagent-prompt.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/project.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/projects/ai-agent.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/projects/mobile-app.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/projects/voice-agent.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/projects/website.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/requirements.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/research-project/ARCHITECTURE.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/research-project/FEATURES.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/research-project/PITFALLS.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/research-project/STACK.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/research-project/SUMMARY.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/research.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/roadmap.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/state.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/summary-complex.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/summary-minimal.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/summary-standard.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/summary.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/user-setup.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/templates/verification-report.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/add-phase.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/add-todo.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/audit-milestone.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/check-todos.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/complete-milestone.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/diagnose-issues.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/discovery-phase.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/discuss-phase.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/execute-phase.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/execute-plan.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/help.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/insert-phase.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/list-phase-assumptions.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/map-codebase.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/new-milestone.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/new-project.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/pause-work.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/plan-milestone-gaps.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/plan-phase.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/progress.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/quick.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/remove-phase.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/research-phase.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/resume-project.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/set-profile.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/settings.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/transition.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/update.md +0 -0
- /package/framework/{qualia-engine → qualia-framework}/workflows/verify-phase.md +0 -0
- /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-
|
|
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-
|
|
264
|
-
const engineBin = path.join(CLAUDE_DIR, 'qualia-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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)
|
package/framework/install.sh
CHANGED
|
@@ -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-
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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 +0,0 @@
|
|
|
1
|
-
2.4.2
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/framework/{qualia-engine → qualia-framework}/references/decimal-phase-calculation.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/framework/{qualia-engine → qualia-framework}/references/model-profile-resolution.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/framework/{qualia-engine → qualia-framework}/templates/research-project/ARCHITECTURE.md
RENAMED
|
File without changes
|
/package/framework/{qualia-engine → qualia-framework}/templates/research-project/FEATURES.md
RENAMED
|
File without changes
|
/package/framework/{qualia-engine → qualia-framework}/templates/research-project/PITFALLS.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|