gameviz-hyperkit 0.1.2__tar.gz → 0.2.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 (133) hide show
  1. {gameviz_hyperkit-0.1.2/src/gameviz_hyperkit.egg-info → gameviz_hyperkit-0.2.0}/PKG-INFO +6 -4
  2. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/README.md +5 -3
  3. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/pyproject.toml +1 -1
  4. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0/src/gameviz_hyperkit.egg-info}/PKG-INFO +6 -4
  5. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/gameviz_hyperkit.egg-info/SOURCES.txt +15 -0
  6. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/__init__.py +189 -13
  7. gameviz_hyperkit-0.2.0/src/hyperkit/api_contract.py +101 -0
  8. gameviz_hyperkit-0.2.0/src/hyperkit/compatibility.py +89 -0
  9. gameviz_hyperkit-0.2.0/src/hyperkit/config.py +66 -0
  10. gameviz_hyperkit-0.2.0/src/hyperkit/deprecation.py +145 -0
  11. gameviz_hyperkit-0.2.0/src/hyperkit/environment.py +134 -0
  12. gameviz_hyperkit-0.2.0/src/hyperkit/errors.py +27 -0
  13. gameviz_hyperkit-0.2.0/src/hyperkit/lifecycle.py +92 -0
  14. gameviz_hyperkit-0.2.0/src/hyperkit/logging.py +270 -0
  15. gameviz_hyperkit-0.2.0/src/hyperkit/project_config.py +275 -0
  16. gameviz_hyperkit-0.2.0/src/hyperkit/runtime.py +307 -0
  17. gameviz_hyperkit-0.2.0/tests/test_core_api_foundation_phase70.py +107 -0
  18. gameviz_hyperkit-0.2.0/tests/test_logging_environment_phase72.py +179 -0
  19. gameviz_hyperkit-0.2.0/tests/test_phase72_completion.py +151 -0
  20. gameviz_hyperkit-0.2.0/tests/test_project_config_deprecation_phase72.py +282 -0
  21. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_public_readme_phase42.py +16 -4
  22. gameviz_hyperkit-0.2.0/tests/test_runtime_context_phase71.py +221 -0
  23. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_stable_release_readiness_phase68.py +2 -2
  24. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/LICENSE +0 -0
  25. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/setup.cfg +0 -0
  26. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/gameviz_hyperkit.egg-info/dependency_links.txt +0 -0
  27. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/gameviz_hyperkit.egg-info/entry_points.txt +0 -0
  28. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/gameviz_hyperkit.egg-info/requires.txt +0 -0
  29. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/gameviz_hyperkit.egg-info/top_level.txt +0 -0
  30. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/android.py +0 -0
  31. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/animation.py +0 -0
  32. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/app.py +0 -0
  33. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/assets.py +0 -0
  34. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/audio.py +0 -0
  35. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/audit.py +0 -0
  36. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/bounds.py +0 -0
  37. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/camera.py +0 -0
  38. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/camera_follow.py +0 -0
  39. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/cli.py +0 -0
  40. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/collision.py +0 -0
  41. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/generated_project_validation.py +0 -0
  42. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/geometry.py +0 -0
  43. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/health.py +0 -0
  44. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/input.py +0 -0
  45. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/input_actions.py +0 -0
  46. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/layout.py +0 -0
  47. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/level.py +0 -0
  48. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/object.py +0 -0
  49. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/particle.py +0 -0
  50. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/physics.py +0 -0
  51. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/progress.py +0 -0
  52. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/release.py +0 -0
  53. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/release_evidence.py +0 -0
  54. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/save.py +0 -0
  55. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/scene.py +0 -0
  56. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/score.py +0 -0
  57. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/sprite.py +0 -0
  58. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/state.py +0 -0
  59. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/template_validation.py +0 -0
  60. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/flappy_mini/README.md +0 -0
  61. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/flappy_mini/main.py +0 -0
  62. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/puzzle_game/README.md +0 -0
  63. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/puzzle_game/main.py +0 -0
  64. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/quiz_game/README.md +0 -0
  65. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/quiz_game/main.py +0 -0
  66. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/simple_physics/README.md +0 -0
  67. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/simple_physics/main.py +0 -0
  68. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/swipe_runner/README.md +0 -0
  69. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/swipe_runner/main.py +0 -0
  70. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/tap_counter/README.md +0 -0
  71. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/templates/tap_counter/main.py +0 -0
  72. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/timers.py +0 -0
  73. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/transition.py +0 -0
  74. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/src/hyperkit/ui.py +0 -0
  75. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_android.py +0 -0
  76. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_animation.py +0 -0
  77. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_assets.py +0 -0
  78. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_audio.py +0 -0
  79. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_bounds.py +0 -0
  80. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_camera.py +0 -0
  81. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_camera_follow.py +0 -0
  82. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_changelog_phase36.py +0 -0
  83. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_cli_error_messages_phase45.py +0 -0
  84. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_cli_templates.py +0 -0
  85. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_collision.py +0 -0
  86. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_examples_syntax.py +0 -0
  87. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_final_qa_certification_phase65.py +0 -0
  88. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_flappy_mini_polish_phase49.py +0 -0
  89. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_flappy_mini_runtime_qa_phase60.py +0 -0
  90. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_game_object.py +0 -0
  91. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_generated_project_smoke_phase37.py +0 -0
  92. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_generated_project_validation_phase55.py +0 -0
  93. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_health_phase38.py +0 -0
  94. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_input_actions.py +0 -0
  95. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_layout.py +0 -0
  96. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_level.py +0 -0
  97. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_particle.py +0 -0
  98. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_pre_release_audit_phase40.py +0 -0
  99. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_production_template_polish_phase47.py +0 -0
  100. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_progress.py +0 -0
  101. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_puzzle_game_polish_phase51.py +0 -0
  102. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_puzzle_game_runtime_qa_phase62.py +0 -0
  103. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_quick_start_tutorial_phase43.py +0 -0
  104. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_quiz_game_polish_phase52.py +0 -0
  105. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_quiz_game_runtime_qa_phase63.py +0 -0
  106. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_release_check_phase39.py +0 -0
  107. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_release_evidence_phase57.py +0 -0
  108. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_release_readiness_phase35.py +0 -0
  109. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_runtime_qa_tracker_phase58.py +0 -0
  110. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_score_save.py +0 -0
  111. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_simple_physics_polish_phase53.py +0 -0
  112. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_simple_physics_runtime_qa_phase64.py +0 -0
  113. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_sprite.py +0 -0
  114. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_state.py +0 -0
  115. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_swipe_runner_polish_phase50.py +0 -0
  116. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_swipe_runner_runtime_qa_phase61.py +0 -0
  117. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_tap_counter_polish_phase48.py +0 -0
  118. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_tap_counter_runtime_qa_phase59.py +0 -0
  119. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_docs_phase33.py +0 -0
  120. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_helper_upgrades_phase31.py +0 -0
  121. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_helper_upgrades_phase32.py +0 -0
  122. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_media_phase44.py +0 -0
  123. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_polish_summary_phase54.py +0 -0
  124. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_quality_phase34.py +0 -0
  125. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_runtime_readiness_phase56.py +0 -0
  126. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_upgrade.py +0 -0
  127. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_template_validation_phase46.py +0 -0
  128. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_templates_syntax.py +0 -0
  129. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_testpypi_rc_readiness_phase66.py +0 -0
  130. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_timers.py +0 -0
  131. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_touch.py +0 -0
  132. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_transition.py +0 -0
  133. {gameviz_hyperkit-0.1.2 → gameviz_hyperkit-0.2.0}/tests/test_ui.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gameviz-hyperkit
