Commit graph

261 commits

Author SHA1 Message Date
Yun Chan
49a4c97923 fix(release): refuse to re-publish a version that already shipped
The feed publisher overwrote whatever version-specific assets it found, so a
re-run of an old release tag could quietly replace the installer that
customers already downloaded under that version number.

Publication now compares the bytes already in the version-specific registry
path and stops when they differ, while still allowing an identical re-run to
finish. The metadata verifier gained a negative case so the guard cannot be
removed unnoticed.
2026-09-16 23:49:37 +09:00
Yun Chan
c3ddd36c6f docs: record the 1.1.0 release and add the infrastructure map
Some checks failed
deploy-site / deploy (push) Failing after 40s
Release notes for 1.1.0 were split between an Unreleased section and the
version section, so the published notes would have omitted the update-feed
and desktop changes. Everything shipping in this version now sits under one
`## [1.1.0]` heading.

`docs/map/` becomes the entry point for what infrastructure exists per
platform and how far each feature is developed, with a documented update
protocol so feature work and this map do not drift apart again. The release
guide now states that installer binaries live in the update feed rather than
the repository.
2026-09-16 23:27:52 +09:00
Yun Chan
c2db1b2176 feat(site): offer the real installer from the release center
The download section described a release as pending while the product was
already installable, and its installer link pointed at a path the site build
never ships, so a visitor would have reached a missing file.

The section now states the released version and links the published update
feed that the desktop client itself uses, with the release notes and hash
metadata one click away. Repeated color literals behind the hero animation
moved into named tokens.
2026-09-16 23:26:00 +09:00
Yun Chan
94d8bb8ebe feat(mobile): keep team, template, and report flows in sync with the server
Team, meeting, memo, template, command, and dictionary screens drifted from
the server contract, and report submission could hang instead of confirming
to the user. The screens now use the server responses directly.

The retired Expo shell is removed; the React Native app is the mobile client.
Gradle-generated vector-icon drawables are ignored rather than committed.
2026-09-16 23:25:51 +09:00
Yun Chan
bb0e54dcee feat(server): deliver push without a Firebase project
Every notification depended on Firebase Cloud Messaging, so a missing
Firebase project, which is the current state, meant no notification could be
delivered on any platform. Web Push and token-based Apple Push are now first
class transports alongside FCM, chosen per registered device, and a scheduled
Cloudflare Worker drain retries an outbox so a provider outage delays rather
than drops a message.
2026-09-16 23:24:44 +09:00
Yun Chan
5aa268970a feat(admin): read live back-office data in every console view
Models, pipelines, users, subscriptions, usage, audit log, ads, and releases
still rendered placeholder or duplicated implementations from the earlier
admin split. They now read the live back-office API, share one sidebar and
console theme, and the license issuer dialog uses the rotated signing key.
2026-09-16 23:24:35 +09:00
Yun Chan
cfc58458a8 feat(web): manage dictionaries and teams from the console
The console could not create dictionary entries, and team pages showed a
static member list with no record of who changed what. Dictionary
management, a knowledge upload form, and a team activity feed are now
available, alongside a download center that links the published desktop
installer feed rather than repository-local paths that no deploy ships.

Red-team e2e coverage was added for the account and team flows touched here.
2026-09-16 23:24:27 +09:00
Yun Chan
f6a29db95a feat(shared): gate paid features from one entitlement source
Desktop, web, mobile, and the API each decided locally what a tier could do,
so a plan change could unlock a feature on one surface and not another.
Entitlement checks now live in `@d3ro/core` and are exercised by tests.

The shared theme and design-system packages also gain the tokens the new
surfaces consume, and the api-client exposes the dictionary and team types
the clients now send.
2026-09-16 23:24:18 +09:00
Yun Chan
6ba25f53b7 fix(desktop): surface configuration and provider failures instead of hiding them
Several desktop paths quietly substituted defaults or partial results: a
config write could fall back to a throwaway in-memory store, speech provider
errors were absorbed into empty transcriptions, and meeting exports built
file names from raw titles.

Writes now fail explicitly when the store is unavailable, provider and model
failures reach the UI as errors, and export names pass through one
sanitizer. Settings, license, ad, and support surfaces use the shared theme
tokens, unused hotkey helpers are gone, and the package gains strict
node/renderer typecheck configs plus red-team e2e scenarios for these flows.
2026-09-16 23:23:58 +09:00
Yun Chan
c8d802d78f feat(desktop): fill sponsor slots from direct house campaigns
When mediation had no programmatic fill, the banner and rewarded surfaces
collapsed to empty space. Direct house sponsors now serve their own copy and
click-through, with the same settlement accounting used by the mediated
network, and the mediation engine tests cover the added path.
2026-09-16 23:23:39 +09:00
Yun Chan
911c9f0229 feat(desktop): move dictionary entries in and out as files
Users could only rebuild their spoken-word dictionary entry by entry. Import
and export now round-trip the whole list, reporting duplicate and invalid
entries per row instead of failing the batch, so a dictionary survives a
reinstall or a move to another machine.
2026-09-16 23:23:30 +09:00
Yun Chan
7953706142 feat(release): publish desktop updates from a tag through one feed
Desktop clients had two competing update sources: the runtime pointed at a
legacy GitLab registry while the Forgejo packages were filled in by
hardcoded, version-pinned scripts. Operators could not tell which feed was
authoritative, and no release could be reproduced from a tag.

Auto-update now reads a single canonical Forgejo registry feed, updated by
a version-agnostic publisher that runs from the tag on Forgejo, GitLab, and
GitHub CI alike. Channel, minimum supported version, forced install,
full-versus-delta thresholds, staged rollout, and a remote kill switch come
from one policy file the client fetches alongside the feed. Tag creation is
gated on a clean tree, matching version surfaces, and a changelog section.
2026-09-16 23:23:00 +09:00
Yun Chan
65ecc7aabc chore: keep release checkouts free of build output and dev automation
Release packaging walked a working tree that still carried .NET build
output, Playwright run artifacts, and one-off browser automation scripts.
Those files are not source, could not be reproduced from the commit, and
made a clean-tree release gate impossible.

Build output and test run directories are now ignored and untracked, and
developer-only automation/scratch material moved under a single ignored
`scripts/local/` directory. A stale admin bundle that no HTML referenced
was dropped from the API server web root.
2026-09-16 23:22:38 +09:00
Yun Chan
aa5fc5b7d9 docs: finalize mobile release handoff 2026-08-30 09:50:07 +09:00
Yun Chan
784c9c291e docs: record mobile production audit 2026-08-30 09:37:40 +09:00
Yun Chan
1f71cf6fae ci: allow protected mobile candidate 2026-08-30 09:20:49 +09:00
Yun Chan
4872d6f6c5 docs(release): update 1.1.0 launch metadata
Some checks failed
deploy-site / deploy (push) Failing after 10m53s
2026-08-29 20:16:49 +09:00
Yun Chan
0a8cf4396f feat(play): finalize store graphics and copy 2026-08-29 20:11:54 +09:00
Yun Chan
563d4cb1de fix(ci): make mobile Gradle wrapper executable 2026-08-29 19:25:09 +09:00
Yun Chan
6a9608c447 ci: bootstrap Linux release toolchains 2026-08-29 19:19:19 +09:00
Yun Chan
30d51278c9 build(release): forbid unsigned Windows artifacts 2026-08-29 19:07:16 +09:00
Yun Chan
ec5aec758b fix(release): retire legacy capture publisher 2026-08-29 19:04:07 +09:00
Yun Chan
547d4ad97a security: remove credential automation from releases 2026-08-29 19:00:44 +09:00
Yun Chan
f342ea8640 fix(release): sync legacy mobile version 2026-08-29 18:55:27 +09:00
Yun Chan
3e9e04f68c ci(release): require trusted Windows signing 2026-08-29 18:49:08 +09:00
Yun Chan
5205dcdfa9 feat(release): prepare 1.1.0 candidate 2026-08-29 18:33:45 +09:00
Yun Chan
5a34f66981 feat(admin): 예전/최신 어드민 통합 — 실데이터 복원 + 인증 아키텍처 정리
예전 배포본(HEAD)의 상세 기능을 새 아키텍처(인증=.NET 백엔드, 데이터=Supabase)
위에 실데이터로 복원. 예전 HEAD는 서명 쿠키를 거부하고 위조 쿠키는 통과시키는
인증 결함이 있었고, 삭제된 페이지 다수는 백엔드 호출 0인 하드코딩 목업이었음.

인증/세션
- 로그인 이메일 전용화(username 폐지), 에러 키별 안내 메시지
- ADMIN_COOKIE_SECURE 옵션: TLS 없는 LAN HTTP 배포에서 Secure 쿠키 유실로
  로그인이 유지되지 않던 문제 해결 (login/logout route, admin-session, compose, .env.example)
- Supabase 미설정 시 우아한 저하: isSupabaseAdminConfigured + UnavailableAdminPanel

기능 복원 (실데이터)
- Release Hub: Forgejo API 실데이터(다운로드 수/SHA-256 체크섬/릴리스 이력)
- Ad Monetization: 데스크톱 미디에이션 10개 어댑터 로스터(fail-closed) + ad_reward_claims 통계
- License Issuer: 서버사이드 Ed25519 서명(/api/admin/license, super_admin 전용),
  개인키는 ADMIN_LICENSE_PRIVATE_KEY env로만, 발급 감사를 .NET AdminAuditEntries에 기록
- Service Models: STT 7종/LLM 5종 프리셋 드롭다운 + 자동채움
- 대시보드 ARR/MRR KPI: Supabase 구독 실집계(티어 월단가 기반)
- 사용자 상세 티어별 기능 배지(pro_plus 조건부)

.NET
- SuperAdminOnly 정책 추가, /api/admin/license-audit 엔드포인트, LicenseAuditDto
2026-08-23 23:38:08 +09:00
Yun Chan
a9c9a1ca6e fix(mobile): prevent supabaseUrl crash on startup with fallback auth config 2026-08-20 23:29:10 +09:00
Yun Chan
9b24bbc576 chore(api-server): sync built site to wwwroot 2026-08-20 23:23:08 +09:00
Yun Chan
692338926d fix(site): link mobile APK and desktop EXE directly to Forgejo release attachments
Some checks failed
deploy-site / deploy (push) Failing after 28s
deploy-site-windows / deploy-win (push) Successful in 41s
2026-08-20 23:04:53 +09:00
Yun Chan
3e4ca38926 fix(mobile-rn): bundle offline index.android.bundle into release APK and sign with v2/v3 scheme
Some checks are pending
deploy-site-windows / deploy-win (push) Waiting to run
deploy-site / deploy (push) Waiting to run
2026-08-20 23:02:26 +09:00
Yun Chan
55d03baf6b feat(site): implement dynamic client OS negotiation for Hero and CTA download buttons
Some checks failed
deploy-site-windows / deploy-win (push) Waiting to run
deploy-site / deploy (push) Failing after 24s
2026-08-20 22:57:38 +09:00
Yun Chan
4865387d7f feat(release): publish complete desktop and mobile signed release v1.0.0
Some checks are pending
deploy-site-windows / deploy-win (push) Waiting to run
deploy-site / deploy (push) Waiting to run
2026-08-20 22:50:19 +09:00
Yun Chan
eedbe97d02 fix(desktop): clean single-instance lock exit and suppress devtools console crash
Some checks are pending
deploy-site-windows / deploy-win (push) Waiting to run
deploy-site / deploy (push) Waiting to run
2026-08-20 22:48:58 +09:00
Yun Chan
0dc6a1dc93 test(e2e): add live multi-tab electron screen verification script
Some checks failed
deploy-site-windows / deploy-win (push) Waiting to run
deploy-site / deploy (push) Failing after 20s
2026-08-20 22:33:46 +09:00
Yun Chan
9b2b83b2ab test(desktop): add automated Playwright Electron real-app E2E verification suites
Some checks failed
deploy-site-windows / deploy-win (push) Waiting to run
deploy-site / deploy (push) Failing after 21s
2026-08-20 22:27:49 +09:00
Yun Chan
63b97c4761 feat(updater): overhaul cross-platform auto-update with user consent, blockmap diffs, skip version, and mobile update manager
Some checks failed
deploy-site-windows / deploy-win (push) Waiting to run
deploy-site / deploy (push) Failing after 19s
2026-08-20 22:17:14 +09:00
Yun Chan
d4dc498448 fix(site): completely remove Launch Sandbox menu and mockup pages
Some checks are pending
deploy-site-windows / deploy-win (push) Waiting to run
deploy-site / deploy (push) Waiting to run
2026-08-20 22:11:29 +09:00
Yun Chan
9b8dbdaffa fix(site): link fresh signed APK zip with cache busting in download section
Some checks failed
deploy-site-windows / deploy-win (push) Waiting to run
deploy-site / deploy (push) Failing after 18s
2026-08-20 22:07:40 +09:00
Yun Chan
781a896d02 build(android): configure production RSA-2048 release keystore with APK Signature Scheme v2/v3
Some checks failed
deploy-site-windows / deploy-win (push) Waiting to run
deploy-site / deploy (push) Failing after 21s
2026-08-20 21:58:07 +09:00
Yun Chan
7e264dca37 feat(mobile): overhaul mobile app with Pro paywall, rewarded video refill, iOS permissions, and build APK
Some checks failed
deploy-site-windows / deploy-win (push) Successful in 48s
deploy-site / deploy (push) Failing after 24s
2026-08-20 21:49:05 +09:00
Yun Chan
e87567fa90 ci: add .forgejo/workflows/deploy-site.yml for Cloudflare Pages auto-deployment to d3ro.chanpaca.net
Some checks failed
deploy-site-windows / deploy-win (push) Successful in 31s
deploy-site / deploy (push) Failing after 35s
2026-08-20 17:16:12 +09:00
Yun Chan
9dd52f0626 feat: integrate official download and releases section directly into the main homepage
Some checks failed
Deploy Landing Page / build (push) Waiting to run
Deploy Landing Page / deploy (push) Blocked by required conditions
CI Pipeline / Code Quality & Typecheck (push) Successful in 3m3s
CI Pipeline / Test Suite (ubuntu-latest) (push) Successful in 1m5s
CI Pipeline / Build Validation (admin) (push) Successful in 1m22s
CI Pipeline / Test Suite (macos-latest) (push) Failing after 5s
CI Pipeline / Test Suite (windows-latest) (push) Failing after 2m6s
CI Pipeline / Build Validation (desktop) (push) Successful in 4m1s
2026-08-20 17:11:52 +09:00
Yun Chan
abd26e91af feat: add /download and /releases routes in apps/web and sync binary distribution
Some checks are pending
CI Pipeline / Code Quality & Typecheck (push) Waiting to run
CI Pipeline / Test Suite (macos-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (ubuntu-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (windows-latest) (push) Blocked by required conditions
CI Pipeline / Build Validation (admin) (push) Blocked by required conditions
CI Pipeline / Build Validation (desktop) (push) Blocked by required conditions
Deploy Landing Page / build (push) Waiting to run
Deploy Landing Page / deploy (push) Blocked by required conditions
2026-08-20 17:06:51 +09:00
Yun Chan
7879d493ea feat: add high-end download center and admin release management hub
Some checks are pending
CI Pipeline / Code Quality & Typecheck (push) Waiting to run
CI Pipeline / Test Suite (macos-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (ubuntu-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (windows-latest) (push) Blocked by required conditions
CI Pipeline / Build Validation (admin) (push) Blocked by required conditions
CI Pipeline / Build Validation (desktop) (push) Blocked by required conditions
Deploy Landing Page / build (push) Waiting to run
Deploy Landing Page / deploy (push) Blocked by required conditions
2026-08-20 11:24:58 +09:00
Yun Chan
708e20f747 feat: complete release preparation, 10+ ad mediation, CI/CD, and docker deployment
Some checks failed
CI Pipeline / Code Quality & Typecheck (push) Waiting to run
CI Pipeline / Test Suite (macos-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (ubuntu-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (windows-latest) (push) Blocked by required conditions
CI Pipeline / Build Validation (admin) (push) Blocked by required conditions
CI Pipeline / Build Validation (desktop) (push) Blocked by required conditions
Deploy Landing Page / deploy (push) Blocked by required conditions
Deploy Landing Page / build (push) Waiting to run
Release & Packaging Pipeline / Build & Publish Admin Docker Image (push) Failing after 8s
Release & Code Signing CA Pipeline / build-and-sign-windows (push) Failing after 1m51s
Build macOS / Build & Package (macOS) (push) Failing after 4s
Build macOS / Build & Package (macOS)-1 (push) Failing after 5s
Release & Code Signing CA Pipeline / build-and-sign-macos (push) Failing after 3s
Release & Packaging Pipeline / Package macOS Desktop App (push) Failing after 4s
Release & Packaging Pipeline / Package Windows Desktop App (push) Failing after 2m28s
Release & Packaging Pipeline / Publish Official GitHub Release (push) Has been skipped
2026-08-20 11:12:05 +09:00
Yun Chan
5cd1de6859 agent update 2026-07-23 11:14:13 +09:00
Yun Chan
4fdf8bfdf8 fix(config): v0.2.1-alpha — CONFIG_DEFAULTS 7키 기본값 누락 핫픽스 (앱 실행 불가)
Some checks failed
Build macOS / Build & Package (macOS) (push) Failing after 4s
Build macOS / Build & Package (macOS)-1 (push) Failing after 4s
refactor-wave WS2가 AppConfig 인터페이스에 7키 추가 + as never 16건 제거했으나
CONFIG_DEFAULTS(ConfigService.ts) 기본값 누락 → 기존 사용자 config(0.1.x) 마이그레이션
시 configGet undefined → main 프로세스 .map() 크래시 (v0.2.0-alpha 앱 실행 불가).

수정: CONFIG_DEFAULTS에 7키 기본값 추가.
검증: dev 실행 — main 빌드 + electron start 정상 (수정 전엔 이 단계 크래시).
교훈: 배포 전 dev 실행 + 산물 e2e 필수. typecheck GREEN ≠ 런타임 안전.
2026-07-22 04:06:43 +09:00
Yun Chan
c8fb3abbaf docs(release): Linux(deb/AppImage) 별도 Phase 백로그 명시
- release-guide 알려진 제약 표에 Linux 행 추가 (사이드카/TTS 백엔드 장벽 + Phase 범위)
- project_status v0.2.0 후속에 Linux 별도 Phase 합의 기록 (7대 장벽)
2026-07-22 03:50:34 +09:00
Yun Chan
38a466ea0c docs(release): v0.2.0-alpha — CHANGELOG + Release 운영 가이드
Some checks failed
Build macOS / Build & Package (macOS) (push) Failing after 5s
Build macOS / Build & Package (macOS)-1 (push) Failing after 5s
- CHANGELOG [0.2.0-alpha] 섹션 (switchboard 스타일, ## [Unreleased] 최상단 정렬,
  Added/Changed/Fixed/Removed/Internal). publish-gitlab-release.mjs가 Release 노트로 자동 추출.
- release-guide.md "Release 페이지 운영" 섹션 추가 (CHANGELOG=Release 노트,
  권장 구조, 릴리스 체크리스트, 버전 정책). switchboard 패턴 벤치마크.
- project_status: v0.2.0-alpha 릴리스 기록
2026-07-22 02:50:26 +09:00