Skip to content

[procmgr] Windows spawn profiles foundation - #54731

Open
jose-manuel-almaza wants to merge 118 commits into
mainfrom
jose/procmgr-spawn-profiles
Open

[procmgr] Windows spawn profiles foundation#54731
jose-manuel-almaza wants to merge 118 commits into
mainfrom
jose/procmgr-spawn-profiles

Conversation

@jose-manuel-almaza

@jose-manuel-almaza jose-manuel-almaza commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

What does this PR do?

Introduces Windows spawn profiles in dd-procmgr so managed children can run under different security contexts:

  • Privileged: spawn as LocalSystem (supervisor primary token)
  • AgentUser: spawn as the agent service account (ddagentuser)

Adds the Windows spawn stack (token logon, user profile load, supervision job, suspended CreateProcessAsUserW), a privileged spawn catalog that rejects unexpected command/args/env for privileged children, and gRPC named-pipe caller authentication for mutating RPCs.

Also refactors the daemon runtime into a Supervisor event loop plus ProcessManager handlers, and runs dd-procmgr-service as LocalSystem so agent-profile spawn can read the agent password from LSA.

Stack context (PR 1):

# PR Notes
1 This PR spawn profiles + LocalSystem MSI
2 #54732 config gates
3 #54734 secret backend
4 #54735 process-agent dual-mode
5 #53568 list/describe (parallel on this PR; not on the merge spine)
6 #55080 reload

