콘텐츠로 이동

2.4.0 릴리스 실행 기록

{
  "schema": "release-metadata/v2",
  "version": "v2.4.0",
  "status": "released",
  "releaseScopes": [
    "db-migration",
    "docs"
  ],
  "extraRepoRefs": [],
  "versionMapping": {
    "docs": {
      "tag": "v2.4.0",
      "commit": null
    },
    "coupler-api": {
      "tag": "v2.4.0",
      "commit": "299abc63d0c4cebaaff9f27a9f1484e0ef82c9db"
    },
    "coupler-admin-web": {
      "tag": null,
      "commit": null
    },
    "coupler-mobile-app": {
      "store": null,
      "releaseTag": null,
      "commit": null,
      "nextPush": null
    }
  },
  "scopeResults": {
    "db-migration": {
      "status": "released",
      "summary": "긴급 선적용된 migration 98·99를 현재 운영 ledger·catalog·schema·postcondition으로 재검증하고 canonical execution 부재를 숨기지 않는 위반 기록으로 닫았다.",
      "evidence": {
        "schema": "db-migration-maintenance-evidence/v1",
        "kind": "violation",
        "violation": {
          "version": "v2.4.0",
          "apiSourceRef": "299abc63d0c4cebaaff9f27a9f1484e0ef82c9db",
          "verifiedAt": "2026-08-03T17:29:40.000Z",
          "catalogState": {
            "catalogPath": "db/schema/schema-contract.json",
            "catalogSha256": "c1afce7707a25cd8e7003eb9dedae85695ad646d51321e0f3bd16db12a8af66a",
            "ledgerCompatibilityPath": "db/schema/ledger-compatibility.json",
            "ledgerCompatibilitySha256": "b3f7b274bb82ff3a0d18541eec0e3c46a66395fb59ea902606fc1e1ab9346fe9",
            "catalogEntryCount": 26,
            "resolutionCounts": {
              "applied": 25,
              "recovered": 0,
              "baseline": 0,
              "superseded": 1
            },
            "pendingCount": 0,
            "adjudicableLedgerGapCount": 0
          },
          "prodState": {
            "databaseIdentitySha256": "fda77e0b97d327b13e2e215f170204c441143a6159d95d8e65acc6d1381b8b69",
            "schemaFingerprintSha256": "607387544c052a59c960cf1fc34540497b9d438176d4d28ad4fd9c0a61ea5efe",
            "migrations": [
              {
                "file": "db/migrations/98_expand_match_lounge_source.sql",
                "sha256": "37b81efdf3e5154def46d891cd56b9ae6f0f1686f0f554480164e14100b7f57f",
                "ledger": "applied",
                "postcondition": "passed"
              },
              {
                "file": "db/migrations/99_expand_match_finding_send_card_setting.sql",
                "sha256": "3f1b9bd74c6a6d95804bb73643916d883c1c24832dead8ee0792fb8d72c405ab",
                "ledger": "applied",
                "postcondition": "passed"
              }
            ]
          },
          "historicalExecution": {
            "backupSha256": "949b81ce249212d0df8b47e9f1a1878028dc5a2c5d138ccc01d8978ee3cd5315",
            "writerFenceEvidence": "2026-08-04 KST API와 cron을 중지한 뒤 migration 98·99를 실행했다.",
            "resumeSmokeEvidence": "ledger·postcondition 확인 뒤 API와 cron을 재개하고 내부·외부 smoke를 통과했다.",
            "canonicalExecution": "unavailable-not-recreated"
          },
          "limitation": "긴급 실행 전에 canonical dev/prod plan·execution을 만들지 못했으며 현재 상태 검증으로 과거 execution event를 사후 제조하지 않는다."
        }
      }
    },
    "docs": {
      "status": "released",
      "summary": "DB migration 98·99의 확인 결과와 canonical execution 부재 한계를 최종 기록으로 고정했다.",
      "evidence": {}
    }
  },
  "apiContractCutover": null
}

문서 역할

  • 역할: 시나리오
  • 문서 종류: flow
  • 충돌 시 우선 문서: policy/release-process.md, DB 실행 기준은 policy/db-migration-gate-policy.md
  • 기준 성격: as-is

목적

  • 긴급 선적용된 운영 DB migration 98·99의 확인 가능한 결과와 누락된 canonical 실행 이력을 함께 보존한다.

범위

  • 대상: docs, coupler-api
  • 포함 범위: 운영 DB migration 98·99의 ledger·postcondition 재검증, 위반 기록, docs 최종 기록과 태그 기준점
  • 제외 범위: contracts package, API·Admin 배포, Mobile Store·NextPush, Apple 계정·결제 복구와 후속 migration

상위 규범 문서

릴리스 상태

  • 목표 버전: v2.4.0
  • 전체 상태: released
  • 완료 범위: 운영 DB migration 98·99의 ledger·catalog·schema·postcondition 재검증과 한계 기록
  • 제외 범위: DB 외 서비스·모바일 릴리스는 이 기록의 완료 조건이 아니다.

버전 매핑

  • docs: 태그 v2.4.0, 커밋 N/A
  • coupler-api: 태그 v2.4.0, 커밋 299abc63d0c4cebaaff9f27a9f1484e0ef82c9db
  • coupler-admin-web: 태그 N/A, 커밋 N/A
  • coupler-mobile-app: Store N/A, 릴리스 태그 N/A, 커밋 N/A, NextPush N/A

릴리스 결과

  • DB migration: 2026-08-04 KST 운영계에 98·99가 적용됐고 schema_migrations ledger와 live postcondition을 재확인했다.
  • Canonical execution: 긴급 실행 전에 dev/prod plan·execution을 만들지 못했으며 사후 제조하지 않았다.
  • Docs: 확인 가능한 사실과 한계를 kind: violation으로 고정하고 일반 migration 실행 근거와 분리했다.

메인 흐름

  1. 운영 ledger·catalog·schema fingerprint와 migration 98·99 checksum을 read-only로 재검증했다.
  2. migration별 live postcondition과 API·cron fence/resume smoke의 당시 증빙을 확인했다.
  3. canonical 실행 부재를 위반 기록으로 남기고 이후 release의 실행·승격 근거로 재사용하지 않게 닫았다.

검증 근거

  • Catalog: SHA-256 c1afce7707a25cd8e7003eb9dedae85695ad646d51321e0f3bd16db12a8af66a, 26/26 resolved, 미해결 migration과 판정 가능한 ledger gap은 모두 0건이다.
  • Migration 98: checksum 37b81efdf3e5154def46d891cd56b9ae6f0f1686f0f554480164e14100b7f57f, t_match.lounge_id column과 idx_t_match_lounge_id index를 확인했다.
  • Migration 99: checksum 3f1b9bd74c6a6d95804bb73643916d883c1c24832dead8ee0792fb8d72c405ab, t_setting.id=26, value=-5를 확인했다.
  • Backup: manifest SHA-256 949b81ce249212d0df8b47e9f1a1878028dc5a2c5d138ccc01d8978ee3cd5315를 당시 실행 증빙으로 보존한다.
  • 한계: 현재 상태 재검증은 누락된 canonical execution event 순서를 증명하거나 대신하지 않는다.

롤백 기준

  • DB: 적용 ledger와 당시 backup 증빙을 보존한다. 임의 역쿼리나 98·99 재실행을 하지 않는다.
  • Docs: 이 terminal 기록은 병합 뒤 수정하지 않는다. 사실 오류는 별도 이슈·사고 기록으로 추적한다.

후속 작업

  • 이 기록에서 제외한 API·Admin·Mobile·계정·결제 작업은 각각의 실제 실행 범위에서 별도로 기록한다.