@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.
Files changed (47) hide show
  1. package/README.md +86 -3
  2. package/completion.md +50 -0
  3. package/execution-environments.md +43 -0
  4. package/package.json +3 -1
  5. package/schemas/execution-environment.schema.json +12 -0
  6. package/skills/implement/SKILL.md +9 -8
  7. package/skills/integrate/SKILL.md +7 -1
  8. package/skills/propose/SKILL.md +1 -1
  9. package/skills/review/SKILL.md +7 -1
  10. package/src/actions-artifact.mjs +17 -0
  11. package/src/completion-actions.mjs +134 -0
  12. package/src/completion.mjs +188 -0
  13. package/src/delivery-events.mjs +42 -0
  14. package/src/execution-environment.mjs +78 -0
  15. package/src/github-profile.mjs +9 -1
  16. package/src/host-contract.mjs +7 -3
  17. package/src/implementation-runtime.mjs +90 -0
  18. package/src/implementation.mjs +155 -0
  19. package/src/install-workflows.mjs +14 -5
  20. package/src/integration-evidence.mjs +80 -0
  21. package/src/issue-actions.mjs +325 -38
  22. package/src/observe-protection.mjs +24 -0
  23. package/src/opencode-execute.mjs +128 -20
  24. package/src/opencode-progress.mjs +48 -0
  25. package/src/process-publication.mjs +90 -0
  26. package/src/proposal-review.mjs +91 -0
  27. package/src/proposal.mjs +110 -0
  28. package/src/stage-dispatch.mjs +148 -0
  29. package/src/stage-transition.mjs +25 -0
  30. package/src/worker-maintenance.mjs +83 -0
  31. package/src/worker-recovery.mjs +106 -0
  32. package/src/worker-reports.mjs +150 -0
  33. package/workflows/lighthouse-sdlc-apply-review.lock.yml +1335 -0
  34. package/workflows/lighthouse-sdlc-apply-review.md +205 -0
  35. package/workflows/lighthouse-sdlc-implement.lock.yml +285 -1158
  36. package/workflows/lighthouse-sdlc-implement.md +193 -28
  37. package/workflows/lighthouse-sdlc-integrate.lock.yml +288 -1154
  38. package/workflows/lighthouse-sdlc-integrate.md +197 -28
  39. package/workflows/lighthouse-sdlc-propose.lock.yml +274 -1157
  40. package/workflows/lighthouse-sdlc-propose.md +183 -28
  41. package/workflows/lighthouse-sdlc-refine.lock.yml +263 -90
  42. package/workflows/lighthouse-sdlc-refine.md +45 -4
  43. package/workflows/lighthouse-sdlc-review.lock.yml +288 -1154
  44. package/workflows/lighthouse-sdlc-review.md +197 -28
  45. package/workflows/lighthouse-sdlc-router.yml +91 -17
  46. package/workflows/lighthouse-worker-maintenance.yml +126 -0
  47. package/workflows/shared/lighthouse-opencode.md +4 -2
@@ -1,41 +1,206 @@
1
1
  ---
2
- # Owned by @juangcarmona/lighthouse-sdlc. Compile with `gh aw compile`; do not edit the lock file.
2
+ # Owned by lighthouse-sdlc. Regenerate the lock with gh aw v0.93.2.
3
3
  name: Lighthouse SDLC implement
4
- description: Execute only the Lighthouse implementation stage and return its declared stage result.
5
- private: true
6
- runs-on: [self-hosted, linux, lighthouse-sdlc]
7
- runs-on-slim: ubuntu-24.04
8
- strict: true
9
- env:
10
- LIGHTHOUSE_STAGE: implement
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
- workflow_call:
12
+ # The required preparation job authenticates the originating owner request.
13
+ roles: all
14
+ workflow_dispatch:
14
15
  inputs:
15
- route:
16
- description: Lighthouse route selected by the host.
16
+ issue:
17
+ description: Source issue
17
18
  required: true
18
19
  type: string
19
- run-id:
20
- description: Stable Lighthouse run identifier.
20
+ dispatch-request:
21
+ description: Authenticated router receipt comment ID
21
22
  required: true
22
23
  type: string
23
- input:
24
- description: Compact JSON input for this stage.
25
- required: false
26
- type: string
27
- default: '{}'
28
- previous-stage:
29
- description: Previous stage artifact name.
30
- required: false
31
- type: string
32
- default: propose
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-sdlc-stage.md
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
- # Lighthouse SDLC implement worker
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
- Execute only `implement` by following `${{ env.LIGHTHOUSE_SKILL }}` and reading the proposal result from `/tmp/gh-aw/agent/previous/stage-result.json` when present; for a supervised run, use the predecessor context in `/tmp/gh-aw/agent/input.json`. Change only the approved slice and paths. ProductShape and ArcShape remain external authorities; retain their citations in evidence.
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
- Run the required checks, record changed paths and results, and write one valid result to `/tmp/gh-aw/agent/stage-result.json` with `stage: implement`, `gate: done`, implementation evidence in `output`, and separate evidence arrays. Do not invoke `integrate` or `review`. Stop at done, then call `noop` exactly once. A failed check stops the stage and preserves its evidence.
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.