jettypod 4.4.50 → 4.4.51
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/jettypod.js
CHANGED
|
@@ -2686,7 +2686,7 @@ Quick commands:
|
|
|
2686
2686
|
const db = getDb();
|
|
2687
2687
|
await waitForMigrations();
|
|
2688
2688
|
|
|
2689
|
-
// Define gate requirements for each skill
|
|
2689
|
+
// Define gate requirements for each skill (also serves as known skills list)
|
|
2690
2690
|
const gateRequirements = {
|
|
2691
2691
|
'speed-mode': ['feature_planning_complete'],
|
|
2692
2692
|
'stable-mode': ['speed_mode_complete'],
|
|
@@ -2695,7 +2695,49 @@ Quick commands:
|
|
|
2695
2695
|
'epic-planning': []
|
|
2696
2696
|
};
|
|
2697
2697
|
|
|
2698
|
-
|
|
2698
|
+
// Validate skill name
|
|
2699
|
+
if (!gateRequirements.hasOwnProperty(skillName)) {
|
|
2700
|
+
console.log(`Unknown skill: ${skillName}`);
|
|
2701
|
+
console.log('');
|
|
2702
|
+
console.log('Valid skills: ' + Object.keys(gateRequirements).join(', '));
|
|
2703
|
+
process.exit(1);
|
|
2704
|
+
}
|
|
2705
|
+
|
|
2706
|
+
// Validate work item exists
|
|
2707
|
+
const workItem = await new Promise((resolve, reject) => {
|
|
2708
|
+
db.get(
|
|
2709
|
+
`SELECT id, title FROM work_items WHERE id = ?`,
|
|
2710
|
+
[workItemId],
|
|
2711
|
+
(err, row) => {
|
|
2712
|
+
if (err) reject(err);
|
|
2713
|
+
else resolve(row);
|
|
2714
|
+
}
|
|
2715
|
+
);
|
|
2716
|
+
});
|
|
2717
|
+
|
|
2718
|
+
if (!workItem) {
|
|
2719
|
+
console.log(`Work item not found: #${workItemId}`);
|
|
2720
|
+
process.exit(1);
|
|
2721
|
+
}
|
|
2722
|
+
|
|
2723
|
+
// Check for existing in-progress execution of this skill
|
|
2724
|
+
const existingExecution = await new Promise((resolve, reject) => {
|
|
2725
|
+
db.get(
|
|
2726
|
+
`SELECT id FROM skill_executions WHERE work_item_id = ? AND skill_name = ? AND status = 'in_progress'`,
|
|
2727
|
+
[workItemId, skillName],
|
|
2728
|
+
(err, row) => {
|
|
2729
|
+
if (err) reject(err);
|
|
2730
|
+
else resolve(row);
|
|
2731
|
+
}
|
|
2732
|
+
);
|
|
2733
|
+
});
|
|
2734
|
+
|
|
2735
|
+
if (existingExecution) {
|
|
2736
|
+
console.log(`${skillName} is already in progress for #${workItemId}`);
|
|
2737
|
+
process.exit(1);
|
|
2738
|
+
}
|
|
2739
|
+
|
|
2740
|
+
const requiredGates = gateRequirements[skillName];
|
|
2699
2741
|
|
|
2700
2742
|
// Check prerequisite gates
|
|
2701
2743
|
const passedGates = await new Promise((resolve, reject) => {
|
package/package.json
CHANGED
|
@@ -229,6 +229,14 @@ Example:
|
|
|
229
229
|
|
|
230
230
|
#### Step 6B: Propose BDD Scenarios (DO NOT WRITE YET)
|
|
231
231
|
|
|
232
|
+
**🚫 FORBIDDEN: Writing Files at This Step**
|
|
233
|
+
```
|
|
234
|
+
❌ Write tool to features/*.feature
|
|
235
|
+
❌ Write tool to features/step_definitions/*.js
|
|
236
|
+
❌ Any file creation on main branch
|
|
237
|
+
```
|
|
238
|
+
**Files are written in Step 8D** inside an isolated worktree. At this step, you are ONLY displaying proposed scenarios to the user for confirmation. The worktree doesn't exist yet.
|
|
239
|
+
|
|
232
240
|
**CRITICAL:** Do NOT write files yet. Display the proposed scenarios for user confirmation. Files will be written in Step 8D inside an isolated worktree.
|
|
233
241
|
|
|
234
242
|
**Feature slug:** Derive `FEATURE_SLUG` from the feature title:
|