Commit Graph

46 Commits

Author SHA1 Message Date
zio
69a8b5288d fix(db): V37 crashed boot — company was redefined via CREATE IF NOT EXISTS (no-op) then indexed on missing column
V2 already has `company` (id PK, name/registration_no/phone). V37's CREATE TABLE IF NOT EXISTS
company was a no-op, so the follow-up `CREATE INDEX ON company (tenant_id, company_name)` hit
"column tenant_id does not exist", failing Flyway and rolling the deploy back to the old jar
(V36). Fix: expand the existing V2 company via idempotent ALTER ADD COLUMN + backfill
(name->company_name, registration_no->biz_no, phone->contact_tel). V38 re-backfills new rows.
Verified by BEGIN...ROLLBACK dry-run of V37+V38 against the live schema (0 errors).

Local unit tests don't execute Flyway, so this class of error only surfaces at boot — same
lesson as V17/V19. Dry-run against real schema before deploy for migrations touching legacy tables.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 16:04:24 +09:00
zio
5ddd7136a9 feat(ux,system,identity): waves 10-12 + renewal-1 — WISE shell (hamburger/accordion IA), system-mgmt basics (V37), email channel (V36), product identity, home AI hub, demo seed (V38), menu IA, app-QR, product rename
- W10 email: self-hosted Postfix channel (owner-approved) — auction-open contractor notice
  (in-app + email), EDM send (opt-in, cap 500), password-reset mail, mail_log (V36)
- W11 WISE shell: hamburger toggle, single-open accordion, 6-group IA restructure,
  system-mgmt group, KINTEX CI wordmark logo, home charts x3, responsive bottom user area,
  calendar alignment; fixed goScoped links (no /login bounce, hall parsing)
- W12 system-mgmt basics (UIWS parity): dept/company, program registry, role-menu map,
  auth policy, login history, error log, system health, mail/notify config (V37, 10 routes)
- product identity: public landing hero + role value cards + AI pipeline steps; login
  tagline; root gate (unauth -> /public product intro, auth -> /home)
- home AI hub: 5 AI tool cards + NL quick-ask strip (AI visibility)
- menu IA: 13 orphan routes folded in, system-mgmt 5 sub-sections, dead-links 0
- app-QR install page (/app-qr, WISE AppQrCode pattern); EAS build G3-approved
- product rename -> "KINTEX AI 전시·행사시스템" across 4 locales + title
- V38 demo closed-loop seed: codes/programs/depts/companies + booths/leads/approvals/
  invoices/notices, 4 demo accounts — activates home todos/KPIs
- new harnesses: wise-ui alignment (+menu-ia), full renewal (testdata), benchmark (analyst/crawler)
- SPA cache: index.html no-store (instant deploy reflection)
- verified: compileJava, test, tsc -b --force, vite build all EXIT 0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 15:57:34 +09:00
zio
f6635edb06 feat(home,features,tenant): SCR-HOME landing + 100-feature waves 8-9 + tenant-first PK standard + crawled events (V27-V35)
- SCR-HOME (/home): post-login landing per owner directive — role-based KPI row, banner
  carousel, exhibition poster showcase rail, WISE-pattern month calendar with dynamic
  hall-center filter, role-based my-tasks widget, notices/quick-actions/activity,
  workspace grid, ShellFooter; login now lands on /home (workspace picker absorbed);
  backend /api/home/{todos,showcase,hall-centers,summary}; Stitch mockup harvested and reconciled
- tenant standard (owner directive): tenant id 'KINTEX', tenant_id leads composite PKs
  (V31 conversion with FK-safe UNIQUE(id) preservation; V27/29/30/33/34/35 born compliant);
  JWT tid backward-compat normalization
- crawl: 34 upcoming kintex.com exhibitions with posters + detail enrichment
  (organizer/site/items/description) upserted idempotently (V32)
- wave 8: F100 AI router (Claude->Ollama fallback, AiConfig) + lead AI rescore + CMS AI
  translation; F005/6 booth sales (V27, atomic hold); F035 BOQ + F084 auction fee -> invoice
  (V28); F028 approval workflow (V29, /work/approval)
