eslams-core 0.4.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 (201) hide show
  1. eslams_core-0.4.0/.github/workflows/ci.yml +27 -0
  2. eslams_core-0.4.0/.gitignore +11 -0
  3. eslams_core-0.4.0/CHANGELOG.md +202 -0
  4. eslams_core-0.4.0/CONTRIBUTING.md +32 -0
  5. eslams_core-0.4.0/LICENSE +21 -0
  6. eslams_core-0.4.0/PKG-INFO +820 -0
  7. eslams_core-0.4.0/README.md +766 -0
  8. eslams_core-0.4.0/SECURITY.md +15 -0
  9. eslams_core-0.4.0/changes_to_core.md +1277 -0
  10. eslams_core-0.4.0/docs/ARENAS.md +116 -0
  11. eslams_core-0.4.0/docs/ARTIFACTS.md +156 -0
  12. eslams_core-0.4.0/docs/PLATFORM_CONTRACTS.md +514 -0
  13. eslams_core-0.4.0/docs/PROTOCOL.md +68 -0
  14. eslams_core-0.4.0/docs/REGISTRY_AVAILABLE_MODELS.md +1711 -0
  15. eslams_core-0.4.0/eslams changes plan.md +843 -0
  16. eslams_core-0.4.0/examples/random_agent.py +16 -0
  17. eslams_core-0.4.0/fixtures/arena_sessions/golden_v0_3.json +85 -0
  18. eslams_core-0.4.0/fixtures/artifacts/local_tic_tac_toe.eslams +0 -0
  19. eslams_core-0.4.0/fixtures/artifacts/official_signed.eslams +0 -0
  20. eslams_core-0.4.0/fixtures/artifacts/official_unsigned.eslams +0 -0
  21. eslams_core-0.4.0/fixtures/artifacts/uploaded_replay_minimal.eslams +0 -0
  22. eslams_core-0.4.0/fixtures/core/golden_v0_4.json +56 -0
  23. eslams_core-0.4.0/fixtures/provider/mock_gateway_auth_failed.json +14 -0
  24. eslams_core-0.4.0/fixtures/provider/mock_missing_usage.json +14 -0
  25. eslams_core-0.4.0/fixtures/provider/mock_parse_error.json +20 -0
  26. eslams_core-0.4.0/fixtures/provider/mock_provider_error.json +14 -0
  27. eslams_core-0.4.0/fixtures/provider/mock_success.json +20 -0
  28. eslams_core-0.4.0/fixtures/provider/mock_timeout.json +14 -0
  29. eslams_core-0.4.0/fixtures/publication/battlefield_sample_bundle/aggregate_usage.json +1 -0
  30. eslams_core-0.4.0/fixtures/publication/battlefield_sample_bundle/bundle_manifest.json +1 -0
  31. eslams_core-0.4.0/fixtures/publication/battlefield_sample_bundle/checkpoint_manifest.json +1 -0
  32. eslams_core-0.4.0/fixtures/publication/battlefield_sample_bundle/leaderboard_rows.jsonl +1 -0
  33. eslams_core-0.4.0/fixtures/publication/battlefield_sample_bundle/object_manifest.json +1 -0
  34. eslams_core-0.4.0/fixtures/publication/battlefield_sample_bundle/proof_index.jsonl +1 -0
  35. eslams_core-0.4.0/fixtures/publication/battlefield_sample_bundle/provider_model_rows.jsonl +0 -0
  36. eslams_core-0.4.0/fixtures/publication/battlefield_sample_bundle/public_manifest.jsonl +1 -0
  37. eslams_core-0.4.0/fixtures/publication/battlefield_sample_bundle/public_replays/00000_local_tic_tac_toe/manifest.json +1 -0
  38. eslams_core-0.4.0/fixtures/publication/battlefield_sample_bundle/public_replays/00000_local_tic_tac_toe/public/public_manifest.json +1 -0
  39. eslams_core-0.4.0/fixtures/publication/battlefield_sample_bundle/public_replays/00000_local_tic_tac_toe/public/public_result_summary.json +1 -0
  40. eslams_core-0.4.0/fixtures/publication/battlefield_sample_bundle/public_replays/00000_local_tic_tac_toe/public_reasoning/reasoning.jsonl +5 -0
  41. eslams_core-0.4.0/fixtures/publication/battlefield_sample_bundle/public_replays/00000_local_tic_tac_toe/replay/display_frames.jsonl +6 -0
  42. eslams_core-0.4.0/fixtures/publication/battlefield_sample_bundle/public_replays/00000_local_tic_tac_toe/replay/replay_events.jsonl +6 -0
  43. eslams_core-0.4.0/fixtures/publication/battlefield_sample_bundle/public_replays/00000_local_tic_tac_toe/replay/replay_manifest.json +1 -0
  44. eslams_core-0.4.0/fixtures/publication/battlefield_sample_bundle/signature_readback_manifest.json +1 -0
  45. eslams_core-0.4.0/fixtures/publication/official_plan.json +40 -0
  46. eslams_core-0.4.0/fixtures/replay/public_tic_tac_toe.jsonl +2 -0
  47. eslams_core-0.4.0/packages/core-contracts/package.json +9 -0
  48. eslams_core-0.4.0/packages/core-contracts/src/generated/actions.ts +41 -0
  49. eslams_core-0.4.0/packages/core-contracts/src/generated/core-step.ts +79 -0
  50. eslams_core-0.4.0/packages/core-contracts/src/generated/index.ts +4 -0
  51. eslams_core-0.4.0/packages/core-contracts/src/generated/prompt.ts +21 -0
  52. eslams_core-0.4.0/packages/core-contracts/src/generated/replay.ts +22 -0
  53. eslams_core-0.4.0/packages/core-lite/package.json +12 -0
  54. eslams_core-0.4.0/packages/core-lite/src/index.ts +351 -0
  55. eslams_core-0.4.0/pyproject.toml +69 -0
  56. eslams_core-0.4.0/sample_runs/README.md +29 -0
  57. eslams_core-0.4.0/sample_runs/model_battle_sample/README.md +29 -0
  58. eslams_core-0.4.0/sample_runs/model_battle_sample/plan.json +40 -0
  59. eslams_core-0.4.0/sample_runs/model_battle_sample/publication_bundle/aggregate_usage.json +1 -0
  60. eslams_core-0.4.0/sample_runs/model_battle_sample/publication_bundle/bundle_manifest.json +1 -0
  61. eslams_core-0.4.0/sample_runs/model_battle_sample/publication_bundle/checkpoint_manifest.json +1 -0
  62. eslams_core-0.4.0/sample_runs/model_battle_sample/publication_bundle/leaderboard_rows.jsonl +1 -0
  63. eslams_core-0.4.0/sample_runs/model_battle_sample/publication_bundle/object_manifest.json +1 -0
  64. eslams_core-0.4.0/sample_runs/model_battle_sample/publication_bundle/proof_index.jsonl +1 -0
  65. eslams_core-0.4.0/sample_runs/model_battle_sample/publication_bundle/provider_model_rows.jsonl +0 -0
  66. eslams_core-0.4.0/sample_runs/model_battle_sample/publication_bundle/public_manifest.jsonl +1 -0
  67. eslams_core-0.4.0/sample_runs/model_battle_sample/publication_bundle/public_replays/00000_run_eeab67d58b994ca7/manifest.json +1 -0
  68. eslams_core-0.4.0/sample_runs/model_battle_sample/publication_bundle/public_replays/00000_run_eeab67d58b994ca7/public/public_manifest.json +1 -0
  69. eslams_core-0.4.0/sample_runs/model_battle_sample/publication_bundle/public_replays/00000_run_eeab67d58b994ca7/public/public_result_summary.json +1 -0
  70. eslams_core-0.4.0/sample_runs/model_battle_sample/publication_bundle/public_replays/00000_run_eeab67d58b994ca7/public_reasoning/reasoning.jsonl +8 -0
  71. eslams_core-0.4.0/sample_runs/model_battle_sample/publication_bundle/public_replays/00000_run_eeab67d58b994ca7/replay/display_frames.jsonl +9 -0
  72. eslams_core-0.4.0/sample_runs/model_battle_sample/publication_bundle/public_replays/00000_run_eeab67d58b994ca7/replay/replay_events.jsonl +9 -0
  73. eslams_core-0.4.0/sample_runs/model_battle_sample/publication_bundle/public_replays/00000_run_eeab67d58b994ca7/replay/replay_manifest.json +1 -0
  74. eslams_core-0.4.0/sample_runs/model_battle_sample/publication_bundle/signature_readback_manifest.json +1 -0
  75. eslams_core-0.4.0/sample_runs/model_battle_sample/run_eeab67d58b994ca7.eslams +0 -0
  76. eslams_core-0.4.0/sample_runs/model_eval_sample/README.md +31 -0
  77. eslams_core-0.4.0/sample_runs/model_eval_sample/official_signed.eslams +0 -0
  78. eslams_core-0.4.0/sample_runs/model_eval_sample/plan.json +40 -0
  79. eslams_core-0.4.0/sample_runs/model_eval_sample/publication_bundle/aggregate_usage.json +1 -0
  80. eslams_core-0.4.0/sample_runs/model_eval_sample/publication_bundle/bundle_manifest.json +1 -0
  81. eslams_core-0.4.0/sample_runs/model_eval_sample/publication_bundle/checkpoint_manifest.json +1 -0
  82. eslams_core-0.4.0/sample_runs/model_eval_sample/publication_bundle/leaderboard_rows.jsonl +1 -0
  83. eslams_core-0.4.0/sample_runs/model_eval_sample/publication_bundle/object_manifest.json +1 -0
  84. eslams_core-0.4.0/sample_runs/model_eval_sample/publication_bundle/proof_index.jsonl +1 -0
  85. eslams_core-0.4.0/sample_runs/model_eval_sample/publication_bundle/provider_model_rows.jsonl +0 -0
  86. eslams_core-0.4.0/sample_runs/model_eval_sample/publication_bundle/public_manifest.jsonl +1 -0
  87. eslams_core-0.4.0/sample_runs/model_eval_sample/publication_bundle/public_replays/00000_official_signed/manifest.json +1 -0
  88. eslams_core-0.4.0/sample_runs/model_eval_sample/publication_bundle/public_replays/00000_official_signed/public/public_manifest.json +1 -0
  89. eslams_core-0.4.0/sample_runs/model_eval_sample/publication_bundle/public_replays/00000_official_signed/public/public_result_summary.json +1 -0
  90. eslams_core-0.4.0/sample_runs/model_eval_sample/publication_bundle/public_replays/00000_official_signed/public_reasoning/reasoning.jsonl +5 -0
  91. eslams_core-0.4.0/sample_runs/model_eval_sample/publication_bundle/public_replays/00000_official_signed/replay/display_frames.jsonl +6 -0
  92. eslams_core-0.4.0/sample_runs/model_eval_sample/publication_bundle/public_replays/00000_official_signed/replay/replay_events.jsonl +6 -0
  93. eslams_core-0.4.0/sample_runs/model_eval_sample/publication_bundle/public_replays/00000_official_signed/replay/replay_manifest.json +1 -0
  94. eslams_core-0.4.0/sample_runs/model_eval_sample/publication_bundle/signature_readback_manifest.json +1 -0
  95. eslams_core-0.4.0/scripts/update_provider_registry.py +334 -0
  96. eslams_core-0.4.0/src/eslams/__init__.py +52 -0
  97. eslams_core-0.4.0/src/eslams/action_descriptors.py +404 -0
  98. eslams_core-0.4.0/src/eslams/agent/__init__.py +5 -0
  99. eslams_core-0.4.0/src/eslams/agent/server.py +54 -0
  100. eslams_core-0.4.0/src/eslams/agents.py +979 -0
  101. eslams_core-0.4.0/src/eslams/arena.py +72 -0
  102. eslams_core-0.4.0/src/eslams/arena_transport.py +842 -0
  103. eslams_core-0.4.0/src/eslams/arenas/__init__.py +163 -0
  104. eslams_core-0.4.0/src/eslams/arenas/advanced_cards.py +927 -0
  105. eslams_core-0.4.0/src/eslams/arenas/backgammon.py +279 -0
  106. eslams_core-0.4.0/src/eslams/arenas/battleship.py +163 -0
  107. eslams_core-0.4.0/src/eslams/arenas/checkers.py +270 -0
  108. eslams_core-0.4.0/src/eslams/arenas/chess.py +240 -0
  109. eslams_core-0.4.0/src/eslams/arenas/classic_cards.py +577 -0
  110. eslams_core-0.4.0/src/eslams/arenas/connect_four.py +121 -0
  111. eslams_core-0.4.0/src/eslams/arenas/control_arcade.py +911 -0
  112. eslams_core-0.4.0/src/eslams/arenas/east_asian_board.py +952 -0
  113. eslams_core-0.4.0/src/eslams/arenas/gomoku.py +154 -0
  114. eslams_core-0.4.0/src/eslams/arenas/gridworld.py +371 -0
  115. eslams_core-0.4.0/src/eslams/arenas/hex.py +163 -0
  116. eslams_core-0.4.0/src/eslams/arenas/mancala.py +182 -0
  117. eslams_core-0.4.0/src/eslams/arenas/matrix_games.py +241 -0
  118. eslams_core-0.4.0/src/eslams/arenas/modern_control.py +532 -0
  119. eslams_core-0.4.0/src/eslams/arenas/nine_mens_morris.py +271 -0
  120. eslams_core-0.4.0/src/eslams/arenas/othello.py +213 -0
  121. eslams_core-0.4.0/src/eslams/arenas/pentago.py +175 -0
  122. eslams_core-0.4.0/src/eslams/arenas/poker.py +498 -0
  123. eslams_core-0.4.0/src/eslams/arenas/strategic_games.py +836 -0
  124. eslams_core-0.4.0/src/eslams/arenas/tic_tac_toe.py +100 -0
  125. eslams_core-0.4.0/src/eslams/arenas/tile_card_games.py +760 -0
  126. eslams_core-0.4.0/src/eslams/arenas/ultimate_tic_tac_toe.py +201 -0
  127. eslams_core-0.4.0/src/eslams/artifacts.py +1825 -0
  128. eslams_core-0.4.0/src/eslams/bench.py +161 -0
  129. eslams_core-0.4.0/src/eslams/catalogue.py +179 -0
  130. eslams_core-0.4.0/src/eslams/cli.py +977 -0
  131. eslams_core-0.4.0/src/eslams/contracts/__init__.py +85 -0
  132. eslams_core-0.4.0/src/eslams/contracts/artifact.py +238 -0
  133. eslams_core-0.4.0/src/eslams/contracts/catalogue.py +118 -0
  134. eslams_core-0.4.0/src/eslams/contracts/eval_plan.py +113 -0
  135. eslams_core-0.4.0/src/eslams/contracts/json_schema.py +920 -0
  136. eslams_core-0.4.0/src/eslams/contracts/provider.py +127 -0
  137. eslams_core-0.4.0/src/eslams/contracts/publication.py +76 -0
  138. eslams_core-0.4.0/src/eslams/contracts/replay.py +160 -0
  139. eslams_core-0.4.0/src/eslams/contracts/runner_job.py +187 -0
  140. eslams_core-0.4.0/src/eslams/contracts/safety.py +74 -0
  141. eslams_core-0.4.0/src/eslams/contracts/security.py +157 -0
  142. eslams_core-0.4.0/src/eslams/contracts/versions.py +79 -0
  143. eslams_core-0.4.0/src/eslams/core_contract.py +680 -0
  144. eslams_core-0.4.0/src/eslams/eval_runtime.py +170 -0
  145. eslams_core-0.4.0/src/eslams/events.py +145 -0
  146. eslams_core-0.4.0/src/eslams/fixtures.py +102 -0
  147. eslams_core-0.4.0/src/eslams/golden.py +80 -0
  148. eslams_core-0.4.0/src/eslams/hashing.py +73 -0
  149. eslams_core-0.4.0/src/eslams/model_actions.py +215 -0
  150. eslams_core-0.4.0/src/eslams/observation_budgets.py +72 -0
  151. eslams_core-0.4.0/src/eslams/official.py +119 -0
  152. eslams_core-0.4.0/src/eslams/planning.py +155 -0
  153. eslams_core-0.4.0/src/eslams/policy.py +50 -0
  154. eslams_core-0.4.0/src/eslams/protocol.py +240 -0
  155. eslams_core-0.4.0/src/eslams/provider_preflight.py +64 -0
  156. eslams_core-0.4.0/src/eslams/providers/__init__.py +6 -0
  157. eslams_core-0.4.0/src/eslams/providers/anthropic.py +5 -0
  158. eslams_core-0.4.0/src/eslams/providers/capabilities.py +350 -0
  159. eslams_core-0.4.0/src/eslams/providers/data/models.generated.json +220111 -0
  160. eslams_core-0.4.0/src/eslams/providers/data/overrides.json +54 -0
  161. eslams_core-0.4.0/src/eslams/providers/google.py +5 -0
  162. eslams_core-0.4.0/src/eslams/providers/openai.py +5 -0
  163. eslams_core-0.4.0/src/eslams/providers/registry.py +225 -0
  164. eslams_core-0.4.0/src/eslams/public_catalogue.py +267 -0
  165. eslams_core-0.4.0/src/eslams/public_replay.py +241 -0
  166. eslams_core-0.4.0/src/eslams/publication_export.py +470 -0
  167. eslams_core-0.4.0/src/eslams/rendering.py +137 -0
  168. eslams_core-0.4.0/src/eslams/replay.py +633 -0
  169. eslams_core-0.4.0/src/eslams/replay_projection.py +171 -0
  170. eslams_core-0.4.0/src/eslams/runner.py +817 -0
  171. eslams_core-0.4.0/src/eslams/runner_health.py +70 -0
  172. eslams_core-0.4.0/src/eslams/runner_result.py +58 -0
  173. eslams_core-0.4.0/src/eslams/runner_server.py +107 -0
  174. eslams_core-0.4.0/src/eslams/runner_session.py +142 -0
  175. eslams_core-0.4.0/src/eslams/state.py +93 -0
  176. eslams_core-0.4.0/src/eslams_core/__init__.py +3 -0
  177. eslams_core-0.4.0/src/eslams_core/bench.py +8 -0
  178. eslams_core-0.4.0/tests/test_advanced_card_arenas.py +141 -0
  179. eslams_core-0.4.0/tests/test_arena_transport.py +305 -0
  180. eslams_core-0.4.0/tests/test_board_arenas.py +67 -0
  181. eslams_core-0.4.0/tests/test_catalogue_and_planning.py +286 -0
  182. eslams_core-0.4.0/tests/test_chess_observation.py +75 -0
  183. eslams_core-0.4.0/tests/test_classic_card_arenas.py +121 -0
  184. eslams_core-0.4.0/tests/test_contract_artifact_profiles.py +482 -0
  185. eslams_core-0.4.0/tests/test_control_arcade_arenas.py +146 -0
  186. eslams_core-0.4.0/tests/test_core_contract_v04.py +203 -0
  187. eslams_core-0.4.0/tests/test_environment_arenas.py +93 -0
  188. eslams_core-0.4.0/tests/test_expanded_arenas.py +134 -0
  189. eslams_core-0.4.0/tests/test_final_catalog_arenas.py +134 -0
  190. eslams_core-0.4.0/tests/test_fixtures.py +116 -0
  191. eslams_core-0.4.0/tests/test_model_agents.py +476 -0
  192. eslams_core-0.4.0/tests/test_modern_control_and_backgammon.py +150 -0
  193. eslams_core-0.4.0/tests/test_official_merge.py +35 -0
  194. eslams_core-0.4.0/tests/test_poker_and_morris_arenas.py +114 -0
  195. eslams_core-0.4.0/tests/test_protocol.py +27 -0
  196. eslams_core-0.4.0/tests/test_provider_registry.py +104 -0
  197. eslams_core-0.4.0/tests/test_publication_export.py +130 -0
  198. eslams_core-0.4.0/tests/test_runner_artifact.py +621 -0
  199. eslams_core-0.4.0/tests/test_runner_contracts.py +190 -0
  200. eslams_core-0.4.0/tests/test_state.py +30 -0
  201. eslams_core-0.4.0/tests/test_strategic_arenas.py +102 -0
