Skip to content

[EN-1038] feat(db): add template disk entitlement schema#3286

Open
gm-e2b wants to merge 1 commit into
mainfrom
db-migration-disk-size
Open

[EN-1038] feat(db): add template disk entitlement schema#3286
gm-e2b wants to merge 1 commit into
mainfrom
db-migration-disk-size

Conversation

@gm-e2b

@gm-e2b gm-e2b commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Separate the default template free-space target from the maximum total root filesystem size that a team may build.

Add nullable default_free_disk_size_mb and max_disk_size_mb columns to tiers, plus extra_max_disk_size_mb to add-ons. Keep extra_disk_mb as the add-on contribution to default free space and add constraints preventing invalid negative or inverted tier values.

Keep the existing team_limits view unchanged for current consumers and introduce team_limits_v2 with the new effective default and maximum fields. Preserve compatibility with legacy add-on writers by treating a null extra maximum as equal to extra_disk_mb.

Leave data population and runtime adoption to later rollout steps so this commit remains an expand-only schema change.

Regenerate the database models and add focused migration coverage for the new columns, the unchanged V1 view, the V2 contract, security invoker behavior, and effective tier-plus-add-on calculations.

Part of: EN-1038

@linear-code

linear-code Bot commented Jul 14, 2026

Copy link
Copy Markdown

EN-1038

@cla-bot cla-bot Bot added the cla-signed label Jul 14, 2026
@codecov

codecov Bot commented Jul 14, 2026

Copy link
Copy Markdown

❌ 6 Tests Failed:

Tests completed Failed Passed Skipped
3334 6 3328 9
View the top 3 failed test(s) by shortest run time
github.com/e2b-dev/infra/tests/integration/internal/tests/api/sandboxes::TestSandboxResume_FilesystemOnlyReboots
Stack Traces | 6.47s run time
=== RUN   TestSandboxResume_FilesystemOnlyReboots
=== PAUSE TestSandboxResume_FilesystemOnlyReboots
=== CONT  TestSandboxResume_FilesystemOnlyReboots
Executing command cat in sandbox i8f6nxwir3adqd3irab7f (user: root)
    filesystem_only_test.go:118: Command [cat] output: event:{start:{pid:1139}}
    filesystem_only_test.go:118: Command [cat] output: event:{data:{stdout:"c884d799-4417-421b-a0cc-8c632dc7633f\n"}}
    filesystem_only_test.go:118: Command [cat] output: event:{end:{exited:true  status:"exit status 0"}}
    filesystem_only_test.go:118: Command [cat] completed successfully in sandbox i8f6nxwir3adqd3irab7f
Executing command /bin/sh in sandbox i8f6nxwir3adqd3irab7f (user: root)
    filesystem_only_test.go:125: Command [/bin/sh] output: event:{start:{pid:1140}}
    filesystem_only_test.go:125: Command [/bin/sh] output: event:{end:{exited:true  status:"exit status 0"}}
    filesystem_only_test.go:125: Command [/bin/sh] completed successfully in sandbox i8f6nxwir3adqd3irab7f
    filesystem_only_test.go:139: 
        	Error Trace:	.../api/sandboxes/filesystem_only_test.go:139
        	Error:      	Not equal: 
        	            	expected: 201
        	            	actual  : 500
        	Test:       	TestSandboxResume_FilesystemOnlyReboots
        	Messages:   	explicit resume of a filesystem-only snapshot should succeed (cold boot)
--- FAIL: TestSandboxResume_FilesystemOnlyReboots (6.47s)
github.com/e2b-dev/infra/tests/integration/internal/tests/api/sandboxes::TestSandboxConnect_FilesystemOnlyResumes
Stack Traces | 75.8s run time
=== RUN   TestSandboxConnect_FilesystemOnlyResumes
=== PAUSE TestSandboxConnect_FilesystemOnlyResumes
=== CONT  TestSandboxConnect_FilesystemOnlyResumes
    filesystem_only_test.go:92: 
        	Error Trace:	.../api/sandboxes/filesystem_only_test.go:92
        	Error:      	Not equal: 
        	            	expected: 201
        	            	actual  : 500
        	Test:       	TestSandboxConnect_FilesystemOnlyResumes
        	Messages:   	connecting to a paused filesystem-only snapshot should resume it (cold boot)
--- FAIL: TestSandboxConnect_FilesystemOnlyResumes (75.76s)
github.com/e2b-dev/infra/tests/integration/internal/tests/api/templates::TestUpdateTemplateNotOwnedByTeam
Stack Traces | 173s run time
=== RUN   TestUpdateTemplateNotOwnedByTeam
=== PAUSE TestUpdateTemplateNotOwnedByTeam
=== CONT  TestUpdateTemplateNotOwnedByTeam
    template_update_test.go:205: Build failed: {<nil> An internal error occurred. Please try again or contact support with the build ID. <nil>}
