Engineering Proof Portfolio: showcase docs + host/members Query migration + transaction policy#9
Merged
beyondwin merged 32 commits intoMay 17, 2026
Conversation
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
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
엔지니어링 검증 포트폴리오 구현 계획 11개 태스크 일괄 진행 결과. multi-agent autonomous orchestrator(Opus implementer)로 실행하여 모든 태스크 PASS 종료.
docs/showcase/): 리뷰어 진입 경로(README → 게스트 워크스루 → 아키텍처 증거 → 엔지니어링 신뢰성 → 운영 증거). 출처는docs/development/와 코드/테스트.useSuspenseQuery, factory 패턴 도입(hostMembersLoaderFactory), 842/842 테스트 PASS.docs/development/technical-decisions.md): 애플리케이션 서비스 소유, scheduler/Kafka listener 예외 명시.JdbcHostSessionWriteAdapter정리: 메서드 레벨@Transactional9개 제거. 서비스에서 트랜잭션을 소유하도록 일원화. HostSessionControllerDbTest 그린.docs/superpowers/plans/2026-05-17-readmates-host-notifications-query-migration.md).Validation
git diff --check origin/main..HEAD: cleanRemaining Risks (mitigated, not blocking)
showcase/README.md에 출처 명시로 한정.@Transactional정리 미진행 — 정책 문서로 일단 mitigated. 후속 작업 후보:JdbcPlatformAdminClubAdapter.updateClub중복 제거 (서비스에@Transactional이미 있음)PlatformAdminService.createClubDomain에@Transactional이전updateClubDomainProvisioning(외부 호출 포함),createGrant/revokeGrant(audit 원자성 결정)Test plan
docs/showcase/진입 경로 수동 검토 (README → guest-mode → architecture-evidence → engineering-confidence → operational-proof)front/features/host/ui/host-members.tsx브라우저 동작 확인 (로더 prefetch, suspense fallback)