draftomen 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. draftomen-0.3.0/LICENSE +21 -0
  2. draftomen-0.3.0/PKG-INFO +156 -0
  3. draftomen-0.3.0/README.md +129 -0
  4. draftomen-0.3.0/draftomen/__init__.py +17 -0
  5. draftomen-0.3.0/draftomen/assets/draftomen.icns +0 -0
  6. draftomen-0.3.0/draftomen/assets/draftomen.ico +0 -0
  7. draftomen-0.3.0/draftomen/assets/draftomen_logo.png +0 -0
  8. draftomen-0.3.0/draftomen/audit.py +606 -0
  9. draftomen-0.3.0/draftomen/backtest.py +449 -0
  10. draftomen-0.3.0/draftomen/benchmark.py +834 -0
  11. draftomen-0.3.0/draftomen/carddb.py +1869 -0
  12. draftomen-0.3.0/draftomen/cardimages.py +313 -0
  13. draftomen-0.3.0/draftomen/cli.py +891 -0
  14. draftomen-0.3.0/draftomen/config.py +133 -0
  15. draftomen-0.3.0/draftomen/deckbuilder.py +2723 -0
  16. draftomen-0.3.0/draftomen/events.py +772 -0
  17. draftomen-0.3.0/draftomen/logfollow.py +451 -0
  18. draftomen-0.3.0/draftomen/mock_session.py +745 -0
  19. draftomen-0.3.0/draftomen/paths.py +120 -0
  20. draftomen-0.3.0/draftomen/pickengine.py +1117 -0
  21. draftomen-0.3.0/draftomen/pool.py +1259 -0
  22. draftomen-0.3.0/draftomen/preferences.py +289 -0
  23. draftomen-0.3.0/draftomen/qml/AboutDialog.qml +156 -0
  24. draftomen-0.3.0/draftomen/qml/AppBar.qml +120 -0
  25. draftomen-0.3.0/draftomen/qml/BacktestView.qml +316 -0
  26. draftomen-0.3.0/draftomen/qml/BuildView.qml +1151 -0
  27. draftomen-0.3.0/draftomen/qml/CardPreview.qml +434 -0
  28. draftomen-0.3.0/draftomen/qml/DimensionalButton.qml +42 -0
  29. draftomen-0.3.0/draftomen/qml/DimensionalComboBox.qml +182 -0
  30. draftomen-0.3.0/draftomen/qml/DimensionalSurface.qml +118 -0
  31. draftomen-0.3.0/draftomen/qml/DimensionalTabButton.qml +41 -0
  32. draftomen-0.3.0/draftomen/qml/LiveDraftView.qml +468 -0
  33. draftomen-0.3.0/draftomen/qml/Main.qml +175 -0
  34. draftomen-0.3.0/draftomen/qml/NavigationRail.qml +226 -0
  35. draftomen-0.3.0/draftomen/qml/PoolSummaryPanel.qml +322 -0
  36. draftomen-0.3.0/draftomen/qml/PrivacyDialog.qml +96 -0
  37. draftomen-0.3.0/draftomen/qml/RecentPickThumbnail.qml +83 -0
  38. draftomen-0.3.0/draftomen/qml/RecentPicksGallery.qml +333 -0
  39. draftomen-0.3.0/draftomen/qml/RecommendationRow.qml +404 -0
  40. draftomen-0.3.0/draftomen/qml/SettingsSwitch.qml +141 -0
  41. draftomen-0.3.0/draftomen/qml/SettingsView.qml +531 -0
  42. draftomen-0.3.0/draftomen/qml/StateBanner.qml +189 -0
  43. draftomen-0.3.0/draftomen/qml/StatusStrip.qml +84 -0
  44. draftomen-0.3.0/draftomen/qml/Theme.qml +71 -0
  45. draftomen-0.3.0/draftomen/qml/qmldir +23 -0
  46. draftomen-0.3.0/draftomen/qt_adapter.py +884 -0
  47. draftomen-0.3.0/draftomen/qt_gui.py +338 -0
  48. draftomen-0.3.0/draftomen/qt_mock.py +63 -0
  49. draftomen-0.3.0/draftomen/ranking.py +126 -0
  50. draftomen-0.3.0/draftomen/replay.py +480 -0
  51. draftomen-0.3.0/draftomen/session.py +3668 -0
  52. draftomen-0.3.0/draftomen/setinfo.py +26 -0
  53. draftomen-0.3.0/draftomen/seventeen.py +2766 -0
  54. draftomen-0.3.0/draftomen/splash.py +617 -0
  55. draftomen-0.3.0/draftomen/tui.py +4007 -0
  56. draftomen-0.3.0/draftomen/watch.py +336 -0
  57. draftomen-0.3.0/draftomen.egg-info/PKG-INFO +156 -0
  58. draftomen-0.3.0/draftomen.egg-info/SOURCES.txt +87 -0
  59. draftomen-0.3.0/draftomen.egg-info/dependency_links.txt +1 -0
  60. draftomen-0.3.0/draftomen.egg-info/entry_points.txt +6 -0
  61. draftomen-0.3.0/draftomen.egg-info/requires.txt +3 -0
  62. draftomen-0.3.0/draftomen.egg-info/top_level.txt +1 -0
  63. draftomen-0.3.0/pyproject.toml +126 -0
  64. draftomen-0.3.0/setup.cfg +4 -0
  65. draftomen-0.3.0/tests/test_audit.py +379 -0
  66. draftomen-0.3.0/tests/test_backtest.py +179 -0
  67. draftomen-0.3.0/tests/test_benchmark.py +283 -0
  68. draftomen-0.3.0/tests/test_carddb.py +501 -0
  69. draftomen-0.3.0/tests/test_cardimages.py +285 -0
  70. draftomen-0.3.0/tests/test_cli.py +716 -0
  71. draftomen-0.3.0/tests/test_deckbuilder.py +1264 -0
  72. draftomen-0.3.0/tests/test_desktop_bundle.py +256 -0
  73. draftomen-0.3.0/tests/test_events.py +473 -0
  74. draftomen-0.3.0/tests/test_extract_changelog.py +144 -0
  75. draftomen-0.3.0/tests/test_logfollow.py +250 -0
  76. draftomen-0.3.0/tests/test_mock_session.py +166 -0
  77. draftomen-0.3.0/tests/test_paths.py +52 -0
  78. draftomen-0.3.0/tests/test_pickengine.py +1042 -0
  79. draftomen-0.3.0/tests/test_pool.py +433 -0
  80. draftomen-0.3.0/tests/test_preferences.py +239 -0
  81. draftomen-0.3.0/tests/test_qt_adapter.py +1124 -0
  82. draftomen-0.3.0/tests/test_qt_gui.py +4126 -0
  83. draftomen-0.3.0/tests/test_qt_mock.py +116 -0
  84. draftomen-0.3.0/tests/test_render_homebrew_formula.py +127 -0
  85. draftomen-0.3.0/tests/test_replay.py +278 -0
  86. draftomen-0.3.0/tests/test_session.py +3176 -0
  87. draftomen-0.3.0/tests/test_seventeen.py +571 -0
  88. draftomen-0.3.0/tests/test_tui.py +2888 -0
  89. draftomen-0.3.0/tests/test_watch.py +600 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Andrea Grandi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,156 @@
