specweave 1.0.241 → 1.0.243
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/CLAUDE.md +28 -27
- package/dist/src/cli/commands/team.js +1 -1
- package/dist/src/cli/commands/team.js.map +1 -1
- package/dist/src/cli/helpers/init/deep-interview-config.d.ts +1 -1
- package/dist/src/cli/helpers/init/deep-interview-config.js +21 -21
- package/dist/src/cli/helpers/init/deep-interview-config.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github.js +4 -3
- package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.js +17 -0
- package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
- package/dist/src/cli/helpers/selection-strategy.d.ts +1 -1
- package/dist/src/cli/helpers/selection-strategy.d.ts.map +1 -1
- package/dist/src/cli/helpers/selection-strategy.js +7 -1
- package/dist/src/cli/helpers/selection-strategy.js.map +1 -1
- package/dist/src/core/repo-structure/multi-repo-configurator.d.ts.map +1 -1
- package/dist/src/core/repo-structure/multi-repo-configurator.js +137 -12
- package/dist/src/core/repo-structure/multi-repo-configurator.js.map +1 -1
- package/dist/src/core/repo-structure/repo-bulk-discovery.d.ts +1 -1
- package/dist/src/core/repo-structure/repo-bulk-discovery.d.ts.map +1 -1
- package/dist/src/core/repo-structure/repo-bulk-discovery.js +30 -8
- package/dist/src/core/repo-structure/repo-bulk-discovery.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/hooks/user-prompt-submit.sh +122 -67
- package/plugins/specweave/skills/done/SKILL.md +53 -0
- package/plugins/specweave/skills/pm/SKILL.md +1 -1
- package/plugins/specweave/skills/pm/phases/00-deep-interview.md +20 -1
- package/plugins/specweave/skills/team-merge/SKILL.md +19 -0
- package/plugins/specweave/skills/team-orchestrate/SKILL.md +83 -32
|
@@ -76,8 +76,15 @@ function filterByPattern(repos, pattern) {
|
|
|
76
76
|
const substring = trimmedPattern.substring(9);
|
|
77
77
|
return repos.filter(repo => repo.name.includes(substring));
|
|
78
78
|
}
|
|
79
|
+
// Auto-expand patterns without glob metacharacters to prefix match
|
|
80
|
+
let effectivePattern = trimmedPattern;
|
|
81
|
+
const hasGlobChars = /[*?\[]/.test(trimmedPattern);
|
|
82
|
+
if (!hasGlobChars) {
|
|
83
|
+
effectivePattern = `${trimmedPattern}*`;
|
|
84
|
+
console.log(chalk.blue(` ℹ Pattern "${trimmedPattern}" expanded to "${effectivePattern}" (prefix match)`));
|
|
85
|
+
}
|
|
79
86
|
// Default: glob pattern matching (supports *, ?, [])
|
|
80
|
-
return repos.filter(repo => minimatch(repo.name,
|
|
87
|
+
return repos.filter(repo => minimatch(repo.name, effectivePattern));
|
|
81
88
|
}
|
|
82
89
|
/**
|
|
83
90
|
* Filter repositories by regex
|
|
@@ -126,7 +133,7 @@ function showRepositoryPreview(repos, owner, strategy, pattern, maxDisplay = 20)
|
|
|
126
133
|
if (repos.length > maxDisplay) {
|
|
127
134
|
console.log(chalk.gray(`\n ... and ${repos.length - maxDisplay} more repositories`));
|
|
128
135
|
}
|
|
129
|
-
console.log(chalk.green(`\n✅ Ready to configure!
|
|
136
|
+
console.log(chalk.green(`\n✅ Ready to configure! First repository will be the default.\n`));
|
|
130
137
|
}
|
|
131
138
|
/**
|
|
132
139
|
* Main bulk discovery flow with ability to go back and change strategy
|
|
@@ -142,10 +149,6 @@ export async function discoverRepositories(octokit, owner, isOrg, expectedCount,
|
|
|
142
149
|
const strategy = await select({
|
|
143
150
|
message: 'How do you want to configure these repositories?',
|
|
144
151
|
choices: [
|
|
145
|
-
{
|
|
146
|
-
name: `${chalk.bold('Manual entry')} - Enter each repository one by one ${chalk.gray('(current behavior)')}`,
|
|
147
|
-
value: 'manual'
|
|
148
|
-
},
|
|
149
152
|
{
|
|
150
153
|
name: `${chalk.bold('Bulk import')} - Discover all repositories from ${owner} ${chalk.gray('(automatic)')}`,
|
|
151
154
|
value: 'all-repos'
|
|
@@ -154,17 +157,28 @@ export async function discoverRepositories(octokit, owner, isOrg, expectedCount,
|
|
|
154
157
|
name: `${chalk.bold('Pattern matching')} - Filter by pattern (starts-with, ends-with, contains, glob) ${chalk.gray('(e.g., "sw-*")')}`,
|
|
155
158
|
value: 'pattern'
|
|
156
159
|
},
|
|
160
|
+
{
|
|
161
|
+
name: `${chalk.bold('Define new repos')} - Plan repos to create later ${chalk.gray('(greenfield)')}`,
|
|
162
|
+
value: 'greenfield'
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
name: `${chalk.bold('Manual entry')} - Enter each repository one by one`,
|
|
166
|
+
value: 'manual'
|
|
167
|
+
},
|
|
157
168
|
{
|
|
158
169
|
name: `${chalk.bold('Regex matching')} - Advanced filtering with regular expressions ${chalk.gray('(e.g., "^ec-.*-api$")')}`,
|
|
159
170
|
value: 'regex'
|
|
160
171
|
}
|
|
161
172
|
],
|
|
162
|
-
default: '
|
|
173
|
+
default: 'all-repos'
|
|
163
174
|
});
|
|
164
|
-
// If manual, return early
|
|
175
|
+
// If manual or greenfield, return early (handled by caller)
|
|
165
176
|
if (strategy === 'manual') {
|
|
166
177
|
return { repositories: [], strategy: 'manual' };
|
|
167
178
|
}
|
|
179
|
+
if (strategy === 'greenfield') {
|
|
180
|
+
return { repositories: [], strategy: 'greenfield' };
|
|
181
|
+
}
|
|
168
182
|
// Step 2: Fetch all repositories (use cache if available)
|
|
169
183
|
let allRepos;
|
|
170
184
|
if (cachedRepos) {
|
|
@@ -244,16 +258,24 @@ export async function discoverRepositories(octokit, owner, isOrg, expectedCount,
|
|
|
244
258
|
// Step 5: Validate count
|
|
245
259
|
if (filteredRepos.length === 0) {
|
|
246
260
|
console.log(chalk.yellow('⚠️ No repositories match the criteria.\n'));
|
|
261
|
+
// Show hint if pattern had no glob chars (auto-expansion already happened but still 0)
|
|
262
|
+
if (pattern && !/[*?\[]/.test(pattern)) {
|
|
263
|
+
console.log(chalk.blue(` 💡 Tip: Try "starts:${pattern.replace(/[-]$/, '')}" or "${pattern}*" for broader matching\n`));
|
|
264
|
+
}
|
|
247
265
|
const retryChoice = await select({
|
|
248
266
|
message: 'What would you like to do?',
|
|
249
267
|
choices: [
|
|
250
268
|
{ name: '← Go back and choose a different strategy', value: 'retry' },
|
|
269
|
+
{ name: 'Define new repos to create later (greenfield)', value: 'greenfield' },
|
|
251
270
|
{ name: 'Switch to manual entry', value: 'manual' }
|
|
252
271
|
]
|
|
253
272
|
});
|
|
254
273
|
if (retryChoice === 'manual') {
|
|
255
274
|
return { repositories: [], strategy: 'manual' };
|
|
256
275
|
}
|
|
276
|
+
if (retryChoice === 'greenfield') {
|
|
277
|
+
return { repositories: [], strategy: 'greenfield' };
|
|
278
|
+
}
|
|
257
279
|
continue; // Restart loop
|
|
258
280
|
}
|
|
259
281
|
// Only validate count when explicitly requested (count-first flows)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-bulk-discovery.js","sourceRoot":"","sources":["../../../../src/core/repo-structure/repo-bulk-discovery.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"repo-bulk-discovery.js","sourceRoot":"","sources":["../../../../src/core/repo-structure/repo-bulk-discovery.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.243",
|
|
4
4
|
"description": "Spec-driven development framework for AI coding agents. First-class support for Claude Code — compatible with any LLM-powered coding tool. Living documentation, autonomous execution, quality gates, and multilingual support (9 languages).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -226,6 +226,7 @@ PLUGIN_AUTOLOAD_ENABLED=true
|
|
|
226
226
|
PLUGIN_SUGGEST_ONLY=false
|
|
227
227
|
INCREMENT_ASSIST_ENABLED=true
|
|
228
228
|
INCREMENT_CONFIDENCE_THRESHOLD=0.7
|
|
229
|
+
INCREMENT_MANDATORY_CONFIG=false
|
|
229
230
|
DEEP_INTERVIEW_ENABLED=false
|
|
230
231
|
if [[ -n "$SW_PROJECT_ROOT" ]]; then
|
|
231
232
|
CONFIG_PATH="$SW_PROJECT_ROOT/.specweave/config.json"
|
|
@@ -247,6 +248,10 @@ if [[ -f "$CONFIG_PATH" ]]; then
|
|
|
247
248
|
THRESHOLD_VALUE=$(jq -r '.incrementAssist.confidenceThreshold // 0.7' "$CONFIG_PATH" 2>/dev/null)
|
|
248
249
|
[[ "$THRESHOLD_VALUE" =~ ^[0-9.]+$ ]] && INCREMENT_CONFIDENCE_THRESHOLD="$THRESHOLD_VALUE"
|
|
249
250
|
|
|
251
|
+
# Read incrementAssist.mandatory from config (config-based override for blocking)
|
|
252
|
+
MANDATORY_CONFIG_VALUE=$(jq -r '.incrementAssist.mandatory // false' "$CONFIG_PATH" 2>/dev/null)
|
|
253
|
+
[[ "$MANDATORY_CONFIG_VALUE" == "true" ]] && INCREMENT_MANDATORY_CONFIG=true
|
|
254
|
+
|
|
250
255
|
# Deep Interview Mode detection (v1.0.195)
|
|
251
256
|
DEEP_INTERVIEW_VALUE=$(jq -r '.planning.deepInterview.enabled // false' "$CONFIG_PATH" 2>/dev/null)
|
|
252
257
|
[[ "$DEEP_INTERVIEW_VALUE" == "true" ]] && DEEP_INTERVIEW_ENABLED=true
|
|
@@ -1174,6 +1179,12 @@ if [[ "${SPECWEAVE_DISABLE_AUTO_LOAD:-0}" != "1" ]] && [[ "${SPECWEAVE_DISABLE_H
|
|
|
1174
1179
|
# v1.0.168: LLM decides if mandatory (not config-based)
|
|
1175
1180
|
INC_MANDATORY=$(echo "$JSON_OUTPUT" | jq -r '.increment.mandatory // false' 2>/dev/null)
|
|
1176
1181
|
|
|
1182
|
+
# Config-based override: if incrementAssist.mandatory=true in config,
|
|
1183
|
+
# force mandatory for ALL detected implementation work (action != "none")
|
|
1184
|
+
if [[ "$INCREMENT_MANDATORY_CONFIG" == "true" && "$INC_ACTION" != "none" ]]; then
|
|
1185
|
+
INC_MANDATORY="true"
|
|
1186
|
+
fi
|
|
1187
|
+
|
|
1177
1188
|
# v1.0.168: Parse skill invocation recommendation
|
|
1178
1189
|
SKILL_INVOCATION=$(echo "$JSON_OUTPUT" | jq -r '.skillInvocation.skill // empty' 2>/dev/null)
|
|
1179
1190
|
SKILL_REASON=$(echo "$JSON_OUTPUT" | jq -r '.skillInvocation.reason // empty' 2>/dev/null)
|
|
@@ -1300,26 +1311,33 @@ Task({
|
|
|
1300
1311
|
# Use printf to handle special chars, then escape for nested JSON
|
|
1301
1312
|
ESCAPED_PROMPT=$(printf '%s' "$PROMPT" | sed 's/\\/\\\\/g; s/"/\\"/g; s/ /\\t/g' | tr '\n' ' ')
|
|
1302
1313
|
|
|
1303
|
-
#
|
|
1314
|
+
# v1.0.243: Smart interview gate — LLM assesses prompt completeness
|
|
1315
|
+
# before blindly calling increment-planner. If details are missing,
|
|
1316
|
+
# ask targeted questions first. If complete, proceed directly.
|
|
1304
1317
|
DEEP_INTERVIEW_MSG=""
|
|
1305
1318
|
if [[ "$DEEP_INTERVIEW_ENABLED" == "true" ]]; then
|
|
1306
1319
|
DEEP_INTERVIEW_MSG="
|
|
1307
1320
|
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
-
|
|
1315
|
-
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
-
|
|
1321
|
-
-
|
|
1322
|
-
|
|
1321
|
+
🧠 **SMART INTERVIEW GATE** (Deep Interview Mode active)
|
|
1322
|
+
|
|
1323
|
+
BEFORE calling sw:increment-planner, assess this prompt for completeness.
|
|
1324
|
+
Consider ALL prior messages in this conversation.
|
|
1325
|
+
|
|
1326
|
+
**Assess complexity:**
|
|
1327
|
+
- Trivial → need almost nothing, call increment-planner now
|
|
1328
|
+
- Small (single component) → need: tech stack + basic flow
|
|
1329
|
+
- Medium (multiple components) → need: stack + integrations + user flows + auth
|
|
1330
|
+
- Large (platform/multi-service) → need: architecture + security + deployment + edge cases
|
|
1331
|
+
|
|
1332
|
+
**Check signals (weight by project type):**
|
|
1333
|
+
- Technical: stack, frameworks, DB, auth, API integrations, deployment target
|
|
1334
|
+
- Product: target users, core flows, business model, MVP scope
|
|
1335
|
+
- Operational: env vars/keys, CI/CD, monitoring
|
|
1336
|
+
|
|
1337
|
+
**Decision:**
|
|
1338
|
+
- Sufficient detail → call increment-planner immediately with full context
|
|
1339
|
+
- Gaps detected → ask 2-5 targeted questions about ONLY what is missing, then call increment-planner after answers received
|
|
1340
|
+
- NEVER ask 10+ questions. NEVER repeat what the user already said."
|
|
1323
1341
|
fi
|
|
1324
1342
|
|
|
1325
1343
|
# v1.0.198: Get skill memory for increment-planner
|
|
@@ -1360,7 +1378,15 @@ After sw:increment-planner, ALSO invoke domain skills for your tech stack:
|
|
|
1360
1378
|
- After code → LSP works automatically (use findReferences, goToDefinition)
|
|
1361
1379
|
|
|
1362
1380
|
See CLAUDE.md section \\\"MANDATORY: Skill Chaining\\\" for full pattern."
|
|
1363
|
-
|
|
1381
|
+
# When INCREMENT_MANDATORY_CONFIG=true (from config), use block decision
|
|
1382
|
+
# to actually prevent execution without increment creation
|
|
1383
|
+
if [[ "$INCREMENT_MANDATORY_CONFIG" == "true" ]]; then
|
|
1384
|
+
local escaped_block
|
|
1385
|
+
escaped_block=$(escape_json_early "$MSG")
|
|
1386
|
+
printf '{"decision":"block","reason":"%s"}\n' "$escaped_block"
|
|
1387
|
+
else
|
|
1388
|
+
output_approve_with_context "$MSG"
|
|
1389
|
+
fi
|
|
1364
1390
|
exit 0
|
|
1365
1391
|
else
|
|
1366
1392
|
# v1.0.169: Also suggest direct skill call for non-mandatory
|
|
@@ -1401,7 +1427,14 @@ Or via command: \`/sw:increment --type=hotfix \"${INC_NAME:-urgent-fix}\"\`
|
|
|
1401
1427
|
---
|
|
1402
1428
|
|
|
1403
1429
|
*Tip: Disable with \`incrementAssist.enabled: false\` in config.json*"
|
|
1404
|
-
|
|
1430
|
+
# When INCREMENT_MANDATORY_CONFIG=true, block hotfix too
|
|
1431
|
+
if [[ "$INCREMENT_MANDATORY_CONFIG" == "true" ]]; then
|
|
1432
|
+
local escaped_hotfix_block
|
|
1433
|
+
escaped_hotfix_block=$(escape_json_early "$MSG")
|
|
1434
|
+
printf '{"decision":"block","reason":"%s"}\n' "$escaped_hotfix_block"
|
|
1435
|
+
else
|
|
1436
|
+
output_approve_with_context "$MSG"
|
|
1437
|
+
fi
|
|
1405
1438
|
exit 0
|
|
1406
1439
|
;;
|
|
1407
1440
|
|
|
@@ -1432,7 +1465,7 @@ Consider reopening the existing increment:
|
|
|
1432
1465
|
CMD_SMALLFIX="/sw:increment"
|
|
1433
1466
|
[[ -n "$INC_NAME" ]] && CMD_SMALLFIX="/sw:increment \"$INC_NAME\""
|
|
1434
1467
|
|
|
1435
|
-
MSG="${AUTOLOAD_PREFIX}💡 **Increment Suggestion**: This looks like a small change worth tracking.
|
|
1468
|
+
MSG="${WIP_WARNING}${AUTOLOAD_PREFIX}💡 **Increment Suggestion**: This looks like a small change worth tracking.
|
|
1436
1469
|
|
|
1437
1470
|
Consider creating an increment:
|
|
1438
1471
|
\`\`\`
|
|
@@ -1446,7 +1479,14 @@ Or via command: \`$CMD_SMALLFIX\`
|
|
|
1446
1479
|
---
|
|
1447
1480
|
|
|
1448
1481
|
*Tip: Disable with \`incrementAssist.enabled: false\` in config.json*"
|
|
1449
|
-
|
|
1482
|
+
# When INCREMENT_MANDATORY_CONFIG=true, block small_fix too
|
|
1483
|
+
if [[ "$INCREMENT_MANDATORY_CONFIG" == "true" ]]; then
|
|
1484
|
+
local escaped_smallfix_block
|
|
1485
|
+
escaped_smallfix_block=$(escape_json_early "$MSG")
|
|
1486
|
+
printf '{"decision":"block","reason":"%s"}\n' "$escaped_smallfix_block"
|
|
1487
|
+
else
|
|
1488
|
+
output_approve_with_context "$MSG"
|
|
1489
|
+
fi
|
|
1450
1490
|
exit 0
|
|
1451
1491
|
;;
|
|
1452
1492
|
esac
|
|
@@ -2106,6 +2146,54 @@ if [[ "$ACTIVE_COUNT" -gt 0 ]]; then
|
|
|
2106
2146
|
fi
|
|
2107
2147
|
fi
|
|
2108
2148
|
|
|
2149
|
+
# ==============================================================================
|
|
2150
|
+
# SMART INTERVIEW GATE (v1.0.243 - LLM-Driven Prompt Assessment)
|
|
2151
|
+
# ==============================================================================
|
|
2152
|
+
# When Deep Interview Mode is enabled AND no active increment exists,
|
|
2153
|
+
# inject instructions for the LLM to assess prompt completeness.
|
|
2154
|
+
# The LLM decides: ask targeted questions OR proceed to increment creation.
|
|
2155
|
+
# Fires on EVERY prompt until an increment is created.
|
|
2156
|
+
# See ADR-0243 for architecture decision.
|
|
2157
|
+
|
|
2158
|
+
SMART_INTERVIEW_GATE_MSG=""
|
|
2159
|
+
if [[ "$DEEP_INTERVIEW_ENABLED" == "true" ]] && [[ -z "$ACTIVE_INCREMENT" ]]; then
|
|
2160
|
+
# Also check active-increment.json state file as secondary source
|
|
2161
|
+
HAVE_ACTIVE_STATE=false
|
|
2162
|
+
STATE_FILE="$SPECWEAVE_DIR/state/active-increment.json"
|
|
2163
|
+
if [[ -f "$STATE_FILE" ]] && command -v jq >/dev/null 2>&1; then
|
|
2164
|
+
ACTIVE_IDS=$(jq -r '.ids // [] | length' "$STATE_FILE" 2>/dev/null || echo "0")
|
|
2165
|
+
[[ "$ACTIVE_IDS" -gt 0 ]] && HAVE_ACTIVE_STATE=true
|
|
2166
|
+
fi
|
|
2167
|
+
|
|
2168
|
+
if [[ "$HAVE_ACTIVE_STATE" != "true" ]]; then
|
|
2169
|
+
SMART_INTERVIEW_GATE_MSG="
|
|
2170
|
+
🧠 **SMART INTERVIEW GATE** (Deep Interview Mode active, no increment yet)
|
|
2171
|
+
|
|
2172
|
+
Before proceeding, assess this conversation for completeness. Consider ALL prior messages.
|
|
2173
|
+
|
|
2174
|
+
**Assess complexity first:**
|
|
2175
|
+
- Trivial (config change, typo) → need almost nothing, proceed immediately
|
|
2176
|
+
- Small (single component) → need: tech stack + basic flow
|
|
2177
|
+
- Medium (multiple components) → need: stack + integrations + user flows + auth approach
|
|
2178
|
+
- Large (platform/multi-service) → need: architecture + security + deployment + edge cases + monitoring
|
|
2179
|
+
|
|
2180
|
+
**Check for these signals (weight by project type):**
|
|
2181
|
+
- Technical: tech stack, frameworks, database, auth method, API integrations, deployment target
|
|
2182
|
+
- Product: target users, core flows, business model, MVP scope, timeline
|
|
2183
|
+
- Operational: env vars/keys, CI/CD, monitoring needs
|
|
2184
|
+
|
|
2185
|
+
**Your decision:**
|
|
2186
|
+
- If sufficient detail for the detected complexity → call \`Skill({ skill: \\\"sw:increment-planner\\\", args: \\\"<summarize all gathered context>\\\" })\`
|
|
2187
|
+
- If gaps exist → ask 2-5 targeted questions about ONLY what is missing. Do NOT repeat questions already answered in prior messages. Do NOT run a full category-by-category interview.
|
|
2188
|
+
|
|
2189
|
+
**Rules:**
|
|
2190
|
+
- NEVER overwhelm with 10+ questions at once
|
|
2191
|
+
- NEVER ask about things the user already explained
|
|
2192
|
+
- Simple projects need fewer signals than complex platforms
|
|
2193
|
+
- When in doubt about one detail, ask — but don't block on nice-to-haves"
|
|
2194
|
+
fi
|
|
2195
|
+
fi
|
|
2196
|
+
|
|
2109
2197
|
# ==============================================================================
|
|
2110
2198
|
# DISCIPLINE VALIDATION: Warn about WIP limits (configurable, not hard block!)
|
|
2111
2199
|
# ==============================================================================
|
|
@@ -2194,53 +2282,11 @@ if echo "$PROMPT" | grep -qE "^/sw:increment"; then
|
|
|
2194
2282
|
fi
|
|
2195
2283
|
fi
|
|
2196
2284
|
|
|
2197
|
-
# WIP
|
|
2198
|
-
#
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
if [[ -f "$CONFIG_FILE" ]]; then
|
|
2204
|
-
if command -v jq >/dev/null 2>&1; then
|
|
2205
|
-
SOFT_LIMIT=$(jq -r '.limits.maxActiveIncrements // 1' "$CONFIG_FILE" 2>/dev/null || echo "1")
|
|
2206
|
-
HARD_CAP=$(jq -r '.limits.hardCap // 3' "$CONFIG_FILE" 2>/dev/null || echo "3")
|
|
2207
|
-
else
|
|
2208
|
-
SOFT_LIMIT=$(grep -oP '"maxActiveIncrements"\s*:\s*\K[0-9]+' "$CONFIG_FILE" 2>/dev/null || echo "1")
|
|
2209
|
-
HARD_CAP=$(grep -oP '"hardCap"\s*:\s*\K[0-9]+' "$CONFIG_FILE" 2>/dev/null || echo "3")
|
|
2210
|
-
fi
|
|
2211
|
-
fi
|
|
2212
|
-
|
|
2213
|
-
# Ensure valid numbers
|
|
2214
|
-
[[ ! "$SOFT_LIMIT" =~ ^[0-9]+$ ]] && SOFT_LIMIT=1
|
|
2215
|
-
[[ ! "$HARD_CAP" =~ ^[0-9]+$ ]] && HARD_CAP=3
|
|
2216
|
-
|
|
2217
|
-
# Above hard cap: strong warning but NOT a block (user decides!)
|
|
2218
|
-
if [[ "$ACTIVE_COUNT" -ge "$HARD_CAP" ]]; then
|
|
2219
|
-
WIP_MSG="⚠️ WIP LIMIT EXCEEDED (${ACTIVE_COUNT}/${HARD_CAP})\\n\\nYou have ${ACTIVE_COUNT} active increments (configured maximum: ${HARD_CAP})\\n\\nActive increments:\\n${ACTIVE_LIST}\\n\\n🧠 Research shows 3+ concurrent tasks = 40%% slower + more bugs\\n\\n💡 Options:\\n 1️⃣ Complete an increment: /sw:done <id>\\n 2️⃣ Pause an increment: /sw:pause <id>\\n 3️⃣ Increase limit: Edit .specweave/config.json limits.hardCap\\n 4️⃣ Continue anyway (not recommended)\\n\\n📝 To proceed anyway, just confirm your intent."
|
|
2220
|
-
# Prepend project context if available
|
|
2221
|
-
if [[ -n "$PROJECT_CONTEXT" ]]; then
|
|
2222
|
-
output_approve_with_context "${PROJECT_CONTEXT}${WIP_MSG}"
|
|
2223
|
-
else
|
|
2224
|
-
output_approve_with_context "$WIP_MSG"
|
|
2225
|
-
fi
|
|
2226
|
-
exit 0
|
|
2227
|
-
fi
|
|
2228
|
-
|
|
2229
|
-
# At soft limit: mild warning, approve
|
|
2230
|
-
if [[ "$ACTIVE_COUNT" -ge "$SOFT_LIMIT" ]]; then
|
|
2231
|
-
WIP_MSG="⚠️ WIP LIMIT REACHED (${ACTIVE_COUNT}/${SOFT_LIMIT})\\n\\nYou have ${ACTIVE_COUNT} active increment(s) (recommended limit: ${SOFT_LIMIT})\\n\\nActive increments:\\n${ACTIVE_LIST}\\n\\n🧠 Focus Principle: Fewer active increments = maximum productivity\\n\\n💡 Consider:\\n 1️⃣ Complete current work (recommended)\\n 2️⃣ Pause current work (/sw:pause)\\n 3️⃣ Continue anyway\\n\\n⚠️ Emergency hotfix/bug? Use --type=hotfix or --type=bug"
|
|
2232
|
-
# Prepend project context if available
|
|
2233
|
-
if [[ -n "$PROJECT_CONTEXT" ]]; then
|
|
2234
|
-
output_approve_with_context "${PROJECT_CONTEXT}${WIP_MSG}"
|
|
2235
|
-
else
|
|
2236
|
-
output_approve_with_context "$WIP_MSG"
|
|
2237
|
-
fi
|
|
2238
|
-
exit 0
|
|
2239
|
-
fi
|
|
2240
|
-
|
|
2241
|
-
# No WIP limit warning, but we may have project context to inject
|
|
2242
|
-
if [[ -n "$PROJECT_CONTEXT" ]]; then
|
|
2243
|
-
output_approve_with_context "$PROJECT_CONTEXT"
|
|
2285
|
+
# WIP + PROJECT CONTEXT: Combine WIP_WARNING (built earlier) with project context
|
|
2286
|
+
# Never blocks — always approve with informational context
|
|
2287
|
+
COMBINED_CONTEXT="${WIP_WARNING}${PROJECT_CONTEXT}"
|
|
2288
|
+
if [[ -n "$COMBINED_CONTEXT" ]]; then
|
|
2289
|
+
output_approve_with_context "$COMBINED_CONTEXT"
|
|
2244
2290
|
exit 0
|
|
2245
2291
|
fi
|
|
2246
2292
|
fi
|
|
@@ -2411,6 +2457,15 @@ if [[ -n "$LSP_EXPLICIT_REQUEST_MSG" ]]; then
|
|
|
2411
2457
|
FINAL_MESSAGE="${FINAL_MESSAGE}${LSP_EXPLICIT_REQUEST_MSG}"
|
|
2412
2458
|
fi
|
|
2413
2459
|
|
|
2460
|
+
# v1.0.243: Smart Interview Gate for non-incrementAssist paths
|
|
2461
|
+
# When deep interview is enabled but incrementAssist didn't trigger SKILL FIRST,
|
|
2462
|
+
# still inject the gate so LLM can gather context across conversational prompts.
|
|
2463
|
+
if [[ -n "$SMART_INTERVIEW_GATE_MSG" ]]; then
|
|
2464
|
+
FINAL_MESSAGE="${FINAL_MESSAGE}
|
|
2465
|
+
|
|
2466
|
+
${SMART_INTERVIEW_GATE_MSG}"
|
|
2467
|
+
fi
|
|
2468
|
+
|
|
2414
2469
|
# Add context if available
|
|
2415
2470
|
if [[ -n "$CONTEXT" ]]; then
|
|
2416
2471
|
FINAL_MESSAGE="${FINAL_MESSAGE}${CONTEXT}"
|
|
@@ -399,6 +399,59 @@ Recommendation: ❌ CANNOT close increment
|
|
|
399
399
|
• Estimated effort: 4-6 hours
|
|
400
400
|
```
|
|
401
401
|
|
|
402
|
+
#### Gate 2a: E2E Test Execution (AUTOMATED - BLOCKING)
|
|
403
|
+
|
|
404
|
+
**Before PM subjective review, automatically detect and run E2E tests.**
|
|
405
|
+
|
|
406
|
+
**Step 1: Detect E2E test frameworks**
|
|
407
|
+
|
|
408
|
+
Scan the project for E2E test configurations:
|
|
409
|
+
|
|
410
|
+
```bash
|
|
411
|
+
# Detect E2E test frameworks
|
|
412
|
+
E2E_DETECTED=false
|
|
413
|
+
E2E_FRAMEWORK=""
|
|
414
|
+
E2E_DIRS=()
|
|
415
|
+
|
|
416
|
+
# Check current project
|
|
417
|
+
if [ -f "playwright.config.ts" ] || [ -f "playwright.config.js" ]; then
|
|
418
|
+
E2E_DETECTED=true; E2E_FRAMEWORK="playwright"
|
|
419
|
+
elif [ -f "cypress.config.ts" ] || [ -f "cypress.config.js" ]; then
|
|
420
|
+
E2E_DETECTED=true; E2E_FRAMEWORK="cypress"
|
|
421
|
+
fi
|
|
422
|
+
|
|
423
|
+
# Multi-repo: scan repositories/ for ALL E2E projects (collect all, not just last)
|
|
424
|
+
if [ -d "repositories" ]; then
|
|
425
|
+
for e2e_dir in repositories/*/*-e2e repositories/*/e2e; do
|
|
426
|
+
if [ -d "$e2e_dir" ]; then
|
|
427
|
+
E2E_DETECTED=true
|
|
428
|
+
E2E_DIRS+=("$e2e_dir")
|
|
429
|
+
fi
|
|
430
|
+
done
|
|
431
|
+
fi
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
**Step 2: Run E2E tests (BLOCKING - E2E test failure blocks closure)**
|
|
435
|
+
|
|
436
|
+
```bash
|
|
437
|
+
if [ "$E2E_DETECTED" = "true" ]; then
|
|
438
|
+
case "$E2E_FRAMEWORK" in
|
|
439
|
+
playwright) npx playwright test --reporter=list ;;
|
|
440
|
+
cypress) npx cypress run --reporter spec ;;
|
|
441
|
+
esac
|
|
442
|
+
|
|
443
|
+
# Multi-repo: run E2E tests in each collected directory
|
|
444
|
+
for dir in "${E2E_DIRS[@]}"; do
|
|
445
|
+
echo "Running E2E tests in $dir..."
|
|
446
|
+
(cd "$dir" && npm test)
|
|
447
|
+
# If E2E tests fail → BLOCK closure
|
|
448
|
+
done
|
|
449
|
+
fi
|
|
450
|
+
# If E2E tests fail → "CANNOT CLOSE INCREMENT - E2E tests failing. Fix failures before /sw:done."
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
**E2E test passing is a BLOCKING requirement for closure.** If E2E tests are detected and they fail, the increment CANNOT be closed. This is an automated gate, not a subjective PM check. If no E2E tests are detected, this gate is skipped.
|
|
454
|
+
|
|
402
455
|
#### Gate 2: Tests Passing ✅
|
|
403
456
|
|
|
404
457
|
**PM checks**:
|
|
@@ -38,7 +38,7 @@ If `true`:
|
|
|
38
38
|
- Trivial features: 0-3 questions
|
|
39
39
|
- Small features: 4-8 questions
|
|
40
40
|
- Medium features: 9-18 questions
|
|
41
|
-
- Large features: 19-40
|
|
41
|
+
- Large features: 19-40 questions
|
|
42
42
|
3. Cover relevant categories (skip those that don't apply)
|
|
43
43
|
4. Only proceed to Research phase after sufficient clarity
|
|
44
44
|
|
|
@@ -2,6 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
**Load this phase when Deep Interview Mode is enabled.**
|
|
4
4
|
|
|
5
|
+
## Smart Interview Gate (v1.0.243+)
|
|
6
|
+
|
|
7
|
+
The `user-prompt-submit.sh` hook now injects a **Smart Interview Gate** on every prompt when:
|
|
8
|
+
1. `deepInterview.enabled: true` in config
|
|
9
|
+
2. No active increment exists
|
|
10
|
+
|
|
11
|
+
The gate instructs the LLM to **assess prompt completeness** before deciding whether to interview or proceed. This replaces the old "always ask 5-40 questions" approach.
|
|
12
|
+
|
|
13
|
+
**How it works:**
|
|
14
|
+
- Gate fires on every prompt, accumulating context across messages
|
|
15
|
+
- LLM evaluates technical signals (stack, integrations, auth, deployment) AND product signals (users, flows, business model)
|
|
16
|
+
- If the user's prompt is comprehensive enough for the detected complexity → skip interview, proceed to `sw:increment-planner`
|
|
17
|
+
- If gaps exist → ask 2-5 targeted questions about what's missing (NOT a full interview)
|
|
18
|
+
|
|
19
|
+
**As PM skill, your role when gate is active:**
|
|
20
|
+
- If the gate determined the prompt is complete → proceed directly to spec creation
|
|
21
|
+
- If the gate flagged missing areas → ask about ONLY those areas, then proceed
|
|
22
|
+
- Never re-ask questions the user already answered in prior messages
|
|
23
|
+
|
|
5
24
|
## Detection
|
|
6
25
|
|
|
7
26
|
Check config before proceeding with spec creation:
|
|
@@ -186,7 +205,7 @@ When factors point to different complexity levels:
|
|
|
186
205
|
| **Trivial** | 0-3 questions | Config change, typo fix, obvious bug |
|
|
187
206
|
| **Small** | 4-8 questions | Single well-defined component, clear requirements |
|
|
188
207
|
| **Medium** | 9-18 questions | Multiple components, some integration points |
|
|
189
|
-
| **Large** | 19-40
|
|
208
|
+
| **Large** | 19-40 questions | Architectural, cross-cutting, high-risk (payments, security) |
|
|
190
209
|
|
|
191
210
|
### What's a "Single Component"?
|
|
192
211
|
|
|
@@ -39,6 +39,25 @@ For each agent:
|
|
|
39
39
|
- If any running → report and ask user to wait
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
+
### Step 1.5: Validate Repository Structure
|
|
43
|
+
|
|
44
|
+
For multi-repo team sessions, verify all agent work follows the repository directory convention:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# Check for repos created outside repositories/ directory
|
|
48
|
+
if [ -d "repositories" ]; then
|
|
49
|
+
for git_dir in ./*/.git; do
|
|
50
|
+
repo_name=$(dirname "$git_dir")
|
|
51
|
+
if [[ "$repo_name" != ./repositories/* && "$repo_name" != "./.git" ]]; then
|
|
52
|
+
echo "WARNING: Repository $repo_name found outside repositories/ directory"
|
|
53
|
+
echo "Expected: repositories/{org}/$(basename $repo_name)/"
|
|
54
|
+
fi
|
|
55
|
+
done
|
|
56
|
+
fi
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
If repos are found outside `repositories/`, report as a warning with remediation instructions. The merge proceeds but the report flags the issue for cleanup.
|
|
60
|
+
|
|
42
61
|
### Step 2: Determine Merge Order
|
|
43
62
|
|
|
44
63
|
Dependencies flow: shared → backend → frontend (or as defined in session)
|