Skip to content

feat(dashboard-api): add template tags handlers#2885

Open
drankou wants to merge 15 commits into
mainfrom
template-dashboard-enhancements-versioning-and-storage-usage-eng-3771
Open

feat(dashboard-api): add template tags handlers#2885
drankou wants to merge 15 commits into
mainfrom
template-dashboard-enhancements-versioning-and-storage-usage-eng-3771

Conversation

@drankou
Copy link
Copy Markdown
Contributor

@drankou drankou commented Jun 1, 2026

Adds the dashboard-api read endpoints powering the per-template detail view: single-template read (with latest ready build + versioning/storage fields) and tag-grouped assignment history with keyset pagination, search, and sort.

Endpoints

Method Path Purpose
GET /templates/{templateID} Single-template detail (build, vCPU/RAM/disk, envd version, aliases)
GET /templates/{templateID}/tags/groups Ready tag groups with bounded per-tag history
GET /templates/{templateID}/tags/count Distinct ready tag count
GET /templates/{templateID}/tags/exists Whether a tag has any ready assignment
GET /templates/{templateID}/tags/{tag}/assignments Paginated ready assignments for one tag

Pagination & sort

  • Tag groups: sort ∈ {latest_desc (default), latest_asc, name_asc, name_desc}, cursor {sort}|{ts}|{tag} (rejected on sort mismatch). tagsLimit ≤ 100, per-tag assignmentLimit ≤ 25.
  • Assignments: cursor assigned_at|assignment_id, limit ≤ 100.
  • Search: ^[a-z0-9._-]{0,64}$, case-insensitive substring on tag.

@linear-code
Copy link
Copy Markdown

linear-code Bot commented Jun 1, 2026

ENG-3771

@cla-bot cla-bot Bot added the cla-signed label Jun 1, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented Jun 1, 2026

❌ 4 Tests Failed:

Tests completed Failed Passed Skipped
2729 4 2725 7
View the full list of 4 ❄️ flaky test(s)
github.com/e2b-dev/infra/tests/integration/internal/tests/api/sandboxes::TestSandboxListPaginationRunningLargerLimit

Flake rate in main: 40.08% (Passed 885 times, Failed 592 times)

Stack Traces | 95.7s run time
=== RUN   TestSandboxListPaginationRunningLargerLimit
    sandbox_list_test.go:327: Created sandbox 1/12: i73qtftbqscx11a0h2qk9
    sandbox_list_test.go:327: Created sandbox 2/12: i30cdicfugllpui5d9dff
    sandbox_list_test.go:327: Created sandbox 3/12: i4op5cx0xlm0g9jbwcewp
    sandbox_list_test.go:327: Created sandbox 4/12: ik8mk5dg6rfbjgt7c0dqm
    sandbox_list_test.go:327: Created sandbox 5/12: ij11zrbii5ybclcsq1kpa
    sandbox_list_test.go:327: Created sandbox 6/12: ijatb461493z1x6jpk47u
    sandbox_list_test.go:327: Created sandbox 7/12: ilqbusav7aslyve1ta4hw
    sandbox_list_test.go:327: Created sandbox 8/12: iywlesaf10gp718scdsqg
    sandbox_list_test.go:327: Created sandbox 9/12: i9gteal749whrptrona76
    sandbox_list_test.go:327: Created sandbox 10/12: i63f2a2in9fhlnbuuv7h8
    sandbox_list_test.go:327: Created sandbox 11/12: isn221i66e5zklpmm9ual
    sandbox_list_test.go:327: Created sandbox 12/12: i2xo04n4axir2861s3pnd
    sandbox_list_test.go:330: 
        	Error Trace:	.../api/sandboxes/sandbox_list_test.go:340
        	            				.../hostedtoolcache/go/1.26.3.../src/runtime/asm_amd64.s:1771
        	Error:      	"[]" should have 12 item(s), but has 0
    sandbox_list_test.go:330: 
        	Error Trace:	.../api/sandboxes/sandbox_list_test.go:330
        	Error:      	Condition never satisfied
        	Test:       	TestSandboxListPaginationRunningLargerLimit
--- FAIL: TestSandboxListPaginationRunningLargerLimit (95.67s)
github.com/e2b-dev/infra/tests/integration/internal/tests/orchestrator::TestSandboxMemoryIntegrity

Flake rate in main: 54.88% (Passed 878 times, Failed 1068 times)

Stack Traces | 65.4s run time
=== RUN   TestSandboxMemoryIntegrity
=== PAUSE TestSandboxMemoryIntegrity
=== CONT  TestSandboxMemoryIntegrity
    sandbox_memory_integrity_test.go:27: Build completed successfully
--- FAIL: TestSandboxMemoryIntegrity (65.43s)
github.com/e2b-dev/infra/tests/integration/internal/tests/orchestrator::TestSandboxMemoryIntegrity/tmpfs_hash

Flake rate in main: 54.96% (Passed 868 times, Failed 1059 times)

