pycforge 0.15.2__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 (230) hide show
  1. pycforge-0.15.2/CHANGELOG.md +503 -0
  2. pycforge-0.15.2/CURRENT_STATE.md +251 -0
  3. pycforge-0.15.2/LICENSE +674 -0
  4. pycforge-0.15.2/MANIFEST.in +16 -0
  5. pycforge-0.15.2/PKG-INFO +209 -0
  6. pycforge-0.15.2/README.md +185 -0
  7. pycforge-0.15.2/RELEASE_NOTES.md +51 -0
  8. pycforge-0.15.2/pycforge/__init__.py +8 -0
  9. pycforge-0.15.2/pycforge/__main__.py +2 -0
  10. pycforge-0.15.2/pycforge/_version.py +1 -0
  11. pycforge-0.15.2/pycforge/converter/__init__.py +0 -0
  12. pycforge-0.15.2/pycforge/converter/analysis/__init__.py +5 -0
  13. pycforge-0.15.2/pycforge/converter/analysis/functions.py +723 -0
  14. pycforge-0.15.2/pycforge/converter/analysis/model.py +158 -0
  15. pycforge-0.15.2/pycforge/converter/analysis/planning.py +464 -0
  16. pycforge-0.15.2/pycforge/converter/analysis/stage.py +1976 -0
  17. pycforge-0.15.2/pycforge/converter/analysis/symbols.py +237 -0
  18. pycforge-0.15.2/pycforge/converter/analysis/validation.py +2166 -0
  19. pycforge-0.15.2/pycforge/converter/c_output/__init__.py +2 -0
  20. pycforge-0.15.2/pycforge/converter/c_output/conformance.py +297 -0
  21. pycforge-0.15.2/pycforge/converter/c_output/renderer.py +220 -0
  22. pycforge-0.15.2/pycforge/converter/conditional_regions/__init__.py +71 -0
  23. pycforge-0.15.2/pycforge/converter/conditional_regions/analysis.py +481 -0
  24. pycforge-0.15.2/pycforge/converter/conditional_regions/lowering.py +579 -0
  25. pycforge-0.15.2/pycforge/converter/conditional_regions/model.py +243 -0
  26. pycforge-0.15.2/pycforge/converter/conditional_regions/validation.py +690 -0
  27. pycforge-0.15.2/pycforge/converter/containers/__init__.py +19 -0
  28. pycforge-0.15.2/pycforge/converter/containers/analysis.py +542 -0
  29. pycforge-0.15.2/pycforge/converter/containers/lowering.py +290 -0
  30. pycforge-0.15.2/pycforge/converter/containers/model.py +146 -0
  31. pycforge-0.15.2/pycforge/converter/contracts/__init__.py +0 -0
  32. pycforge-0.15.2/pycforge/converter/contracts/configuration.py +178 -0
  33. pycforge-0.15.2/pycforge/converter/contracts/identifiers.py +68 -0
  34. pycforge-0.15.2/pycforge/converter/contracts/versions.py +71 -0
  35. pycforge-0.15.2/pycforge/converter/core/__init__.py +0 -0
  36. pycforge-0.15.2/pycforge/converter/core/artifact_io.py +87 -0
  37. pycforge-0.15.2/pycforge/converter/core/cancellation.py +7 -0
  38. pycforge-0.15.2/pycforge/converter/core/canonicalization.py +254 -0
  39. pycforge-0.15.2/pycforge/converter/core/context.py +13 -0
  40. pycforge-0.15.2/pycforge/converter/core/diagnostics.py +95 -0
  41. pycforge-0.15.2/pycforge/converter/core/enums.py +23 -0
  42. pycforge-0.15.2/pycforge/converter/core/fingerprint.py +22 -0
  43. pycforge-0.15.2/pycforge/converter/core/pipeline.py +8 -0
  44. pycforge-0.15.2/pycforge/converter/core/progress.py +25 -0
  45. pycforge-0.15.2/pycforge/converter/core/request.py +50 -0
  46. pycforge-0.15.2/pycforge/converter/core/resource_policy.py +31 -0
  47. pycforge-0.15.2/pycforge/converter/core/result.py +23 -0
  48. pycforge-0.15.2/pycforge/converter/core/serialization.py +36 -0
  49. pycforge-0.15.2/pycforge/converter/core/stage.py +10 -0
  50. pycforge-0.15.2/pycforge/converter/core/stage_artifact.py +80 -0
  51. pycforge-0.15.2/pycforge/converter/core/stage_outcome.py +15 -0
  52. pycforge-0.15.2/pycforge/converter/decision_trace/__init__.py +0 -0
  53. pycforge-0.15.2/pycforge/converter/decision_trace/recorder.py +52 -0
  54. pycforge-0.15.2/pycforge/converter/facade.py +459 -0
  55. pycforge-0.15.2/pycforge/converter/frontend/__init__.py +4 -0
  56. pycforge-0.15.2/pycforge/converter/frontend/normalizer.py +59 -0
  57. pycforge-0.15.2/pycforge/converter/frontend/parser.py +20 -0
  58. pycforge-0.15.2/pycforge/converter/frontend/source_document.py +93 -0
  59. pycforge-0.15.2/pycforge/converter/frontend/stages.py +518 -0
  60. pycforge-0.15.2/pycforge/converter/frontend/validation.py +76 -0
  61. pycforge-0.15.2/pycforge/converter/io/__init__.py +0 -0
  62. pycforge-0.15.2/pycforge/converter/io/atomic_writer.py +33 -0
  63. pycforge-0.15.2/pycforge/converter/ir/__init__.py +1 -0
  64. pycforge-0.15.2/pycforge/converter/ir/c_ir/__init__.py +4 -0
  65. pycforge-0.15.2/pycforge/converter/ir/c_ir/builder.py +26 -0
  66. pycforge-0.15.2/pycforge/converter/ir/c_ir/model.py +318 -0
  67. pycforge-0.15.2/pycforge/converter/ir/c_ir/serialization.py +88 -0
  68. pycforge-0.15.2/pycforge/converter/ir/c_ir/validation.py +834 -0
  69. pycforge-0.15.2/pycforge/converter/ir/python_ir/__init__.py +17 -0
  70. pycforge-0.15.2/pycforge/converter/ir/python_ir/nodes.py +86 -0
  71. pycforge-0.15.2/pycforge/converter/keyword_calls/__init__.py +68 -0
  72. pycforge-0.15.2/pycforge/converter/keyword_calls/analysis.py +458 -0
  73. pycforge-0.15.2/pycforge/converter/keyword_calls/lowering.py +271 -0
  74. pycforge-0.15.2/pycforge/converter/keyword_calls/model.py +304 -0
  75. pycforge-0.15.2/pycforge/converter/keyword_calls/validation.py +802 -0
  76. pycforge-0.15.2/pycforge/converter/keyword_only_calls/__init__.py +68 -0
  77. pycforge-0.15.2/pycforge/converter/keyword_only_calls/analysis.py +640 -0
  78. pycforge-0.15.2/pycforge/converter/keyword_only_calls/lowering.py +376 -0
  79. pycforge-0.15.2/pycforge/converter/keyword_only_calls/model.py +328 -0
  80. pycforge-0.15.2/pycforge/converter/keyword_only_calls/validation.py +1357 -0
  81. pycforge-0.15.2/pycforge/converter/lowering.py +1000 -0
  82. pycforge-0.15.2/pycforge/converter/modules/__init__.py +13 -0
  83. pycforge-0.15.2/pycforge/converter/modules/analysis.py +1250 -0
  84. pycforge-0.15.2/pycforge/converter/modules/lowering.py +200 -0
  85. pycforge-0.15.2/pycforge/converter/modules/model.py +73 -0
  86. pycforge-0.15.2/pycforge/converter/modules/stage.py +192 -0
  87. pycforge-0.15.2/pycforge/converter/numeric_semantics/__init__.py +23 -0
  88. pycforge-0.15.2/pycforge/converter/numeric_semantics/analysis.py +420 -0
  89. pycforge-0.15.2/pycforge/converter/numeric_semantics/lowering.py +153 -0
  90. pycforge-0.15.2/pycforge/converter/numeric_semantics/model.py +123 -0
  91. pycforge-0.15.2/pycforge/converter/records/__init__.py +34 -0
  92. pycforge-0.15.2/pycforge/converter/records/analysis.py +1394 -0
  93. pycforge-0.15.2/pycforge/converter/records/lowering.py +393 -0
  94. pycforge-0.15.2/pycforge/converter/records/model.py +319 -0
  95. pycforge-0.15.2/pycforge/converter/rules/__init__.py +3 -0
  96. pycforge-0.15.2/pycforge/converter/support_templates/__init__.py +49 -0
  97. pycforge-0.15.2/pycforge/converter/support_templates/assembly.py +106 -0
  98. pycforge-0.15.2/pycforge/converter/support_templates/factories.py +348 -0
  99. pycforge-0.15.2/pycforge/converter/support_templates/model.py +159 -0
  100. pycforge-0.15.2/pycforge/converter/support_templates/registry.py +388 -0
  101. pycforge-0.15.2/pycforge/converter/telemetry/__init__.py +0 -0
  102. pycforge-0.15.2/pycforge/converter/telemetry/sink.py +39 -0
  103. pycforge-0.15.2/pycforge/ide/__init__.py +19 -0
  104. pycforge-0.15.2/pycforge/ide/__main__.py +5 -0
  105. pycforge-0.15.2/pycforge/ide/_worker_event_codec.py +276 -0
  106. pycforge-0.15.2/pycforge/ide/_worker_protocol_json.py +197 -0
  107. pycforge-0.15.2/pycforge/ide/_worker_protocol_types.py +90 -0
  108. pycforge-0.15.2/pycforge/ide/_worker_request_codec.py +200 -0
  109. pycforge-0.15.2/pycforge/ide/_worker_request_data.py +260 -0
  110. pycforge-0.15.2/pycforge/ide/_worker_result_data.py +343 -0
  111. pycforge-0.15.2/pycforge/ide/action_contract.py +469 -0
  112. pycforge-0.15.2/pycforge/ide/action_validation.py +229 -0
  113. pycforge-0.15.2/pycforge/ide/command_palette.py +223 -0
  114. pycforge-0.15.2/pycforge/ide/controller.py +904 -0
  115. pycforge-0.15.2/pycforge/ide/controller_conversion.py +546 -0
  116. pycforge-0.15.2/pycforge/ide/controller_io.py +205 -0
  117. pycforge-0.15.2/pycforge/ide/editor.py +951 -0
  118. pycforge-0.15.2/pycforge/ide/editor_commands_qt.py +274 -0
  119. pycforge-0.15.2/pycforge/ide/editor_lexical.py +43 -0
  120. pycforge-0.15.2/pycforge/ide/editor_sidebars.py +236 -0
  121. pycforge-0.15.2/pycforge/ide/editor_syntax.py +243 -0
  122. pycforge-0.15.2/pycforge/ide/find_replace.py +535 -0
  123. pycforge-0.15.2/pycforge/ide/icons.py +91 -0
  124. pycforge-0.15.2/pycforge/ide/io_service.py +196 -0
  125. pycforge-0.15.2/pycforge/ide/model.py +164 -0
  126. pycforge-0.15.2/pycforge/ide/panels.py +903 -0
  127. pycforge-0.15.2/pycforge/ide/positions.py +220 -0
  128. pycforge-0.15.2/pycforge/ide/process_worker.py +130 -0
  129. pycforge-0.15.2/pycforge/ide/qt.py +230 -0
  130. pycforge-0.15.2/pycforge/ide/qt_actions.py +418 -0
  131. pycforge-0.15.2/pycforge/ide/qt_close.py +169 -0
  132. pycforge-0.15.2/pycforge/ide/qt_command_palette.py +297 -0
  133. pycforge-0.15.2/pycforge/ide/qt_contract.py +220 -0
  134. pycforge-0.15.2/pycforge/ide/qt_documents.py +590 -0
  135. pycforge-0.15.2/pycforge/ide/qt_editor_buffers.py +113 -0
  136. pycforge-0.15.2/pycforge/ide/qt_editor_surfaces.py +112 -0
  137. pycforge-0.15.2/pycforge/ide/qt_menus.py +324 -0
  138. pycforge-0.15.2/pycforge/ide/qt_projection.py +500 -0
  139. pycforge-0.15.2/pycforge/ide/qt_shell.py +348 -0
  140. pycforge-0.15.2/pycforge/ide/qt_shell_interactions.py +320 -0
  141. pycforge-0.15.2/pycforge/ide/qt_state.py +393 -0
  142. pycforge-0.15.2/pycforge/ide/qt_workspace_features.py +398 -0
  143. pycforge-0.15.2/pycforge/ide/qt_workspace_navigation.py +208 -0
  144. pycforge-0.15.2/pycforge/ide/qt_workspace_observers.py +173 -0
  145. pycforge-0.15.2/pycforge/ide/qt_workspace_panels.py +545 -0
  146. pycforge-0.15.2/pycforge/ide/qt_workspace_widgets.py +228 -0
  147. pycforge-0.15.2/pycforge/ide/resources/icons/about.svg +1 -0
  148. pycforge-0.15.2/pycforge/ide/resources/icons/add-document.svg +1 -0
  149. pycforge-0.15.2/pycforge/ide/resources/icons/brand-mark.svg +1 -0
  150. pycforge-0.15.2/pycforge/ide/resources/icons/bundle-search.svg +1 -0
  151. pycforge-0.15.2/pycforge/ide/resources/icons/cancel.svg +1 -0
  152. pycforge-0.15.2/pycforge/ide/resources/icons/check.svg +1 -0
  153. pycforge-0.15.2/pycforge/ide/resources/icons/chevron-right.svg +1 -0
  154. pycforge-0.15.2/pycforge/ide/resources/icons/close.svg +1 -0
  155. pycforge-0.15.2/pycforge/ide/resources/icons/collapse-all.svg +1 -0
  156. pycforge-0.15.2/pycforge/ide/resources/icons/command-palette.svg +1 -0
  157. pycforge-0.15.2/pycforge/ide/resources/icons/convert.svg +1 -0
  158. pycforge-0.15.2/pycforge/ide/resources/icons/copy.svg +1 -0
  159. pycforge-0.15.2/pycforge/ide/resources/icons/cut.svg +1 -0
  160. pycforge-0.15.2/pycforge/ide/resources/icons/decision-trace.svg +1 -0
  161. pycforge-0.15.2/pycforge/ide/resources/icons/details.svg +1 -0
  162. pycforge-0.15.2/pycforge/ide/resources/icons/diagnostics.svg +1 -0
  163. pycforge-0.15.2/pycforge/ide/resources/icons/duplicate-line.svg +1 -0
  164. pycforge-0.15.2/pycforge/ide/resources/icons/exit.svg +1 -0
  165. pycforge-0.15.2/pycforge/ide/resources/icons/expand-all.svg +1 -0
  166. pycforge-0.15.2/pycforge/ide/resources/icons/export.svg +1 -0
  167. pycforge-0.15.2/pycforge/ide/resources/icons/find.svg +1 -0
  168. pycforge-0.15.2/pycforge/ide/resources/icons/go-to-line.svg +1 -0
  169. pycforge-0.15.2/pycforge/ide/resources/icons/go-to-output.svg +1 -0
  170. pycforge-0.15.2/pycforge/ide/resources/icons/go-to-source.svg +1 -0
  171. pycforge-0.15.2/pycforge/ide/resources/icons/history.svg +1 -0
  172. pycforge-0.15.2/pycforge/ide/resources/icons/indent.svg +1 -0
  173. pycforge-0.15.2/pycforge/ide/resources/icons/link-c.svg +1 -0
  174. pycforge-0.15.2/pycforge/ide/resources/icons/mappings.svg +1 -0
  175. pycforge-0.15.2/pycforge/ide/resources/icons/module.svg +1 -0
  176. pycforge-0.15.2/pycforge/ide/resources/icons/move-down.svg +1 -0
  177. pycforge-0.15.2/pycforge/ide/resources/icons/move-line-down.svg +1 -0
  178. pycforge-0.15.2/pycforge/ide/resources/icons/move-line-up.svg +1 -0
  179. pycforge-0.15.2/pycforge/ide/resources/icons/move-up.svg +1 -0
  180. pycforge-0.15.2/pycforge/ide/resources/icons/next.svg +1 -0
  181. pycforge-0.15.2/pycforge/ide/resources/icons/open.svg +1 -0
  182. pycforge-0.15.2/pycforge/ide/resources/icons/outdent.svg +1 -0
  183. pycforge-0.15.2/pycforge/ide/resources/icons/outline.svg +1 -0
  184. pycforge-0.15.2/pycforge/ide/resources/icons/paste.svg +1 -0
  185. pycforge-0.15.2/pycforge/ide/resources/icons/previous.svg +1 -0
  186. pycforge-0.15.2/pycforge/ide/resources/icons/primary-module.svg +1 -0
  187. pycforge-0.15.2/pycforge/ide/resources/icons/redo.svg +1 -0
  188. pycforge-0.15.2/pycforge/ide/resources/icons/remove-document.svg +1 -0
  189. pycforge-0.15.2/pycforge/ide/resources/icons/replace.svg +1 -0
  190. pycforge-0.15.2/pycforge/ide/resources/icons/save-as.svg +1 -0
  191. pycforge-0.15.2/pycforge/ide/resources/icons/save.svg +1 -0
  192. pycforge-0.15.2/pycforge/ide/resources/icons/select-all.svg +1 -0
  193. pycforge-0.15.2/pycforge/ide/resources/icons/settings.svg +1 -0
  194. pycforge-0.15.2/pycforge/ide/resources/icons/show-c.svg +1 -0
  195. pycforge-0.15.2/pycforge/ide/resources/icons/split-view.svg +1 -0
  196. pycforge-0.15.2/pycforge/ide/resources/icons/summary.svg +1 -0
  197. pycforge-0.15.2/pycforge/ide/resources/icons/telemetry.svg +1 -0
  198. pycforge-0.15.2/pycforge/ide/resources/icons/toggle-comment.svg +1 -0
  199. pycforge-0.15.2/pycforge/ide/resources/icons/toggle-fold.svg +1 -0
  200. pycforge-0.15.2/pycforge/ide/resources/icons/undo.svg +1 -0
  201. pycforge-0.15.2/pycforge/ide/resources/icons/whitespace.svg +1 -0
  202. pycforge-0.15.2/pycforge/ide/revisions.py +400 -0
  203. pycforge-0.15.2/pycforge/ide/search_service.py +280 -0
  204. pycforge-0.15.2/pycforge/ide/session_history.py +150 -0
  205. pycforge-0.15.2/pycforge/ide/source_editing.py +417 -0
  206. pycforge-0.15.2/pycforge/ide/source_structure.py +558 -0
  207. pycforge-0.15.2/pycforge/ide/source_structure_async.py +191 -0
  208. pycforge-0.15.2/pycforge/ide/supervisor.py +503 -0
  209. pycforge-0.15.2/pycforge/ide/theme.py +119 -0
  210. pycforge-0.15.2/pycforge/ide/theme_stylesheet.py +598 -0
  211. pycforge-0.15.2/pycforge/ide/theme_workspace_stylesheet.py +155 -0
  212. pycforge-0.15.2/pycforge/ide/visual_tokens.py +142 -0
  213. pycforge-0.15.2/pycforge/ide/worker_protocol.py +80 -0
  214. pycforge-0.15.2/pycforge/ide/workspace_search.py +462 -0
  215. pycforge-0.15.2/pycforge/ide/workspace_session.py +256 -0
  216. pycforge-0.15.2/pycforge/laboratory/__init__.py +6 -0
  217. pycforge-0.15.2/pycforge/laboratory/audits.py +2244 -0
  218. pycforge-0.15.2/pycforge/laboratory/checkpoint_e.py +2685 -0
  219. pycforge-0.15.2/pycforge/laboratory/cli.py +119 -0
  220. pycforge-0.15.2/pycforge/laboratory/exit_codes.py +11 -0
  221. pycforge-0.15.2/pycforge/laboratory/keyword_audit.py +661 -0
  222. pycforge-0.15.2/pycforge/laboratory/keyword_only_audit.py +481 -0
  223. pycforge-0.15.2/pycforge.egg-info/PKG-INFO +209 -0
  224. pycforge-0.15.2/pycforge.egg-info/SOURCES.txt +228 -0
  225. pycforge-0.15.2/pycforge.egg-info/dependency_links.txt +1 -0
  226. pycforge-0.15.2/pycforge.egg-info/entry_points.txt +5 -0
  227. pycforge-0.15.2/pycforge.egg-info/requires.txt +1 -0
  228. pycforge-0.15.2/pycforge.egg-info/top_level.txt +1 -0
  229. pycforge-0.15.2/pyproject.toml +45 -0
  230. pycforge-0.15.2/setup.cfg +4 -0
@@ -0,0 +1,503 @@
1
+ # Changelog
2
+
3
+ ## 0.15.2 — Phase 15C IDE-grade authoring and inspection workspace
4
+
5
+ Status: promoted and sealed; Phase 15D remains unopened.
6
+
7
+ Prepared the first public PyPI and GitHub distribution without changing the
8
+ converter contract. PyQt5 is now a mandatory runtime dependency of the base
9
+ package, so an ordinary `pip install pycforge` installs the desktop application
10
+ and both `pycforge` and `pycforge-workspace` entry points. Removed the obsolete
11
+ `workspace` extra, added PyPI long-description and project metadata, corrected
12
+ the command-line examples, and added clean-build, clean-install, offscreen Qt,
13
+ GitHub Release, and Trusted Publishing gates.
14
+
15
+ Established the public source license as `GPL-3.0-only`, compatible with the
16
+ GPL PyPI distribution of PyQt5, and included the complete license text in the
17
+ source and package metadata.
18
+
19
+ Advanced the package to `0.15.2`, the workspace contract to
20
+ `pycforge-workspace/0.5`, the action registry to
21
+ `pycforge.action-registry/0.2`, and the visual system to
22
+ `pycforge.visual-system/0.2`. The converter remains sealed at `0.14.3`, the
23
+ worker protocol remains `pycforge.worker-protocol/0.1`, and presentation
24
+ settings remain schema `1`.
25
+
26
+ Added identifier-only document-tab and split-pane session state, with at most
27
+ two synchronized Python source panes. Added bounded undoable source operations
28
+ for line duplication, line movement, indentation, outdentation, and Python
29
+ comment toggling, together with go-to-line, whitespace visibility, and source
30
+ fold controls.
31
+
32
+ Added cancellable latest-wins source-structure analysis for already-open Python
33
+ text. The normalized outline and breadcrumb projection is parent-linked and
34
+ bounded by symbol count, depth, name length, and source-text budgets. Invalid
35
+ syntax remains inert and cannot retire valid structure for unrelated open
36
+ documents.
37
+
38
+ Added deterministic literal bundle search across the explicit open
39
+ `SourceBundle`, with immutable path-free requests, exact Python and UTF-16
40
+ positions, bounded previews, a global 5,000-match cap, and stale-generation
41
+ suppression. No host directory or project discovery was introduced.
42
+
43
+ Added a bounded command palette that projects enabled and visible static
44
+ registry actions without retaining handlers or adding a free-form command
45
+ execution surface. Added payload-free session transpilation history capped at
46
+ 64 terminal records.
47
+
48
+ Expanded the declarative command system to 48 actions, five persistent main
49
+ menus, and eleven context surfaces. Added the Navigate menu, source-authoring
50
+ commands, document-tab, bundle-search, history, text-input, and read-only-text
51
+ contexts while preserving the exact read-only generated-C command allowlist and
52
+ single-owner persistent `QAction` construction.
53
+
54
+ Expanded the vector catalogue from 41 to 55 safe SVG icons and extended the
55
+ shared workspace stylesheet for document tabs, split views, breadcrumbs,
56
+ outline, bundle-search results, history, and command-palette presentation.
57
+
58
+ Preserved the Phase 15A spawned-worker model, one-active/one-latest scheduling,
59
+ bounded cancellation, immutable revision and fingerprint authentication,
60
+ stale-result suppression, off-GUI file and search work, and incremental
61
+ generated-C projection. Python remains the only editable code surface.
62
+
63
+ Recorded current-release real PyQt evidence on the offscreen QPA backend
64
+ using Python 3.12.13, PyQt 5.15.11, Qt build 5.15.14, and Qt runtime 5.15.19.
65
+ One `QApplication` ran 18 focused workspace cases with zero failures, errors,
66
+ or skips. A 250,113-character source constructed the window in 0.054 seconds,
67
+ reached the first event turn in 0.0103 seconds, and produced 110 timer ticks at
68
+ 0.01-second intervals during 1.201 seconds of isolated transpilation. Large-file
69
+ mode detached the syntax highlighter while preserving the shared editor buffer;
70
+ shutdown left zero new PyCForge threads and zero worker leaks. A small
71
+ end-to-end workspace conversion completed in 0.408 seconds as supporting
72
+ evidence.
73
+
74
+ Authenticated, assigned the canonical validation report and release
75
+ fingerprint, and built and validated the Phase 15C milestone source archive,
76
+ pure-Python wheel, handoff, package report, and checksum records. These
77
+ artifacts establish Phase 15C release custody, not the wider Phase 15D
78
+ distribution and platform gate.
79
+
80
+ PyCForge remains a deterministic Python-to-C source transpiler. It does not
81
+ compile, assemble, link, load, run, execute, debug, profile, deploy, or invoke
82
+ generated C or a C toolchain.
83
+
84
+ The real offscreen widget evidence is not visible-platform certification.
85
+ Visible Windows 11/Linux rendering, physical display scaling, and
86
+ assistive-technology validation remain Phase 15D gates.
87
+
88
+ ## 0.15.1 — Phase 15B application shell and visual system
89
+
90
+ Status: implemented and validated within the available supporting scope.
91
+
92
+ Advanced the workspace contract to `pycforge-workspace/0.4` and introduced the
93
+ import-safe `pycforge.action-registry/0.1`. Every persistent application command
94
+ now has one declarative authority for its stable ID, label, mnemonic, SVG icon,
95
+ shortcut, tooltip, status explanation, accessible name, checkability, tone, and
96
+ allowed surfaces. The Qt adapter creates each persistent `QAction` once and
97
+ shares it across menus, toolbars, context surfaces, and bounded dynamic entries.
98
+
99
+ Added custom gradient/icon File, Edit, View, and Transpile menus and declared
100
+ context menus for Python source, read-only generated C, the Source Bundle
101
+ navigator, diagnostics, mappings, conversion summary, decision trace, and
102
+ telemetry. The custom presentation remains native-backed by `QMenu` and
103
+ `QAction`, preserving keyboard traversal, mnemonics, shortcut columns, checked
104
+ state, focus return, Escape dismissal, assistive exposure, submenu behavior,
105
+ and screen-edge placement. Generated C uses an explicit read-only command
106
+ allowlist.
107
+
108
+ Introduced `pycforge.visual-system/0.1` with cohesive semantic graphite
109
+ surfaces, layered gradients, high-contrast text, blue and violet focus accents,
110
+ a restrained warm transpilation accent, and explicit success, warning, error,
111
+ and danger treatments. Expanded professional self-contained SVG iconography
112
+ uses logical dimensions and excludes raster payloads, embedded data, remote
113
+ references, fixed physical sizing, scripts, and font-glyph dependencies.
114
+
115
+ Added high-DPI and accessibility foundations: high-DPI scaling before
116
+ application construction, logical icon sizing, stable menu accessible names,
117
+ visible tooltips and accessible names for icon-only controls, visible keyboard
118
+ focus, and non-color-only state treatment. The interface has no animation and
119
+ is reduced-motion safe by construction.
120
+
121
+ Removed the legacy presentation-namespace migration and compatibility surface.
122
+ Current source, settings, menus, toolbars, tests, evidence, and distribution
123
+ use PyCForge identity exclusively. Original pre-migration bytes remain
124
+ authoritative in the authenticated Phase 15A archive.
125
+
126
+ Preserved all Phase 15A responsiveness and isolation guarantees: spawned
127
+ conversion, one-active/one-latest scheduling, cooperative and hard
128
+ cancellation, immutable revision authentication, stale-result suppression,
129
+ off-GUI file I/O and search, bounded editor projections, incremental generated-C
130
+ population, and exact Save C authority.
131
+
132
+ Bounded the structured detail inspectors with an iterative cycle-safe
133
+ projection limited to 1,024 nodes, 16 levels, 256 children per container, and
134
+ 2,048 characters per value. Corrected scroll-area context placement, made
135
+ uncommitted identity edits immediately stale and unsavable as C, and suppressed
136
+ cancellation-pending diagnostics as non-current.
137
+
138
+ Hardened release custody around a descriptor-bound, size-bounded source
139
+ snapshot and a validation-subject digest that is checked against the exact
140
+ packaged bytes. Packaging now pins its production environment, compares
141
+ duplicate wheel and normalized-source builds, inspects and smokes the sealed
142
+ wheel payload, rejects noncanonical validation JSON, and durably publishes the
143
+ seven-artifact directory only after the final vocabulary and checksum graph
144
+ passes.
145
+
146
+ The package is `0.15.1`; the converter remains sealed at `0.14.3`, the worker
147
+ protocol remains `pycforge.worker-protocol/0.1`, and presentation settings
148
+ remain schema `1`. PyCForge remains a deterministic Python-to-C source
149
+ transpiler. No C compiler, linker, loader, runtime execution, debugger,
150
+ terminal, toolchain, project explorer, plugin system, or generated-C editor was
151
+ added.
152
+
153
+ PyQt5 is unavailable on the validation host, so Phase 15B evidence is
154
+ supporting source, static, headless, registry, icon, and optional-widget
155
+ evidence only. Visible Windows 11/Linux rendering, real display scaling, and
156
+ assistive-technology validation remain Phase 15D gates. Phase 15C and Phase 15D
157
+ remain unopened.
158
+
159
+ Final discovery runs 750 tests: 734 pass, 16 are expected skips, and none fail.
160
+ Eleven skips require unavailable PyQt5 widgets; five require unavailable older
161
+ optional custody artifacts.
162
+
163
+ ## 0.15.0 — Phase 15A responsiveness and isolation
164
+
165
+ Status: promoted and sealed.
166
+
167
+ Replaced workspace in-process conversion with a spawn-only process supervisor.
168
+ The bounded `pycforge.worker-protocol/0.1` uses canonical JSON over byte-only
169
+ connections and validates generation, bundle, transport, request, artifact,
170
+ mapping, and output identities before publication. Scheduling is exactly one
171
+ active plus one replaceable latest pending request.
172
+
173
+ Added cooperative cancellation with a 750 ms grace, hard termination and
174
+ two-second reclamation, latest-pending start bounds, non-blocking close, and
175
+ recoverable startup, crash, malformed/oversized IPC, broken-pipe, and worker
176
+ resource-exhaustion handling. Canceled, failed, stale, superseded, partial, or
177
+ mismatched work cannot publish C or replace last-known-good C.
178
+
179
+ Added immutable off-GUI revision/index services with cached UTF-8 and UTF-16
180
+ position facts. Convert and Save C remain disabled until the latest revision
181
+ authenticates. Moved linked-file reads, hashes, observations, and guarded atomic
182
+ writes to bounded daemon workers; an in-flight stale Save C fails before atomic
183
+ replacement.
184
+
185
+ Added debounced latest-wins literal search with an exact total and a 5,000-range
186
+ projection cap. Added automatic large-file editor mode, bounded syntax/bracket
187
+ work, marker and overview caps, viewport-focused selections, incremental 32 KiB
188
+ generated-C projection, and deferred hidden output/detail work. Source edits
189
+ are coalesced before proportional controller synchronization.
190
+
191
+ Validated direct-versus-isolated serialized-result equality, hard-cancel and
192
+ failure containment, maximum-envelope revision/search/index behavior, injected
193
+ slow file I/O, and 100 edit/convert/cancel cycles without stale publication,
194
+ deadlock, crash, obsolete pending work, or orphan processes.
195
+
196
+ Advanced the package to `0.15.0` and workspace contract to
197
+ `pycforge-workspace/0.3`. The complete converter subtree and every converter
198
+ contract remain sealed at `0.14.3`.
199
+
200
+ PyCForge remains a Python-to-C source transpiler. No compiler, linker, loader,
201
+ generated-C executor, runner, debugger, terminal, toolchain, plugin,
202
+ project-explorer, host-discovery, or generated-C editor was added. Phase 15B,
203
+ 15C, and 15D remain unopened; visible Windows 11/Linux PyQt and accessibility
204
+ claims are reserved for Phase 15D.
205
+
206
+ ## 0.14.4 — Hardening Checkpoint E
207
+
208
+ Status: promoted and sealed.
209
+
210
+ Completed the roadmap's post-Phase-14 full-subset architecture review,
211
+ deterministic full-supported-subset fuzz and metamorphic gate, and documentation
212
+ and 69-entry feature-matrix reconciliation. No Python construct, C IR shape,
213
+ helper, diagnostic, conversion policy, public converter schema, or generated-C
214
+ style was added or changed.
215
+
216
+ Separated the package identity (`0.14.4`) from the sealed deterministic
217
+ converter contract identity (`0.14.3`). Golden output, serialized results,
218
+ facts, RulePlans, summaries, traces, telemetry, diagnostics, mappings, and
219
+ fingerprints remain Phase 14D values.
220
+
221
+ Corrected the active desktop identity to PyCForge across front-facing titles,
222
+ accessibility names, theme exports, and the settings namespace. Added a bounded,
223
+ non-destructive migration for allow-listed predecessor presentation settings
224
+ and retained non-exported compatibility aliases only for sealed historical
225
+ validators.
226
+
227
+ Established `pycforge-workspace/0.2` and a binding workspace-quality addendum.
228
+ The addendum assigns the requested process-isolated conversion supervisor,
229
+ maximum-input responsiveness, professional IDE-grade authoring and inspection,
230
+ custom gradient/icon main and context menus, accessibility, high-DPI, and real
231
+ Windows 11/Linux PyQt gates to Phase 15. Checkpoint E does not claim those
232
+ future gates or open Phase 15.
233
+
234
+ PyCForge remains a Python-to-C source transpiler. It does not compile, link,
235
+ load, run, execute, debug, benchmark, or otherwise invoke generated C or a C
236
+ toolchain.
237
+
238
+ Promotion executes all 69 frozen feature-matrix entries plus the unlisted
239
+ default, with 37 supported witnesses converted and 33 boundary witnesses
240
+ rejected without mismatch. The seeded hardening corpus contains 16 fixed and
241
+ 64 generated cases, four per promoted family, and all 80 match the
242
+ authenticated Phase 14D predecessor byte-for-byte.
243
+
244
+ Final validation discovers 589 tests: 572 pass, 17 are expected skips, and
245
+ zero fail. The focused Checkpoint E set passes 46 of 46, and every cumulative
246
+ source-only audit passes. Reproducible wheel and normalized source-archive
247
+ builds are byte-identical; isolated wheel and extracted-source smokes pass.
248
+ The wheel contains both PyCForge entry points, exactly 17 SVG assets, and no
249
+ native binaries.
250
+
251
+ ## 0.14.3 — Phase 14D exact required keyword-only calls
252
+
253
+ Status: promoted and sealed.
254
+
255
+ Added one exact source-only declaration and call profile for required
256
+ keyword-only parameters on already-resolved direct source functions. An admitted
257
+ function may have existing required positional-only and positional-or-keyword
258
+ parameters followed by one or more exactly annotated required keyword-only
259
+ parameters. Every `kw_defaults` entry is null; positional defaults,
260
+ keyword-only defaults, `*args`, and `**kwargs` remain rejected.
261
+
262
+ Ordinary positional actuals bind only positional-capable formals. Explicit named
263
+ actuals may bind unbound positional-or-keyword or required keyword-only formals.
264
+ Every required formal is covered exactly once with an exact category and
265
+ representation match. Explicit values stage once in Python source order; only
266
+ pure temporary references are arranged in full formal order for the existing
267
+ structured `CCallExpr`. No runtime binder, `TypeError` channel, default
268
+ evaluation, coercion, allocation, ownership transfer, or cleanup model was
269
+ added.
270
+
271
+ Added complete positive and negative `keyword-only-call-binding-facts` under
272
+ `fact-table/0.14.3` and the helper-free
273
+ `phase14.keyword_only_call.exact_binding@0.14.3` RulePlan. The lowering shape is
274
+ `source-order-actual-temporaries-formal-order-references-v1`. Independent
275
+ validation reconstructs declaration kind, target, name binding, coverage,
276
+ categories, source/formal orders, C parameter order, and exact plan
277
+ correspondence before lowering.
278
+ Required-keyword-only declarations remain in the existing function-signature
279
+ facts without changing the serialized `ParameterFact` shape. Affected existing
280
+ `FunctionDef` RulePlans gain explicit keyword-only parameter and
281
+ C-interface-mode-erasure facts and obligations, and independent validation
282
+ covers admitted declarations even when they have no call site.
283
+
284
+ No new source diagnostic code is required. `PYC2904` retains missing coverage
285
+ and excess positional arity, `PYC2905` exact representation mismatch, `PYC2910`
286
+ unpacking and excluded call shapes, and `PYC2912` exact name-binding failures.
287
+ Under active 0.14.3 identities `PYC2911` continues to reject defaults,
288
+ defaulted keyword-only parameters, variadics, and keyword-only declarations
289
+ outside the exact required profile; it no longer rejects an otherwise eligible
290
+ required keyword-only declaration solely because `kwonlyargs` is nonempty.
291
+ Historical 0.14.2 diagnostics remain unchanged.
292
+
293
+ Advanced the active rule set to
294
+ `phase14-required-keyword-only-calls-v0.14.3`, renderer to
295
+ `c-renderer-v0.14.3`, and conversion-plan, C IR, generated-C, summary, and
296
+ decision-trace envelopes to 0.14.3. SourceBundle 0.2, Python IR 0.4, result
297
+ serialization 0.5, target and semantic policies, the helper registry, and all
298
+ container/module/record/numeric/conditional policies remain frozen.
299
+
300
+ Explicit 0.14.2 and earlier requests retain their exact facts, plans,
301
+ diagnostics, generated-C bytes, and fingerprints. Under active 0.14.3
302
+ identities, sources selecting no Phase 14D declaration or call behavior retain
303
+ Phase 14C generated-C bytes and output fingerprints. Required keyword-only
304
+ support adds no C IR syntax kind, renderer grammar, helper, host discovery, or
305
+ toolchain surface. Generated C remains source-validated only and is not
306
+ compiled, linked, loaded, or executed. Defaults, variadics, unpacking, dynamic
307
+ targets, methods, recursion, exceptions, closures, generators, async behavior,
308
+ and every neighboring Phase 14 family remain excluded. Phase 15 has not
309
+ started.
310
+
311
+ Promotion passed 539 discovered tests: 524 passed, 15 skipped, and zero failed.
312
+ The skips are exactly 10 for unavailable PyQt5 and five for unavailable older
313
+ custody artifacts. The focused Phase 14D gate passed 65 of 65 tests. Every
314
+ active cumulative audit passed, including the required-keyword-only and
315
+ Phase 14D transition audits.
316
+
317
+ Two fixed-epoch builds produced the same 340,054-byte
318
+ `pycforge-0.14.3-py3-none-any.whl`, SHA-256
319
+ `c0dd0c0ed79131daa5af815a8a9bb096b9f955c9c617ec0b8eb6a10c69d27b7f`.
320
+ The wheel archive and `RECORD` each account for 132 members: 17 SVG assets and
321
+ zero native-code members. Two normalized source-archive builds were likewise
322
+ byte-identical. The promoted converter subtree SHA-256 is
323
+ `74b32c25e40af3398dd46288941812ce7ad87f0d4b72fec3d3bd786cc1b8f3a8`.
324
+
325
+ Release validation remained source-only: no gate compiled, linked, loaded, or
326
+ executed generated C. No new actual PyQt5 widget or Windows 11 execution is
327
+ claimed. Historical opening records remain preserved, and Phase 15 has not
328
+ started.
329
+
330
+ ## 0.14.2 — Phase 14C direct exact keyword calls
331
+
332
+ Status: promoted and sealed.
333
+
334
+ Added one closed compile-time binding profile for explicit keyword arguments on
335
+ already-resolved direct source-function calls. Calls may use a leading ordinary
336
+ positional prefix followed by one or more explicit named keywords. Every
337
+ required formal is bound exactly once, positional-only formals remain
338
+ positional-only, and actual/formal categories must match exactly. Same-module
339
+ and existing explicit cross-module source-function bindings are eligible;
340
+ dynamic targets, callable values, methods, defaults, keyword-only parameters,
341
+ variadics, `*`/`**` unpacking, recursion, `range` keywords, and record-
342
+ constructor keywords remain excluded.
343
+
344
+ Added independent keyword-call analysis and reconstruction,
345
+ `keyword-call-binding-facts` under `fact-table/0.14.2`, and the helper-free
346
+ `phase14.keyword_call.exact_binding@0.14.2` RulePlan. Argument values are staged
347
+ left to right and once in Python source order, then pure temporary references
348
+ are arranged in formal ordinal order for the existing structured `CCallExpr`.
349
+ No C IR node kind, renderer grammar, helper, runtime binder, failure channel,
350
+ allocation, ownership transfer, or cleanup model was added.
351
+
352
+ Added `PYC2912` for exact static name-binding failures: unknown keyword names,
353
+ positional-only names used as keywords, positional/keyword collisions, and
354
+ duplicate keywords. `PYC2910` remains the boundary for `*`/`**`, null keyword
355
+ names, unpacking, and other excluded keyword shapes. Existing target,
356
+ declaration, arity, category, record, `range`, and recursion diagnostics retain
357
+ precedence.
358
+
359
+ Advanced the active rule set, renderer, conversion plan, C IR, generated-C,
360
+ summary, and trace envelopes to 0.14.2. SourceBundle 0.2, Python IR 0.4, result
361
+ serialization 0.5, all public policies, the helper registry, Phase 14A numeric
362
+ facts/helpers, and Phase 14B `fact-table/0.14.1` conditional facts and RulePlans
363
+ remain unchanged. Explicit 0.14.1 requests retain their historical keyword
364
+ rejection and artifact behavior; active sources selecting no 14C call retain
365
+ predecessor generated-C bytes and output fingerprints.
366
+
367
+ Promotion authenticated the sealed Phase 14B source archive and wheel, passed
368
+ the cumulative suite and audits including the keyword and Phase 14/14B/14C
369
+ transition audits, sealed deterministic wheel and source-archive builds, and
370
+ passed isolated package validation. All release validation remained source-only;
371
+ generated C was not compiled, linked, loaded, or executed. PyQt5 was unavailable
372
+ in the release environment, so no new widget execution is claimed and sealed
373
+ offscreen-widget evidence remains preserved. Windows 11 execution is not
374
+ claimed. Phase 14D and Phase 15 have not started.
375
+
376
+ ## 0.14.1 — Phase 14B conditional temporary regions
377
+
378
+ Status: Phase 14B promoted and sealed.
379
+
380
+ Added exact conditional placement for statement-producing temporaries belonging
381
+ to expressions already supported by the cumulative scalar subset. Boolean
382
+ `and`/`or` expressions now use an initialized Boolean result and flat guarded
383
+ assignments. Later operands of chained comparisons use guarded materialization
384
+ and rolling middle values, preserving left-to-right, exactly-once evaluation
385
+ without eagerly evaluating skipped operands.
386
+
387
+ Added independent conditional-region analysis and validation,
388
+ `fact-table/0.14.1` conditional facts, two 0.14.1 RulePlan families, and active
389
+ `conversion-plan/0.14.1`, `c-ir/0.14.1`, `generated-c/0.14.1`, summary, trace,
390
+ rule-set, and renderer identities. No Python syntax, primitive operation,
391
+ public policy, helper, runtime failure channel, allocation, ownership, cleanup,
392
+ or C IR node kind was added.
393
+
394
+ Preserved the sealed Phase 14A numeric policy and helper registry exactly.
395
+ Explicit 0.14.0 configuration retains its historical artifacts and placement
396
+ rejections; active sources that select no conditional region retain predecessor
397
+ generated-C bytes and output fingerprints. General exceptions, heap objects,
398
+ dynamic dispatch, closures, generators, async behavior, context cleanup, and
399
+ the broader class model remain excluded.
400
+
401
+ ## 0.14.0 — Phase 14A bounded integer floor arithmetic
402
+
403
+ Status: Phase 14A sealed.
404
+
405
+ Added exact integer `//` and `%` for existing integer-like expressions when
406
+ the divisor is a direct signed integer literal in
407
+ `[-9223372036854775807, -2]` or `[1, 9223372036854775807]`. Zero, negative one,
408
+ `INT64_MIN`, Boolean, floating, dynamic, folded, calculated, and out-of-range
409
+ divisors reject deterministically.
410
+
411
+ Added separate numeric analysis and lowering, `fact-table/0.14` numeric
412
+ operation facts, the `phase14.numeric.floor_arithmetic` RulePlan family,
413
+ `conversion-plan/0.14`, `c-ir/0.14`, `generated-c/0.14`, and 0.14 summary and
414
+ decision-trace identities. The active numeric policy is
415
+ `phase14-proved-floor-arithmetic-v0.14`.
416
+
417
+ Activated the frozen `pycf.i64.floor_div@1.0.0` and
418
+ `pycf.i64.floor_mod@1.0.0` Phase 10 assets without changing their registry or
419
+ asset fingerprints. Each occurrence selects exactly one helper, and the
420
+ registry emits each selected helper once. Deterministic signed-64 temporaries
421
+ preserve left-to-right, exactly-once operand evaluation.
422
+
423
+ The admitted divisor proof excludes C11 division by zero and
424
+ `INT64_MIN / -1`; no runtime failure channel, exception emulation,
425
+ arbitrary-precision runtime, allocation, or cleanup was added. Mathematical
426
+ fixtures close Python floor quotient, divisor-sign remainder, and the division
427
+ identity across the supported sign and boundary cases.
428
+
429
+ Preserved exact explicit Phase 13 conversion behavior and the unchanged module,
430
+ record, container, workspace, no-host-discovery, and source-only product
431
+ boundaries. Generated C was not compiled, linked, loaded, or executed.
432
+
433
+ Phase 14A is sealed independently. Broader Phase 14 remains closed pending a
434
+ new decision and explicit approval. Phase 15 has not started.
435
+
436
+ ## 0.13.0 — Phase 13 static records
437
+
438
+ Status: promoted.
439
+
440
+ Added a deliberately narrow immutable-record subset expressed with one exact
441
+ top-level Python class shape. Accepted records contain 1–64 ordered `int`,
442
+ `float`, or `bool` fields, an exact structural `__init__`, direct fresh
443
+ function-local positional construction, and direct statically resolved field
444
+ reads.
445
+
446
+ Added `fact-table/0.13` record definitions, fields, initializers, instances,
447
+ bindings, and accesses; seven record RulePlans; `conversion-plan/0.13`; record
448
+ nodes in `c-ir/0.13`; `generated-c/0.13`; and 0.13 summary and decision-trace
449
+ identities. The active record policy is
450
+ `phase13-immutable-automatic-records-v0.13`.
451
+
452
+ Record lowering emits deterministic named C `typedef struct` declarations and
453
+ fully initialized `const` aggregates in automatic function storage. Arguments
454
+ are evaluated left to right and once before construction; field reads use
455
+ direct member access. No record helper or runtime is selected.
456
+
457
+ General methods, inheritance and the broader Python object model remain
458
+ unsupported. Records cannot be mutated, aliased, rebound, copied, escaped,
459
+ passed, returned, stored in containers, imported, or used across modules.
460
+ There is no heap allocation, null state, ownership transfer, or cleanup.
461
+
462
+ Adversarial hardening added binding-identity constructor resolution,
463
+ read-after-construction and complete fresh-local proofs, dunder-field and
464
+ annotation-builtin collision rejection, correct companion-module diagnostics,
465
+ cooperative record cancellation, exact const/member and field-type C IR
466
+ validation, manifest-bound provenance, and independent serialized record-fact
467
+ cross-validation. Historical `fact-table/0.12` module records retain their
468
+ exact shape; record linkage remains in Phase 13 evidence.
469
+
470
+ An initial working candidate was abandoned when an external compile-only
471
+ review triggered the declared no-toolchain rollback rule. The release candidate
472
+ was reseeded from a newly authenticated 0.12.2 extraction; the incident remains
473
+ recorded and is not rewritten as passing evidence.
474
+
475
+ Preserved the Phase 12 function-import profile, Phase 11 containers, Phase 10
476
+ helper registry, source-only product boundary, and PyCForge workspace safety
477
+ model. Explicit historical Phase 12 requests retain their 0.12 identities, and
478
+ class-free Phase 13 conversions preserve predecessor generated-C bytes.
479
+
480
+ The sealed 0.12.2 predecessor was authenticated before Phase 13 edits. Windows
481
+ 11 laptop testing remains planned user feedback after all phases; this release
482
+ does not claim Windows execution. Phase 14 has not started.
483
+
484
+ ## 0.12.2 — PyCForge workspace hardening
485
+
486
+ Corrected conversion-generation retirement, Save As destination validation,
487
+ unexpected worker failure recovery, visible module identity commits,
488
+ document-reorder controls, Unicode replacement navigation, keyboard access,
489
+ and failure-tolerant versioned presentation settings without changing the
490
+ sealed Phase 12 converter.
491
+
492
+ ## 0.12.1 — PyCForge workspace
493
+
494
+ Introduced the optional professional PyQt5 workspace over the sealed Phase 12
495
+ converter, including explicit bundle navigation, Python and immutable C
496
+ editors, diagnostics and mappings, stale-output protection, and atomic linked-C
497
+ saving.
498
+
499
+ ## 0.12.0 — Phase 12 explicit module bundles
500
+
501
+ Introduced the bounded 1–64-document SourceBundle profile, exact compile-time
502
+ direct-function imports, deterministic dependency ordering, and one generated
503
+ C translation unit without host module discovery or runtime initialization.