Upload pill lingers as 'No uploads' after uploads finish — show success briefly, then collapse #523

Open
opened 2026-09-30 14:17:00 +00:00 by kayg · 9 comments
Owner

Owner report (2026-09-30, screenshot): "why does it stay for so long after upload is done?"

After uploads finish, the upload pill above the Tab Bar stays on screen showing "No uploads", with an empty progress ring, a pause button and a chevron. It should get out of the way.
Behaviour:

  • While uploading: the pill shows progress (as today).
  • On completion: it morphs briefly into a success state ("3 files uploaded" ✓, or "1 failed", with Retry and View), then collapses away with the #236 spring after about 2 s (longer when something failed; it never auto-hides a failure).
  • It never shows "No uploads" with a pause button. With no active uploads, the pill is not rendered at all; the upload history lives in the chevron / Files → Activity.
  • Hovering or focusing the pill pauses the auto-hide. Reduced motion means no morph, just fade.
    Reuse the shared toast and pill motion; tokens only. E2E: upload 3 files, the pill appears, the success state shows, and it is gone within 3 s; a failure stays until dismissed. Screenshots at 390 and 1440 in both themes. Web gates.
## Owner report (2026-09-30, screenshot): "why does it stay for so long after upload is done?" After uploads finish, the upload pill above the Tab Bar stays on screen showing "No uploads", with an empty progress ring, a pause button and a chevron. It should get out of the way. **Behaviour:** - While uploading: the pill shows progress (as today). - On completion: it morphs briefly into a success state ("3 files uploaded" ✓, or "1 failed", with Retry and View), then collapses away with the #236 spring after about 2 s (longer when something failed; it never auto-hides a failure). - It never shows "No uploads" with a pause button. With no active uploads, the pill is not rendered at all; the upload history lives in the chevron / Files → Activity. - Hovering or focusing the pill pauses the auto-hide. Reduced motion means no morph, just fade. Reuse the shared toast and pill motion; tokens only. E2E: upload 3 files, the pill appears, the success state shows, and it is gone within 3 s; a failure stays until dismissed. Screenshots at 390 and 1440 in both themes. Web gates.
Author
Owner

Started upload pill fix on branch job/upload-pill-523; base SHA cd3cea7575.

Started upload pill fix on branch job/upload-pill-523; base SHA cd3cea757508d9f581d00fb7d5d7973fbc0a75fd.
Author
Owner

Finding from the local trace: the toast component rendered “No uploads” plus Pause whenever the queue was empty, while clean success used a 4-second timer and failures had no View action. The queue's clear() also kept error rows after the User dismissed the toast. The new component and queue regressions reproduced these states before the fix.

Decision for View: this worktree has no Files → Activity route. View opens the existing expanded per-file upload list (the chevron surface) so the User can inspect the failed item without adding a new route or API.

Finding from the local trace: the toast component rendered “No uploads” plus Pause whenever the queue was empty, while clean success used a 4-second timer and failures had no View action. The queue's clear() also kept error rows after the User dismissed the toast. The new component and queue regressions reproduced these states before the fix. Decision for View: this worktree has no Files → Activity route. View opens the existing expanded per-file upload list (the chevron surface) so the User can inspect the failed item without adding a new route or API.
Author
Owner

Finding: the content and Sonner wrapper both report pointer/focus holds. Sharing one hold key lets leaving the capsule for the wrapper padding release the hold while the pointer is still on the toast. I am tracking the two sources independently so the pill remains readable anywhere on its visible surface.

Finding: the content and Sonner wrapper both report pointer/focus holds. Sharing one hold key lets leaving the capsule for the wrapper padding release the hold while the pointer is still on the toast. I am tracking the two sources independently so the pill remains readable anywhere on its visible surface.
Author
Owner

Finding: the production E2E opened View on a failed batch, then clicked Close. 50 ms later the Sonner item still had data-removed=false and data-visible=true, so the failure could not be dismissed while its expanded state was collapsing. The resize callback was refreshing the toast during dismissal; I am gating that refresh until a new upload batch starts.

Finding: the production E2E opened View on a failed batch, then clicked Close. 50 ms later the Sonner item still had data-removed=false and data-visible=true, so the failure could not be dismissed while its expanded state was collapsing. The resize callback was refreshing the toast during dismissal; I am gating that refresh until a new upload batch starts.
Author
Owner

Finding from the first local profile attempt: the six three-file batches completed, but the 300-file import did not reach “300 files uploaded” within the 180-second bound. The shared host load average was about 35. The failed attempt also showed sampler cleanup errors after the timeout closed Chromium. This is a slow-only measurement result; it did not establish a product failure.

I updated the profile to measure the 300-row queue and expanded list while three real create requests are held after the local API responds. The bounded sample is five seconds, and the sampler stops before browser/server cleanup. I will use the resulting numbers as the local baseline and include the high host load.

Finding from the first local profile attempt: the six three-file batches completed, but the 300-file import did not reach “300 files uploaded” within the 180-second bound. The shared host load average was about 35. The failed attempt also showed sampler cleanup errors after the timeout closed Chromium. This is a slow-only measurement result; it did not establish a product failure. I updated the profile to measure the 300-row queue and expanded list while three real create requests are held after the local API responds. The bounded sample is five seconds, and the sampler stops before browser/server cleanup. I will use the resulting numbers as the local baseline and include the high host load.
Author
Owner

Screenshot finding: the progress and failure icons centered against the full headline-plus-detail block, which put them below the headline cap line. I am changing the toast summary to use a dedicated headline row and secondary detail row. The alignment will come from CSS grid and shared text-leading tokens; no runtime layout measurement is added.

Screenshot finding: the progress and failure icons centered against the full headline-plus-detail block, which put them below the headline cap line. I am changing the toast summary to use a dedicated headline row and secondary detail row. The alignment will come from CSS grid and shared text-leading tokens; no runtime layout measurement is added.
Author
Owner

The first post-alignment E2E run passed light 390/820/1440 and dark 390, then lost the two-second success toast during dark 820 screenshot capture. This was a capture race, not an upload-state failure. The E2E will hover-hold each success pill during screenshot capture, then move the pointer away before checking dismissal within three seconds.

The first post-alignment E2E run passed light 390/820/1440 and dark 390, then lost the two-second success toast during dark 820 screenshot capture. This was a capture race, not an upload-state failure. The E2E will hover-hold each success pill during screenshot capture, then move the pointer away before checking dismissal within three seconds.
Author
Owner

Final report — Forgejo #523

Head: 0adfa4a1c0573c4585314072a289eb1246c70910

Built

  • The upload pill is absent when the queue is empty. While work is active, it shows progress. Clean completion shows a check and the uploaded-file count, then dismisses after about two seconds. Hover, keyboard focus, and expansion preserve the remaining time. Failures stay until dismissed and show Retry when retryable plus View.
  • Reduced motion skips the morph and fades the toast. The shared Sonner wrapper and the pill share hover/focus holds. Dismissing a settled toast clears settled queue rows after the shared exit while keeping active uploads.
  • Added a real-server browser E2E for three-file uploads, success dismissal, persistent retryable failure, and reduced motion. Captures cover phone 390 px, tablet 820 px and desktop 1440 px in light and dark themes.
  • Added bench/upload-pill-523.mjs and the first workloads.upload_pill_523 baseline in docs/perf/baseline.json.

Files

  • apps/web/src/lib/files/UploadToast.svelte
  • apps/web/src/lib/files/uploadToast.ts
  • apps/web/src/lib/files/uploads.svelte.ts
  • apps/web/src/lib/files/UploadToast.svelte.test.ts
  • apps/web/src/lib/files/uploads.svelte.test.ts
  • apps/web/e2e/upload-pill-523.mjs
  • apps/web/e2e/files-paste.mjs
  • apps/web/package.json
  • bench/upload-pill-523.mjs
  • docs/perf/baseline.json

