Skip to content

Engineering Proof Portfolio: showcase docs + host/members Query migration + transaction policy#9

Merged
beyondwin merged 32 commits into
mainfrom
readmates-engineering-proof-portfolio-implementation-plan-20260517-231211
May 17, 2026
Merged

Engineering Proof Portfolio: showcase docs + host/members Query migration + transaction policy#9
beyondwin merged 32 commits into
mainfrom
readmates-engineering-proof-portfolio-implementation-plan-20260517-231211

Conversation

@beyondwin
Copy link
Copy Markdown
Owner

Summary

엔지니어링 검증 포트폴리오 구현 계획 11개 태스크 일괄 진행 결과. multi-agent autonomous orchestrator(Opus implementer)로 실행하여 모든 태스크 PASS 종료.

  • Showcase 문서 (docs/showcase/): 리뷰어 진입 경로(README → 게스트 워크스루 → 아키텍처 증거 → 엔지니어링 신뢰성 → 운영 증거). 출처는 docs/development/와 코드/테스트.
  • host/members TanStack Query v5 마이그레이션: route-loader prefetch + 컴포넌트 useSuspenseQuery, factory 패턴 도입(hostMembersLoaderFactory), 842/842 테스트 PASS.
  • 트랜잭션 경계 정책 문서화 (docs/development/technical-decisions.md): 애플리케이션 서비스 소유, scheduler/Kafka listener 예외 명시.
  • JdbcHostSessionWriteAdapter 정리: 메서드 레벨 @Transactional 9개 제거. 서비스에서 트랜잭션을 소유하도록 일원화. HostSessionControllerDbTest 그린.
  • 후속 마이그레이션 계획 신규 문서 (docs/superpowers/plans/2026-05-17-readmates-host-notifications-query-migration.md).

Validation

  • Frontend: 842/842 tests PASS · lint PASS · build PASS
  • Server: unitTest PASS · architectureTest PASS · HostSessionControllerDbTest PASS
  • Public release: candidate build PASS · leak scan PASS
  • git diff --check origin/main..HEAD: clean

Remaining Risks (mitigated, not blocking)

  1. Showcase 문서가 architecture 변화에 뒤처질 수 있음 — showcase/README.md에 출처 명시로 한정.
  2. host/notifications Query 마이그레이션은 planning-only (별도 plan 문서로 분리).
  3. 다른 adapter의 @Transactional 정리 미진행 — 정책 문서로 일단 mitigated. 후속 작업 후보:
    • b-1: JdbcPlatformAdminClubAdapter.updateClub 중복 제거 (서비스에 @Transactional 이미 있음)
    • b-2: PlatformAdminService.createClubDomain@Transactional 이전
    • b-3 (별도 결정 필요): updateClubDomainProvisioning (외부 호출 포함), createGrant/revokeGrant (audit 원자성 결정)

Test plan

  • CI: 프론트엔드 테스트/린트/빌드 그린 확인
  • CI: 서버 unitTest/architectureTest 그린 확인
  • HostSessionControllerDbTest 그린 확인 (트랜잭션 경계 회귀)
  • docs/showcase/ 진입 경로 수동 검토 (README → guest-mode → architecture-evidence → engineering-confidence → operational-proof)
  • front/features/host/ui/host-members.tsx 브라우저 동작 확인 (로더 prefetch, suspense fallback)

beyondwin and others added 30 commits May 17, 2026 20:57
Task: task_0
Risk: mid
Files: server/src/main/kotlin/com/readmates/sessionimport/application/port/out/SessionImportWritePort.kt, server/src/main/kotlin/com/readmates/sessionimport/adapter/out/persistence/JdbcSessionImportWriteAdapter.kt, server/src/main/kotlin/com/readmates/sessionimport/application/service/SessionImportService.kt, server/src/test/kotlin/com/readmates/sessionimport/application/service/SessionImportServiceCommitValidatedTest.kt, server/src/test/kotlin/com/readmates/sessionimport/api/HostSessionImportControllerDbTest.kt
Task: task_1
Risk: high
Files: server/src/main/kotlin/com/readmates/shared/security/CurrentPlatformAdmin.kt, server/src/main/kotlin/com/readmates/club/application/service/SupportAccessGrantService.kt, server/src/test/kotlin/com/readmates/club/api/SupportAccessGrantControllerTest.kt
Task: task_2
Risk: mid
Files: front/features/platform-admin/model/platform-admin-workbench-model.ts, front/features/platform-admin/model/platform-admin-workbench-model.test.ts
Task: task_1
Risk: high
Files:
- server/src/main/kotlin/com/readmates/feedback/adapter/in/web/FeedbackDocumentController.kt
- server/src/main/kotlin/com/readmates/feedback/adapter/in/web/FeedbackDocumentUploadValidator.kt (deleted)
- server/src/main/kotlin/com/readmates/feedback/adapter/out/persistence/JdbcFeedbackDocumentStoreAdapter.kt
- server/src/main/kotlin/com/readmates/feedback/application/model/FeedbackDocumentCommands.kt (deleted)
- server/src/main/kotlin/com/readmates/feedback/application/port/in/FeedbackDocumentUseCases.kt
- server/src/main/kotlin/com/readmates/feedback/application/port/out/FeedbackDocumentStorePort.kt
- server/src/main/kotlin/com/readmates/feedback/application/service/FeedbackDocumentService.kt
- server/src/test/kotlin/com/readmates/feedback/api/FeedbackDocumentControllerTest.kt

