Skip to content

🤖 fix: map uncertain aggregated write answers to 504 and list unconfigured namespaces as empty - #400

Merged
ThomasK33 merged 31 commits into
mainfrom
fix/aggregated-uncertain-writes
Oct 30, 2026
Merged

ThomasK33 merged 31 commits into
mainfrom
fix/aggregated-uncertain-writes

Conversation

@ThomasK33

@ThomasK33 ThomasK33 commented Oct 30, 2026 •

Copy link
Copy Markdown
Member

Summary

Aggregated writes that get an answer which leaves the result open now return the uncertain 504 ("re-read the object with kubectl get before you retry") without the Coder URL. Coder objects without the fields of their name now return a clean 500 instead of a panic. An unconfigured standalone server now returns empty namespaced lists, so namespace deletion does not hang on it.

Fixes #242
Fixes #215

Background

Users want every open issue fixed and landed on main. This PR closes two of them.

Implementation

  • coder.MapCoderWriteError(err, write, resource, name) replaces MapCoderCreateError and maps the error of every Coder mutation call: CreateUserWorkspace, CreateWorkspaceBuild (update, delete), CreateTemplate, the activation PATCH of a files-changing template update, UpdateTemplateMeta, DeleteTemplate.
    • The template update now activates through the raw patchActiveTemplateVersion helper of the promote subresource, because codersdk.UpdateActiveTemplateVersion returns nil on transport errors.
    • A workspace update or delete whose build answer has no build ID (for example 201 {}) returns the uncertain 504. So does a template metadata update whose answer is not the updated template.
    • Uncertain 504: a *codersdk.Error whose status passes coder.IsUncertainStatus (2xx, 502, 503; moved from workspace_transition.go, which now calls it), and every error without a status that the request can have caused after the send.
    • Kept as before (MapCoderError): timeouts and a Coder 504 (already a 504), statuses that leave no doubt, and errors that prove the request never reached Coder (notSent): a *net.OpError with Op dial or proxyconnect (covers DNS and refused connections), a proxy that refuses the CONNECT tunnel (the Coder transport now sets OnProxyConnectResponse to mark it with errProxyConnectRefused, because Go reports it with an untyped error), a TLS certificate error, a TLS record-header error for a first record that is not a TLS handshake (crypto/tls sets RecordHeaderError.Conn only then, before the server hello; a malformed record after the handshake can follow a request that Coder read, so it returns the uncertain 504), http.ErrSchemeMismatch (an https URL answered by a plain HTTP server), and a request that the sameorigin round tripper refused before the send. An error of a request that followed a redirect is never notSent: the Coder HTTP client marks it with errAfterRedirect, because the server that redirected got the write. An error of a round trip that wrote request headers on any attempt is never notSent either: the client marks it with errAfterWrite (an httptrace WroteHeaders hook). A received TLS alert is never notSent, because a Go TLS server can send protocol_version after it read the whole request. These keep the 500 "could not be reached". A refused cross-origin redirect is uncertain: the server that sent the redirect got the write.
  • The template version POST of a template create with files and of a files-changing template update also maps through MapCoderWriteError, and a version answer without an ID returns the uncertain 504 instead of an assertion 500.
  • After Coder accepts the activation of new files, a re-read of the template that fails or shows another active version returns the uncertain 504 instead of a 500.
  • When a template update changed the files or the metadata in Coder, a failure of the read of the template that ends the update returns the uncertain 504 instead of passing the read error through as a 500.
  • codertemplateversions LIST checks each template of the templates answer (ID and name fields) before it requests that template's versions. A malformed entry such as {} now returns the 500 instead of an empty list: Coder answers 404 for the zero ID, which the LIST skipped as a deleted template.
  • coderworkspaces/start|stop: a build answer without a build ID (for example 201 {}) now takes the existing confirming re-read instead of answering Queued with an empty build.
  • convert.TemplateToK8s, WorkspaceToK8s and TemplateVersionToK8s now return (obj, error). They reject a zero ID, a name field that is empty or contains . (via the new coder.NameSegmentError), and invalid label values, with an error that starts with the Coder API answered. Storage maps that error to 500 on reads, and to the uncertain 504 on a create answer. Workspace create checks the answer before the stop build, which needs the workspace ID.
  • errClientProvider marks namespaced errors with the now exported coder.NewNamespaceNotServedError. GET and other verbs keep the 503. The all-namespaces LIST keeps the 503.
  • Docs: docs/reference/aggregated-api-behavior.md ("Coder timeouts" and "Namespaces without a Coder backend") and a 504 entry in docs/how-to/troubleshooting.md.