3
- Version: 0.1.2
3
+ Version: 0.2.0
4
4
  Summary: A lightweight Python SDK for 2D hypercasual and hybrid-casual mobile game prototypes.
5
5
  Author-email: "Md. Rifat Hossain Chowdhury" <rifat.gameviz@gmail.com>
6
6
  License-Expression: MIT
@@ -52,13 +52,15 @@ HyperKit is publicly available on PyPI and remains in active alpha development.
52
52
 
53
53
  Current package status:
54
54
 
55
- - Current package version: `0.1.2`
55
+ - Current package version: `0.2.0`
56
56
  - Installation command: `pip install gameviz-hyperkit`
57
57
  - Package maturity: Alpha / early SDK preview
58
58
  - API stability target: future `1.0.0`
59
59
  - Supported Python versions: Python 3.9–3.12
60
60
 
61
- HyperKit is suitable for learning, prototyping, game jams, and early 2D mobile game experiments. It is not yet intended to replace a full production game engine.
61
+ HyperKit `0.2.0` establishes the core SDK architecture, including runtime context, structured logging, project configuration, platform detection, lifecycle management, deprecation support, and a protected public API contract.
62
+
63
+ HyperKit is suitable for learning, prototyping, game jams, and early 2D mobile game development. It is not yet intended to replace a full production game engine.
62
64
 
