gradlab 0.1.0__py3-none-any.whl

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 (229) hide show
  1. THIRD_PARTY_NOTICES.md +81 -0
  2. gradlab/METRICS.md +344 -0
  3. gradlab/__init__.py +5 -0
  4. gradlab/action_contract.py +340 -0
  5. gradlab/artifacts.py +282 -0
  6. gradlab/bandit_env.py +137 -0
  7. gradlab/batch_runtime.py +1670 -0
  8. gradlab/benchmark.py +416 -0
  9. gradlab/benchmark_profiles.py +406 -0
  10. gradlab/boundary_schema.py +53 -0
  11. gradlab/callbacks.py +1119 -0
  12. gradlab/checkpoint_acceptance.py +477 -0
  13. gradlab/cli_args.py +26 -0
  14. gradlab/clock.py +36 -0
  15. gradlab/config_loader.py +545 -0
  16. gradlab/config_validation.py +245 -0
  17. gradlab/contract_versions.py +3 -0
  18. gradlab/dataset_cli.py +212 -0
  19. gradlab/dataset_contract.py +539 -0
  20. gradlab/dataset_hub.py +434 -0
  21. gradlab/dataset_media.py +393 -0
  22. gradlab/dataset_minari.py +157 -0
  23. gradlab/dataset_providers.py +361 -0
  24. gradlab/dataset_record.py +1018 -0
  25. gradlab/dataset_store.py +777 -0
  26. gradlab/device.py +15 -0
  27. gradlab/dotenv.py +24 -0
  28. gradlab/dstack_backend.py +510 -0
  29. gradlab/early_stop.py +669 -0
  30. gradlab/env.py +645 -0
  31. gradlab/env_cli.py +675 -0
  32. gradlab/env_config.py +123 -0
  33. gradlab/env_identity.py +481 -0
  34. gradlab/env_metadata.py +208 -0
  35. gradlab/env_providers.py +1040 -0
  36. gradlab/env_registry.py +557 -0
  37. gradlab/eval.py +298 -0
  38. gradlab/eval_backend.py +25 -0
  39. gradlab/eval_metrics.py +436 -0
  40. gradlab/eval_runner.py +638 -0
  41. gradlab/experiment_cli.py +1471 -0
  42. gradlab/experiment_contracts.py +603 -0
  43. gradlab/experiments/goals/Breakout-Atari2600-v0/_goal.yaml +77 -0
  44. gradlab/experiments/goals/Breakout-Atari2600-v0/no-noop/_goal.yaml +14 -0
  45. gradlab/experiments/goals/Breakout-Atari2600-v0/no-noop/recipes/ppo.yaml +18 -0
  46. gradlab/experiments/goals/Breakout-Atari2600-v0/recipes/ppo-128x64.yaml +14 -0
  47. gradlab/experiments/goals/Breakout-Atari2600-v0/recipes/ppo-archive-curriculum.yaml +31 -0
  48. gradlab/experiments/goals/Breakout-Atari2600-v0/recipes/ppo-stable-updates.yaml +16 -0
  49. gradlab/experiments/goals/Breakout-Atari2600-v0/recipes/ppo.yaml +18 -0
  50. gradlab/experiments/goals/SuperMarioBros-Nes-v0/EndToEnd/_goal.yaml +45 -0
  51. gradlab/experiments/goals/SuperMarioBros-Nes-v0/EndToEnd/recipes/ppo.yaml +9 -0
  52. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level1-1/_goal.yaml +25 -0
  53. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level1-1/recipes/a2c.yaml +17 -0
  54. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level1-1/recipes/dstack-smoke.yaml +13 -0
  55. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level1-1/recipes/go-explore-jerk-20m.yaml +42 -0
  56. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level1-1/recipes/jerk.yaml +24 -0
  57. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level1-1/recipes/ppo.yaml +8 -0
  58. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level1-1-no-stall/_goal.yaml +10 -0
  59. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level1-1-no-stall/recipes/ppo.yaml +8 -0
  60. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level1-2/_goal.yaml +27 -0
  61. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level1-2/recipes/ppo.yaml +17 -0
  62. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level1-3/_goal.yaml +7 -0
  63. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level1-3/recipes/ppo-train-clear-100.yaml +22 -0
  64. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level1-3/recipes/ppo.yaml +8 -0
  65. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level1-4/_goal.yaml +7 -0
  66. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level1-4/recipes/ppo-l14-soft-update.yaml +16 -0
  67. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level2-1/_goal.yaml +7 -0
  68. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level2-1/recipes/ppo.yaml +8 -0
  69. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level2-2/_goal.yaml +7 -0
  70. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level2-2/recipes/ppo.yaml +8 -0
  71. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level2-3/_goal.yaml +7 -0
  72. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level2-3/recipes/ppo.yaml +8 -0
  73. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level2-4/_goal.yaml +7 -0
  74. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level2-4/recipes/ppo.yaml +8 -0
  75. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level3-1/_goal.yaml +7 -0
  76. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level3-1/recipes/ppo.yaml +8 -0
  77. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level3-2/_goal.yaml +7 -0
  78. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level3-2/recipes/ppo.yaml +8 -0
  79. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level3-3/_goal.yaml +7 -0
  80. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level3-3/recipes/ppo.yaml +8 -0
  81. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level3-4/_goal.yaml +7 -0
  82. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level3-4/recipes/ppo.yaml +8 -0
  83. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level4-1/_goal.yaml +7 -0
  84. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level4-1/recipes/ppo.yaml +8 -0
  85. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level4-2/_goal.yaml +7 -0
  86. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level4-2/recipes/ppo.yaml +8 -0
  87. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level4-3/_goal.yaml +7 -0
  88. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level4-3/recipes/ppo.yaml +8 -0
  89. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level4-4/_goal.yaml +7 -0
  90. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Level4-4/recipes/ppo.yaml +8 -0
  91. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Levels_1-1_1-2/_goal.yaml +124 -0
  92. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Levels_1-1_1-2/recipes/ppo.yaml +8 -0
  93. gradlab/experiments/goals/SuperMarioBros-Nes-v0/Levels_1-1_1-2/recipes/raw-advantage.yaml +14 -0
  94. gradlab/experiments/goals/SuperMarioBros-Nes-v0/_goal-common.yaml +134 -0
  95. gradlab/experiments/goals/SuperMarioBros-Nes-v0/_reports.yaml +23 -0
  96. gradlab/experiments/goals/SuperMarioBros-Nes-v0/_reward-shapes-common.yaml +32 -0
  97. gradlab/experiments/goals/VizdoomBasic-v1/_goal.yaml +98 -0
  98. gradlab/experiments/goals/VizdoomBasic-v1/recipes/ppo.yaml +12 -0
  99. gradlab/experiments/goals/VizdoomDeadlyCorridor-v1/_goal.yaml +60 -0
  100. gradlab/experiments/goals/VizdoomDeadlyCorridor-v1/recipes/ppo.yaml +9 -0
  101. gradlab/experiments/goals/VizdoomDefendCenter-v1/_goal.yaml +55 -0
  102. gradlab/experiments/goals/VizdoomDefendCenter-v1/recipes/ppo.yaml +9 -0
  103. gradlab/experiments/goals/VizdoomDefendLine-v1/_goal.yaml +55 -0
  104. gradlab/experiments/goals/VizdoomDefendLine-v1/recipes/ppo.yaml +9 -0
  105. gradlab/experiments/goals/VizdoomHealthGathering-v1/_goal.yaml +46 -0
  106. gradlab/experiments/goals/VizdoomHealthGathering-v1/recipes/ppo.yaml +9 -0
  107. gradlab/experiments/goals/VizdoomHealthGatheringSupreme-v1/_goal.yaml +46 -0
  108. gradlab/experiments/goals/VizdoomHealthGatheringSupreme-v1/recipes/ppo.yaml +9 -0
  109. gradlab/experiments/goals/VizdoomMyWayHome-v1/_goal.yaml +42 -0
  110. gradlab/experiments/goals/VizdoomMyWayHome-v1/recipes/ppo.yaml +9 -0
  111. gradlab/experiments/goals/VizdoomPredictPosition-v1/_goal.yaml +42 -0
  112. gradlab/experiments/goals/VizdoomPredictPosition-v1/recipes/ppo.yaml +9 -0
  113. gradlab/experiments/goals/VizdoomTakeCover-v1/_goal.yaml +46 -0
  114. gradlab/experiments/goals/VizdoomTakeCover-v1/recipes/ppo.yaml +9 -0
  115. gradlab/experiments/goals/_catalog.yaml +29 -0
  116. gradlab/experiments/goals/_vizdoom-common.yaml +93 -0
  117. gradlab/experiments/goals/alepy__mspacman/_goal.yaml +90 -0
  118. gradlab/experiments/goals/alepy__mspacman/recipes/ppo.yaml +11 -0
  119. gradlab/experiments/goals/gradlab__bandit/_goal.yaml +65 -0
  120. gradlab/experiments/goals/gradlab__bandit/recipes/ppo.yaml +23 -0
  121. gradlab/experiments/recipes/_presets/atari-ppo.yaml +21 -0
  122. gradlab/experiments/recipes/_presets/mario-mixed-ppo.yaml +29 -0
  123. gradlab/experiments/recipes/_presets/mario-single-on-policy.yaml +18 -0
  124. gradlab/experiments/recipes/_presets/mario-single-ppo.yaml +14 -0
  125. gradlab/file_utils.py +59 -0
  126. gradlab/go_explore.py +838 -0
  127. gradlab/goal_schema.py +55 -0
  128. gradlab/import_roms.py +22 -0
  129. gradlab/jerk.py +501 -0
  130. gradlab/json_utils.py +68 -0
  131. gradlab/lifecycle_certification.py +1700 -0
  132. gradlab/local_train.py +357 -0
  133. gradlab/main.py +66 -0
  134. gradlab/metric_names.py +468 -0
  135. gradlab/metric_store.py +538 -0
  136. gradlab/modal_app.py +73 -0
  137. gradlab/modal_eval_backend.py +51 -0
  138. gradlab/modal_eval_config.py +74 -0
  139. gradlab/modal_eval_protocol.py +205 -0
  140. gradlab/modal_eval_storage.py +37 -0
  141. gradlab/modal_eval_worker.py +407 -0
  142. gradlab/model_sources.py +467 -0
  143. gradlab/operator_credentials.py +360 -0
  144. gradlab/play.py +136 -0
  145. gradlab/play_application.py +503 -0
  146. gradlab/play_attribution.py +187 -0
  147. gradlab/play_catalog.py +1642 -0
  148. gradlab/play_debug.py +213 -0
  149. gradlab/play_runtime.py +471 -0
  150. gradlab/play_session.py +898 -0
  151. gradlab/play_termination.py +88 -0
  152. gradlab/play_web.py +2329 -0
  153. gradlab/policy_bundle.py +1449 -0
  154. gradlab/policy_models.py +137 -0
  155. gradlab/policy_observation.py +117 -0
  156. gradlab/policy_registry.py +88 -0
  157. gradlab/policy_runtime.py +15 -0
  158. gradlab/preprocessing.py +102 -0
  159. gradlab/provider_config.py +69 -0
  160. gradlab/publication.py +982 -0
  161. gradlab/r2_store.py +556 -0
  162. gradlab/ranking.py +78 -0
  163. gradlab/recipe_catalog.py +154 -0
  164. gradlab/recipe_documents.py +970 -0
  165. gradlab/recipe_schema.py +170 -0
  166. gradlab/recipe_variants.py +67 -0
  167. gradlab/reward_programs.py +358 -0
  168. gradlab/reward_transform.py +212 -0
  169. gradlab/rom_assets.py +398 -0
  170. gradlab/rom_cli.py +190 -0
  171. gradlab/rom_runtime.py +93 -0
  172. gradlab/run_authority.py +808 -0
  173. gradlab/run_contracts.py +511 -0
  174. gradlab/run_supervisor.py +2158 -0
  175. gradlab/runtime_contract.py +96 -0
  176. gradlab/runtime_refs.py +771 -0
  177. gradlab/sb3_models.py +49 -0
  178. gradlab/schedules.py +110 -0
  179. gradlab/seeds.py +62 -0
  180. gradlab/state_archive.py +1409 -0
  181. gradlab/supervisor_ledger.py +431 -0
  182. gradlab/supervisor_runtime.py +150 -0
  183. gradlab/targets.py +78 -0
  184. gradlab/task_advantage.py +72 -0
  185. gradlab/task_kernels.py +2033 -0
  186. gradlab/templates/model_card.md.j2 +97 -0
  187. gradlab/train.py +182 -0
  188. gradlab/train_config.py +969 -0
  189. gradlab/training/__init__.py +1 -0
  190. gradlab/training/go_explore.py +597 -0
  191. gradlab/training/jerk.py +535 -0
  192. gradlab/training/sb3.py +218 -0
  193. gradlab/training/sb3_helpers.py +142 -0
  194. gradlab/training/sb3_on_policy.py +456 -0
  195. gradlab/training/sb3_vec_env.py +199 -0
  196. gradlab/training_backend.py +213 -0
  197. gradlab/trusted_inputs.py +426 -0
  198. gradlab/turbo_api.py +164 -0
  199. gradlab/validation.py +115 -0
  200. gradlab/video.py +271 -0
  201. gradlab/wandb_leaders.py +552 -0
  202. gradlab/wandb_publisher.py +377 -0
  203. gradlab/wandb_reports.py +1092 -0
  204. gradlab/wandb_utils.py +126 -0
  205. gradlab/web_player/app.js +1454 -0
  206. gradlab/web_player/index.html +95 -0
  207. gradlab/web_player/panels/README.md +58 -0
  208. gradlab/web_player/panels/catalog.js +250 -0
  209. gradlab/web_player/panels/controls.js +321 -0
  210. gradlab/web_player/panels/events.js +56 -0
  211. gradlab/web_player/panels/game.js +131 -0
  212. gradlab/web_player/panels/manager.js +301 -0
  213. gradlab/web_player/panels/observation.js +49 -0
  214. gradlab/web_player/panels/raw.js +26 -0
  215. gradlab/web_player/panels/runtime.js +193 -0
  216. gradlab/web_player/panels/shared.js +280 -0
  217. gradlab/web_player/panels/telemetry-panel.js +384 -0
  218. gradlab/web_player/panels/telemetry.js +258 -0
  219. gradlab/web_player/panels/workspace.js +180 -0
  220. gradlab/web_player/sources/browser.js +1373 -0
  221. gradlab/web_player/styles.css +837 -0
  222. gradlab/web_player/tabler-chevron-down.svg +4 -0
  223. gradlab/web_player/tabler-icons.svg +46 -0
  224. gradlab/web_player/vendor/gridstack/gridstack-all.js +3 -0
  225. gradlab/web_player/vendor/gridstack/gridstack.min.css +1 -0
  226. gradlab-0.1.0.dist-info/METADATA +332 -0
  227. gradlab-0.1.0.dist-info/RECORD +229 -0
  228. gradlab-0.1.0.dist-info/WHEEL +4 -0
  229. gradlab-0.1.0.dist-info/entry_points.txt +2 -0
THIRD_PARTY_NOTICES.md ADDED
@@ -0,0 +1,81 @@
1
+ # Third-party notices
2
+
3
+ GradLab's Gymrec v3 dataset provider boundary and compatibility behavior include
4
+ code adapted from Gymrec 0.1.1 (`08b0328c990d0955a0df12636117ce08458afb5b`).
5
+
6
+ ## Gymrec
7
+
8
+ MIT License
9
+
10
+ Copyright (c) 2025 Tiago Silva
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+
30
+ ## Tabler Icons
31
+
32
+ The web player includes a subset of Tabler Icons 3.44.0.
33
+
34
+ MIT License
35
+
36
+ Copyright (c) 2020-2026 Paweł Kuna
37
+
38
+ Permission is hereby granted, free of charge, to any person obtaining a copy
39
+ of this software and associated documentation files (the "Software"), to deal
40
+ in the Software without restriction, including without limitation the rights
41
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
42
+ copies of the Software, and to permit persons to whom the Software is
43
+ furnished to do so, subject to the following conditions:
44
+
45
+ The above copyright notice and this permission notice shall be included in all
46
+ copies or substantial portions of the Software.
47
+
48
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
49
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
50
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
51
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
52
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
53
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
54
+ SOFTWARE.
55
+
56
+ ## GridStack
57
+
58
+ The web player vendors GridStack 12.6.0 browser assets.
59
+
60
+ MIT License
61
+
62
+ Copyright (c) 2019-2025 Alain Dumesny. v0.4.0 and older (c) 2014-2018 Pavel
63
+ Reznikov, Dylan Weiss
64
+
65
+ Permission is hereby granted, free of charge, to any person obtaining a copy
66
+ of this software and associated documentation files (the "Software"), to deal
67
+ in the Software without restriction, including without limitation the rights
68
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
69
+ copies of the Software, and to permit persons to whom the Software is
70
+ furnished to do so, subject to the following conditions:
71
+
72
+ The above copyright notice and this permission notice shall be included in all
73
+ copies or substantial portions of the Software.
74
+
75
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
76
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
77
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
78
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
79
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
80
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
81
+ SOFTWARE.
gradlab/METRICS.md ADDED
@@ -0,0 +1,344 @@
1
+ # Metrics schema v10
2
+
3
+ This file is the human contract for gradlab telemetry. The Python registry in
4
+ `src/gradlab/metric_names.py` is the executable source of truth. Every emitted metric must match an
5
+ exact registry entry or a bounded template.
6
+
7
+ ## Surfaces and dimensions
8
+
9
+ - W&B is the authoritative scientific metric surface. One supervisor process inside the training
10
+ container is the only process allowed to open and write the logical W&B run.
11
+ - The learner writes structured events only to its embedded SQLite WAL outbox. It performs no
12
+ network I/O for metrics, checkpoint publication, or evaluation dispatch.
13
+ - Modal never receives W&B credentials. The supervisor validates Modal results and appends their
14
+ metrics to the same W&B run.
15
+ - SQLite and private-R2 JSONL metric segments are delivery and recovery transports, not competing
16
+ scientific metric stores. Verified terminal journals expire after seven days.
17
+ - Public model R2 contains immutable checkpoint closures and a mutable no-cache run index. Private
18
+ eval R2 contains intents, results, and episode evidence. Private control R2 contains leases,
19
+ journals, promotions, and terminal receipts.
20
+ - W&B config contains run-defining dimensions: `metrics_schema_version: 10`, `training_backend_id`,
21
+ `training_backend_config_hash`, `algorithm_id`, goal,
22
+ environment, starts, seed, frame skip, environment count, hyperparameters, eval protocol, and
23
+ runtime versions.
24
+ - `goal_contract_sha256` is the semantic SHA-256 of the fully composed, rendered, validated goal
25
+ contract. Generated goal reports use it with `goal_slug` to keep current-contract leaderboards
26
+ comparable; runs without the current fingerprint remain historical evidence only.
27
+ - Catalog-backed runs also record `effective_goal_contract_sha256`, `reward_program_kind`,
28
+ `reward_program_revision`, `reward_shape`, `reward_shape_sha256`, and
29
+ `reward_shape_is_default`. Reward-derived returns are comparable only when the selected reward
30
+ semantic identity and effective goal contract match; the readable key alone is not sufficient.
31
+ - `leader/checkpoint/*` contains diagnostic projections of the selected checkpoint. The
32
+ create-only private-R2 `PromotionReceipt` is the authoritative selection.
33
+ - Heavy model bytes, videos, replays, episode rows, diagnostics, and recovery payloads never go to
34
+ W&B.
35
+ - Interactive playback uses local descriptor keys such as `reward/shaped`, `policy/value`, and
36
+ `action/executed` to configure live panels. They are typed projections of one streamed transition
37
+ or its bounded in-browser history, are not emitted metrics, and must not be interpreted as aliases
38
+ for similarly named W&B registry entries. `reward/provider` is the provider output before the
39
+ task program and gradlab-owned reward transform; `reward/shaped` is the final policy-facing reward
40
+ after task shaping, scaling, and clipping. Playback computes realized return-to-go and `V(s) -
41
+ G(s)` only for a terminal, stochastic, policy-driven trajectory whose policy environment,
42
+ reward stream, discount, action sampling, and boundary/bootstrap semantics match training.
43
+ Otherwise those critic diagnostics are explicitly unavailable rather than numerically compared.
44
+
45
+ The active checkpoint protocol is `acceptance`; complete accepted evidence additionally emits the
46
+ `full` metric family. Dimension IDs must be unique and match `[A-Za-z0-9_.-]+`; unsafe IDs are
47
+ rejected rather than silently rewritten. Starts use the same readable ID in training and evaluation.
48
+ Provider `info` fields never become metrics automatically.
49
+
50
+ Configuration-selected internal learner feedback, such as an archive curriculum's per-start
51
+ priority statistic, is not telemetry merely because it has a readable name. Internal feedback
52
+ identifiers do not use metric paths and are not published to W&B unless a separately registered
53
+ metric explicitly projects them. If projected, the emitted name and semantics must appear in the
54
+ registry below. For SB3 PPO and A2C, archive-curriculum `priority_metric: value_error` specifically
55
+ means the arithmetic mean of `abs(A_t)` over one completed archive-origin trajectory, where `A_t`
56
+ is raw GAE before PPO minibatch normalization. That scalar updates the archive's cell-level EMA and
57
+ is intentionally not emitted; `train/curriculum/archive/feedback/trajectory/count` reports only how
58
+ many such trajectory updates were committed.
59
+
60
+ An episode metric is a **return**. `reward` is reserved for per-step shaping and component
61
+ attribution. Frame skip remains run config. W&B uses three explicit axes:
62
+
63
+ - `train/global_step`: policy environment transitions consumed by training.
64
+ - `eval/checkpoint_step`: step of the checkpoint represented by an evaluation row.
65
+ - `orchestration/event_seq`: durable supervisor delivery order.
66
+
67
+ Each axis is configured with a W&B `max` summary reducer. W&B's public API may therefore expose
68
+ its summary value as a reducer mapping such as `{"max": 5046272}` rather than as a bare number.
69
+ Catalog and report consumers must unwrap the configured reducer value; a recipe's requested
70
+ `timesteps` cap is not a substitute for the observed `train/global_step`.
71
+
72
+ Asynchronous evaluations may arrive after later training rows without changing their scientific
73
+ X-axis. Each producer writes only its applicable scientific axis; durable delivery order uses
74
+ `orchestration/event_seq`.
75
+
76
+ Purged legacy W&B and R2 state has no compatibility guarantee. Newly materialized runs declare
77
+ schema v10.
78
+
79
+ ## Research interpretation
80
+
81
+ - Mario ranks checkpoints only after acceptance: earliest `leader/checkpoint/step`, then highest
82
+ `eval/full/episode/return/mean`. Breakout is training-only and ranks current-contract seeded recipe
83
+ cohorts using `train/episode/return/shaped/from/target/mean`, which excludes archive-curriculum
84
+ origins and non-episode control boundaries; tied cohorts prefer fewer policy transitions.
85
+ - Aggregate training `current/rate/*` is cumulative. Aggregate `window_100/rate/*` is the latest
86
+ 100 attempts. Global
87
+ window-100 min/mean appear only after every configured start has 100 attempts. Always pair early
88
+ current aggregates with `start_coverage/rate`.
89
+ - A bounded training-only search may use per-start success counts and the history peak and first
90
+ threshold crossing of `train/outcome/success/window_100/rate/min` to screen and rank recipes.
91
+ That evidence is not checkpoint evaluation and cannot establish checkpoint promotion, goal
92
+ acceptance, or release evidence.
93
+ - Failure reasons may overlap, so reason counts and rates need not sum to the terminal count.
94
+ Successful episodes contribute to success metrics, not the failure-reason families.
95
+ - Positive PPO policy entropy, dominant-action rate, and the action histogram diagnose discrete
96
+ policy collapse. Value prediction and advantage histograms are sampled every 64 rollouts.
97
+ - For reward-transform ablations, first compare `train/reward/raw/*` with
98
+ `train/reward/shaped/*`. `task.reward.reward_scale` is a positive divisor, so a value below one
99
+ amplifies the policy-facing reward. If raw rewards match but shaped magnitudes diverge, inspect
100
+ value loss and explained variance before policy entropy, dominant-action rate, KL, and clip
101
+ fraction: squared-error value loss can grow roughly with the square of the target scale, while
102
+ advantage normalization does not protect the critic from poorly conditioned targets.
103
+ - Do not compare shaped episode-return or value magnitudes as policy quality across different reward
104
+ transforms. Use task success and acceptance-evaluation metrics for the outcome comparison; use
105
+ reward, critic, and policy metrics to locate the causal chain.
106
+ - Snapshot-curriculum `sampling/probability/max` and `sampling/effective_cell/count` summarize the
107
+ current cell-probability distribution. They do not report realized per-cell selection frequency
108
+ or identify which resident cells were selected.
109
+ - Derived throughput phase timing satisfies `loop wall time = env_step_seconds +
110
+ rollout_overhead_seconds + between_rollouts_seconds`. Compare those three phase durations on
111
+ matching workloads to identify a training-loop bottleneck. `rollout_overhead_seconds` includes
112
+ policy inference plus wrapper, buffer, reset, task, and callback work outside the native provider.
113
+ `between_rollouts_seconds` includes optimizer updates, callbacks, and logging, so it is deliberately
114
+ not named optimization time.
115
+ - Reward components are emitted only when active. Each component has mean, nonzero rate, and share;
116
+ raw reward appears only when it differs from shaped reward. Mario's `progress` component includes
117
+ both its base new-progress reward and any configured additional new-progress reward above
118
+ `progress_reward_boost_start_x`.
119
+ - Episode-return means are neither a best-episode metric nor the score of a currently visible lane:
120
+ they reduce the latest 100 completed episodes across all applicable vector lanes. W&B chart
121
+ smoothing, when enabled, is applied on top of that already-rolling value. Under the root Breakout
122
+ contract (`reward_mode: native`, unclipped), shaped episode return is the sum of Atari row-score
123
+ deltas, so individual 400-plus games can coexist with a much lower mean when other lanes finish
124
+ with lower scores.
125
+ - Episode returns, success rates, failure reasons, policy entropy, and optimizer diagnostics
126
+ describe performance or mechanism; no one of them should be treated as a generic stall-stop
127
+ signal. A configured plateau condition may watch any registered numeric training metric, with
128
+ direction, minimum meaningful improvement, warmup, and patience owned by the goal or recipe.
129
+ `train/early_stop/{condition}/*` projects that condition's local state for diagnosis and shadow
130
+ calibration. It means only that the selected metric has not improved under the declared
131
+ condition, not that the task is impossible or that a checkpoint is accepted. Private control-R2
132
+ receipts, never W&B diagnostics, are authoritative for an active early-stop outcome.
133
+
134
+ ## Full-evaluation table
135
+
136
+ `eval/full/by_start` has one row per start and observed failure reason with these columns:
137
+
138
+ `checkpoint_step`, `start_id`, `episodes`, `success_count`, `success_rate`, `return_mean`,
139
+ `return_std`, `return_median`, `reason`, `reason_count`, `reason_rate`.
140
+ The reason value is empty, with zero count and rate, when a start has no recorded failure reason.
141
+
142
+ Episode-level evidence stays in R2. Confidence intervals and start-by-reason scalar products
143
+ are intentionally computed offline rather than added to W&B history.
144
+
145
+ An acceptance rejection is complete evidence of failure, but not a complete 100-episode
146
+ evaluation. W&B history always receives `eval/checkpoint_step`, pass, planned/completed episodes, and
147
+ acceptance duration. It receives no partial `eval/full/*` result. Accepted projections additionally
148
+ include variable return, length, progress, episode count, artifact, source, and `eval/full/by_start`.
149
+ Constant acceptance success rates, per-start success scalars, failure-reason scalars, duplicate full
150
+ duration, and constant leader-success fields remain in private-R2 evidence but are suppressed from
151
+ acceptance W&B history.
152
+
153
+ `eval/acceptance/pass` is per-checkpoint history. W&B summarizes that history with `max`, so the
154
+ summary means that some checkpoint passed; it is not the run verdict. The authoritative verdict is
155
+ the create-only private-R2 `PromotionReceipt`, whose selected result is hash-bound to the complete
156
+ acceptance evidence. At terminal publication, that receipt restamps `gradlab/goal/outcome`, the diagnostic
157
+ `leader/checkpoint/*` fields, and the accepted W&B projection. Later rejected checkpoint projections
158
+ remain in history and never modify the active projection. Raw acceptance aggregates and episode
159
+ evidence remain authoritative in private eval R2.
160
+
161
+ ## Delivery, backpressure, and recovery
162
+
163
+ Every event has a stable content-derived event ID. Delivery to W&B is at least once; the durable
164
+ `orchestration/event_seq` is also W&B's internal step, so replay after an interrupted local
165
+ acknowledgement cannot append a second scientific point. Reports and summary projection retain the
166
+ event ID for explicit deduplication. Promotion, terminal state, and early-stop authority are exactly
167
+ once through conditional private-R2 receipts.
168
+
169
+ The supervisor seals immutable metric-journal segments to private R2 every five seconds or 1,000
170
+ events and batches pending frames to W&B. A retry reconstructs its local SQLite state from those
171
+ segments before producing new events. It resumes the same W&B run with `resume="must"`.
172
+
173
+ Backpressure is sampled every 15 seconds. The supervisor reports queue depth, oldest unpublished
174
+ age, ingress and publish rates, observed publication-capacity ratio, local/R2/W&B high-water marks,
175
+ remote-visible W&B lag, checkpoint backlog, pending evals, scratch utilization, accepted-result to
176
+ stop latency, and post-learner idle-GPU tail. Publication capacity is healthy only when measured
177
+ publish capacity is at least twice peak ingress.
178
+
179
+ Unpublished W&B age warns at 45 seconds and is unhealthy at 60 seconds. Terminal W&B drain has a
180
+ 300-second deadline. If neither W&B nor private R2 can preserve pending metrics, or task scratch
181
+ usage reaches 80%, the supervisor requests a safe learner stop and emits a resumable failure rather
182
+ than discarding evidence.
183
+
184
+ A logical run succeeds only when its private-R2 `TerminalReceipt` proves complete checkpoint and
185
+ evaluation inventories, a promotion, the W&B high-water mark, and a complete drain. dstack process
186
+ exit alone is never scientific success.
187
+
188
+ ## Registry
189
+
190
+ <!-- METRIC_REGISTRY_START -->
191
+ | Metric or template | Meaning | Unit | Cadence | Surface |
192
+ |---|---|---|---|---|
193
+ | `train/episode/return/shaped/mean` | Rolling mean shaped return over the latest 100 genuine completed training episodes across target and archive origins; a archive-origin return starts at restoration, and control boundaries are excluded. | scalar | rollout | history |
194
+ | `train/episode/length/mean` | Rolling mean length over the latest 100 completed training episodes. | steps | rollout | history |
195
+ | `train/outcome/terminal/count` | Cumulative terminal episode records. | episodes | rollout | history |
196
+ | `train/outcome/reason/{reason}/count` | Cumulative failed episodes containing a reason. | episodes | rollout | history |
197
+ | `train/outcome/reason/{reason}/rate/window_100` | Failure-reason incidence over the latest 100 terminal episodes. | fraction | rollout | history |
198
+ | `train/outcome/success/from/{start}/count` | Cumulative successful genuine target-origin episodes from a start; archive-origin episodes are excluded. | episodes | rollout | history |
199
+ | `train/outcome/success/from/{start}/attempts` | Cumulative genuine target-origin episode attempts from a start; archive-origin episodes are excluded. | episodes | rollout | history |
200
+ | `train/outcome/success/from/{start}/rate/window_100` | Success rate over the latest 100 genuine target-origin attempts from a start. | fraction | rollout | history |
201
+ | `train/outcome/success/current/rate/min` | Minimum cumulative target-origin success rate across observed starts. | fraction | rollout | history |
202
+ | `train/outcome/success/current/rate/mean` | Mean cumulative target-origin success rate across observed starts. | fraction | rollout | history |
203
+ | `train/outcome/success/window_100/rate/min` | Minimum target-origin window-100 success rate after every start has 100 genuine target-origin attempts. | fraction | rollout | history |
204
+ | `train/outcome/success/window_100/rate/mean` | Mean target-origin window-100 success rate after every start has 100 genuine target-origin attempts. | fraction | rollout | history |
205
+ | `train/outcome/success/start_coverage/rate` | Configured starts with a genuine target-origin attempt divided by configured starts. | fraction | rollout | history |
206
+ | `train/early_stop/{condition}/value` | Current finite value consumed by a configured metric early-stop condition. | scalar | watched metric sample | history |
207
+ | `train/early_stop/{condition}/best` | Best value retained by a configured metric early-stop condition. | scalar | watched metric sample | history |
208
+ | `train/early_stop/{condition}/patience/elapsed_steps` | Policy steps elapsed in the condition's current patience interval. | steps | watched metric sample | history |
209
+ | `train/early_stop/{condition}/patience/progress` | Condition patience progress capped at one; one means the condition would trigger. | fraction | watched metric sample | history |
210
+ | `train/early_stop/{condition}/would_trigger` | Whether the configured condition would trigger at this sample, regardless of observe or stop action. | boolean | watched metric sample | history |
211
+ | `train/reward/shaped/mean` | Distribution of learner-facing per-step reward after gradlab applies the task reward scale and then clipping. | scalar | rollout | history |
212
+ | `train/reward/shaped/std` | Distribution of learner-facing per-step reward after gradlab applies the task reward scale and then clipping. | scalar | rollout | history |
213
+ | `train/reward/shaped/min` | Distribution of learner-facing per-step reward after gradlab applies the task reward scale and then clipping. | scalar | rollout | history |
214
+ | `train/reward/shaped/max` | Distribution of learner-facing per-step reward after gradlab applies the task reward scale and then clipping. | scalar | rollout | history |
215
+ | `train/reward/shaped/nonzero_rate` | Distribution of learner-facing per-step reward after gradlab applies the task reward scale and then clipping. | scalar | rollout | history |
216
+ | `train/reward/raw/mean` | Distribution of completed task reward immediately before gradlab-owned scaling and clipping, emitted when distinct from shaped reward. For an identity task this is the untransformed provider reward. | scalar | rollout | history |
217
+ | `train/reward/raw/std` | Distribution of completed task reward immediately before gradlab-owned scaling and clipping, emitted when distinct from shaped reward. For an identity task this is the untransformed provider reward. | scalar | rollout | history |
218
+ | `train/reward/component/{component}/mean` | Active reward-component attribution in pre-transform task-reward units. | scalar | rollout | history |
219
+ | `train/reward/component/{component}/nonzero_rate` | Active reward-component attribution in pre-transform task-reward units. | scalar | rollout | history |
220
+ | `train/reward/component/{component}/share` | Absolute contribution share computed from components in pre-transform task-reward units. | scalar | rollout | history |
221
+ | `train/reward/signal/{signal}/mean` | Configured reward-source signal. | scalar | rollout | history |
222
+ | `train/reward/signal/{signal}/max` | Configured reward-source signal. | scalar | rollout | history |
223
+ | `train/reward/signal/{signal}/nonzero_rate` | Configured reward-source signal. | scalar | rollout | history |
224
+ | `train/algorithm/ppo/update/approx_kl` | Approximate KL divergence for the PPO update. | scalar | rollout | history |
225
+ | `train/algorithm/ppo/update/clip_fraction` | Fraction of policy ratios clipped by PPO. | scalar | rollout | history |
226
+ | `train/algorithm/jerk/retained/count` | Distinct action sequences retained by JERK search. | sequences | rollout | history |
227
+ | `train/algorithm/jerk/best/return_mean` | Mean observed return of JERK's highest-ranked retained sequence. | return | rollout | history |
228
+ | `train/algorithm/jerk/best/sequence_length` | Action length of JERK's highest-ranked retained sequence. | steps | rollout | history |
229
+ | `train/algorithm/jerk/archive/selected_prefix_return_mean` | Cumulative mean retained-prefix return selected for JERK archive replay. | return | rollout | history |
230
+ | `train/algorithm/jerk/exploit/probability` | Probability that JERK starts an episode by sampling a retained archive sequence. | fraction | rollout | history |
231
+ | `train/algorithm/go_explore/archive/cell_count` | Semantic cells currently retained by Go-Explore. | cells | interval | history |
232
+ | `train/algorithm/go_explore/archive/entry_count` | Immutable entries in the ephemeral working archive, including replacements not yet removed by periodic compaction. | entries | interval | history |
233
+ | `train/algorithm/go_explore/archive/blob_count` | Distinct content-addressed provider-state blobs retained by the search. | blobs | interval | history |
234
+ | `train/algorithm/go_explore/archive/blob_bytes` | Uncompressed bytes in distinct retained provider-state blobs. | bytes | interval | history |
235
+ | `train/algorithm/go_explore/archive/selection_count` | Cumulative archived-cell selections for restoration. | selections | interval | history |
236
+ | `train/algorithm/go_explore/archive/visit_count` | Cumulative semantic cell visits. | visits | interval | history |
237
+ | `train/algorithm/go_explore/archive/update_count` | Cumulative replacements of an existing cell by a better trajectory. | updates | interval | history |
238
+ | `train/algorithm/go_explore/archive/recent_new_cell_rate` | New semantic cells divided by visits in the bounded recent visit window. | fraction | interval | history |
239
+ | `train/algorithm/go_explore/archive/recent_visit_window` | Visit count represented by the recent new-cell-rate window. | visits | interval | history |
240
+ | `train/algorithm/go_explore/archive/visits_per_cell` | Cumulative visits divided by current cell count. | ratio | interval | history |
241
+ | `train/algorithm/go_explore/success_guided/cell_count` | Cells on the current best-success lineage. | cells | interval | history |
242
+ | `train/algorithm/go_explore/success_guided/selection_count` | Cumulative selections made by success-lineage guidance. | selections | interval | history |
243
+ | `train/algorithm/go_explore/best/progress` | Greatest task progress reached by the best retained trajectory. | progress | interval | history |
244
+ | `train/algorithm/go_explore/best/return` | Shaped return of the best retained trajectory. | return | interval | history |
245
+ | `train/algorithm/go_explore/best/program_steps` | Environment steps in the best retained JERK program. | steps | interval | history |
246
+ | `train/algorithm/go_explore/best/program_runs` | Canonical action runs in the best retained JERK program. | runs | interval | history |
247
+ | `train/algorithm/go_explore/best/completed` | Whether the best retained trajectory completed the task. | boolean | interval | history |
248
+ | `train/algorithm/go_explore/best/improvement_count` | Successful-trajectory improvements after the first completion. | improvements | interval | history |
249
+ | `train/algorithm/{algorithm}/value/explained_variance` | Actor-critic value-function explained variance. | scalar | rollout | history |
250
+ | `train/algorithm/{algorithm}/update/policy_gradient_loss` | Actor-critic policy-gradient loss. | scalar | rollout | history |
251
+ | `train/algorithm/{algorithm}/update/value_loss` | Actor-critic value loss. | scalar | rollout | history |
252
+ | `train/algorithm/{algorithm}/update/learning_rate` | Current actor-critic learning rate. | scalar | rollout | history |
253
+ | `train/algorithm/{algorithm}/policy/entropy` | Positive actor-critic policy entropy. | scalar | rollout | history |
254
+ | `train/algorithm/{algorithm}/policy/distribution_std` | Continuous-action distribution standard deviation. | scalar | rollout | history |
255
+ | `train/algorithm/{algorithm}/policy/dominant_action_rate` | Fraction assigned to the most frequent sampled discrete action. | scalar | rollout | history |
256
+ | `train/algorithm/{algorithm}/policy/action_hist` | Sampled discrete-action histogram. | histogram | every 64 rollouts | history |
257
+ | `train/algorithm/{algorithm}/rollout/value_prediction/mean` | Rollout value-prediction distribution diagnostic. | scalar | rollout | history |
258
+ | `train/algorithm/{algorithm}/rollout/value_prediction/std` | Rollout value-prediction distribution diagnostic. | scalar | rollout | history |
259
+ | `train/algorithm/{algorithm}/rollout/value_prediction/min` | Rollout value-prediction distribution diagnostic. | scalar | rollout | history |
260
+ | `train/algorithm/{algorithm}/rollout/value_prediction/max` | Rollout value-prediction distribution diagnostic. | scalar | rollout | history |
261
+ | `train/algorithm/{algorithm}/rollout/value_prediction/hist` | Rollout value-prediction histogram. | histogram | every 64 rollouts | history |
262
+ | `train/algorithm/{algorithm}/rollout/advantage/mean` | Rollout advantage distribution diagnostic. | scalar | rollout | history |
263
+ | `train/algorithm/{algorithm}/rollout/advantage/std` | Rollout advantage distribution diagnostic. | scalar | rollout | history |
264
+ | `train/algorithm/{algorithm}/rollout/advantage/min` | Rollout advantage distribution diagnostic. | scalar | rollout | history |
265
+ | `train/algorithm/{algorithm}/rollout/advantage/max` | Rollout advantage distribution diagnostic. | scalar | rollout | history |
266
+ | `train/algorithm/{algorithm}/rollout/advantage/hist` | Rollout advantage histogram. | histogram | every 64 rollouts | history |
267
+ | `train/algorithm/{algorithm}/hyperparameter/entropy_coefficient` | Current scheduled entropy coefficient. | scalar | rollout | history |
268
+ | `train/throughput/loop_fps` | Policy transitions divided by rollout-start-to-next-rollout-start wall time. | steps/second | rollout | history |
269
+ | `train/throughput/rollout_fps` | Policy transitions divided by rollout-collection wall time. | steps/second | rollout | history |
270
+ | `train/throughput/env_step_fps` | Policy transitions divided by native-provider step wall time accumulated during the rollout. | steps/second | rollout | history |
271
+ | `train/throughput/rollout_seconds` | Wall time spent collecting one rollout. | seconds | rollout | history |
272
+ | `train/throughput/env_step_seconds` | Native-provider step wall time accumulated while collecting one rollout. | seconds | rollout | history |
273
+ | `train/throughput/rollout_overhead_seconds` | Rollout wall time outside native-provider step calls, including policy inference and wrapper, buffer, reset, task, and callback work. | seconds | rollout | history |
274
+ | `train/throughput/between_rollouts_seconds` | Wall time after rollout collection and before the next rollout, including optimizer updates, callbacks, and logging. | seconds | rollout | history |
275
+ | `train/artifact/save/seconds` | Local model save duration. | seconds | artifact | history |
276
+ | `train/artifact/upload/seconds` | Public R2 checkpoint publication duration. | seconds | artifact | history |
277
+ | `eval/{protocol}/episode/return/mean` | Evaluation episode-return distribution accumulated from learner-facing rewards after gradlab-owned scaling and clipping. | return | evaluation | history |
278
+ | `eval/{protocol}/episode/return/std` | Evaluation episode-return distribution accumulated from learner-facing rewards after gradlab-owned scaling and clipping. | return | evaluation | history |
279
+ | `eval/{protocol}/episode/return/median` | Evaluation episode-return distribution accumulated from learner-facing rewards after gradlab-owned scaling and clipping. | return | evaluation | history |
280
+ | `eval/full/episode/return/best` | Best full-evaluation episode return accumulated after gradlab-owned scaling and clipping. | return | evaluation | history |
281
+ | `eval/{protocol}/episode/length/mean` | Mean evaluation episode length. | steps | evaluation | history |
282
+ | `eval/{protocol}/episode/count` | Evaluation episodes represented. | episodes | evaluation | history |
283
+ | `eval/{protocol}/outcome/success/from/{start}/rate` | Evaluation success rate from a start. | fraction | evaluation | history |
284
+ | `eval/{protocol}/outcome/success/rate/min` | Aggregate per-start evaluation success rate. | fraction | evaluation | history |
285
+ | `eval/{protocol}/outcome/success/rate/mean` | Aggregate per-start evaluation success rate. | fraction | evaluation | history |
286
+ | `eval/{protocol}/outcome/reason/{reason}/rate` | Evaluation failure-reason incidence. | fraction | evaluation | history |
287
+ | `eval/full/progress/{progress}/mean` | Goal-configured full-evaluation progress summary. | value | evaluation | history |
288
+ | `eval/full/progress/{progress}/max` | Goal-configured full-evaluation progress summary. | value | evaluation | history |
289
+ | `eval/{protocol}/checkpoint/artifact` | Evaluated checkpoint artifact reference. | metadata | evaluation | history |
290
+ | `eval/{protocol}/duration/seconds` | Evaluation wall duration. | seconds | evaluation | history |
291
+ | `eval/{protocol}/source` | Evaluation execution source. | text | evaluation | history |
292
+ | `eval/acceptance/pass` | Per-checkpoint acceptance result; W&B summarizes its history with max, not as the verdict. | boolean | acceptance evaluation | history |
293
+ | `eval/acceptance/episodes/planned` | Exact episode identities required by the acceptance manifest. | episodes | acceptance evaluation | history |
294
+ | `eval/acceptance/episodes/completed` | Valid planned episode rows completed before acceptance or fail-fast rejection. | episodes | acceptance evaluation | history |
295
+ | `eval/acceptance/failure/count` | Failed planned episodes; zero for acceptance and one for fail-fast rejection. | episodes | acceptance evaluation | history |
296
+ | `eval/acceptance/duration/seconds` | Acceptance-worker evaluation wall duration. | seconds | acceptance evaluation | history |
297
+ | `eval/full/by_start` | Structured full-evaluation evidence by start and reason. | table | evaluation | history |
298
+ | `leader/checkpoint/acceptance_pass` | Diagnostic projection of the promoted-checkpoint verdict; `eval_scope_exact` is authoritative. | boolean | selection | summary |
299
+ | `leader/checkpoint/success_rate_min` | Diagnostic selected-checkpoint projection. | summary | selection | summary |
300
+ | `leader/checkpoint/success_rate_mean` | Diagnostic selected-checkpoint projection. | summary | selection | summary |
301
+ | `leader/checkpoint/objective` | Diagnostic selected-checkpoint projection; never a ranking input. | summary | selection | summary |
302
+ | `leader/checkpoint/return_mean` | Diagnostic selected-checkpoint projection. | summary | selection | summary |
303
+ | `leader/checkpoint/best_return` | Diagnostic selected-checkpoint projection. | summary | selection | summary |
304
+ | `leader/checkpoint/rank_values` | Diagnostic rendering of authoritative rank values. | summary | selection | summary |
305
+ | `leader/checkpoint/progress_max` | Diagnostic selected-checkpoint projection. | summary | selection | summary |
306
+ | `leader/checkpoint/step` | Diagnostic selected-checkpoint projection. | summary | selection | summary |
307
+ | `leader/checkpoint/artifact_ref` | Diagnostic immutable artifact reference projection. | summary | selection | summary |
308
+ | `leader/checkpoint/eval_source` | Diagnostic evaluation-source projection. | summary | selection | summary |
309
+ | `leader/checkpoint/updated_at` | Diagnostic projection update time. | summary | selection | summary |
310
+ | `train/global_step` | Scientific training X-axis: policy environment transitions consumed. | steps | frame | history |
311
+ | `eval/checkpoint_step` | Scientific evaluation X-axis: step of the evaluated checkpoint. | steps | evaluation | history |
312
+ | `orchestration/event_seq` | Monotonic local outbox event sequence used as W&B delivery order. | events | frame | history |
313
+ | `orchestration/event_id` | Stable content-derived identifier used to deduplicate at-least-once delivery. | metadata | frame | history |
314
+ | `orchestration/outbox/queue_depth` | Metric outbox frames not yet acknowledged by the W&B SDK. | events | supervisor sample | history |
315
+ | `orchestration/outbox/oldest_unpublished_seconds` | Age of the oldest metric frame not yet acknowledged by the W&B SDK. | seconds | supervisor sample | history |
316
+ | `orchestration/outbox/ingress_rate` | Observed local metric-frame creation rate over the latest supervisor interval. | events/second | supervisor sample | history |
317
+ | `orchestration/outbox/publish_rate` | Observed W&B SDK acknowledgment rate over the latest supervisor interval. | events/second | supervisor sample | history |
318
+ | `orchestration/outbox/publication_capacity_ratio` | Observed W&B publication rate divided by observed metric ingress rate. | ratio | supervisor sample | history |
319
+ | `orchestration/outbox/local_high_water` | Largest metric-frame sequence durably present in local SQLite. | events | supervisor sample | history |
320
+ | `orchestration/outbox/r2_high_water` | Largest metric-frame sequence sealed in immutable private R2 journals. | events | supervisor sample | history |
321
+ | `orchestration/outbox/wandb_high_water` | Largest metric-frame sequence acknowledged by the W&B SDK. | events | supervisor sample | history |
322
+ | `orchestration/outbox/wandb_remote_high_water` | Largest orchestration event sequence observed through the W&B API. | events | remote visibility probe | history |
323
+ | `orchestration/outbox/wandb_remote_visible_lag_seconds` | Age of the newest local metric event not yet observed through the W&B API. | seconds | remote visibility probe | history |
324
+ | `orchestration/checkpoint/backlog` | Ready local checkpoints not yet verified in public model R2. | checkpoints | supervisor sample | history |
325
+ | `orchestration/eval/pending` | Persisted evaluation intents without a terminal verified result. | evaluations | supervisor sample | history |
326
+ | `orchestration/eval/result_to_stop_seconds` | Time from observing an accepted eval result to signaling the learner. | seconds | accepted evaluation | history |
327
+ | `orchestration/drain/idle_gpu_tail_seconds` | Time the training container retained its GPU after the learner exited. | seconds | terminal drain | history |
328
+ | `orchestration/scratch/used_fraction` | Fraction of the task scratch filesystem currently used. | fraction | supervisor sample | history |
329
+ | `train/episode/return/shaped/from/target/mean` | Rolling mean shaped return over the latest 100 genuine target-origin training episodes. | return | rollout | history |
330
+ | `train/curriculum/archive/cell/count` | Current archive-curriculum cell count. | cells | rollout | history |
331
+ | `train/curriculum/archive/entry/count` | Current immutable entry count retained by the curriculum view. | entries | rollout | history |
332
+ | `train/curriculum/archive/admission/candidate/count` | Non-terminal cell-crossing candidates observed during the rollout. | transitions | rollout | history |
333
+ | `train/curriculum/archive/admission/accepted/count` | Candidate entries accepted into cell reservoirs during the rollout. | entries | rollout | history |
334
+ | `train/curriculum/archive/evicted/count` | Curriculum cells evicted during the rollout. | cells | rollout | history |
335
+ | `train/curriculum/archive/capture/call/count` | Batched portable provider-state capture calls during the rollout. | calls | rollout | history |
336
+ | `train/curriculum/archive/restore/episode/count` | Archive-origin episodes started during the rollout. | episodes | rollout | history |
337
+ | `train/curriculum/archive/restore/forced_boundary/count` | Non-episode control truncations used to activate archive lanes. | boundaries | rollout | history |
338
+ | `train/curriculum/archive/feedback/trajectory/count` | Completed archive-origin trajectories committed to the priority sampler. | trajectories | rollout | history |
339
+ | `train/curriculum/archive/transition/share` | Fraction of policy transitions whose origin is the archive curriculum. | fraction | rollout | history |
340
+ | `train/curriculum/archive/sampling/probability/max` | Largest final cell probability in the archive sampler. | fraction | rollout | history |
341
+ | `train/curriculum/archive/sampling/effective_cell/count` | Inverse-Simpson effective cell count of the archive sampling distribution. | cells | rollout | history |
342
+ | `train/curriculum/archive/capture/seconds` | Portable state capture wall time accumulated during the rollout. | seconds | rollout | history |
343
+ | `train/curriculum/archive/restore/seconds` | Provider restore wall time for reset calls containing archive lanes. | seconds | rollout | history |
344
+ <!-- METRIC_REGISTRY_END -->
gradlab/__init__.py ADDED
@@ -0,0 +1,5 @@
1
+ """Generic reinforcement-learning lab for game agents."""
2
+
3
+ __all__ = ["__version__"]
4
+
5
+ __version__ = "0.1.0"