--- FAIL: TestUpdateTemplateNotOwnedByTeam (172.63s)
github.com/e2b-dev/infra/tests/integration/internal/tests/api/templates::TestTemplateBuildFromTemplateStartCommand
Stack Traces | 175s run time
=== RUN   TestTemplateBuildFromTemplateStartCommand
=== PAUSE TestTemplateBuildFromTemplateStartCommand
=== CONT  TestTemplateBuildFromTemplateStartCommand
    build_template_test.go:133: test-ubuntu-start-base: [info] Building template pia1nnosvak5avacv3vg/98ff65bb-c7c0-47c5-955f-30d9170e0e94
    build_template_test.go:133: test-ubuntu-start-base: [info] [base] FROM ubuntu:22.04 [f9f564014e009a9561a82bf8c84f9314242971e833fb019936654ecba452f184]
    build_template_test.go:133: test-ubuntu-start-base: [info] Base Docker image size: 30 MB
    build_template_test.go:133: test-ubuntu-start-base: [info] Creating file system and pulling Docker image
    build_template_test.go:133: test-ubuntu-start-base: [info] Uncompressing layer sha256:d6834b4a794c03efa2c998853e64969fa8851b11b2ade63292268872a37759d0 30 MB
    build_template_test.go:133: test-ubuntu-start-base: [info] Uncompressing layer sha256:0a0c1a15eecbe71eebe091d375092fdffc46a4b3663452f1f5c6df0f3344e5ee 13 MB
    build_template_test.go:133: test-ubuntu-start-base: [info] Uncompressing layer sha256:8c4b1b28875140ed3abacaf16ad0d696f6bef912f52d2148f261a23e3349465b 168 B
    build_template_test.go:133: test-ubuntu-start-base: [info] Layers extracted
    build_template_test.go:133: test-ubuntu-start-base: [info] Root filesystem structure: bin, boot, dev, etc, home, lib, lib32, lib64, libx32, media, mnt, opt, proc, root, run, sbin, srv, sys, tmp, usr, var
    build_template_test.go:133: test-ubuntu-start-base: [info] Provisioning sandbox template
    build_template_test.go:133: test-ubuntu-start-base: [info] Provisioning was successful, cleaning up
    build_template_test.go:133: test-ubuntu-start-base: [info] Sandbox template provisioned
    build_template_test.go:133: test-ubuntu-start-base: [info] [base] DEFAULT USER user [49e586c2171254c6bc4a09e84eedac32dbcf113a158c24248129af2f49cbed74]
    build_template_test.go:133: test-ubuntu-start-base: [info] [builder 1/2] ENV START_ENV start_value [22ecb2c2ce1b1d262e37d2cd71b90e6d33fdf99ecfca361e1a2c284afb7fc08a]
    build_template_test.go:133: test-ubuntu-start-base: [info] [builder 2/2] WORKDIR /start/workdir [f841574929b92d8b6e15a8fc6477f0f1e568eac3d30ae7110a831bbcea62e921]
    build_template_test.go:133: test-ubuntu-start-base: [info] [finalize] Finalizing template build [a509f6bf83c53e4844e4d62e9e93f7dae0d5706e070f3f756fe6d227a04976e4]
    build_template_test.go:133: test-ubuntu-start-base: [error] Build failed: An internal error occurred. Please try again or contact support with the build ID.
    build_template_test.go:700: Build failed: {<nil> An internal error occurred. Please try again or contact support with the build ID. <nil>}