63
65
  ---
64
66
 
@@ -472,6 +474,7 @@ Package publication is handled through the project's controlled release workflow
472
474
  - [Manual QA Result Template](docs/MANUAL_QA_RESULT_TEMPLATE.md)
473
475
  - [Release Evidence Structure](docs/RELEASE_EVIDENCE_STRUCTURE.md)
474
476
  - [Release Evidence Workspace](docs/release-evidence/README.md)
477
+ - [Roadmap to HyperKit 1.0](ROADMAP.md)
475
478
 
476
479
  ### Template Polish and Runtime Documentation
477
480
 
@@ -486,7 +489,6 @@ Package publication is handled through the project's controlled release workflow
486
489
  - [Template Runtime Readiness - Phase 56](docs/TEMPLATE_RUNTIME_READINESS_PHASE56.md)
487
490
  - [Runtime QA Tracker - Phase 58](docs/RUNTIME_QA_TRACKER_PHASE58.md)
488
491
 
489
- ---
490
492
  ---
491
493
 
492
494
  ## Current Limitations
@@ -19,13 +19,15 @@ HyperKit is publicly available on PyPI and remains in active alpha development.
19
19
 
20
20
  Current package status:
21
21
 
22
- - Current package version: `0.1.2`
22
+ - Current package version: `0.2.0`
23
23
  - Installation command: `pip install gameviz-hyperkit`
24
24
  - Package maturity: Alpha / early SDK preview
25
25
  - API stability target: future `1.0.0`
26
26
  - Supported Python versions: Python 3.9–3.12
27
27
 
28
- HyperKit is suitable for learning, prototyping, game jams, and early 2D mobile game experiments. It is not yet intended to replace a full production game engine.
28
+ HyperKit `0.2.0` establishes the core SDK architecture, including runtime context, structured logging, project configuration, platform detection, lifecycle management, deprecation support, and a protected public API contract.
29
+
30
+ HyperKit is suitable for learning, prototyping, game jams, and early 2D mobile game development. It is not yet intended to replace a full production game engine.
29
31
 
30
32
  ---
31
33
 
@@ -439,6 +441,7 @@ Package publication is handled through the project's controlled release workflow
439
441
  - [Manual QA Result Template](docs/MANUAL_QA_RESULT_TEMPLATE.md)
440
442
  - [Release Evidence Structure](docs/RELEASE_EVIDENCE_STRUCTURE.md)
441
443
  - [Release Evidence Workspace](docs/release-evidence/README.md)
444
+ - [Roadmap to HyperKit 1.0](ROADMAP.md)
442
445
 
443
446
  ### Template Polish and Runtime Documentation
444
447
 
@@ -453,7 +456,6 @@ Package publication is handled through the project's controlled release workflow
453
456
  - [Template Runtime Readiness - Phase 56](docs/TEMPLATE_RUNTIME_READINESS_PHASE56.md)
454
457
  - [Runtime QA Tracker - Phase 58](docs/RUNTIME_QA_TRACKER_PHASE58.md)
455
458
 
456
- ---
457
459
  ---
458
460
 
