Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
7c477be
deps(deps): bump jackson-bom.version from 2.22.1 to 2.22.2
dependabot[bot] Aug 24, 2026
b0e3e80
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Sep 30, 2026
228160c
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Sep 30, 2026
4b5537f
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Sep 30, 2026
07ea297
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Sep 30, 2026
f688339
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Sep 30, 2026
4093ba3
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Sep 30, 2026
6c5f85b
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Sep 30, 2026
8c54c5c
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Sep 30, 2026
db26968
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Sep 30, 2026
cbbedaf
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Oct 1, 2026
d7cef79
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Oct 1, 2026
39dc197
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Oct 1, 2026
6009953
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Oct 1, 2026
3e9ba61
fix(security): patch Jackson denial-of-service CVEs
seonghobae Oct 1, 2026
bf121df
docs(gaps): bind Jackson repair to exact evidence
seonghobae Oct 1, 2026
7d0e62b
merge: consume canonical Jackson security owner #503
seonghobae Oct 1, 2026
5d27441
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Oct 1, 2026
a0cfe28
fix(security): restore canonical Jackson owner delta after concurrent…
seonghobae Oct 1, 2026
19795e9
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Oct 1, 2026
020ba5f
fix(security): preserve owner repair after second concurrent revert
seonghobae Oct 1, 2026
9805038
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Oct 1, 2026
abd49b3
docs(rca): record repeated Jackson owner rollback on #661
seonghobae Oct 1, 2026
2238060
fix(security): restore owner tree after third concurrent rollback
seonghobae Oct 1, 2026
a486ce3
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Oct 1, 2026
1ed453a
fix(security): restore owner evidence after fourth concurrent rollback
seonghobae Oct 1, 2026
586bfc9
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Oct 1, 2026
ff272b6
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Oct 1, 2026
5a4f1b3
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Oct 1, 2026
19a76bd
🎨 Palette: μž…λ ₯ 폼의 ν•„μˆ˜ ν•­λͺ©μ— λͺ…μ‹œμ μΈ (required) ν…μŠ€νŠΈ μΆ”κ°€
seonghobae Oct 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .jules/palette.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,6 @@
## 2026-07-13 - Async Table Actions UX
**Learning:** Adding explicit loading and disabled states to table action buttons that invoke asynchronous processes helps prevent redundant API calls and visually assures the user that their request is being handled.
**Action:** Consistently apply `disabled` state and `Loading...` text changes to inline table action buttons linked to async workflows, and carefully preserve underlying DOM structures with `Array.from(btn.childNodes)` during the loading cycle to avoid rendering regressions.
## 2026-09-30 - Add explicit text (required) to field label
**Learning:** Required form fields need explicit text `(required)` inside the label for accessibility, rather than using styled asterisks. When doing so inside a CSS grid container like `.field-label`, the text needs to be wrapped in a `<span>` to prevent `display: grid` from forcing elements onto separate tracks.
**Action:** Use explicit `(required)` text wrapped in `<span>` for required fields in CSS grids.
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ private static String demoShellHtml() {
</div>

<form id="upload-form" class="upload-form" enctype="multipart/form-data">
<label class="field-label" for="file-input">Document</label>
<label class="field-label" for="file-input"><span>Document (required)</span></label>
<input id="file-input" name="file" class="file-input" type="file" required />

<div class="actions">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.clearfolio.viewer.controller;

import static org.junit.jupiter.api.Assertions.assertTrue;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.http.MediaType;
import org.springframework.test.web.reactive.server.WebTestClient;

class ViewerUiRequiredFieldAccessibilityTest {

private WebTestClient webTestClient;

@BeforeEach
void setUp() {
ViewerUiController controller = new ViewerUiController();
webTestClient = WebTestClient.bindToController(controller).build();
}

@Test
void viewerRendersAccessibleRequiredField() {
webTestClient.get()
.uri("/")
.exchange()
.expectStatus().isOk()
.expectHeader().contentTypeCompatibleWith(MediaType.TEXT_HTML)
.expectBody(String.class)
.value(body -> {
assertTrue(body.contains("for=\"file-input\""));
assertTrue(body.contains("<span>Document (required)</span>"));
});
}
}
Loading