--- FAIL: TestTemplateBuildFromTemplateStartCommand (174.93s)
github.com/e2b-dev/infra/tests/integration/internal/tests/api/templates::TestTemplateBuildCOPY
Stack Traces | 193s run time
=== RUN   TestTemplateBuildCOPY
=== PAUSE TestTemplateBuildCOPY
=== CONT  TestTemplateBuildCOPY
    build_template_test.go:133: test-ubuntu-copy: [info] Building template a7xk6wizjozxmrbdwstq/f7e1ff99-0375-48a3-a64e-4a19aa3fce22
    build_template_test.go:133: test-ubuntu-copy: [info] [base] FROM ubuntu:24.04 [a9b3ad91e89daabce8685d67ae12aacb4a128e5aea703dc57457c0ef17079b25]
    build_template_test.go:133: test-ubuntu-copy: [info] Base Docker image size: 30 MB
    build_template_test.go:133: test-ubuntu-copy: [info] Creating file system and pulling Docker image
    build_template_test.go:133: test-ubuntu-copy: [info] Uncompressing layer sha256:ca2678b20700c15185707964d9211b1a6406196114bf675f568b6025d37b3888 30 MB
    build_template_test.go:133: test-ubuntu-copy: [info] Uncompressing layer sha256:0a0c1a15eecbe71eebe091d375092fdffc46a4b3663452f1f5c6df0f3344e5ee 13 MB
    build_template_test.go:133: test-ubuntu-copy: [info] Uncompressing layer sha256:8c4b1b28875140ed3abacaf16ad0d696f6bef912f52d2148f261a23e3349465b 168 B
    build_template_test.go:133: test-ubuntu-copy: [info] Layers extracted
    build_template_test.go:133: test-ubuntu-copy: [info] Root filesystem structure: bin, boot, dev, etc, home, lib, lib64, media, mnt, opt, proc, root, run, sbin, srv, sys, tmp, usr, var
    build_template_test.go:133: test-ubuntu-copy: [info] Provisioning sandbox template
    build_template_test.go:133: test-ubuntu-copy: [info] Provisioning was successful, cleaning up
    build_template_test.go:133: test-ubuntu-copy: [info] Sandbox template provisioned
    build_template_test.go:133: test-ubuntu-copy: [info] [base] DEFAULT USER user [f9aaa150221ef19e492ba626b8d9200ab9434ed5f63d02341f9e3be29c4b8760]
    build_template_test.go:133: test-ubuntu-copy: [info] [builder 1/2] COPY . /app/ [2449098e8b0a6a85d9aaa0edf0136f8bc69e9d618dac9611e42bba7c698fd629]
    build_template_test.go:133: test-ubuntu-copy: [info] [builder 2/2] RUN cat /app/hello.txt | grep 'Hello from COPY!' [2f22b685841af46c090bf872491df49e98da0615c4d2c99657645a92a5b4ee67]
    build_template_test.go:133: test-ubuntu-copy: [info] [builder 2/2] [stdout]: Hello from COPY!
    build_template_test.go:133: test-ubuntu-copy: [info] [finalize] Finalizing template build [d8abedde856dad9179d9e99f9778f17106da49a5286a30633b898c2e893b0482]
    build_template_test.go:133: test-ubuntu-copy: [error] Build failed: An internal error occurred. Please try again or contact support with the build ID.
    build_template_test.go:1156: Build failed: {<nil> An internal error occurred. Please try again or contact support with the build ID. <nil>}