Decisions and known gap

The current Files UI has no Activity route or persisted upload-activity API. For this issue, View expands the existing per-file list. Dismissal clears settled rows after the toast exit, so upload history is not durable and Files → Activity remains unimplemented. This is the only material gap against the requested behavior.

Performance profile

Measured locally on calternal-dev using the production SPA and local debug API because the single-tenant perf VM lock was busy. The host was under high load: load average was 38.30 / 39.07 / 35.56 before and 45.40 / 41.33 / 36.71 after.

For six real three-file batches: pill visible p50 95.7 ms / p95 172 ms; success p50 2,987.3 ms / p95 37,883.2 ms; dismissal p50 2,018.5 ms / p95 2,591.3 ms. Browser mean / peak RSS was 517,920,885 / 531,111,936 bytes. Server mean / peak RSS was 224,067,287 / 227,016,704 bytes.

Worst case sampled a real 300-file, 1 KiB-per-file queue with three create responses held while the full list rendered: pill visible in 1,234.3 ms; browser mean / peak RSS 578,818,420 / 601,776,128 bytes; server mean / peak RSS 226,992,128 / 227,016,704 bytes. This is the first upload-pill profile, so there is no prior baseline comparison. An initial unbounded 300-file transfer profile timed out at 180 s under load; the bounded UI-burst profile above completed and is recorded in the baseline.

Screenshots

Each link opens the attached screenshot for the named state, viewport and theme.

Gates

bun run check output:

$ node scripts/check-type-tokens.mjs && node scripts/check-motion-tokens.mjs && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json
Text sizes and UI shape values use shared role tokens.
UI transitions and animation options use shared motion tokens or documented exceptions.
Loading svelte-check in workspace: /home/kayg/Developer/calternal-wt/upload-pill-523/apps/web
Getting Svelte diagnostics...

svelte-check found 0 errors and 0 warnings

bun run test output:

$ vitest run

 RUN  v5.0.1 /home/kayg/Developer/calternal-wt/upload-pill-523/apps/web

Could not parse CSS stylesheet
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method
Not implemented: Window's scrollTo() method

 Test Files  138 passed (138)
      Tests  909 passed (909)
   Start at  18:43:55
   Duration  150.92s (transform 59%, environment 15%, import 14%, tests 9%, setup 3%)

Environment  |component| jsdom was created 43 times · 126.31s total, 27% of tracked time
             create it once per worker with pool: 'vmThreads' (keeps per-file isolation) or isolate: false (shares it across files)
             learn more: https://vitest.dev/guide/improving-performance#test-environments

Production build passed in 42.69 s (2,950 modules); it emitted existing Rolldown use client directive notices. Real-server E2E output:

$ bunx --silent --package=playwright@1.63.0 playwright --version && bun e2e/upload-pill-523.mjs
Version 1.63.0
PASS light 390px: three uploads show progress, success, then dismiss
PASS light 820px: three uploads show progress, success, then dismiss
PASS light 1440px: three uploads show progress, success, then dismiss
PASS dark 390px: three uploads show progress, success, then dismiss
PASS dark 820px: three uploads show progress, success, then dismiss
PASS dark 1440px: three uploads show progress, success, then dismiss
PASS retryable failure stays until dismissed; reduced motion fades without movement
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-390-uploading.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-390-success.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-390-failure.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-820-uploading.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-820-success.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-820-failure.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-1440-uploading.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-1440-success.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-1440-failure.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-390-uploading.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-390-success.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-390-failure.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-820-uploading.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-820-success.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-820-failure.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-1440-uploading.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-1440-success.png
SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-1440-failure.png

No Rust source or route/contract changed, so Rust gates and the API adversarial round did not apply. git diff --check passed. Source comments were re-read before this report.

