@juangcarmona/lighthouse-sdlc 0.17.1 → 0.18.1
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/epic-delivery.md +35 -0
- package/github-actions.md +21 -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 +49 -12
- 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 +368 -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/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.mjs +1 -1
- package/src/worker-maintenance.mjs +15 -3
- package/src/worker-recovery.mjs +209 -8
- 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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"
|
|
1
|
+
# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"00b2d57d1b7519c4eeb8f10176673c2f626856b7050d2c6f41377d67866ba7b0","body_hash":"b6819b09222b408b8140fdc320e7270d45149ccb70442e528ef4f0ffa86e985c","compiler_version":"v0.93.2","agent_id":"opencode","engine_versions":{"opencode":"2.1.0"},"agent_image_runner":"[\"self-hosted\",\"linux\",\"lighthouse-workflow\"]"}
|
|
2
2
|
# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_DEFAULT_OTLP_ENDPOINT","GH_AW_DEFAULT_OTLP_HEADERS","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/checkout","sha":"fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09","version":"v5"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/setup-node","sha":"a0853c24544627f65ddf259abe73b1d18a591444","version":"v5"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"},{"repo":"github/gh-aw-actions/setup","sha":"d9128eb3ea40c18b77c76184eda03c0ff2608d79","version":"v0.93.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:41835613992df88f51e923bad486f96dfb2e6cda29f13e217df41833284ae382","pinned_image":"ghcr.io/github/gh-aw-node@sha256:41835613992df88f51e923bad486f96dfb2e6cda29f13e217df41833284ae382"}],"mcp_servers":[{"name":"safeoutputs","tools":["noop"]}],"threat_detection":{"mode":"disabled"},"admission":false}
|
|
3
3
|
# This file was automatically generated by gh-aw (v0.93.2). DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md
|
|
4
4
|
#
|
|
@@ -69,6 +69,10 @@ on:
|
|
|
69
69
|
description: Authenticated owner admission receipt
|
|
70
70
|
required: true
|
|
71
71
|
type: string
|
|
72
|
+
epic-parent:
|
|
73
|
+
description: Authenticated parent issue for shared epic serialization
|
|
74
|
+
required: false
|
|
75
|
+
type: string
|
|
72
76
|
issue:
|
|
73
77
|
description: Source issue
|
|
74
78
|
required: true
|
|
@@ -79,7 +83,7 @@ permissions: {}
|
|
|
79
83
|
|
|
80
84
|
concurrency:
|
|
81
85
|
cancel-in-progress: false
|
|
82
|
-
group: lighthouse-issue
|
|
86
|
+
group: ${{ inputs.epic-parent && format('lighthouse-epic-child-{0}', inputs.issue) || format('lighthouse-issue-{0}', inputs.issue) }}
|
|
83
87
|
queue: max
|
|
84
88
|
|
|
85
89
|
run-name: "triage #${{ inputs.issue }} · request ${{ inputs.dispatch-request }}"
|
|
@@ -1221,6 +1225,12 @@ jobs:
|
|
|
1221
1225
|
actions: read
|
|
1222
1226
|
contents: read
|
|
1223
1227
|
issues: write
|
|
1228
|
+
pull-requests: read
|
|
1229
|
+
concurrency:
|
|
1230
|
+
cancel-in-progress: false
|
|
1231
|
+
group: ${{ inputs.epic-parent && format('lighthouse-issue-{0}', inputs.epic-parent) || format('lighthouse-prepare-{0}', github.run_id) }}
|
|
1232
|
+
queue: max
|
|
1233
|
+
|
|
1224
1234
|
env:
|
|
1225
1235
|
LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
|
|
1226
1236
|
outputs:
|
|
@@ -1262,19 +1272,28 @@ jobs:
|
|
|
1262
1272
|
run: node src/packages/sdlc/src/issue-actions.mjs cleanup
|
|
1263
1273
|
env:
|
|
1264
1274
|
GH_TOKEN: ${{ github.token }}
|
|
1275
|
+
LIGHTHOUSE_PREPARE_FAILED: "true"
|
|
1265
1276
|
|
|
1266
1277
|
publish:
|
|
1267
1278
|
name: Validate, publish and release
|
|
1268
1279
|
needs:
|
|
1280
|
+
- activation
|
|
1269
1281
|
- agent
|
|
1282
|
+
- pre_activation
|
|
1270
1283
|
- prepare
|
|
1271
1284
|
if: always() && needs.prepare.result == 'success' && needs.prepare.outputs.eligible == 'true'
|
|
1272
1285
|
runs-on: ubuntu-24.04
|
|
1273
1286
|
# Permissions for the publish job (workflow permissions default to none).
|
|
1274
1287
|
permissions:
|
|
1275
|
-
actions:
|
|
1288
|
+
actions: write
|
|
1276
1289
|
contents: read
|
|
1277
1290
|
issues: write
|
|
1291
|
+
pull-requests: read
|
|
1292
|
+
concurrency:
|
|
1293
|
+
cancel-in-progress: false
|
|
1294
|
+
group: ${{ inputs.epic-parent && format('lighthouse-issue-{0}', inputs.epic-parent) || format('lighthouse-publish-{0}', github.run_id) }}
|
|
1295
|
+
queue: max
|
|
1296
|
+
|
|
1278
1297
|
env:
|
|
1279
1298
|
LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
|
|
1280
1299
|
steps:
|
|
@@ -1319,3 +1338,11 @@ jobs:
|
|
|
1319
1338
|
run: node src/packages/sdlc/src/issue-actions.mjs cleanup
|
|
1320
1339
|
env:
|
|
1321
1340
|
GH_TOKEN: ${{ github.token }}
|
|
1341
|
+
LIGHTHOUSE_ACTIVATION_RESULT: ${{ needs.activation.result }}
|
|
1342
|
+
LIGHTHOUSE_AGENT_RESULT: ${{ needs.agent.result }}
|
|
1343
|
+
LIGHTHOUSE_PRE_ACTIVATION_RESULT: ${{ needs.pre_activation.result }}
|
|
1344
|
+
LIGHTHOUSE_PUBLISH_STATUS: ${{ job.status }}
|
|
1345
|
+
- name: Request the verified product prerequisite
|
|
1346
|
+
run: node src/packages/sdlc/src/issue-actions.mjs continue-product-gap
|
|
1347
|
+
env:
|
|
1348
|
+
GH_TOKEN: ${{ github.token }}
|
|
@@ -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
|