- wave 9: F041/42/43 logistics tabs (V33); F085 refund rules + F083 tax invoice/report
  (V34, fiscal gates documented); F092 text-to-SQL with 7-step guard + F025 rules chatbot;
  F099 webhook gateway (HMAC inbound, outbound stub) + F052 follow-up EDM trigger (V35)
- verified: compileJava, full test suite, tsc -b --force, vite build all EXIT 0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 14:11:19 +09:00
zio
9d47f9373f feat(shell,tenant,i18n): wave 7 — MDI tab shell, multitenancy phase 2 (JWT tid + fail-closed guard), i18n sweep 2
- MDI: additive tab layer over existing routing (MdiTabBar + mdiStore, sessionStorage,
  dedup, max 10, keyboard a11y, dark-theme tokens); route tree untouched
- tenant p2: JWT tid claim with kintex fallback (backward compatible), EventAccessGuard
  cross-tenant 403 (EventTenantMapper + isolation tests), explicit tenant scoping on
  analytics/admin/sysuser aggregates; login threads app_user.tenant_id into tokens
- i18n sweep 2: 17 core+admin screens extracted to 30 namespaces x 4 locales (ko/en/zh/ja),
  zero ko-render regression; P2/P3 sweep list documented
- verified: tsc -b --force, vite build, compileJava, test (75/75) all EXIT 0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 11:51:00 +09:00
zio
14efc37ce6 docs: backlog full status sweep — reflect waves 2-6 completions
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 10:56:43 +09:00
zio
d3485e1cd5 docs: backlog status — W4~W6 completions, prod domain live
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 10:55:50 +09:00
zio
48572d261a feat(nfr,tenant): wave 5+6 — dark theme toggle, i18n (ko/en/zh/ja), multitenancy phase 1 (V26)
- theme: dark palette remap via [data-theme], themeStore persistence, AppShell toggle,
  shared-layer hex -> semantic tokens, focus-ring/reduced-motion/skip-link a11y
- i18n: react-i18next with browser detection + ko fallback; full extraction for public
  site P1-P7 and login/signup/forgot flows; LanguageSwitcher wired in public shell,
  login, and AppShell
- multitenancy: V26 tenant master + tenant_id (event/hall/app_user, DEFAULT 'kintex'),
  TenantContextFilter (X-Tenant-Id -> Host -> default), catalog/hall scoping (zero
  behavior change), /api/admin/tenants GET/POST wired for SCR-A9
- ops(prod): kintex.wise.ai.kr live — nginx vhost on wise host proxying verified dev
  origin + LE TLS; full-stack split deferred (host RAM/disk constraint, see WORK_STATUS)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 10:52:52 +09:00
zio
4049b7c222 feat(backlog): wave 4 — ops real-data, M9 settlement (V24), M1 hall assign+quote (V25), roleCode/nav; fix OTP retry lockout
- fix(security): verifyOtp/enrollVerify consumed the challenge BEFORE code verification —
  one mistyped TOTP burned the session and every retry hit "세션 만료" (live incident).
  Now consume only on success, keep challenge for up to 5 failures (OtpChallengeStoreTest)
- SCR-14 ops: congestion from real check-in aggregates, power from utility orders;
  hardware widgets stay as honest "sensor not connected" empty states
- M9 settlement: /api/settlement (dashboard/invoices/generate/issue/payments), V24 invoice
  tables, server-authoritative amounts (ST_Area x rate + VAT), PG-delegation notice, /settlement UI
- M1 hall assign: /api/halls CRUD + period-overlap conflict (409 with details) + rates-v1.0
  auto-quote, V25 idempotent period columns, /halls board UI
- shared: AuthUser.roleCode (JWT rc claim, additive), AdminGuard precise check, AppShell
  placeholder nav wired via event-context builders, /_styleguide dev-only route

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 10:14:29 +09:00
zio
8a49a68a6a feat(backlog): wave 3 — BI global overview, admin CRUD screens+guard, schedule real-data (V23); fix boot crash
- fix: MyBatis <script> XML violations (AuctionMapper deadline<now(), VisitorMapper <=) that
  crash-looped boot and triggered health rollback; add MapperAnnotationParseTest regression guard
- M16 BI: GET /api/analytics/overview — cross-event revenue, monthly hall utilization,
  exhibitor retention, linear-regression forecast (hall-manager only, no migration)
- M18 admin: users/roles/codes/menus CRUD screens consuming live system APIs, AdminGuard on all
  /admin/* routes, landing module shortcuts; A8 rulesets confirmed already live-wired
- SCR-15 schedule: V23 (category/est_visitors backfill), hall-utilization + calendar APIs,
  screen switched to real data with offline fallback
- QA: replace text check glyph with IconCheck SVG
- verified: compileJava, test (incl. mapper parse), tsc -b --force, vite build all EXIT 0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 09:44:44 +09:00
zio
335b9aa8a4 fix(frontend): add missing checkin.css — vite build failed on server (unresolved import)
CheckinDeskPage.tsx imported ./checkin.css that was never written (session cut mid-wave);
tsc -b passes without CSS resolution so only the server vite build caught it, failing
deploys 08:49/09:09. Local vite build verified.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 09:21:46 +09:00
zio
c6f3a8d916 feat(domains): second-wave hardening — auction scoring, visitor check-in/lead engine, CMS versions/media/public (V21)
- M15 auction: scoring/quotation calc + unit tests, screens/auction local API as canonical client
- M10 visitor: check-in desk (SCR-31, /visitors/checkin route+nav), QR token + checkin_at,
  lead exhibitor/consent/note, check-in/search/stats/badge-reissue/lead-create/CSV export
  (masked PII only, RBAC-guarded, @Audited) + rule-based lead scoring engine
- M17 CMS: content version history, media library, public CMS API (/api/public/cms), HtmlSanitizer
- Flyway repair: extensions appended to already-applied V17/V19 split into V21 (checksum-safe), V17/V19 restored
- verified: compileJava, test, tsc -b all EXIT 0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 09:09:14 +09:00
zio
2854f068ed feat(domains): Phase D slices — auction, visitor/leads, CMS, public site, docs/logistics/marketing (V14~V20)
- Backend modules: auction (M15), visitor+lead scoring (M10), cms (M17), publicsite, document/milestone (M6), logistics dock reservation (M8), marketing campaign/sponsorship (M12), admin ruleset APIs
- Flyway V14~V20 schemas for the above
- Frontend: API clients wired (cms/marketing/public/visitor) + admin module pages refreshed
- Verified: gradlew compileJava SUCCESS, tsc -b clean

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 08:49:50 +09:00
zio
abc9f83690 docs: record Stitch port track (25 screens) + derived backlog 1B
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 05:28:56 +09:00
zio
becbc55152 feat(mobile): SCR-M15 ticket wallet + ticket-type select (sample, QR placeholder)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 05:26:30 +09:00
zio
d949f322d2 feat(frontend): port 25 Stitch screens — domain modules, admin, public site
- SCR-22/23/25 docs·milestones/report-authoring/dock-reservation (M6/M8, sample)
- SCR-26/27/29/38 auction list/detail/award + contractor dashboard (M15, sample,
  sealed-bid masking + registered-vendor-only UI rules)
- SCR-30/32/33/34 visitor registration/lead scoring/EDM/sponsorship (M10/M12,
  sample, PII masked)
- SCR-35/36/37 CMS workflow/microsite builder/multilingual (M17, sample)
- SCR-A5/A6 audit log + system settings wired to live backend (PageResponse,
  secret masking); A8 ruleset viewer (static v1.1 snapshot), A9 tenants (sample)
- SCR-P1~P7 public marketing site with self-contained PublicShell (no auth,
  sample data, PG delegation notice, no card input)
- App routes + AppShell nav (도메인 모듈 group); tsc -b clean; QA PASS

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 05:26:29 +09:00
zio
345082c251 docs: WORK_STATUS — track close-out, 3 hotfixes, live E2E results, new pitfalls
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 04:12:39 +09:00
zio
89bf2ce30d fix(mybatis): quote camelCase SQL aliases — PG folds unquoted identifiers to lowercase
PostgreSQL lowercases unquoted aliases (AS userId -> userid), so every
Map-returning @Select lost its camelCase keys at runtime: secure login
always returned UNAUTHORIZED (passwordHash null), login-slide imageUrl/
sortOrder null, and the new aggregation APIs would have returned 0/null.
Quoted 191 aliases across 22 mappers (text blocks verbatim, string
literals escaped), matching the proven UserMapper.xml convention.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 04:06:56 +09:00
zio
a657f9516a fix(security): legacy /api/auth/login bypassed lockout and OTP enforcement
Delegate legacy login to TwoFactorService.secureLogin so the legacy path
inherits login-failure lockout and OTP policy. OTP-required accounts get
OTP_REQUIRED (no token, no challenge token) and must use /login/secure.
Web UI already uses secureLogin; mobile scaffold (uncommitted track) must
adopt the 2FA flow for staff roles.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 03:55:13 +09:00
zio
8509787016 fix(frontend): server tsc -b errors + missing pieces
- NotificationCenterPage: toast node was never rendered (toasts invisible + TS6133 on server tsc -b)
- ReportPage: Tooltip formatter param typed number, recharts expects ValueType|undefined
- vite.config: /uploads dev proxy (login slide images) — missed in 1de3b9b
- design.md v2.1.1: all 84 screens Stitch status reconciled 64-row update (via designer)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 03:48:06 +09:00
zio
c3a695d70c feat(stitch): harvest all 39 pending screens (64/64 secured)
- Web core SCR-22/23/25-27/29/30/32-50 (26), admin A5/A6/A8/A9, public P1-P7, mobile M15
- +5 supplementary variants (P4 3-step, P7 manage, M15 ticket-select), 43 files, 0 failures
- All delayed generations recovered server-side (project 27 -> 155 screens), no regeneration needed
- WORK_STATUS: stitch 64/64 + real-data/2FA track close-out recorded

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 03:27:05 +09:00
zio
16bfb238c1 feat: real-data aggregation APIs + TOTP 2FA hardening + work screens (SCR-39~48)
- Aggregation packages: analytics/dashboard/ops/admin/catalog (+V13 indexes)
- TOTP 2FA: SecretCipher(AES-256-GCM), V12 migration, OTP enroll/challenge UI, OTP_ENFORCE env
- Common work screens SCR-39~48 wired to work/* contracts (gaps disabled+tooltip)
- M2 booth overlap check (BOOTH_OVERLAP, compliance-v1.1) + 8 unit test classes
- QA PASS (boundary cross-check), backend test + frontend tsc green

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 03:26:47 +09:00
zio
c7b853be17 docs: record Stitch pending 39 screens + recovery procedure in WORK_STATUS
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 01:07:41 +09:00
zio
1de3b9b269 feat: login slide CMS + G2B RFP doc + 4 report decks + SCR-31 screen
- Login page: 5-image auto-rotation slides (latest-first) with admin CRUD (upload, caption, active toggle, RBAC + audit log), V11 seed migration
- docs: G2B-style RFP (74 requirements, tech 90/price 10, prototype demo 32pt)
- Deliverables: execution plan (25s), kickoff (13s), interim (15s), final (25s) report decks
- Stitch: SCR-31 check-in kiosk screen HTML

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 01:00:35 +09:00
zio
ba90b54d81 feat(proposal): G2B-standard 7-chapter proposal deck (97 slides, QA-approved)
- Restructure to KONEPS (조달청 협상계약 별지5호) standard TOC: I general / II strategy-methodology / III tech-function / IV performance-quality / V PM / VI support / VII misc
- 9 new slides: staffing M/M, quantitative eval, standard framework, PM methodology, handover/training, SM/SLA, incident/BCP, managerial security, subcontracting
- Scoring alignment updated to tech 90 (70 qual + 20 quant) / price 10
- Nanobanana win-theme dual placement (II applied-tech + III function)
- Appendix D screen gallery (19 Stitch drafts) with AI-draft disclosure
- QA PASS: RTM 142/142 (3 fixes: F-008/F-010/F-026), no secrets, honesty labels verified
- Preserve rebuild toolchain + source docs in deliverables/제안서/_gen (16 files)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 00:44:44 +09:00
zio
6c9891c7e2 feat: mobile harness + design v2.1 (84 screens) + PLANNING v3.1 + deliverables + Stitch screens
- Harness: kintex-mobile-dev agent + kintex-mobile-orchestrator skill (WISE mobile ref, Stitch-first design rule, dual app targets B2B/B2C)
- design.md v2.1: full 84-screen inventory (web 51 / admin 10 / public 8 / mobile 15) with Stitch prompts incl. ticketing (SCR-P7/P8, M14/M15)
- PLANNING v3.1: unified account + split signup tracks (2FA required for staff, light signup/guest for visitors), one codebase / two app targets
- Deliverables: dev plan (21s), user/operator/developer guides (17/14/15s), program spec (44s, 65 programs, 8 flowcharts), DA (DB design 14s + table spec xlsx 35 tables/299 cols)
- Benchmark: ticketing-app-benchmark.md (7 apps) -> IMPLEMENTATION_BACKLOG Phase F (14 items)
- Stitch: 23 generated screens saved (mobile 10, admin 6, web core 5, ticket 2)
- mobile/: Expo scaffold (SDK 51, expo-router, secure store JWT)
- frontend: SCR-13~17 QA fixes, icons.tsx, kintexEvents, V10 seed migration
- ci/: KINTEX CI logo assets

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 23:31:45 +09:00
zio
117d1b3d56 docs: 산출물 갱신 정책 변경 — 최초 1회 생성 + 개발 완료 시 최종 1회만 갱신 (중간 갱신 금지)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 21:59:32 +09:00
zio
4cee6c1f66 feat(frontend): 신규 5화면 SCR-13~17 — 경영분석·현장운영·전시일정·관리자·스타일가이드
- design.md v1.3: SCR-13~17 매핑·상세 스펙 순증 (기존 SCR-01~12 무수정)
- React 이식 5화면 + Recharts 도입 + chartColors(§1 토큰)·shared.css 공통 프리미티브
- App.tsx 라우트 5종 + AppShell NavLink 배선 (신규 4항목, /_styleguide 네비 비노출)
- QA: tsc 위양성 교정(tsconfig.app 기준)·미사용 import 제거 → tsc/vite build EXIT 0
- reviewer: 배포 가능(Critical/Major 0) — Minor 티켓 BACKLOG 등재, R15-01 홀 필터 배선 즉시 수정
- docs: UNDEVELOPED_BACKLOG.md 신설(세션 미개발 통합) + WORK_STATUS 갱신
- stitch: 재취득 4화면 + component_guide 2종 + _icons 7종

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 21:56:28 +09:00
zio
58556ee1da docs: WORK_STATUS.md — 작업 인수인계·요구사항 로그·현황·남은 큐·함정 (다른 PC 이어작업용)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 21:02:18 +09:00
zio
de7ad55056 docs: 전시관리 100대 기능 백로그 + 갭분석 (AI 자동화·NFR 강조)
- FEATURE_BACKLOG_100.md: 12카테고리 100기능·AI 55/100·AI자동화맵(없앤 수작업)·공통품질 NFR(접근성·시큐어코딩·다국어·라이트/다크)
- FEATURE_GAP_ANALYSIS.md: PLANNING v3.0 대비 이미63/부분18/신규19·담당 에이전트 매핑·orchestrator Phase 편입

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 20:55:04 +09:00
zio
e41553ba59 feat(frontend): Stitch 디자인 전면 반영 + 로그인 인증 UI
- Booth Design Studio(SCR-06) Stitch 정합 + 4샷 그리드·Before/After
- 신규 8화면(참가업체홈·배치안비교·유틸신청·규정리포트·승인큐·검수상세 + 모바일 M1/M2) + App 라우트
- 로그인 인증 UI(회원가입·비번찾기/초기화·아이디기억·비번강도) + 번들 이미지 25장(워터마크 상시)
- 로컬 rollup win32 크래시로 vite는 서버빌드 신뢰(tsc 통과·에이전트 vite EXIT 0 확인)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 20:51:34 +09:00
zio
7c830ddea0 feat(auth): 공개 인증 엔드포인트 — 회원가입·비밀번호 찾기/초기화 + V9
- POST /api/auth/register(BCrypt·중복 EMAIL_TAKEN·초대코드 best-effort event_member)
- POST /api/auth/password/forgot(사용자 열거 방지·항상 200·OTP 해시 저장 10분 1회성)
- POST /api/auth/password/reset(코드 검증·시도제한·비번 갱신·잠금 리셋)
- V9: password_reset 테이블 + app_user.company_name(V1~V8 불변·멱등)
- SecurityConfig permitAll 3경로, 비번/코드/해시/스택트레이스 미노출. 기존 auth/2FA/M2~M5 불변

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 20:23:54 +09:00
zio
4e9ec42444 fix(login): 좌측 히어로 이미지 + KINTEX CI 로고 반영 + Stitch 14화면 재취득
- 로그인 좌측 브랜드 패널: Stitch 디자인의 전시홀 히어로 이미지(public/brand/login-hero.jpg) + 블루/하단 그라디언트 오버레이(가독성) — '이미지 없어 썰렁' 해소
- 우측 로그인 카드 로고: KINTEX CI 워드마크(ci/CI_JPG → public/brand/kintex-wordmark.jpg)
- Stitch 프로젝트(9385904003821333054) 14화면 code.html 최신 재취득(screen.png는 gitignore)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 20:08:59 +09:00
zio
95dc76f150 chore: GUARDiA 재사용 패턴 흡수 — 스모크 러너·push·정합/보안/운영 문서
- tools/test/kintex_smoke_test.py: 8021 스모크/회귀 러너(run_full_test 패턴, env-only 시크릿, 비파괴 프로브, CI 게이트)
- scripts/push_kintex.py: push_any_repo 경량 이식(자격증명 env-only)
- docs/GUARDIA_ALIGNMENT.md: 표준 프레임워크 정합 매핑
- docs/SECURITY.md: 보안 불변(외부API·자격증명·워터마크·root 예외)
- docs/OPS_RUNBOOK.md: 헬스체크·재기동·롤백 런북

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 19:54:35 +09:00
zio
63386b62aa fix(devops): 백엔드 미배포 근본수정 — deploy_kintex.sh 단일 빌드 진실원 + SIGPIPE 검증 버그
증상: push 후 프론트만 배포, 백엔드 jar 스테일(V6 고정, V7/V8 미적용).
근본원인 3종:
1) deploy_kintex.sh가 백엔드 빌드 안 함(복사만) → 이제 프론트+백엔드 직접 빌드(단일 진실원)
2) gradlew mode 100644(비실행) → git +x(100755) + sh ./gradlew(실행권한 불요)
3) jar 검증 'unzip -l | grep -q'가 set -o pipefail 하에서 grep 조기종료→unzip SIGPIPE(141)
   →메인클래스 발견에도 오탐 실패→die→jar 미복사. → grep -q 제거(전량 소비) + 선택 tail(파이프 조기종료 회피)

- deploy_server kintex 블록: npm/gradle/verify 개별단계 제거 → git pull → deploy_kintex.sh(빌드+배포) → health
- Jenkinsfile: 동일 스크립트 위임(경로 함정 회피, WORKSPACE 일치)
- 서버 /opt/zioinfo/deploy_server.py 반영·재시작 완료(백업)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 19:44:30 +09:00
zio
ca971c1cae feat(planning): PLANNING v3.0 멀티테넌시(다중 전시관) 확장
- 정체성: 킨텍스 전용 → 다중 전시관 SaaS(KINTEX=테넌트#1, COEX 등 온보딩)
- 테넌트/Venue 모델 + 전 엔티티 tenant_id 전파 + fail-closed 격리(공유 스키마+tenant_id 컬럼)
- 역할: 플랫폼 슈퍼관리자 vs 테넌트(전시관) 관리자 계층 + 행사 RBAC 3중
- 서브도메인 테넌트 컨텍스트, 기존 데이터 tenant_id=1 백필. DDL은 DA/db-engineer 후속

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 19:36:27 +09:00
zio
89d59d3093 feat(phase-b): WISE 공통/시스템관리 레이어 + 2FA/OTP + MDI 셸 표준
공통레이어(PLANNING §5B, WISE/UIWS 이식):
- 인증강화 2FA: TotpService(RFC6238)·OTP 등록/검증/초기화·로그인 실패 잠금·admin 비번 env 주입(admin123 시드 없음). 기존 JWT/RBAC 무수정, security 패키지 레이어만 추가
- 시스템관리: 사용자·역할/권한·공통코드·메뉴·시스템설정·감사(@Audited AOP). SystemAccessGuard(전역 ADMIN/홀매니저) — EventAccessGuard와 직교 이중 RBAC
- 공통 업무기능: worklog·schedule·message·notice·opinion·meeting·report·notification(단일 채널)·stats·search
- 스키마 V7(시스템관리·보안)·V8(공통 업무모듈) 멱등, V1~V6 불변

design.md v1.2: MDI 셸 표준 §2.7(탭바·다중문서·상태보존·세션복원·단축키·역할별)
CLAUDE.md: G1·G2 게이트 해소 반영

backend gradlew build·frontend tsc EXIT 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 19:23:02 +09:00
zio
72dd9f1cf3 chore(devops): 개발 도메인 kintex.zioinfo.kr → kintex.zioinfo.co.kr 통일
개발 도메인 확정(kintex.zioinfo.co.kr, DNS 해소 → 101.79.17.164). .zioinfo.kr 폐기.
- deploy/nginx: 파일명·server_name·TLS 주석 co.kr
- setup_kintex_service.py·Jenkinsfile·deploy_server_kintex_block: 도메인 참조 co.kr
서버 env·시크릿 미커밋. 운영 kintex.wise.ai.kr은 후속.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 18:47:27 +09:00
zio
a963c69141 feat(impl): M2~M5 배선(501→200) + 프론트 화면 4종
backend: M2 배치/규정검증(PostGIS)·M3 설계·M4 배선/견적·M5 RenderJob + 인증(login/workspaces/accept-invite) 매퍼 배선으로 501 해소. M2 자동배치 3안 생성→선택/병합→규정 재검증. 계약 확장(Violation 좌표·LayoutDto.hall·AutoLayoutOption.booths, additive NON_NULL). 신규 HallMapper·UtilityOrderMapper(기존 테이블). gradlew build 통과.

frontend: SCR-02 대시보드·SCR-06 설계스튜디오(4샷+Before/After)·SCR-07 배선뷰(적/청/녹)·SCR-12 갤러리 + CompareSlider(reroomai)·WiringCanvas. tsc/vite build EXIT 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 18:37:26 +09:00
zio
bbcdfebdcb fix(devops): nginx vhost IPv6 listen 제거 — 서버 IPv6 미지원(socket 97)
서버(101.79.17.164)는 IPv6 미지원 → listen [::]:80 제거. webhook E2E 자동배포 검증 겸.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 18:36:27 +09:00
zio
21fecc37da feat(devops): Phase E CI/CD 파이프라인 — 개발서버 배포 구성
- deploy/systemd: kintex.service(백엔드 8021) + kintex-nanobanana.service(워커, GEMINI env 워커 한정)
- deploy/nginx: kintex.zioinfo.kr vhost(/ static, /api·/ws → 8021)
- deploy/deploy_kintex.sh: 검증→원자교체→헬스체크→롤백(WISE 패턴)
- deploy/setup_kintex_service.py: 멱등 프로비저닝(유닛·venv·nginx)
- deploy/deploy_server_kintex_block.py: 서버 webhook 블록 정본 사본
- Jenkinsfile: push→build(vite+bootJar)→deploy→health
- .gitattributes: 배포 산출물 LF 강제

포트 8021 배정(8003~8020 기존 GUARDiA 예약). 시크릿은 서버 env only(미커밋).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 18:30:03 +09:00
zio
eccbeb1337 feat(v2.0): Phase A 아키텍처 + WISE 개발문서 + PM/PMO + DB 계층 + 프론트 착수
- 거버넌스: kintex-pm·dev-pm·pmo 에이전트
- Phase A 아키텍처 5종: docs/architecture/{app,system,tech,data,network}.md (성문화·NFR·SRID0 공간표준·M16 스타스키마·보안영역)
- WISE(UIWS) 참조 개발문서 6종: README·DEVELOPMENT_GUIDE·ENV_SETUP·COMMON_CODES·API_GUIDE·BUILD_DEPLOY
- DB 계층: PostGIS 스키마 V1~V6(홀·트렌치 가정그리드·GiST) + MyBatis 매퍼 5종(ST_* 공간쿼리) + Flyway. gradlew build SUCCESS
- 프론트 착수: React/Vite 스캐폴드 + design.md 토큰 + SCR-01 로그인·SCR-03 부스 에디터. tsc/vite build EXIT 0
- R-T1 수정: 나노바나나 워커 큐키 kintex:renderjob:queue 통일(백엔드 정합, silent no-op 방지)
- 도메인/게이트: G2 해소(dev kintex.zioinfo.kr·prod kintex.wise.ai.kr), CLAUDE.md 로스터 20종

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 18:10:01 +09:00
zio
9987d958db feat(v2.0): 자동전시시스템 하네스 재구성 + PLANNING v2.0 + 백엔드 스캐폴드 + 평면도 자산
PLANNING v2.0: 자동전시시스템 재정의, 6역할 웹/모바일 분리, 도메인 M10~M18(옥션 M15·관람객 M10·마케팅/공개사이트 M12·BI M16(운영사 ROI 포함)·CMS M17·관리자 M18), WISE/UIWS 공통·시스템관리 레이어 §5B(2FA OTP), 옥션/견적서/역경매, M2/M3 3안 생성→선택/병합. design.md v1.1(Stitch 정합·SCR 매핑).

하네스 재구성: 전문 에이전트 17종(아키텍트 AA·SA·TA·DA·NA / 공통 common-dev / 코어 backend·frontend·db / 도메인 bidding·visitor·cms·bi·admin / AI ai-dev·visualizer / QA·devops) + kintex-impl-orchestrator v2.0(Phase A~E) + IMPLEMENTATION_BACKLOG v2.0 + CLAUDE.md.

백엔드 스캐폴드: Spring Boot 3.2.5(com.zioinfo.kintex) + JWT/RBAC + WebSocket + 버전형 룰엔진 + M2~M5 컨트롤러(M3 사전검증·M4 견적·M5 RenderJob 실구현, 공간경로 501 대기). compileJava SUCCESS.

자산: 평면도 JPG 15장 + 매니페스트(R4 트렌치·CAD 해소). CAD 93MB·build는 gitignore.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 17:32:40 +09:00
zio
4cd83bdfe1 feat(harness): 구현 하네스 전체 구성 + 스택 확정(React/Spring/MyBatis/PostgreSQL)
- 스택 확정: PLANNING v1.2 §8(FastAPI/Next.js→Spring Boot+MyBatis/React), CLAUDE.md 기술스택 섹션
- 구현 에이전트 5종: kintex-backend-dev·frontend-dev·db-engineer·qa·devops-dev
- kintex-impl-orchestrator 스킬 + docs/IMPLEMENTATION_BACKLOG.md(Phase0~5)
- designer에 Stitch 학습·정합 트랙, developer 스택 갱신
- Stitch export 텍스트 참조(code.html·DESIGN.md 3종·proposal.md) 추가, 스크린샷 PNG는 gitignore

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 16:58:31 +09:00
zio
6ec49ce896 chore(harness): 실수로 삭제된 배포 zip 복원 + 빌드/테스트 산출물 gitignore
- kintex-harness-v1.0.1.zip 복원(직전 커밋에서 의도치 않게 삭제됨)
- .gitignore 추가: __pycache__/·output/·*.pyc·.env
- 추적 해제: output/·__pycache__ (나노바나나 스모크 테스트 산출물)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 16:41:04 +09:00
zio
3da6b1c092 feat(harness): ReRoomAI 분석 반영 — PLANNING v1.1 나노바나나 파이프라인 확정 + client.py 재작성 + Stitch 전달
- docs/analysis/reroomai-source.md 신규: gemini-3.1-flash-image-preview image-to-image, 보존/교체 프롬프트, CompareSlider/전처리 차용
- PLANNING v1.1: §6-4/6-5 나노바나나 호출스택·부스 프롬프트 빌더 확정, R11 해소·R12(Gemini 외부API 승인 게이트) 추가
- tools/nanobanana/client.py 전면 재작성: build_booth_prompt 4단 조립, 메타데이터 임베드, S6 래스터 합성 분리, seed 폴백, 방어 로직
- BACKLOG B-02/B-03/B-09/B-11/B-12 done
- kintex.com 2차 검증 순증 사실 반영(기본부스 사양·이격·홀 스펙)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 16:40:11 +09:00
zio
8a488322c1 chore: kintex 하네스 초기 커밋 (로컬 소스)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 16:16:33 +09:00