@juangcarmona/lighthouse-sdlc 0.12.0 → 0.13.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.
@@ -1,41 +1,177 @@
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: Implement an owner-approved proposal in an isolated workspace and deliver a reviewable PR.
12
5
  on:
13
6
  workflow_call:
14
7
  inputs:
15
- route:
16
- description: Lighthouse route selected by the host.
17
- required: true
18
- type: string
19
- run-id:
20
- description: Stable Lighthouse run identifier.
8
+ issue:
21
9
  required: true
22
10
  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
11
+ needs: [prepare]
12
+ runs-on: [self-hosted, linux, lighthouse-workflow]
13
+ runs-on-slim: ubuntu-24.04
14
+ timeout-minutes: 55
15
+ permissions:
16
+ contents: read
17
+ engine:
18
+ id: opencode
19
+ command: node
33
20
  imports:
34
- - shared/lighthouse-sdlc-stage.md
21
+ - shared/lighthouse-opencode.md
22
+ # Subscription authentication runs inside the operator's Docker engine sandbox.
23
+ # This profile does not claim AWF network isolation or API-proxy credential isolation.
24
+ strict: false
25
+ features:
26
+ dangerously-disable-sandbox-agent: true
27
+ sandbox:
28
+ agent: false
29
+ tools:
30
+ github: false
31
+ safe-outputs:
32
+ create-issue: false
33
+ report-incomplete: false
34
+ threat-detection: false
35
+ report-failure-as-issue: false
36
+ report-missing-tool: false
37
+ report-missing-data: false
38
+ noop:
39
+ report-as-issue: false
40
+ network:
41
+ allowed: []
42
+ steps:
43
+ - name: Check out the authorized product revision
44
+ uses: actions/checkout@v5
45
+ with:
46
+ persist-credentials: false
47
+ - name: Load the pinned harness package
48
+ uses: actions/checkout@v5
49
+ with:
50
+ repository: juangcarmona/lighthouse
51
+ ref: __LIGHTHOUSE_REF__
52
+ path: tools
53
+ persist-credentials: false
54
+ - name: Load the authorized issue context
55
+ uses: actions/download-artifact@v8
56
+ with:
57
+ name: lighthouse-input-${{ inputs.issue }}-${{ github.run_attempt }}
58
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
59
+ post-steps:
60
+ - name: Validate the Lighthouse result
61
+ run: node tools/src/packages/sdlc/src/issue-actions.mjs validate
62
+ - name: Preserve the result and runtime receipt
63
+ if: always()
64
+ uses: actions/upload-artifact@v7
65
+ with:
66
+ name: lighthouse-result-${{ inputs.issue }}-${{ github.run_attempt }}
67
+ path: |
68
+ ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/envelope.json
69
+ ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/runtime.json
70
+ ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/changes.json
71
+ ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/checks.json
72
+ if-no-files-found: error
73
+ retention-days: 14
74
+ - name: Preserve implementation evidence
75
+ if: always()
76
+ uses: actions/upload-artifact@v7
77
+ with:
78
+ name: implementation-evidence-${{ inputs.issue }}-${{ github.run_attempt }}
79
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/evidence/
80
+ if-no-files-found: ignore
81
+ retention-days: 30
82
+ - name: Preserve OpenCode diagnostic events
83
+ if: always()
84
+ uses: actions/upload-artifact@v7
85
+ with:
86
+ name: opencode-events-${{ inputs.issue }}-${{ github.run_attempt }}
87
+ path: ${{ runner.temp }}/gh-aw/opencode-events-${{ github.run_id }}-${{ github.run_attempt }}.jsonl
88
+ if-no-files-found: ignore
89
+ retention-days: 14
90
+ jobs:
91
+ prepare:
92
+ name: Authorize and reserve issue
93
+ runs-on: ubuntu-24.04
94
+ permissions:
95
+ actions: read
96
+ contents: read
97
+ issues: write
98
+ env:
99
+ LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
100
+ steps:
101
+ - uses: actions/checkout@v5
102
+ with:
103
+ repository: juangcarmona/lighthouse
104
+ ref: __LIGHTHOUSE_REF__
105
+ persist-credentials: false
106
+ - uses: actions/setup-node@v5
107
+ with:
108
+ node-version: 24
109
+ - name: Collect verified owner intent and reserve the issue
110
+ id: prepare
111
+ env:
112
+ GH_TOKEN: ${{ github.token }}
113
+ run: node src/packages/sdlc/src/issue-actions.mjs prepare
114
+ - name: Preserve the execution request
115
+ uses: actions/upload-artifact@v7
116
+ with:
117
+ name: lighthouse-input-${{ inputs.issue }}-${{ github.run_attempt }}
118
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/
119
+ if-no-files-found: error
120
+ retention-days: 14
121
+ - name: Release reservation if preparation failed
122
+ if: failure()
123
+ env:
124
+ GH_TOKEN: ${{ github.token }}
125
+ run: node src/packages/sdlc/src/issue-actions.mjs cleanup
126
+ publish:
127
+ name: Validate, publish and release
128
+ needs: [prepare, agent]
129
+ if: always() && needs.prepare.result == 'success'
130
+ runs-on: ubuntu-24.04
131
+ permissions:
132
+ contents: write
133
+ issues: write
134
+ pull-requests: write
135
+ env:
136
+ LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
137
+ steps:
138
+ - uses: actions/checkout@v5
139
+ with:
140
+ repository: juangcarmona/lighthouse
141
+ ref: __LIGHTHOUSE_REF__
142
+ persist-credentials: false
143
+ - uses: actions/setup-node@v5
144
+ with:
145
+ node-version: 24
146
+ - name: Load the execution request
147
+ uses: actions/download-artifact@v8
148
+ with:
149
+ name: lighthouse-input-${{ inputs.issue }}-${{ github.run_attempt }}
150
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
151
+ - name: Load the candidate result
152
+ if: needs.agent.result == 'success'
153
+ uses: actions/download-artifact@v8
154
+ with:
155
+ name: lighthouse-result-${{ inputs.issue }}-${{ github.run_attempt }}
156
+ path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
157
+ - name: Recheck authority and publish the validated result
158
+ if: needs.agent.result == 'success'
159
+ env:
160
+ GH_TOKEN: ${{ github.token }}
161
+ run: node src/packages/sdlc/src/issue-actions.mjs publish
162
+ - name: Release the issue reservation
163
+ if: always()
164
+ env:
165
+ GH_TOKEN: ${{ github.token }}
166
+ run: node src/packages/sdlc/src/issue-actions.mjs cleanup
35
167
  ---
36
168
 
37
- # Lighthouse SDLC implement worker
169
+ # Implement the approved change
170
+
171
+ Execute `implement` using `/input/context.json` and `/harness/skills/implement/SKILL.md`. Read the merged proposal at `context.implementation.proposal.root`, the repository policy and the authorized scope. Work inside `/workspace`, a disposable writable copy; only `implementation.policy.paths` may change. The packaged harness and context remain read-only.
172
+
173
+ 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
174
 
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.
175
+ 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
176
 
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.
177
+ 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.