athena-python-docx 0.39.0__tar.gz → 0.41.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (500) hide show
  1. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/AGENTS.md +141 -6
  2. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/PKG-INFO +1 -1
  3. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/__init__.py +1 -1
  4. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_buffer.py +386 -15
  5. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_http_doc.py +66 -4
  6. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/commands.py +10 -0
  7. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/comments.py +78 -11
  8. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/document.py +34 -6
  9. athena_python_docx-0.41.0/docx/drawing/__init__.py +136 -0
  10. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/section.py +188 -19
  11. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/styles/_table.py +19 -2
  12. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/table.py +501 -76
  13. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/text/hyperlink.py +47 -14
  14. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/text/paragraph.py +232 -24
  15. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/text/parfmt.py +1 -5
  16. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/text/run.py +80 -13
  17. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/text/tabstops.py +1 -3
  18. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/pyproject.toml +1 -1
  19. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/fake_session.py +5 -0
  20. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fixtures/note_reference_reads.json +0 -1
  21. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/live/baseline.json +4 -101
  22. athena_python_docx-0.41.0/tests/live/fixture_scripts.py +727 -0
  23. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/live/test_live_runner.py +46 -0
  24. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/intentional_deviations.json +112 -0
  25. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_comments.py +156 -7
  26. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_hyperlink_coalescing.py +43 -0
  27. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_iter_inner_content.py +1 -1
  28. athena_python_docx-0.41.0/tests/test_listed_paragraph_reads.py +98 -0
  29. athena_python_docx-0.41.0/tests/test_literal_no_break_hyphens.py +140 -0
  30. athena_python_docx-0.41.0/tests/test_literal_soft_hyphens.py +59 -0
  31. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_paragraph_runs_hyperlinks.py +46 -0
  32. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_rendered_page_breaks.py +24 -0
  33. athena_python_docx-0.41.0/tests/test_sections_empty_list.py +49 -0
  34. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_names.py +27 -0
  35. athena_python_docx-0.41.0/tests/test_table_listing_reads.py +410 -0
  36. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_table_read_reuse.py +106 -34
  37. athena_python_docx-0.41.0/tests/test_versioned_read_reuse.py +768 -0
  38. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_wire_contract.py +1 -0
  39. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/uv.lock +1 -1
  40. athena_python_docx-0.39.0/docx/drawing/__init__.py +0 -68
  41. athena_python_docx-0.39.0/tests/live/fixture_scripts.py +0 -255
  42. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/.gitignore +0 -0
  43. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/CLAUDE.md +0 -0
  44. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/DOCX_EXEC_LAB.md +0 -0
  45. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/README.md +0 -0
  46. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_athena_extension.py +0 -0
  47. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_batching.py +0 -0
  48. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_capabilities.py +0 -0
  49. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_citations.py +0 -0
  50. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_execution.py +0 -0
  51. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_http.py +0 -0
  52. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_image_utils.py +0 -0
  53. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_postproc.py +0 -0
  54. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_proxy.py +0 -0
  55. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_ptc.py +0 -0
  56. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_references.py +0 -0
  57. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_run_order.py +0 -0
  58. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_table_styles.py +0 -0
  59. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_timeouts.py +0 -0
  60. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_tracked.py +0 -0
  61. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_xml_text.py +0 -0
  62. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/api.py +0 -0
  63. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/blkcntnr.py +0 -0
  64. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/bookmarks.py +0 -0
  65. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/charts.py +0 -0
  66. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/client.py +0 -0
  67. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/enum/__init__.py +0 -0
  68. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/enum/base.py +0 -0
  69. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/enum/dml.py +0 -0
  70. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/enum/section.py +0 -0
  71. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/enum/shape.py +0 -0
  72. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/enum/style.py +0 -0
  73. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/enum/table.py +0 -0
  74. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/enum/text.py +0 -0
  75. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/errors.py +0 -0
  76. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/exceptions.py +0 -0
  77. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/fields.py +0 -0
  78. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/footnotes.py +0 -0
  79. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/image/__init__.py +0 -0
  80. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/image/exceptions.py +0 -0
  81. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/image/image.py +0 -0
  82. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/math.py +0 -0
  83. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/opc/__init__.py +0 -0
  84. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/opc/coreprops.py +0 -0
  85. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/oxml/__init__.py +0 -0
  86. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/revisions.py +0 -0
  87. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/sdt.py +0 -0
  88. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/session.py +0 -0
  89. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/settings.py +0 -0
  90. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/shape.py +0 -0
  91. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/shared.py +0 -0
  92. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/styles/__init__.py +0 -0
  93. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/styles/latent.py +0 -0
  94. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/styles/style.py +0 -0
  95. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/styles/styles.py +0 -0
  96. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/text/__init__.py +0 -0
  97. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/text/font.py +0 -0
  98. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/text/pagebreak.py +0 -0
  99. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/toc.py +0 -0
  100. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/typing.py +0 -0
  101. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/docx_exec_lab.py +0 -0
  102. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/docx_exec_lab_examples/fast_table_fill.py +0 -0
  103. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/docx_exec_lab_examples/find_replace_literal.py +0 -0
  104. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/docx_exec_lab_server.py +0 -0
  105. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/dump_wire_fixtures.py +0 -0
  106. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/release.sh +0 -0
  107. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/round_trip_smoke.py +0 -0
  108. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/smoke_test_block_not_found.py +0 -0
  109. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/validate_find_replace_asset.py +0 -0
  110. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/__init__.py +0 -0
  111. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/conftest.py +0 -0
  112. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/METHODOLOGY.md +0 -0
  113. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/README.md +0 -0
  114. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/__init__.py +0 -0
  115. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/__init__.py +0 -0
  116. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/agent_documents.py +0 -0
  117. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/default_style_run_formatting.py +0 -0
  118. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/header_footer_pictures.py +0 -0
  119. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/less_used_writes.py +0 -0
  120. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/merged_cell_identity.py +0 -0
  121. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/paragraph_text_setter.py +0 -0
  122. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/picture_runs.py +0 -0
  123. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/proxy_equality.py +0 -0
  124. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/return_types.py +0 -0
  125. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/xml_incompatible_text.py +0 -0
  126. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/zero_and_negative_indents.py +0 -0
  127. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe_cases.py +0 -0
  128. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe_runner.py +0 -0
  129. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/auto_gen_cases.py +0 -0
  130. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/binary_round_trip.py +0 -0
  131. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/cases.py +0 -0
  132. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/complex_cases.py +0 -0
  133. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/coverage_report.py +0 -0
  134. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/extract.py +0 -0
  135. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/extreme_cases.py +0 -0
  136. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/firm_templates/README.md +0 -0
  137. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/firm_templates/__init__.py +0 -0
  138. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/firm_templates/_runner.py +0 -0
  139. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/firm_templates/extractor.py +0 -0
  140. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/firm_templates/test_pw_corpus.py +0 -0
  141. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/firm_templates/test_pw_research_digest.py +0 -0
  142. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/local_runner.py +0 -0
  143. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/mega_cases.py +0 -0
  144. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshot.py +0 -0
  145. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/01_basic_paragraph.json +0 -0
  146. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/02_multiple_headings.json +0 -0
  147. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/03_runs_with_formatting.json +0 -0
  148. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/04_font_name_and_size.json +0 -0
  149. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/05_font_color_rgb.json +0 -0
  150. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/06_font_character_properties.json +0 -0
  151. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/07_font_subscript_superscript.json +0 -0
  152. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/08_font_highlight.json +0 -0
  153. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/09_paragraph_alignment.json +0 -0
  154. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/100_table_negative_indexing.json +0 -0
  155. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/101_table_cells_flat_iteration.json +0 -0
  156. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/102_text_with_embedded_special_chars.json +0 -0
  157. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/104_core_properties_datetime.json +0 -0
  158. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/105_default_one_section.json +0 -0
  159. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/106_heading_paragraph_format.json +0 -0
  160. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/107_varying_row_heights.json +0 -0
  161. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/10_paragraph_indents.json +0 -0
  162. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/11_paragraph_spacing.json +0 -0
  163. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/12_paragraph_keep_options.json +0 -0
  164. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/13_paragraph_tab_stops.json +0 -0
  165. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/14_run_add_tab_and_break.json +0 -0
  166. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/15_run_add_break_page.json +0 -0
  167. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/16_paragraph_clear_and_insert_before.json +0 -0
  168. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/17_table_basic.json +0 -0
  169. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/18_table_cell_text.json +0 -0
  170. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/19_table_row_column_sizing.json +0 -0
  171. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/20_table_cell_vertical_alignment.json +0 -0
  172. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/21_table_alignment_and_autofit.json +0 -0
  173. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/22_table_cell_paragraphs_iteration.json +0 -0
  174. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/24_table_add_row_column.json +0 -0
  175. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/25_table_merge_cells.json +0 -0
  176. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/26_section_page_setup.json +0 -0
  177. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/27_section_margins.json +0 -0
  178. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/28_section_add_new.json +0 -0
  179. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/29_section_headers_linked.json +0 -0
  180. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/30_styles_iteration.json +0 -0
  181. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/31_styles_lookup_and_default.json +0 -0
  182. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/32_styles_add_paragraph_style.json +0 -0
  183. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/33_core_properties_set_and_get.json +0 -0
  184. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/34_inline_shapes_iterate_empty.json +0 -0
  185. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/35_full_report.json +0 -0
  186. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/36_replace_text_in_paragraph.json +0 -0
  187. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/37_iterate_runs_and_format_all_bold.json +0 -0
  188. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/38_font_all_properties.json +0 -0
  189. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/39_large_body_100_paragraphs.json +0 -0
  190. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/40_large_table_10x10.json +0 -0
  191. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/41_unicode_and_emoji.json +0 -0
  192. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/42_very_long_paragraph.json +0 -0
  193. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/43_paragraph_text_round_trip.json +0 -0
  194. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/44_paragraph_alignment_round_trip.json +0 -0
  195. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/45_cell_text_round_trip.json +0 -0
  196. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/46_run_text_setter_round_trip.json +0 -0
  197. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/47_font_size_round_trip.json +0 -0
  198. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/48_font_color_round_trip.json +0 -0
  199. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/49_resume_layout.json +0 -0
  200. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/50_multi_section_doc.json +0 -0
  201. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/52_iterate_everything.json +0 -0
  202. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/53_apply_style_to_paragraphs.json +0 -0
  203. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/54_empty_everything.json +0 -0
  204. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/55_single_character_runs.json +0 -0
  205. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/56_everything_in_one.json +0 -0
  206. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/57_runs_after_multiple_text_appends.json +0 -0
  207. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/58_modify_runs_in_place.json +0 -0
  208. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/59_indent_round_trip.json +0 -0
  209. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/60_space_round_trip.json +0 -0
  210. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/61_cell_paragraph_with_runs.json +0 -0
  211. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/62_many_cell_paragraphs.json +0 -0
  212. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/63_table_style_round_trip.json +0 -0
  213. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/64_many_sections.json +0 -0
  214. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/65_20x20_table_formatted.json +0 -0
  215. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/66_toc_like_structure.json +0 -0
  216. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/67_paragraph_insert_before_chain.json +0 -0
  217. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/68_invoice.json +0 -0
  218. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/69_newsletter.json +0 -0
  219. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/70_add_and_iterate_back.json +0 -0
  220. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/71_academic_paper.json +0 -0
  221. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/72_legal_contract.json +0 -0
  222. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/73_form_with_many_tables.json +0 -0
  223. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/74_paragraph_with_10_runs.json +0 -0
  224. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/75_paragraph_negative_first_line_indent.json +0 -0
  225. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/76_rgbcolor_from_string.json +0 -0
  226. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/77_length_unit_conversions.json +0 -0
  227. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/78_paragraph_copy_style.json +0 -0
  228. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/79_bulk_cell_formatting.json +0 -0
  229. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/80_apply_style_after_add_run.json +0 -0
  230. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/81_multi_page_with_breaks.json +0 -0
  231. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/82_add_text_on_existing_run.json +0 -0
  232. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/83_clear_then_repopulate_paragraph.json +0 -0
  233. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/84_table_reread_row_count.json +0 -0
  234. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/85_header_footer_access.json +0 -0
  235. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/86_font_read_unset_returns_none.json +0 -0
  236. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/87_500_paragraph_doc.json +0 -0
  237. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/88_mixed_content_iteration.json +0 -0
  238. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/89_alignment_clear_via_none.json +0 -0
  239. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/90_cell_add_paragraph_styled.json +0 -0
  240. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/91_many_small_tables.json +0 -0
  241. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/92_margins_every_section.json +0 -0
  242. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/93_font_bool_reads_after_set.json +0 -0
  243. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/94_page_break_before_paragraph.json +0 -0
  244. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/95_paragraph_hyperlinks_empty.json +0 -0
  245. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/96_paragraph_contains_page_break.json +0 -0
  246. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/97_document_styles_by_key.json +0 -0
  247. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/98_style_contains_check.json +0 -0
  248. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/99_run_add_picture_from_bytes.json +0 -0
  249. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex02_unicode_everywhere.json +0 -0
  250. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex03_1000_paragraphs.json +0 -0
  251. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex04_50x50_table.json +0 -0
  252. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex05_long_text_in_cell.json +0 -0
  253. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex06_hundred_tiny_runs.json +0 -0
  254. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex07_every_font_boolean.json +0 -0
  255. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex08_many_continuous_sections.json +0 -0
  256. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex09_many_tab_stops.json +0 -0
  257. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex10_complex_bom.json +0 -0
  258. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex11_banded_rows_formatting.json +0 -0
  259. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex12_section_reconfigure.json +0 -0
  260. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex13_cell_with_10_paragraphs.json +0 -0
  261. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex14_styled_report_table.json +0 -0
  262. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex15_paragraph_all_format_props.json +0 -0
  263. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex16_runs_interleaved_with_breaks.json +0 -0
  264. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex17_all_break_kinds.json +0 -0
  265. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex18_read_back_large_doc.json +0 -0
  266. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex19_mutate_all_runs.json +0 -0
  267. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex20_kitchen_sink_v2.json +0 -0
  268. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega01_book_chapter.json +0 -0
  269. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega02_research_proposal.json +0 -0
  270. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega03_financial_statement.json +0 -0
  271. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega04_recipe_card.json +0 -0
  272. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega05_user_manual.json +0 -0
  273. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega06_complex_newsletter.json +0 -0
  274. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega07_budget_spreadsheet.json +0 -0
  275. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega08_product_catalog.json +0 -0
  276. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega09_signed_contract.json +0 -0
  277. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega10_api_documentation.json +0 -0
  278. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw01_official_quickstart.json +0 -0
  279. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw02_paragraph_style_list.json +0 -0
  280. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw03_character_formatting.json +0 -0
  281. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw04_section_page_setup.json +0 -0
  282. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw05_toc_pattern.json +0 -0
  283. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw06_meeting_minutes.json +0 -0
  284. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw07_dense_formatting_demo.json +0 -0
  285. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw08_table_merged_header.json +0 -0
  286. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw09_bulk_run_iteration.json +0 -0
  287. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw10_colored_grid_table.json +0 -0
  288. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw11_header_text.json +0 -0
  289. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw12_first_page_footer.json +0 -0
  290. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw13_even_page_header.json +0 -0
  291. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw15_paragraph_style_instance.json +0 -0
  292. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw16_header_footer_tables.json +0 -0
  293. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw17_header_letterhead_filled.json +0 -0
  294. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw18_header_table_properties.json +0 -0
  295. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw19_header_table_rows_columns.json +0 -0
  296. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw20_header_table_merges.json +0 -0
  297. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ours_spec.json +0 -0
  298. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/parity_crawl.py +0 -0
  299. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/parity_diff.json +0 -0
  300. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/real_world_cases.py +0 -0
  301. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/round_trip_tests.py +0 -0
  302. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/stock_spec.json +0 -0
  303. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/test_e2e_against_staging.py +0 -0
  304. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fixtures/field_reads.json +0 -0
  305. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fixtures/ruby_reads.json +0 -0
  306. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fixtures/symbol_reads.json +0 -0
  307. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/live/__init__.py +0 -0
  308. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/live/reader.py +0 -0
  309. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/live/runner.py +0 -0
  310. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/live/sdk_driver.py +0 -0
  311. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/live/stock_driver.py +0 -0
  312. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/README.md +0 -0
  313. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/__init__.py +0 -0
  314. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/baseline_gaps.json +0 -0
  315. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/compare.py +0 -0
  316. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/introspect.py +0 -0
  317. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/reports/GAP_ANALYSIS.md +0 -0
  318. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/reports/gap_report.json +0 -0
  319. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/run_parity.py +0 -0
  320. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/snapshots/athena_latest.json +0 -0
  321. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/snapshots/upstream_python_docx_1.2.0.json +0 -0
  322. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/test_parity_gap.py +0 -0
  323. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_add_section.py +0 -0
  324. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_add_section_extract_items.py +0 -0
  325. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_alignment_values.py +0 -0
  326. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_athena_extension_creates_session_open.py +0 -0
  327. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_athena_extensions_contract.py +0 -0
  328. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_athena_extensions_registry.py +0 -0
  329. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_batch_chunking.py +0 -0
  330. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_batching_perf.py +0 -0
  331. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_battery_cases.py +0 -0
  332. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_block_not_found_error.py +0 -0
  333. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_buffer.py +0 -0
  334. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_add_paragraph_wire_shape.py +0 -0
  335. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_add_table_not_supported.py +0 -0
  336. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_borders_spec.py +0 -0
  337. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_fastpath_runs.py +0 -0
  338. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_inner_add_hyperlink_stash.py +0 -0
  339. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_inner_add_run_via_cell_insert.py +0 -0
  340. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_inner_format_stash.py +0 -0
  341. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_inner_run_format_stash.py +0 -0
  342. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_inner_run_guard.py +0 -0
  343. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_merge.py +0 -0
  344. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_nested_tables.py +0 -0
  345. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_paragraphs_listed.py +0 -0
  346. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_text_plain_fastpath.py +0 -0
  347. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_text_replace_semantics.py +0 -0
  348. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_citations.py +0 -0
  349. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_collapsed_range_format.py +0 -0
  350. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_color_format_theme.py +0 -0
  351. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_command_dataclasses.py +0 -0
  352. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_commands.py +0 -0
  353. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_comment_paragraphs.py +0 -0
  354. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_comments_first_read.py +0 -0
  355. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_content_control_value.py +0 -0
  356. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_core_properties.py +0 -0
  357. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_document_asset_id_property.py +0 -0
  358. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_document_clear.py +0 -0
  359. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_document_create.py +0 -0
  360. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_document_create_from_template.py +0 -0
  361. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_document_factory_validation.py +0 -0
  362. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_document_settings_session_open.py +0 -0
  363. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_docx_exec_lab.py +0 -0
  364. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_docx_exec_lab_server.py +0 -0
  365. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_drawing_image.py +0 -0
  366. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_e2e_partial_failure_cascade.py +0 -0
  367. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_empty_hyperlinks.py +0 -0
  368. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_enum_parity.py +0 -0
  369. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_execution_scope.py +0 -0
  370. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_export_docx_clean.py +0 -0
  371. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_export_rescue_anchors.py +0 -0
  372. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_field_reads_python_docx_parity.py +0 -0
  373. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_field_refresh.py +0 -0
  374. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_field_runs.py +0 -0
  375. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_find_replace_session_open.py +0 -0
  376. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_flushed_write_failures.py +0 -0
  377. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_http_transport.py +0 -0
  378. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_image_url_data_uri.py +0 -0
  379. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_inline_page_break.py +0 -0
  380. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_inline_shape_alt_text.py +0 -0
  381. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_inline_shape_size.py +0 -0
  382. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_inline_shape_type.py +0 -0
  383. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_inline_shapes_floating.py +0 -0
  384. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_insert_deferred.py +0 -0
  385. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_latent_style_writes.py +0 -0
  386. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_line_clear_break.py +0 -0
  387. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_list_styles.py +0 -0
  388. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_merged_cell_identity.py +0 -0
  389. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_merged_cell_secondary_slot.py +0 -0
  390. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_merged_cells.py +0 -0
  391. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_missing_modules.py +0 -0
  392. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_nested_table_refused.py +0 -0
  393. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_note_reference_reads_python_docx_parity.py +0 -0
  394. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_oxml_shim.py +0 -0
  395. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_page_break.py +0 -0
  396. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_paragraph_delete.py +0 -0
  397. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_paragraph_indent_reads.py +0 -0
  398. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_paragraph_text_empty_run.py +0 -0
  399. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_paragraph_text_len_cache.py +0 -0
  400. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_parfmt_clears.py +0 -0
  401. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_parity_misc.py +0 -0
  402. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_parity_round2.py +0 -0
  403. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_partial_failure_cascade.py +0 -0
  404. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_pdf_export_and_page_renders.py +0 -0
  405. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_phase_a_behavior.py +0 -0
  406. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_phase_b_headers_footers.py +0 -0
  407. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_phase_c_tables.py +0 -0
  408. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_positional_cell_id.py +0 -0
  409. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_postproc_cell_format_rewrite.py +0 -0
  410. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_postproc_cell_run_format_rewrite.py +0 -0
  411. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_postproc_ref_restore.py +0 -0
  412. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_pr19766_review_fixes.py +0 -0
  413. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_proxy_equality.py +0 -0
  414. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_ptc.py +0 -0
  415. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_python_docx_api_parity.py +0 -0
  416. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_read_run_ranges.py +0 -0
  417. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_repeated_node_read.py +0 -0
  418. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_restart_numbering.py +0 -0
  419. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_revisions.py +0 -0
  420. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_round_trip_smoke_script.py +0 -0
  421. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_ruby_reads_python_docx_parity.py +0 -0
  422. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_add_picture_anchor.py +0 -0
  423. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_break_inner_content.py +0 -0
  424. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_edges.py +0 -0
  425. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_formatting_wire.py +0 -0
  426. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_identity.py +0 -0
  427. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_later_runs.py +0 -0
  428. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_mark_inheritance.py +0 -0
  429. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_page_number_blocks.py +0 -0
  430. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_table_style_objects.py +0 -0
  431. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_text_python_docx.py +0 -0
  432. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_text_refreshes_paragraph.py +0 -0
  433. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_unmodeled_toggles.py +0 -0
  434. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_sdk_reads_served.py +0 -0
  435. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_section_read_lengths.py +0 -0
  436. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_add_paragraph_style.py +0 -0
  437. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_add_picture.py +0 -0
  438. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_add_run.py +0 -0
  439. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_cell_add_paragraph.py +0 -0
  440. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_comments_add_comment.py +0 -0
  441. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_comments_get.py +0 -0
  442. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_document_audit.py +0 -0
  443. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_document_element.py +0 -0
  444. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_enum_section.py +0 -0
  445. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_font_audit.py +0 -0
  446. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_header_footer.py +0 -0
  447. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_hyperlink.py +0 -0
  448. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_inline_shape.py +0 -0
  449. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_insert_paragraph_before.py +0 -0
  450. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_misc.py +0 -0
  451. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_paragraph_strict.py +0 -0
  452. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_paragraph_style.py +0 -0
  453. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_paragraph_style_strict.py +0 -0
  454. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_parfmt.py +0 -0
  455. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_row_col_cell.py +0 -0
  456. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_run_add_break.py +0 -0
  457. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_run_bool_setters.py +0 -0
  458. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_run_style.py +0 -0
  459. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_run_style_strict.py +0 -0
  460. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_run_text.py +0 -0
  461. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_run_underline.py +0 -0
  462. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_section_audit.py +0 -0
  463. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_section_dimensions.py +0 -0
  464. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_section_onoff.py +0 -0
  465. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_settings.py +0 -0
  466. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_shared_audit.py +0 -0
  467. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_style.py +0 -0
  468. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_styles.py +0 -0
  469. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_table_audit.py +0 -0
  470. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_table_cell.py +0 -0
  471. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_table_dimensions.py +0 -0
  472. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_table_layout.py +0 -0
  473. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_smoke_integration.py +0 -0
  474. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_acceptance.py +0 -0
  475. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_delete.py +0 -0
  476. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_font.py +0 -0
  477. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_formatting_writes.py +0 -0
  478. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_metadata_writes.py +0 -0
  479. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_resolution.py +0 -0
  480. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_setters_contract.py +0 -0
  481. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_tab_stops.py +0 -0
  482. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_tab_stops_read.py +0 -0
  483. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_symbol_reads_python_docx_parity.py +0 -0
  484. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_tab_stop_writes.py +0 -0
  485. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_table_add_row_grid_row.py +0 -0
  486. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_table_anchors.py +0 -0
  487. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_table_clears.py +0 -0
  488. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_table_direction.py +0 -0
  489. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_table_length_reads.py +0 -0
  490. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_table_set_cell_perf.py +0 -0
  491. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_table_style_id_resolution.py +0 -0
  492. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_temporarily_unavailable.py +0 -0
  493. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_text_control_characters.py +0 -0
  494. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_tracked_revisions_offsets.py +0 -0
  495. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_unmapped_alignment_reads.py +0 -0
  496. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_uv_lock_version.py +0 -0
  497. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_validate_find_replace_asset_script.py +0 -0
  498. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_xml_attr_guard.py +0 -0
  499. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_xml_incompatible_text.py +0 -0
  500. {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_zod_wire_contract.py +0 -0
@@ -363,6 +363,13 @@ Issue numbers reference `python-openxml/python-docx`.
363
363
  through `CreateHyperlink` (DOCX Studio `doc.hyperlinks.create`). Returns
364
364
  the same `Hyperlink` class the read path already exposes. Also
365
365
  available as `Run.add_hyperlink` for convenience.
366
+ A link whose target has a scheme the editor does not keep (`file:`, a
367
+ mistyped `Mail:`, `javascript:`), written by a script or in the source, is
368
+ stored as written beside an empty clickable target (`unsafeHref`): it reads
369
+ as python-docx reads it (`Hyperlink`, `address`, `url`, its runs), the
370
+ export writes the target back, and the editor draws its text as a link that
371
+ nothing makes clickable (owner decision, 2026-10-23;
372
+ `hyperlinks-unlisted-schemes`).
366
373
 
367
374
  - **`Run.add_field(kind, *, args=None, cached_result=None) -> Field`**
368
375
  + **`Document.fields: Fields`** — generic Word field insertion.
@@ -1050,7 +1057,11 @@ architecture or a DOCX Studio constraint:
1050
1057
  holds `w:pStyle` alone, the editor paints it from that definition and
1051
1058
  the export adds the definition (with a list of the document's own for a
1052
1059
  numbered list style), as Word does when the style is applied, so the
1053
- paragraph reads back as that built-in. A header or footer part a read adds
1060
+ paragraph reads back as that built-in. A built-in the uploaded document's
1061
+ source already named without defining it (`Info`'s `undefinedStyleIds`)
1062
+ reads as the default paragraph style, as python-docx reads it and Word
1063
+ draws it: the editor paints it so and the export adds no definition.
1064
+ A header or footer part a read adds
1054
1065
  (python-docx's `default-header.xml`) names `Header` (`Footer`) only where
1055
1066
  the document defines it: elsewhere python-docx's reference resolves to the
1056
1067
  default paragraph style and adds no definition, so the SDK's paragraph
@@ -1193,14 +1204,29 @@ architecture or a DOCX Studio constraint:
1193
1204
  the paragraph's runs are as its records hold them, in the body, a table cell,
1194
1205
  a header, a footer or a comment; a body or cell paragraph with a link or an
1195
1206
  inline content control reads its runs from the records its import keeps for
1196
- the reads alone (`_readRunRecords`) until an edit changes them, and a
1197
- paragraph with a tracked change, an edited one with a link, and a header's,
1198
- footer's or comment's with a link read their runs from their marks, the base
1199
- text included. A write to the run
1207
+ the reads alone (`_readRunRecords`), carried through an SDK run write
1208
+ (`_writtenRunRecords`), until another edit changes them, a header's or
1209
+ footer's with a link always does, and a paragraph with a tracked change, an
1210
+ edited one with a link, and a comment's with a link read their runs from
1211
+ their marks, the base text included. A write to the run
1200
1212
  (its text, an append, its formatting) makes the base text ordinary text,
1201
1213
  which then reads as text: docx-studio keeps no guide through an edit, where
1202
1214
  upstream keeps the `w:ruby` through all but a text write.
1203
1215
 
1216
+ - **A character of one of Word's run elements that the source wrote as text
1217
+ reads as written.** A source can write a non-breaking or soft hyphen as the
1218
+ character in a `w:t` (generated text holds them so), which upstream reads as
1219
+ it is, where it reads a `w:noBreakHyphen` as `-` and a `w:softHyphen` as
1220
+ nothing. docx-studio keeps each character it lists
1221
+ (`LITERAL_CHARACTERS`, `packages/core/src/utils/wordCharacters.ts`) apart
1222
+ from the element under the `literalCharacter` mark, and its reads send their
1223
+ offsets in a run's text (`literalCharacters`), which `_word_text` reads as
1224
+ written; a docx-studio that sends none reads each as the element, as before.
1225
+ The export writes them back in a `w:t`, and text a script writes holds them
1226
+ as upstream writes it, in a `w:t`. `Document.find_replace` keeps each hyphen
1227
+ the replacement shares with the match as the match held it, and writes any
1228
+ other in a `w:t`, as upstream writes text.
1229
+
1204
1230
  - **`CoreProperties.modified` is the time of the last save.** The asset is a
1205
1231
  live Word document, and docx-studio stamps `dcterms:modified` when it saves
1206
1232
  a change to the package: a section, style or property write, and the export
@@ -1220,6 +1246,111 @@ architecture or a DOCX Studio constraint:
1220
1246
  Markup) show insertions and hide deletions, as these reads do.
1221
1247
  `doc.revisions` lists every change (`tests/test_run_text_python_docx.py`).
1222
1248
 
1249
+ - **Runs inside an inline wrapper read as the paragraph's.** The runs of a
1250
+ `w:smartTag`, an inline `w:customXml`, a `w:dir` or a `w:bdo` read in
1251
+ `Paragraph.text`, `runs`, `iter_inner_content()`, `Hyperlink.runs` and
1252
+ `_Cell.text`, as Word shows them; upstream reads only a `w:p`'s direct
1253
+ `w:r` and `w:hyperlink` children, so it cannot see their text. With
1254
+ upstream's reads, `p.text = p.text.replace(...)` on such a paragraph would
1255
+ delete the wrapped text, which the setter clears unseen: 62 of 6,803
1256
+ customer uploads hold text inside smart tags. Decided on 2026-10-21 under
1257
+ the Word fidelity goal (owner question 47), the same choice as tracked
1258
+ changes; the owner may overrule it. Recorded in
1259
+ `tests/parity/intentional_deviations.json` (`live_deviations`).
1260
+
1261
+ - **Two things a source writes that the model holds otherwise read as the
1262
+ model holds them** (2026-10-22 SDK live parity run over 398 customer
1263
+ documents). Each is recorded in
1264
+ `tests/parity/intentional_deviations.json` (`live_deviations`) with a
1265
+ synthetic fixture of `docx-fidelity/regression-fixtures/`:
1266
+ - A run size written as a measure with a unit (`w:sz w:val="6mm"`, as
1267
+ Microsoft Teams transcripts write it; 9 documents) reads in whole
1268
+ half-points (`Length(215900)`, 17pt, where upstream reads 216000): under
1269
+ a hundredth of a point, and holding the measure would change the stored
1270
+ model of a run (`runs-measured-sizes`). Confirmed by the owner,
1271
+ 2026-10-23.
1272
+ - A page margin written as decimal twips (`w:left="1440.0000000000002"`;
1273
+ 1 document) reads as the length it holds, where upstream raises
1274
+ `ValueError`; the export writes it in whole twips
1275
+ (`sections-fractional-twips`). Confirmed by the owner, 2026-10-23.
1276
+
1277
+ - **Four more things a source writes that the model holds otherwise read as the
1278
+ model holds them** (2026-10-22 SDK live parity run over 398 customer
1279
+ documents, round 2). Each is recorded in `tests/parity/intentional_deviations.json`
1280
+ (`live_deviations`) with a synthetic fixture of
1281
+ `docx-fidelity/regression-fixtures/`:
1282
+ - A run that holds Word's rendered page break before a page break
1283
+ (`<w:lastRenderedPageBreak/><w:br w:type="page"/>`; 2 documents) yields the
1284
+ page break's `""` before the `RenderedPageBreak`, as a run that holds them
1285
+ the other way round does: the model holds the page break apart from the
1286
+ paragraph and keeps no order between the two
1287
+ (`breaks-rendered-before-page-break`). Confirmed by the owner, 2026-10-23.
1288
+ - A rendered page break in the run that begins a field (2 documents) reads
1289
+ in no run and no paragraph: the import keeps none in a field's own runs,
1290
+ which its node stands for (`fields-rendered-break-begin-run`). Confirmed
1291
+ by the owner, 2026-10-23.
1292
+ - A table that names a table style its styles.xml does not define (1
1293
+ document; 16 of 6,806 uploads) reads as Word's built-in style of that id,
1294
+ which the editor draws it with, where upstream reads the default table
1295
+ style; reading the default would change how such tables draw. The export
1296
+ leaves the style undefined, as the source has it: an unedited download of
1297
+ a document imported since is the source's bytes (owner, 2026-10-23). The read is kept
1298
+ (`tables-undefined-style`): checked on 2026-10-24 against the one sample
1299
+ document's Word PDF, whose tables draw alike under either style (empty
1300
+ paragraph defaults, the tables' own borders and margins) and match the
1301
+ editor's Table Grid layout, so no corpus document yet tells the two apart.
1302
+ - A package with no styles part (1 document) reads Word's built-in styles,
1303
+ which the editor gives it, where upstream reads its own default template's
1304
+ (`styles-part-absent`). Confirmed by the owner, 2026-10-23.
1305
+
1306
+ - **One more read follows the model where python-docx reads the source**
1307
+ (2026-10-22 SDK live parity run over 398 customer documents, round 3). It is
1308
+ recorded in `tests/parity/intentional_deviations.json` (`live_deviations`)
1309
+ with a synthetic fixture:
1310
+ - A comment's annotation reference run that names no character style
1311
+ (1 document, 13 of 6,826 uploads) reads in the CommentReference style, in
1312
+ which the export writes every comment's annotation run when it writes the
1313
+ comments part: the model holds no annotation mark, and the parser keeps the
1314
+ run as an empty run nothing tells from another
1315
+ (`comments-annotation-ref-unstyled`). Confirmed by the owner, 2026-10-23.
1316
+
1317
+ A comment whose range ends between paragraphs (`w:commentRangeEnd` a child
1318
+ of `w:body`; 1 document, 11 of 6,826 uploads) is no longer a deviation, with
1319
+ the other comments whose reference run stands apart from the text their
1320
+ range marks: one over links alone in several paragraphs or over a picture or
1321
+ an object alone, which the model holds no range for, one that ends in a
1322
+ paragraph holding none of its text, and one whose run follows a field's end
1323
+ run. The import records where the source body holds each reference run and
1324
+ range end (`commentReferenceRunPlaces`: the paragraph and how many of its
1325
+ runs come before it), the paragraphs whose text it marks for the comment,
1326
+ and the fingerprint of each body block that holds them. While those blocks
1327
+ are as imported and the comment marks the same paragraphs, the run reads
1328
+ where the source holds it, where the export keeps the blocks' source XML,
1329
+ and a reply added since reads beside the comment's range end, where the
1330
+ export writes it (`comments-range-end-between-paragraphs`,
1331
+ `comments-range-over-links`, `comments-range-end-without-text`,
1332
+ `comments-range-over-object`). A block an edit changed, a comment moved to
1333
+ new text, and a room imported before the record read where the model places
1334
+ the run, as before.
1335
+
1336
+ A third, runs of one formatting read and exported joined after a run write
1337
+ in a paragraph with a link, an inline content control, an equation or a
1338
+ field beside a picture, is no longer a deviation (the owner asked for it to
1339
+ be fixed, 2026-10-23, #46477): a run write (a format, `run.text`,
1340
+ `add_run`, `add_text`) carries the records the read takes of such a
1341
+ paragraph's runs (`_writtenRunRecords`), each `w:r` kept with the written
1342
+ run changed as python-docx changes it, and the export writes the paragraph
1343
+ from them. A format of one of a field's own runs is carried too, into the
1344
+ field's record (2026-10-24, #46477). A write the records cannot describe (a
1345
+ write across a field, a field's result written, a run the offsets cannot
1346
+ tell from an empty one beside it) leaves the paragraph as before: a link
1347
+ paragraph's kept content, else the runs its marks make. Fixture scripts
1348
+ `fixture-links-run-write-keeps-runs`, `fixture-links-run-writes`,
1349
+ `fixture-content-controls-inline-run-writes`,
1350
+ `fixture-equations-beside-runs-run-writes`,
1351
+ `fixture-fields-beside-pictures-run-writes` and
1352
+ `fixture-fields-beside-pictures-field-run-formats`.
1353
+
1223
1354
  - **A citation link Athena added reads as its text, as the export writes it**
1224
1355
  (owner decision #40122). Athena's citation flow stamps the links it writes
1225
1356
  with the `Athena citation` tooltip. These links only navigate inside Athena,
@@ -1246,7 +1377,11 @@ architecture or a DOCX Studio constraint:
1246
1377
  is the link's, as in python-docx. Each paragraph of a field that spans
1247
1378
  paragraphs (a table of contents) holds the field character runs it has
1248
1379
  (`tests/test_field_reads_python_docx_parity.py`, against stock python-docx
1249
- on the same `.docx`; `DOCX_STUDIO_LIMITATIONS.md` § 27). A field takes no
1380
+ on the same `.docx`; `DOCX_STUDIO_LIMITATIONS.md` § 27). A field the source
1381
+ wrote whole in one `w:r` (begin, field code, separate and end, no result, as
1382
+ generators write a page number) is that one run, a `begin` run with that
1383
+ run's formatting, as python-docx reads it, and docx-studio writes it back
1384
+ as one run. A field takes no
1250
1385
  room in the text-address space, so its runs stand at one offset. Writes:
1251
1386
  - setting a result run's `.text` changes the field's displayed result,
1252
1387
  as in python-docx (`Replace` with a `field` target): the export keeps
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: athena-python-docx
3
- Version: 0.39.0
3
+ Version: 0.41.0
4
4
  Summary: Drop-in replacement for python-docx that connects to Athena's DOCX Studio collaborative document stack
5
5
  Project-URL: Homepage, https://athenaintelligence.ai
6
6
  Author-email: Athena Intelligence <engineering@athenaintelligence.ai>
@@ -6,7 +6,7 @@ See CLAUDE.md for the API parity contract.
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
- __version__ = "0.39.0"
9
+ __version__ = "0.41.0"
10
10
 
11
11
  from docx.api import Document
12
12
  from docx._buffer import discard_all, flush_all