--- FAIL: TestTemplateBuildCOPY (192.57s)
github.com/e2b-dev/infra/tests/integration/internal/tests/api/templates::TestTemplateBuildInstalledPackagesAvailable
Stack Traces | 300s run time
=== RUN   TestTemplateBuildInstalledPackagesAvailable
=== PAUSE TestTemplateBuildInstalledPackagesAvailable
=== CONT  TestTemplateBuildInstalledPackagesAvailable
    build_template_test.go:133: test-ubuntu-packages-available: [info] Building template j3e415sivq5qef0skv86/9853db77-bbd5-44e4-a3d4-f8766cf64238
    build_template_test.go:133: test-ubuntu-packages-available: [info] [base] FROM ubuntu:22.04 [f9f564014e009a9561a82bf8c84f9314242971e833fb019936654ecba452f184]
    build_template_test.go:133: test-ubuntu-packages-available: [info] Base Docker image size: 30 MB
    build_template_test.go:133: test-ubuntu-packages-available: [info] Creating file system and pulling Docker image
    build_template_test.go:133: test-ubuntu-packages-available: [info] Uncompressing layer sha256:d6834b4a794c03efa2c998853e64969fa8851b11b2ade63292268872a37759d0 30 MB
    build_template_test.go:133: test-ubuntu-packages-available: [info] Uncompressing layer sha256:0a0c1a15eecbe71eebe091d375092fdffc46a4b3663452f1f5c6df0f3344e5ee 13 MB
    build_template_test.go:133: test-ubuntu-packages-available: [info] Uncompressing layer sha256:8c4b1b28875140ed3abacaf16ad0d696f6bef912f52d2148f261a23e3349465b 168 B
    build_template_test.go:133: test-ubuntu-packages-available: [info] Layers extracted
    build_template_test.go:133: test-ubuntu-packages-available: [info] Root filesystem structure: bin, boot, dev, etc, home, lib, lib32, lib64, libx32, media, mnt, opt, proc, root, run, sbin, srv, sys, tmp, usr, var
    build_template_test.go:133: test-ubuntu-packages-available: [info] Provisioning sandbox template
    build_template_test.go:133: test-ubuntu-packages-available: [info] Provisioning was successful, cleaning up
    build_template_test.go:133: test-ubuntu-packages-available: [info] Sandbox template provisioned
    build_template_test.go:133: test-ubuntu-packages-available: [info] [base] DEFAULT USER user [49e586c2171254c6bc4a09e84eedac32dbcf113a158c24248129af2f49cbed74]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [builder 1/15] RUN dpkg-query -W -f='${Status}' systemd | grep -q 'install ok installed' [de826f48fc8f28496580ff9e64f4cd6b59aaeff2811a9bae9b4fffe6645c289e]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [builder 2/15] RUN dpkg-query -W -f='${Status}' systemd-sysv | grep -q 'install ok installed' [15d29149113620d83e56ad1512042bc0b247306802dcdb366ccf1b398b4c3cdb]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [builder 3/15] RUN dpkg-query -W -f='${Status}' openssh-server | grep -q 'install ok installed' [c7ce729a2e1d50236dd8fa2338bcd463909c353853df395eeae5a6d86c5aaaff]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [builder 4/15] RUN dpkg-query -W -f='${Status}' sudo | grep -q 'install ok installed' [401020ed635dcfa25a0d55aed045a457439f6d3712e439ecc3b33e4ba9db14eb]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [builder 5/15] RUN dpkg-query -W -f='${Status}' chrony | grep -q 'install ok installed' [a355929061ef18ba0b427ce239bb340d317d7a078f06d70889300591280426e8]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [builder 6/15] RUN dpkg-query -W -f='${Status}' socat | grep -q 'install ok installed' [d7e232005823e31f2c8a1e83ee175812553529abba39cf318b950f8963d1f969]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [builder 7/15] RUN dpkg-query -W -f='${Status}' curl | grep -q 'install ok installed' [37a6ea018deed85204e0c0105881f83ca383e092f6e16b7fab1a42bb4b3254bc]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [builder 8/15] RUN dpkg-query -W -f='${Status}' ca-certificates | grep -q 'install ok installed' [cf67f41976592227bbb1514b70f29ff6c3f187d36c227b7982bb823c86c78962]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [builder 9/15] RUN dpkg-query -W -f='${Status}' fuse3 | grep -q 'install ok installed' [b0257640d1594b1b9ea66664d67097cbdaf423169d1769d43d697e0f8f44ae5b]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [builder 10/15] RUN dpkg-query -W -f='${Status}' iptables | grep -q 'install ok installed' [1e7b717aefd403d504c973491220d70475fc8b7fa762444d2b6e37bfcaa2e84a]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [builder 11/15] RUN dpkg-query -W -f='${Status}' git | grep -q 'install ok installed' [564561d2d945e6366c96a35e281a547dfd07bbfc4096352651cbfd121930d20f]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [builder 12/15] RUN dpkg-query -W -f='${Status}' less | grep -q 'install ok installed' [7ed9ff27623a2f82daaec96e1f91e9d6b468447b732e0bcd5b61a948a0ae3c26]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [builder 13/15] RUN dpkg-query -W -f='${Status}' nftables | grep -q 'install ok installed' [fab2299ee2f5ef1eb4f33ab12637b71234a2f7a21c8fdcd2bae150612084624f]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [builder 14/15] RUN dpkg-query -W -f='${Status}' iputils-ping | grep -q 'install ok installed' [ad11c2e7f602b13f86e8f844936230c94e79bd96164a4abbdc5cf39f5fd5ba9a]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [builder 15/15] RUN dpkg-query -W -f='${Status}' jq | grep -q 'install ok installed' [13dad491042119a252a9b8d1861921889102ffdb6e0521e4940798ddf88a38b5]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [finalize] Finalizing template build [eb7b37d59c5e9b33cba4e503ad5ee98acad3960c365c3c520ed6d346004f79cb]
    build_template_test.go:133: test-ubuntu-packages-available: [info] [optimize] Optimizing template [f1746441596e199e31ff320cbc21dbca1a7bb77389dd59f9a3378b002c496de1]
    build_template_test.go:1060: 
        	Error Trace:	.../api/templates/build_template_test.go:96
        	            				.../api/templates/build_template_test.go:1060
        	Error:      	Received unexpected error:
        	            	Get "http://localhost:.../builds/9853db77-bbd5-44e4-a3d4-f8766cf64238/status?logsOffset=30&level=info": context deadline exceeded
        	Test:       	TestTemplateBuildInstalledPackagesAvailable
--- FAIL: TestTemplateBuildInstalledPackagesAvailable (300.00s)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request introduces database migrations to add disk entitlement columns to the tiers and addons tables, creates a new team_limits_v2 view, and adds corresponding Go models and tests. The review feedback identifies a critical issue where explicit ::bigint casts in the view definition cause sqlc to generate non-nullable int64 fields in Go, which will lead to runtime scan crashes when database values are NULL. To resolve this, the reviewer recommends removing the redundant casts so sqlc can correctly infer nullability, and updating the migration tests to scan into nullable pointer types.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread packages/db/migrations/20260714091415_extend_team_limits.sql
Comment thread packages/db/pkg/tests/disk_entitlements_migration_test.go Outdated

@claude claude 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.

LGTM — straightforward, well-tested expand-only schema migration.

What was reviewed:

  • Migration adds nullable disk-entitlement columns to tiers/addons with CHECK constraints (NULL-safe, no backfill needed).
  • New team_limits_v2 view combines tier + addon values, preserves security_invoker=on and legacy extra_max_disk_size_mb→extra_disk_mb fallback for old add-on writers.
  • Verified the effective default/max math in the migration test matches expectations, and that the existing team_limits (v1) view is left untouched.
  • Checked the generated TeamLimitsV2 Go struct typing NULL-derived columns as int64 instead of pgtype.Int8 — inert since no query in the codebase currently selects from team_limits_v2, so it has no runtime effect and will be corrected on the next real sqlc generation.
Extended reasoning...

Overview

This PR adds two nullable bigint columns (default_free_disk_size_mb, max_disk_size_mb) to tiers, one nullable column (extra_max_disk_size_mb) to addons, and CHECK constraints preventing negative or inverted tier values. It then introduces a new team_limits_v2 view that surfaces the effective (tier + active add-ons) default and maximum disk sizes, while leaving the existing team_limits view untouched for current consumers. Test coverage exercises column nullability, view column sets for v1 vs v2, security_invoker behavior, and the arithmetic for effective values including legacy add-on fallback.

Security risks

None identified. The new view preserves security_invoker=on, matching the existing team_limits v1 view's RLS-respecting behavior, and this is explicitly covered by a test. No auth, crypto, or permission logic is touched.

Level of scrutiny

This is a pure, additive (expand-only) database schema change with no runtime/application code wired up yet — the PR description explicitly defers data population and adoption to later steps. Given the low blast radius (no existing code paths depend on the new columns/view yet) and strong test coverage of the new schema behavior, a lighter level of scrutiny is appropriate compared to changes touching live request paths.

Other factors

The bug-hunting system found no issues. I independently checked the flagged-and-ruled-out concern about the generated TeamLimitsV2 struct mistyping nullable view columns as non-nullable int64, and confirmed it has no functional impact since nothing in the codebase queries team_limits_v2 yet — it's inert generated code that will be corrected whenever sqlc is actually re-run against a query using it. The migration's up/down scripts are symmetric and CHECK constraints are correctly NULL-safe for the expand-only rollout.

@gm-e2b
gm-e2b force-pushed the db-migration-disk-size branch 3 times, most recently from 67bcfe1 to 4621212 Compare July 14, 2026 15:46

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

can we add if not exists to the statements🙏🏻

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Added for new columns. Adding constraint checks does not support IF NOT EXISTS.

Comment thread packages/db/migrations/20260714091415_create_team_limits_v2.sql Outdated
@gm-e2b
gm-e2b force-pushed the db-migration-disk-size branch 2 times, most recently from 6f513fb to f688da7 Compare July 16, 2026 07:02
Add nullable tier entitlements for the default template free-space target
and maximum logical rootfs size, plus an add-on contribution to the maximum.
Validate non-negative defaults and add-on increments, positive maxima, and
that each default does not exceed its maximum.

Backfill existing add-ons so their maximum contribution initially matches
extra_disk_mb. Keep the new field nullable and fall back to extra_disk_mb
for writes from legacy services during rollout. Leave tier population to
the audited follow-up data migration.

Extend team_limits in place, preserving its existing columns and appending
the effective default_free_disk_size_mb and max_disk_size_mb values computed
from active add-ons.

Regenerate sqlc queries and models with nullable int64 entitlement fields,
and cover the schema shape, security-invoker setting, column compatibility,
and tier-plus-add-on calculations in the migration test.

Part of: EN-1038
@gm-e2b
gm-e2b force-pushed the db-migration-disk-size branch from f688da7 to 1bb4810 Compare July 16, 2026 10:43

@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: 1bb4810cdd

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants