project-iris 0.6.7 → 0.6.9

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.
@@ -195,363 +195,12 @@ Scan the bolt's unit name, story titles, and story descriptions for these signal
195
195
 
196
196
  This is not a hard requirement - use judgment on which principles apply to the current task.
197
197
 
198
- ### 4c. Figma Frames (Conditional - Per Story)
198
+ ### 4c. Figma Design Integration (Conditional - Per Story)
199
199
 
200
- **Check each story's `figma_frames` field in frontmatter.**
200
+ **⛔ HARD GATE**: UI stories with `figma_frames` MUST have design specs extracted before coding. Figma scope MUST be enforced per-story.
201
201
 
202
- If a story has `figma_frames` (array of Figma URLs), use Figma MCP to fetch design specs and interaction flows before implementing.
203
-
204
- **Supported Figma URL format:**
205
-
206
- - Design file: `https://www.figma.com/design/{file-id}/{file-name}?node-id={node-id}&t={token}`
207
-
208
- **When `figma_frames` is present:**
209
-
210
- ```text
211
- ┌─────────────────────────────────────────────────────────────┐
212
- │ FIGMA FRAMES DETECTED │
213
- │ │
214
- │ Story: {story-id} │
215
- │ Frames: {count} Figma frame(s) │
216
- │ │
217
- │ Action: Use Figma MCP to fetch design and flow data │
218
- └─────────────────────────────────────────────────────────────┘
219
- ```
220
-
221
- **Figma MCP Integration:**
222
-
223
- Use the Figma MCP tool to read design specifications. The MCP server is configured via:
224
- `claude mcp add --transport http figma https://mcp.figma.com/mcp`
225
-
226
- ### 4c-1. Extract Design Specs (Per Frame)
227
-
228
- For EACH Figma frame URL, extract:
229
-
230
- ```text
231
- ┌─────────────────────────────────────────────────────────────┐
232
- │ DESIGN SPECS EXTRACTION │
233
- │ │
234
- │ For each frame, extract: │
235
- │ │
236
- │ 1. Layout & Structure │
237
- │ - Component hierarchy (parent/child relationships) │
238
- │ - Spacing values (padding, margins, gaps) │
239
- │ - Alignment and positioning │
240
- │ │
241
- │ 2. Visual Styling │
242
- │ - Colors (exact hex values, opacity) │
243
- │ - Typography (font family, size, weight, line height) │
244
- │ - Border radius, shadows, effects │
245
- │ │
246
- │ 3. Component States │
247
- │ - Default, hover, active, disabled, focus states │
248
- │ - Loading states and skeletons │
249
- │ - Error and success states │
250
- │ │
251
- │ 4. Responsive Variants (if defined) │
252
- │ - Mobile, tablet, desktop variations │
253
- │ - Breakpoint-specific layouts │
254
- └─────────────────────────────────────────────────────────────┘
255
- ```
256
-
257
- ### 4c-2. Extract Interaction Flows
258
-
259
- **Figma prototype connections MAY define interaction flows - but many designs don't have them.**
260
-
261
- **Step 1: Check for prototype connections via Figma MCP**
262
-
263
- ```text
264
- ┌─────────────────────────────────────────────────────────────┐
265
- │ PROTOTYPE CONNECTION CHECK │
266
- │ │
267
- │ Query Figma MCP for prototype data on each frame. │
268
- │ Prototype connections include: │
269
- │ - Navigation triggers (which element → which frame) │
270
- │ - Transition types (push, overlay, swap) │
271
- │ - Overlay settings (dismiss on click outside, etc.) │
272
- └─────────────────────────────────────────────────────────────┘
273
- ```
274
-
275
- **Step 2: Determine flow source (in priority order)**
276
-
277
- ```text
278
- ┌─────────────────────────────────────────────────────────────┐
279
- │ FLOW SOURCE PRIORITY │
280
- │ │
281
- │ 1. Figma prototype connections (if they exist) │
282
- │ → Extract automatically from Figma MCP │
283
- │ │
284
- │ 2. Manual flow definition in story (if provided) │
285
- │ → Read from story's `interaction_flows` field │
286
- │ │
287
- │ 3. No flow information available │
288
- │ → Ask user OR infer from button labels │
289
- └─────────────────────────────────────────────────────────────┘
290
- ```
291
-
292
- ### 4c-2a. If Prototype Connections Exist in Figma
293
-
294
- Extract interaction data:
295
-
296
- - Navigation actions (which element → destination frame)
297
- - Overlay triggers (modals, bottom sheets, tooltips)
298
- - Transition types and animations
299
- - Dismiss behaviors
300
-
301
- ### 4c-2b. If NO Prototype Connections in Figma
302
-
303
- **Check story for manual `interaction_flows` definition:**
304
-
305
- ```yaml
306
- # In story frontmatter or body
307
- interaction_flows:
308
- - screen: login-form
309
- interactions:
310
- - element: "Sign Up button"
311
- action: navigate
312
- target: registration-form
313
- - element: "Forgot Password link"
314
- action: overlay
315
- target: forgot-password-modal
316
- ```
317
-
318
- **If manual flows exist:** Use them to build the interaction map.
319
-
320
- **If NO flows defined anywhere:**
321
-
322
- ```text
323
- ┌─────────────────────────────────────────────────────────────┐
324
- │ NO INTERACTION FLOW DEFINED │
325
- │ │
326
- │ Story: {story-id} │
327
- │ Figma frames: {count} (no prototype connections found) │
328
- │ Manual flows: Not defined │
329
- │ │
330
- │ Options: │
331
- │ 1 - Define interactions now (I'll ask about each button) │
332
- │ 2 - Infer from button labels (best guess) │
333
- │ 3 - Implement as static screens (no navigation wiring) │
334
- └─────────────────────────────────────────────────────────────┘
335
- ```
336
-
337
- **Option 1 - Define interactions:** Ask user about each interactive element:
338
-
339
- ```text
340
- I found these interactive elements in the Figma frames:
341
- - "Sign Up" button
342
- - "Forgot Password" link
343
- - "Login" button
344
-
345
- For each element, what should happen on click?
346
- ```
347
-
348
- **Option 2 - Infer from labels:** Make reasonable assumptions:
349
-
350
- - "Submit", "Save", "Login" → form submission
351
- - "Cancel", "Close", "X" → close/go back
352
- - "Sign Up", "Register" → navigate to registration
353
- - "Learn More", "View Details" → navigate to detail screen
354
-
355
- **Option 3 - Static screens:** Implement visuals only, user wires navigation later.
356
-
357
- ### 4c-2c. Output: Interaction Map
358
-
359
- After determining flows (from any source), build the interaction map:
360
-
361
- ```markdown
362
- ### Interaction Map: {story-id}
363
-
364
- **Flow Source:** {Figma prototype | Manual definition | Inferred | Static}
365
-
366
- #### Screen: {frame-name-1}
367
- | Element | Action | Target | Type |
368
- |---------|--------|--------|------|
369
- | "Sign Up" button | on-click | registration-form | navigate |
370
- | "Forgot Password" link | on-click | forgot-password-modal | overlay |
371
-
372
- #### Navigation Flow
373
-
374
- login-screen
375
- ├── "Sign Up" → registration-form
376
- ├── "Forgot Password" → forgot-password-modal (overlay)
377
- └── "Login" → dashboard (on success)
378
- ```
379
-
380
- ### 4c-3. If Figma MCP is not available
381
-
382
- ```text
383
- ⚠️ Figma MCP not configured - cannot fetch design specs
384
- Story {story-id} has figma_frames but Figma MCP is unavailable.
385
-
386
- Options:
387
- 1 - Continue using ui-patterns.md guidelines (design may not match)
388
- 2 - Stop and configure Figma MCP first
389
-
390
- To configure: Run `claude mcp add --transport http figma https://mcp.figma.com/mcp`
391
- Then authenticate via `/mcp` in Claude Code.
392
- ```
393
-
394
- ### 4c-4. Design-First Implementation Rule
395
-
396
- **⛔ HARD GATE - UI FIDELITY ENFORCEMENT**
397
-
398
- ```text
399
- ┌─────────────────────────────────────────────────────────────┐
400
- │ UI FIDELITY - NON-NEGOTIABLE │
401
- │ │
402
- │ ⛔ FORBIDDEN: Approximating colors (use exact hex values) │
403
- │ ⛔ FORBIDDEN: Guessing spacing (use exact px/rem values) │
404
- │ ⛔ FORBIDDEN: Substituting fonts (use exact font family) │
405
- │ ⛔ FORBIDDEN: Changing layout structure from Figma │
406
- │ ⛔ FORBIDDEN: Adding/removing elements not in design │
407
- │ │
408
- │ The implementation MUST be pixel-perfect to the Figma. │
409
- │ If deviation is required, STOP and ask the user first. │
410
- └─────────────────────────────────────────────────────────────┘
411
- ```
412
-
413
- When a story has `figma_frames`:
414
-
415
- 1. **Fetch ALL frames for THIS story FIRST** before writing any UI code
416
- 2. **Build the interaction map** to understand the complete flow
417
- 3. **Extract EXACT values** from Figma MCP response:
418
- - Colors: Use exact hex values (e.g., `#1A1A1A`, not "dark gray")
419
- - Spacing: Use exact pixel/rem values (e.g., `16px`, not "some padding")
420
- - Typography: Use exact font-family, font-size, font-weight, line-height
421
- - Border radius: Use exact values (e.g., `8px`, not "rounded")
422
- - Shadows: Use exact shadow values from design
423
- 4. **Match the design exactly** - Figma specs override ui-patterns.md defaults
424
- 5. **Implement navigation** - wire up all interactions as defined in Figma
425
- 6. **If you MUST deviate** from design:
426
- - STOP and ask the user first
427
- - Document the deviation and reason in code comments
428
- - Get explicit approval before proceeding
429
-
430
- **Post-Implementation Fidelity Check:**
431
-
432
- After implementing UI code, verify against Figma:
433
-
434
- ```text
435
- ┌─────────────────────────────────────────────────────────────┐
436
- │ FIDELITY CHECKLIST │
437
- │ │
438
- │ □ Colors match exactly (compare hex values) │
439
- │ □ Spacing matches exactly (padding, margin, gap) │
440
- │ □ Typography matches exactly (font, size, weight) │
441
- │ □ Layout structure matches (flexbox/grid arrangement) │
442
- │ □ Component hierarchy matches (nesting, order) │
443
- │ □ Interactive states implemented (hover, focus, active) │
444
- │ □ Responsive behavior matches (if defined in Figma) │
445
- └─────────────────────────────────────────────────────────────┘
446
- ```
447
-
448
- ### 4c-5. When NO `figma_frames` Exists (Story-Level Collection)
449
-
450
- **⛔ HARD GATE - DO NOT SKIP FOR UI STORIES**
451
-
452
- If a story has UI signals (detected in Step 4b) but NO `figma_frames` in frontmatter:
453
-
454
- ```text
455
- ┌─────────────────────────────────────────────────────────────┐
456
- │ UI STORY WITHOUT FIGMA FRAMES │
457
- │ │
458
- │ Story: {story-id} - {title} │
459
- │ UI Detected: {signal found} │
460
- │ Figma Frames: Not defined in story frontmatter │
461
- │ │
462
- │ Would you like to provide Figma design for THIS story? │
463
- │ │
464
- │ 1 - Yes, I'll provide Figma frame URL(s) for this story │
465
- │ 2 - No, continue without Figma (use ui-patterns.md) │
466
- └─────────────────────────────────────────────────────────────┘
467
- ```
468
-
469
- **If user selects "Yes":**
470
-
471
- ```text
472
- Please provide Figma frame URL(s) for story: {story-id}
473
-
474
- ⚠️ IMPORTANT: Only provide frames relevant to THIS story's scope:
475
- {list acceptance criteria titles from story}
476
-
477
- Supported format:
478
- - Design file: https://www.figma.com/design/{file-id}/{name}?node-id={node-id}&t={token}
479
-
480
- Enter URL(s) (one per line, empty line to finish):
481
- ```
482
-
483
- **After collecting URLs:**
484
-
485
- 1. Update the story file's `figma_frames` frontmatter with provided URLs
486
- 2. Proceed with Figma MCP integration (Step 4c-1 onwards)
487
-
488
- **If user selects "No":**
489
-
490
- Fall back to ui-patterns.md guidelines (Step 4b). Generate UI based on:
491
-
492
- 1. Acceptance criteria in the story
493
- 2. Project's ux-guide.md (component library, styling approach)
494
- 3. ui-patterns.md design principles
495
-
496
- ### 4c-6. Figma Scope Enforcement (CRITICAL)
497
-
498
- **⛔ HARD GATE - STORY SCOPE BOUNDARY**
499
-
500
- ```text
501
- ┌─────────────────────────────────────────────────────────────┐
502
- │ FIGMA SCOPE ENFORCEMENT - NON-NEGOTIABLE │
503
- │ │
504
- │ ⛔ FORBIDDEN: Implementing screens beyond current story │
505
- │ ⛔ FORBIDDEN: Building "all screens" from a Figma file │
506
- │ ⛔ FORBIDDEN: Assuming Figma file scope = story scope │
507
- │ │
508
- │ Each story has its own scope. Figma frames provided for a │
509
- │ story ONLY apply to that story's acceptance criteria. │
510
- └─────────────────────────────────────────────────────────────┘
511
- ```
512
-
513
- **When user provides a Figma URL:**
514
-
515
- **Step 1: Check if URL has multiple distinct screens/frames**
516
-
517
- **Step 2: If multiple screens detected**, ask user to map them:
518
-
519
- ```text
520
- ┌─────────────────────────────────────────────────────────────┐
521
- │ MULTIPLE SCREENS DETECTED │
522
- │ │
523
- │ The Figma URL contains {n} distinct screens/frames. │
524
- │ Current story: {story-id} - {title} │
525
- │ │
526
- │ Which screen(s) apply to THIS story? │
527
- │ │
528
- │ Detected frames: │
529
- │ 1. {frame-name-1} (node-id: {id}) │
530
- │ 2. {frame-name-2} (node-id: {id}) │
531
- │ 3. {frame-name-3} (node-id: {id}) │
532
- │ ... │
533
- │ │
534
- │ Enter frame numbers for this story (e.g., "1, 2"): │
535
- └─────────────────────────────────────────────────────────────┘
536
- ```
537
-
538
- **Step 3: Only implement the selected frames** for current story
539
-
540
- **Step 4: Other frames belong to other stories** - do NOT implement them now
541
-
542
- **Scope Validation Before Implementation:**
543
-
544
- Before writing any UI code, verify:
545
-
546
- ```text
547
- Story: {story-id}
548
- Acceptance Criteria: {list from story file}
549
- Figma Frames Selected: {list selected frames}
550
-
551
- ✓ All selected frames relate to this story's acceptance criteria
552
- ✓ No frames selected that belong to other stories
553
- ✓ Scope is bounded to THIS story only
554
- ```
202
+ > **Read `.iris/aidlc/skills/construction/refs/figma-integration.md` and follow its instructions.**
203
+ > This covers: frame extraction, design specs, interaction flows, UI fidelity, scope enforcement.
555
204
 
556
205
  ### 5. Determine Current Stage
557
206
 
@@ -681,165 +330,12 @@ Each bolt type specifies its own stages and required artifacts. Refer to:
681
330
 
682
331
  ### 7b. Story-by-Story Execution (Code Generation Stages) - HARD GATE
683
332
 
684
- **⛔ HARD GATE - SEQUENTIAL STORY EXECUTION REQUIRED**
685
-
686
- ```text
687
- ┌─────────────────────────────────────────────────────────────┐
688
- │ STORY-BY-STORY EXECUTION - NON-NEGOTIABLE │
689
- │ │
690
- │ ⛔ FORBIDDEN: Implementing multiple stories at once │
691
- │ ⛔ FORBIDDEN: Skipping story file reads │
692
- │ ⛔ FORBIDDEN: Not updating stories_progress in bolt file │
693
- │ │
694
- │ You MUST process stories ONE AT A TIME in sequence. │
695
- │ Each story requires its own announce → read → implement → │
696
- │ update cycle. Batch implementation = broken traceability. │
697
- └─────────────────────────────────────────────────────────────┘
698
- ```
699
-
700
- **For EACH story in bolt's stories array, execute this exact sequence:**
701
-
702
- ```text
703
- ┌─────────────────────────────────────────────────────────────┐
704
- │ STORY EXECUTION LOOP (repeat for each story) │
705
- │ │
706
- │ STEP A: Announce start │
707
- │ Output: "⏳ Story {n}/{total}: {story-id} - {title}" │
708
- │ │
709
- │ STEP B: Read story file (MANDATORY) │
710
- │ Action: Read {intent}/units/{unit}/stories/{story-id}.md │
711
- │ Purpose: Extract acceptance criteria for implementation │
712
- │ │
713
- │ STEP C: Implement code for THIS story only │
714
- │ Action: Create/modify code to satisfy acceptance criteria │
715
- │ Add traceability: // Story: {story-id} │
716
- │ │
717
- │ STEP D: Update bolt file stories_progress (MANDATORY) │
718
- │ Action: Edit bolt.md to mark story progress │
719
- │ │
720
- │ STEP E: Update story FILE status (MANDATORY) │
721
- │ Action: Edit story file frontmatter │
722
- │ Path: {intent}/units/{unit}/stories/{story-id}.md │
723
- │ Update: status: {current} → implemented │
724
- │ ⚠️ This is the STORY FILE, not bolt.md │
725
- │ │
726
- │ STEP F: Announce completion │
727
- │ Output: "✅ Story {story-id}: Implemented → `{files}`" │
728
- │ │
729
- │ STEP G: Show updated progress list │
730
- │ Then proceed to next story (back to STEP A) │
731
- └─────────────────────────────────────────────────────────────┘
732
- ```
733
-
734
- **Story Progress Display (show after EACH story completion):**
735
-
736
- ```markdown
737
- ### Story Progress ({completed}/{total})
738
-
739
- 1. ✅ **{SSS}-{story-slug}**: Implemented → `{files}`
740
- 2. ✅ **{SSS}-{story-slug}**: Implemented → `{files}`
741
- 3. ⏳ **{SSS}-{story-slug}**: In Progress
742
- 4. [ ] **{SSS}-{story-slug}**: Pending
743
- 5. [ ] **{SSS}-{story-slug}**: Pending
744
- 6. [ ] **{SSS}-{story-slug}**: Pending
745
- ```
746
-
747
- ### 7b-1. Story File Update (HARD GATE)
748
-
749
- **⛔ HARD GATE - STORY FILE UPDATE REQUIRED AFTER EACH STORY**
750
-
751
- ```text
752
- ┌─────────────────────────────────────────────────────────────┐
753
- │ STORY FILE UPDATE - NON-NEGOTIABLE │
754
- │ │
755
- │ After implementing code for a story, you MUST: │
756
- │ 1. Use Edit tool to update the STORY FILE (not bolt.md) │
757
- │ 2. Change frontmatter: status: {current} → implemented │
758
- │ 3. Verify the edit was applied │
759
- │ │
760
- │ Path: {intent}/units/{unit}/stories/{story-id}.md │
761
- │ │
762
- │ ⛔ FORBIDDEN: Moving to next story without updating file │
763
- │ ⛔ FORBIDDEN: Only updating bolt.md, not story file │
764
- │ ⛔ FORBIDDEN: Batch updating at stage end │
765
- └─────────────────────────────────────────────────────────────┘
766
- ```
767
-
768
- **Story status values during code generation:**
333
+ **⛔ HARD GATE**: Stories MUST be executed one-by-one with progress tracking. Batch implementation is FORBIDDEN.
769
334
 
