ci(gadfly): repin to @8adeeea — the old pin's image tag does not exist #29

Merged
steve merged 1 commits from ci/gadfly-repin into main 2026-08-22 03:29:40 +00:00
Owner

Gadfly review is dead in this repo and has been failing silently.

The pinned reusable workflow @c9dab69d hardcodes docker://gitea.stevedudenhoeffer.com/steve/gadfly:sha-b37cd09 into the step URI. That tag was never pushed to the registry. From run 7056 (the @gadfly review on #28):

pulling image 'gitea.stevedudenhoeffer.com/steve/gadfly:sha-b37cd09'
❌ Failure - Main docker://…/steve/gadfly:sha-b37cd09
Error response from daemon: failed to resolve reference … : not found
🏁 Job failed

It dies in ~1s, posts no comment, and shows up as a red "Gadfly review" check — which reads exactly like a review that ran and found nothing. package_read list_versions steve/gadfly container confirms the newest published tags are sha-8adeeea and sha-b850e35; sha-b37cd09 is not among them.

@8adeeea runs the reviewer as the job container instead, so the tag resolves per run:

image: gitea.stevedudenhoeffer.com/steve/gadfly:${{ inputs.reviewer_tag || vars.GADFLY_REVIEWER_TAG || 'sha-b850e35' }}

That both fixes this failure and removes the class: retagging the reviewer becomes a user-scope variable edit with no commit here, and the baked fallback (sha-b850e35) is a tag that actually exists.

Gadfly config is read from main, not the PR branch, so this has to land on main to take effect for any PR's review — including #28's.

No code change; workflow file only.

Gadfly review is dead in this repo and has been failing silently. The pinned reusable workflow `@c9dab69d` hardcodes `docker://gitea.stevedudenhoeffer.com/steve/gadfly:sha-b37cd09` into the step URI. **That tag was never pushed to the registry.** From run 7056 (the `@gadfly review` on #28): ``` pulling image 'gitea.stevedudenhoeffer.com/steve/gadfly:sha-b37cd09' ❌ Failure - Main docker://…/steve/gadfly:sha-b37cd09 Error response from daemon: failed to resolve reference … : not found 🏁 Job failed ``` It dies in ~1s, posts no comment, and shows up as a red "Gadfly review" check — which reads exactly like a review that ran and found nothing. `package_read list_versions steve/gadfly container` confirms the newest published tags are `sha-8adeeea` and `sha-b850e35`; `sha-b37cd09` is not among them. `@8adeeea` runs the reviewer as the **job container** instead, so the tag resolves per run: ```yaml image: gitea.stevedudenhoeffer.com/steve/gadfly:${{ inputs.reviewer_tag || vars.GADFLY_REVIEWER_TAG || 'sha-b850e35' }} ``` That both fixes this failure and removes the class: retagging the reviewer becomes a user-scope variable edit with no commit here, and the baked fallback (`sha-b850e35`) is a tag that actually exists. Gadfly config is read from **main**, not the PR branch, so this has to land on main to take effect for any PR's review — including #28's. No code change; workflow file only.
steve added 1 commit 2026-08-22 03:28:46 +00:00
ci(gadfly): repin to @8adeeea — the old pin's image tag does not exist
Gadfly review (reusable) / review (pull_request) Successful in 2m39s
Adversarial Review (Gadfly) / review (pull_request) Successful in 2m40s
CI / Tidy (pull_request) Successful in 9m22s
CI / Build & Test (pull_request) Successful in 9m52s
e05bbe0b13
The pinned reusable workflow (@c9dab69d) hardcoded
`docker://…/steve/gadfly:sha-b37cd09` into the step URI. That tag was
never pushed to the registry, so every review in this repo failed in
~1s on "failed to resolve reference … not found" — a red workflow that
reads exactly like a review which found nothing (PR #28, run 7056).

@8adeeea runs the reviewer as the job container and resolves its tag per
run — inputs.reviewer_tag then vars.GADFLY_REVIEWER_TAG then the baked
sha-b850e35 — so the hardcoded-dead-tag failure cannot recur, and
retagging the reviewer needs no commit here. Both sha-b850e35 and
sha-8adeeea are present in the registry.

Gadfly config is read from main, so this has to land on main to take
effect for any PR's review.

🪰 Gadfly — live review status

4/4 reviewers finished · updated 2026-08-22 03:31:25Z

claude-code/opus · claude-code — done

  • security — No material issues found
  • correctness — No material issues found
  • maintainability — No material issues found
  • performance — No material issues found
  • error-handling — No material issues found

claude-code/sonnet · claude-code — done

  • security — No material issues found
  • correctness — No material issues found
  • maintainability — Minor issues
  • performance — No material issues found
  • error-handling — No material issues found

glm-5.2:cloud · ollama-cloud — done

  • security — No material issues found
  • correctness — No material issues found
  • maintainability — No material issues found
  • performance — No material issues found
  • error-handling — No material issues found

kimi-k2.6:cloud · ollama-cloud — done

  • security — No material issues found
  • correctness — No material issues found
  • maintainability — No material issues found
  • performance — No material issues found
  • error-handling — No material issues found

Live status board. Findings are posted in each model's own comment. Advisory only — does not block merge.

<!-- gadfly-status-board --> ## 🪰 Gadfly — live review status 4/4 reviewers finished · updated 2026-08-22 03:31:25Z #### `claude-code/opus` · claude-code — ✅ done - ✅ **security** — No material issues found - ✅ **correctness** — No material issues found - ✅ **maintainability** — No material issues found - ✅ **performance** — No material issues found - ✅ **error-handling** — No material issues found #### `claude-code/sonnet` · claude-code — ✅ done - ✅ **security** — No material issues found - ✅ **correctness** — No material issues found - ✅ **maintainability** — Minor issues - ✅ **performance** — No material issues found - ✅ **error-handling** — No material issues found #### `glm-5.2:cloud` · ollama-cloud — ✅ done - ✅ **security** — No material issues found - ✅ **correctness** — No material issues found - ✅ **maintainability** — No material issues found - ✅ **performance** — No material issues found - ✅ **error-handling** — No material issues found #### `kimi-k2.6:cloud` · ollama-cloud — ✅ done - ✅ **security** — No material issues found - ✅ **correctness** — No material issues found - ✅ **maintainability** — No material issues found - ✅ **performance** — No material issues found - ✅ **error-handling** — No material issues found <sub>Live status board. Findings are posted in each model's own comment. Advisory only — does not block merge.</sub>
steve merged commit 43f914a673 into main 2026-08-22 03:29:40 +00:00
steve deleted branch ci/gadfly-repin 2026-08-22 03:29:40 +00:00
gitea-actions bot reviewed 2026-08-22 03:31:26 +00:00
gitea-actions bot left a comment

🪰 Gadfly consensus review — 1 inline finding on changed lines. See the consensus comment for the full ranked summary.

Advisory only — does not block merge.

<!-- gadfly-inline-review --> 🪰 **Gadfly consensus review** — 1 inline finding on changed lines. See the consensus comment for the full ranked summary. <sub>Advisory only — does not block merge.</sub>
@@ -46,0 +50,4 @@
# The previous pin (@c9dab69d) hardcoded `docker://…gadfly:sha-b37cd09`, a tag
# that was never pushed to the registry — every review in this repo died in
# ~1s on "failed to resolve reference … not found", which reads exactly like a
# review that found nothing. Before bumping this pin again, check the tag its

Garbled grammar in future-maintainer warning comment ('the tag its fallback names is')

maintainability · flagged by 1 model

  • .gitea/workflows/adversarial-review.yml:53–54 — the closing sentence of the new warning comment is grammatically garbled:

🪰 Gadfly · advisory

⚪ **Garbled grammar in future-maintainer warning comment ('the tag its fallback names is')** _maintainability · flagged by 1 model_ - **`.gitea/workflows/adversarial-review.yml:53–54`** — the closing sentence of the new warning comment is grammatically garbled: <sub>🪰 Gadfly · advisory</sub>

🪰 Gadfly review — consensus across 4 models

Verdict: Minor issues · 1 finding (0 with multi-model agreement)

1 single-model finding (lower confidence)
Finding Where Model Lens
Garbled grammar in future-maintainer warning comment ('the tag its fallback names is') .gitea/workflows/adversarial-review.yml:53 claude-code/sonnet maintainability
Per-model detail
claude-code/opus (claude-code) — No material issues found

Verdict: No material issues found — 5 reviewers: security, correctness, maintainability, performance, error-handling

🔒 Security — No material issues found

I've read the full workflow file at the checked-out state. The diff changes exactly one functional line (the reusable-workflow pin SHA) plus explanatory comments.

VERDICT: No material issues found

Reviewed through the Security lens. This is a CI supply-chain change, so I focused on pinning immutability, secret forwarding, and the actor/authz gate.

  • Pin is a full immutable commit SHA (good). adversarial-review.yml:55 moves from @c9dab69d… to @8adeeeabe0738a797a1bdfc42c5176ea8ee627e4 — a full 40-char git SHA, not a floating @v1 tag. This preserves the correct pinning posture for the reusable workflow itself. Verified by reading the file.
  • No change to secret forwarding. adversarial-review.yml:58-62 still enumerates individual secrets (no secrets: inherit), so the least-privilege posture is unchanged by this diff. Verified.
  • No change to the actor gate. The if: guard (:35-40) and allowed_users (:65) restricting issue_comment triggers to steve/fizi/dazed are untouched. The secret-bearing run remains gated. Verified.
  • No injection surface introduced: pr_number threading (:68) and the concurrency group (:26) are unchanged.

Informational (not a finding, and unverifiable from this repo): the stated effect of adopting @8adeeea is that the reviewer image tag is now resolved at runtime via vars.GADFLY_REVIEWER_TAG || 'sha-b850e35' — a mutable org/user variable plus a floating tag, rather than being fixed by the pinned commit. Whoever can set that variable (or push over that tag in the registry) controls the container that receives the forwarded secrets (CLAUDE_CODE_OAUTH_TOKEN, GADFLY_FINDINGS_TOKEN, etc.). This is a real supply-chain control-surface consideration, but (a) the image was already a mutable docker tag before this change (sha-b37cd09), so immutability isn't meaningfully degraded — only the edit path shifts from "commit to main" to "variable edit"; and (b) the behavior lives in the remote steve/gadfly reusable workflow, which is not in this checkout, so I cannot verify the variable's access controls. I raise it only so the reviewer image reference is understood to be tag-based, not digest-pinned; it is not a defect in this diff.

Nothing in the Security lane is materially wrong in this change.

🎯 Correctness — No material issues found

VERDICT: No material issues found

This is a single-line change to a Gitea Actions stub: the reusable-workflow pin moves from @c9dab69d… to @8adeeea…, plus explanatory comments. Through the Correctness lens:

  • Pin SHA is well-formed and matches the title. 8adeeeabe0738a797a1bdfc42c5176ea8ee627e4 (adversarial-review.yml:55) is a valid 40-char hex SHA whose short prefix 8adeeea matches the PR title/description. No malformed ref.
  • No stale references left behind. Grepped the repo for c9dab69d, b37cd09, b850e35, 8adeeea, GADFLY_REVIEWER_TAG, and review-reusable.yml@ — the only occurrences are in this one file. Nothing else needed a lockstep update; the old pin isn't referenced anywhere else.
  • Inputs/secrets block is unchanged (allowed_users, pr_number, the four forwarded secrets), so this PR introduces no new input/output contract to get wrong. The if: gate and the allowed_users list still agree (steve,fizi,dazed).
  • The comment's factual claims are internally consistent — the described resolution order inputs.reviewer_tag || vars.GADFLY_REVIEWER_TAG || 'sha-b850e35' matches the PR body.

Unverifiable from this checkout (not counted as findings): the substantive correctness of this change lives in the external steve/gadfly repo at commit 8adeeea — namely that (a) the reusable workflow at that SHA actually resolves the reviewer image per-run as claimed, (b) it still accepts the allowed_users/pr_number inputs and the four secrets forwarded here, and (c) the baked fallback sha-b850e35 really exists in the registry. These are cross-repo/registry facts I have no read access to from this repository; the PR author verified them via package_read list_versions and run logs. Nothing in the diff itself is logically wrong.

🧹 Code cleanliness & maintainability — No material issues found

VERDICT: No material issues found

I verified the change by reading the full workflow file (.gitea/workflows/adversarial-review.yml:41-55), not just the diff.

Through the cleanliness/maintainability lens, this change is clean:

  • Follows the file's existing pattern. This stub is already heavily and deliberately commented (the header block at :1-5, the security-gate rationale at :31-34, the pin rationale at :41-44). The new NB: block at :45-54 matches that established style and honors the house convention of // Why: comments where the rationale isn't obvious — here the non-obvious fact that the image tag is no longer part of the pin.
  • Minimal, low-churn. One line actually changes (the @sha in uses:); the rest is explanatory prose. No dead code, no duplication within the repo, no renamed/confusing identifiers, no restructuring.
  • The comment earns its length. It documents a real, previously-silent failure class (a pin naming a registry tag that was never pushed) and leaves an actionable checklist item for the next maintainer ("check the tag its fallback names is really in the registry"). That is maintainability improving, not bloat.

One minor, non-blocking observation (not filing as a finding): the comment hardcodes the fallback tag string sha-b850e35, whose real value lives in gadfly's review-reusable.yml in another repo and can silently drift from this comment over time. The comment is framed as point-in-time history ("From @8adeeea on…") and explicitly tells maintainers to re-verify, so it's self-mitigating — I wouldn't change it.

I could not verify the reusable workflow's actual default (review-reusable.yml@8adeeea) because it's in a separate repository not checked out here; that's a correctness/accuracy question outside this lens and outside what my tools can confirm.

Performance — No material issues found

VERDICT: No material issues found

This change is confined to .gitea/workflows/adversarial-review.yml: it bumps the uses: pin from @c9dab69d to @8adeeea and adds an explanatory comment block. I read the full file (lines 41–55) to confirm the diff is exactly that — a pin ref change plus comments, with no logic, loops, or data-path code touched.

Through the Performance lens there is nothing to flag:

  • No code paths, queries, allocations, or hot loops are added or modified — this is a CI stub that delegates to a reusable workflow.
  • If anything, the change is a net latency improvement: the old pin resolved a nonexistent image tag and died in ~1s per run; resolving the tag as a job-container variable removes that failed pull without adding work.
  • The concurrency group with cancel-in-progress: true (lines 25–27) is unchanged and remains a sound throughput guard.

Nothing in my area.

🧯 Error handling & edge cases — No material issues found

This is a config-only change: it repoints the uses: pin from @c9dab69d to @8adeeea and adds an explanatory comment block. I've read the full file at the checked-out state to see whether the change touches any error-handling paths.

VERDICT: No material issues found

Reviewing strictly through the error handling & edge cases lens:

  • The functional change is a single reusable-workflow ref (.../review-reusable.yml@8adeeea…) plus comments. It introduces no new error-handling logic, no cleanup/rollback paths, and no input parsing to scrutinize. The unhappy-path behavior this PR is about (an unresolvable image tag dying in ~1s and reading as a clean review) lives in the reusable workflow in the steve/gadfly repo, not in this file — it's neither defined nor changed here, so it's out of scope for this diff.

  • The edge cases that do exist in this file are all pre-existing and untouched by the diff:

    • pr_number: ${{ github.event.inputs.pr_number }} (line 68) is empty on non-dispatch events — but that's acknowledged in the adjacent comment and is unchanged.
    • The concurrency.group and if: actor gate fall back through || chains that already tolerate the missing-field cases; unchanged.
  • The one edge case genuinely relevant to the change — whether the new pin @8adeeeabe… resolves and whether its baked fallback tag sha-b850e35 actually exists in the registry — depends on state in a remote repo/registry I cannot reach with these tools, and it's a CI-resolution/correctness concern rather than an error-handling defect in this code. I flag it only as unverifiable, not as a finding.

Nothing in my lane is materially wrong. This is a clean pin bump.

claude-code/sonnet (claude-code) — Minor issues

Verdict: Minor issues — 5 reviewers: security, correctness, maintainability, performance, error-handling

🔒 Security — No material issues found

No material issues found

Reviewing through the security lens only.

Secrets forwarding (lines 58–62): The workflow correctly forwards only four named secrets — OLLAMA_CLOUD_API_KEY, CLAUDE_CODE_OAUTH_TOKEN, GADFLY_FINDINGS_URL, GADFLY_FINDINGS_TOKEN — rather than secrets: inherit. Verified in the file. This is the minimal set for a review runner and the comment at line 56 states the rationale.

Supply-chain pin: The reusable workflow is still pinned to an immutable full SHA (8adeeeabe0738a797a1bdfc42c5176ea8ee627e4). The reviewer image tag is now resolved at runtime inside the gadfly repo's code at that commit (inputs.reviewer_tag || vars.GADFLY_REVIEWER_TAG || 'sha-b850e35'), so the fallback image is baked into the pinned SHA — still supply-chain-pinned. The vars.GADFLY_REVIEWER_TAG override path requires repo-admin access to the variable store, the same trust level as a direct push; it does not expand the attack surface relative to the old design.

Actor gate (lines 35–40): issue_comment triggers are gated to steve, fizi, and dazed. This list is mirrored in the allowed_users input at line 65 for the in-container belt-and-suspenders check. Verified in the file.

Permissions (lines 20–23): contents: read, issues: write, pull-requests: write — minimal for a commenting review workflow.

Nothing in this diff introduces auth gaps, injection vectors, secret leakage, or insecure defaults.

🎯 Correctness — No material issues found

No material issues found

The diff is a single-line change to a SHA pin in a CI workflow stub — no logic, no code paths, no conversion factors or thresholds to re-derive.

What I verified:

  • Read .gitea/workflows/adversarial-review.yml in full. The only change is the uses: line: c9dab69d…8adeeeabe0738a797a1bdfc42c5176ea8ee627e4. The short form 8adeeea in the PR title is a prefix match of that full SHA. Everything else in the file (triggers, actor gate, secrets forwarding) is untouched.
  • No other workflow file in .gitea/workflows/ references gadfly or review-reusable, so there is no stale cross-file reference to update.

The one claim I cannot verify from inside this repo is whether 8adeeeabe0… actually exists in the external gadfly repo and whether sha-b850e35 (the baked fallback) is a live image tag — but that is an external registry fact, not a code-correctness issue.

🧹 Code cleanliness & maintainability — Minor issues

The text at line 53–54 reads exactly as the draft claims: "check the tag its fallback names is really in the registry." — the garbled noun phrase is confirmed in the actual file.

Minor issues

  • .gitea/workflows/adversarial-review.yml:53–54 — the closing sentence of the new warning comment is grammatically garbled:

    "Before bumping this pin again, check the tag its fallback names is really in the registry."

    "the tag its fallback names is" is a broken relative clause. A maintainer skimming quickly could misread it. Suggested replacement:

    # Before bumping this pin again, verify that the fallback tag it names
    # actually exists in the registry.
    

The rest of the change is clean: single-purpose, comment rationale is appropriately detailed for a non-obvious CI constraint, and the prior-context note (why the old pin failed) is exactly the kind of "hidden invariant" comment that earns its place.

Performance — No material issues found

No material issues found

This diff is a single-line workflow pin bump plus explanatory comments — there are no hot paths, allocations, loops, or data-access patterns for this lens to evaluate. The existing concurrency: cancel-in-progress: true guard (line 24–26, unchanged) is the only scheduling-relevant construct in the file and it is correct: it collapses concurrent runs for the same PR rather than stacking them. Nothing in the change introduces or worsens any efficiency concern.

🧯 Error handling & edge cases — No material issues found

No material issues found

This PR is a single-line YAML change (updating a reusable-workflow SHA pin) plus an explanatory comment. Through the error-handling & edge-cases lens there is nothing to flag:

  • No application code paths, no unhappy paths, no panics or nil-dereference risks — this is a CI configuration file.
  • The new fallback chain in the referenced workflow (inputs.reviewer_tag || vars.GADFLY_REVIEWER_TAG || 'sha-b850e35') is not in this diff and is confirmed by the PR description to resolve to a tag that actually exists in the registry.
  • The cancel-in-progress: true concurrency and allowed_users sync are unchanged pre-existing behaviour.

Nothing actionable in my lane.

glm-5.2:cloud (ollama-cloud) — No material issues found

Verdict: No material issues found — 5 reviewers: security, correctness, maintainability, performance, error-handling

🔒 Security — No material issues found

No material issues found

  • The diff only re-pins the reusable workflow to a new immutable SHA (@8adeeea) and adds documentation. From a security standpoint, SHA-pinning a reusable workflow ref is the correct, immutable approach — no regression vs. the prior @c9dab69d pin. Verified at .gitea/workflows/adversarial-review.yml:55.
  • The new image-tag resolution chain (inputs.reviewer_tag || vars.GADFLY_REVIEWER_TAG || 'sha-b850e35') introduces no taint path: reviewer_tag is a workflow_call input sourced from the calling workflow, and this caller passes no reviewer_tag in its with: block (adversarial-review.yml:63-68), so a PR/issue-comment author cannot influence the pulled image tag. It resolves to a repo/org-scoped variable or a hardcoded fallback. No SSRF/injection surface — it's a static registry path with no attacker-controlled interpolation.
  • Secret forwarding remains least-privilege (explicit per-secret passthrough, not secrets: inherit), unchanged by this PR (adversarial-review.yml:58-62). The if: actor gate and allowed_users allow-list are untouched.
  • The image is pulled from a private registry (gitea.stevedudenhoeffer.com/steve/gadfly) whose tags are managed by repo owners; the fallback tag is a fixed, pre-published value. No credential leakage or unsafe-default concern introduced.
🎯 Correctness — No material issues found

VERDICT: No material issues found

The diff under review touches a single line of effective code — bumping the reusable-workflow pin from @c9dab69d… to @8adeeeabe… in .gitea/workflows/adversarial-review.yml:55 — and adds only explanatory comments. Everything else in the file (secret forwarding, allow-list, pr_number threading, concurrency) is unchanged.

What I verified:

  • .gitea/workflows/adversarial-review.yml in full (read_file): the uses: line is the sole semantic change; the secrets:/with: blocks it gates are unaffected.
  • The external reusable workflow steve/gadfly/.gitea/workflows/review-reusable.yml@8adeeeabe… is not in this repository (find_files/grep find no review-reusable.yml, and no reviewer_tag/GADFLY_REVIEWER_TAG/sha-b850e35 reference exists anywhere in-repo). So the claim that @8adeeea resolves the image tag per run (inputs.reviewer_tag || vars.GADFLY_REVIEWER_TAG || 'sha-b850e35') cannot be verified from this checked-out code — it lives in the steve/gadfly repo. This is an unverifiable external dependency, not a defect in this PR's diff.

From the correctness lens, the change as presented is internally consistent: it replaces a known-broken pin with a new one and documents why. No constant, formula, or threshold in this file is being asserted; the sha-b850e35 fallback appears only inside a comment describing the external workflow. I have no grounds to flag the diff itself as incorrect.

🧹 Code cleanliness & maintainability — No material issues found

Verdict: No material issues found

Reviewed .gitea/workflows/adversarial-review.yml in full. The change is a one-line pin bump plus an explanatory comment block. Through the cleanliness/maintainability lens:

  • The new comment is well-placed and follows the existing pattern in this file (the surrounding # Pinned to an immutable gadfly commit… comment block already documents the pinning/cache rationale, so adding operational guidance about the image-tag decoupling is consistent, not a style break).
  • No dead/duplicated code introduced. The referenced reviewer_tag/vars.GADFLY_REVIEWER_TAG resolution path is only described in a comment; the consumer doesn't (and shouldn't) pass with: reviewer_tag:, so the fallback/vars chain is correct as documented.
  • No leaky abstraction: the comment correctly scopes its advice ("Before bumping this pin again, check the tag its fallback names is really in the registry") to the next maintainer of this file.

Grep confirmed reviewer_tag appears only in that comment (no stale references or orphaned config elsewhere). Nothing material in my lane.

Performance — No material issues found

Verdict: No material issues found

This is a workflow-file-only change (a reusable-workflow pin bump from @c9dab69d to @8adeeea plus expanded comments). There is no application code, no hot path, no queries, no allocations, and no loops in the diff. Through the performance lens there is nothing to scrutinize — the change neither adds nor removes any runtime work.

gadfly-findings

[]
🧯 Error handling & edge cases — No material issues found

No material issues found.

Reviewed through the error-handling / edge-case lens. The change is a single reusable-workflow pin bump plus comment expansion in .gitea/workflows/adversarial-review.yml. It introduces no new code paths, no new error handling, and no new edge-case surface in this repo:

  • The concurrency group (line 26) already guards against missing numbers via github.event.issue.number || github.event.pull_request.number || github.event.inputs.pr_number — all three being falsy collapses to an empty group string, which is a pre-existing benign edge case, unchanged by this PR.
  • pr_number: ${{ github.event.inputs.pr_number }} (line 68) being empty on non-dispatch events is an explicitly handled case per the adjacent comment — unchanged.
  • The new behavior (image-tag fallback resolution) lives in the reusable workflow at steve/gadfly@8adeeea, which is not present in this checked-out repo (review-reusable.yml returned no matches), so its error handling is out of scope here and not verifiable from this repo's state.

Within this repository's diff, the unhappy paths are all pre-existing and untouched.

kimi-k2.6:cloud (ollama-cloud) — No material issues found

Verdict: No material issues found — 5 reviewers: security, correctness, maintainability, performance, error-handling

🔒 Security — No material issues found

No material issues found.

The change is a straightforward CI pin update with no security regression. Through the security lens:

  • Trust boundary unchanged: The workflow already delegated execution and secrets to steve/gadfly's reusable workflow; the new SHA is from the same source repository and does not expand the trust boundary.
  • No new secret exposure: The same four secrets (OLLAMA_CLOUD_API_KEY, CLAUDE_CODE_OAUTH_TOKEN, GADFLY_FINDINGS_URL, GADFLY_FINDINGS_TOKEN) are forwarded with the same least-privilege pattern (explicit list, not secrets: inherit).
  • No injection path via vars.GADFLY_REVIEWER_TAG: The vars context in Gitea/GitHub Actions is populated from repository/organization/user-scoped variables set by administrators, not from PR content or user inputs. It is not susceptible to template injection from untrusted data. The override mechanism does not introduce a novel supply-chain vector beyond the existing trust in repo/org admins who can already modify workflow files.
  • No authn/authz gap: The if: actor gate (lines 35-40) and allowed_users input remain unchanged.
🎯 Correctness — No material issues found

No material issues found

This PR changes only a workflow file, replacing the reusable workflow pin from @c9dab69d143cb614c1840a5b06d6ffc358f4752d to @8adeeeabe0738a797a1bdfc42c5176ea8ee627e4 and adding explanatory comments. I verified the changed file (.gitea/workflows/adversarial-review.yml) and searched for other references to the old pin — none exist.

The new SHA 8adeeeabe0738a797a1bdfc42c5176ea8ee627e4 is a well-formed 40-character hex string. The comment accurately describes the failure mode of the old pin (hardcoded non-existent image tag sha-b37cd09) and the resolution mechanism of the new pin (runtime-resolved tag with fallback to sha-b850e35). No semantic or logic errors are introduced by this change.

🧹 Code cleanliness & maintainability — No material issues found

No material issues found.

Performance — No material issues found

No material issues found

  • Verified: Read the full workflow file .gitea/workflows/adversarial-review.yml and confirmed the diff is a straight pin-bump of the reusable workflow reference plus an explanatory comment. There are no loops, allocations, API calls, or data structures in the changed file that could regress performance.
🧯 Error handling & edge cases — No material issues found

No material issues found.

This diff contains only a workflow SHA bump and associated comments in .gitea/workflows/adversarial-review.yml. There are no new code paths, function signatures, error returns, nil checks, resource cleanup, boundary conditions, or panics introduced — nothing within the error-handling & edge-cases lens to scrutinize.

Automated adversarial review by Gadfly — consensus across the model swarm. Advisory only — does not block merge.

<!-- gadfly-consensus --> ## 🪰 Gadfly review — consensus across 4 models **Verdict: Minor issues** · 1 finding (0 with multi-model agreement) <details><summary>1 single-model finding (lower confidence)</summary> | | Finding | Where | Model | Lens | |--|--|--|--|--| | ⚪ | Garbled grammar in future-maintainer warning comment ('the tag its fallback names is') | `.gitea/workflows/adversarial-review.yml:53` | claude-code/sonnet | maintainability | </details> <details><summary>Per-model detail</summary> <details><summary><b>claude-code/opus</b> (claude-code) — No material issues found</summary> **Verdict: No material issues found** — 5 reviewers: security, correctness, maintainability, performance, error-handling <details><summary><b>🔒 Security</b> — No material issues found</summary> I've read the full workflow file at the checked-out state. The diff changes exactly one functional line (the reusable-workflow pin SHA) plus explanatory comments. ## VERDICT: No material issues found Reviewed through the Security lens. This is a CI supply-chain change, so I focused on pinning immutability, secret forwarding, and the actor/authz gate. - **Pin is a full immutable commit SHA (good).** `adversarial-review.yml:55` moves from `@c9dab69d…` to `@8adeeeabe0738a797a1bdfc42c5176ea8ee627e4` — a full 40-char git SHA, not a floating `@v1` tag. This preserves the correct pinning posture for the reusable workflow itself. Verified by reading the file. - **No change to secret forwarding.** `adversarial-review.yml:58-62` still enumerates individual secrets (no `secrets: inherit`), so the least-privilege posture is unchanged by this diff. Verified. - **No change to the actor gate.** The `if:` guard (`:35-40`) and `allowed_users` (`:65`) restricting `issue_comment` triggers to `steve/fizi/dazed` are untouched. The secret-bearing run remains gated. Verified. - No injection surface introduced: `pr_number` threading (`:68`) and the concurrency group (`:26`) are unchanged. **Informational (not a finding, and unverifiable from this repo):** the stated effect of adopting `@8adeeea` is that the reviewer *image* tag is now resolved at runtime via `vars.GADFLY_REVIEWER_TAG || 'sha-b850e35'` — a mutable org/user variable plus a floating tag, rather than being fixed by the pinned commit. Whoever can set that variable (or push over that tag in the registry) controls the container that receives the forwarded secrets (`CLAUDE_CODE_OAUTH_TOKEN`, `GADFLY_FINDINGS_TOKEN`, etc.). This is a real supply-chain control-surface consideration, but (a) the image was *already* a mutable docker tag before this change (`sha-b37cd09`), so immutability isn't meaningfully degraded — only the edit path shifts from "commit to main" to "variable edit"; and (b) the behavior lives in the remote `steve/gadfly` reusable workflow, which is not in this checkout, so I cannot verify the variable's access controls. I raise it only so the reviewer image reference is understood to be tag-based, not digest-pinned; it is not a defect in this diff. Nothing in the Security lane is materially wrong in this change. </details> <details><summary><b>🎯 Correctness</b> — No material issues found</summary> ## VERDICT: No material issues found This is a single-line change to a Gitea Actions stub: the reusable-workflow pin moves from `@c9dab69d…` to `@8adeeea…`, plus explanatory comments. Through the Correctness lens: - **Pin SHA is well-formed and matches the title.** `8adeeeabe0738a797a1bdfc42c5176ea8ee627e4` (`adversarial-review.yml:55`) is a valid 40-char hex SHA whose short prefix `8adeeea` matches the PR title/description. No malformed ref. - **No stale references left behind.** Grepped the repo for `c9dab69d`, `b37cd09`, `b850e35`, `8adeeea`, `GADFLY_REVIEWER_TAG`, and `review-reusable.yml@` — the only occurrences are in this one file. Nothing else needed a lockstep update; the old pin isn't referenced anywhere else. - **Inputs/secrets block is unchanged** (`allowed_users`, `pr_number`, the four forwarded secrets), so this PR introduces no new input/output contract to get wrong. The `if:` gate and the `allowed_users` list still agree (`steve,fizi,dazed`). - **The comment's factual claims are internally consistent** — the described resolution order `inputs.reviewer_tag || vars.GADFLY_REVIEWER_TAG || 'sha-b850e35'` matches the PR body. **Unverifiable from this checkout (not counted as findings):** the substantive correctness of this change lives in the *external* `steve/gadfly` repo at commit `8adeeea` — namely that (a) the reusable workflow at that SHA actually resolves the reviewer image per-run as claimed, (b) it still accepts the `allowed_users`/`pr_number` inputs and the four secrets forwarded here, and (c) the baked fallback `sha-b850e35` really exists in the registry. These are cross-repo/registry facts I have no read access to from this repository; the PR author verified them via `package_read list_versions` and run logs. Nothing in the diff itself is logically wrong. </details> <details><summary><b>🧹 Code cleanliness & maintainability</b> — No material issues found</summary> **VERDICT: No material issues found** I verified the change by reading the full workflow file (`.gitea/workflows/adversarial-review.yml:41-55`), not just the diff. Through the cleanliness/maintainability lens, this change is clean: - **Follows the file's existing pattern.** This stub is already heavily and deliberately commented (the header block at :1-5, the security-gate rationale at :31-34, the pin rationale at :41-44). The new `NB:` block at :45-54 matches that established style and honors the house convention of `// Why:` comments where the rationale isn't obvious — here the non-obvious fact that the image tag is *no longer* part of the pin. - **Minimal, low-churn.** One line actually changes (the `@sha` in `uses:`); the rest is explanatory prose. No dead code, no duplication within the repo, no renamed/confusing identifiers, no restructuring. - **The comment earns its length.** It documents a real, previously-silent failure class (a pin naming a registry tag that was never pushed) and leaves an actionable checklist item for the next maintainer ("check the tag its fallback names is really in the registry"). That is maintainability *improving*, not bloat. One minor, non-blocking observation (not filing as a finding): the comment hardcodes the fallback tag string `sha-b850e35`, whose real value lives in gadfly's `review-reusable.yml` in another repo and can silently drift from this comment over time. The comment is framed as point-in-time history ("From @8adeeea on…") and explicitly tells maintainers to re-verify, so it's self-mitigating — I wouldn't change it. I could not verify the reusable workflow's actual default (`review-reusable.yml@8adeeea`) because it's in a separate repository not checked out here; that's a correctness/accuracy question outside this lens and outside what my tools can confirm. </details> <details><summary><b>⚡ Performance</b> — No material issues found</summary> **VERDICT: No material issues found** This change is confined to `.gitea/workflows/adversarial-review.yml`: it bumps the `uses:` pin from `@c9dab69d` to `@8adeeea` and adds an explanatory comment block. I read the full file (lines 41–55) to confirm the diff is exactly that — a pin ref change plus comments, with no logic, loops, or data-path code touched. Through the Performance lens there is nothing to flag: - No code paths, queries, allocations, or hot loops are added or modified — this is a CI stub that delegates to a reusable workflow. - If anything, the change is a net latency improvement: the old pin resolved a nonexistent image tag and died in ~1s per run; resolving the tag as a job-container variable removes that failed pull without adding work. - The `concurrency` group with `cancel-in-progress: true` (lines 25–27) is unchanged and remains a sound throughput guard. Nothing in my area. </details> <details><summary><b>🧯 Error handling & edge cases</b> — No material issues found</summary> This is a config-only change: it repoints the `uses:` pin from `@c9dab69d` to `@8adeeea` and adds an explanatory comment block. I've read the full file at the checked-out state to see whether the change touches any error-handling paths. ## VERDICT: No material issues found Reviewing strictly through the **error handling & edge cases** lens: - The functional change is a single reusable-workflow ref (`.../review-reusable.yml@8adeeea…`) plus comments. It introduces **no new error-handling logic, no cleanup/rollback paths, and no input parsing** to scrutinize. The unhappy-path behavior this PR is *about* (an unresolvable image tag dying in ~1s and reading as a clean review) lives in the **reusable workflow in the `steve/gadfly` repo**, not in this file — it's neither defined nor changed here, so it's out of scope for this diff. - The edge cases that do exist in this file are all **pre-existing and untouched** by the diff: - `pr_number: ${{ github.event.inputs.pr_number }}` (line 68) is empty on non-dispatch events — but that's acknowledged in the adjacent comment and is unchanged. - The `concurrency.group` and `if:` actor gate fall back through `||` chains that already tolerate the missing-field cases; unchanged. - The one edge case genuinely relevant to the change — whether the new pin `@8adeeeabe…` resolves and whether its baked fallback tag `sha-b850e35` actually exists in the registry — depends on state in a **remote repo/registry I cannot reach with these tools**, and it's a CI-resolution/correctness concern rather than an error-handling defect in this code. I flag it only as unverifiable, not as a finding. Nothing in my lane is materially wrong. This is a clean pin bump. </details> </details> <details><summary><b>claude-code/sonnet</b> (claude-code) — Minor issues</summary> **Verdict: Minor issues** — 5 reviewers: security, correctness, maintainability, performance, error-handling <details><summary><b>🔒 Security</b> — No material issues found</summary> **No material issues found** Reviewing through the security lens only. **Secrets forwarding** (lines 58–62): The workflow correctly forwards only four named secrets — `OLLAMA_CLOUD_API_KEY`, `CLAUDE_CODE_OAUTH_TOKEN`, `GADFLY_FINDINGS_URL`, `GADFLY_FINDINGS_TOKEN` — rather than `secrets: inherit`. Verified in the file. This is the minimal set for a review runner and the comment at line 56 states the rationale. **Supply-chain pin**: The reusable workflow is still pinned to an immutable full SHA (`8adeeeabe0738a797a1bdfc42c5176ea8ee627e4`). The reviewer image tag is now resolved at runtime inside the gadfly repo's code at *that* commit (`inputs.reviewer_tag || vars.GADFLY_REVIEWER_TAG || 'sha-b850e35'`), so the fallback image is baked into the pinned SHA — still supply-chain-pinned. The `vars.GADFLY_REVIEWER_TAG` override path requires repo-admin access to the variable store, the same trust level as a direct push; it does not expand the attack surface relative to the old design. **Actor gate** (lines 35–40): `issue_comment` triggers are gated to `steve`, `fizi`, and `dazed`. This list is mirrored in the `allowed_users` input at line 65 for the in-container belt-and-suspenders check. Verified in the file. **Permissions** (lines 20–23): `contents: read`, `issues: write`, `pull-requests: write` — minimal for a commenting review workflow. Nothing in this diff introduces auth gaps, injection vectors, secret leakage, or insecure defaults. </details> <details><summary><b>🎯 Correctness</b> — No material issues found</summary> **No material issues found** The diff is a single-line change to a SHA pin in a CI workflow stub — no logic, no code paths, no conversion factors or thresholds to re-derive. What I verified: - Read `.gitea/workflows/adversarial-review.yml` in full. The only change is the `uses:` line: `c9dab69d…` → `8adeeeabe0738a797a1bdfc42c5176ea8ee627e4`. The short form `8adeeea` in the PR title is a prefix match of that full SHA. Everything else in the file (triggers, actor gate, secrets forwarding) is untouched. - No other workflow file in `.gitea/workflows/` references `gadfly` or `review-reusable`, so there is no stale cross-file reference to update. The one claim I cannot verify from inside this repo is whether `8adeeeabe0…` actually exists in the external gadfly repo and whether `sha-b850e35` (the baked fallback) is a live image tag — but that is an external registry fact, not a code-correctness issue. </details> <details><summary><b>🧹 Code cleanliness & maintainability</b> — Minor issues</summary> The text at line 53–54 reads exactly as the draft claims: `"check the tag its fallback names is really in the registry."` — the garbled noun phrase is confirmed in the actual file. **Minor issues** - **`.gitea/workflows/adversarial-review.yml:53–54`** — the closing sentence of the new warning comment is grammatically garbled: > "Before bumping this pin again, check the tag its fallback names is really in the registry." "the tag its fallback names is" is a broken relative clause. A maintainer skimming quickly could misread it. Suggested replacement: ``` # Before bumping this pin again, verify that the fallback tag it names # actually exists in the registry. ``` The rest of the change is clean: single-purpose, comment rationale is appropriately detailed for a non-obvious CI constraint, and the prior-context note (why the old pin failed) is exactly the kind of "hidden invariant" comment that earns its place. </details> <details><summary><b>⚡ Performance</b> — No material issues found</summary> **No material issues found** This diff is a single-line workflow pin bump plus explanatory comments — there are no hot paths, allocations, loops, or data-access patterns for this lens to evaluate. The existing `concurrency: cancel-in-progress: true` guard (line 24–26, unchanged) is the only scheduling-relevant construct in the file and it is correct: it collapses concurrent runs for the same PR rather than stacking them. Nothing in the change introduces or worsens any efficiency concern. </details> <details><summary><b>🧯 Error handling & edge cases</b> — No material issues found</summary> **No material issues found** This PR is a single-line YAML change (updating a reusable-workflow SHA pin) plus an explanatory comment. Through the error-handling & edge-cases lens there is nothing to flag: - No application code paths, no unhappy paths, no panics or nil-dereference risks — this is a CI configuration file. - The new fallback chain in the referenced workflow (`inputs.reviewer_tag || vars.GADFLY_REVIEWER_TAG || 'sha-b850e35'`) is not in this diff and is confirmed by the PR description to resolve to a tag that actually exists in the registry. - The `cancel-in-progress: true` concurrency and `allowed_users` sync are unchanged pre-existing behaviour. Nothing actionable in my lane. </details> </details> <details><summary><b>glm-5.2:cloud</b> (ollama-cloud) — No material issues found</summary> **Verdict: No material issues found** — 5 reviewers: security, correctness, maintainability, performance, error-handling <details><summary><b>🔒 Security</b> — No material issues found</summary> No material issues found - The diff only re-pins the reusable workflow to a new immutable SHA (`@8adeeea`) and adds documentation. From a security standpoint, SHA-pinning a reusable workflow ref is the correct, immutable approach — no regression vs. the prior `@c9dab69d` pin. Verified at `.gitea/workflows/adversarial-review.yml:55`. - The new image-tag resolution chain (`inputs.reviewer_tag || vars.GADFLY_REVIEWER_TAG || 'sha-b850e35'`) introduces no taint path: `reviewer_tag` is a `workflow_call` input sourced from the *calling* workflow, and this caller passes no `reviewer_tag` in its `with:` block (`adversarial-review.yml:63-68`), so a PR/issue-comment author cannot influence the pulled image tag. It resolves to a repo/org-scoped variable or a hardcoded fallback. No SSRF/injection surface — it's a static registry path with no attacker-controlled interpolation. - Secret forwarding remains least-privilege (explicit per-secret passthrough, not `secrets: inherit`), unchanged by this PR (`adversarial-review.yml:58-62`). The `if:` actor gate and `allowed_users` allow-list are untouched. - The image is pulled from a private registry (`gitea.stevedudenhoeffer.com/steve/gadfly`) whose tags are managed by repo owners; the fallback tag is a fixed, pre-published value. No credential leakage or unsafe-default concern introduced. </details> <details><summary><b>🎯 Correctness</b> — No material issues found</summary> **VERDICT: No material issues found** The diff under review touches a single line of effective code — bumping the reusable-workflow pin from `@c9dab69d…` to `@8adeeeabe…` in `.gitea/workflows/adversarial-review.yml:55` — and adds only explanatory comments. Everything else in the file (secret forwarding, allow-list, `pr_number` threading, concurrency) is unchanged. What I verified: - `.gitea/workflows/adversarial-review.yml` in full (read_file): the `uses:` line is the sole semantic change; the `secrets:`/`with:` blocks it gates are unaffected. - The external reusable workflow `steve/gadfly/.gitea/workflows/review-reusable.yml@8adeeeabe…` is **not in this repository** (find_files/grep find no `review-reusable.yml`, and no `reviewer_tag`/`GADFLY_REVIEWER_TAG`/`sha-b850e35` reference exists anywhere in-repo). So the claim that `@8adeeea` resolves the image tag per run (`inputs.reviewer_tag || vars.GADFLY_REVIEWER_TAG || 'sha-b850e35'`) cannot be verified from this checked-out code — it lives in the `steve/gadfly` repo. This is an unverifiable external dependency, not a defect in this PR's diff. From the correctness lens, the change as presented is internally consistent: it replaces a known-broken pin with a new one and documents why. No constant, formula, or threshold in *this* file is being asserted; the `sha-b850e35` fallback appears only inside a comment describing the external workflow. I have no grounds to flag the diff itself as incorrect. </details> <details><summary><b>🧹 Code cleanliness & maintainability</b> — No material issues found</summary> **Verdict: No material issues found** Reviewed `.gitea/workflows/adversarial-review.yml` in full. The change is a one-line pin bump plus an explanatory comment block. Through the cleanliness/maintainability lens: - The new comment is well-placed and follows the existing pattern in this file (the surrounding `# Pinned to an immutable gadfly commit…` comment block already documents the pinning/cache rationale, so adding operational guidance about the image-tag decoupling is consistent, not a style break). - No dead/duplicated code introduced. The referenced `reviewer_tag`/`vars.GADFLY_REVIEWER_TAG` resolution path is only described in a comment; the consumer doesn't (and shouldn't) pass `with: reviewer_tag:`, so the fallback/vars chain is correct as documented. - No leaky abstraction: the comment correctly scopes its advice ("Before bumping this pin again, check the tag its fallback names is really in the registry") to the next maintainer of *this* file. Grep confirmed `reviewer_tag` appears only in that comment (no stale references or orphaned config elsewhere). Nothing material in my lane. </details> <details><summary><b>⚡ Performance</b> — No material issues found</summary> **Verdict: No material issues found** This is a workflow-file-only change (a reusable-workflow pin bump from `@c9dab69d` to `@8adeeea` plus expanded comments). There is no application code, no hot path, no queries, no allocations, and no loops in the diff. Through the performance lens there is nothing to scrutinize — the change neither adds nor removes any runtime work. `gadfly-findings` ```json [] ``` </details> <details><summary><b>🧯 Error handling & edge cases</b> — No material issues found</summary> No material issues found. Reviewed through the error-handling / edge-case lens. The change is a single reusable-workflow pin bump plus comment expansion in `.gitea/workflows/adversarial-review.yml`. It introduces no new code paths, no new error handling, and no new edge-case surface in this repo: - The `concurrency` group (line 26) already guards against missing numbers via `github.event.issue.number || github.event.pull_request.number || github.event.inputs.pr_number` — all three being falsy collapses to an empty group string, which is a pre-existing benign edge case, unchanged by this PR. - `pr_number: ${{ github.event.inputs.pr_number }}` (line 68) being empty on non-dispatch events is an explicitly handled case per the adjacent comment — unchanged. - The new behavior (image-tag fallback resolution) lives in the reusable workflow at `steve/gadfly@8adeeea`, which is not present in this checked-out repo (`review-reusable.yml` returned no matches), so its error handling is out of scope here and not verifiable from this repo's state. Within this repository's diff, the unhappy paths are all pre-existing and untouched. </details> </details> <details><summary><b>kimi-k2.6:cloud</b> (ollama-cloud) — No material issues found</summary> **Verdict: No material issues found** — 5 reviewers: security, correctness, maintainability, performance, error-handling <details><summary><b>🔒 Security</b> — No material issues found</summary> No material issues found. The change is a straightforward CI pin update with no security regression. Through the security lens: - **Trust boundary unchanged**: The workflow already delegated execution and secrets to `steve/gadfly`'s reusable workflow; the new SHA is from the same source repository and does not expand the trust boundary. - **No new secret exposure**: The same four secrets (`OLLAMA_CLOUD_API_KEY`, `CLAUDE_CODE_OAUTH_TOKEN`, `GADFLY_FINDINGS_URL`, `GADFLY_FINDINGS_TOKEN`) are forwarded with the same least-privilege pattern (explicit list, not `secrets: inherit`). - **No injection path via `vars.GADFLY_REVIEWER_TAG`**: The `vars` context in Gitea/GitHub Actions is populated from repository/organization/user-scoped variables set by administrators, not from PR content or user inputs. It is not susceptible to template injection from untrusted data. The override mechanism does not introduce a novel supply-chain vector beyond the existing trust in repo/org admins who can already modify workflow files. - **No authn/authz gap**: The `if:` actor gate (lines 35-40) and `allowed_users` input remain unchanged. </details> <details><summary><b>🎯 Correctness</b> — No material issues found</summary> **No material issues found** This PR changes only a workflow file, replacing the reusable workflow pin from `@c9dab69d143cb614c1840a5b06d6ffc358f4752d` to `@8adeeeabe0738a797a1bdfc42c5176ea8ee627e4` and adding explanatory comments. I verified the changed file (`.gitea/workflows/adversarial-review.yml`) and searched for other references to the old pin — none exist. The new SHA `8adeeeabe0738a797a1bdfc42c5176ea8ee627e4` is a well-formed 40-character hex string. The comment accurately describes the failure mode of the old pin (hardcoded non-existent image tag `sha-b37cd09`) and the resolution mechanism of the new pin (runtime-resolved tag with fallback to `sha-b850e35`). No semantic or logic errors are introduced by this change. </details> <details><summary><b>🧹 Code cleanliness & maintainability</b> — No material issues found</summary> No material issues found. </details> <details><summary><b>⚡ Performance</b> — No material issues found</summary> **No material issues found** * **Verified**: Read the full workflow file `.gitea/workflows/adversarial-review.yml` and confirmed the diff is a straight pin-bump of the reusable workflow reference plus an explanatory comment. There are no loops, allocations, API calls, or data structures in the changed file that could regress performance. </details> <details><summary><b>🧯 Error handling & edge cases</b> — No material issues found</summary> No material issues found. This diff contains only a workflow SHA bump and associated comments in `.gitea/workflows/adversarial-review.yml`. There are no new code paths, function signatures, error returns, nil checks, resource cleanup, boundary conditions, or panics introduced — nothing within the error-handling & edge-cases lens to scrutinize. </details> </details> </details> <sub>Automated adversarial review by Gadfly — consensus across the model swarm. Advisory only — does not block merge.</sub>
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: steve/majordomo#29