459
461
  ## Current Limitations
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "gameviz-hyperkit"
7
- version = "0.1.2"
7
+ version = "0.2.0"
8
8
  description = "A lightweight Python SDK for 2D hypercasual and hybrid-casual mobile game prototypes."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gameviz-hyperkit
3
- Version: 0.1.2
3
+ Version: 0.2.0
4
4
  Summary: A lightweight Python SDK for 2D hypercasual and hybrid-casual mobile game prototypes.
5
5
  Author-email: "Md. Rifat Hossain Chowdhury" <rifat.gameviz@gmail.com>
6
6
  License-Expression: MIT
@@ -52,13 +52,15 @@ HyperKit is publicly available on PyPI and remains in active alpha development.
52
52
 
53
53
  Current package status:
54
54
 
55
- - Current package version: `0.1.2`
55
+ - Current package version: `0.2.0`
56
56
  - Installation command: `pip install gameviz-hyperkit`
57
57
  - Package maturity: Alpha / early SDK preview
58
58
  - API stability target: future `1.0.0`
59
59
  - Supported Python versions: Python 3.9–3.12
60
60
 
61
- HyperKit is suitable for learning, prototyping, game jams, and early 2D mobile game experiments. It is not yet intended to replace a full production game engine.
61
+ HyperKit `0.2.0` establishes the core SDK architecture, including runtime context, structured logging, project configuration, platform detection, lifecycle management, deprecation support, and a protected public API contract.
62
+
63
+ HyperKit is suitable for learning, prototyping, game jams, and early 2D mobile game development. It is not yet intended to replace a full production game engine.
62
64
 
63
65
  ---
64
66
 
@@ -472,6 +474,7 @@ Package publication is handled through the project's controlled release workflow
472
474
  - [Manual QA Result Template](docs/MANUAL_QA_RESULT_TEMPLATE.md)
473
475
  - [Release Evidence Structure](docs/RELEASE_EVIDENCE_STRUCTURE.md)
474
476
  - [Release Evidence Workspace](docs/release-evidence/README.md)
477
+ - [Roadmap to HyperKit 1.0](ROADMAP.md)
475
478
 
476
479
  ### Template Polish and Runtime Documentation
477
480
 
@@ -486,7 +489,6 @@ Package publication is handled through the project's controlled release workflow
486
489
  - [Template Runtime Readiness - Phase 56](docs/TEMPLATE_RUNTIME_READINESS_PHASE56.md)
487
490
  - [Runtime QA Tracker - Phase 58](docs/RUNTIME_QA_TRACKER_PHASE58.md)
488
491
 
489
- ---
490
492
  ---
491
493
 
492
494
  ## Current Limitations
@@ -10,6 +10,7 @@ src/gameviz_hyperkit.egg-info/top_level.txt
10
10
  src/hyperkit/__init__.py
11
11
  src/hyperkit/android.py
12
12
  src/hyperkit/animation.py
13
+ src/hyperkit/api_contract.py
13
14
  src/hyperkit/app.py
14
15
  src/hyperkit/assets.py
15
16
  src/hyperkit/audio.py
@@ -19,6 +20,11 @@ src/hyperkit/camera.py
19
20
  src/hyperkit/camera_follow.py
20
21
  src/hyperkit/cli.py
21
22
  src/hyperkit/collision.py
23
+ src/hyperkit/compatibility.py
24
+ src/hyperkit/config.py
25
+ src/hyperkit/deprecation.py
26
+ src/hyperkit/environment.py
27
+ src/hyperkit/errors.py
22
28
  src/hyperkit/generated_project_validation.py
23
29
  src/hyperkit/geometry.py
24
30
  src/hyperkit/health.py
@@ -26,12 +32,16 @@ src/hyperkit/input.py
26
32
  src/hyperkit/input_actions.py
27
33
  src/hyperkit/layout.py
28
34
  src/hyperkit/level.py
35
+ src/hyperkit/lifecycle.py
36
+ src/hyperkit/logging.py
29
37
  src/hyperkit/object.py
30
38
  src/hyperkit/particle.py
31
39
  src/hyperkit/physics.py
32
40
  src/hyperkit/progress.py
41
+ src/hyperkit/project_config.py
33
42
  src/hyperkit/release.py
34
43
  src/hyperkit/release_evidence.py
44
+ src/hyperkit/runtime.py
35
45
  src/hyperkit/save.py
36
46
  src/hyperkit/scene.py
37
47
  src/hyperkit/score.py
@@ -64,6 +74,7 @@ tests/test_changelog_phase36.py
64
74
  tests/test_cli_error_messages_phase45.py
65
75
  tests/test_cli_templates.py
66
76
  tests/test_collision.py
77
+ tests/test_core_api_foundation_phase70.py
67
78
  tests/test_examples_syntax.py
68
79
  tests/test_final_qa_certification_phase65.py
69
80
  tests/test_flappy_mini_polish_phase49.py
@@ -75,10 +86,13 @@ tests/test_health_phase38.py
75
86
  tests/test_input_actions.py
76
87
  tests/test_layout.py
77
88
  tests/test_level.py
89
+ tests/test_logging_environment_phase72.py
78
90
  tests/test_particle.py
91
+ tests/test_phase72_completion.py
79
92
  tests/test_pre_release_audit_phase40.py
80
93
  tests/test_production_template_polish_phase47.py
81
94
  tests/test_progress.py
95
+ tests/test_project_config_deprecation_phase72.py
82
96
  tests/test_public_readme_phase42.py
83
97
  tests/test_puzzle_game_polish_phase51.py
84
98
  tests/test_puzzle_game_runtime_qa_phase62.py
@@ -88,6 +102,7 @@ tests/test_quiz_game_runtime_qa_phase63.py
88
102
  tests/test_release_check_phase39.py
89
103
  tests/test_release_evidence_phase57.py
90
104
  tests/test_release_readiness_phase35.py
105
+ tests/test_runtime_context_phase71.py
91
106
  tests/test_runtime_qa_tracker_phase58.py
92
107
  tests/test_score_save.py
93
108
  tests/test_simple_physics_polish_phase53.py
@@ -3,7 +3,38 @@
3
3
  A lightweight Python SDK for mobile-ready 2D hypercasual game prototypes.
4
4
  """
5
5
 
6
- from .collision import circle_intersects_circle, rect_intersects_rect, rect_intersects_circle
6
+ from .errors import (
7
+ HyperKitCompatibilityError,
8
+ HyperKitConfigurationError,
9
+ HyperKitError,
10
+ HyperKitRuntimeError,
11
+ HyperKitValidationError,
12
+ )
13
+
14
+ from .compatibility import (
15
+ API_VERSION,
16
+ get_api_version,
17
+ is_api_compatible,
18
+ require_api_version,
19
+ )
20
+
21
+ from .config import SDKConfig
22
+
23
+ from .runtime import (
24
+ RuntimeState,
25
+ SDKContext,
26
+ create_context,
27
+ get_default_context,
28
+ reset_default_context,
29
+ set_default_context,
30
+ )
31
+
32
+ from .collision import (
33
+ circle_intersects_circle,
34
+ rect_intersects_circle,
35
+ rect_intersects_rect,
36
+ )
37
+
7
38
  from .geometry import Circle, Rect, Vector2
8
39
  from .input import TouchEvent, TouchGesture, TouchTracker
9
40
  from .object import GameObject
@@ -14,6 +45,7 @@ from .score import ScoreManager
14
45
  from .ui import Button, TextLabel
15
46
  from .state import GameState, StateMachine
16
47
  from .layout import CanvasScaler
48
+
17
49
  from .assets import (
18
50
  AssetError,
19
51
  AssetManager,
@@ -26,6 +58,7 @@ from .assets import (
26
58
  load_json,
27
59
  load_text,
28
60
  )
61
+
29
62
  from .audio import (
30
63
  AudioError,
31
64
  AudioLoadError,
@@ -34,6 +67,7 @@ from .audio import (
34
67
  play_sound,
35
68
  stop_music,
36
69
  )
70
+
37
71
  from .animation import (
38
72
  AnimationManager,
39
73
  ColorTween,
@@ -43,19 +77,81 @@ from .animation import (
43
77
  ease_out_quad,
44
78
  linear,
45
79
  )
46
- from .sprite import SpriteAnimation, SpriteAnimationError, SpriteAnimator
47
- from .particle import Particle, ParticleConfig, ParticleEmitter
80
+
81
+ from .sprite import (
82
+ SpriteAnimation,
83
+ SpriteAnimationError,
84
+ SpriteAnimator,
85
+ )
86
+
87
+ from .particle import (
88
+ Particle,
89
+ ParticleConfig,
90
+ ParticleEmitter,
91
+ )
92
+
48
93
  from .camera import CameraShake
49
- from .transition import SceneTransition, SceneTransitionError
50
- from .timers import Cooldown, Timer, TimerError, TimerManager
51
- from .input_actions import InputActionBinding, InputActionEvent, InputActionMap
52
- from .level import LevelData, LevelError, LevelLoader, LevelManager, load_level
94
+
95
+ from .transition import (
96
+ SceneTransition,
97
+ SceneTransitionError,
98
+ )
99
+
100
+ from .timers import (
101
+ Cooldown,
102
+ Timer,
103
+ TimerError,
104
+ TimerManager,
105
+ )
106
+
107
+ from .input_actions import (
108
+ InputActionBinding,
109
+ InputActionEvent,
110
+ InputActionMap,
111
+ )
112
+
113
+ from .level import (
114
+ LevelData,
115
+ LevelError,
116
+ LevelLoader,
117
+ LevelManager,
118
+ load_level,
119
+ )
120
+
53
121
  from .camera_follow import CameraFollow
54
- from .bounds import Bounds, BoundsManager, ScreenBounds, WorldBounds
55
- from .progress import ProgressBar, ProgressBarError
56
- from .health import HealthCheck, HealthReport, format_health_report, generate_health_report
57
- from .release import ReleaseCheck, ReleaseReport, format_release_report, generate_release_report
58
- from .audit import PreReleaseAuditCheck, PreReleaseAuditReport, format_pre_release_audit_report, generate_pre_release_audit_report
122
+
123
+ from .bounds import (
124
+ Bounds,
125
+ BoundsManager,
126
+ ScreenBounds,
127
+ WorldBounds,
128
+ )
129
+
130
+ from .progress import (
131
+ ProgressBar,
132
+ ProgressBarError,
133
+ )
134
+
135
+ from .health import (
136
+ HealthCheck,
137
+ HealthReport,
138
+ format_health_report,
139
+ generate_health_report,
140
+ )
141
+
142
+ from .release import (
143
+ ReleaseCheck,
144
+ ReleaseReport,
145
+ format_release_report,
146
+ generate_release_report,
147
+ )
148
+
149
+ from .audit import (
150
+ PreReleaseAuditCheck,
151
+ PreReleaseAuditReport,
152
+ format_pre_release_audit_report,
153
+ generate_pre_release_audit_report,
154
+ )
59
155
 
60
156
  from .template_validation import (
61
157
  TemplateValidationCheck,
@@ -83,13 +179,70 @@ from .release_evidence import (
83
179
  run_release_evidence_validation,
84
180
  )
85
181
 
182
+ from .project_config import (
183
+ PROJECT_CONFIG_FILENAME,
184
+ PROJECT_CONFIG_SCHEMA_VERSION,
185
+ ProjectConfig,
186
+ find_project_config,
187
+ load_project_config,
188
+ )
189
+
190
+ from .deprecation import (
191
+ HyperKitDeprecationWarning,
192
+ build_deprecation_message,
193
+ deprecated,
194
+ warn_deprecated,
195
+ )
196
+
197
+ from .environment import (
198
+ PlatformKind,
199
+ RuntimeEnvironment,
200
+ detect_platform,
201
+ detect_runtime_environment,
202
+ )
203
+
204
+ from .logging import (
205
+ configure_logging,
206
+ get_logger,
207
+ log_event,
208
+ )
209
+
210
+ from .lifecycle import (
211
+ run_game,
212
+ start_runtime,
213
+ stop_runtime,
214
+ )
215
+
216
+ from .api_contract import (
217
+ REQUIRED_PUBLIC_API,
218
+ get_missing_public_api,
219
+ validate_public_api,
220
+ )
221
+
86
222
 
87
223
  try: # Kivy may not be available in headless test environments.
88
224
  from .app import Game
89
225
  except Exception: # pragma: no cover
90
226
  Game = None # type: ignore
91
227
 
228
+
92
229
  __all__ = [
230
+ "API_VERSION",
231
+ "SDKConfig",
232
+ "RuntimeState",
233
+ "SDKContext",
234
+ "create_context",
235
+ "get_default_context",
236
+ "set_default_context",
237
+ "reset_default_context",
238
+ "HyperKitError",
239
+ "HyperKitConfigurationError",
240
+ "HyperKitCompatibilityError",
241
+ "HyperKitRuntimeError",
242
+ "HyperKitValidationError",
243
+ "get_api_version",
244
+ "is_api_compatible",
245
+ "require_api_version",
93
246
  "Button",
94
247
  "TextLabel",
95
248
  "Circle",
@@ -192,6 +345,29 @@ __all__ = [
192
345
  "format_release_evidence_report",
193
346
  "generate_release_evidence_report",
194
347
  "run_release_evidence_validation",
348
+ "PROJECT_CONFIG_FILENAME",
349
+ "PROJECT_CONFIG_SCHEMA_VERSION",
350
+ "ProjectConfig",
351
+ "find_project_config",
352
+ "load_project_config",
353
+ "HyperKitDeprecationWarning",
354
+ "build_deprecation_message",
355
+ "deprecated",
356
+ "warn_deprecated",
357
+ "PlatformKind",
358
+ "RuntimeEnvironment",
359
+ "detect_platform",
360
+ "detect_runtime_environment",
361
+ "configure_logging",
362
+ "get_logger",
363
+ "log_event",
364
+ "start_runtime",
365
+ "stop_runtime",
366
+ "run_game",
367
+ "REQUIRED_PUBLIC_API",
368
+ "get_missing_public_api",
369
+ "validate_public_api",
195
370
  ]
196
371
 
197
- __version__ = "0.1.2"
372
+
373
+ __version__ = "0.2.0"
@@ -0,0 +1,101 @@
1
+ """Public API contract for GameViz HyperKit."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Mapping
6
+ from typing import Optional
7
+
8
+ from .errors import HyperKitCompatibilityError
9
+
10
+
11
+ REQUIRED_PUBLIC_API = frozenset(
12
+ {
13
+ # Existing core game API
14
+ "Game",
15
+ "GameObject",
16
+ "Scene",
17
+ "SaveManager",
18
+ "ScoreManager",
19
+
20
+ # Phase 70
21
+ "API_VERSION",
22
+ "SDKConfig",
23
+ "HyperKitError",
24
+ "HyperKitConfigurationError",
25
+ "HyperKitCompatibilityError",
26
+ "HyperKitRuntimeError",
27
+ "HyperKitValidationError",
28
+ "get_api_version",
29
+ "is_api_compatible",
30
+ "require_api_version",
31
+
32
+ # Phase 71
33
+ "RuntimeState",
34
+ "SDKContext",
35
+ "create_context",
36
+ "get_default_context",
37
+ "set_default_context",
38
+ "reset_default_context",
39
+
40
+ # Phase 72
41
+ "PlatformKind",
42
+ "RuntimeEnvironment",
43
+ "detect_platform",
44
+ "detect_runtime_environment",
45
+ "configure_logging",
46
+ "get_logger",
47
+ "log_event",
48
+ "PROJECT_CONFIG_FILENAME",
49
+ "PROJECT_CONFIG_SCHEMA_VERSION",
50
+ "ProjectConfig",
51
+ "find_project_config",
52
+ "load_project_config",
53
+ "HyperKitDeprecationWarning",
54
+ "build_deprecation_message",
55
+ "deprecated",
56
+ "warn_deprecated",
57
+ "start_runtime",
58
+ "stop_runtime",
59
+ "run_game",
60
+ }
61
+ )
62
+
63
+
64
+ def get_missing_public_api(
65
+ namespace: Mapping[str, object],
66
+ ) -> tuple[str, ...]:
67
+ """Return required public API names missing from a namespace."""
68
+
69
+ missing = (
70
+ REQUIRED_PUBLIC_API
71
+ - set(namespace)
72
+ )
73
+
74
+ return tuple(
75
+ sorted(missing)
76
+ )
77
+
78
+
79
+ def validate_public_api(
80
+ namespace: Optional[
81
+ Mapping[str, object]
82
+ ] = None,
83
+ ) -> None:
84
+ """Validate the HyperKit public API contract."""
85
+
86
+ if namespace is None:
87
+ import hyperkit
88
+
89
+ namespace = vars(hyperkit)
90
+
91
+ missing = get_missing_public_api(
92
+ namespace
93
+ )
94
+
95
+ if missing:
96
+ names = ", ".join(missing)
97
+
98
+ raise HyperKitCompatibilityError(
99
+ "HyperKit public API contract "
100
+ f"is missing: {names}."
101
+ )
@@ -0,0 +1,89 @@
1
+ """Public API compatibility helpers for GameViz HyperKit."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from .errors import HyperKitCompatibilityError
6
+
7
+
8
+ API_VERSION = "0.2"
9
+
10
+
11
+ def _parse_api_version(version: str) -> tuple[int, int]:
12
+ """Parse a HyperKit API version in MAJOR.MINOR format."""
13
+
14
+ if not isinstance(version, str):
15
+ raise HyperKitCompatibilityError(
16
+ "HyperKit API version must be a string in MAJOR.MINOR format."
17
+ )
18
+
19
+ parts = version.strip().split(".")
20
+
21
+ if len(parts) != 2:
22
+ raise HyperKitCompatibilityError(
23
+ f"Invalid HyperKit API version '{version}'. "
24
+ "Expected MAJOR.MINOR format, for example '0.2'."
25
+ )
26
+
27
+ try:
28
+ major = int(parts[0])
29
+ minor = int(parts[1])
30
+ except ValueError as exc:
31
+ raise HyperKitCompatibilityError(
32
+ f"Invalid HyperKit API version '{version}'. "
33
+ "Major and minor versions must be integers."
34
+ ) from exc
35
+
36
+ if major < 0 or minor < 0:
37
+ raise HyperKitCompatibilityError(
38
+ "HyperKit API version values cannot be negative."
39
+ )
40
+
41
+ return major, minor
42
+
43
+
44
+ def get_api_version() -> str:
45
+ """Return the current public HyperKit API version."""
46
+
47
+ return API_VERSION
48
+
49
+
50
+ def is_api_compatible(required_version: str) -> bool:
51
+ """Return whether the current API satisfies a requested API version.
52
+
53
+ HyperKit uses major-version compatibility.
54
+
55
+ Within the same major version, a newer minor API is considered
56
+ compatible with an older requested minor API.
57
+
58
+ Examples for API version 0.2:
59
+
60
+ 0.1 -> compatible
61
+ 0.2 -> compatible
62
+ 0.3 -> incompatible
63
+ 1.0 -> incompatible
64
+ """
65
+
66
+ current_major, current_minor = _parse_api_version(API_VERSION)
67
+ required_major, required_minor = _parse_api_version(required_version)
68
+
69
+ return (
70
+ current_major == required_major
71
+ and current_minor >= required_minor
72
+ )
73
+
74
+
75
+ def require_api_version(required_version: str) -> None:
76
+ """Require a compatible HyperKit API version.
77
+
78
+ Raises:
79
+ HyperKitCompatibilityError:
80
+ If the requested API is not compatible with this SDK.
81
+ """
82
+
83
+ if is_api_compatible(required_version):
84
+ return
85
+
86
+ raise HyperKitCompatibilityError(
87
+ f"HyperKit API {required_version} is required, "
88
+ f"but this SDK provides API {API_VERSION}."
89
+ )