770
- - `draft` / `generated` / `approved` Initial status (varies)
771
- - `implemented`After code is written for this story
772
-
773
- **Verification Output (after each story file update):**
774
-
775
- ```text
776
- ✅ Story file updated: {story-id}.md
777
- - status: {old-status} → implemented
778
- ```
779
-
780
- ### 7b-2. Bolt File Update (After Story File)
781
-
782
- **Update bolt file after EACH story (not at the end):**
783
-
784
- ```yaml
785
- stories_progress:
786
- - id: 001-database-init
787
- status: complete
788
- implemented_at: {timestamp}
789
- - id: 002-schema-tables
790
- status: complete
791
- implemented_at: {timestamp}
792
- - id: 003-crud-operations
793
- status: in-progress
794
- - id: 004-query-helpers
795
- status: pending
796
- ```
797
-
798
- **Why This Pattern Exists:**
799
-
800
- 1. **Traceability**: Each piece of code maps to a specific story
801
- 2. **Resumability**: If interrupted, we know exactly where to continue
802
- 3. **Verification**: We can validate that ALL stories were addressed
803
- 4. **Visibility**: User sees clear progress through the work
804
- 5. **Quality**: Reading acceptance criteria prevents missed requirements
805
-
806
- ### 7c. Final Regression Check (After All Stories Implemented)
807
-
808
- **⛔ REQUIRED: After implementing all stories, verify no regressions**
809
-
810
- ```text
811
- ┌─────────────────────────────────────────────────────────────┐
812
- │ REGRESSION CHECK - BEFORE STAGE CHECKPOINT │
813
- │ │
814
- │ After ALL stories are implemented, you MUST verify: │
815
- │ 1. Re-read acceptance criteria from FIRST story │
816
- │ 2. Verify the implementation still satisfies those ACs │
817
- │ 3. Repeat for each story in order │
818
- │ 4. Report any regressions found │
819
- │ │
820
- │ Later stories may have broken earlier implementations. │
821
- │ Catch this BEFORE moving to Testing stage. │
822
- └─────────────────────────────────────────────────────────────┘
823
- ```
824
-
825
- **Regression Check Output:**
826
-
827
- ```text
828
- ### Regression Check ({stories_count} stories)
829
-
830
- 1. ✅ **{story-1}**: All ACs still valid
831
- 2. ✅ **{story-2}**: All ACs still valid
832
- 3. ⚠️ **{story-3}**: AC2 regression - {description} → FIX REQUIRED
833
- 4. ✅ **{story-4}**: All ACs still valid
834
-
835
- {If regressions found: Fix before proceeding to checkpoint}
836
- ```
837
-
838
- **Why This Check Exists:**
839
-
840
- - Story N implementation may modify shared code
841
- - Changes could invalidate Story 1-N-1 acceptance criteria
842
- - Catching regressions early prevents cascade failures in Testing stage
335
+ > **Read `.iris/aidlc/skills/construction/refs/story-execution.md` and follow its instructions exactly.**
336
+ > Covers: sequential story loop (announce read implement update), story file updates, bolt progress updates, and regression check.
337
+ >
338
+ > ⚠️ You MUST use the Read tool to load this file NOW. Do not proceed to Step 8 without completing the story execution loop defined in that file.
843
339
 
844
340
  ### 8. Handle Checkpoints (As Defined by Bolt Type)
845
341
 
@@ -1018,156 +514,19 @@ After running the command, verify the changes were applied correctly:
1018
514
 
1019
515
  ## Update Construction Log (HARD GATE)
1020
516
 
1021
- **⛔ HARD GATE - CONSTRUCTION LOG UPDATES REQUIRED**
1022
-
1023
- ```text
1024
- ┌─────────────────────────────────────────────────────────────┐
1025
- │ CONSTRUCTION LOG - NON-NEGOTIABLE │
1026
- │ │
1027
- │ You MUST update the construction log at these points: │
1028
- │ 1. On first bolt start → Create log using template │
1029
- │ 2. On bolt start → Add "started" entry │
1030
- │ 3. On stage completion → Add "stage-complete" entry │
1031
- │ 4. On bolt completion → Add "completed" entry │
1032
- │ │
1033
- │ ⛔ FORBIDDEN: Starting bolt work without log entry │
1034
- │ ⛔ FORBIDDEN: Completing stage without log entry │
1035
- │ ⛔ FORBIDDEN: Completing bolt without log entry │
1036
- │ │
1037
- │ The construction log provides audit trail for the unit. │
1038
- │ No log entry = no evidence the work happened. │
1039
- └─────────────────────────────────────────────────────────────┘
1040
- ```
1041
-
1042
- ### Location
1043
-
1044
- `{unit-path}/construction-log.md`
1045
-
1046
- ### On First Bolt Start
1047
-
1048
- If construction log doesn't exist, create it using template:
1049
- `.iris/aidlc/templates/construction/construction-log-template.md`
1050
-
1051
- ### On Bolt Start
1052
-
1053
- ```markdown
1054
- - **{ISO-8601-timestamp}**: {bolt-id} started - Stage 1: {stage-name}
1055
- ```
517
+ **⛔ HARD GATE**: You MUST update the construction log on bolt start, stage completion, and bolt completion. No log entry = no evidence the work happened.
1056
518
 
1057
- ### On Stage Completion
1058
-
1059
- ```markdown
1060
- - **{ISO-8601-timestamp}**: {bolt-id} stage-complete - {stage-name} → {next-stage}
1061
- ```
1062
-
1063
- ### On Bolt Completion
1064
-
1065
- ```markdown
1066
- - **{ISO-8601-timestamp}**: {bolt-id} completed - All {n} stages done
1067
- ```
519
+ > **Read `.iris/aidlc/skills/construction/refs/construction-log.md` and follow its instructions.**
520
+ >
521
+ > ⚠️ You MUST use the Read tool to load this file. Missing log entries = no audit trail of work done.
1068
522
 
1069
523
  ---
1070
524
 
1071
- ## Output (Stage Execution)
1072
-
1073
- ```markdown
1074
- ## Executing Bolt: {bolt-id}
1075
-
1076
- ### Current Stage: {stage-name}
1077
- **Type**: {bolt-type}
1078
- **Progress**: Stage {n} of {total}
1079
-
1080
- ### Story Progress ({completed}/{total})
525
+ ## Output & Completion
1081
526
 
1082
- 1. **{SSS}-{story-slug}**: Implemented `{files}`
1083
- 2. ✅ **{SSS}-{story-slug}**: Implemented → `{files}`
1084
- 3. ⏳ **{SSS}-{story-slug}**: In Progress
1085
- 4. [ ] **{SSS}-{story-slug}**: Pending
527
+ > **Read `.iris/aidlc/skills/construction/refs/bolt-output.md`** for output templates (stage execution + bolt completed), post-bolt action menu, and completion checklist.
1086
528
 
1087
- ### Activities Performed
1088
- 1. ✅ {activity 1}
1089
- 2. ✅ {activity 2}
1090
- 3. ⏳ {activity 3 - in progress}
1091
-
1092
- ### Artifacts Created
1093
- - `{path/to/artifact}` - {description}
1094
-
1095
- ---
1096
-
1097
- ### Checkpoint (if defined by bolt type)
1098
- > "{checkpoint prompt from bolt type definition}"
1099
- ```
1100
-
1101
- ---
1102
-
1103
- ## Output (Bolt Completed)
1104
-
1105
- ```markdown
1106
- ## Bolt Complete: {bolt-id}
1107
-
1108
- ### Summary
1109
- - **Type**: {bolt-type}
1110
- - **Duration**: {time elapsed}
1111
- - **Stages Completed**: {all stages from bolt type}
1112
-
1113
- ### Artifacts Produced
1114
- {List artifacts as defined by bolt type}
1115
-
1116
- ### Stories Delivered
1117
- - ✅ **{SSS}-{story-slug}**: Complete
1118
- - ✅ **{SSS}-{story-slug}**: Complete
1119
-
1120
- ### Actions
1121
-
1122
- 1 - **next**: Start next bolt
1123
- 2 - **list**: Review all bolts for this unit
1124
- 3 - **operations**: Proceed to Operations (if all complete)
1125
-
1126
- **Type a number or press Enter for suggested action.**
1127
- ```
1128
-
1129
- ---
1130
-
1131
- ## CRITICAL: Post-Bolt Options (NEVER SKIP)
1132
-
1133
- **After EVERY bolt completion, you MUST present the Actions menu above.**
1134
-
1135
- ```text
1136
- ┌─────────────────────────────────────────────────────────────┐
1137
- │ BOLT COMPLETED │
1138
- │ → You MUST show the Actions menu (1-next, 2-list, 3-ops) │
1139
- │ → Do NOT just ask "approve to continue?" │
1140
- │ → Let the user CHOOSE their next action │
1141
- └─────────────────────────────────────────────────────────────┘
1142
- ```
1143
-
1144
- **Failure Mode**: Asking "Ready to proceed to next bolt?" without showing options
1145
- **Correct Behavior**: Always show numbered Actions list and wait for user choice
1146
-
1147
- ---
1148
-
1149
- ## Bolt Completion Checklist
1150
-
1151
- **Use this checklist to verify all completion tasks are done:**
1152
-
1153
- ```text
1154
- □ Bolt file updated:
1155
- □ status: complete
1156
- □ completed: {timestamp}
1157
- □ current_stage: null
1158
-
1159
- □ Stories updated (Step 10):
1160
- □ Each story in bolt's stories array:
1161
- □ status: complete
1162
- □ implemented: true
1163
-
1164
- □ Status cascade checked (Step 11):
1165
- □ Unit status updated if all bolts complete
1166
- □ Intent status updated if all units complete
1167
-
1168
- □ Construction log updated:
1169
- □ "{bolt-id} completed" entry added
1170
- ```
529
+ **CRITICAL**: After EVERY bolt completion, present the Actions menu (1-next, 2-list, 3-ops). Do NOT skip.
1171
530
 
1172
531
  ---
1173
532