Stack Traces | 191s run time
=== RUN   TestSandboxMemoryIntegrity/tmpfs_hash
=== PAUSE TestSandboxMemoryIntegrity/tmpfs_hash
=== CONT  TestSandboxMemoryIntegrity/tmpfs_hash
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{start:{pid:1252}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stdout:"Total memory: 985 MB\nUsed memory before tmpfs mount: 186 MB\nFree memory before tmpfs mount: 798 MB\nMemory to use in integrity test (60% of free, min 64MB): 478 MB\n"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"478+0 records in\n478+0 records out\n501219328 bytes (501 MB, 478 MiB) copied, 1.92783 s, 260 MB/s\n"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"\tCommand being tim"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"ed: \"dd if=/dev/urandom of=/mnt/testfile bs=1M count=478\"\n\tU"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"ser time (seconds): 0.00\n\tSystem time (seconds): 1.92\n\tPercent of CPU this job got: 99%\n\tElapsed (wall clock) time (h:mm:ss or m:ss): 0:01.93\n\tAverage shared text size "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"(kbytes): 0\n\tAve"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"rage u"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"nshare"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"d dat"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"a siz"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"e (kbyte"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"s): 0"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"\n\tAve"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"rage "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"stac"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"k size ("}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"kbyte"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"s): "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"0\n\tAv"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"erage"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" total "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"size "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"(kbyt"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"es): "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"0\n\tMaximum resident set size (kbytes): 2640\n\tAverage resident set size (kbytes): 0"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"\n\tMajor (requiring I/O"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:") pag"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"e fau"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"lts: "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"2\n\tMinor"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" (rec"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"laimi"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"ng a"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" fram"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"e) page"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" faul"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"ts: 346\n\t"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"Volun"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"tary"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" context"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" swit"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"ches:"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" 3\n\t"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"Invol"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"untary c"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"ontext switches: 11\n\tSwaps: 0\n\tFile system inputs: 176\n\tFile system outputs: 0"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"\n\tSocket "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"messa"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"ges sent: 0\n"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"\tSock"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"et me"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"ssage"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"s rec"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"eived: 0\n\tSignals "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"deliv"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"ered:"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" 0\n\t"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"Page "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"size (byt"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"es): "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"4096\n\t"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"Exit"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" stat"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"us: 0\n"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stdout:"Used memory after tmpfs mount and file fill: 669 MB\n"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{end:{exited:true  status:"exit status 0"}}
    sandbox_memory_integrity_test.go:70: Command [bash] completed successfully in sandbox i8zw5xo6nu9a0txwl8zl1
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
    sandbox_memory_integrity_test.go:80: Command [bash] output: event:{start:{pid:1268}}
Executing command bash in sandbox iorlit3l0ji5o367kjrsx (user: root)
    sandbox_memory_integrity_test.go:80: Command [bash] output: event:{data:{stdout:"e65dabcef8a9c18189a369222c498e8583b81788a2e12a1e60adf96277c35b8e\n"}}
    sandbox_memory_integrity_test.go:80: Command [bash] output: event:{end:{exited:true  status:"exit status 0"}}
    sandbox_memory_integrity_test.go:80: Command [bash] completed successfully in sandbox i8zw5xo6nu9a0txwl8zl1
    sandbox_memory_integrity_test.go:80: Command [bash] output: event:{start:{pid:1271}}
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
Executing command bash in sandbox i8zw5xo6nu9a0txwl8zl1 (user: root)
    sandbox_memory_integrity_test.go:110: 
        	Error Trace:	.../tests/orchestrator/sandbox_memory_integrity_test.go:81
        	            				.../hostedtoolcache/go/1.26.3.../src/runtime/asm_amd64.s:1771
        	Error:      	Received unexpected error:
        	            	failed to execute command bash in sandbox i8zw5xo6nu9a0txwl8zl1: unavailable: HTTP status 502 Bad Gateway
    sandbox_memory_integrity_test.go:110: 
        	Error Trace:	.../tests/orchestrator/sandbox_memory_integrity_test.go:78
        	            				.../tests/orchestrator/sandbox_memory_integrity_test.go:110
        	Error:      	Condition never satisfied
        	Test:       	TestSandboxMemoryIntegrity/tmpfs_hash
--- FAIL: TestSandboxMemoryIntegrity/tmpfs_hash (190.91s)
github.com/e2b-dev/infra/tests/integration/internal/tests/proxies::TestEnvdAccessTokenAutoResumeViaProxy

Flake rate in main: 39.97% (Passed 874 times, Failed 582 times)

Stack Traces | 10.8s run time
=== RUN   TestEnvdAccessTokenAutoResumeViaProxy
=== PAUSE TestEnvdAccessTokenAutoResumeViaProxy
=== CONT  TestEnvdAccessTokenAutoResumeViaProxy
    traffic_access_token_test.go:357: 
        	Error Trace:	.../tests/proxies/traffic_access_token_test.go:357
        	Error:      	Received unexpected error:
        	            	Get "http://localhost:3002/health": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
        	Test:       	TestEnvdAccessTokenAutoResumeViaProxy
--- FAIL: TestEnvdAccessTokenAutoResumeViaProxy (10.79s)

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

Copy link
Copy Markdown
Contributor

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

Choose a reason for hiding this comment

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

Code Review

Using a sentinel value of only one hour in the future for the initial cursor timestamp can cause assignments with timestamps further in the future to be silently omitted from the first page of results. A far-future timestamp sentinel, such as year 9999, should be used instead to ensure all future-dated assignments are correctly included.

Comment thread packages/dashboard-api/internal/handlers/template_tag_assignments.go Outdated
@drankou drankou force-pushed the template-dashboard-enhancements-versioning-and-storage-usage-eng-3771 branch from 13fcbd8 to 0e9a92c Compare June 2, 2026 12:09
@drankou drankou marked this pull request as ready for review June 2, 2026 15:23
Comment thread packages/dashboard-api/internal/handlers/template_get.go Outdated
@drankou drankou force-pushed the template-dashboard-enhancements-versioning-and-storage-usage-eng-3771 branch from def15d4 to 352818c Compare June 5, 2026 09:05
Copy link
Copy Markdown

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

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: 352818c727

ℹ️ 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 packages/dashboard-api/internal/handlers/template_tag_assignments.go Outdated
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.

1 participant