@juangcarmona/lighthouse-sdlc 0.17.0 → 0.18.0

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 (64) hide show
  1. package/README.md +15 -3
  2. package/capabilities.json +2 -1
  3. package/completion.md +2 -0
  4. package/epic-delivery.md +35 -0
  5. package/github-actions.md +19 -3
  6. package/host-contract.md +2 -0
  7. package/package.json +4 -1
  8. package/schemas/product-change.schema.json +23 -4
  9. package/schemas/stage-result.schema.json +23 -1
  10. package/skills/product-change/SKILL.md +3 -3
  11. package/skills/refine/SKILL.md +3 -2
  12. package/src/completion-actions.mjs +57 -13
  13. package/src/completion.mjs +1 -1
  14. package/src/contracts.mjs +10 -0
  15. package/src/decompose.mjs +5 -2
  16. package/src/epic-dispatch.mjs +59 -0
  17. package/src/epic-github.mjs +111 -0
  18. package/src/epic-journal.mjs +104 -0
  19. package/src/epic-merge.mjs +91 -0
  20. package/src/epic-native.mjs +465 -0
  21. package/src/epic.mjs +86 -0
  22. package/src/handoff.mjs +97 -0
  23. package/src/host-contract.mjs +22 -6
  24. package/src/implementation.mjs +33 -5
  25. package/src/install-workflows.mjs +1 -1
  26. package/src/issue-actions.mjs +360 -78
  27. package/src/opencode-execute.mjs +20 -0
  28. package/src/pr-state-actions.mjs +21 -7
  29. package/src/pr-state.mjs +18 -1
  30. package/src/process-publication.mjs +2 -1
  31. package/src/product-change-actions.mjs +158 -46
  32. package/src/product-change.mjs +92 -11
  33. package/src/proposal-review.mjs +16 -6
  34. package/src/proposal.mjs +13 -1
  35. package/src/stacked.mjs +14 -3
  36. package/src/stage-dispatch.mjs +66 -19
  37. package/src/stage-transition.mjs +151 -2
  38. package/src/triage.mjs +4 -2
  39. package/src/unattended-actions.mjs +39 -12
  40. package/src/unattended-planning-evidence.mjs +44 -0
  41. package/src/unattended.mjs +1 -1
  42. package/src/worker-maintenance.mjs +15 -3
  43. package/src/worker-recovery.mjs +204 -6
  44. package/workflows/lighthouse-sdlc-apply-product-change.lock.yml +97 -11
  45. package/workflows/lighthouse-sdlc-apply-product-change.md +75 -6
  46. package/workflows/lighthouse-sdlc-apply-review.lock.yml +33 -2
  47. package/workflows/lighthouse-sdlc-apply-review.md +29 -1
  48. package/workflows/lighthouse-sdlc-epic.yml +79 -0
  49. package/workflows/lighthouse-sdlc-implement.lock.yml +38 -2
  50. package/workflows/lighthouse-sdlc-implement.md +33 -2
  51. package/workflows/lighthouse-sdlc-integrate.lock.yml +4 -1
  52. package/workflows/lighthouse-sdlc-integrate.md +3 -0
  53. package/workflows/lighthouse-sdlc-product-change.lock.yml +39 -4
  54. package/workflows/lighthouse-sdlc-product-change.md +39 -6
  55. package/workflows/lighthouse-sdlc-propose.lock.yml +13 -1
  56. package/workflows/lighthouse-sdlc-propose.md +11 -1
  57. package/workflows/lighthouse-sdlc-refine.lock.yml +29 -2
  58. package/workflows/lighthouse-sdlc-refine.md +25 -2
  59. package/workflows/lighthouse-sdlc-review.lock.yml +4 -1
  60. package/workflows/lighthouse-sdlc-review.md +3 -0
  61. package/workflows/lighthouse-sdlc-router.yml +47 -3
  62. package/workflows/lighthouse-sdlc-triage.lock.yml +30 -3
  63. package/workflows/lighthouse-sdlc-triage.md +26 -3
  64. package/workflows/lighthouse-worker-maintenance.yml +70 -1
@@ -4,7 +4,7 @@ name: triage
4
4
  description: Assess an owner-admitted request without starting refinement.
5
5
  run-name: "triage #${{ inputs.issue }} · request ${{ inputs.dispatch-request }}"
6
6
  concurrency:
7
- group: lighthouse-issue-${{ inputs.issue }}
7
+ group: ${{ inputs.epic-parent && format('lighthouse-epic-child-{0}', inputs.issue) || format('lighthouse-issue-{0}', inputs.issue) }}
8
8
  cancel-in-progress: false
9
9
  queue: max
10
10
  job-discriminator: ${{ github.run_id }}
@@ -20,6 +20,10 @@ on:
20
20
  description: Authenticated owner admission receipt
21
21
  required: true
22
22
  type: string
23
+ epic-parent:
24
+ description: Authenticated parent issue for shared epic serialization
25
+ required: false
26
+ type: string
23
27
  needs: [prepare]
24
28
  if: needs.prepare.outputs.eligible == 'true'
25
29
  runs-on: [self-hosted, linux, lighthouse-workflow]
@@ -96,6 +100,10 @@ post-steps:
96
100
  retention-days: 14
97
101
  jobs:
98
102
  prepare:
103
+ concurrency:
104
+ group: ${{ inputs.epic-parent && format('lighthouse-issue-{0}', inputs.epic-parent) || format('lighthouse-prepare-{0}', github.run_id) }}
105
+ cancel-in-progress: false
106
+ queue: max
99
107
  name: Authorize and reserve issue
100
108
  runs-on: ubuntu-24.04
101
109
  outputs:
@@ -105,6 +113,7 @@ jobs:
105
113
  actions: read
106
114
  contents: read
107
115
  issues: write
116
+ pull-requests: read
108
117
  env:
109
118
  LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
110
119
  steps:
@@ -133,16 +142,22 @@ jobs:
133
142
  if: failure()
134
143
  env:
135
144
  GH_TOKEN: ${{ github.token }}
145
+ LIGHTHOUSE_PREPARE_FAILED: "true"
136
146
  run: node src/packages/sdlc/src/issue-actions.mjs cleanup
137
147
  publish:
148
+ concurrency:
149
+ group: ${{ inputs.epic-parent && format('lighthouse-issue-{0}', inputs.epic-parent) || format('lighthouse-publish-{0}', github.run_id) }}
150
+ cancel-in-progress: false
151
+ queue: max
138
152
  name: Validate, publish and release
139
- needs: [prepare, agent]
153
+ needs: [prepare, pre_activation, activation, agent]
140
154
  if: always() && needs.prepare.result == 'success' && needs.prepare.outputs.eligible == 'true'
141
155
  runs-on: ubuntu-24.04
142
156
  permissions:
143
- actions: read
157
+ actions: write
144
158
  contents: read
145
159
  issues: write
160
+ pull-requests: read
146
161
  env:
147
162
  LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
148
163
  steps:
@@ -177,7 +192,15 @@ jobs:
177
192
  if: always()
178
193
  env:
179
194
  GH_TOKEN: ${{ github.token }}
195
+ LIGHTHOUSE_PRE_ACTIVATION_RESULT: ${{ needs.pre_activation.result }}
196
+ LIGHTHOUSE_ACTIVATION_RESULT: ${{ needs.activation.result }}
197
+ LIGHTHOUSE_AGENT_RESULT: ${{ needs.agent.result }}
198
+ LIGHTHOUSE_PUBLISH_STATUS: ${{ job.status }}
180
199
  run: node src/packages/sdlc/src/issue-actions.mjs cleanup
200
+ - name: Request the verified product prerequisite
201
+ env:
202
+ GH_TOKEN: ${{ github.token }}
203
+ run: node src/packages/sdlc/src/issue-actions.mjs continue-product-gap
181
204
  ---
182
205
 
183
206
  # Triage the admitted request
@@ -36,6 +36,43 @@ jobs:
36
36
  env:
37
37
  GH_TOKEN: ${{ github.token }}
38
38
  run: node src/packages/sdlc/src/worker-maintenance.mjs scan
39
+ observe:
40
+ needs: scan
41
+ if: needs.scan.outputs.issues != '[]'
42
+ strategy:
43
+ fail-fast: false
44
+ max-parallel: 5
45
+ matrix:
46
+ issue: ${{ fromJSON(needs.scan.outputs.issues) }}
47
+ runs-on: ubuntu-24.04
48
+ permissions:
49
+ contents: read
50
+ actions: read
51
+ issues: read
52
+ pull-requests: read
53
+ env:
54
+ LIGHTHOUSE_ISSUE: ${{ matrix.issue }}
55
+ steps:
56
+ - uses: actions/checkout@v5
57
+ with:
58
+ repository: juangcarmona/lighthouse
59
+ ref: __LIGHTHOUSE_REF__
60
+ persist-credentials: false
61
+ - uses: actions/setup-node@v5
62
+ with:
63
+ node-version: 24
64
+ - name: Observe workers without changing issue state
65
+ env:
66
+ GH_TOKEN: ${{ github.token }}
67
+ run: node src/packages/sdlc/src/worker-maintenance.mjs observe
68
+ - name: Preserve observations
69
+ if: always()
70
+ uses: actions/upload-artifact@v7
71
+ with:
72
+ name: lighthouse-observation-${{ matrix.issue }}
73
+ path: ${{ runner.temp }}/lighthouse-maintenance-${{ github.run_id }}-${{ matrix.issue }}/observations.json
74
+ retention-days: 14
75
+ if-no-files-found: error
39
76
  reconcile:
40
77
  needs: scan
41
78
  if: needs.scan.outputs.issues != '[]'
@@ -45,7 +82,7 @@ jobs:
45
82
  matrix:
46
83
  issue: ${{ fromJSON(needs.scan.outputs.issues) }}
47
84
  concurrency:
48
- group: lighthouse-dispatch-${{ matrix.issue }}
85
+ group: lighthouse-issue-${{ matrix.issue }}
49
86
  cancel-in-progress: false
50
87
  queue: max
51
88
  runs-on: ubuntu-24.04
@@ -124,3 +161,35 @@ jobs:
124
161
  env:
125
162
  GH_TOKEN: ${{ github.token }}
126
163
  run: node src/packages/sdlc/src/worker-maintenance.mjs report
164
+ report-stalled:
165
+ needs: [scan, observe]
166
+ if: always() && needs.scan.result == 'success' && needs.scan.outputs.issues != '[]' && vars.LIGHTHOUSE_REPORT_INDEX_ISSUE != ''
167
+ concurrency:
168
+ group: lighthouse-worker-reports
169
+ cancel-in-progress: false
170
+ queue: max
171
+ runs-on: ubuntu-24.04
172
+ permissions:
173
+ contents: read
174
+ actions: read
175
+ issues: write
176
+ env:
177
+ LIGHTHOUSE_REPORT_INDEX_ISSUE: ${{ vars.LIGHTHOUSE_REPORT_INDEX_ISSUE }}
178
+ LIGHTHOUSE_OBSERVED_ISSUES: ${{ needs.scan.outputs.issues }}
179
+ steps:
180
+ - uses: actions/checkout@v5
181
+ with:
182
+ repository: juangcarmona/lighthouse
183
+ ref: __LIGHTHOUSE_REF__
184
+ persist-credentials: false
185
+ - uses: actions/setup-node@v5
186
+ with:
187
+ node-version: 24
188
+ - uses: actions/download-artifact@v8
189
+ with:
190
+ pattern: lighthouse-observation-*
191
+ path: ${{ runner.temp }}/worker-observations
192
+ - name: Reconcile and update worker error reports
193
+ env:
194
+ GH_TOKEN: ${{ github.token }}
195
+ run: node src/packages/sdlc/src/worker-maintenance.mjs report