1
+ Metadata-Version: 2.4
2
+ Name: draftomen
3
+ Version: 0.3.0
4
+ Summary: An unofficial Quick Draft assistant for MTG Arena
5
+ Author: Andrea Grandi
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/andreagrandi/draftomen
8
+ Project-URL: Repository, https://github.com/andreagrandi/draftomen
9
+ Project-URL: Issues, https://github.com/andreagrandi/draftomen/issues
10
+ Keywords: draft,magic-the-gathering,mtg-arena,terminal,tui
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: End Users/Desktop
14
+ Classifier: Operating System :: MacOS
15
+ Classifier: Operating System :: Microsoft :: Windows
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3 :: Only
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Topic :: Games/Entertainment
20
+ Requires-Python: >=3.12
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Requires-Dist: pyside6<7,>=6.9
24
+ Requires-Dist: textual>=8.2.8
25
+ Requires-Dist: textual-image>=0.13.2
26
+ Dynamic: license-file
27
+
28
+ <p align="center">
29
+ <img src="https://raw.githubusercontent.com/andreagrandi/draftomen/master/docs/assets/draftomen_banner.png" alt="Draft Omen banner" width="100%">
30
+ </p>
31
+
32
+ # Draft Omen
33
+
34
+ Draft Omen is an unofficial desktop draft assistant for MTG Arena Quick Drafts. Its PySide6/QML application reads Arena's local `Player.log`, recognizes each pack and pick, and ranks the available cards while you draft. When the draft is complete, it also suggests a 40-card deck from your pool. A terminal interface with the same draft behavior is available as `draftomen-tui`.
35
+
36
+ Draft Omen is read-only: it does not write to, inject into, or automate MTG Arena. Card details come from [Scryfall](https://scryfall.com/) and draft statistics come from [17Lands](https://www.17lands.com/).
37
+
38
+ ## Screenshots
39
+
40
+ ### Live Draft GUI — pick recommendations
41
+
42
+ The Live Draft view shows Pack 1, Pick 3 with 12 cards available and Glóin the Mighty selected. Its DO Score, 17Lands win rate, grade, and color fit appear alongside focused-card details and a pool summary.
43
+
44
+ ![Draft Omen Live Draft GUI showing Pack 1, Pick 3 with 12 cards available, Glóin the Mighty selected, ranked card rows, DO Score, 17Lands win rate, grade, color fit, focused-card details, and pool summary](https://raw.githubusercontent.com/andreagrandi/draftomen/master/docs/assets/draft-pick-recommendations.png)
45
+
46
+ ### Suggested deck GUI
47
+
48
+ After the draft, the Suggested deck view shows an automatic UR pair and a 40-card build with 23 spells, 17 lands, a mana base and curve, grouped main-deck spells, and selected-card details.
49
+
50
+ ![Draft Omen Suggested deck GUI with an automatic UR pair, 40-card build with 23 spells and 17 lands, mana base, mana curve, grouped main-deck spells, and Tidings of War selected](https://raw.githubusercontent.com/andreagrandi/draftomen/master/docs/assets/suggested-deck-build.png)
51
+
52
+ ## How recommendations work
53
+
54
+ Draft Omen keeps the data behind every recommendation visible instead of presenting a black-box pick order:
55
+
56
+ - **17Lands ratings:** each card shows its Games-in-Hand win rate (`17L WR`) and a 17Lands-style grade. Quick Draft data is preferred; Premier Draft data is used as a fallback when Quick Draft samples are missing or too small.
57
+ - **DO Score:** the default 0-100 ranking normalizes 17Lands win rates across the set. A card without a reliable sample starts from a neutral score of 50, adjusted by its Average Last Seen At (`ALSA`) when available. The five freely available basic lands instead score 0 and rank after draftable cards.
58
+ - **Color fit:** early picks stay open. From pick 6 onward, scores gradually favor the colors supported by the drafted pool; from pick 16, on-color cards receive the full bonus and off-color cards the full penalty. Strong picks influence the inferred color pair more than filler.
59
+ - **Close early picks:** when two cards have similar scores, set- and format-specific 17Lands color-pair win rates can break the tie without forcing an early commitment.
60
+ - **Conservative splashing:** an `A`-range, single-pip card can be marked as a visible third-color splash when it is materially better than the on-color choices and the pool can support its mana. Draft Omen limits this to one extra color and two cards.
61
+ - **Transparent alternatives:** press `s` to compare rankings by DO Score, raw 17Lands win rate, ALSA, or mana value. The interface also identifies neutral-prior and Premier-fallback rows.
62
+ - **Deck suggestion:** the builder evaluates two-color pairs using card quality and 17Lands pair performance, then chooses spells and lands while considering creatures, curve, colored mana requirements, and cached 17Lands deck-structure targets when available.
63
+
64
+ DO Score is the default because it performed better than raw 17Lands win rate in Draft Omen's offline pick benchmarks. It is still guidance rather than a perfect pick order: public statistics reflect the decks, players, and contexts in which cards were played.
65
+
66
+ For the complete methodology, see [pick scoring](docs/pick-scoring.md), [benchmarking](docs/benchmarking.md), and the [deck builder](docs/deck-builder.md).
67
+
68
+ ## How to use it
69
+
70
+ ### 1. Install
71
+
72
+ On macOS, install Draft Omen with Homebrew:
73
+
74
+ ```bash
75
+ brew install andreagrandi/tap/draftomen
76
+ ```
77
+
78
+ On other platforms, [install uv](https://docs.astral.sh/uv/getting-started/installation/) and run:
79
+
80
+ ```bash
81
+ uv tool install draftomen
82
+ ```
83
+
84
+ ### 2. Enable Arena logs
85
+
86
+ In MTG Arena, open **Settings → Account**, enable **Detailed Logs (Plugin Support)**, and restart Arena.
87
+
88
+ ### 3. Start Draft Omen
89
+
90
+ Start Draft Omen before entering a Quick Draft:
91
+
92
+ ```bash
93
+ draftomen
94
+ ```
95
+
96
+ The PySide6/QML desktop application loads card metadata when needed, watches
97
+ Arena's standard log location, detects the set, and follows the draft
98
+ automatically. If 17Lands ratings are not cached for that set, it offers to
99
+ download them.
100
+
101
+ ### Terminal interface
102
+
103
+ For a terminal workflow, use the stable `draftomen-tui` command. It preserves
104
+ the watch, replay, build, backtest, benchmark, and data-refresh subcommands,
105
+ including plain-text mode:
106
+
107
+ ```bash
108
+ draftomen-tui
109
+ draftomen-tui watch --plain
110
+ ```
111
+
112
+ Use the arrow keys or `j`/`k` to browse cards, `s` to change the ranking,
113
+ `b` to open the current build, `c` to configure the view and optional splash
114
+ recommendations, and `q` to quit.
115
+
116
+ ### Visual development
117
+
118
+ For deterministic visual development, launch the explicit forced-mock entry
119
+ point:
120
+
121
+ ```bash
122
+ draftomen-gui-mockup
123
+ ```
124
+
125
+ For an automated, non-interactive GUI smoke check, use the default command
126
+ with its mock provider and bounded smoke flag:
127
+
128
+ ```bash
129
+ QT_QPA_PLATFORM=offscreen draftomen --provider mock --smoke-test
130
+ ```
131
+
132
+ See the [desktop GUI guide](docs/gui-mockup.md) for live and mock launch
133
+ options, selectable states, and responsive review targets. For reproducible
134
+ unsigned development bundles, see the [desktop bundle guide](docs/desktop-bundles.md).
135
+
136
+ Live recommendations currently support Quick Draft. Windows support is best-effort.
137
+
138
+ ## Local draft audit data
139
+
140
+ Live sessions started with `draftomen-tui`, including `watch --plain`, keep an
141
+ independent, append-only JSONL audit log for every draft under
142
+ `~/.draftomen/audit/drafts/<account-id>/<draft-id>.jsonl`. Each record includes
143
+ the offered pack, pool snapshot, ratings source, scoring configuration, complete
144
+ candidate calculations, splash eligibility and mana-source reasoning, all
145
+ supported rankings, the recommendation visible when the pick was made, and the
146
+ card actually chosen. Stable record IDs prevent
147
+ startup scans and log rotation from rewriting prior evidence.
148
+
149
+ Offline `replay` and backtest commands do not write audit records. For the schema
150
+ and retention details, see [draft audit logging](docs/draft-audit-log.md).
151
+
152
+ ## Branding and compliance
153
+
154
+ Draft Omen is not affiliated with, sponsored by, approved by, or endorsed by Wizards of the Coast, Scryfall, or 17Lands.
155
+
156
+ Draft Omen is unofficial Fan Content permitted under the Fan Content Policy. Not approved/endorsed by Wizards. Portions of the materials used are property of Wizards of the Coast. ©Wizards of the Coast LLC. Card data from Scryfall and 17Lands; neither service endorses this tool.
@@ -0,0 +1,129 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/andreagrandi/draftomen/master/docs/assets/draftomen_banner.png" alt="Draft Omen banner" width="100%">
3
+ </p>
4
+
5
+ # Draft Omen
6
+
7
+ Draft Omen is an unofficial desktop draft assistant for MTG Arena Quick Drafts. Its PySide6/QML application reads Arena's local `Player.log`, recognizes each pack and pick, and ranks the available cards while you draft. When the draft is complete, it also suggests a 40-card deck from your pool. A terminal interface with the same draft behavior is available as `draftomen-tui`.
8
+
9
+ Draft Omen is read-only: it does not write to, inject into, or automate MTG Arena. Card details come from [Scryfall](https://scryfall.com/) and draft statistics come from [17Lands](https://www.17lands.com/).
10
+
11
+ ## Screenshots
12
+
13
+ ### Live Draft GUI — pick recommendations
14
+
15
+ The Live Draft view shows Pack 1, Pick 3 with 12 cards available and Glóin the Mighty selected. Its DO Score, 17Lands win rate, grade, and color fit appear alongside focused-card details and a pool summary.
16
+
17
+ ![Draft Omen Live Draft GUI showing Pack 1, Pick 3 with 12 cards available, Glóin the Mighty selected, ranked card rows, DO Score, 17Lands win rate, grade, color fit, focused-card details, and pool summary](https://raw.githubusercontent.com/andreagrandi/draftomen/master/docs/assets/draft-pick-recommendations.png)
18
+
19
+ ### Suggested deck GUI
20
+
21
+ After the draft, the Suggested deck view shows an automatic UR pair and a 40-card build with 23 spells, 17 lands, a mana base and curve, grouped main-deck spells, and selected-card details.
22
+
23
+ ![Draft Omen Suggested deck GUI with an automatic UR pair, 40-card build with 23 spells and 17 lands, mana base, mana curve, grouped main-deck spells, and Tidings of War selected](https://raw.githubusercontent.com/andreagrandi/draftomen/master/docs/assets/suggested-deck-build.png)
24
+
25
+ ## How recommendations work
26
+
27
+ Draft Omen keeps the data behind every recommendation visible instead of presenting a black-box pick order:
28
+
29
+ - **17Lands ratings:** each card shows its Games-in-Hand win rate (`17L WR`) and a 17Lands-style grade. Quick Draft data is preferred; Premier Draft data is used as a fallback when Quick Draft samples are missing or too small.
30
+ - **DO Score:** the default 0-100 ranking normalizes 17Lands win rates across the set. A card without a reliable sample starts from a neutral score of 50, adjusted by its Average Last Seen At (`ALSA`) when available. The five freely available basic lands instead score 0 and rank after draftable cards.
31
+ - **Color fit:** early picks stay open. From pick 6 onward, scores gradually favor the colors supported by the drafted pool; from pick 16, on-color cards receive the full bonus and off-color cards the full penalty. Strong picks influence the inferred color pair more than filler.
32
+ - **Close early picks:** when two cards have similar scores, set- and format-specific 17Lands color-pair win rates can break the tie without forcing an early commitment.
33
+ - **Conservative splashing:** an `A`-range, single-pip card can be marked as a visible third-color splash when it is materially better than the on-color choices and the pool can support its mana. Draft Omen limits this to one extra color and two cards.
34
+ - **Transparent alternatives:** press `s` to compare rankings by DO Score, raw 17Lands win rate, ALSA, or mana value. The interface also identifies neutral-prior and Premier-fallback rows.
35
+ - **Deck suggestion:** the builder evaluates two-color pairs using card quality and 17Lands pair performance, then chooses spells and lands while considering creatures, curve, colored mana requirements, and cached 17Lands deck-structure targets when available.
36
+
37
+ DO Score is the default because it performed better than raw 17Lands win rate in Draft Omen's offline pick benchmarks. It is still guidance rather than a perfect pick order: public statistics reflect the decks, players, and contexts in which cards were played.
38
+
39
+ For the complete methodology, see [pick scoring](docs/pick-scoring.md), [benchmarking](docs/benchmarking.md), and the [deck builder](docs/deck-builder.md).
40
+
41
+ ## How to use it
42
+
43
+ ### 1. Install
44
+
45
+ On macOS, install Draft Omen with Homebrew:
46
+
47
+ ```bash
48
+ brew install andreagrandi/tap/draftomen
49
+ ```
50
+
51
+ On other platforms, [install uv](https://docs.astral.sh/uv/getting-started/installation/) and run:
52
+
53
+ ```bash
54
+ uv tool install draftomen
55
+ ```
56
+
57
+ ### 2. Enable Arena logs
58
+
59
+ In MTG Arena, open **Settings → Account**, enable **Detailed Logs (Plugin Support)**, and restart Arena.
60
+
61
+ ### 3. Start Draft Omen
62
+
63
+ Start Draft Omen before entering a Quick Draft:
64
+
65
+ ```bash
66
+ draftomen
67
+ ```
68
+
69
+ The PySide6/QML desktop application loads card metadata when needed, watches
70
+ Arena's standard log location, detects the set, and follows the draft
71
+ automatically. If 17Lands ratings are not cached for that set, it offers to
72
+ download them.
73
+
74
+ ### Terminal interface
75
+
76
+ For a terminal workflow, use the stable `draftomen-tui` command. It preserves
77
+ the watch, replay, build, backtest, benchmark, and data-refresh subcommands,
78
+ including plain-text mode:
79
+
80
+ ```bash
81
+ draftomen-tui
82
+ draftomen-tui watch --plain
83
+ ```
84
+
85
+ Use the arrow keys or `j`/`k` to browse cards, `s` to change the ranking,
86
+ `b` to open the current build, `c` to configure the view and optional splash
87
+ recommendations, and `q` to quit.
88
+
89
+ ### Visual development
90
+
91
+ For deterministic visual development, launch the explicit forced-mock entry
92
+ point:
93
+
94
+ ```bash
95
+ draftomen-gui-mockup
96
+ ```
97
+
98
+ For an automated, non-interactive GUI smoke check, use the default command
99
+ with its mock provider and bounded smoke flag:
100
+
101
+ ```bash
102
+ QT_QPA_PLATFORM=offscreen draftomen --provider mock --smoke-test
103
+ ```
104
+
105
+ See the [desktop GUI guide](docs/gui-mockup.md) for live and mock launch
106
+ options, selectable states, and responsive review targets. For reproducible
107
+ unsigned development bundles, see the [desktop bundle guide](docs/desktop-bundles.md).
108
+
109
+ Live recommendations currently support Quick Draft. Windows support is best-effort.
110
+
111
+ ## Local draft audit data
112
+
113
+ Live sessions started with `draftomen-tui`, including `watch --plain`, keep an
114
+ independent, append-only JSONL audit log for every draft under
115
+ `~/.draftomen/audit/drafts/<account-id>/<draft-id>.jsonl`. Each record includes
116
+ the offered pack, pool snapshot, ratings source, scoring configuration, complete
117
+ candidate calculations, splash eligibility and mana-source reasoning, all
118
+ supported rankings, the recommendation visible when the pick was made, and the
119
+ card actually chosen. Stable record IDs prevent
120
+ startup scans and log rotation from rewriting prior evidence.
121
+
122
+ Offline `replay` and backtest commands do not write audit records. For the schema
123
+ and retention details, see [draft audit logging](docs/draft-audit-log.md).
124
+
125
+ ## Branding and compliance
126
+
127
+ Draft Omen is not affiliated with, sponsored by, approved by, or endorsed by Wizards of the Coast, Scryfall, or 17Lands.
128
+
129
+ Draft Omen is unofficial Fan Content permitted under the Fan Content Policy. Not approved/endorsed by Wizards. Portions of the materials used are property of Wizards of the Coast. ©Wizards of the Coast LLC. Card data from Scryfall and 17Lands; neither service endorses this tool.
@@ -0,0 +1,17 @@
1
+ """Package metadata for Draftomen.
2
+ Keep shared version and disclaimer text in one place.
3
+ """
4
+
5
+ from importlib.metadata import PackageNotFoundError, version
6
+
7
+ try:
8
+ __version__ = version(distribution_name="draftomen")
9
+ except PackageNotFoundError:
10
+ __version__ = "0.0.0+unknown"
11
+
12
+ DISCLAIMER = (
13
+ "Draft Omen is unofficial Fan Content permitted under the Fan Content Policy. "
14
+ "Not approved/endorsed by Wizards. Portions of the materials used are property "
15
+ "of Wizards of the Coast. ©Wizards of the Coast LLC. Card data from 17Lands "
16
+ "(17lands.com); 17Lands does not endorse this tool."
17
+ )