Skip to content

Commit c357016

Browse files
committed
test: stabilize v1.15.1 query plan gate
1 parent 884603b commit c357016

3 files changed

Lines changed: 10 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ ReadMates는 Git tag와 GitHub Releases를 함께 사용합니다. 이 파일은
1515
### Fixed
1616

1717
- **server release image security:** `v1.15.0``Deploy Front`는 통과했지만 `Deploy Server Image`가 GHCR release tag promotion 전에 Trivy HIGH gate에서 멈췄습니다. Runtime classpath를 Jackson fixed patch line으로 정렬해 `com.fasterxml.jackson.core:jackson-databind``2.21.4`, `tools.jackson.core:jackson-databind``3.1.4`로 올리고, `jackson-annotations`는 공개된 `2.21` artifact로 고정했습니다.
18+
- **server CI query-plan gate:** `main``Backend Integration` 원격 CI가 작은 dev seed row count에서 MySQL optimizer의 full-scan 선택으로 `MySqlQueryPlanTest` 2건을 실패시켰습니다. 운영 SQL/마이그레이션은 유지하고, 해당 read-path EXPLAIN 테스트가 기존 large read-path fixture를 사용해 실제 규모에서 세션 인덱스 계약을 검증하도록 안정화했습니다.
1819

1920
### Deployment Notes
2021

@@ -26,8 +27,9 @@ ReadMates는 Git tag와 GitHub Releases를 함께 사용합니다. 이 파일은
2627
- `v1.15.0` release operation (2026-06-29): `Deploy Front` passed for tag `v1.15.0`; `Deploy Server Image` built and pushed a scan candidate but failed before release-tag promotion because Trivy found four fixed HIGH Jackson databind findings: CVE-2026-54512 and CVE-2026-54513 in `com.fasterxml.jackson.core:jackson-databind 2.21.2`, and the same CVEs in `tools.jackson.core:jackson-databind 3.1.2`.
2728
- Local dependency verification (2026-06-29): `./server/gradlew -p server dependencyInsight --dependency jackson-databind --configuration runtimeClasspath` selected `com.fasterxml.jackson.core:jackson-databind 2.21.4` and `tools.jackson.core:jackson-databind 3.1.4`.
2829
- Local server/image verification (2026-06-29): `./server/gradlew -p server clean check bootJar` passed; `./server/gradlew -p server integrationTest` passed; `docker build -f server/Dockerfile.release server -t readmates-server:v1.15.1-local` passed.
30+
- Remote CI repair (2026-06-29): `main` CI run `28338937980` passed Scripts, Public release safety, Design system, Frontend, Frontend visual regression, Backend, and E2E shards 1/3 through 3/3, but `Backend Integration` failed only in `MySqlQueryPlanTest` because tiny fixture cardinality let MySQL choose a full scan for `sessions`. The affected tests now seed the existing large read-path fixture; `./server/gradlew -p server integrationTest --tests com.readmates.performance.MySqlQueryPlanTest` passed locally.
2931
- Local vulnerability verification (2026-06-29): `docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:0.70.0 image --severity HIGH,CRITICAL --ignore-unfixed --scanners vuln readmates-server:v1.15.1-local` passed with 0 Ubuntu and Java HIGH/CRITICAL findings.
30-
- Public safety: `git diff --check -- server/build.gradle.kts CHANGELOG.md docs/development/release-readiness-review.md`, `./scripts/build-public-release-candidate.sh`, and `./scripts/public-release-check.sh .tmp/public-release-candidate` passed; gitleaks reported no leaks.
32+
- Public safety: `git diff --check -- server/build.gradle.kts server/src/test/kotlin/com/readmates/performance/MySqlQueryPlanTest.kt CHANGELOG.md docs/development/release-readiness-review.md`, `./scripts/build-public-release-candidate.sh`, and `./scripts/public-release-check.sh .tmp/public-release-candidate` passed; gitleaks reported no leaks.
3133

3234
## v1.15.0 - 2026-06-29
3335