Removes the POST /api/host/sessions/{sessionId}/feedback-document upload
endpoint along with UploadHostFeedbackDocumentUseCase,
AuthorizeHostFeedbackDocumentUploadUseCase,
FeedbackDocumentUploadValidator, and FeedbackDocumentUploadCommand.
FeedbackDocumentService now only handles read/list/status surfaces, so
its RecordNotificationEventUseCase and ReadmatesOperationalMetrics deps
are dropped. The sole source of FEEDBACK_DOCUMENT_PUBLISHED notifications
is now SessionImportService.commitVerifiedTarget.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Task: task_3, task_4
Risk: high
Files: route, dashboard, work-queue, brief, checklist, domain panel, overview metrics, support grants panel, club-detail, platform-admin.test.tsx
Task: task_2
Risk: mid
Files: front/features/host/api/host-api.ts, front/features/host/route/host-session-editor-actions.ts, front/features/host/route/host-session-editor-data.ts, front/features/host/ui/host-session-editor.tsx, front/features/host/ui/host-session-feedback-upload.tsx, front/features/host/ui/session-editor/mobile-editor-tabs.tsx, front/features/host/ui/session-editor/session-editor-actions.ts, front/features/host/ui/session-editor/session-import-panel.tsx, front/features/host/ui/session-editor/session-record-completion-panel.tsx, front/tests/unit/host-session-editor.test.tsx
Task: task_5
Risk: mid
Files: front/features/platform-admin/route/platform-admin-route.tsx, front/features/platform-admin/ui/platform-admin-onboarding-wizard.tsx, front/tests/unit/platform-admin.test.tsx
Task: task_3
Risk: mid
Files: front/features/host/aigen/ui/AiGenerateTab.tsx, front/features/host/aigen/ui/TranscriptUploadForm.tsx, front/features/host/aigen/ui/AiGenerateTab.test.tsx, front/tests/unit/host-session-editor.test.tsx, front/tests/e2e/aigen-jsonupload-coexistence.spec.ts
Task: task_6
Risk: mid
Files: front/src/styles/globals.css, front/tests/unit/platform-admin.test.tsx
Task: task_4
Risk: low
Files: docs/development/architecture.md, docs/development/session-import-generator.md, README.md, CHANGELOG.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Task: task_5
Risk: low
Files: front/features/host/model/host-dashboard-model.ts, front/features/host/ui/host-session-editor.tsx, front/tests/unit/host-dashboard-model.test.ts, front/tests/unit/host-dashboard.test.tsx
Task: task_7
Risk: low
Files: CHANGELOG.md
6 task commits implementing docs/superpowers/specs/2026-05-17-readmates-session-record-completion-design.md:

- feat(server): publish feedback events from session imports (5ca5c43)
- refactor(server): remove standalone feedback uploads (c17e6eb)
- feat(front): unify session record completion (b74b3cd)
- fix(front): surface ai unavailable fallback (86e209e)
- docs: document session record completion workflow (5034082)
- fix(front): replace stale upload copy on host dashboard and editor (1884704)

Verified locally: backend focused tests, frontend vitest (833 passing), E2E
aigen-jsonupload-coexistence.spec.ts.
Spec §Platform Status Strip lists 5 cards; the existing overview was
missing "도메인 조치 필요" (domainActionRequiredCount), already wired
through the workbench model and API. Add the card between needsActionCount
and publishReadyCount per spec order, and tighten the dashboard test to
assert all 5 labels render inside the summary region.
…plan'