## Final report — Forgejo #523 **Head:** `0adfa4a1c0573c4585314072a289eb1246c70910` ### Built - The upload pill is absent when the queue is empty. While work is active, it shows progress. Clean completion shows a check and the uploaded-file count, then dismisses after about two seconds. Hover, keyboard focus, and expansion preserve the remaining time. Failures stay until dismissed and show Retry when retryable plus View. - Reduced motion skips the morph and fades the toast. The shared Sonner wrapper and the pill share hover/focus holds. Dismissing a settled toast clears settled queue rows after the shared exit while keeping active uploads. - Added a real-server browser E2E for three-file uploads, success dismissal, persistent retryable failure, and reduced motion. Captures cover phone 390 px, tablet 820 px and desktop 1440 px in light and dark themes. - Added `bench/upload-pill-523.mjs` and the first `workloads.upload_pill_523` baseline in `docs/perf/baseline.json`. ### Files - `apps/web/src/lib/files/UploadToast.svelte` - `apps/web/src/lib/files/uploadToast.ts` - `apps/web/src/lib/files/uploads.svelte.ts` - `apps/web/src/lib/files/UploadToast.svelte.test.ts` - `apps/web/src/lib/files/uploads.svelte.test.ts` - `apps/web/e2e/upload-pill-523.mjs` - `apps/web/e2e/files-paste.mjs` - `apps/web/package.json` - `bench/upload-pill-523.mjs` - `docs/perf/baseline.json` ### Decisions and known gap The current Files UI has no Activity route or persisted upload-activity API. For this issue, View expands the existing per-file list. Dismissal clears settled rows after the toast exit, so upload history is not durable and Files → Activity remains unimplemented. This is the only material gap against the requested behavior. ### Performance profile Measured locally on `calternal-dev` using the production SPA and local debug API because the single-tenant perf VM lock was busy. The host was under high load: load average was 38.30 / 39.07 / 35.56 before and 45.40 / 41.33 / 36.71 after. For six real three-file batches: pill visible p50 95.7 ms / p95 172 ms; success p50 2,987.3 ms / p95 37,883.2 ms; dismissal p50 2,018.5 ms / p95 2,591.3 ms. Browser mean / peak RSS was 517,920,885 / 531,111,936 bytes. Server mean / peak RSS was 224,067,287 / 227,016,704 bytes. Worst case sampled a real 300-file, 1 KiB-per-file queue with three create responses held while the full list rendered: pill visible in 1,234.3 ms; browser mean / peak RSS 578,818,420 / 601,776,128 bytes; server mean / peak RSS 226,992,128 / 227,016,704 bytes. This is the first upload-pill profile, so there is no prior baseline comparison. An initial unbounded 300-file transfer profile timed out at 180 s under load; the bounded UI-burst profile above completed and is recorded in the baseline. ### Screenshots Each link opens the attached screenshot for the named state, viewport and theme. - Light 390 px: [uploading](https://git.kayg.org/attachments/8b8d6583-a7cb-4f62-8d91-d21671672bf5) · [success](https://git.kayg.org/attachments/ee27e78b-5d6d-4bcf-8a2a-0b619e3723fa) · [failure](https://git.kayg.org/attachments/84ea3954-4ecb-4450-8d34-e3b423f9732e) - Light 820 px: [uploading](https://git.kayg.org/attachments/faa4f51c-0b01-4523-937c-b253bd516f22) · [success](https://git.kayg.org/attachments/cc182fd6-da84-40d1-a097-3e61a7beb7e9) · [failure](https://git.kayg.org/attachments/5634de67-2208-45b2-b9af-cea0b3ef4e40) - Light 1440 px: [uploading](https://git.kayg.org/attachments/085093fd-6ebb-4398-8d36-2e05c852d13a) · [success](https://git.kayg.org/attachments/25a6efcc-8fa9-4c98-af60-5777c238fa55) · [failure](https://git.kayg.org/attachments/1e9f57e0-dcca-4299-9a51-78b0123f26ad) - Dark 390 px: [uploading](https://git.kayg.org/attachments/d45ba781-9311-4373-8fb4-805db20b4fd4) · [success](https://git.kayg.org/attachments/fae22507-853f-432a-b8e3-665fecfe8264) · [failure](https://git.kayg.org/attachments/5cf2ded3-bc05-46b2-b99b-5410157de8a8) - Dark 820 px: [uploading](https://git.kayg.org/attachments/1fa47d32-71f9-4e4e-b677-4d39dc654d58) · [success](https://git.kayg.org/attachments/09c01b5e-71e1-4864-b155-8289afae3a9d) · [failure](https://git.kayg.org/attachments/c1a27371-69d7-4aea-b918-9115f586e226) - Dark 1440 px: [uploading](https://git.kayg.org/attachments/f20220ba-02d7-434d-a715-6db4e47197d0) · [success](https://git.kayg.org/attachments/f2f25a5c-de2f-41f8-bbf7-7a863babcca2) · [failure](https://git.kayg.org/attachments/6d97d9ee-a37f-469f-9363-96b8da0be1b3) ### Gates `bun run check` output: ```text $ node scripts/check-type-tokens.mjs && node scripts/check-motion-tokens.mjs && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json Text sizes and UI shape values use shared role tokens. UI transitions and animation options use shared motion tokens or documented exceptions. Loading svelte-check in workspace: /home/kayg/Developer/calternal-wt/upload-pill-523/apps/web Getting Svelte diagnostics... svelte-check found 0 errors and 0 warnings ``` `bun run test` output: ```text $ vitest run RUN v5.0.1 /home/kayg/Developer/calternal-wt/upload-pill-523/apps/web Could not parse CSS stylesheet Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Not implemented: Window's scrollTo() method Test Files 138 passed (138) Tests 909 passed (909) Start at 18:43:55 Duration 150.92s (transform 59%, environment 15%, import 14%, tests 9%, setup 3%) Environment |component| jsdom was created 43 times · 126.31s total, 27% of tracked time create it once per worker with pool: 'vmThreads' (keeps per-file isolation) or isolate: false (shares it across files) learn more: https://vitest.dev/guide/improving-performance#test-environments ``` Production build passed in 42.69 s (2,950 modules); it emitted existing Rolldown `use client` directive notices. Real-server E2E output: ```text $ bunx --silent --package=playwright@1.63.0 playwright --version && bun e2e/upload-pill-523.mjs Version 1.63.0 PASS light 390px: three uploads show progress, success, then dismiss PASS light 820px: three uploads show progress, success, then dismiss PASS light 1440px: three uploads show progress, success, then dismiss PASS dark 390px: three uploads show progress, success, then dismiss PASS dark 820px: three uploads show progress, success, then dismiss PASS dark 1440px: three uploads show progress, success, then dismiss PASS retryable failure stays until dismissed; reduced motion fades without movement SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-390-uploading.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-390-success.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-390-failure.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-820-uploading.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-820-success.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-820-failure.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-1440-uploading.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-1440-success.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/light-1440-failure.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-390-uploading.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-390-success.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-390-failure.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-820-uploading.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-820-success.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-820-failure.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-1440-uploading.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-1440-success.png SCREENSHOT /home/kayg/Developer/calternal-wt/upload-pill-523/artifacts/upload-pill-523/dark-1440-failure.png ``` No Rust source or route/contract changed, so Rust gates and the API adversarial round did not apply. `git diff --check` passed. Source comments were re-read before this report.
Author
Owner

Hygiene review: job/upload-pill-523 at 0adfa4a1c0573c4585314072a289eb1246c70910 is not in origin/dev. The completed Upload pill work remains unmerged; keeping #523 open.

Hygiene review: `job/upload-pill-523` at `0adfa4a1c0573c4585314072a289eb1246c70910` is not in `origin/dev`. The completed Upload pill work remains unmerged; keeping #523 open.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal#523
No description provided.