speccrew 0.6.37 → 0.6.39

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.
@@ -400,6 +400,13 @@ When user reports problems ("something went wrong", "error occurred", "not worki
400
400
  - When dispatching workers: ensure task descriptions explicitly state "use PowerShell/Bash only"
401
401
  - For JSON operations: use `node -e` with inline JS, or PowerShell `ConvertFrom-Json` / `ConvertTo-Json`
402
402
 
403
+ **CONTINUOUS EXECUTION ENFORCEMENT:**
404
+ - NEVER offer A/B/C choices during pipeline execution
405
+ - NEVER pause to ask "Should I continue?" when workload is large
406
+ - NEVER suggest "partial execution" or "on-demand initialization" as options
407
+ - When context window is running low, complete current stage fully, write checkpoint, then continue in next context — DO NOT ask user
408
+ - The ONLY acceptable reason to stop is: unrecoverable error (file system failure, missing dependencies)
409
+
403
410
  **Must NOT Do:**
404
411
  - Do not directly execute specific steps in Skill (must read Skill file first)
405
412
  - Do not skip Skill and directly generate deliverables
@@ -105,6 +105,10 @@ Stage 4: System Summary
105
105
  <field name="text">DO NOT ask for confirmation before generating output files</field>
106
106
  <field name="text">DO NOT warn about "large number of files" or "this may take a while" — proceed with generation</field>
107
107
  <field name="text">ONLY pause at explicit &lt;event action="confirm"&gt; blocks defined in the workflow</field>
108
+ <field name="text">DO NOT offer "continue/pause/partial" options — EVER</field>
109
+ <field name="text">DO NOT estimate workload and suggest breaking it into phases — execute ALL phases in sequence</field>
110
+ <field name="text">When many features need analysis, dispatch ALL of them — do NOT skip or defer any</field>
111
+ <field name="text">Context window management: if approaching limit, save progress to checkpoint file and resume — do NOT ask user for guidance</field>
108
112
  </block>
109
113
 
110
114
  <!-- ============================================================
@@ -55,7 +55,7 @@ Before starting, verify:
55
55
  - **Empty modules directory**: If no `*-overview.md` files found, generate a skeleton system-overview.md with empty statistics and return `status: "warning"`.
56
56
  - **Incomplete module overviews**: If a module-overview.md only has Section 1-2 (initial version), use available data and note gaps with `<!-- DATA INCOMPLETE -->`.
57
57
  - **Same module name from different platforms**: Treat as separate modules. Use `{module_name} ({platform_type})` for display and `{module_name}_{platform_type}` as internal ID.
58
- - **Missing timestamp service**: If `speccrew-get-timestamp` is unavailable, use system current time as fallback.
58
+ - **Timestamp generation**: Run `node scripts/get-timestamp.js` to get current timestamp. If the script is unavailable, use system current time as fallback.
59
59
 
60
60
  ```mermaid
61
61
  flowchart TD
@@ -261,10 +261,10 @@ Fill each `[TO BE FILLED]` placeholder with actual content:
261
261
  - Read `speccrew-workspace/docs/configs/tech-stack-mappings.json` → system tech stacks and display names
262
262
  - Read `speccrew-workspace/docs/rules/mermaid-rule.md` → Mermaid diagram guidelines
263
263
 
264
- 2. **Invoke** `speccrew-get-timestamp` using Skill tool:
265
- - Parameters: none (uses default format `YYYY-MM-DD-HHmmss`)
266
- - Returns: timestamp string (e.g., `2026-03-17-132645`)
267
- - Use the returned timestamp as generation timestamp in document
264
+ 2. **Get timestamp** by running the script:
265
+ - Run: `node scripts/get-timestamp.js`
266
+ - Default format: `YYYY-MM-DD-HHmmss` (e.g., `2026-03-17-132645`)
267
+ - Use the output as generation timestamp in document
268
268
 
269
269
  3. **Determine Technology Stack**:
270
270
  - Extract platform types from discovered module paths
@@ -292,9 +292,9 @@ rule : Constraint declaration (level: forbidden | mandatory | note)
292
292
  <output name="mermaid_rules" />
293
293
  </task>
294
294
 
295
- <!-- Invoke speccrew-get-timestamp skill -->
296
- <task name="get_timestamp" action="run-skill" skill="speccrew-get-timestamp">
297
- <output name="timestamp" />
295
+ <!-- Get timestamp via script -->
296
+ <task name="get_timestamp" action="run-script" description="Get current timestamp">
297
+ <run-script script="scripts/get-timestamp.js" output="timestamp" />
298
298
  </task>
299
299
 
300
300
  <!-- Gateway: Fallback for timestamp -->
@@ -308,7 +308,7 @@ speccrew-workspace/knowledges/techs/{platform_id}/
308
308
  2. `speccrew-knowledge-techs-index` must check actual existing documents per platform and dynamically generate links
309
309
 
310
310
  **Status Tracking**:
311
- - **Get timestamp** using `speccrew-get-timestamp` skill
311
+ - **Get timestamp**: Run `node scripts/get-timestamp.js` to get current timestamp
312
312
  - **Generate `stage2-status.json`** at `speccrew-workspace/knowledges/base/sync-state/knowledge-techs/stage2-status.json`
313
313
 
314
314
  **Stage 2 status tracks**:
@@ -675,7 +675,7 @@ THRESHOLD: warnings > 5 → flag for manual review
675
675
  - `speccrew-workspace/knowledges/techs/INDEX.md` (complete with platform index and Agent mapping, dynamically generated)
676
676
 
677
677
  **Status Tracking**:
678
- - **Get timestamp** using `speccrew-get-timestamp` skill
678
+ - **Get timestamp**: Run `node scripts/get-timestamp.js` to get current timestamp
679
679
  - **Generate `stage3-status.json`** at `speccrew-workspace/knowledges/base/sync-state/knowledge-techs/stage3-status.json`
680
680
 
681
681
  **Stage 3 status tracks**:
@@ -118,6 +118,10 @@ Read `speccrew-workspace/docs/configs/platform-mapping.json` for standardized pl
118
118
  <field name="text">DO NOT ask for confirmation before generating output files</field>
119
119
  <field name="text">DO NOT warn about "large number of files" or "this may take a while" — proceed with generation</field>
120
120
  <field name="text">ONLY pause at explicit &lt;event action="confirm"&gt; blocks defined in the workflow</field>
121
+ <field name="text">DO NOT offer "continue/pause/partial" options — EVER</field>
122
+ <field name="text">DO NOT estimate workload and suggest breaking it into phases — execute ALL phases in sequence</field>
123
+ <field name="text">When many platforms need analysis, dispatch ALL of them — do NOT skip or defer any</field>
124
+ <field name="text">Context window management: if approaching limit, save progress to checkpoint file and resume — do NOT ask user for guidance</field>
121
125
  </block>
122
126
 
123
127
  <!-- ============================================================
@@ -160,8 +160,8 @@ Read each platform's INDEX.md to extract:
160
160
  - Preserve all template section headers and structure
161
161
 
162
162
  3. **Get Timestamp**:
163
- - **CRITICAL**: Use the Skill tool to invoke `speccrew-get-timestamp` (no format parameter needed, uses default)
164
- - Store the returned timestamp as `{{generated_at}}` template variable
163
+ - **CRITICAL**: Run `node scripts/get-timestamp.js` to get current timestamp (no format parameter needed, uses default)
164
+ - Store the output as `{{generated_at}}` template variable
165
165
 
166
166
  4. **Fill the following sections** in the copied template:
167
167
 
@@ -120,8 +120,8 @@ rule : Constraint declaration (level: forbidden | mandatory | note)
120
120
  </loop>
121
121
 
122
122
  <!-- Step 4: Get Timestamp -->
123
- <task id="step4-get-timestamp" action="run-skill" description="Get current timestamp for generated_at field">
124
- <run-skill skill="speccrew-get-timestamp" />
123
+ <task id="step4-get-timestamp" action="run-script" description="Get current timestamp for generated_at field">
124
+ <run-script script="scripts/get-timestamp.js" output="timestamp" />
125
125
  </task>
126
126
 
127
127
  <!-- Step 5: Generate Root INDEX.md -->
@@ -155,8 +155,8 @@ For each detected platform, extract:
155
155
  ### Step 3: Generate techs-manifest.json
156
156
 
157
157
  1. **Get Timestamp**:
158
- - **CRITICAL**: Use the Skill tool to invoke `speccrew-get-timestamp` (no format parameter needed, uses default)
159
- - Store the returned timestamp as `generated_at` value
158
+ - **CRITICAL**: Run `node scripts/get-timestamp.js` to get current timestamp (no format parameter needed, uses default)
159
+ - Store the output as `generated_at` value
160
160
 
161
161
  2. **Create JSON file** with detected platforms:
162
162
 
@@ -132,8 +132,8 @@ rule : Constraint declaration (level: forbidden | mandatory | note)
132
132
  </loop>
133
133
 
134
134
  <!-- Step 3: Get Timestamp -->
135
- <task id="step3-get-timestamp" action="run-skill" description="Get current timestamp for generated_at field">
136
- <run-skill skill="speccrew-get-timestamp" />
135
+ <task id="step3-get-timestamp" action="run-script" description="Get current timestamp for generated_at field">
136
+ <run-script script="scripts/get-timestamp.js" output="timestamp" />
137
137
  </task>
138
138
 
139
139
  <!-- Step 4: Generate techs-manifest.json -->
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "speccrew",
3
- "version": "0.6.37",
3
+ "version": "0.6.39",
4
4
  "description": "Spec-Driven Development toolkit for AI-powered IDEs",
5
5
  "author": "charlesmu99",
6
6
  "repository": {
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Get current timestamp in specified format
4
+ * Usage: node get-timestamp.js [format]
5
+ * Default format: YYYY-MM-DD-HHmmss
6
+ */
7
+
8
+ const FORMATS = {
9
+ 'YYYY-MM-DD-HHmmss': () => {
10
+ const now = new Date();
11
+ return `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}-${String(now.getHours()).padStart(2, '0')}${String(now.getMinutes()).padStart(2, '0')}${String(now.getSeconds()).padStart(2, '0')}`;
12
+ },
13
+ 'YYYY-MM-DD': () => {
14
+ const now = new Date();
15
+ return `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}`;
16
+ },
17
+ 'HHmm': () => {
18
+ const now = new Date();
19
+ return `${String(now.getHours()).padStart(2, '0')}${String(now.getMinutes()).padStart(2, '0')}`;
20
+ },
21
+ 'ISO': () => new Date().toISOString()
22
+ };
23
+
24
+ function getTimestamp(format = 'YYYY-MM-DD-HHmmss') {
25
+ const formatter = FORMATS[format];
26
+ if (formatter) {
27
+ return formatter();
28
+ }
29
+ // Default fallback
30
+ return FORMATS['YYYY-MM-DD-HHmmss']();
31
+ }
32
+
33
+ // Main execution
34
+ const format = process.argv[2] || 'YYYY-MM-DD-HHmmss';
35
+ console.log(getTimestamp(format));