@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
|
@@ -1,41 +1,206 @@
|
|
|
1
1
|
---
|
|
2
|
-
# Owned by
|
|
2
|
+
# Owned by lighthouse-sdlc. Regenerate the lock with gh aw v0.93.2.
|
|
3
3
|
name: Lighthouse SDLC implement
|
|
4
|
-
description:
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
LIGHTHOUSE_SKILL: node_modules/@juangcarmona/lighthouse-sdlc/skills/implement/SKILL.md
|
|
4
|
+
description: Plan and implement an authorized issue in an isolated workspace and deliver a reviewable PR.
|
|
5
|
+
run-name: "implement #${{ 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 }}
|
|
12
11
|
on:
|
|
13
|
-
|
|
12
|
+
# The required preparation job authenticates the originating owner request.
|
|
13
|
+
roles: all
|
|
14
|
+
workflow_dispatch:
|
|
14
15
|
inputs:
|
|
15
|
-
|
|
16
|
-
description:
|
|
16
|
+
issue:
|
|
17
|
+
description: Source issue
|
|
17
18
|
required: true
|
|
18
19
|
type: string
|
|
19
|
-
|
|
20
|
-
description:
|
|
20
|
+
dispatch-request:
|
|
21
|
+
description: Authenticated router receipt comment ID
|
|
21
22
|
required: true
|
|
22
23
|
type: string
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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_STAGE: implement
|
|
32
|
+
LIGHTHOUSE_DISPATCH_REQUIRED: "true"
|
|
33
|
+
permissions:
|
|
34
|
+
contents: read
|
|
35
|
+
engine:
|
|
36
|
+
id: opencode
|
|
37
|
+
command: node
|
|
33
38
|
imports:
|
|
34
|
-
- shared/lighthouse-
|
|
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-implement-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-implement-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
|
+
name: Authorize and reserve issue
|
|
115
|
+
runs-on: ubuntu-24.04
|
|
116
|
+
permissions:
|
|
117
|
+
actions: read
|
|
118
|
+
contents: read
|
|
119
|
+
issues: write
|
|
120
|
+
env:
|
|
121
|
+
LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
|
|
122
|
+
steps:
|
|
123
|
+
- uses: actions/checkout@v5
|
|
124
|
+
with:
|
|
125
|
+
repository: juangcarmona/lighthouse
|
|
126
|
+
ref: __LIGHTHOUSE_REF__
|
|
127
|
+
persist-credentials: false
|
|
128
|
+
- uses: actions/setup-node@v5
|
|
129
|
+
with:
|
|
130
|
+
node-version: 24
|
|
131
|
+
- name: Collect verified owner intent and reserve the issue
|
|
132
|
+
id: prepare
|
|
133
|
+
env:
|
|
134
|
+
GH_TOKEN: ${{ github.token }}
|
|
135
|
+
run: node src/packages/sdlc/src/issue-actions.mjs prepare
|
|
136
|
+
- name: Preserve the execution request
|
|
137
|
+
if: steps.prepare.outputs.eligible == 'true'
|
|
138
|
+
uses: actions/upload-artifact@v7
|
|
139
|
+
with:
|
|
140
|
+
name: lighthouse-implement-input-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
141
|
+
path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/
|
|
142
|
+
if-no-files-found: error
|
|
143
|
+
retention-days: 14
|
|
144
|
+
- name: Release reservation if preparation failed
|
|
145
|
+
if: failure()
|
|
146
|
+
env:
|
|
147
|
+
GH_TOKEN: ${{ github.token }}
|
|
148
|
+
run: node src/packages/sdlc/src/issue-actions.mjs cleanup
|
|
149
|
+
publish:
|
|
150
|
+
name: Validate, publish and release
|
|
151
|
+
needs: [prepare, agent]
|
|
152
|
+
if: always() && needs.prepare.result == 'success' && needs.prepare.outputs.eligible == 'true'
|
|
153
|
+
runs-on: ubuntu-24.04
|
|
154
|
+
permissions:
|
|
155
|
+
actions: write
|
|
156
|
+
contents: write
|
|
157
|
+
issues: write
|
|
158
|
+
pull-requests: write
|
|
159
|
+
env:
|
|
160
|
+
LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
|
|
161
|
+
steps:
|
|
162
|
+
- uses: actions/checkout@v5
|
|
163
|
+
with:
|
|
164
|
+
repository: juangcarmona/lighthouse
|
|
165
|
+
ref: __LIGHTHOUSE_REF__
|
|
166
|
+
persist-credentials: false
|
|
167
|
+
- uses: actions/setup-node@v5
|
|
168
|
+
with:
|
|
169
|
+
node-version: 24
|
|
170
|
+
- name: Load the execution request
|
|
171
|
+
uses: actions/download-artifact@v8
|
|
172
|
+
with:
|
|
173
|
+
name: lighthouse-implement-input-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
174
|
+
path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
|
|
175
|
+
- name: Load the candidate result
|
|
176
|
+
if: needs.agent.result == 'success'
|
|
177
|
+
uses: actions/download-artifact@v8
|
|
178
|
+
with:
|
|
179
|
+
name: lighthouse-implement-result-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
180
|
+
path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
|
|
181
|
+
- name: Require an executed agent
|
|
182
|
+
if: needs.agent.result != 'success'
|
|
183
|
+
run: |
|
|
184
|
+
echo 'The authorized agent did not complete successfully; inspect its execution.' >&2
|
|
185
|
+
exit 1
|
|
186
|
+
- name: Recheck authority and publish the validated result
|
|
187
|
+
if: needs.agent.result == 'success'
|
|
188
|
+
env:
|
|
189
|
+
GH_TOKEN: ${{ github.token }}
|
|
190
|
+
run: node src/packages/sdlc/src/issue-actions.mjs publish
|
|
191
|
+
- name: Release the issue reservation
|
|
192
|
+
if: always()
|
|
193
|
+
env:
|
|
194
|
+
GH_TOKEN: ${{ github.token }}
|
|
195
|
+
run: node src/packages/sdlc/src/issue-actions.mjs cleanup
|
|
35
196
|
---
|
|
36
197
|
|
|
37
|
-
#
|
|
198
|
+
# Plan and implement the issue
|
|
199
|
+
|
|
200
|
+
Execute `implement` using `/input/context.json` and `/harness/skills/implement/SKILL.md`. Read the issue, owner answers and repository policy. Use `context.proposal.instructions` to create or update the OpenSpec proposal, design, specifications and tasks in `context.proposal.root` before implementing those tasks. Planning artifacts and code belong to the same implementation PR. Work inside `/workspace`, a disposable writable copy; only `implementation.policy.paths` may change. The packaged harness and context remain read-only.
|
|
201
|
+
|
|
202
|
+
Report public progress before inspection and whenever a decision, test result or blocker changes the plan. Explain the evidence briefly; avoid dumping tool payloads. Use the shell to install public dependencies, edit source and run checks. Preserve content and author-owned work. Record completed tasks accurately. Store screenshots, test reports and a concise retrospective in `/output/evidence/`; the host retains them as Actions artifacts.
|
|
38
203
|
|
|
39
|
-
|
|
204
|
+
Run the commands in `implementation.policy.checks` and relevant repository checks. The host reruns those commands independently on a clean candidate without provider or GitHub credentials. Return `/output/envelope.json` with the supplied identity. A required human visual/content decision is a real blocker: use `blocked`, record it in `pendingReview`, and still deliver the reviewable code. A passed `done` assessment requires all required evidence and reviews. Reserve time to write the envelope within the 30-minute engine limit.
|
|
40
205
|
|
|
41
|
-
|
|
206
|
+
The separate publisher rechecks owner authority, source revision, write scope and check receipts before opening a fresh PR. It never updates an existing branch, merges, closes the issue or starts another stage. End after writing the envelope; the adapter records gh-aw completion.
|