ReadMates Platform Admin Triage Console — 7 task plan executed via
kws-claude-multi-agent-executor (Opus implementer, Sonnet reviewer/verifier).

- Server support access role hardening (OWNER whitelist)
- Pure platform admin workbench model (lifecycle-first primary action)
- Route-owned selectedClubId + grants state
- Triage dashboard UI split with selected-club support grants panel
- Onboarding result synchronization into triage state
- Visual polish, responsive layout, accessibility
- Full verification and documentation
- 5th overview metric (domain action required) follow-up fix

Tests: 840/840 front, 36/36 e2e, gradle integrationTest green.

# Conflicts:
#	CHANGELOG.md
…down

SessionImportService.commitValidated now enqueues a notification event via
recordFeedbackDocumentPublished, which inserts into notification_event_outbox
with an FK to clubs(id). The aigen integration test's CLEANUP_SQL did not
delete from that table, so delete from clubs failed with an FK violation
during AFTER_TEST_METHOD and cascaded into ReadmatesMySqlSeedTest.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- spec 6.2 frontend candidate order aligned with 9.1 and plan execution
  (members → notifications → sessions)
- plan Task 7 drops unused parse helpers and avoids smuggling
  errorElement/hydrateFallbackElement into the host members route
- plan Task 7 also reorders server-state-migration 후속 후보 so it stays
  consistent with Task 8's notifications-next premise

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Task: task_1
Risk: low
Files: docs/showcase/README.md, docs/README.md
Task: task_3
Risk: low
Files: docs/showcase/guest-mode-walkthrough.md
Task: task_4
Risk: low
Files: docs/showcase/architecture-evidence.md
Task: task_5
Risk: low
Files: docs/showcase/engineering-confidence.md, docs/development/server-state-migration.md
Task: task_6
Risk: low
Files: docs/showcase/operational-proof.md
Task: task_9
Risk: low
Files: docs/development/technical-decisions.md
Task: task_2
Risk: low
Files: README.md
Task: task_10
Risk: mid
Files: server/src/main/kotlin/com/readmates/session/adapter/out/persistence/JdbcHostSessionWriteAdapter.kt
Task: task_7
Risk: high
Files: front/features/host/queries/host-members-queries.ts, front/src/app/routes/host.tsx, front/features/host/route/host-members-data.ts, front/features/host/ui/host-members.tsx, front/tests/unit/host-members.test.tsx, docs/development/server-state-migration.md

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Task: task_8
Risk: mid
Files: docs/superpowers/plans/2026-05-17-readmates-host-notifications-query-migration.md, docs/development/server-state-migration.md
Task: task_11
Risk: mid
Files: CHANGELOG.md
beyondwin and others added 2 commits May 18, 2026 00:26
Task 10에서 메서드 레벨 @transactional 9개를 제거한 결과 표현식 본문이
120자 detekt MaxLineLength 한도를 초과했다. 시그니처와 본문을 분리하고
인자를 줄바꿈하여 두 줄 규칙(detekt MaxLineLength 120, ktlint
multiline-expression-wrapping)을 동시에 만족시킨다.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
commit b55a672("adopt ktlint with baseline for incremental rollout")이
ktlint를 도입하면서 baseline 파일과 wiring을 빠뜨렸다. main CI는 stale
Gradle build cache 덕에 통과해 왔지만 PR 빌드는 cache-read-only로 실제
스캔이 실행되어 잠재 violation 356건이 표면화되었다.

- server/config/ktlint/baseline.xml: ./gradlew ktlintGenerateBaseline로
  생성한 뒤 경로를 projectDir 상대(`src/main/...`, `src/test/...`)로
  정규화했다. 기존 violation을 잠금 처리해 신규 violation만 차단한다.
- server/build.gradle.kts: ktlint { baseline.set(...) }로 GenerateReports
  태스크가 baseline 파일을 읽도록 wire했다.

미래의 cleanup PR은 baseline 항목을 점진적으로 줄이는 형태로 진행한다.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@beyondwin beyondwin marked this pull request as ready for review May 17, 2026 16:07
@beyondwin beyondwin merged commit 701ba6f into main May 17, 2026
9 checks passed
@beyondwin beyondwin deleted the readmates-engineering-proof-portfolio-implementation-plan-20260517-231211 branch May 17, 2026 16:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant