@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.
- package/README.md +15 -3
- package/capabilities.json +2 -1
- package/completion.md +2 -0
- package/epic-delivery.md +35 -0
- package/github-actions.md +19 -3
- package/host-contract.md +2 -0
- package/package.json +4 -1
- package/schemas/product-change.schema.json +23 -4
- package/schemas/stage-result.schema.json +23 -1
- package/skills/product-change/SKILL.md +3 -3
- package/skills/refine/SKILL.md +3 -2
- package/src/completion-actions.mjs +57 -13
- package/src/completion.mjs +1 -1
- package/src/contracts.mjs +10 -0
- package/src/decompose.mjs +5 -2
- package/src/epic-dispatch.mjs +59 -0
- package/src/epic-github.mjs +111 -0
- package/src/epic-journal.mjs +104 -0
- package/src/epic-merge.mjs +91 -0
- package/src/epic-native.mjs +465 -0
- package/src/epic.mjs +86 -0
- package/src/handoff.mjs +97 -0
- package/src/host-contract.mjs +22 -6
- package/src/implementation.mjs +33 -5
- package/src/install-workflows.mjs +1 -1
- package/src/issue-actions.mjs +360 -78
- package/src/opencode-execute.mjs +20 -0
- package/src/pr-state-actions.mjs +21 -7
- package/src/pr-state.mjs +18 -1
- package/src/process-publication.mjs +2 -1
- package/src/product-change-actions.mjs +158 -46
- package/src/product-change.mjs +92 -11
- package/src/proposal-review.mjs +16 -6
- package/src/proposal.mjs +13 -1
- package/src/stacked.mjs +14 -3
- package/src/stage-dispatch.mjs +66 -19
- package/src/stage-transition.mjs +151 -2
- package/src/triage.mjs +4 -2
- package/src/unattended-actions.mjs +39 -12
- package/src/unattended-planning-evidence.mjs +44 -0
- package/src/unattended.mjs +1 -1
- package/src/worker-maintenance.mjs +15 -3
- package/src/worker-recovery.mjs +204 -6
- package/workflows/lighthouse-sdlc-apply-product-change.lock.yml +97 -11
- package/workflows/lighthouse-sdlc-apply-product-change.md +75 -6
- package/workflows/lighthouse-sdlc-apply-review.lock.yml +33 -2
- package/workflows/lighthouse-sdlc-apply-review.md +29 -1
- package/workflows/lighthouse-sdlc-epic.yml +79 -0
- package/workflows/lighthouse-sdlc-implement.lock.yml +38 -2
- package/workflows/lighthouse-sdlc-implement.md +33 -2
- package/workflows/lighthouse-sdlc-integrate.lock.yml +4 -1
- package/workflows/lighthouse-sdlc-integrate.md +3 -0
- package/workflows/lighthouse-sdlc-product-change.lock.yml +39 -4
- package/workflows/lighthouse-sdlc-product-change.md +39 -6
- package/workflows/lighthouse-sdlc-propose.lock.yml +13 -1
- package/workflows/lighthouse-sdlc-propose.md +11 -1
- package/workflows/lighthouse-sdlc-refine.lock.yml +29 -2
- package/workflows/lighthouse-sdlc-refine.md +25 -2
- package/workflows/lighthouse-sdlc-review.lock.yml +4 -1
- package/workflows/lighthouse-sdlc-review.md +3 -0
- package/workflows/lighthouse-sdlc-router.yml +47 -3
- package/workflows/lighthouse-sdlc-triage.lock.yml +30 -3
- package/workflows/lighthouse-sdlc-triage.md +26 -3
- 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
|
|
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:
|
|
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-
|
|
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
|