Validation

Failing tests land first (430c9ccb46, a48c06dfc6), then the fix.

  • internal/aggregated/storage/write_outcome_test.go: table test of 7 writes (workspace create/update/delete, template create/metadata update/activation of new files/delete) against a proxy in front of the mock Coder that applies the write, then answers 502, 503, closes the connection, cuts the body, answers 200 with malformed JSON, 201 with {}/null, or Coder's answer without its id. Each returns the uncertain 504 without the Coder URL. A refused connection before the send returns 500 "could not be reached".
  • internal/aggregated/storage/coder_answer_test.go: workspace LIST, template LIST, template GET, template version LIST with nameless objects return 500, no panic.
  • internal/app/apiserverapp/coder_answer_route_test.go: the same outcomes through the production handler chain (DELETE, PUT, POST, LIST, GET over HTTPS). Before the fix, the template create with {} killed the connection (EOF).
  • internal/app/apiserverapp/unconfigured_namespace_test.go: unconfigured standalone server, namespaced LIST of all three resources returns an empty list, GET and the all-namespaces LIST keep 503.
  • Unit tables: TestMapCoderWriteError (error shapes), TestConvertersRejectAnswersWithoutNames.
  • internal/aggregated/coder/errors_transport_test.go: real SDK writes through the production Coder transport. A refused connection, a rejected certificate, a refused proxy connection, a refused cross-origin request, a proxy CONNECT answered 407, and an https URL answered by plain HTTP never reach the handler and return 500. A server that refuses the TLS version or the cipher suites also never gets the request, but the alert does not prove that, so it returns the uncertain 504. A connection closed after the handler got the request returns the uncertain 504. The test landed first (1d21ac3844): the four new cases failed with the uncertain 504. A same-origin redirect whose next connection is refused returns the uncertain 504 (test first in d7e4c097).
  • write_outcome_test.go gains the template version POST of a files update, and of a template create (failed first in bcf31d31). TestWorkspaceTransitionUncertainPost gains 201 with {} (confirmed by the re-read) and 201 with null (uncertain 504). Both landed failing in d7e4c097.
  • TestCoderAnswersWithoutNamesFailCleanly gains a version LIST whose templates answer is [{}] (failed first in 264287e2: it returned an empty list).
  • TestTemplateFilesUpdateReReadAfterActivation: after the activation, a re-read answered 502, closed, refused, or with another active version returns the uncertain 504 (failed first in 7ed56662).
  • Round 5 (test first in e1e1ce4b, fix in a8ad8ebd): TestMapCoderWriteErrorRealTransport gains a TLS server that reads the whole POST after the handshake and answers with a record of the wrong version or an oversized record; both returned the 500 and now return the uncertain 504. TestTemplateUpdateReadAfterChange: after a metadata PATCH or a confirmed activation, a 502 on the final read returned the 500 and now returns the uncertain 504.
  • Round 6 (8aa903d0): TestMapCoderWriteErrorRealTransport gains TLS 1.2 and TLS 1.3 servers that read the whole POST, then send a protocol_version alert (the verifier's probe), and an HTTP/2 server that reads the whole POST, then sends GOAWAY and RST_STREAM(PROTOCOL_ERROR). Go's HTTP/2 client sends the POST again on a new connection, and the refused dial returned the 500. All three now return the uncertain 504. Negative controls: with the old notSent, the two alert cases and the two TLS refusal cases fail; without the errAfterWrite check, the HTTP/2 case fails with dial tcp ...: connection refused mapped to 500. A temporary log confirmed that WroteHeaders fires for HTTP/1.1 and HTTP/2 and that no pre-send case is marked.
  • Local gates: make verify-vendor, make test, make build, make lint, make docs-check (in nix develop): all pass.

Risks

  • A write that fails with a plain error that the SDK raises before the send (for example encode body) now returns the uncertain 504 instead of 500. These errors do not happen with the request types used here. A false "uncertain" costs one re-read. A false "certain" can cause a duplicate, so the default is uncertain.
  • Transport errors without a status that notSent does not recognize (for example every received TLS alert, including a TLS version or cipher refusal, or a proxy that breaks the CONNECT exchange) return the uncertain 504, even when the request never reached Coder. The docs say so.
  • Follow-up, declined review threads: workspace.go build ID (a forged or stale successful build answer with a nonzero build ID) and template.go metadata (a forged successful PATCH answer with the right template ID). Both need a valid-looking success body that no real Coder failure produces. An independent verifier judged both as follow-ups. Trigger: a real proxy or Coder deployment that returns such a body.
  • Follow-up, deferred review thread r4425482581: a proxy 3xx without a Location header reaches the SDK as a *codersdk.Error with a 3xx status, and a write maps it to the 500, not the uncertain 504. Rare, and it reverses the current 3xx mapping, so the maintainer files a follow-up issue after merge.
  • Follow-up, deferred review thread r4425482612: when the re-read after a template activation fails, the uncertain 504 does not write the original error to the coder-errors log. Operators lose the status or transport detail. The maintainer files a follow-up issue after merge.
  • Follow-up, deferred review thread r4425834746: a workspace create with spec.running=false installs the stop build answer without checking its ID, so a 201 {} from a proxy reports an empty latest build. The fix is a nonzero build-ID check, like the start/stop path. The maintainer files a follow-up issue after merge.
  • Start and stop (coderworkspaces/start|stop) keep their own confirming re-read. Only the answer without a build ID changed.

Generated with xum • Model: anthropic:claude-opus-5-5 • Thinking: medium

…cts (#242)

Change-Id: Ia77616f5949c1930986af2594cf3e69bc22a302c
Signed-off-by: Thomas Kosiewski <tk@coder.com>
…215)

Change-Id: I2d537eae9e3e647dfad15af6254d8085d822b967
Signed-off-by: Thomas Kosiewski <tk@coder.com>
…er objects (#242, #215)

Change-Id: Ia9caeff7cd8cb9d5d526313d364258ba775e6553
Signed-off-by: Thomas Kosiewski <tk@coder.com>
Change-Id: Ia37d86a95b5f36db95709ce44e9634f8e5c6e33d
Signed-off-by: Thomas Kosiewski <tk@coder.com>
…sts (#242, #215)

Change-Id: Ie3e5f7a6daa33cb757b854ca6268378b14a141a3
Signed-off-by: Thomas Kosiewski <tk@coder.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-30T18:10:39.855707Z 8aa903d Manual request
🔒 Security Review ✅ Completed 2026-10-30T18:11:04.708796Z 8aa903d Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b805079eb8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/aggregated/storage/template.go Resolved
…ctivation (#242)

Change-Id: I85e0bc17b3bfee10045dcab28cfdfda54964bc47
Signed-off-by: Thomas Kosiewski <tk@coder.com>
…as uncertain (#242)

Change-Id: Ia6c1baa2a623621d15d164aebcee59e61d110260
Signed-off-by: Thomas Kosiewski <tk@coder.com>
Change-Id: Ia39194d4f638f04bc41b3aa96a2c561a2a717d7d
Signed-off-by: Thomas Kosiewski <tk@coder.com>
@ThomasK33

Copy link
Copy Markdown
Member Author

@codex review

@ThomasK33

Copy link
Copy Markdown
Member Author

@codex security review

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review

Security review completed. No security issues were found in this pull request.

Reviewed commit: 129100d5f7

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 129100d5f7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/aggregated/storage/template.go Resolved
Change-Id: I6de82486d0068fd4926491e4c034628c8961d47f
Signed-off-by: Thomas Kosiewski <tk@coder.com>
…data updates (#242)

Change-Id: Ica84f8d8d1278380b31468136cd4cd69732fec05
Signed-off-by: Thomas Kosiewski <tk@coder.com>
@ThomasK33

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 🎉

Reviewed commit: c3331e469a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@ThomasK33

Copy link
Copy Markdown
Member Author

@codex security review

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review

Security review completed. No security issues were found in this pull request.

Reviewed commit: c3331e469a

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

…242)

Change-Id: I0031e0f8010e79857ecedb00ed336c5083b313ec
Signed-off-by: Thomas Kosiewski <tk@coder.com>
@ThomasK33

Copy link
Copy Markdown
Member Author

@codex review

@ThomasK33

Copy link
Copy Markdown
Member Author

@codex security review

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review

Security review completed. No security issues were found in this pull request.

Reviewed commit: 46fa605e79

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 46fa605e79

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/aggregated/coder/errors.go Resolved
…in (#242)

Change-Id: I95cee7af345dee1e705b0c25450e311c19c11572
Signed-off-by: Thomas Kosiewski <tk@coder.com>
)

Change-Id: I41cf5ed81c3905c7ff2eb7849591bffde96deb27
Signed-off-by: Thomas Kosiewski <tk@coder.com>
@ThomasK33

Copy link
Copy Markdown
Member Author

@codex review

@ThomasK33

Copy link
Copy Markdown
Member Author

@codex security review

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review

Security review completed. No security issues were found in this pull request.

Reviewed commit: e669c365d7

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0afaf7bf28

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/aggregated/coder/errors.go Resolved
Comment thread internal/aggregated/storage/template.go Resolved
… 500 (#242)

Change-Id: I759db7afb294e606fe1a562a962db311544ac22e
Signed-off-by: Thomas Kosiewski <tk@coder.com>
Change-Id: Ifad7d7460c03785f2397b1aabcccb4d6474eceda
Signed-off-by: Thomas Kosiewski <tk@coder.com>
@ThomasK33

Copy link
Copy Markdown
Member Author

@codex review

@ThomasK33

Copy link
Copy Markdown
Member Author

@codex security review

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review

Security review completed. No security issues were found in this pull request.

Reviewed commit: 0251b23ff6

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0251b23ff6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

…ain-writes

Change-Id: Ic53ba17ad92131a37074dbf921b6c2132c192d21
Signed-off-by: Thomas Kosiewski <tk@coder.com>
@ThomasK33

Copy link
Copy Markdown
Member Author

@codex review

@ThomasK33

Copy link
Copy Markdown
Member Author

@codex security review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Hooray!

Reviewed commit: 31a767f0bc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review

Security review completed. No security issues were found in this pull request.

Reviewed commit: 31a767f0bc

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

… update (#242)

Change-Id: Ie978bfb928e6e88bebf0be829f0a8495924f0ddf
Signed-off-by: Thomas Kosiewski <tk@coder.com>
… to the uncertain 504 (#242)

Change-Id: If0958c852ba3da01ee4c4de2402cd9ebc9b2f549
Signed-off-by: Thomas Kosiewski <tk@coder.com>
@ThomasK33

Copy link
Copy Markdown
Member Author

@codex review

@ThomasK33

Copy link
Copy Markdown
Member Author

@codex security review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Bravo.

Reviewed commit: a8ad8ebdd4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review

Security review completed. No security issues were found in this pull request.

Reviewed commit: a8ad8ebdd4

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

…itten (#242)

Remove the TLS alert classification from notSent: a Go TLS server can send
protocol_version after it read the whole request. Mark the error of a round
trip that wrote request headers on any attempt, so an HTTP/2 retry that fails
to redial returns the uncertain 504.

Change-Id: Ic5276b3952575ba9c21f4e61ffffb53d29849863
Signed-off-by: Thomas Kosiewski <tk@coder.com>
@ThomasK33

Copy link
Copy Markdown
Member Author

@codex review

@ThomasK33

Copy link
Copy Markdown
Member Author

@codex security review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 👍

Reviewed commit: 8aa903d084

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review

Security review completed. No security issues were found in this pull request.

Reviewed commit: 8aa903d084

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant