Tags

Tags give the ability to mark specific points in history as being important
  • v0.1.9

    bd8cfc27 · chore(release): v0.1.9 ·
    Release v0.1.9: comprehensive documentation overhaul and GitLab project page optimization
  • v0.1.8

    6e264f6f · chore(release): v0.1.8 ·
    Release v0.1.8: GitLab project avatar configuration
  • v0.1.7

    5aede09b · chore(release): v0.1.7 ·
    Release v0.1.7: PWA hero icon suite and GitLab branding assets
  • v0.1.6

    edaf7290 · chore(release): v0.1.6 ·
    Release v0.1.6: comprehensive performance and optimization upgrade
  • v0.1.5

    ec715e17 · Release v0.1.5 ·
    Record the release notes in the repository and capture the manual procedures the
    pipeline cannot perform.
    
    Changes since v0.1.4 (3583164):
    
      - CHANGELOG.md consolidates v0.1.0 through v0.1.4 from the annotated release
        tags, which stay the authoritative release notes for those versions.
      - scripts/deploy-rtdb-rules.sh, exposed as `pnpm deploy:database-rules`, wraps
        the manual Realtime Database rules release. It refuses to run when CI is
        set, requires an interactive login, reads the target instance from
        firebase.json, and drops GOOGLE_APPLICATION_CREDENTIALS so the stored user
        login is used rather than a service account.
      - OPERATIONS.md 2.3 records the two active project integrations. Both are
        email-based and target the maintainer's address: emails-on-push sends
        commits and diffs, and pipelines-email reports failures only. Both are
        limited to the default and protected branches. Section 3.4 records the
        manual Realtime Database release.
      - The six-digit device lock passcode is masked on the onboarding, unlock, and
        PIN reset screens. The fields no longer use type="password" wherever
        -webkit-text-security is supported, because browsers treat a password field
        as a credential to save and autocomplete="off" does not suppress the offer;
        the password type remains the fallback where the property is unimplemented.
    
    Verification:
    
      - CI pipeline #2899630985 (#39): lint, test:unit, build:landing, build:web,
        and deploy:hosting all succeeded. deploy:hosting ran in 69s and is the only
        deploy job the change set could trigger.
      - The deployed bundle carries the masking rule: /assets/index-Bu66ELW1.css
        serves -webkit-text-security:disc, and the deployed script hash matches the
        local build.
      - Monorepo typecheck, Prettier check, and the 67 core unit tests pass. The
        deploy script passes bash -n and both of its guards exit 1 as intended.
    
    Note: on-device Web Push delivery remains unverified (SECURITY.md 5), and the
    Firefox fallback still uses type="password", so the save prompt can appear
    there.
  • v0.1.4

    Deploy the security rules and composite indexes of every backing store
    from CI, so they track the repository instead of relying on manual
    releases.
    
    Changes since v0.1.3 (1f5ed2b):
    
      - .gitlab-ci.yml gains deploy:firestore-rules, deploy:firestore-indexes,
        and deploy:storage-rules. Each job authenticates with the
        FIREBASE_SERVICE_ACCOUNT_JSON ADC file, runs
        firebase-tools@15.10.1 deploy --only <target>, and is gated on main
        plus changes to the relevant file or firebase.json.
      - firebase.json names the storage bucket and the Realtime Database
        instance explicitly, in array form. With the previous object form the
        CLI queried the project default bucket and derived a
        <project>-default-rtdb target, so a service-account-only environment
        failed the defaultBucket lookup with
        403 firebasestorage.defaultBucket.get and pointed at the wrong RTDB.
      - The custom IAM role projects/talk2nick/roles/firestoreIndexAdmin
        grants the datastore.indexes.* permissions, which no predefined role
        exposes, and is bound to the CI service account.
    
    Not automated:
    
      - Realtime Database rules remain a manual release. firebase deploy
        --only database writes to the legacy rules.json endpoint, which
        rejects service-account access tokens with 401; see OPERATIONS.md 3.4.
    
    Verification:
    
      - CI pipeline #2899224569 (#37): deploy:firestore-indexes,
        deploy:firestore-rules, deploy:storage-rules, deploy:functions, lint,
        and test:unit all succeeded.
      - The pipeline config parses, Prettier check passes, and no
        deploy:database-rules job remains.
    
    Note: on-device Web Push delivery remains unverified (SECURITY.md 5).
  • v0.1.3

    v0.1.3 — Realtime Database presence for push dispatch
    
    Fixes duplicate push notifications to recipients who are already viewing
    a conversation. getPresence() read a Firestore presenceMirror collection
    that no function ever wrote, so the "active conversation" filter always
    failed and every non-muted device received a notification.
    
    Changes since v0.1.2 (1a72b2b):
    
      - Read presence directly from the Realtime Database. admin.ts gains
        adminRtdb(), which initializes the Admin app with databaseURL and
        returns getDatabase(). getPresence() now reads presence/{uid} at the
        RTDB URL and falls back to null (recipient treated as inactive) on
        failure, so a presence lookup error no longer suppresses the whole
        dispatch.
      - Remove the dead presenceMirror match block from firestore.rules.
      - Document the RTDB dependency of push dispatch in ARCHITECTURE.md 2.2
        and OPERATIONS.md 6.4, including the [push] presence lookup failure
        log line.
    
    Verification:
    
      - functions build, monorepo typecheck, and core unit tests (67) pass.
      - CI pipeline #2899083690: all jobs succeeded; deploy:functions
        completed in 2m32s.
      - sendPushOnMessage is ACTIVE in asia-northeast3 on
        talk2nick; firestore:rules released manually.
    
    Note: on-device Web Push delivery remains unverified (SECURITY.md 5).
  • v0.1.2

    Web Push notifications, end to end
    
    Deployed state:
    - App: https://talk2nick.web.app (Firebase Hosting)
    - Landing and admin: https://heroyik.gitlab.io/talk2nick/ (GitLab Pages)
    - 16 Cloud Functions ACTIVE in asia-northeast3
    
    Added:
    - Web Push registration: pushTokens/{uid}/tokens/{token}, token as doc ID
    - VAPID public key distributed via the VITE_FIREBASE_VAPID_KEY CI variable
    - sendPushOnMessage sends and prunes invalid registration tokens
    - pruneStalePushTokens sweeps stale tokens via collectionGroup(tokens)
    - Per-device push toggle on the notifications route
    
    Fixed:
    - deploy:functions installed workspace dependencies before predeploy build
    - CI IAM gained roles/datastore.viewer and the custom firestoreDbMetaReader
      and schedulerJobManager roles; the Cloud Billing API was enabled
    
    Known limitations: docs/OPERATIONS.md section 6.
  • v0.1.1

    v0.1.1
    
    MIT 라이선스 도입, CI 서비스계정 키 회전.
    
    - LICENSE: MIT
    - README: 라이선스 항목 갱신
    - docs/SECURITY.md: 키 상태 갱신, 고아 키 기록, 미해결 항목 1건 추가
    
    CI 서비스계정 키 회전 완료. 노출되었던 키는 삭제되었고, 신규 키로
    배포 파이프라인이 성공하는 것을 확인한 뒤 이전 키를 제거했다.
    
    미완성 항목은 docs/OPERATIONS.md 6장 참조.
  • v0.1.0

    v0.1.0
    
    talk2nIcK 최초 릴리스.
    
    배포 상태:
    - 앱: https://talk2nick.web.app (Firebase Hosting)
    - 랜딩·어드민: https://heroyik.gitlab.io/talk2nick/ (GitLab Pages)
    - Firestore: asia-northeast3, 삭제 보호 활성
    - Realtime Database: asia-southeast1
    - Cloud Storage: talk2nick.firebasestorage.app, UBLA 활성
    
    CI 파이프라인(lint/build/test/deploy) 전 단계 통과.
    
    미완성 항목은 docs/OPERATIONS.md 6장을 참조:
    푸시 알림 클라이언트 등록 코드, Cloud Functions 배포, 키 회전.