このプロジェクトについて

Deck Labは、競争的なCommander(Magic: The Gathering)デッキの構築、研究、テストを行うためのPython/Flaskウェブアプリケーションです。ユーザーはデッキを編集し、競争的なメタゲームを研究し、カード情報を確認し、ゴールドフィッシュシミュレーションを実行できます。保存されたデッキ、アカウント、設定はセッション間で永続化されます。ホストされたインスタンスでは、所有者が提供するアカウントが必要です。 READMEに記載されている主な機能: - デッキ編集と研究ワークフロー: パブリック研究結果は、リビジョン追跡、バックグラウンド更新、古いデータの提供を伴う永続的なスナップショットから提供されます。フィルタとブラウザ履歴は、ページの完全な再構築なしに更新されます。 - 決定論的ドメインロジック: コマンダーの合法性、色の同一性、パートナーコンボ、デッキサイズはコードで検証されます。戦略パックビルダーはカードを決定論的に選択し、モデル出力は説明のための別の検証境界内に収められます。 - 明示的なデータ契約: PostgreSQL研究は、読み取り専用のコンシューマーを備えたバージョニングされた`mtg_v1`ビューで公開され、シミュレーターはバージョニングされたJSONをパッケージ化されたスキーマに対して検証します。証拠の不足やシミュレーションの利用不可は、発明された結果ではなく、可視状態として表面化されます。 - セキュリティ: Argon2パスワードハッシュ、CSRF保護、アカウントのプロビジョニング、パスワードの回復、認可チェック。プロダクションとQAでは、別々の資格情報、データ、コンテナネットワークが使用されます。 - 再現可能なリリース: GitHub Actionsはテスト、lint、フォーマット、タイプ、コンテナのスモークチェックをゲートします。デプロイメントではイメージのリビジョン、アーカイブハッシュ、プラットフォーム、レイヤーが検証されます。暗号化されたバックアップと分離された復元チェックにより、復旧がサポートされます。 アーキテクチャ: Flask + Waitressウェブアプリは、SQLiteをアカウント、デッキ、研究スナップショットのバックエンドとして使用します。バックグラウンド更新はPostgreSQL `mtg_v1`ビューからプルされ、アプリはバージョニングされたJSONとオプションのモデルゲートウェイを使用してプライベートシミュレーターを呼び出すことができます。デプロイメントでは、CaddyをHTTPSとして使用し、DigitalOceanでDocker Composeを使用します。データベースとシミュレーターのポートはプライベートに保たれ、QAは所有者のレビューのために別のサブドメインで利用できます。 ローカルで実行するには、Python 3.11+が必要です。セットアップでは、仮想環境、`pip install -e '.[dev,postgres,legacy]'`、データベースセットアップスクリプト、シークレットキー、認証モード、ロールアウトフラグの環境変数、アドミン作成CLIコマンド、サーブコマンドが使用されます。CLI/パッケージは、互換性のために歴史的な`sabermetrics`名前を保持しています。デフォルトのフィクスチャーバックのcEDHパスは、プロバイダーの資格情報、PostgreSQL、シミュレーターなしで動作します。プロダクション研究コーパスとプライベートアカウントは、リポジトリに配布されていません。オフライン決定論的ビルダーは、CLIコマンドを介してリストとビルド戦略パックを実行できます。 検証には、pytest、ruff、black、mypyが使用されます。デフォルトのスイートは、フィクスチャとモックに依存しますが、ライブPostgreSQL、モデル、シミュレーターの統合はオプトインであり、モデルテストではAPI料金が発生する可能性があります。CIは、インストールされたパッケージの動作、認証/回復、フィードバックのモック配信、HTTPコンテナの起動も実行します。タイプ構成レコードは、スコープされたレガシーの除外を記録するのではなく、完全なカバレッジを主張します。 スコープと制限: これは、コマンダーに焦点を当てたアプリケーションであり、フルルールエンジンではありません。ゴールドフィッシングは、多人数プレイの勝利確率ではなく、モデル化されたプレイパターンを測定します。トーナメントのカバレッジは、利用可能なソースデータと包含率を反映しており、カードの品質の証明ではありません。戦略パックのサポートは、キュレーションされた素材とシミュレーターの機能によって制限されます。シングルホストのデプロイメントは、運用上のトレードオフであり、高可用性の主張ではありません。元のジェネレーターモジュールの一部は、互換性コードとして残っています。アクティブなジェネレータープロダクトは、別のリポジトリにあります。プロジェクトは、Wizards of the Coastと無関係な、非公式のファンプロジェクトであり、MITライセンスです。