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.
Files changed (30) hide show
  1. package/CLAUDE.md +28 -27
  2. package/dist/src/cli/commands/team.js +1 -1
  3. package/dist/src/cli/commands/team.js.map +1 -1
  4. package/dist/src/cli/helpers/init/deep-interview-config.d.ts +1 -1
  5. package/dist/src/cli/helpers/init/deep-interview-config.js +21 -21
  6. package/dist/src/cli/helpers/init/deep-interview-config.js.map +1 -1
  7. package/dist/src/cli/helpers/issue-tracker/github.d.ts.map +1 -1
  8. package/dist/src/cli/helpers/issue-tracker/github.js +4 -3
  9. package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -1
  10. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  11. package/dist/src/cli/helpers/issue-tracker/index.js +17 -0
  12. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  13. package/dist/src/cli/helpers/selection-strategy.d.ts +1 -1
  14. package/dist/src/cli/helpers/selection-strategy.d.ts.map +1 -1
  15. package/dist/src/cli/helpers/selection-strategy.js +7 -1
  16. package/dist/src/cli/helpers/selection-strategy.js.map +1 -1
  17. package/dist/src/core/repo-structure/multi-repo-configurator.d.ts.map +1 -1
  18. package/dist/src/core/repo-structure/multi-repo-configurator.js +137 -12
  19. package/dist/src/core/repo-structure/multi-repo-configurator.js.map +1 -1
  20. package/dist/src/core/repo-structure/repo-bulk-discovery.d.ts +1 -1
  21. package/dist/src/core/repo-structure/repo-bulk-discovery.d.ts.map +1 -1
  22. package/dist/src/core/repo-structure/repo-bulk-discovery.js +30 -8
  23. package/dist/src/core/repo-structure/repo-bulk-discovery.js.map +1 -1
  24. package/package.json +1 -1
  25. package/plugins/specweave/hooks/user-prompt-submit.sh +122 -67
  26. package/plugins/specweave/skills/done/SKILL.md +53 -0
  27. package/plugins/specweave/skills/pm/SKILL.md +1 -1
  28. package/plugins/specweave/skills/pm/phases/00-deep-interview.md +20 -1
  29. package/plugins/specweave/skills/team-merge/SKILL.md +19 -0
  30. 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, trimmedPattern));
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! Next: Select which one is the parent.\n`));
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: 'manual'
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.241",
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
- # Build deep interview mode reminder if enabled (v1.0.195)
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
- 🎤 **DEEP INTERVIEW MODE ENABLED**
1309
- Before creating spec.md, you MUST ask thorough questions about:
1310
- - Architecture & system design patterns
1311
- - External integrations (APIs, databases, auth)
1312
- - UI/UX concerns and tradeoffs
1313
- - Performance & scalability requirements
1314
- - Security considerations
1315
- - Edge cases & error handling
1316
-
1317
- Continue interviewing until requirements are crystal clear. Assess complexity first:
1318
- - Trivial (0-3 questions): Config change, typo fix, obvious bug
1319
- - Small (4-8 questions): Single component, clear requirements
1320
- - Medium (9-18 questions): Multiple components, some integration
1321
- - Large (19-40+ questions): Architectural, cross-cutting, high-risk
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
- output_approve_with_context "$MSG"
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
- output_approve_with_context "$MSG"
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
- output_approve_with_context "$MSG"
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 LIMITS CHECK (inside same block - no duplicate command detection)
2198
- # Read limits from config.json (respect user's settings!)
2199
- CONFIG_FILE="$SPECWEAVE_DIR/config.json"
2200
- SOFT_LIMIT=1
2201
- HARD_CAP=3
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+ questions
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+ questions | Architectural, cross-cutting, high-risk (payments, security) |
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)