Explicitly deferred: config gates (#54732), secret-backend cache invalidation (#54734), process-agent dual-mode (#54735), full ReloadConfig (#55080). RPC/CLI for reload stay in this PR but return UNIMPLEMENTED until #55080.

Motivation

Process-agent on Windows must run as LocalSystem; other agent children should stay on the agent user. Spawn profiles make that explicit and enforceable at spawn time, and are a prerequisite for moving process-agent supervision off legacy SCM in #54735. LocalSystem MSI lands here so agent-profile children (ADP, PAR, DDOT) can spawn without waiting for #54735.

Describe how you validated your changes

  • Bazel/Cargo procmgr Rust unit tests (Linux + Windows CI)
  • Privileged spawn catalog and spawn-profile unit tests (pkg/procmgr/rust/...)
  • COAT package tests (pkg/procmgr/coat/...)
  • Windows new-e2e: ADP, PAR, DDOT running tests, plus LocalSystem / agent-user identity checks (test/new-e2e/tests/agent-runtimes/procmgr/)

Additional Notes

  • Fleet: DDOT extension uninstall uses ReloadOrRestartProcmgr() (reload stub → SCM restart fallback). No process-agent dual-mode changes in this PR.
  • ReloadConfig: Proto and dd-procmgr reload remain for API compatibility; handler returns UNIMPLEMENTED until #55080.
  • Supersedes the spawn portion of #53249.

@jose-manuel-almaza
jose-manuel-almaza requested review from a team as code owners August 11, 2026 15:45
@jose-manuel-almaza jose-manuel-almaza added the qa/done QA done before merge and regressions are covered by tests label Aug 11, 2026
@github-actions github-actions Bot added the long review PR is complex, plan time to review it label Aug 11, 2026
@jose-manuel-almaza jose-manuel-almaza added the changelog/no-changelog No changelog entry needed label Aug 11, 2026

@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: b27edf4195

ℹ️ 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 test/new-e2e/tests/agent-runtimes/procmgr/procmgr_win_test.go Outdated
@datadog-prod-us1-4

This comment has been minimized.

@cit-pr-commenter-54b7da

cit-pr-commenter-54b7da Bot commented Aug 11, 2026

Copy link
Copy Markdown

Regression Detector

Regression Detector Results

Metrics dashboard
Target profiles
Job ID: 0f35a351-c808-4b87-9b64-8050e302930b

Baseline: 143810b
Comparison: 4191d8e
Diff

Optimization Goals: ✅ No significant changes detected

Fine details of change detection per experiment

perf experiment goal Δ mean % Δ mean % CI trials links
quality_gate_logs % cpu utilization +1.16 [+0.28, +2.04] 1 Logs bounds checks dashboard
quality_gate_metrics_logs memory utilization +0.39 [+0.14, +0.63] 1 Logs bounds checks dashboard
quality_gate_private_action_runner memory utilization +0.16 [+0.03, +0.28] 1 Logs bounds checks dashboard
quality_gate_security_idle memory utilization +0.04 [-0.07, +0.14] 1 Logs bounds checks dashboard
quality_gate_security_no_fs_load memory utilization -0.00 [-0.14, +0.14] 1 Logs bounds checks dashboard
quality_gate_security_mean_fs_load memory utilization -0.14 [-0.21, -0.07] 1 Logs bounds checks dashboard
quality_gate_idle memory utilization -0.16 [-0.28, -0.04] 1 Logs bounds checks dashboard
quality_gate_idle_all_features memory utilization -0.54 [-0.57, -0.50] 1 Logs bounds checks dashboard

Bounds Checks: ✅ Passed

perf experiment bounds_check_name replicates_passed observed_value links
quality_gate_idle intake_connections 10/10 4 = 4 bounds checks dashboard
quality_gate_idle memory_usage 10/10 170.74MiB ≤ 178MiB bounds checks dashboard
quality_gate_idle total_bytes_received 10/10 739.49KiB ≤ 819.20KiB bounds checks dashboard
quality_gate_idle_all_features intake_connections 10/10 4 = 4 bounds checks dashboard
quality_gate_idle_all_features memory_usage 10/10 513.01MiB ≤ 538MiB bounds checks dashboard
quality_gate_idle_all_features total_bytes_received 10/10 1.14MiB ≤ 1.25MiB bounds checks dashboard
quality_gate_logs intake_connections 10/10 18 ≤ 40 bounds checks dashboard
quality_gate_logs memory_usage 10/10 203.12MiB ≤ 229MiB bounds checks dashboard
quality_gate_logs missed_bytes 10/10 0B = 0B bounds checks dashboard
quality_gate_logs total_bytes_received 10/10 264.17MiB ≤ 292MiB bounds checks dashboard
quality_gate_metrics_logs cpu_usage 10/10 356.30 ≤ 2000 bounds checks dashboard
quality_gate_metrics_logs intake_connections 10/10 18 ≤ 40 bounds checks dashboard
quality_gate_metrics_logs memory_usage 10/10 406.29MiB ≤ 439MiB bounds checks dashboard
quality_gate_metrics_logs missed_bytes 10/10 0B = 0B bounds checks dashboard
quality_gate_metrics_logs total_bytes_received 10/10 0.94GiB ≤ 1.04GiB bounds checks dashboard
quality_gate_private_action_runner memory_usage 10/10 72.05MiB ≤ 76MiB bounds checks dashboard
quality_gate_security_idle cpu_usage 10/10 27.16 ≤ 100 bounds checks dashboard
quality_gate_security_idle memory_usage 10/10 327.20MiB ≤ 335MiB bounds checks dashboard
quality_gate_security_mean_fs_load cpu_usage 10/10 61.05 ≤ 200 bounds checks dashboard
quality_gate_security_mean_fs_load memory_usage 10/10 308.24MiB ≤ 314MiB bounds checks dashboard
quality_gate_security_no_fs_load cpu_usage 10/10 20.53 ≤ 100 bounds checks dashboard
quality_gate_security_no_fs_load memory_usage 10/10 309.89MiB ≤ 343MiB bounds checks dashboard

Explanation

Confidence level: 90.00%
Effect size tolerance: |Δ mean %| ≥ 5.00%

Performance changes are noted in the perf column of each table:

  • ✅ = significantly better comparison variant performance
  • ❌ = significantly worse comparison variant performance
  • ➖ = no significant change in performance

A regression test is an A/B test of target performance in a repeatable rig, where "performance" is measured as "comparison variant minus baseline variant" for an optimization goal (e.g., ingress throughput). Due to intrinsic variability in measuring that goal, we can only estimate its mean value for each experiment; we report uncertainty in that value as a 90.00% confidence interval denoted "Δ mean % CI".

For each experiment, we decide whether a change in performance is a "regression" -- a change worth investigating further -- if all of the following criteria are true:

  1. Its estimated |Δ mean %| ≥ 5.00%, indicating the change is big enough to merit a closer look.

  2. Its 90.00% confidence interval "Δ mean % CI" does not contain zero, indicating that if our statistical model is accurate, there is at least a 90.00% chance there is a difference in performance between baseline and comparison variants.

  3. Its configuration does not mark it "erratic".

CI Pass/Fail Decision

Passed. All Quality Gates passed.

  • quality_gate_security_idle, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_security_idle, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_security_mean_fs_load, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_security_mean_fs_load, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_idle_all_features, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_idle_all_features, bounds check intake_connections: 10/10 replicas passed. Gate passed.
  • quality_gate_idle_all_features, bounds check total_bytes_received: 10/10 replicas passed. Gate passed.
  • quality_gate_security_no_fs_load, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_security_no_fs_load, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_logs, bounds check total_bytes_received: 10/10 replicas passed. Gate passed.
  • quality_gate_logs, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_logs, bounds check missed_bytes: 10/10 replicas passed. Gate passed.
  • quality_gate_logs, bounds check intake_connections: 10/10 replicas passed. Gate passed.
  • quality_gate_metrics_logs, bounds check missed_bytes: 10/10 replicas passed. Gate passed.
  • quality_gate_metrics_logs, bounds check intake_connections: 10/10 replicas passed. Gate passed.
  • quality_gate_metrics_logs, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_metrics_logs, bounds check total_bytes_received: 10/10 replicas passed. Gate passed.
  • quality_gate_metrics_logs, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_idle, bounds check intake_connections: 10/10 replicas passed. Gate passed.
  • quality_gate_idle, bounds check total_bytes_received: 10/10 replicas passed. Gate passed.
  • quality_gate_idle, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_private_action_runner, bounds check memory_usage: 10/10 replicas passed. Gate passed.

@jose-manuel-almaza

Copy link
Copy Markdown
Contributor Author

@codex review

@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: bef4144e47

ℹ️ 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 pkg/procmgr/rust/src/platform/windows/spawn/stdio.rs Outdated
Comment thread pkg/procmgr/rust/src/platform/windows/spawn/stdio.rs Outdated
Comment thread pkg/procmgr/rust/src/platform/windows/spawn/suspended.rs
@dd-octo-sts

dd-octo-sts Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Static quality checks

✅ Please find below the results from static quality gates
Comparison made with ancestor 143810b
📊 Static Quality Gates Dashboard
🔗 SQG Job

Successful checks

Info

Quality gate Change Size (prev → curr → max)
agent_deb_amd64 -8.0 KiB (0.00% reduction, +0.18% of buffer) 760.252 → 760.244 → 764.500
agent_deb_amd64_fips -8.0 KiB (0.00% reduction, +0.30% of buffer) 713.133 → 713.125 → 715.740
agent_msi +3.7 KiB (0.00% increase, -0.02% of buffer) 643.969 → 643.973 → 660.960
agent_rpm_amd64 -8.0 KiB (0.00% reduction, +0.18% of buffer) 760.236 → 760.228 → 764.470
agent_rpm_amd64_fips -8.0 KiB (0.00% reduction, +0.30% of buffer) 713.117 → 713.109 → 715.740
agent_rpm_arm64 -12.0 KiB (0.00% reduction, +2.05% of buffer) 735.968 → 735.956 → 736.540
agent_rpm_arm64_fips -12.0 KiB (0.00% reduction, +0.79% of buffer) 692.210 → 692.198 → 693.690
agent_suse_amd64 -8.0 KiB (0.00% reduction, +0.18% of buffer) 760.236 → 760.228 → 764.470
agent_suse_amd64_fips -8.0 KiB (0.00% reduction, +0.30% of buffer) 713.117 → 713.109 → 715.740
agent_suse_arm64 -12.0 KiB (0.00% reduction, +2.05% of buffer) 735.968 → 735.956 → 736.540
agent_suse_arm64_fips -12.0 KiB (0.00% reduction, +0.79% of buffer) 692.210 → 692.198 → 693.690
docker_agent_amd64 -8.0 KiB (0.00% reduction, +0.68% of buffer) 818.895 → 818.888 → 820.040
docker_agent_arm64 -12.0 KiB (0.00% reduction, +1.13% of buffer) 819.707 → 819.695 → 820.740
docker_agent_jmx_amd64 -8.0 KiB (0.00% reduction, +0.78% of buffer) 1009.793 → 1009.785 → 1010.800
docker_agent_jmx_arm64 -12.01 KiB (0.00% reduction, +1.01% of buffer) 999.257 → 999.245 → 1000.420
18 successful checks with minimal change (< 2 KiB)
Quality gate Current Size
agent_heroku_amd64 312.490 MiB
docker_cluster_agent_amd64 210.451 MiB
docker_cluster_agent_arm64 223.456 MiB
docker_cws_instrumentation_amd64 7.439 MiB
docker_cws_instrumentation_arm64 6.877 MiB
docker_dogstatsd_amd64 39.455 MiB
docker_dogstatsd_arm64 37.560 MiB
docker_host_profiler_amd64 305.775 MiB
docker_host_profiler_arm64 317.039 MiB
dogstatsd_deb_amd64 30.200 MiB
dogstatsd_deb_arm64 28.224 MiB
dogstatsd_rpm_amd64 30.200 MiB
dogstatsd_suse_amd64 30.200 MiB
iot_agent_deb_amd64 46.452 MiB
iot_agent_deb_arm64 43.104 MiB
iot_agent_deb_armhf 43.887 MiB
iot_agent_rpm_amd64 46.452 MiB
iot_agent_suse_amd64 46.451 MiB

@jose-manuel-almaza

Copy link
Copy Markdown
Contributor Author

@codex review

@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: 7dcf3ac4fb

ℹ️ 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 pkg/procmgr/rust/src/manager.rs Outdated
@jose-manuel-almaza

Copy link
Copy Markdown
Contributor Author

@codex review

@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: 3e2715b142

ℹ️ 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 pkg/procmgr/rust/src/manager.rs Outdated
Comment thread pkg/procmgr/rust/src/process.rs
@jose-manuel-almaza

Copy link
Copy Markdown
Contributor Author

@codex review

@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: dcc2e35663

ℹ️ 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 pkg/procmgr/rust/src/process.rs Outdated
Comment thread pkg/procmgr/rust/src/manager/mod.rs Outdated
@jose-manuel-almaza

Copy link
Copy Markdown
Contributor Author

@codex review

@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: e801d8ab1f

ℹ️ 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 pkg/procmgr/rust/src/handle.rs Outdated
Fix gofmt alignment in the const block so linter.go passes.
Duplicate the process handle for exit waits and close it when force-kill
times out so WaitForSingleObject unblocks instead of stalling service stop.
@jose-manuel-almaza

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. More of your lovely PRs please.

Reviewed commit: e019e60a5b

ℹ️ 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".

Extension install and procmgr supervision for DDOT are covered in
installer and fleet E2E tests; keep this suite focused on generic
procmgr smoke and Windows spawn-profile checks.
Gate wait_control usage behind cfg(windows) so Linux clippy builds compile,
and drop a needless Ok/? in suspended spawn resume.
Remove stale gazelle dep left after DDOT smoke tests were removed.
@jose-manuel-almaza

Copy link
Copy Markdown
Contributor Author

@codex review

@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: cee4461381

ℹ️ 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 pkg/procmgr/rust/src/handle.rs Outdated
Use 500 ms WaitForSingleObject slices and a cancel flag so shutdown can
abandon stuck children without closing a handle another thread is waiting on.
@jose-manuel-almaza

Copy link
Copy Markdown
Contributor Author

@codex review

@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: 6104777e1e

ℹ️ 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 pkg/procmgr/rust/src/platform/windows/spawn/suspended.rs Outdated
Duplicate supervision handles from a borrowed spawn handle before
ResumeThread so DuplicateHandle failures can abort while the child is
still suspended, without leaking the process handle.
@jose-manuel-almaza

Copy link
Copy Markdown
Contributor Author

@codex review

@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

processes[idx].wait_for_stop().await;

P2 Badge Measure stop timeouts from the signal phase

When multiple children ignore graceful termination, this sequential loop still gives each child a fresh stop_timeout: wait_for_stop_exit constructs time::timeout(timeout, ...) only when that child's turn reaches this line. Fresh evidence after the prior two-phase shutdown change is that request_stop() records no shared deadline or elapsed time, so two children with the default 90-second timeout can still wait roughly 180 seconds plus force-kill/profile cleanup, exceeding the Windows SCM stop budget. Record the stop deadline during the signal phase or wait concurrently while preserving shutdown order.

AGENTS.md reference: AGENTS.md:L190-L192

ℹ️ 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".

Record one stop signal time during ordered shutdown and pass it to
wait_for_stop_since so later children do not each get a fresh full
graceful timeout.
@jose-manuel-almaza

Copy link
Copy Markdown
Contributor Author

💡 Codex Review

processes[idx].wait_for_stop().await;

P2 Badge Measure stop timeouts from the signal phase
When multiple children ignore graceful termination, this sequential loop still gives each child a fresh stop_timeout: wait_for_stop_exit constructs time::timeout(timeout, ...) only when that child's turn reaches this line. Fresh evidence after the prior two-phase shutdown change is that request_stop() records no shared deadline or elapsed time, so two children with the default 90-second timeout can still wait roughly 180 seconds plus force-kill/profile cleanup, exceeding the Windows SCM stop budget. Record the stop deadline during the signal phase or wait concurrently while preserving shutdown order.

AGENTS.md reference: AGENTS.md:L190-L192

ℹ️ About Codex in GitHub

@chatgpt-codex-connector
Fixed. After signaling all children, we record one signal_time and each wait uses wait_for_stop_since(signal_time), so later processes get the remaining graceful budget instead of a fresh full stop_timeout. Updated the misleading shutdown.rs comment accordingly.
Sequential force-kill and Windows profile/job cleanup can still add per-child overhead; happy to cap against SCM_STOP_WAIT_HINT in a follow-up if needed.

@DataDog DataDog deleted a comment from chatgpt-codex-connector Bot Aug 19, 2026
@jose-manuel-almaza

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

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

Reviewed commit: 0315236228

ℹ️ 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".

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

Labels

ask-review Ask in slack required teams to review this PR changelog/no-changelog No changelog entry needed internal Identify a non-fork PR long review PR is complex, plan time to review it qa/done QA done before merge and regressions are covered by tests team/agent-build team/agent-runtimes team/windows-products

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants