pycforge 1.0.2__tar.gz → 1.0.4__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 (845) hide show
  1. {pycforge-1.0.2 → pycforge-1.0.4}/CHANGELOG.md +21 -0
  2. {pycforge-1.0.2 → pycforge-1.0.4}/CURRENT_STATE.md +4 -4
  3. {pycforge-1.0.2 → pycforge-1.0.4}/PKG-INFO +10 -8
  4. {pycforge-1.0.2 → pycforge-1.0.4}/PYPI_RELEASE.md +16 -16
  5. {pycforge-1.0.2 → pycforge-1.0.4}/README.md +9 -7
  6. {pycforge-1.0.2 → pycforge-1.0.4}/RELEASE_NOTES.md +26 -1
  7. pycforge-1.0.4/pycforge/_version.py +1 -0
  8. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/help/start.html +1 -1
  9. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge.egg-info/PKG-INFO +10 -8
  10. {pycforge-1.0.2 → pycforge-1.0.4}/pyproject.toml +1 -1
  11. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_checkpoint_e_versioning.py +1 -1
  12. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase10_opening.py +2 -0
  13. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase12_2_metadata.py +3 -3
  14. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase13_contracts.py +1 -1
  15. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14_numeric_contracts.py +1 -1
  16. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14b_conditional_contracts.py +1 -1
  17. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14c_keyword_contracts.py +1 -1
  18. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14d_keyword_only_contracts.py +1 -1
  19. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15a_metadata.py +2 -2
  20. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_release_1_0_2_presentation.py +7 -2
  21. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_release_contract_0_16_3.py +2 -2
  22. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_set_conversion_1_0_1.py +2 -2
  23. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_validate_checkpoint_e.py +3 -3
  24. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_validate_phase16.py +1 -1
  25. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_validate_pycforge_workspace_0_12_2.py +2 -2
  26. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase16.py +2 -2
  27. {pycforge-1.0.2 → pycforge-1.0.4}/tools/verify_public_distribution.py +17 -2
  28. pycforge-1.0.2/pycforge/_version.py +0 -1
  29. {pycforge-1.0.2 → pycforge-1.0.4}/CONVERSION_ROADMAP.md +0 -0
  30. {pycforge-1.0.2 → pycforge-1.0.4}/EXPERT_REVIEW_1.0.1.md +0 -0
  31. {pycforge-1.0.2 → pycforge-1.0.4}/HELP.md +0 -0
  32. {pycforge-1.0.2 → pycforge-1.0.4}/LICENSE +0 -0
  33. {pycforge-1.0.2 → pycforge-1.0.4}/MANIFEST.in +0 -0
  34. {pycforge-1.0.2 → pycforge-1.0.4}/PyCForge_Checkpoint_E_v0_14_4_Project_Handoff.txt +0 -0
  35. {pycforge-1.0.2 → pycforge-1.0.4}/PyCForge_Phase_10_v0_10_0_Project_Handoff.txt +0 -0
  36. {pycforge-1.0.2 → pycforge-1.0.4}/PyCForge_Phase_11_v0_11_0_Project_Handoff.txt +0 -0
  37. {pycforge-1.0.2 → pycforge-1.0.4}/PyCForge_Phase_12_v0_12_0_Project_Handoff.txt +0 -0
  38. {pycforge-1.0.2 → pycforge-1.0.4}/PyCForge_Phase_13_v0_13_0_Project_Handoff.txt +0 -0
  39. {pycforge-1.0.2 → pycforge-1.0.4}/PyCForge_Phase_14A_v0_14_0_Project_Handoff.txt +0 -0
  40. {pycforge-1.0.2 → pycforge-1.0.4}/PyCForge_Phase_14B_v0_14_1_Project_Handoff.txt +0 -0
  41. {pycforge-1.0.2 → pycforge-1.0.4}/PyCForge_Phase_14C_v0_14_2_Project_Handoff.txt +0 -0
  42. {pycforge-1.0.2 → pycforge-1.0.4}/PyCForge_Phase_14D_v0_14_3_Project_Handoff.txt +0 -0
  43. {pycforge-1.0.2 → pycforge-1.0.4}/PyCForge_Phase_15A_v0_15_0_Project_Handoff.txt +0 -0
  44. {pycforge-1.0.2 → pycforge-1.0.4}/PyCForge_Phase_15B_v0_15_1_Project_Handoff.txt +0 -0
  45. {pycforge-1.0.2 → pycforge-1.0.4}/PyCForge_Phase_15C_v0_15_2_Project_Handoff.txt +0 -0
  46. {pycforge-1.0.2 → pycforge-1.0.4}/PyCForge_Phase_9_v0_9_0_Project_Handoff.txt +0 -0
  47. {pycforge-1.0.2 → pycforge-1.0.4}/ROADMAP.md +0 -0
  48. {pycforge-1.0.2 → pycforge-1.0.4}/THIRD_PARTY_NOTICES.md +0 -0
  49. {pycforge-1.0.2 → pycforge-1.0.4}/TING_INTEGRATION_REVIEW.md +0 -0
  50. {pycforge-1.0.2 → pycforge-1.0.4}/docs/PyCForge_v0_15_2_Conversion_Examples_Reference_Edition.pdf +0 -0
  51. {pycforge-1.0.2 → pycforge-1.0.4}/docs/PyCForge_v0_16_0_Programmers_Conversion_Guide.pdf +0 -0
  52. {pycforge-1.0.2 → pycforge-1.0.4}/docs/images/pycforge-help-0.16.3.png +0 -0
  53. {pycforge-1.0.2 → pycforge-1.0.4}/docs/images/pycforge-ting-agents-1.0.2.png +0 -0
  54. {pycforge-1.0.2 → pycforge-1.0.4}/docs/images/pycforge-workspace-0.15.2.png +0 -0
  55. {pycforge-1.0.2 → pycforge-1.0.4}/docs/images/pycforge-workspace-0.16.1.png +0 -0
  56. {pycforge-1.0.2 → pycforge-1.0.4}/docs/images/pycforge-workspace-0.16.3.png +0 -0
  57. {pycforge-1.0.2 → pycforge-1.0.4}/docs/images/pycforge-workspace-1.0.2.png +0 -0
  58. {pycforge-1.0.2 → pycforge-1.0.4}/docs/pycforge_workspace_quality_addendum.md +0 -0
  59. {pycforge-1.0.2 → pycforge-1.0.4}/docs/python_to_c_converter_architecture_revision_3_1.txt +0 -0
  60. {pycforge-1.0.2 → pycforge-1.0.4}/docs/python_to_c_converter_architecture_revision_3_2_addendum.md +0 -0
  61. {pycforge-1.0.2 → pycforge-1.0.4}/docs/python_to_c_converter_architecture_revision_3_3_workspace_addendum.md +0 -0
  62. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/checkpoint_e/debt_delta.json +0 -0
  63. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/checkpoint_e/entry_report.json +0 -0
  64. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/checkpoint_e/full_subset_validation.json +0 -0
  65. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/checkpoint_e/release_report.json +0 -0
  66. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/checkpoint_e/workspace_debt.json +0 -0
  67. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_02/architecture_report.json +0 -0
  68. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_02/artifact_manifest.json +0 -0
  69. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_02/debt_delta.json +0 -0
  70. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_02/decision_trace_sample.json +0 -0
  71. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_02/determinism_report.json +0 -0
  72. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_02/golden_manifest.json +0 -0
  73. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_02/resource_report.json +0 -0
  74. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_02/rule_manifest.json +0 -0
  75. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_02/semantics_report.json +0 -0
  76. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_02/test_summary.json +0 -0
  77. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_02/transition_packet.json +0 -0
  78. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_04/golden_manifest.json +0 -0
  79. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_06/architecture_report.json +0 -0
  80. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_06/conversion_debt.json +0 -0
  81. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_06/decision_trace_sample.json +0 -0
  82. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_06/determinism_report.json +0 -0
  83. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_06/first_slice_report.json +0 -0
  84. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_06/golden_manifest.json +0 -0
  85. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_06/rule_report.json +0 -0
  86. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_06/test_summary.json +0 -0
  87. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_06/transition_report.json +0 -0
  88. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_07/architecture_report.json +0 -0
  89. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_07/determinism_report.json +0 -0
  90. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_07/rule_report.json +0 -0
  91. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_07/transition_report.json +0 -0
  92. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_08/architecture_report.json +0 -0
  93. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_08/checkpoint_c.json +0 -0
  94. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_08/determinism_report.json +0 -0
  95. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_08/observer_cancellation_report.json +0 -0
  96. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_08/rule_report.json +0 -0
  97. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_08/test_summary.json +0 -0
  98. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_08/transition_report.json +0 -0
  99. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_09/architecture_report.json +0 -0
  100. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_09/conversion_debt.json +0 -0
  101. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_09/determinism_report.json +0 -0
  102. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_09/mapping_report.json +0 -0
  103. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_09/observer_cancellation_resource_report.json +0 -0
  104. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_09/phase9_report.json +0 -0
  105. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_09/python_package_report.json +0 -0
  106. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_09/review_report.json +0 -0
  107. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_09/rule_report.json +0 -0
  108. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_09/semantic_gate_report.json +0 -0
  109. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_09/test_summary.json +0 -0
  110. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_09/transition_report.json +0 -0
  111. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_10/architecture_report.json +0 -0
  112. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_10/determinism_report.json +0 -0
  113. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_10/helper_registry_report.json +0 -0
  114. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_10/opening_checkpoint_report.json +0 -0
  115. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_10/opening_package_report.json +0 -0
  116. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_10/opening_test_summary.json +0 -0
  117. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_10/package_report.json +0 -0
  118. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_10/phase10_report.json +0 -0
  119. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_10/progress_observer_report.json +0 -0
  120. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_10/qt_widget_smoke_report.json +0 -0
  121. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_10/rule_report.json +0 -0
  122. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_10/semantic_preservation_report.json +0 -0
  123. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_10/test_summary.json +0 -0
  124. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_10/transition_report.json +0 -0
  125. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_11/architecture_report.json +0 -0
  126. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_11/container_report.json +0 -0
  127. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_11/determinism_report.json +0 -0
  128. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_11/helper_registry_report.json +0 -0
  129. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_11/package_report.json +0 -0
  130. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_11/phase11_report.json +0 -0
  131. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_11/rule_report.json +0 -0
  132. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_11/schema_report.json +0 -0
  133. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_11/semantic_preservation_report.json +0 -0
  134. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_11/test_summary.json +0 -0
  135. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_11/transition_report.json +0 -0
  136. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_12/architecture_report.json +0 -0
  137. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_12/container_report.json +0 -0
  138. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_12/determinism_report.json +0 -0
  139. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_12/helper_registry_report.json +0 -0
  140. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_12/module_report.json +0 -0
  141. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_12/package_report.json +0 -0
  142. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_12/phase12_report.json +0 -0
  143. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_12/rule_report.json +0 -0
  144. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_12/schema_report.json +0 -0
  145. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_12/semantic_preservation_report.json +0 -0
  146. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_12/source_boundary_report.json +0 -0
  147. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_12/test_summary.json +0 -0
  148. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_12/transition_report.json +0 -0
  149. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_13/release_report.json +0 -0
  150. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_14/conversion_debt.json +0 -0
  151. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_14/entry_report.json +0 -0
  152. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_14/release_report.json +0 -0
  153. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_14b/conversion_debt.json +0 -0
  154. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_14b/entry_report.json +0 -0
  155. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_14b/release_report.json +0 -0
  156. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_14c/conversion_debt.json +0 -0
  157. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_14c/entry_report.json +0 -0
  158. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_14c/release_report.json +0 -0
  159. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_14d/conversion_debt.json +0 -0
  160. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_14d/entry_report.json +0 -0
  161. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_14d/release_report.json +0 -0
  162. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_15a/performance_evidence.json +0 -0
  163. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_15a/release_report.json +0 -0
  164. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_15a/validation_report.json +0 -0
  165. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_15b/action_registry_evidence.json +0 -0
  166. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_15b/validation_report.json +0 -0
  167. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_15b/visual_system_evidence.json +0 -0
  168. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_15c/action_registry_evidence.json +0 -0
  169. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_15c/feature_evidence.json +0 -0
  170. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_15c/performance_evidence.json +0 -0
  171. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/phase_15c/validation_report.json +0 -0
  172. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/pycforge_workspace_0_12_1/gate_evidence.md +0 -0
  173. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/pycforge_workspace_0_12_1/release_report.json +0 -0
  174. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/pycforge_workspace_0_12_2/manual_review.md +0 -0
  175. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/pycforge_workspace_0_12_2/qt_widget_smoke_scale_1.json +0 -0
  176. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/pycforge_workspace_0_12_2/qt_widget_smoke_scale_1.png +0 -0
  177. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/pycforge_workspace_0_12_2/qt_widget_smoke_scale_2.json +0 -0
  178. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/pycforge_workspace_0_12_2/qt_widget_smoke_scale_2.png +0 -0
  179. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/pycforge_workspace_0_12_2/release_report.json +0 -0
  180. {pycforge-1.0.2 → pycforge-1.0.4}/evidence/ting_agents/compiler_custody_attestation.json +0 -0
  181. {pycforge-1.0.2 → pycforge-1.0.4}/fixtures/c_ir/essential_golden.c +0 -0
  182. {pycforge-1.0.2 → pycforge-1.0.4}/fixtures/first_milestone/add.py +0 -0
  183. {pycforge-1.0.2 → pycforge-1.0.4}/fixtures/first_milestone/expected.c +0 -0
  184. {pycforge-1.0.2 → pycforge-1.0.4}/fixtures/first_milestone/expected_ruleplans.json +0 -0
  185. {pycforge-1.0.2 → pycforge-1.0.4}/fixtures/support_templates/pycf_i64_floor_div_v1.c +0 -0
  186. {pycforge-1.0.2 → pycforge-1.0.4}/fixtures/support_templates/pycf_i64_floor_mod_v1.c +0 -0
  187. {pycforge-1.0.2 → pycforge-1.0.4}/licenses/TING_REASONER.txt +0 -0
  188. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/__init__.py +0 -0
  189. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/__main__.py +0 -0
  190. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/_vendor/__init__.py +0 -0
  191. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/_vendor/ting_reasoner/__init__.py +0 -0
  192. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/_vendor/ting_reasoner/engine.py +0 -0
  193. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/_vendor/ting_reasoner/errors.py +0 -0
  194. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/_vendor/ting_reasoner/ir.py +0 -0
  195. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/_vendor/ting_reasoner/model.py +0 -0
  196. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/_vendor/ting_reasoner/nd.py +0 -0
  197. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/_vendor/ting_reasoner/py.typed +0 -0
  198. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/_vendor/ting_reasoner/results.py +0 -0
  199. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/_vendor/ting_reasoner/store.py +0 -0
  200. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/_vendor/ting_reasoner/transactions.py +0 -0
  201. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/_vendor/ting_reasoner_provenance.json +0 -0
  202. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/__init__.py +0 -0
  203. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/analysis/__init__.py +0 -0
  204. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/analysis/functions.py +0 -0
  205. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/analysis/model.py +0 -0
  206. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/analysis/planning.py +0 -0
  207. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/analysis/stage.py +0 -0
  208. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/analysis/symbols.py +0 -0
  209. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/analysis/validation.py +0 -0
  210. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/c_output/__init__.py +0 -0
  211. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/c_output/conformance.py +0 -0
  212. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/c_output/renderer.py +0 -0
  213. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/conditional_regions/__init__.py +0 -0
  214. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/conditional_regions/analysis.py +0 -0
  215. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/conditional_regions/lowering.py +0 -0
  216. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/conditional_regions/model.py +0 -0
  217. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/conditional_regions/validation.py +0 -0
  218. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/containers/__init__.py +0 -0
  219. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/containers/analysis.py +0 -0
  220. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/containers/lowering.py +0 -0
  221. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/containers/model.py +0 -0
  222. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/contracts/__init__.py +0 -0
  223. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/contracts/configuration.py +0 -0
  224. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/contracts/identifiers.py +0 -0
  225. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/contracts/versions.py +0 -0
  226. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/__init__.py +0 -0
  227. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/artifact_io.py +0 -0
  228. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/cancellation.py +0 -0
  229. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/canonicalization.py +0 -0
  230. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/context.py +0 -0
  231. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/diagnostics.py +0 -0
  232. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/enums.py +0 -0
  233. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/fingerprint.py +0 -0
  234. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/pipeline.py +0 -0
  235. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/progress.py +0 -0
  236. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/request.py +0 -0
  237. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/resource_policy.py +0 -0
  238. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/result.py +0 -0
  239. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/serialization.py +0 -0
  240. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/stage.py +0 -0
  241. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/stage_artifact.py +0 -0
  242. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/core/stage_outcome.py +0 -0
  243. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/decision_trace/__init__.py +0 -0
  244. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/decision_trace/recorder.py +0 -0
  245. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/facade.py +0 -0
  246. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/file_io/__init__.py +0 -0
  247. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/file_io/analysis.py +0 -0
  248. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/file_io/conformance.py +0 -0
  249. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/file_io/model.py +0 -0
  250. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/file_io/runtime.py +0 -0
  251. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/file_io/validation.py +0 -0
  252. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/frontend/__init__.py +0 -0
  253. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/frontend/normalizer.py +0 -0
  254. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/frontend/parser.py +0 -0
  255. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/frontend/source_document.py +0 -0
  256. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/frontend/stages.py +0 -0
  257. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/frontend/validation.py +0 -0
  258. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/io/__init__.py +0 -0
  259. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/io/atomic_writer.py +0 -0
  260. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/ir/__init__.py +0 -0
  261. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/ir/c_ir/__init__.py +0 -0
  262. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/ir/c_ir/builder.py +0 -0
  263. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/ir/c_ir/model.py +0 -0
  264. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/ir/c_ir/serialization.py +0 -0
  265. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/ir/c_ir/validation.py +0 -0
  266. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/ir/python_ir/__init__.py +0 -0
  267. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/ir/python_ir/nodes.py +0 -0
  268. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/keyword_calls/__init__.py +0 -0
  269. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/keyword_calls/analysis.py +0 -0
  270. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/keyword_calls/lowering.py +0 -0
  271. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/keyword_calls/model.py +0 -0
  272. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/keyword_calls/validation.py +0 -0
  273. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/keyword_only_calls/__init__.py +0 -0
  274. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/keyword_only_calls/analysis.py +0 -0
  275. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/keyword_only_calls/lowering.py +0 -0
  276. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/keyword_only_calls/model.py +0 -0
  277. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/keyword_only_calls/validation.py +0 -0
  278. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/loop_completion/__init__.py +0 -0
  279. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/loop_completion/analysis.py +0 -0
  280. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/loop_completion/lowering.py +0 -0
  281. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/loop_completion/model.py +0 -0
  282. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/loop_completion/validation.py +0 -0
  283. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/lowering.py +0 -0
  284. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/modules/__init__.py +0 -0
  285. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/modules/analysis.py +0 -0
  286. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/modules/lowering.py +0 -0
  287. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/modules/model.py +0 -0
  288. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/modules/stage.py +0 -0
  289. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/numeric_semantics/__init__.py +0 -0
  290. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/numeric_semantics/analysis.py +0 -0
  291. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/numeric_semantics/lowering.py +0 -0
  292. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/numeric_semantics/model.py +0 -0
  293. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/records/__init__.py +0 -0
  294. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/records/analysis.py +0 -0
  295. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/records/lowering.py +0 -0
  296. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/records/model.py +0 -0
  297. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/rules/__init__.py +0 -0
  298. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/scope_lifetimes/__init__.py +0 -0
  299. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/scope_lifetimes/analysis.py +0 -0
  300. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/scope_lifetimes/model.py +0 -0
  301. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/scope_lifetimes/validation.py +0 -0
  302. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/support_templates/__init__.py +0 -0
  303. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/support_templates/assembly.py +0 -0
  304. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/support_templates/factories.py +0 -0
  305. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/support_templates/model.py +0 -0
  306. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/support_templates/registry.py +0 -0
  307. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/telemetry/__init__.py +0 -0
  308. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/converter/telemetry/sink.py +0 -0
  309. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/__init__.py +0 -0
  310. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/__main__.py +0 -0
  311. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/_forgelens_builder.py +0 -0
  312. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/_forgelens_model.py +0 -0
  313. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/_worker_event_codec.py +0 -0
  314. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/_worker_protocol_json.py +0 -0
  315. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/_worker_protocol_types.py +0 -0
  316. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/_worker_request_codec.py +0 -0
  317. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/_worker_request_data.py +0 -0
  318. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/_worker_result_data.py +0 -0
  319. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/action_contract.py +0 -0
  320. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/action_validation.py +0 -0
  321. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/command_palette.py +0 -0
  322. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/controller.py +0 -0
  323. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/controller_conversion.py +0 -0
  324. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/controller_io.py +0 -0
  325. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/editor.py +0 -0
  326. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/editor_commands_qt.py +0 -0
  327. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/editor_lexical.py +0 -0
  328. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/editor_markers.py +0 -0
  329. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/editor_sidebars.py +0 -0
  330. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/editor_syntax.py +0 -0
  331. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/find_replace.py +0 -0
  332. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/forgelens.py +0 -0
  333. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/icons.py +0 -0
  334. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/io_service.py +0 -0
  335. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/model.py +0 -0
  336. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/panels.py +0 -0
  337. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/positions.py +0 -0
  338. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/process_worker.py +0 -0
  339. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt.py +0 -0
  340. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_about.py +0 -0
  341. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_actions.py +0 -0
  342. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_close.py +0 -0
  343. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_command_palette.py +0 -0
  344. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_contract.py +0 -0
  345. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_dialog_chrome.py +0 -0
  346. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_documents.py +0 -0
  347. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_editor_buffers.py +0 -0
  348. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_editor_settings.py +0 -0
  349. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_editor_surfaces.py +0 -0
  350. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_file_dialogs.py +0 -0
  351. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_forgelens.py +0 -0
  352. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_help.py +0 -0
  353. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_icons.py +0 -0
  354. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_menus.py +0 -0
  355. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_open_queue.py +0 -0
  356. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_projection.py +0 -0
  357. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_screen_geometry.py +0 -0
  358. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_session.py +0 -0
  359. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_session_state.py +0 -0
  360. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_shell.py +0 -0
  361. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_shell_interactions.py +0 -0
  362. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_source_preview.py +0 -0
  363. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_startup.py +0 -0
  364. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_state.py +0 -0
  365. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_text_settings.py +0 -0
  366. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_ting_actions.py +0 -0
  367. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_ting_feedback.py +0 -0
  368. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_toast.py +0 -0
  369. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_window_chrome.py +0 -0
  370. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_window_resize.py +0 -0
  371. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_workspace_features.py +0 -0
  372. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_workspace_navigation.py +0 -0
  373. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_workspace_observers.py +0 -0
  374. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_workspace_panels.py +0 -0
  375. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/qt_workspace_widgets.py +0 -0
  376. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/help/calls-modules.html +0 -0
  377. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/help/catalog.json +0 -0
  378. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/help/cli-api.html +0 -0
  379. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/help/containers-records.html +0 -0
  380. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/help/contracts.html +0 -0
  381. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/help/control-flow.html +0 -0
  382. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/help/diagnostics.html +0 -0
  383. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/help/file-io.html +0 -0
  384. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/help/help-authoring.html +0 -0
  385. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/help/help.css +0 -0
  386. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/help/safety-limits.html +0 -0
  387. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/help/shortcuts.html +0 -0
  388. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/help/ting-agents.html +0 -0
  389. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/help/types-expressions.html +0 -0
  390. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/help/workspace.html +0 -0
  391. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/add-document.svg +0 -0
  392. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/brand-mark.svg +0 -0
  393. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/bundle-search.svg +0 -0
  394. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/cancel.svg +0 -0
  395. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/check.svg +0 -0
  396. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/chevron-right.svg +0 -0
  397. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/close.svg +0 -0
  398. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/collapse-all.svg +0 -0
  399. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/command-palette.svg +0 -0
  400. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/convert.svg +0 -0
  401. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/copy.svg +0 -0
  402. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/cut.svg +0 -0
  403. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/decision-trace.svg +0 -0
  404. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/details.svg +0 -0
  405. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/diagnostics.svg +0 -0
  406. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/duplicate-line.svg +0 -0
  407. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/exit.svg +0 -0
  408. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/expand-all.svg +0 -0
  409. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/export.svg +0 -0
  410. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/find.svg +0 -0
  411. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/go-to-line.svg +0 -0
  412. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/go-to-output.svg +0 -0
  413. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/go-to-source.svg +0 -0
  414. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/help.svg +0 -0
  415. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/history.svg +0 -0
  416. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/indent.svg +0 -0
  417. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/link-c.svg +0 -0
  418. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/mappings.svg +0 -0
  419. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/module.svg +0 -0
  420. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/move-down.svg +0 -0
  421. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/move-line-down.svg +0 -0
  422. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/move-line-up.svg +0 -0
  423. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/move-up.svg +0 -0
  424. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/next.svg +0 -0
  425. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/open.svg +0 -0
  426. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/outdent.svg +0 -0
  427. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/outline.svg +0 -0
  428. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/paste.svg +0 -0
  429. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/previous.svg +0 -0
  430. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/primary-module.svg +0 -0
  431. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/redo.svg +0 -0
  432. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/remove-document.svg +0 -0
  433. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/replace.svg +0 -0
  434. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/save-as.svg +0 -0
  435. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/save.svg +0 -0
  436. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/select-all.svg +0 -0
  437. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/settings.svg +0 -0
  438. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/show-c.svg +0 -0
  439. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/split-view.svg +0 -0
  440. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/summary.svg +0 -0
  441. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/telemetry.svg +0 -0
  442. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/toggle-comment.svg +0 -0
  443. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/toggle-fold.svg +0 -0
  444. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/undo.svg +0 -0
  445. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/resources/icons/whitespace.svg +0 -0
  446. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/revisions.py +0 -0
  447. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/search_service.py +0 -0
  448. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/session_history.py +0 -0
  449. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/source_editing.py +0 -0
  450. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/source_preview.py +0 -0
  451. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/source_structure.py +0 -0
  452. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/source_structure_async.py +0 -0
  453. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/supervisor.py +0 -0
  454. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/theme.py +0 -0
  455. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/theme_steel_stylesheet.py +0 -0
  456. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/theme_stylesheet.py +0 -0
  457. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/theme_workspace_stylesheet.py +0 -0
  458. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/ting_feedback.py +0 -0
  459. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/visual_tokens.py +0 -0
  460. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/worker_protocol.py +0 -0
  461. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/workspace_search.py +0 -0
  462. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ide/workspace_session.py +0 -0
  463. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/laboratory/__init__.py +0 -0
  464. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/laboratory/audits.py +0 -0
  465. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/laboratory/checkpoint_e.py +0 -0
  466. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/laboratory/cli.py +0 -0
  467. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/laboratory/exit_codes.py +0 -0
  468. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/laboratory/keyword_audit.py +0 -0
  469. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/laboratory/keyword_only_audit.py +0 -0
  470. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/__init__.py +0 -0
  471. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/coordinator.py +0 -0
  472. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/errors.py +0 -0
  473. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/model.py +0 -0
  474. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/registry.py +0 -0
  475. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/rulesets/capability.ting +0 -0
  476. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/rulesets/capability.tingspec.json +0 -0
  477. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/rulesets/lowering.ting +0 -0
  478. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/rulesets/lowering.tingspec.json +0 -0
  479. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/rulesets/ownership.ting +0 -0
  480. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/rulesets/ownership.tingspec.json +0 -0
  481. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/rulesets/registry.json +0 -0
  482. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/rulesets/semantics.ting +0 -0
  483. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/rulesets/semantics.tingspec.json +0 -0
  484. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/rulesets/syntax.ting +0 -0
  485. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/rulesets/syntax.tingspec.json +0 -0
  486. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/rulesets/verification.ting +0 -0
  487. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge/ting_agents/rulesets/verification.tingspec.json +0 -0
  488. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge.egg-info/SOURCES.txt +0 -0
  489. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge.egg-info/dependency_links.txt +0 -0
  490. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge.egg-info/entry_points.txt +0 -0
  491. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge.egg-info/requires.txt +0 -0
  492. {pycforge-1.0.2 → pycforge-1.0.4}/pycforge.egg-info/top_level.txt +0 -0
  493. {pycforge-1.0.2 → pycforge-1.0.4}/schemas/decision_trace.schema.json +0 -0
  494. {pycforge-1.0.2 → pycforge-1.0.4}/schemas/telemetry.schema.json +0 -0
  495. {pycforge-1.0.2 → pycforge-1.0.4}/setup.cfg +0 -0
  496. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/analysis_and_planning.md +0 -0
  497. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/approximation_policy.md +0 -0
  498. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/bounded_containers.md +0 -0
  499. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/c_ir_schema.md +0 -0
  500. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/c_output_style.md +0 -0
  501. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/c_renderer_contract.md +0 -0
  502. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/configuration.md +0 -0
  503. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/conversion_semantics.md +0 -0
  504. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/diagnostics.md +0 -0
  505. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/fact_table_schema.md +0 -0
  506. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/feature_matrix.json +0 -0
  507. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/generated_c_conformance.md +0 -0
  508. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/module_bundles.md +0 -0
  509. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/phase14a_bounded_integer_divmod.md +0 -0
  510. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/phase14b_conditional_temporary_regions.md +0 -0
  511. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/phase14c_direct_keyword_calls.md +0 -0
  512. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/phase14d_required_keyword_only_calls.md +0 -0
  513. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/phase6_first_complete_slice.md +0 -0
  514. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/phase7_workspace.md +0 -0
  515. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/phase8_control_flow.md +0 -0
  516. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/phase9_functions_calls.md +0 -0
  517. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/product_boundary.md +0 -0
  518. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/pycforge_workspace.md +0 -0
  519. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/pycforge_workspace_legacy_0_1.md +0 -0
  520. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/python_ir_schema.md +0 -0
  521. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/representation_ownership_lifetime.md +0 -0
  522. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/resource_cancellation_save.md +0 -0
  523. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/result_and_fingerprints.md +0 -0
  524. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/rule_plan_schema.md +0 -0
  525. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/source_bundle.md +0 -0
  526. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/source_frontend.md +0 -0
  527. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/static_records.md +0 -0
  528. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/support_templates.md +0 -0
  529. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/supported_python.md +0 -0
  530. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/target_c_source_contract.md +0 -0
  531. {pycforge-1.0.2 → pycforge-1.0.4}/specifications/ting_agent_architecture.md +0 -0
  532. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_about_and_window_chrome_review.py +0 -0
  533. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_checkpoint_e_audits.py +0 -0
  534. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_checkpoint_e_feature_matrix.py +0 -0
  535. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_checkpoint_e_predecessor_equivalence.py +0 -0
  536. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_checkpoint_e_release_packaging.py +0 -0
  537. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_editor_behavior_qt.py +0 -0
  538. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_editor_settings_qt.py +0 -0
  539. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_final_windows_acceptance_1_0_1.py +0 -0
  540. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_forgelens.py +0 -0
  541. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_forgelens_controller.py +0 -0
  542. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_frontend_eof_boundaries.py +0 -0
  543. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_help_documentation_0_16_3.py +0 -0
  544. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase0.py +0 -0
  545. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase1.py +0 -0
  546. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase10.py +0 -0
  547. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase11.py +0 -0
  548. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase12.py +0 -0
  549. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase12_1_editor.py +0 -0
  550. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase12_1_pycforge_theme.py +0 -0
  551. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase12_2_components.py +0 -0
  552. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase12_2_controller.py +0 -0
  553. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase12_2_qt.py +0 -0
  554. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase13_audits.py +0 -0
  555. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase13_c_ir.py +0 -0
  556. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase13_end_to_end.py +0 -0
  557. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase13_record_analysis.py +0 -0
  558. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase13_record_lowering.py +0 -0
  559. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase13_record_validation.py +0 -0
  560. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14_numeric_end_to_end.py +0 -0
  561. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14_numeric_hardening.py +0 -0
  562. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14b_audits.py +0 -0
  563. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14b_conditional_analysis.py +0 -0
  564. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14b_conditional_hardening.py +0 -0
  565. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14b_conditional_lowering.py +0 -0
  566. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14c_cumulative_eligibility.py +0 -0
  567. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14c_keyword_analysis.py +0 -0
  568. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14c_keyword_audits.py +0 -0
  569. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14c_keyword_hardening.py +0 -0
  570. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14c_keyword_lowering.py +0 -0
  571. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14d_cumulative_eligibility.py +0 -0
  572. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14d_keyword_only_analysis.py +0 -0
  573. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14d_keyword_only_hardening.py +0 -0
  574. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase14d_keyword_only_lowering.py +0 -0
  575. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15a_async_search.py +0 -0
  576. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15a_controller.py +0 -0
  577. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15a_editor_decomposition.py +0 -0
  578. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15a_editor_large_file.py +0 -0
  579. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15a_io_service.py +0 -0
  580. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15a_position_indexes.py +0 -0
  581. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15a_qt_decomposition.py +0 -0
  582. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15a_release_packaging.py +0 -0
  583. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15a_revisions.py +0 -0
  584. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15a_stress.py +0 -0
  585. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15a_supervisor.py +0 -0
  586. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15a_worker_protocol.py +0 -0
  587. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15b_action_foundation.py +0 -0
  588. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15b_action_integration.py +0 -0
  589. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15b_release_contract.py +0 -0
  590. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15b_release_packaging.py +0 -0
  591. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15b_visual_foundation.py +0 -0
  592. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15b_visual_integration.py +0 -0
  593. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15c_action_contract.py +0 -0
  594. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15c_command_palette.py +0 -0
  595. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15c_qt_command_contract.py +0 -0
  596. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15c_qt_panels_contract.py +0 -0
  597. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15c_qt_position_reverse.py +0 -0
  598. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15c_qt_workspace_integration.py +0 -0
  599. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15c_release_contract.py +0 -0
  600. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15c_release_packaging.py +0 -0
  601. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15c_session_history.py +0 -0
  602. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15c_source_editing.py +0 -0
  603. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15c_source_structure.py +0 -0
  604. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15c_visual_system.py +0 -0
  605. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15c_workspace_search.py +0 -0
  606. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase15c_workspace_session.py +0 -0
  607. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_c_ir_validation_hardening.py +0 -0
  608. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_file_io_analysis.py +0 -0
  609. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_file_io_end_to_end.py +0 -0
  610. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_file_io_payload_validation.py +0 -0
  611. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_file_io_registry.py +0 -0
  612. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_file_io_rejections.py +0 -0
  613. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_file_io_runtime.py +0 -0
  614. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_file_io_validation.py +0 -0
  615. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_loop_analysis.py +0 -0
  616. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_loop_end_to_end.py +0 -0
  617. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_loop_lowering.py +0 -0
  618. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_loop_payload_validation.py +0 -0
  619. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_loop_resources.py +0 -0
  620. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_loop_validation.py +0 -0
  621. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_scope_analysis.py +0 -0
  622. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_scope_boundaries.py +0 -0
  623. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_scope_payload_validation.py +0 -0
  624. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase16_scope_validation.py +0 -0
  625. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase2.py +0 -0
  626. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase3.py +0 -0
  627. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase4.py +0 -0
  628. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase5.py +0 -0
  629. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase6.py +0 -0
  630. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase7.py +0 -0
  631. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase8.py +0 -0
  632. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_phase9.py +0 -0
  633. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_programmers_guide.py +0 -0
  634. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_public_distribution.py +0 -0
  635. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_pycforge_qt_integration.py +0 -0
  636. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_pycforge_workspace.py +0 -0
  637. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_qt_file_dialogs.py +0 -0
  638. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_qt_forgelens.py +0 -0
  639. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_qt_open_queue.py +0 -0
  640. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_review_hardening.py +0 -0
  641. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_smoke_pycforge_workspace_0_12_2.py +0 -0
  642. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_source_preview.py +0 -0
  643. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_startup_progress_0_16_3.py +0 -0
  644. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_steel_theme.py +0 -0
  645. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_ting_agents.py +0 -0
  646. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_typing_ui_stability_qt.py +0 -0
  647. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_ui_continuity_1_0_1.py +0 -0
  648. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_ui_lifecycle_0_16_3.py +0 -0
  649. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_ui_review_corrections_1_0_1.py +0 -0
  650. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_validate_phase13.py +0 -0
  651. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_validate_phase14.py +0 -0
  652. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_validate_phase14b.py +0 -0
  653. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_validate_phase14c.py +0 -0
  654. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_validate_phase14d.py +0 -0
  655. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_validate_phase15a.py +0 -0
  656. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_validate_phase15b.py +0 -0
  657. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_validate_phase15c.py +0 -0
  658. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_validate_workspace_usability_0_15_3.py +0 -0
  659. {pycforge-1.0.2 → pycforge-1.0.4}/tests/test_windows_ui_scale_and_identity_1_0_1.py +0 -0
  660. {pycforge-1.0.2 → pycforge-1.0.4}/tools/_phase15a_runtime_validation.py +0 -0
  661. {pycforge-1.0.2 → pycforge-1.0.4}/tools/_phase15b_release_contract.py +0 -0
  662. {pycforge-1.0.2 → pycforge-1.0.4}/tools/_phase15c_release_contract.py +0 -0
  663. {pycforge-1.0.2 → pycforge-1.0.4}/tools/build_checkpoint_e_release.py +0 -0
  664. {pycforge-1.0.2 → pycforge-1.0.4}/tools/build_phase15a_release.py +0 -0
  665. {pycforge-1.0.2 → pycforge-1.0.4}/tools/build_phase15b_release.py +0 -0
  666. {pycforge-1.0.2 → pycforge-1.0.4}/tools/build_phase15c_release.py +0 -0
  667. {pycforge-1.0.2 → pycforge-1.0.4}/tools/build_programmers_guide.py +0 -0
  668. {pycforge-1.0.2 → pycforge-1.0.4}/tools/checkpoint_e_predecessor_equivalence.py +0 -0
  669. {pycforge-1.0.2 → pycforge-1.0.4}/tools/collect_phase11_evidence.py +0 -0
  670. {pycforge-1.0.2 → pycforge-1.0.4}/tools/collect_phase12_evidence.py +0 -0
  671. {pycforge-1.0.2 → pycforge-1.0.4}/tools/normalize_sdist.py +0 -0
  672. {pycforge-1.0.2 → pycforge-1.0.4}/tools/smoke_phase10_qt.py +0 -0
  673. {pycforge-1.0.2 → pycforge-1.0.4}/tools/smoke_phase11_qt.py +0 -0
  674. {pycforge-1.0.2 → pycforge-1.0.4}/tools/smoke_pycforge_workspace_0_12_2.py +0 -0
  675. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_checkpoint_e.py +0 -0
  676. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase0.py +0 -0
  677. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase1.py +0 -0
  678. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase10.py +0 -0
  679. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase10_opening.py +0 -0
  680. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase11.py +0 -0
  681. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase12.py +0 -0
  682. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase13.py +0 -0
  683. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase14.py +0 -0
  684. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase14b.py +0 -0
  685. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase14c.py +0 -0
  686. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase14d.py +0 -0
  687. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase15a.py +0 -0
  688. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase15b.py +0 -0
  689. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase15c.py +0 -0
  690. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase2.py +0 -0
  691. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase3.py +0 -0
  692. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase4.py +0 -0
  693. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase5.py +0 -0
  694. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase6.py +0 -0
  695. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase7.py +0 -0
  696. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase8.py +0 -0
  697. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_phase9.py +0 -0
  698. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_pycforge_workspace_0_12_1.py +0 -0
  699. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_pycforge_workspace_0_12_2.py +0 -0
  700. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_ting_agents.py +0 -0
  701. {pycforge-1.0.2 → pycforge-1.0.4}/tools/validate_workspace_usability_0_15_3.py +0 -0
  702. {pycforge-1.0.2 → pycforge-1.0.4}/tools/verify_pypi_readme.py +0 -0
  703. {pycforge-1.0.2 → pycforge-1.0.4}/transition/checkpoint_e/architecture_and_workspace_decision.md +0 -0
  704. {pycforge-1.0.2 → pycforge-1.0.4}/transition/checkpoint_e/breadth_and_change_budgets.md +0 -0
  705. {pycforge-1.0.2 → pycforge-1.0.4}/transition/checkpoint_e/entry_criteria.md +0 -0
  706. {pycforge-1.0.2 → pycforge-1.0.4}/transition/checkpoint_e/feature_boundaries.md +0 -0
  707. {pycforge-1.0.2 → pycforge-1.0.4}/transition/checkpoint_e/feature_matrix_reconciliation.md +0 -0
  708. {pycforge-1.0.2 → pycforge-1.0.4}/transition/checkpoint_e/gate_evidence.md +0 -0
  709. {pycforge-1.0.2 → pycforge-1.0.4}/transition/checkpoint_e/manifest.json +0 -0
  710. {pycforge-1.0.2 → pycforge-1.0.4}/transition/checkpoint_e/opening_evidence.md +0 -0
  711. {pycforge-1.0.2 → pycforge-1.0.4}/transition/checkpoint_e/performance_budgets.md +0 -0
  712. {pycforge-1.0.2 → pycforge-1.0.4}/transition/checkpoint_e/release_fingerprint.json +0 -0
  713. {pycforge-1.0.2 → pycforge-1.0.4}/transition/checkpoint_e/rollback_conditions.md +0 -0
  714. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_0/baseline_fingerprint.json +0 -0
  715. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_0/first_milestone_contract.md +0 -0
  716. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_0/manifest.json +0 -0
  717. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_0/non_goals_by_phase.md +0 -0
  718. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_1/baseline_fingerprint.json +0 -0
  719. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_1/empty_pipeline_invariants.md +0 -0
  720. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_1/facade_contract.md +0 -0
  721. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_1/manifest.json +0 -0
  722. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_10/baseline_fingerprint.json +0 -0
  723. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_10/entry_criteria.md +0 -0
  724. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_10/entry_gate.md +0 -0
  725. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_10/gate_evidence.md +0 -0
  726. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_10/helper_feasibility_decisions.md +0 -0
  727. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_10/manifest.json +0 -0
  728. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_10/opening_checkpoint_fingerprint.json +0 -0
  729. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_10/opening_checkpoint_manifest.json +0 -0
  730. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_10/rollback_conditions.md +0 -0
  731. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_11/baseline_fingerprint.json +0 -0
  732. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_11/container_representation_decisions.md +0 -0
  733. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_11/entry_criteria.md +0 -0
  734. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_11/gate_evidence.md +0 -0
  735. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_11/manifest.json +0 -0
  736. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_11/rollback_conditions.md +0 -0
  737. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_12/baseline_fingerprint.json +0 -0
  738. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_12/entry_criteria.md +0 -0
  739. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_12/gate_evidence.md +0 -0
  740. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_12/manifest.json +0 -0
  741. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_12/module_bundle_decisions.md +0 -0
  742. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_12/rollback_conditions.md +0 -0
  743. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_13/baseline_fingerprint.json +0 -0
  744. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_13/candidate_reseed.md +0 -0
  745. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_13/entry_criteria.md +0 -0
  746. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_13/gate_evidence.md +0 -0
  747. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_13/manifest.json +0 -0
  748. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_13/record_representation_decisions.md +0 -0
  749. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_13/release_fingerprint.json +0 -0
  750. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_13/rollback_conditions.md +0 -0
  751. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14/baseline_fingerprint.json +0 -0
  752. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14/breadth_and_change_budgets.md +0 -0
  753. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14/entry_criteria.md +0 -0
  754. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14/gate_evidence.md +0 -0
  755. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14/integer_divmod_decision.md +0 -0
  756. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14/manifest.json +0 -0
  757. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14/opening_evidence.md +0 -0
  758. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14/release_fingerprint.json +0 -0
  759. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14/rollback_conditions.md +0 -0
  760. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14b/baseline_fingerprint.json +0 -0
  761. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14b/breadth_and_change_budgets.md +0 -0
  762. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14b/conditional_temporary_regions_decision.md +0 -0
  763. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14b/entry_criteria.md +0 -0
  764. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14b/gate_evidence.md +0 -0
  765. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14b/manifest.json +0 -0
  766. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14b/opening_evidence.md +0 -0
  767. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14b/release_fingerprint.json +0 -0
  768. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14b/rollback_conditions.md +0 -0
  769. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14c/baseline_fingerprint.json +0 -0
  770. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14c/breadth_and_change_budgets.md +0 -0
  771. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14c/direct_keyword_calls_decision.md +0 -0
  772. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14c/entry_criteria.md +0 -0
  773. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14c/gate_evidence.md +0 -0
  774. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14c/manifest.json +0 -0
  775. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14c/opening_evidence.md +0 -0
  776. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14c/release_fingerprint.json +0 -0
  777. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14c/rollback_conditions.md +0 -0
  778. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14d/baseline_fingerprint.json +0 -0
  779. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14d/breadth_and_change_budgets.md +0 -0
  780. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14d/entry_criteria.md +0 -0
  781. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14d/gate_evidence.md +0 -0
  782. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14d/manifest.json +0 -0
  783. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14d/opening_evidence.md +0 -0
  784. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14d/release_fingerprint.json +0 -0
  785. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14d/required_keyword_only_calls_decision.md +0 -0
  786. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_14d/rollback_conditions.md +0 -0
  787. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15a/entry_criteria.md +0 -0
  788. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15a/gate_evidence.md +0 -0
  789. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15a/manifest.json +0 -0
  790. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15a/release_fingerprint.json +0 -0
  791. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15a/responsiveness_and_isolation_decision.md +0 -0
  792. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15a/rollback_conditions.md +0 -0
  793. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15b/application_shell_decision.md +0 -0
  794. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15b/entry_criteria.md +0 -0
  795. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15b/gate_evidence.md +0 -0
  796. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15b/manifest.json +0 -0
  797. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15b/release_fingerprint.json +0 -0
  798. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15b/rollback_conditions.md +0 -0
  799. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15c/entry_criteria.md +0 -0
  800. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15c/gate_evidence.md +0 -0
  801. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15c/manifest.json +0 -0
  802. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15c/release_fingerprint.json +0 -0
  803. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15c/rollback_conditions.md +0 -0
  804. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_15c/workspace_completeness_decision.md +0 -0
  805. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_2/baseline_fingerprint.json +0 -0
  806. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_2/checkpoint_a.md +0 -0
  807. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_2/laboratory_contract.md +0 -0
  808. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_2/manifest.json +0 -0
  809. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_3/baseline_fingerprint.json +0 -0
  810. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_3/gate_evidence.md +0 -0
  811. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_3/manifest.json +0 -0
  812. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_4/baseline_fingerprint.json +0 -0
  813. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_4/gate_evidence.md +0 -0
  814. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_4/manifest.json +0 -0
  815. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_5/baseline_fingerprint.json +0 -0
  816. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_5/entry_criteria.md +0 -0
  817. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_5/gate_evidence.md +0 -0
  818. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_5/manifest.json +0 -0
  819. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_6/baseline_fingerprint.json +0 -0
  820. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_6/checkpoint_b.md +0 -0
  821. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_6/entry_criteria.md +0 -0
  822. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_6/gate_evidence.md +0 -0
  823. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_6/manifest.json +0 -0
  824. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_7/baseline_fingerprint.json +0 -0
  825. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_7/entry_criteria.md +0 -0
  826. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_7/gate_evidence.md +0 -0
  827. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_7/manifest.json +0 -0
  828. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_7/rollback_conditions.md +0 -0
  829. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_8/baseline_fingerprint.json +0 -0
  830. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_8/entry_criteria.md +0 -0
  831. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_8/gate_evidence.md +0 -0
  832. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_8/manifest.json +0 -0
  833. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_8/rollback_conditions.md +0 -0
  834. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_9/baseline_fingerprint.json +0 -0
  835. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_9/entry_criteria.md +0 -0
  836. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_9/gate_evidence.md +0 -0
  837. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_9/manifest.json +0 -0
  838. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_9/rollback_conditions.md +0 -0
  839. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_minus_1/feasibility_decisions.md +0 -0
  840. {pycforge-1.0.2 → pycforge-1.0.4}/transition/phase_minus_1/risk_register.json +0 -0
  841. {pycforge-1.0.2 → pycforge-1.0.4}/transition/workspace_hardening_0_12_1/README.md +0 -0
  842. {pycforge-1.0.2 → pycforge-1.0.4}/transition/workspace_hardening_0_12_1/manifest.json +0 -0
  843. {pycforge-1.0.2 → pycforge-1.0.4}/transition/workspace_hardening_0_12_2/README.md +0 -0
  844. {pycforge-1.0.2 → pycforge-1.0.4}/transition/workspace_hardening_0_12_2/gate_evidence.md +0 -0
  845. {pycforge-1.0.2 → pycforge-1.0.4}/transition/workspace_hardening_0_12_2/manifest.json +0 -0
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.0.4 — PyPI publication refresh
4
+
5
+ Reissued the fully validated 1.0.3 package under a fresh public version for a
6
+ clean PyPI upload. The two README screenshots retain their fixed, versioned
7
+ Cloudinary PNG delivery URLs.
8
+
9
+ Advanced the package and application version to 1.0.4. Converter behavior,
10
+ generated C, Ting agents and authority, the notification correction, workspace
11
+ behavior, and all UI and dialog presentation remain unchanged from 1.0.3.
12
+
13
+ ## 1.0.3 — Reliable PyPI screenshot delivery
14
+
15
+ Replaced the two unreliable public README image addresses with fixed,
16
+ versioned Cloudinary PNG delivery URLs. Both remote objects were independently
17
+ retrieved as 1920 × 1080 PNG files and matched the packaged screenshots byte
18
+ for byte before the release was built.
19
+
20
+ Advanced the package and application version to 1.0.3. The converter, generated
21
+ C, Ting agents and authority, notification fix, workspace, and every other UI
22
+ or dialog behavior remain unchanged from 1.0.2.
23
+
3
24
  ## 1.0.2 — Focused presentation and notification polish
4
25
 
5
26
  Replaced the former release-contract-heavy README with a shorter public guide
@@ -1,6 +1,6 @@
1
1
  # PyCForge Current Contract Index
2
2
 
3
- Current candidate: `1.0.2` / Focused Public Presentation and Notification Polish
3
+ Current candidate: `1.0.4` / PyPI Publication Refresh
4
4
  Release state: locally validated PyPI candidate; upload pending
5
5
  Validation: 1,266 tests passed, 19 expected predecessor-custody checks skipped,
6
6
  34 Ting rulepack tests passed, and wheel/source clean-install checks passed
@@ -20,7 +20,7 @@ and exposes no compiler, assembler, linker, loader, runner, debugger, terminal,
20
20
  toolchain, plugin, project explorer, external-command surface, or generated-C
21
21
  editor. Generated C remains read-only and explicit-save-only.
22
22
 
23
- The 1.0.2 package retains the 1.0.1 fixed function-local numeric and Boolean
23
+ The 1.0.4 package retains the 1.0.1 fixed function-local numeric and Boolean
24
24
  set profile with
25
25
  once-evaluated bounded `in`/`not in` membership. It also adds authenticated
26
26
  membership facts and 1.0.1 rules, Python-only function folding and subtle
@@ -106,7 +106,7 @@ below own the active successor boundary.
106
106
  ## Release lineage and custody
107
107
 
108
108
  Phase 16 `0.16.0` is implemented, validated, promoted, and sealed.
109
- PyCForge 1.0.2 retains those base schemas, renderer, and individually versioned
109
+ PyCForge 1.0.4 retains those base schemas, renderer, and individually versioned
110
110
  1.0.1 set rules while refining public presentation and notification behavior.
111
111
  PyCForge 0.16.3 added installed Help
112
112
  and workspace usability; 0.16.2 repaired the virtual-EOF
@@ -135,7 +135,7 @@ party separately builds and runs the generated C outside PyCForge.
135
135
 
136
136
  | Surface | Active identity | Authority |
137
137
  |---|---|---|
138
- | package | `1.0.2` | `pyproject.toml` |
138
+ | package | `1.0.4` | `pyproject.toml` |
139
139
  | converter contract | `0.16.0` | `pycforge/converter/contracts/versions.py` |
140
140
  | rule set | `phase16-scope-loop-file-v0.16.0` | `pycforge/converter/contracts/configuration.py` |
141
141
  | set rules | `pycforge101.container.set_literal@1.0.1`; `pycforge101.container.set_membership@1.0.1` | `pycforge/converter/analysis/planning.py` |
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pycforge
3
- Version: 1.0.2
3
+ Version: 1.0.4
4
4
  Summary: Deterministic bounded Python-to-C source transpiler
5
5
  License-Expression: GPL-3.0-only
6
6
  Project-URL: Homepage, https://pypi.org/project/pycforge/
@@ -32,7 +32,7 @@ workspace, command-line tools, and a Python API. It converts its documented,
32
32
  typed Python subset into readable C11 source. Unsupported input is rejected
33
33
  with clear diagnostics instead of being guessed or silently changed.
34
34
 
35
- ![PyCForge 1.0.2 workspace](https://i.ibb.co/wr4g4FgT/pcf-main.png)
35
+ ![PyCForge workspace](https://res.cloudinary.com/vppzdwxg/image/upload/v1789348864/pcf_main.png)
36
36
 
37
37
  ## Install, upgrade, and open
38
38
 
@@ -115,7 +115,7 @@ Ting currently operates in **shadow evaluation** mode. Its feedback can help
115
115
  review a conversion, but it never changes, approves, blocks, or publishes the
116
116
  generated C.
117
117
 
118
- ![PyCForge Ting agent feedback](https://i.ibb.co/TqN9zv64/pcf-ting-agents.png)
118
+ ![PyCForge Ting agent feedback](https://res.cloudinary.com/vppzdwxg/image/upload/v1789349066/pcf_ting_agents.png)
119
119
 
120
120
  ## Built-in help and documentation
121
121
 
@@ -175,12 +175,14 @@ that Python, and it does not compile, link, load, or run the generated C. Review
175
175
  the built-in **Safety and limits** page before using generated code in another
176
176
  build system.
177
177
 
178
- ## PyCForge 1.0.2
178
+ ## PyCForge 1.0.4
179
179
 
180
- Version 1.0.2 presents a shorter feature-focused README with current workspace
181
- and Ting feedback images. It also makes the close control in the top
182
- notification banner follow the notification's information, success, warning,
183
- or error color while leaving the rest of the reviewed interface unchanged.
180
+ Version 1.0.4 carries forward the reviewed 1.0.3 interface and documentation,
181
+ including both fixed, versioned PNG delivery URLs. This is a packaging-only
182
+ release; converter behavior, generated C, Ting agents, and the UI are unchanged.
183
+ Version 1.0.2 made the close control in the top notification banner follow the
184
+ notification's information, success, warning, or error color while leaving the
185
+ rest of the reviewed interface unchanged.
184
186
 
185
187
  ## License
186
188
 
@@ -1,17 +1,17 @@
1
- # PyCForge 1.0.2 PyPI Release Procedure
1
+ # PyCForge 1.0.4 PyPI Release Procedure
2
2
 
3
3
  This procedure is intentionally PyPI-only. It assumes the candidate is a local
4
4
  source archive and does not require a source-hosting service.
5
5
 
6
6
  ## Upload the validated files from iSH on iPhone
7
7
 
8
- Place only `pycforge-1.0.2-py3-none-any.whl` and
9
- `pycforge-1.0.2.tar.gz` in the iSH upload directory. Then run:
8
+ Place only `pycforge-1.0.4-py3-none-any.whl` and
9
+ `pycforge-1.0.4.tar.gz` in the iSH upload directory. Then run:
10
10
 
11
11
  ```sh
12
12
  python3 -m pip install --upgrade twine
13
- python3 -m twine check pycforge-1.0.2-py3-none-any.whl pycforge-1.0.2.tar.gz
14
- python3 -m twine upload pycforge-1.0.2-py3-none-any.whl pycforge-1.0.2.tar.gz
13
+ python3 -m twine check pycforge-1.0.4-py3-none-any.whl pycforge-1.0.4.tar.gz
14
+ python3 -m twine upload pycforge-1.0.4-py3-none-any.whl pycforge-1.0.4.tar.gz
15
15
  ```
16
16
 
17
17
  At the prompts, use `__token__` as the username and the complete PyPI API token
@@ -23,7 +23,7 @@ README, checksum file, or shell history.
23
23
 
24
24
  1. Install 64-bit CPython 3.12 from python.org and enable the Python Launcher.
25
25
  2. Open PowerShell in the folder containing the separately supplied
26
- `pycforge-1.0.2-py3-none-any.whl` and `pycforge-1.0.2.tar.gz` files. The
26
+ `pycforge-1.0.4-py3-none-any.whl` and `pycforge-1.0.4.tar.gz` files. The
27
27
  source archive does not contain the wheel.
28
28
  3. Confirm which interpreter will be used:
29
29
 
@@ -35,11 +35,11 @@ README, checksum file, or shell history.
35
35
  4. Record both hashes before installation:
36
36
 
37
37
  ```powershell
38
- Get-FileHash .\pycforge-1.0.2-py3-none-any.whl -Algorithm SHA256
39
- Get-FileHash .\pycforge-1.0.2.tar.gz -Algorithm SHA256
38
+ Get-FileHash .\pycforge-1.0.4-py3-none-any.whl -Algorithm SHA256
39
+ Get-FileHash .\pycforge-1.0.4.tar.gz -Algorithm SHA256
40
40
  ```
41
41
 
42
- Record the exact 1.0.2 candidate checksum in the final review. It must match
42
+ Record the exact 1.0.4 candidate checksum in the final review. It must match
43
43
  the archive selected for installation and any later authorized upload.
44
44
 
45
45
  5. Create a dedicated environment and install the wheel. This avoids a source
@@ -48,7 +48,7 @@ README, checksum file, or shell history.
48
48
  ```powershell
49
49
  py -3.12 -m venv .venv
50
50
  .\.venv\Scripts\python.exe -m pip install --upgrade pip
51
- .\.venv\Scripts\python.exe -m pip install --no-cache-dir .\pycforge-1.0.2-py3-none-any.whl
51
+ .\.venv\Scripts\python.exe -m pip install --no-cache-dir .\pycforge-1.0.4-py3-none-any.whl
52
52
  ```
53
53
 
54
54
  6. Verify the installed package and both entry points:
@@ -60,7 +60,7 @@ README, checksum file, or shell history.
60
60
  .\.venv\Scripts\python.exe -m pycforge.ide
61
61
  ```
62
62
 
63
- The version command must print `1.0.2`. In the desktop application, press
63
+ The version command must print `1.0.4`. In the desktop application, press
64
64
  F1 and confirm that the classified Help dialog opens without a browser.
65
65
 
66
66
  If PowerShell blocks script files, the commands above still work because they
@@ -78,8 +78,8 @@ the exact build backend and runtime dependency wheels locally, then use
78
78
  Extract into a new directory, preserving the original archive:
79
79
 
80
80
  ```powershell
81
- tar -xf .\pycforge-1.0.2.tar.gz
82
- Set-Location .\pycforge-1.0.2
81
+ tar -xf .\pycforge-1.0.4.tar.gz
82
+ Set-Location .\pycforge-1.0.4
83
83
  py -3.12 -m venv .venv-review
84
84
  .\.venv-review\Scripts\python.exe -m pip install --upgrade pip
85
85
  .\.venv-review\Scripts\python.exe -m pip install -e .
@@ -207,7 +207,7 @@ frozen converter.
207
207
  Never reuse a populated release directory.
208
208
 
209
209
  ```powershell
210
- $ReleaseDir = Join-Path $PWD "dist-candidate-1.0.2"
210
+ $ReleaseDir = Join-Path $PWD "dist-candidate-1.0.4"
211
211
  if (Test-Path $ReleaseDir) { throw "Release directory already exists: $ReleaseDir" }
212
212
  New-Item -ItemType Directory -Path $ReleaseDir | Out-Null
213
213
  .\.venv-review\Scripts\python.exe -m build --sdist --wheel --outdir $ReleaseDir
@@ -216,7 +216,7 @@ New-Item -ItemType Directory -Path $ReleaseDir | Out-Null
216
216
  Get-FileHash "$ReleaseDir\*" -Algorithm SHA256
217
217
  ```
218
218
 
219
- The verifier requires exactly one 1.0.2 wheel and one 1.0.2 source archive,
219
+ The verifier requires exactly one 1.0.4 wheel and one 1.0.4 source archive,
220
220
  exact metadata and entry points, byte-identical package payloads, all Help and
221
221
  icon resources, and the complete review-support source inventory. Inspect the
222
222
  source archive and confirm that every source-tree test module is present.
@@ -229,7 +229,7 @@ than the working tree:
229
229
  ```powershell
230
230
  py -3.12 -m venv .venv-artifact
231
231
  .\.venv-artifact\Scripts\python.exe -m pip install --upgrade pip
232
- .\.venv-artifact\Scripts\python.exe -m pip install --no-cache-dir "$ReleaseDir\pycforge-1.0.2.tar.gz"
232
+ .\.venv-artifact\Scripts\python.exe -m pip install --no-cache-dir "$ReleaseDir\pycforge-1.0.4.tar.gz"
233
233
  .\.venv-artifact\Scripts\python.exe -c "import pycforge; print(pycforge.__version__)"
234
234
  .\.venv-artifact\Scripts\pycforge.exe --help
235
235
  .\.venv-artifact\Scripts\pycforge-workspace.exe
@@ -9,7 +9,7 @@ workspace, command-line tools, and a Python API. It converts its documented,
9
9
  typed Python subset into readable C11 source. Unsupported input is rejected
10
10
  with clear diagnostics instead of being guessed or silently changed.
11
11
 
12
- ![PyCForge 1.0.2 workspace](https://i.ibb.co/wr4g4FgT/pcf-main.png)
12
+ ![PyCForge workspace](https://res.cloudinary.com/vppzdwxg/image/upload/v1789348864/pcf_main.png)
13
13
 
14
14
  ## Install, upgrade, and open
15
15
 
@@ -92,7 +92,7 @@ Ting currently operates in **shadow evaluation** mode. Its feedback can help
92
92
  review a conversion, but it never changes, approves, blocks, or publishes the
93
93
  generated C.
94
94
 
95
- ![PyCForge Ting agent feedback](https://i.ibb.co/TqN9zv64/pcf-ting-agents.png)
95
+ ![PyCForge Ting agent feedback](https://res.cloudinary.com/vppzdwxg/image/upload/v1789349066/pcf_ting_agents.png)
96
96
 
97
97
  ## Built-in help and documentation
98
98
 
@@ -152,12 +152,14 @@ that Python, and it does not compile, link, load, or run the generated C. Review
152
152
  the built-in **Safety and limits** page before using generated code in another
153
153
  build system.
154
154
 
155
- ## PyCForge 1.0.2
155
+ ## PyCForge 1.0.4
156
156
 
157
- Version 1.0.2 presents a shorter feature-focused README with current workspace
158
- and Ting feedback images. It also makes the close control in the top
159
- notification banner follow the notification's information, success, warning,
160
- or error color while leaving the rest of the reviewed interface unchanged.
157
+ Version 1.0.4 carries forward the reviewed 1.0.3 interface and documentation,
158
+ including both fixed, versioned PNG delivery URLs. This is a packaging-only
159
+ release; converter behavior, generated C, Ting agents, and the UI are unchanged.
160
+ Version 1.0.2 made the close control in the top notification banner follow the
161
+ notification's information, success, warning, or error color while leaving the
162
+ rest of the reviewed interface unchanged.
161
163
 
162
164
  ## License
163
165
 
@@ -1,4 +1,29 @@
1
- # PyCForge 1.0.2
1
+ # PyCForge 1.0.4
2
+
3
+ Release: PyCForge 1.0.4.
4
+
5
+ PyCForge 1.0.4 reissues the fully validated 1.0.3 package under a fresh public
6
+ version for a clean PyPI upload. It retains both fixed, versioned Cloudinary
7
+ PNG screenshot URLs.
8
+
9
+ The package and application version advance to 1.0.4. Converter semantics,
10
+ generated C, Ting behavior and authority, workspace behavior, notification
11
+ behavior, and every other interface or dialog remain unchanged.
12
+
13
+ ## Historical 1.0.3 release notes
14
+
15
+ Release: PyCForge 1.0.3.
16
+
17
+ PyCForge 1.0.3 is a public screenshot-delivery correction. It replaces the two
18
+ unreliable README image addresses with fixed, versioned Cloudinary PNG URLs.
19
+ Both remote objects were retrieved independently as 1920 × 1080 PNG files and
20
+ matched the packaged screenshots byte for byte before the release was built.
21
+
22
+ The package and application version advance to 1.0.3. Converter semantics,
23
+ generated C, Ting behavior and authority, workspace behavior, the 1.0.2
24
+ notification correction, and every other interface or dialog remain unchanged.
25
+
26
+ ## Historical 1.0.2 release notes
2
27
 
3
28
  Release: PyCForge 1.0.2.
4
29
 
@@ -0,0 +1 @@
1
+ __version__ = "1.0.4"
@@ -38,7 +38,7 @@ validation, rendering, and conformance checks.</p>
38
38
  if it is not in the current PowerShell directory.</p>
39
39
  <pre>py -3.12 -m venv .venv
40
40
  .\.venv\Scripts\python.exe -m pip install --upgrade pip
41
- .\.venv\Scripts\python.exe -m pip install .\pycforge-1.0.2.tar.gz
41
+ .\.venv\Scripts\python.exe -m pip install .\pycforge-1.0.4.tar.gz
42
42
  .\.venv\Scripts\python.exe -m pycforge.ide</pre>
43
43
  <p>Verify the command surface and installed version:</p>
44
44
  <pre>.\.venv\Scripts\python.exe -c "import pycforge; print(pycforge.__version__)"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pycforge
3
- Version: 1.0.2
3
+ Version: 1.0.4
4
4
  Summary: Deterministic bounded Python-to-C source transpiler
5
5
  License-Expression: GPL-3.0-only
6
6
  Project-URL: Homepage, https://pypi.org/project/pycforge/
@@ -32,7 +32,7 @@ workspace, command-line tools, and a Python API. It converts its documented,
32
32
  typed Python subset into readable C11 source. Unsupported input is rejected
33
33
  with clear diagnostics instead of being guessed or silently changed.
34
34
 
35
- ![PyCForge 1.0.2 workspace](https://i.ibb.co/wr4g4FgT/pcf-main.png)
35
+ ![PyCForge workspace](https://res.cloudinary.com/vppzdwxg/image/upload/v1789348864/pcf_main.png)
36
36
 
37
37
  ## Install, upgrade, and open
38
38
 
@@ -115,7 +115,7 @@ Ting currently operates in **shadow evaluation** mode. Its feedback can help
115
115
  review a conversion, but it never changes, approves, blocks, or publishes the
116
116
  generated C.
117
117
 
118
- ![PyCForge Ting agent feedback](https://i.ibb.co/TqN9zv64/pcf-ting-agents.png)
118
+ ![PyCForge Ting agent feedback](https://res.cloudinary.com/vppzdwxg/image/upload/v1789349066/pcf_ting_agents.png)
119
119
 
120
120
  ## Built-in help and documentation
121
121
 
@@ -175,12 +175,14 @@ that Python, and it does not compile, link, load, or run the generated C. Review
175
175
  the built-in **Safety and limits** page before using generated code in another
176
176
  build system.
177
177
 
178
- ## PyCForge 1.0.2
178
+ ## PyCForge 1.0.4
179
179
 
180
- Version 1.0.2 presents a shorter feature-focused README with current workspace
181
- and Ting feedback images. It also makes the close control in the top
182
- notification banner follow the notification's information, success, warning,
183
- or error color while leaving the rest of the reviewed interface unchanged.
180
+ Version 1.0.4 carries forward the reviewed 1.0.3 interface and documentation,
181
+ including both fixed, versioned PNG delivery URLs. This is a packaging-only
182
+ release; converter behavior, generated C, Ting agents, and the UI are unchanged.
183
+ Version 1.0.2 made the close control in the top notification banner follow the
184
+ notification's information, success, warning, or error color while leaving the
185
+ rest of the reviewed interface unchanged.
184
186
 
185
187
  ## License
186
188
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pycforge"
7
- version = "1.0.2"
7
+ version = "1.0.4"
8
8
  description = "Deterministic bounded Python-to-C source transpiler"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -36,7 +36,7 @@ def run() -> int:
36
36
 
37
37
  class CheckpointEVersioningTests(unittest.TestCase):
38
38
  def test_phase16_advances_while_explicit_phase14d_output_stays_frozen(self) -> None:
39
- self.assertEqual(__version__, "1.0.2")
39
+ self.assertEqual(__version__, "1.0.4")
40
40
  self.assertEqual(CONVERTER_CONTRACT_VERSION, "0.16.0")
41
41
  self.assertEqual(WORKSPACE_CONTRACT_VERSION, "pycforge-workspace/0.7")
42
42
 
@@ -57,6 +57,8 @@ class Phase10OpeningCheckpointTests(unittest.TestCase):
57
57
  "0.16.3",
58
58
  "1.0.1",
59
59
  "1.0.2",
60
+ "1.0.3",
61
+ "1.0.4",
60
62
  },
61
63
  )
62
64
  roadmap = ROOT / "docs/python_to_c_converter_architecture_revision_3_1.txt"
@@ -63,8 +63,8 @@ ROOT = Path(__file__).resolve().parents[1]
63
63
 
64
64
  class ReleaseMetadataAndPhase122CustodyTests(unittest.TestCase):
65
65
  def test_active_package_and_converter_are_phase16_while_workspace_stays_phase15c(self) -> None:
66
- self.assertEqual(__version__, "1.0.2")
67
- self.assertIn('version = "1.0.2"', (ROOT / "pyproject.toml").read_text())
66
+ self.assertEqual(__version__, "1.0.4")
67
+ self.assertIn('version = "1.0.4"', (ROOT / "pyproject.toml").read_text())
68
68
  self.assertEqual(CONVERTER_CONTRACT_VERSION, "0.16.0")
69
69
  self.assertEqual(WORKSPACE_CONTRACT_VERSION, "pycforge-workspace/0.7")
70
70
 
@@ -74,7 +74,7 @@ class ReleaseMetadataAndPhase122CustodyTests(unittest.TestCase):
74
74
  "pycforge-workspace/0.6",
75
75
  )
76
76
  workspace_state = (ROOT / "CURRENT_STATE.md").read_text(encoding="utf-8")
77
- self.assertIn("Current candidate: `1.0.2`", workspace_state)
77
+ self.assertIn("Current candidate: `1.0.4`", workspace_state)
78
78
  self.assertIn("PySide6", workspace_state)
79
79
 
80
80
  self.assertTrue((ROOT / "specifications/static_records.md").is_file())
@@ -45,7 +45,7 @@ class Phase13ContractTests(unittest.TestCase):
45
45
  def test_active_phase16_identities_are_explicit_and_record_contracts_stay_frozen(self) -> None:
46
46
  request = ConversionRequest.from_source("def run() -> int:\n return 1\n")
47
47
 
48
- self.assertEqual(__version__, "1.0.2")
48
+ self.assertEqual(__version__, "1.0.4")
49
49
  self.assertEqual(
50
50
  request.rule_set_version,
51
51
  "phase16-scope-loop-file-v0.16.0",
@@ -42,7 +42,7 @@ class Phase14NumericContractTests(unittest.TestCase):
42
42
  def test_active_phase16_identities_are_explicit_and_additive(self) -> None:
43
43
  request = ConversionRequest.from_source("def run() -> int:\n return 1\n")
44
44
 
45
- self.assertEqual(__version__, "1.0.2")
45
+ self.assertEqual(__version__, "1.0.4")
46
46
  self.assertEqual(
47
47
  request.rule_set_version,
48
48
  "phase16-scope-loop-file-v0.16.0",
@@ -74,7 +74,7 @@ class Phase14BConditionalContractTests(unittest.TestCase):
74
74
  def test_active_phase16_identities_are_exact_and_additive(self) -> None:
75
75
  request = ConversionRequest.from_source("def run() -> int:\n return 1\n")
76
76
 
77
- self.assertEqual(__version__, "1.0.2")
77
+ self.assertEqual(__version__, "1.0.4")
78
78
  self.assertEqual(
79
79
  DEFAULT_RULE_SET,
80
80
  "phase16-scope-loop-file-v0.16.0",
@@ -78,7 +78,7 @@ class Phase14CKeywordContractTests(unittest.TestCase):
78
78
  def test_active_phase16_identities_are_exact_and_cumulative(self) -> None:
79
79
  request = ConversionRequest.from_source("def run() -> int:\n return 1\n")
80
80
 
81
- self.assertEqual(__version__, "1.0.2")
81
+ self.assertEqual(__version__, "1.0.4")
82
82
  self.assertEqual(
83
83
  DEFAULT_RULE_SET,
84
84
  "phase16-scope-loop-file-v0.16.0",
@@ -111,7 +111,7 @@ class Phase14DKeywordOnlyContractTests(unittest.TestCase):
111
111
  def test_active_identities_are_exact_and_cumulative(self) -> None:
112
112
  request = ConversionRequest.from_source("def run() -> int:\n return 1\n")
113
113
 
114
- self.assertEqual(__version__, "1.0.2")
114
+ self.assertEqual(__version__, "1.0.4")
115
115
  self.assertEqual(
116
116
  DEFAULT_RULE_SET,
117
117
  "phase16-scope-loop-file-v0.16.0",
@@ -55,8 +55,8 @@ class Phase15AMetadataTests(unittest.TestCase):
55
55
  project = tomllib.loads(
56
56
  (ROOT / "pyproject.toml").read_text(encoding="utf-8")
57
57
  )
58
- self.assertEqual(project["project"]["version"], "1.0.2")
59
- self.assertEqual(__version__, "1.0.2")
58
+ self.assertEqual(project["project"]["version"], "1.0.4")
59
+ self.assertEqual(__version__, "1.0.4")
60
60
  self.assertEqual(CONVERTER_CONTRACT_VERSION, "0.16.0")
61
61
  self.assertEqual(WORKSPACE_CONTRACT_VERSION, "pycforge-workspace/0.7")
62
62
  self.assertEqual(PROTOCOL_SCHEMA, "pycforge.worker-protocol/0.2")
@@ -24,11 +24,11 @@ from tools.verify_public_distribution import ( # noqa: E402
24
24
  ROOT = Path(__file__).resolve().parents[1]
25
25
 
26
26
 
27
- class Release102PresentationTests(unittest.TestCase):
27
+ class Release104PresentationTests(unittest.TestCase):
28
28
  @classmethod
29
29
  def setUpClass(cls) -> None:
30
30
  cls.app = QApplication.instance() or QApplication(
31
- ["pycforge-release-1.0.2-presentation"]
31
+ ["pycforge-release-1.0.4-presentation"]
32
32
  )
33
33
  apply_pycforge_theme(cls.app)
34
34
 
@@ -46,6 +46,11 @@ class Release102PresentationTests(unittest.TestCase):
46
46
  self.assertIn(text, readme)
47
47
  for screenshot_url in EXPECTED_SCREENSHOT_URLS:
48
48
  self.assertEqual(readme.count(screenshot_url), 1)
49
+ self.assertTrue(screenshot_url.startswith("https://res.cloudinary.com/"))
50
+ self.assertIn("/image/upload/v", screenshot_url)
51
+ self.assertTrue(screenshot_url.endswith(".png"))
52
+ self.assertNotIn("f_auto", screenshot_url)
53
+ self.assertNotIn("q_auto", screenshot_url)
49
54
 
50
55
  def test_readme_screenshots_are_lossless_and_below_one_megabyte(self) -> None:
51
56
  for relative in EXPECTED_SCREENSHOTS:
@@ -51,7 +51,7 @@ ROOT = Path(__file__).resolve().parents[1]
51
51
 
52
52
  class ReleaseContract0163Tests(unittest.TestCase):
53
53
  def test_package_advances_only_workspace_contracts(self) -> None:
54
- self.assertEqual(__version__, "1.0.2")
54
+ self.assertEqual(__version__, "1.0.4")
55
55
  self.assertEqual(CONVERTER_CONTRACT_VERSION, "0.16.0")
56
56
  self.assertEqual(DEFAULT_RULE_SET, "phase16-scope-loop-file-v0.16.0")
57
57
  self.assertEqual(DEFAULT_RENDERER, "c-renderer-v0.16.0")
@@ -104,7 +104,7 @@ class ReleaseContract0163Tests(unittest.TestCase):
104
104
  project = tomllib.loads(
105
105
  (ROOT / "pyproject.toml").read_text(encoding="utf-8")
106
106
  )["project"]
107
- self.assertEqual(project["version"], "1.0.2")
107
+ self.assertEqual(project["version"], "1.0.4")
108
108
  urls = project["urls"]
109
109
  self.assertTrue(urls)
110
110
  self.assertTrue(
@@ -52,8 +52,8 @@ class SetConversion101Tests(unittest.TestCase):
52
52
  project = tomllib.loads(
53
53
  (ROOT / "pyproject.toml").read_text(encoding="utf-8")
54
54
  )
55
- self.assertEqual(__version__, "1.0.2")
56
- self.assertEqual(project["project"]["version"], "1.0.2")
55
+ self.assertEqual(__version__, "1.0.4")
56
+ self.assertEqual(project["project"]["version"], "1.0.4")
57
57
 
58
58
  def test_integer_membership_is_a_bounded_const_array_search(self) -> None:
59
59
  result = convert(
@@ -70,8 +70,8 @@ class CheckpointEValidatorTests(unittest.TestCase):
70
70
  report = audit_checkpoint_metadata(ROOT)
71
71
 
72
72
  self.assertFalse(report["passed"])
73
- self.assertEqual(report["package_version"], "1.0.2")
74
- self.assertEqual(report["project_version"], "1.0.2")
73
+ self.assertEqual(report["package_version"], "1.0.4")
74
+ self.assertEqual(report["project_version"], "1.0.4")
75
75
  self.assertEqual(
76
76
  report["converter_contract_version"],
77
77
  "0.16.0",
@@ -212,7 +212,7 @@ class CheckpointEValidatorTests(unittest.TestCase):
212
212
  self.assertTrue(report["sealed_predecessor"]["passed"])
213
213
  metadata = report["metadata_roadmap_feature_matrix"]
214
214
  self.assertFalse(metadata["passed"])
215
- self.assertEqual(metadata["package_version"], "1.0.2")
215
+ self.assertEqual(metadata["package_version"], "1.0.4")
216
216
  self.assertEqual(metadata["converter_contract_version"], "0.16.0")
217
217
  self.assertEqual(
218
218
  metadata["workspace_contract"],
@@ -27,7 +27,7 @@ class Phase16ReleaseValidatorTests(unittest.TestCase):
27
27
  trace = validator.audit_decision_trace_schema()
28
28
 
29
29
  self.assertTrue(identities["passed"], identities["errors"])
30
- self.assertEqual(validator.EXPECTED_PACKAGE_VERSION, "1.0.2")
30
+ self.assertEqual(validator.EXPECTED_PACKAGE_VERSION, "1.0.4")
31
31
  self.assertEqual(
32
32
  identities["contracts"],
33
33
  dict(validator.EXPECTED_ACTIVE_CONTRACTS),
@@ -167,8 +167,8 @@ class PyCForgeValidatorPureTests(unittest.TestCase):
167
167
  def test_sealed_0122_validator_refuses_the_active_phase16_tree(self) -> None:
168
168
  errors = validate_tree(ROOT, converter_smoke=False)
169
169
  self.assertEqual(errors, validate_tree(ROOT, converter_smoke=False))
170
- self.assertEqual(__version__, "1.0.2")
171
- self.assertIn("imported version is '1.0.2'", errors)
170
+ self.assertEqual(__version__, "1.0.4")
171
+ self.assertIn("imported version is '1.0.4'", errors)
172
172
  self.assertIn(
173
173
  "frozen converter contracts: 'c_ir' is 'c-ir/0.16.0', expected 'c-ir/0.12'",
174
174
  errors,
@@ -129,7 +129,7 @@ from tools import ( # noqa: E402
129
129
 
130
130
 
131
131
  VALIDATION_SCHEMA = "pycforge.phase16-release-validation/0.16.0"
132
- EXPECTED_PACKAGE_VERSION = "1.0.2"
132
+ EXPECTED_PACKAGE_VERSION = "1.0.4"
133
133
  EXPECTED_PHASE16_HELPER_REGISTRY_SHA256 = (
134
134
  "ce56481ecdc2c77a4732147dbe1f08b6b17736c87907e5c898e2c005fec85229"
135
135
  )
@@ -151,7 +151,7 @@ EXPECTED_FILE_ASSET_SHA256 = {
151
151
  ),
152
152
  }
153
153
  EXPECTED_ACTIVE_CONTRACTS: Mapping[str, object] = {
154
- "package": "1.0.2",
154
+ "package": "1.0.4",
155
155
  "converter": "0.16.0",
156
156
  "source_bundle": "source-bundle/0.2",
157
157
  "python_ir": "python-ir/0.4",
@@ -36,9 +36,13 @@ EXPECTED_SCREENSHOT = Path("docs/images/pycforge-workspace-1.0.2.png")
36
36
  EXPECTED_TING_SCREENSHOT = Path(
37
37
  "docs/images/pycforge-ting-agents-1.0.2.png"
38
38
  )
39
- EXPECTED_SCREENSHOT_URL = "https://i.ibb.co/wr4g4FgT/pcf-main.png"
39
+ EXPECTED_SCREENSHOT_URL = (
40
+ "https://res.cloudinary.com/vppzdwxg/image/upload/"
41
+ "v1789348864/pcf_main.png"
42
+ )
40
43
  EXPECTED_TING_SCREENSHOT_URL = (
41
- "https://i.ibb.co/TqN9zv64/pcf-ting-agents.png"
44
+ "https://res.cloudinary.com/vppzdwxg/image/upload/"
45
+ "v1789349066/pcf_ting_agents.png"
42
46
  )
43
47
  EXPECTED_SCREENSHOTS = (EXPECTED_SCREENSHOT, EXPECTED_TING_SCREENSHOT)
44
48
  EXPECTED_SCREENSHOT_URLS = (
@@ -155,6 +159,17 @@ def _verify_public_readme(payload: bytes) -> None:
155
159
  raise DistributionVerificationError(
156
160
  f"README.md is missing required release content: {missing}"
157
161
  )
162
+ for url in EXPECTED_SCREENSHOT_URLS:
163
+ if not (
164
+ url.startswith("https://res.cloudinary.com/")
165
+ and "/image/upload/v" in url
166
+ and url.endswith(".png")
167
+ and "f_auto" not in url
168
+ and "q_auto" not in url
169
+ ):
170
+ raise DistributionVerificationError(
171
+ f"README.md screenshot URL is not fixed and versioned: {url}"
172
+ )
158
173
  for screenshot in EXPECTED_SCREENSHOTS:
159
174
  asset = ROOT / screenshot
160
175
  if not asset.is_file() or not asset.read_bytes().startswith(
@@ -1 +0,0 @@
1
- __version__ = "1.0.2"
File without changes
File without changes
File without changes
File without changes