@@ -0,0 +1,27 @@
1
+ name: Core CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+
8
+ jobs:
9
+ test:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ - uses: actions/setup-python@v5
14
+ with:
15
+ python-version: "3.12"
16
+ - name: Install
17
+ run: python -m pip install -e ".[dev]"
18
+ - name: Test
19
+ run: pytest
20
+ - name: Schema export smoke
21
+ run: eslams schemas export --out /tmp/eslams-schemas
22
+ - name: Core benchmark smoke
23
+ run: python -m eslams_core.bench arena-step --games tic-tac-toe --iterations 10 --json /tmp/core-step-bench.json
24
+ - name: Ruff
25
+ run: ruff check .
26
+ - name: Mypy
27
+ run: mypy src
@@ -0,0 +1,11 @@
1
+ .venv/
2
+ __pycache__/
3
+ .pytest_cache/
4
+ .mypy_cache/
5
+ .ruff_cache/
6
+ build/
7
+ dist/
8
+ out/
9
+ *.egg-info/
10
+ runs/
11
+ .DS_Store
@@ -0,0 +1,202 @@
1
+ # Changelog
2
+
3
+ ## v0.4.0 - 2026-06-11
4
+
5
+ ### Added
6
+
7
+ - Added Core step contract v2 with deterministic `coreStep` request/response
8
+ semantics, canonical state/action/legal-action/observation hashes, compact
9
+ legal-action views, replay events, terminal summaries, and per-stage timings.
10
+ - Added compact observation and prompt package generation with stable prefix
11
+ blocks, per-turn dynamic blocks, action output JSON schemas, prompt hashes,
12
+ and approximate token estimates.
13
+ - Added shared model-action parsing with invalid-action taxonomy, corrective
14
+ retry prompts, `action_id` support, and streaming `action_ready` detection.
15
+ - Added persistent runner-session support with hot in-memory state,
16
+ create/step/snapshot/ping/close APIs, and FastAPI route wiring for runner
17
+ containers.
18
+ - Added `python -m eslams_core.bench arena-step ...` and `eslams bench
19
+ arena-step` benchmark harnesses for Core step timings and payload sizes.
20
+ - Added observation budget reports, golden Core fixture generation, engine
21
+ capability metadata, and speculative-precompute eligibility metadata.
22
+ - Added production-fail-closed seed derivation and runner request signing
23
+ helpers.
24
+ - Added Platform TypeScript contract artifacts under `packages/core-contracts`
25
+ and a gated `@eslams/core-lite` TypeScript package for tic-tac-toe and
26
+ connect-four parity work.
27
+
28
+ ### Changed
29
+
30
+ - Bumped Core package/version metadata to `0.4.0`, runner defaults to
31
+ `eslams-runner:0.4.0`, and schema bundle metadata to
32
+ `eslams-schema-bundle-v2`.
33
+ - Extended schema export with Core step request/response, prompt package,
34
+ replay event, runner-session, and observability schemas.
35
+ - Enriched runner health output with warm status, loaded game count, and
36
+ uptime while preserving existing hash fields.
37
+
38
+ ### Validation
39
+
40
+ - Added v0.4.0 tests for Core step v2, prompt packages, shared model-action
41
+ parsing, runner sessions, seed/signing security, budgets, golden fixtures,
42
+ schema export, generated contract artifacts, and engine capability gates.
43
+
44
+ ## v0.3.2 - 2026-06-10
45
+
46
+ ### Security
47
+
48
+ - Replaced runner artifact HMAC signatures with Ed25519 signature v2 for
49
+ official-publication trust. Legacy HMAC signatures remain readable as
50
+ `legacy_hmac` history, but they no longer satisfy official bundle validation.
51
+ - Added in-process agent timeout enforcement so local agents cannot exceed
52
+ `time_budget_ms` without a timeout marker.
53
+
54
+ ### Fixed
55
+
56
+ - Preserved `max_turns=0` as an explicit zero-turn run instead of falling back
57
+ to arena defaults.
58
+ - Fixed primary scores to track the evaluated player (`player_1`) rather than
59
+ the highest seat score.
60
+ - Fixed multi-player forfeit scoring so remaining seats keep their scores and
61
+ the forfeiting seat is isolated.
62
+
63
+ ### Changed
64
+
65
+ - Bumped Core package/version metadata to `0.3.2` and runner defaults to
66
+ `eslams-runner:0.3.2`.
67
+ - Added GitHub Actions CI for pytest, Ruff, and mypy.
68
+
69
+ ## v0.3.1 - 2026-06-10
70
+
71
+ ### Security
72
+
73
+ - Hardened `.eslams` archive validation against zip path traversal and
74
+ concurrent validation races by validating every archive member before
75
+ extracting into a unique temporary directory.
76
+
77
+ ### Fixed
78
+
79
+ - Logged Arena transition exceptions while keeping public transport failures
80
+ generic.
81
+ - Fixed Checkers multi-jump continuation, including forced-piece legal actions.
82
+ - Rejected missing explicit agents for arenas with more than two players.
83
+ - Preserved literal edge backticks when parsing fenced JSON model responses.
84
+ - Guarded malformed Backgammon move parsing and corrupt public replay JSONL rows.
85
+ - Made catalogue export skip and warn on missing metadata rows instead of
86
+ crashing.
87
+ - Generated replay HTML player panels from replay data instead of hardcoding two
88
+ player IDs.
89
+
90
+ ### Changed
91
+
92
+ - Bumped Core package/version metadata to `0.3.1` and runner defaults to
93
+ `eslams-runner:0.3.1`.
94
+
95
+ ## v0.3.0 - 2026-06-09
96
+
97
+ ### Added
98
+
99
+ - Added lightweight live Arena session APIs:
100
+ `start_session`, `step_session`, and `legal_actions_page`.
101
+ - Added public JSON schemas for Arena start results, step results, legal-action
102
+ pages, action descriptors, and live Arena events.
103
+ - Added CLI commands for live Arena transport:
104
+ `eslams arena start`, `eslams arena step`, and
105
+ `eslams arena legal-actions-page`.
106
+ - Added public-safe legal action descriptors for all 50 registered games,
107
+ including stable action tokens, labels, groups, categories, prompt labels,
108
+ and deterministic sort keys.
109
+ - Added canonical live `display_frame` projection using the same display-frame
110
+ shape as public replay packages.
111
+ - Added public-safe live Arena events for session start, action acceptance,
112
+ state application, model-turn requests, human-turn readiness, completion, and
113
+ failure cases.
114
+ - Added paged/searchable legal-action descriptor output for large action sets.
115
+ - Added all-50 Arena start/step contract tests, public-safety checks, paging
116
+ tests, failure tests, CLI tests, timing assertions, and representative golden
117
+ fixtures.
118
+
119
+ ### Changed
120
+
121
+ - Bumped Core package/version metadata to `0.3.0` and runner defaults to
122
+ `eslams-runner:0.3.0`.
123
+ - Documented the v0.3.0 Arena transport contract, server-owned
124
+ `session_state` boundary, browser-safe fields, and release/tag instructions.
125
+ - Narrowed public safety scanning so action descriptor `token` and
126
+ `prompt_label` are allowed only inside action descriptor rows.
127
+
128
+ ### Validation
129
+
130
+ - `python3 -m pytest -q`
131
+ - `python3 -m ruff check .`
132
+ - `python3 -m mypy src`
133
+
134
+ ## v0.2.0 - 2026-06-09
135
+
136
+ ### Added
137
+
138
+ - Added a versioned `eslams.contracts` package with deterministic schema export
139
+ for artifact manifests, validation summaries, replay events/manifests,
140
+ provider receipts, eval plans, progress events, resume checkpoints, official
141
+ results, publication bundles, runner jobs, and catalogue rows.
142
+ - Added deterministic `schema_bundle_manifest.json` output for
143
+ `eslams schemas export`, including Core package version, git commit when
144
+ available, schema bundle version, schema hashes, and deterministic build id.
145
+ - Added schema coverage for catalogue renderer rows, catalogue availability
146
+ rows, schema bundle manifests, and public display-frame rows.
147
+ - Added artifact validation profiles for runner bundles, official bundles,
148
+ Battlefield bundles, and public replay packages, with no-secret JSON summaries.
149
+ - Added public replay exports with actor metadata, participant metadata, state
150
+ hash status, replay completeness counters, public reasoning rows, and recursive
151
+ public-output safety scanning.
152
+ - Added `replay/display_frames.jsonl` public-safe projections and optional-file
153
+ manifest rows for public replay packages.
154
+ - Added `eslams runner result --artifact --artifact-uri --job-id` and
155
+ `eslams run --runner-result-json --artifact-uri` for canonical
156
+ `RunnerJobResult` emission.
157
+ - Added provider runtime controls for timeout, connect/read timeout, retries,
158
+ retry backoff, synchronous concurrency limits, rate limits, generic gateway
159
+ base URLs, and normalized redacted provider receipts for success and failure.
160
+ - Added provider-backed HTTP-agent status semantics:
161
+ `provider_ok`, `provider_receipt_missing`, `provider_usage_unavailable`,
162
+ `local_agent`, and `agent_error`.
163
+ - Added model and game catalogue exports with official eval, Battlefield, and
164
+ Arena eligibility, explicit absence reasons, and all-50 renderer vocabulary
165
+ metadata.
166
+ - Added Platform-aligned public game identity fields, category labels, variants,
167
+ difficulty, maturity, player counts, and model provider-control capability
168
+ metadata.
169
+ - Added deterministic official, Battlefield, and public-match planning helpers
170
+ with shard partitioning, resume checkpoint checks, and JSONL progress events.
171
+ - Added runner/container contracts, runner health output, and stateless Arena
172
+ transport helpers for all registered games.
173
+ - Added trusted interactive state rehydration with strict hash validation by
174
+ default and non-strict repair diagnostics for server-owned interactive state.
175
+ - Added publication bundle export and validation for uploaded replay,
176
+ Battlefield sample, and official proof workflows without storage/database
177
+ dependencies.
178
+ - Added deterministic fixtures for artifacts, provider receipt scenarios, public
179
+ replay JSONL, official plans, and a Battlefield sample publication bundle.
180
+
181
+ ### Changed
182
+
183
+ - Extended runner artifacts additively with public sidecars, validation summaries,
184
+ official result sidecars, metadata-only broadcast manifests, provider usage
185
+ aggregation, and scoring safety fields.
186
+ - Split validity and eligibility fields across artifacts, public summaries,
187
+ official result merges, and publication bundles so evidence rows do not imply
188
+ ranked leaderboard eligibility.
189
+ - Kept `.eslams` artifacts zip-compatible and backward-compatible while adding
190
+ Platform-facing public contracts.
191
+ - Updated docs for Platform contracts, artifact profiles, public replay packages,
192
+ provider runtime behavior, catalogue commands, publication bundles, and
193
+ release/tag instructions for `v0.2.0`.
194
+
195
+ ### Validation
196
+
197
+ - `python3 -m pytest -q`
198
+ - `python3 -m ruff check .`
199
+ - `python3 -m mypy src`
200
+ - Deterministic schema export comparison
201
+ - Publication bundle validation
202
+ - Legacy `run` -> `validate` -> `replay` CLI smoke
@@ -0,0 +1,32 @@
1
+ # Contributing
2
+
3
+ Thank you for helping build eSlams Core.
4
+
5
+ ## Development
6
+
7
+ ```bash
8
+ python -m venv .venv
9
+ . .venv/bin/activate
10
+ pip install -e ".[dev]"
11
+ pytest
12
+ ruff check .
13
+ mypy src
14
+ ```
15
+
16
+ ## Design Rules
17
+
18
+ - Keep public contracts versioned.
19
+ - Keep arena identity owned by eSlams, even when logic is adapter-backed.
20
+ - Never put hidden official eval content in the public repo.
21
+ - Preserve trace privacy boundaries at generation time, not only in UI.
22
+ - Add deterministic tests for every arena and artifact behavior.
23
+
24
+ ## Pull Requests
25
+
26
+ Include:
27
+
28
+ - a clear behavior summary
29
+ - tests for new contracts or arena behavior
30
+ - docs for protocol, artifact, or CLI changes
31
+ - changelog entries for user-visible contracts, fixtures, or CLI changes
32
+ - migration notes when public formats change
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 eSlams
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.