変更履歴
MBC CQRS Serverlessのすべての注目すべき変更がここに記録されています。このプロジェクトはセマンティックバージョニングとConventional Commitsに従っています。
バージョン体系
x.y.z- 本番リリースx.y.z-beta.n- テスト用ベータリリースx.y.z-alpha.n- 早期アクセス用アルファリリース
安定版リリース (1.x)
1.2.6 (2026-05-06)
新機能
- core: Repository の Read-Your-Writes(RYW)改善 — データテーブルがセッションバージョンに追いついた/追い越した時点で陳腐化したRYWセッションを即時パージし、「stale override」読み取りを解消 (詳細を見る) (PR #410)
getItem:existing.version >= session.versionの場合、バックグラウンドでセッションをパージし永続化済みデータを直接返却(不要な Command テーブル読み取りをスキップ)listItemsByPk: マージループ中に同期済みセッションをその場でクリーンアップlistItems(RDSパス): セッションごとのチェックをPromise.allで並列化し、直列N+1のレイテンシを解消- 新しいオプション
mergeOptions.getVersionにより、RDS行が既に追いついていることを証明できる場合は追加のDynamoDB GetItemをスキップ可能 SessionService.delete()とDynamoDbService.deleteItem()を追加(fire-and-forgetでの利用に安全)- 後方互換:
getVersionはオプション。RYW_SESSION_TTL_MINUTES未設定のプロジェクトは影響なし
- mcp-server: AP021 アンチパターン検出器を追加 —
CommandService 内で publishAsync 直後にイベントをemit(Severity: High) (詳細を見る) (PR #408)commandService.publishAsync/publishSyncから200文字以内のeventEmitter.emit()呼び出しを検出- 推奨:
publishAsync後はDynamoDB Streams経由で非同期にデータテーブルが書き込まれるため、イベント発行はIDataSyncHandler.up()/down()内で行うこと
- mcp-server: 検出器AP番号(
analyze.ts)とskill-doc AP番号(skills/mbc-review/SKILL.md)のクロスリファレンス表を追加 — 両者は独立した番号体系で、コードが一致するのは AP016〜AP019 と AP021 のみ (PR #411)- 検出器の出力に対応するskill-doc AP番号を併記するように変更(例:
AP005: Hardcoded Tenant (skill-doc: AP002)) mbc-migrateスキル: v1.2.5・v1.2.6セクションとマイグレーションマトリクスのエントリを追加mbc-debugスキル: v1.2.6での(意図的な)RYWセッション早期パージに関するトラブルシューティング項目を追加
- 検出器の出力に対応するskill-doc AP番号を併記するように変更(例:
バグ修正
- mcp-server:
server.tsがパッケージバージョンをハードコードしており、lerna versionのたびにサイレントにずれていた問題を修正。実行時にpackage.jsonから読み込むように変更 (PR #411)
1.2.5 (2026-04-10)
新機能
- import: ZIPインポート処理をリファクタリング — ZIPジョブ処理を
ImportServiceに直接統合し、独立したZipImportQueueEventHandlerを削除 (詳細を見る) (PR #404)ZipImportQueueEventHandlerを削除。ZIPインポートジョブはImportService内で直接処理されるように変更ImportEventHandlerがZIP_MASTER_JOBイベントに対してSQSパブリッシュをスキップするように変更CreateZipImportDtoのZIPインポートバリデーションを強化- ZIP処理のエラーハンドリングとロギングを改善
- mcp-server:
mbc_check_anti_patternsツールにAP016〜AP020のアンチパターン検出器を追加(合計20パターン) (PR #403)- AP016: リスロー前のエラーロギング欠落(High)
- AP017: 部分更新時の属性マージ誤り(High)
- AP018: Swaggerドキュメント /
@ApiTags欠落(Low) - AP019: リストクエリのページネーション欠落(High)
- AP020: トレーシング用
getCommandSource欠落(Low)
- mcp-server:
mbc-migrateとmbc-debugスキルをv1.1.x・v1.2.x破壊的変更ガイドで更新 (PR #403)
依存関係
- mcp-server:
@modelcontextprotocol/sdkを1.26.0から1.29.0に更新 (PR #403)
1.2.2 (2026-04-08)
バグ修正
- import:
CsvBatchProcessorにSmart Retryパターンを実装してHead-of-Line Blocking(Poison Pill)を修正 (詳細を見る) (PR #394)- 以前は、先頭行に永続的なバリデーションエラーがあるとバッチ全体が即座にクラッシュしていた
- 各行を独立して処理し、エラーを蓄積してバッチ終了後に集約エラーをスローするよう修正
- 有効な行は正常に保存、失敗行はSQSリトライをトリガー、成功済み行はEQUAL比較でスキップ(冪等性維持)
- import:
ImportQueueEventHandlerがSingleImportProcessorに生のSQSペイロードを渡していた問題を修正 (PR #394)singleImportProcessor.process()にevent.payload(生のSQSペイロード)ではなくevent.importEvent(パース済みオブジェクト)を渡すよう修正
1.2.1 (2026-04-06)
新機能
- core: SQSメッセージ操作のための
SqsServiceとSqsClientFactoryを追加 (詳細を見る) (PR #383)sendMessage()— SQSキューへ単一メッセージを送信sendMessageBatch()— 1回のAPIコールで最大10件のメッセージを送信receiveMessages()—MaxNumberOfMessages(デフォルト: 10)とWaitTimeSeconds(デフォルト: 0)を設定可能なメッセージ受信deleteMessage()— 処理済み単一メッセージの確認・削除deleteMessageBatch()— 1回のAPIコールで最大10件のメッセージを削除SqsServiceはQueueModule(グローバル)に登録され、アプリケーション全体でインジェクション可能- システム属性受信のための
MessageSystemAttributeNamesをサポート(廃止済みのAttributeNamesは非公開)
- core:
SnsClientFactoryをシングルトンSNSClientインスタンス方式にリファクタリング (PR #383)- 以前はトピックARNごとに個別クライアントをキャッシュしていたが、全publishコールでシングルインスタンスを共有するように変更
getClient()のシグネチャがgetClient(topicArn: string)からgetClient()に変更
1.2.0 (2026-04-02)
破壊的変更
- core:
publishSync()とpublishPartialUpdateSync()がコマンドに変更がない場合(no-op)にnullを返すように変更 (詳細を見る) (PR #375)- 戻り値の型が
Promise<CommandModel>からPromise<CommandModel | null>に変更 publishAsync()およびpublishPartialUpdateAsync()の既存の挙動に統一- 移行方法: 戻り値のプロパティにアクセスする前にnullチェックを追加
- 戻り値の型が
- sequence:
SequenceService.genNewSequence()が削除 (詳細を見る) (PR #375)- 代わりに
generateSequenceItem()またはgenerateSequenceItemWithProvideSetting()を使用
- 代わりに
新機能
- core:
SessionServiceとRepositoryによるRead-Your-Writes(RYW)一貫性を追加 (詳細を見る) (PR #375)publishAsync後、DynamoDB Streamの同期が完了する前でも同一ユーザーの後続読み取りがペンディングコマンドデータを返すように- オプトイン:
RYW_SESSION_TTL_MINUTES環境変数を設定して有効化(例:5) CommandModule/@mbc-cqrs-serverless/coreからRepositoryクラスをエクスポート —getItem・listItemsByPk・listItemsでRYWマージを提供- セッションテーブル
{NODE_ENV}-{APP_NAME}-sessionを作成する必要あり(dynamodbs/session.json参照) RYW_SESSION_TTL_MINUTES未設定時は無効 — 既存プロジェクトへの影響なし
- mcp-server: v1.2.0破壊的変更向けのAP013・AP014アンチパターン検出を追加 (PR #377)
- AP013: nullチェックなしで
publishSync/publishPartialUpdateSyncの戻り値を使用するパターンを検出 - AP014: 廃止された
genNewSequence()の使用を検出 migration_guideプロンプトにv1.2.0セクションを追加
- AP013: nullチェックなしで
バグ修正
- import: ZIPオーケストレーターのインポートステータス処理を修正 (PR #370)
ImportStatusHandlerがジョブ失敗時にimportJobStatusを含むタスク成功を送信するように修正ZipImportSfnEventHandlerがCSVタスクの失敗数を集計し最終ジョブステータスを調整
1.1.5 (2026-03-28)
新機能
- import: 大規模CSVインポート向けv2バッチ処理アーキテクチャを実装 (詳細を見る) (PR #366)
- 行ごとの
import_tmp書き込みをLambda内直接コマンドパブリッシュに置き換え、Hot Partitionボトルネックを解消 - Distributed Mapを
MaxItemsPerBatch: 100・MaxConcurrency: 50に設定し、スループットを大幅向上 - 新しい
finalize_parent_jobステートがバッチサマリーを集約し、DynamoDBUpdateItemを1回だけ呼び出して最終ステータスを書き込む CommandFinishedHandlerから行ごとのアトミックカウンター更新を削除し、大規模時のDynamoDBスロットリングを解消ImportEntityProfileにImportPublishModeenum(SYNC/ASYNC)を追加し、エンティティごとのパブリッシュモード設定を可能に- 空の
processingResultsガードを追加: バッチ結果が受信されない場合はジョブをFAILEDとしてマーク
- 行ごとの
破壊的変更
- import: CSVインポートでリアルタイムの行レベル進捗追跡が廃止 (詳細を見る)
processedRows・succeededRows・failedRowsカウンターはStep Functions実行完了時に一括集計されるように変更- 個別のCSV行は
import_tmpDynamoDBテーブルに書き込まれなくなった import-csvステートマシンに新しいfinalize_parent_jobステートとresultPath: '$.processingResults'が必要 — CDKとserverless.ymlをこのパッケージと同時に更新すること
テスト
ImportQueueEventHandlerのSYNC/ASYNCルーティングテストを追加(EQUAL/NOT_EXIST/CHANGED × SYNC/ASYNC + フォールバックの6テストケース)CsvImportSfnEventHandlerの空processingResultsガードテストを追加- バッチ集計テストを追加(1,000 + 500行、COMPLETEDおよびFAILEDシナリオ)
1.1.4 (2026-03-27)
新機能
- core:
publishSyncの監査証跡とHistoryテーブルの一致を復元 (詳細を見る) (PR #363)publishSyncがstatus: 'publish_sync:STARTED'とsyncMode: 'SYNC'でCommandテーブルに不変イベントを書き込むようにpublishSyncがHistoryテーブルに書き込むようになり、非同期Step Functionsパイプラインと一致- コマンドライ フサイクルが
publish_sync:STARTED→finish:FINISHED(エラー時はpublish_sync:FAILED)に publishAsyncからisNotCommandDirty早期リターン最適化を移植 — 変更なしの場合はnullを返す- DynamoDB Streamフィルターを更新し
syncMode=SYNCレコードを除外、Step Functionsの二重実行を防止 DefaultEventFactoryもローカル開発環境向けにsyncMode=SYNCレコードをフィルタリング
テスト
publishSyncの監査証跡とHistory一致の包括的なテストを追加
1.1.3 (2026-03-24)
バグ修正
- import: CSVインポートのDistributed Mapステート結果が256KB制限を超える問題を修正 (詳細を見る) (PR #348)
- Distributed Mapに
resultPath: DISCARDを設定し、子実行結果がステートデータに集約されることを防止 CsvImportSfnEventHandlerからMapResult依存を削除し、代わりにS3からcountCsvRows()を使用- S3ストリームが読み取れない場合のエラーハンドリングを追加
- Distributed Mapに
CI/CD
- npm OIDC trusted publishingに切り替え、
NPM_TOKENシークレットへの依存を排除 (PR #357)- 組み込みOIDCサポートのためlernaをv8からv9にアップグレード
- publishジョブに
id-token: writeパーミッションを追加 - Node 22+互換性のためlockfile同期ステップを追加
テスト
CsvImportSfnEventHandlerのfinalize_parent_jobロジックの包括的なテストを追加- failedRows > 0の場合のFAILEDステータスをテスト
- 全行成功時のCOMPLETEDステータスをテスト
- 処理が未完了の場合にステータスが更新されないことをテスト
- S3ストリームが読み取れない場合のエラーハンドリングをテスト