Conversation
|
Claude finished @stdevMac's task in 2m 19s —— View job Code Review
SummaryThe workflow is well-structured and follows GitHub's security hardening guidelines correctly — all Two medium findings should be addressed before merge, plus two low-severity notes. Findings
What looks good
|
b7ca642 to
196fff1
Compare
196fff1 to
ec5c982
Compare
|
@claude review again |
|
Claude finished @stdevMac's task in 1m 22s —— View job Code Review
SummaryRe-review of the same file. The four findings from the first pass remain unaddressed. One new medium-severity finding was identified this time: the secret existence guard is incomplete. All other security properties continue to look correct (injection hardening via Findings
What looks good
|
ec5c982 to
9ea9fd1
Compare
|
@claude another review |
|
Claude finished @stdevMac's task in 1m 42s —— View job Code Review (Pass 3)
SummaryAll three medium findings from the previous reviews have been addressed in the current file. The workflow is now in good shape. One new low-severity note was identified. The remaining Prior findings — status update
New finding
What looks good
|
|
|
||
| if [[ -z "${GH_TOKEN:-}" || -z "${PROJECT_ID:-}" || -z "${STATUS_FIELD_ID:-}" \ | ||
| || -z "${OPT_BACKLOG:-}" || -z "${OPT_TRIAGE:-}" || -z "${OPT_TESTING:-}" \ | ||
| || -z "${OPT_DONE:-}" ]]; then |
There was a problem hiding this comment.
Low — OPT_DONE over-required for issues.assigned path
OPT_DONE is only used in the pull_request_target.closed branch, but it's required in the guard for both event types. If an operator configures all secrets except OPT_DONE, the issues.assigned → Triage sync silently skips with no indication of which secret is missing.
This is a conservative choice that's safe, but consider splitting the guard to only require the secrets actually needed per event type, or at minimum log which variable is missing:
| || -z "${OPT_DONE:-}" ]]; then | |
| missing="" | |
| for var in GH_TOKEN PROJECT_ID STATUS_FIELD_ID OPT_BACKLOG OPT_TRIAGE OPT_TESTING OPT_DONE; do | |
| [[ -z "${!var:-}" ]] && missing="$missing $var" | |
| done | |
| if [[ -n "$missing" ]]; then | |
| echo "Required secrets not configured ($missing); skipping." >&2 | |
| exit 0 | |
| fi |
This way the operator immediately knows which secret to add rather than debugging a silent skip.
9ea9fd1 to
4266ae3
Compare
Changes
.github/workflows/project-stability-sync.ymlto keep project 14 (Client Stability) board status in sync with issue and PR activity.issues.assigned→ 🏗 Triage (only when the item is currently Backlog or unset, so re-assignment never resets progress)pull_request_target.closed(merged only) → linked issues to 🔍 TestingSTABILITY_PROJECT_TOKENis unset, so merging this without configuring the secret is safe.Types of changes
What types of changes does your code introduce?
Testing
Requires testing
If yes, did you write tests?
Notes on testing
The workflow logic is too thin for unit tests. Verify manually after adding
STABILITY_PROJECT_TOKEN(a fine-grained PAT withProjects: read & writeon theNethermindEthorg) as a repo secret:Closes #Nagainst an in-progress issue, then merge it — the linked issue should move to 🔍 Testing.Documentation
Requires documentation update
Requires explanation in Release Notes
Remarks
Auto-add to project+Item added to project(new issues → Backlog),Pull request linked to issue(added by GitHub on 2025-11-06 — linked issue → In Progress), andItem closed(closed → Done). This Action only fills the two gaps GitHub doesn't expose as triggers.pull_request_targetrather thanpull_requestso secrets are available on fork PRs. Safe here because the workflow never checks out PR code — it only reads event metadata and calls the GraphQL API.github.event.*values flow throughenv:vars per GitHub's workflow injection hardening guide.