docs/development/release-readiness-review.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99
- `v1.15.0` release operation status: `Deploy Front` passed for tag `v1.15.0`; `Deploy Server Image` built and pushed a scan candidate but failed before release-tag promotion. Therefore `ghcr.io/<owner>/<repo>/readmates-server:v1.15.0` was not promoted by the deploy workflow.
1010
- Root cause: Trivy found four fixed HIGH Jackson databind findings in the scan candidate: CVE-2026-54512 and CVE-2026-54513 in `com.fasterxml.jackson.core:jackson-databind 2.21.2`, plus the same CVEs in `tools.jackson.core:jackson-databind 3.1.2`.
1111
- Server impact: runtime dependency resolution now forces `com.fasterxml.jackson.core:jackson-databind` to `2.21.4` and `tools.jackson.core` modules to `3.1.4`; `jackson-annotations` is constrained to published `2.21` because `2.21.4` is not available.
12+
- Remote CI impact found during publication: `main` CI run `28338937980` passed Scripts, Public release safety, Design system, Frontend, Frontend visual regression, Backend, and all E2E shards, but `Backend Integration` failed in two `MySqlQueryPlanTest` cases. The failing EXPLAIN plans used full scans on `sessions` only because the shallow dev seed made MySQL's cost model prefer a tiny-table scan. The affected tests now seed the existing large read-path fixture before checking the session cursor plans, keeping the index-use contract while removing small-cardinality optimizer noise.
1213
- Local dependency verification before publication: `./server/gradlew -p server dependencyInsight --dependency jackson-databind --configuration runtimeClasspath` selected `com.fasterxml.jackson.core:jackson-databind 2.21.4` and `tools.jackson.core:jackson-databind 3.1.4`.
1314
- Local server/image verification before publication:
1415
- `./server/gradlew -p server clean check bootJar` - pass.
1516
- `./server/gradlew -p server integrationTest` - pass.
17+
- `./server/gradlew -p server integrationTest --tests com.readmates.performance.MySqlQueryPlanTest` - pass after remote CI EXPLAIN fixture repair.
1618
- `docker build -f server/Dockerfile.release server -t readmates-server:v1.15.1-local` - pass.
1719
- `docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:0.70.0 image --severity HIGH,CRITICAL --ignore-unfixed --scanners vuln readmates-server:v1.15.1-local` - pass, 0 Ubuntu and Java HIGH/CRITICAL findings.
18-
- `git diff --check -- server/build.gradle.kts CHANGELOG.md docs/development/release-readiness-review.md` - pass.
20+
- `git diff --check -- server/build.gradle.kts server/src/test/kotlin/com/readmates/performance/MySqlQueryPlanTest.kt CHANGELOG.md docs/development/release-readiness-review.md` - pass.
1921
- `./scripts/build-public-release-candidate.sh` and `./scripts/public-release-check.sh .tmp/public-release-candidate` - pass; gitleaks reported no leaks.
2022
- Release plan: do not force-update `v1.15.0`; publish `v1.15.1`, confirm tag-triggered `Deploy Front` and `Deploy Server Image`, promote OCI Compose backend to `ghcr.io/<owner>/<repo>/readmates-server:v1.15.1`, create the GitHub Release, then run sanitized BFF/OAuth/admin/host smoke checks.
2123
- Residual risk: remote server image Trivy pass, GHCR release-tag promotion, OCI backend promotion, GitHub Release publication, and post-deploy smoke remain pending until the pushed `v1.15.1` tag workflows and production promotion complete.

server/src/test/kotlin/com/readmates/performance/MySqlQueryPlanTest.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ class MySqlQueryPlanTest(
2929

3030
@Test
3131
fun `archive paged sessions query uses indexed access on sessions`() {
32+
largeFixture.seedNotesFeed(sessionCount = 80)
33+
3234
val member5 = membershipIdFor("member5@example.com")
3335
val plan =
3436
jdbcTemplate.explain(
@@ -112,6 +114,8 @@ class MySqlQueryPlanTest(
112114

113115
@Test
114116
fun `notes paged session query uses indexed access on sessions`() {
117+
largeFixture.seedNotesFeed(sessionCount = 80)
118+
115119
val plan =
116120
jdbcTemplate.explain(
117121
"""

0 commit comments

Comments
 (0)