@juangcarmona/lighthouse-sdlc 0.12.0 → 0.14.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 +86 -3
- package/completion.md +50 -0
- package/execution-environments.md +43 -0
- package/package.json +3 -1
- package/schemas/execution-environment.schema.json +12 -0
- package/skills/implement/SKILL.md +9 -8
- package/skills/integrate/SKILL.md +7 -1
- package/skills/propose/SKILL.md +1 -1
- package/skills/review/SKILL.md +7 -1
- package/src/actions-artifact.mjs +17 -0
- package/src/completion-actions.mjs +134 -0
- package/src/completion.mjs +188 -0
- package/src/delivery-events.mjs +42 -0
- package/src/execution-environment.mjs +78 -0
- package/src/github-profile.mjs +9 -1
- package/src/host-contract.mjs +7 -3
- package/src/implementation-runtime.mjs +90 -0
- package/src/implementation.mjs +155 -0
- package/src/install-workflows.mjs +14 -5
- package/src/integration-evidence.mjs +80 -0
- package/src/issue-actions.mjs +325 -38
- package/src/observe-protection.mjs +24 -0
- package/src/opencode-execute.mjs +128 -20
- package/src/opencode-progress.mjs +48 -0
- package/src/process-publication.mjs +90 -0
- package/src/proposal-review.mjs +91 -0
- package/src/proposal.mjs +110 -0
- package/src/stage-dispatch.mjs +148 -0
- package/src/stage-transition.mjs +25 -0
- package/src/worker-maintenance.mjs +83 -0
- package/src/worker-recovery.mjs +106 -0
- package/src/worker-reports.mjs +150 -0
- package/workflows/lighthouse-sdlc-apply-review.lock.yml +1335 -0
- package/workflows/lighthouse-sdlc-apply-review.md +205 -0
- package/workflows/lighthouse-sdlc-implement.lock.yml +285 -1158
- package/workflows/lighthouse-sdlc-implement.md +193 -28
- package/workflows/lighthouse-sdlc-integrate.lock.yml +288 -1154
- package/workflows/lighthouse-sdlc-integrate.md +197 -28
- package/workflows/lighthouse-sdlc-propose.lock.yml +274 -1157
- package/workflows/lighthouse-sdlc-propose.md +183 -28
- package/workflows/lighthouse-sdlc-refine.lock.yml +263 -90
- package/workflows/lighthouse-sdlc-refine.md +45 -4
- package/workflows/lighthouse-sdlc-review.lock.yml +288 -1154
- package/workflows/lighthouse-sdlc-review.md +197 -28
- package/workflows/lighthouse-sdlc-router.yml +91 -17
- package/workflows/lighthouse-worker-maintenance.yml +126 -0
- package/workflows/shared/lighthouse-opencode.md +4 -2
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
---
|
|
2
|
+
# Owned by lighthouse-sdlc. Regenerate the lock with gh aw v0.93.2.
|
|
3
|
+
name: Lighthouse SDLC apply-review
|
|
4
|
+
description: Apply authorized feedback to the existing proposal or implementation PR.
|
|
5
|
+
run-name: "apply-review #${{ inputs.issue }} · request ${{ inputs.dispatch-request }}"
|
|
6
|
+
concurrency:
|
|
7
|
+
group: lighthouse-issue-${{ inputs.issue }}
|
|
8
|
+
cancel-in-progress: false
|
|
9
|
+
queue: max
|
|
10
|
+
job-discriminator: ${{ github.run_id }}
|
|
11
|
+
on:
|
|
12
|
+
# The required preparation job authenticates the originating owner request.
|
|
13
|
+
roles: all
|
|
14
|
+
workflow_dispatch:
|
|
15
|
+
inputs:
|
|
16
|
+
issue:
|
|
17
|
+
description: Source issue
|
|
18
|
+
required: true
|
|
19
|
+
type: string
|
|
20
|
+
dispatch-request:
|
|
21
|
+
description: Authenticated router receipt comment ID
|
|
22
|
+
required: true
|
|
23
|
+
type: string
|
|
24
|
+
needs: [prepare]
|
|
25
|
+
if: needs.prepare.outputs.eligible == 'true'
|
|
26
|
+
runs-on: [self-hosted, linux, lighthouse-workflow]
|
|
27
|
+
runs-on-slim: ubuntu-24.04
|
|
28
|
+
timeout-minutes: 55
|
|
29
|
+
env:
|
|
30
|
+
LIGHTHOUSE_RECOVERY_ENABLED: ${{ vars.LIGHTHOUSE_RECOVERY_ENABLED }}
|
|
31
|
+
LIGHTHOUSE_WORKER: apply-review
|
|
32
|
+
LIGHTHOUSE_DISPATCH_REQUIRED: "true"
|
|
33
|
+
permissions:
|
|
34
|
+
contents: read
|
|
35
|
+
engine:
|
|
36
|
+
id: opencode
|
|
37
|
+
command: node
|
|
38
|
+
imports:
|
|
39
|
+
- shared/lighthouse-opencode.md
|
|
40
|
+
# Subscription authentication runs inside the operator's Docker engine sandbox.
|
|
41
|
+
# This profile does not claim AWF network isolation or API-proxy credential isolation.
|
|
42
|
+
strict: false
|
|
43
|
+
features:
|
|
44
|
+
dangerously-disable-sandbox-agent: true
|
|
45
|
+
sandbox:
|
|
46
|
+
agent: false
|
|
47
|
+
tools:
|
|
48
|
+
github: false
|
|
49
|
+
safe-outputs:
|
|
50
|
+
create-issue: false
|
|
51
|
+
report-incomplete: false
|
|
52
|
+
threat-detection: false
|
|
53
|
+
report-failure-as-issue: false
|
|
54
|
+
report-missing-tool: false
|
|
55
|
+
report-missing-data: false
|
|
56
|
+
noop:
|
|
57
|
+
report-as-issue: false
|
|
58
|
+
network:
|
|
59
|
+
allowed: []
|
|
60
|
+
steps:
|
|
61
|
+
- name: Check out the authorized product revision
|
|
62
|
+
uses: actions/checkout@v5
|
|
63
|
+
with:
|
|
64
|
+
persist-credentials: false
|
|
65
|
+
ref: ${{ needs.prepare.outputs.source_revision }}
|
|
66
|
+
- name: Load the pinned harness package
|
|
67
|
+
uses: actions/checkout@v5
|
|
68
|
+
with:
|
|
69
|
+
repository: juangcarmona/lighthouse
|
|
70
|
+
ref: __LIGHTHOUSE_REF__
|
|
71
|
+
path: tools
|
|
72
|
+
persist-credentials: false
|
|
73
|
+
- name: Load the authorized issue context
|
|
74
|
+
uses: actions/download-artifact@v8
|
|
75
|
+
with:
|
|
76
|
+
name: lighthouse-${{ needs.prepare.outputs.artifact_prefix }}input-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
77
|
+
path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
|
|
78
|
+
post-steps:
|
|
79
|
+
- name: Validate the Lighthouse result
|
|
80
|
+
run: node tools/src/packages/sdlc/src/issue-actions.mjs validate
|
|
81
|
+
- name: Preserve the result and runtime receipt
|
|
82
|
+
if: always()
|
|
83
|
+
uses: actions/upload-artifact@v7
|
|
84
|
+
with:
|
|
85
|
+
name: lighthouse-${{ needs.prepare.outputs.artifact_prefix }}result-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
86
|
+
path: |
|
|
87
|
+
${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/envelope.json
|
|
88
|
+
${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/runtime.json
|
|
89
|
+
${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/changes.json
|
|
90
|
+
${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/checks.json
|
|
91
|
+
if-no-files-found: error
|
|
92
|
+
retention-days: 14
|
|
93
|
+
- name: Preserve implementation evidence
|
|
94
|
+
if: always()
|
|
95
|
+
uses: actions/upload-artifact@v7
|
|
96
|
+
with:
|
|
97
|
+
name: implementation-evidence-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
98
|
+
path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/evidence/
|
|
99
|
+
if-no-files-found: ignore
|
|
100
|
+
retention-days: 30
|
|
101
|
+
- name: Preserve OpenCode diagnostic events
|
|
102
|
+
if: always()
|
|
103
|
+
uses: actions/upload-artifact@v7
|
|
104
|
+
with:
|
|
105
|
+
name: opencode-implement-events-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
106
|
+
path: ${{ runner.temp }}/gh-aw/opencode-events-${{ github.run_id }}-${{ github.run_attempt }}.jsonl
|
|
107
|
+
if-no-files-found: ignore
|
|
108
|
+
retention-days: 14
|
|
109
|
+
jobs:
|
|
110
|
+
prepare:
|
|
111
|
+
outputs:
|
|
112
|
+
eligible: ${{ steps.prepare.outputs.eligible }}
|
|
113
|
+
source_revision: ${{ steps.prepare.outputs.source_revision }}
|
|
114
|
+
artifact_prefix: ${{ steps.prepare.outputs.artifact_prefix }}
|
|
115
|
+
name: Authorize and reserve issue
|
|
116
|
+
runs-on: ubuntu-24.04
|
|
117
|
+
permissions:
|
|
118
|
+
actions: read
|
|
119
|
+
contents: read
|
|
120
|
+
issues: write
|
|
121
|
+
env:
|
|
122
|
+
LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
|
|
123
|
+
steps:
|
|
124
|
+
- uses: actions/checkout@v5
|
|
125
|
+
with:
|
|
126
|
+
repository: juangcarmona/lighthouse
|
|
127
|
+
ref: __LIGHTHOUSE_REF__
|
|
128
|
+
persist-credentials: false
|
|
129
|
+
- uses: actions/setup-node@v5
|
|
130
|
+
with:
|
|
131
|
+
node-version: 24
|
|
132
|
+
- name: Collect verified owner intent and reserve the issue
|
|
133
|
+
id: prepare
|
|
134
|
+
env:
|
|
135
|
+
GH_TOKEN: ${{ github.token }}
|
|
136
|
+
run: node src/packages/sdlc/src/issue-actions.mjs prepare
|
|
137
|
+
- name: Preserve the execution request
|
|
138
|
+
if: steps.prepare.outputs.eligible == 'true'
|
|
139
|
+
uses: actions/upload-artifact@v7
|
|
140
|
+
with:
|
|
141
|
+
name: lighthouse-${{ steps.prepare.outputs.artifact_prefix }}input-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
142
|
+
path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/
|
|
143
|
+
if-no-files-found: error
|
|
144
|
+
retention-days: 14
|
|
145
|
+
- name: Release reservation if preparation failed
|
|
146
|
+
if: failure()
|
|
147
|
+
env:
|
|
148
|
+
GH_TOKEN: ${{ github.token }}
|
|
149
|
+
run: node src/packages/sdlc/src/issue-actions.mjs cleanup
|
|
150
|
+
publish:
|
|
151
|
+
name: Validate, publish and release
|
|
152
|
+
needs: [prepare, agent]
|
|
153
|
+
if: always() && needs.prepare.result == 'success' && needs.prepare.outputs.eligible == 'true'
|
|
154
|
+
runs-on: ubuntu-24.04
|
|
155
|
+
permissions:
|
|
156
|
+
actions: write
|
|
157
|
+
contents: write
|
|
158
|
+
issues: write
|
|
159
|
+
pull-requests: write
|
|
160
|
+
env:
|
|
161
|
+
LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
|
|
162
|
+
steps:
|
|
163
|
+
- uses: actions/checkout@v5
|
|
164
|
+
with:
|
|
165
|
+
repository: juangcarmona/lighthouse
|
|
166
|
+
ref: __LIGHTHOUSE_REF__
|
|
167
|
+
persist-credentials: false
|
|
168
|
+
- uses: actions/setup-node@v5
|
|
169
|
+
with:
|
|
170
|
+
node-version: 24
|
|
171
|
+
- name: Load the execution request
|
|
172
|
+
uses: actions/download-artifact@v8
|
|
173
|
+
with:
|
|
174
|
+
name: lighthouse-${{ needs.prepare.outputs.artifact_prefix }}input-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
175
|
+
path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
|
|
176
|
+
- name: Load the candidate result
|
|
177
|
+
if: needs.agent.result == 'success'
|
|
178
|
+
uses: actions/download-artifact@v8
|
|
179
|
+
with:
|
|
180
|
+
name: lighthouse-${{ needs.prepare.outputs.artifact_prefix }}result-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
181
|
+
path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
|
|
182
|
+
- name: Require an executed agent
|
|
183
|
+
if: needs.agent.result != 'success'
|
|
184
|
+
run: |
|
|
185
|
+
echo 'The authorized agent did not complete successfully; inspect its execution.' >&2
|
|
186
|
+
exit 1
|
|
187
|
+
- name: Recheck authority and publish the validated result
|
|
188
|
+
if: needs.agent.result == 'success'
|
|
189
|
+
env:
|
|
190
|
+
GH_TOKEN: ${{ github.token }}
|
|
191
|
+
run: node src/packages/sdlc/src/issue-actions.mjs publish
|
|
192
|
+
- name: Release the issue reservation
|
|
193
|
+
if: always()
|
|
194
|
+
env:
|
|
195
|
+
GH_TOKEN: ${{ github.token }}
|
|
196
|
+
run: node src/packages/sdlc/src/issue-actions.mjs cleanup
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
# Apply the owner feedback
|
|
200
|
+
|
|
201
|
+
Read `/input/context.json` and execute its supplied lifecycle skill and envelope contract. The stage remains `propose` or `implement`; this worker performs only the authorized correction on the existing PR. Read the full bounded conversation in `context.proposalReview` or `context.review`. Distinguish already-satisfied feedback from outstanding requests and preserve unrelated work. Ambiguous or conflicting requests require a precise question and a blocked result.
|
|
202
|
+
|
|
203
|
+
For a proposal, return the complete revised OpenSpec artifacts using the supplied provider instructions and keep implementation tasks pending. For implementation, update only the configured paths in the disposable workspace, run the configured checks, and retain evidence under `/output/evidence/`. The host independently verifies the candidate and rechecks the PR head and discussion before updating the same branch. It cannot merge through this worker.
|
|
204
|
+
|
|
205
|
+
Write `/output/envelope.json` with the supplied stage and identity. Report successful correction only when the required checks and decisions are satisfied. Stop after producing the candidate; publication belongs to the trusted host.
|