hyperweave 0.2.23__tar.gz → 0.2.24__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 (388) hide show
  1. {hyperweave-0.2.23 → hyperweave-0.2.24}/CHANGELOG.md +20 -0
  2. {hyperweave-0.2.23 → hyperweave-0.2.24}/PKG-INFO +1 -1
  3. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/_version.py +2 -2
  4. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/compose/resolver.py +0 -46
  5. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/compose/treemap.py +25 -3
  6. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/receipt.svg.j2 +2 -2
  7. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_compose_treemap.py +107 -0
  8. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_proofset.py +28 -7
  9. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_telemetry_integration.py +5 -4
  10. hyperweave-0.2.23/src/hyperweave/templates/components/treemap.svg.j2 +0 -46
  11. {hyperweave-0.2.23 → hyperweave-0.2.24}/.dockerignore +0 -0
  12. {hyperweave-0.2.23 → hyperweave-0.2.24}/.github/workflows/ci.yml +0 -0
  13. {hyperweave-0.2.23 → hyperweave-0.2.24}/.github/workflows/deploy.yml +0 -0
  14. {hyperweave-0.2.23 → hyperweave-0.2.24}/.github/workflows/publish.yml +0 -0
  15. {hyperweave-0.2.23 → hyperweave-0.2.24}/.gitignore +0 -0
  16. {hyperweave-0.2.23 → hyperweave-0.2.24}/.pre-commit-config.yaml +0 -0
  17. {hyperweave-0.2.23 → hyperweave-0.2.24}/Dockerfile +0 -0
  18. {hyperweave-0.2.23 → hyperweave-0.2.24}/LICENSE +0 -0
  19. {hyperweave-0.2.23 → hyperweave-0.2.24}/README.md +0 -0
  20. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/buttons/button-liquid.svg +0 -0
  21. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/cards/card-butterfly.svg +0 -0
  22. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/cards/card-python.svg +0 -0
  23. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/cards/card-sunflower.svg +0 -0
  24. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/cards/card-waves.svg +0 -0
  25. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/badge_critical.svg +0 -0
  26. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/badge_passing.svg +0 -0
  27. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/badge_warning.svg +0 -0
  28. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/banner.svg +0 -0
  29. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/icons/discord.svg +0 -0
  30. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/icons/notion.svg +0 -0
  31. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/icons/reddit.svg +0 -0
  32. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/icons/spotify.svg +0 -0
  33. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/icons/youtube.svg +0 -0
  34. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/marquee_counter.svg +0 -0
  35. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/marquee_horizontal.svg +0 -0
  36. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/marquee_vertical.svg +0 -0
  37. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/profile-cards/chart_stars_full.svg +0 -0
  38. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/profile-cards/stats.svg +0 -0
  39. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/strip.svg +0 -0
  40. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/chrome-horizon/badge_critical.svg +0 -0
  41. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/chrome-horizon/badge_passing.svg +0 -0
  42. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/chrome-horizon/badge_warning.svg +0 -0
  43. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/chrome-horizon/banner.svg +0 -0
  44. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/chrome-horizon/icons/bluesky.svg +0 -0
  45. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/chrome-horizon/icons/github.svg +0 -0
  46. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/chrome-horizon/icons/instagram.svg +0 -0
  47. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/chrome-horizon/icons/mastodon.svg +0 -0
  48. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/chrome-horizon/icons/x.svg +0 -0
  49. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/chrome-horizon/marquee_counter.svg +0 -0
  50. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/chrome-horizon/marquee_horizontal.svg +0 -0
  51. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/chrome-horizon/marquee_vertical.svg +0 -0
  52. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/chrome-horizon/profile-cards/chart_stars_full.svg +0 -0
  53. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/chrome-horizon/profile-cards/stats.svg +0 -0
  54. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/chrome-horizon/strip.svg +0 -0
  55. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/telemetry/master_card.svg +0 -0
  56. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/telemetry/receipt.svg +0 -0
  57. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/telemetry/receipt_claude-code_medium.svg +0 -0
  58. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/telemetry/receipt_codex_large.svg +0 -0
  59. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/telemetry/receipt_voltage_xlarge.svg +0 -0
  60. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/telemetry/rhythm_strip.svg +0 -0
  61. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/examples/telemetry/rhythm_strip_voltage_xlarge.svg +0 -0
  62. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/footers/inneraura-footer-liquid.svg +0 -0
  63. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/footers/inneraura-footer-purple.svg +0 -0
  64. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/footers/inneraura-footer.svg +0 -0
  65. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/hyperweave-banner.svg +0 -0
  66. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/icons/cobalt-sapphire-discord.svg +0 -0
  67. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/icons/cobalt-sapphire-docs.svg +0 -0
  68. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/icons/cobalt-sapphire-github.svg +0 -0
  69. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/icons/cobalt-sapphire-instagram.svg +0 -0
  70. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/icons/cobalt-sapphire-linkedin.svg +0 -0
  71. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/icons/cobalt-sapphire-tiktok.svg +0 -0
  72. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/icons/cobalt-sapphire-x.svg +0 -0
  73. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/icons/cobalt-sapphire-youtube.svg +0 -0
  74. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/marquees/badge-showcase-triple.svg +0 -0
  75. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/marquees/genome-marquee-triple.svg +0 -0
  76. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/marquees/sample-badges.svg +0 -0
  77. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/mintlify-assets/404.svg +0 -0
  78. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/mintlify-assets/callout-icons.svg +0 -0
  79. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/mintlify-assets/divider.svg +0 -0
  80. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/mintlify-assets/favicon.svg +0 -0
  81. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/mintlify-assets/hero-banner.svg +0 -0
  82. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/mintlify-assets/hyperweave-banner-v2.svg +0 -0
  83. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/mintlify-assets/hyperweave-navbar-logo.svg +0 -0
  84. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/mintlify-assets/loader.svg +0 -0
  85. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/mintlify-assets/og-image.svg +0 -0
  86. {hyperweave-0.2.23 → hyperweave-0.2.24}/assets/timelines/hyperweave-roadmap.svg +0 -0
  87. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/assets/favicon.svg +0 -0
  88. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/assets/hyperweave-banner.svg +0 -0
  89. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/assets/hyperweave-navbar-logo.svg +0 -0
  90. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/assets/og-image.svg +0 -0
  91. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/explanation/architecture.mdx +0 -0
  92. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/explanation/camo-compatibility.mdx +0 -0
  93. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/explanation/cim-compliance.mdx +0 -0
  94. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/explanation/genome-profile-system.mdx +0 -0
  95. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/explanation/metadata-tiers.mdx +0 -0
  96. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/how-to/add-motion-to-badges.mdx +0 -0
  97. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/how-to/create-session-receipts.mdx +0 -0
  98. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/how-to/set-up-claude-code-hooks.mdx +0 -0
  99. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/how-to/use-live-data-badges.mdx +0 -0
  100. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/introduction.mdx +0 -0
  101. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/mint.json +0 -0
  102. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/quickstart.mdx +0 -0
  103. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/reference/cli.mdx +0 -0
  104. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/reference/compose-spec.mdx +0 -0
  105. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/reference/genomes.mdx +0 -0
  106. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/reference/http-api.mdx +0 -0
  107. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/reference/mcp-tools.mdx +0 -0
  108. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/reference/motions.mdx +0 -0
  109. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/reference/telemetry-contract.mdx +0 -0
  110. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/spec/hyperweave-protocol.mdx +0 -0
  111. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/tutorials/build-an-artifact-kit.mdx +0 -0
  112. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/tutorials/compose-your-first-badge.mdx +0 -0
  113. {hyperweave-0.2.23 → hyperweave-0.2.24}/docs/tutorials/install-session-telemetry.mdx +0 -0
  114. {hyperweave-0.2.23 → hyperweave-0.2.24}/fly.toml +0 -0
  115. {hyperweave-0.2.23 → hyperweave-0.2.24}/hooks/install.py +0 -0
  116. {hyperweave-0.2.23 → hyperweave-0.2.24}/hooks/session_end.sh +0 -0
  117. {hyperweave-0.2.23 → hyperweave-0.2.24}/justfile +0 -0
  118. {hyperweave-0.2.23 → hyperweave-0.2.24}/pyproject.toml +0 -0
  119. {hyperweave-0.2.23 → hyperweave-0.2.24}/scripts/extract_font_metrics.py +0 -0
  120. {hyperweave-0.2.23 → hyperweave-0.2.24}/scripts/extract_glyphs.py +0 -0
  121. {hyperweave-0.2.23 → hyperweave-0.2.24}/scripts/generate_proofset.py +0 -0
  122. {hyperweave-0.2.23 → hyperweave-0.2.24}/scripts/probe_live_stats.py +0 -0
  123. {hyperweave-0.2.23 → hyperweave-0.2.24}/scripts/probe_star_history.py +0 -0
  124. {hyperweave-0.2.23 → hyperweave-0.2.24}/scripts/stress_test.py +0 -0
  125. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/__init__.py +0 -0
  126. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/__main__.py +0 -0
  127. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/cli.py +0 -0
  128. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/compose/__init__.py +0 -0
  129. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/compose/assembler.py +0 -0
  130. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/compose/bar_chart.py +0 -0
  131. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/compose/context.py +0 -0
  132. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/compose/engine.py +0 -0
  133. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/compose/lanes.py +0 -0
  134. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/compose/resolvers/__init__.py +0 -0
  135. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/compose/resolvers/chart.py +0 -0
  136. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/compose/resolvers/stats.py +0 -0
  137. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/compose/rhythm.py +0 -0
  138. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/compose/rhythm_strip.py +0 -0
  139. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/compose/validate_paradigms.py +0 -0
  140. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/config/__init__.py +0 -0
  141. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/config/genome_validator.py +0 -0
  142. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/config/loader.py +0 -0
  143. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/config/registry.py +0 -0
  144. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/config/settings.py +0 -0
  145. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/connectors/__init__.py +0 -0
  146. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/connectors/arxiv.py +0 -0
  147. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/connectors/base.py +0 -0
  148. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/connectors/cache.py +0 -0
  149. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/connectors/github.py +0 -0
  150. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/connectors/rest.py +0 -0
  151. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/core/__init__.py +0 -0
  152. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/core/cell_layout.py +0 -0
  153. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/core/color.py +0 -0
  154. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/core/contracts.py +0 -0
  155. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/core/enums.py +0 -0
  156. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/core/font_metrics.py +0 -0
  157. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/core/models.py +0 -0
  158. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/core/paradigm.py +0 -0
  159. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/core/schema.py +0 -0
  160. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/core/state.py +0 -0
  161. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/core/text.py +0 -0
  162. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/core/thresholds.py +0 -0
  163. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/css/accessibility.css +0 -0
  164. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/css/bridge.css +0 -0
  165. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/css/expression.css +0 -0
  166. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/css/status.css +0 -0
  167. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/font-metrics/chakra-petch.json +0 -0
  168. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/font-metrics/inter.json +0 -0
  169. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/font-metrics/jetbrains-mono.json +0 -0
  170. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/font-metrics/orbitron.json +0 -0
  171. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/fonts/chakra-petch.b64 +0 -0
  172. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/fonts/chakra-petch.meta.json +0 -0
  173. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/fonts/jetbrains-mono.b64 +0 -0
  174. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/fonts/jetbrains-mono.meta.json +0 -0
  175. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/fonts/orbitron.b64 +0 -0
  176. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/fonts/orbitron.meta.json +0 -0
  177. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/genomes/automata.json +0 -0
  178. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/genomes/brutalist.json +0 -0
  179. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/genomes/chrome.json +0 -0
  180. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/genomes/telemetry-claude-code.json +0 -0
  181. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/genomes/telemetry-codex.json +0 -0
  182. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/genomes/telemetry-cream.json +0 -0
  183. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/genomes/telemetry-voltage.json +0 -0
  184. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/glyphs.json +0 -0
  185. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/motions/border/chromatic-pulse.yaml +0 -0
  186. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/motions/border/corner-trace.yaml +0 -0
  187. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/motions/border/dual-orbit.yaml +0 -0
  188. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/motions/border/entanglement.yaml +0 -0
  189. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/motions/border/rimrun.yaml +0 -0
  190. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/motions/static.yaml +0 -0
  191. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/paradigms/brutalist.yaml +0 -0
  192. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/paradigms/cellular.yaml +0 -0
  193. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/paradigms/chrome.yaml +0 -0
  194. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/paradigms/default.yaml +0 -0
  195. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/policies/normal.json +0 -0
  196. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/policies/permissive.json +0 -0
  197. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/policies/ungoverned.json +0 -0
  198. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/profiles/brutalist.contract.json +0 -0
  199. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/profiles/brutalist.yaml +0 -0
  200. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/profiles/chrome.contract.json +0 -0
  201. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/profiles/chrome.yaml +0 -0
  202. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/specimens.yaml +0 -0
  203. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/telemetry/model-pricing.yaml +0 -0
  204. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/telemetry/runtimes/claude-code.yaml +0 -0
  205. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/telemetry/runtimes/codex.yaml +0 -0
  206. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/telemetry/stage-config.yaml +0 -0
  207. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/telemetry/stage-labels.yaml +0 -0
  208. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/telemetry/tool-colors.yaml +0 -0
  209. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/terminals/arrow.json +0 -0
  210. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/terminals/aurora.json +0 -0
  211. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/terminals/beacon.json +0 -0
  212. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/terminals/bracket3d.json +0 -0
  213. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/terminals/chevron.json +0 -0
  214. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/terminals/crosshair.json +0 -0
  215. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/terminals/diamond.json +0 -0
  216. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/terminals/rocket.json +0 -0
  217. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/terminals/rules/bar.json +0 -0
  218. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/terminals/rules/dashed.json +0 -0
  219. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/terminals/rules/five-wave.json +0 -0
  220. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/terminals/rules/spectral.json +0 -0
  221. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/terminals/rules/straight.json +0 -0
  222. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/terminals/rules/wave.json +0 -0
  223. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/data/terminals/stijl.json +0 -0
  224. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/kit.py +0 -0
  225. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/mcp/__init__.py +0 -0
  226. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/mcp/__main__.py +0 -0
  227. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/mcp/server.py +0 -0
  228. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/py.typed +0 -0
  229. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/render/__init__.py +0 -0
  230. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/render/chart_engine.py +0 -0
  231. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/render/fonts.py +0 -0
  232. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/render/glyphs.py +0 -0
  233. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/render/motion.py +0 -0
  234. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/render/templates.py +0 -0
  235. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/serve/__init__.py +0 -0
  236. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/serve/app.py +0 -0
  237. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/serve/data_tokens.py +0 -0
  238. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/telemetry/__init__.py +0 -0
  239. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/telemetry/capture.py +0 -0
  240. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/telemetry/codex_parser.py +0 -0
  241. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/telemetry/contract.py +0 -0
  242. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/telemetry/corrections.py +0 -0
  243. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/telemetry/cost.py +0 -0
  244. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/telemetry/models.py +0 -0
  245. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/telemetry/parser.py +0 -0
  246. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/telemetry/runtimes.py +0 -0
  247. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/telemetry/stages.py +0 -0
  248. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-area.svg.j2 +0 -0
  249. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-axes.svg.j2 +0 -0
  250. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-empty-state.svg.j2 +0 -0
  251. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-gridlines.svg.j2 +0 -0
  252. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-markers/circle.svg.j2 +0 -0
  253. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-markers/diamond.svg.j2 +0 -0
  254. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-markers/endpoint-diamond.svg.j2 +0 -0
  255. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-markers/endpoint-rect.svg.j2 +0 -0
  256. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-markers/rect.svg.j2 +0 -0
  257. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-milestone.svg.j2 +0 -0
  258. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-polyline.svg.j2 +0 -0
  259. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/filter.svg.j2 +0 -0
  260. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/glyph-inline.svg.j2 +0 -0
  261. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/glyph.svg.j2 +0 -0
  262. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/gradient.svg.j2 +0 -0
  263. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/metadata.svg.j2 +0 -0
  264. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/metric.svg.j2 +0 -0
  265. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/phase-segment.svg.j2 +0 -0
  266. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/rule.svg.j2 +0 -0
  267. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/status.svg.j2 +0 -0
  268. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/components/terminal.svg.j2 +0 -0
  269. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/document.svg.j2 +0 -0
  270. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/error-badge.svg.j2 +0 -0
  271. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge/brutalist-content.j2 +0 -0
  272. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge/brutalist-defs.j2 +0 -0
  273. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge/cellular-content.j2 +0 -0
  274. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge/cellular-defs.j2 +0 -0
  275. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge/chrome-content.j2 +0 -0
  276. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge/chrome-defs.j2 +0 -0
  277. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge/default-content.j2 +0 -0
  278. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge/default-defs.j2 +0 -0
  279. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge.svg.j2 +0 -0
  280. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/catalog.svg.j2 +0 -0
  281. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/chart/brutalist-content.j2 +0 -0
  282. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/chart/brutalist-defs.j2 +0 -0
  283. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/chart/cellular-content.j2 +0 -0
  284. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/chart/cellular-defs.j2 +0 -0
  285. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/chart/chrome-content.j2 +0 -0
  286. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/chart/chrome-defs.j2 +0 -0
  287. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/chart.svg.j2 +0 -0
  288. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/divider/brutalist-seam.svg.j2 +0 -0
  289. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/divider/chrome-band.svg.j2 +0 -0
  290. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/divider.svg.j2 +0 -0
  291. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon/brutalist-content.j2 +0 -0
  292. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon/brutalist-defs.j2 +0 -0
  293. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon/cellular-content.j2 +0 -0
  294. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon/cellular-defs.j2 +0 -0
  295. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon/chrome-content.j2 +0 -0
  296. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon/chrome-defs.j2 +0 -0
  297. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon/default-content.j2 +0 -0
  298. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon/default-defs.j2 +0 -0
  299. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon.svg.j2 +0 -0
  300. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/brutalist-content.j2 +0 -0
  301. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/brutalist-defs.j2 +0 -0
  302. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/brutalist-overlay.j2 +0 -0
  303. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/cellular-content.j2 +0 -0
  304. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/cellular-defs.j2 +0 -0
  305. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/cellular-overlay.j2 +0 -0
  306. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/chrome-content.j2 +0 -0
  307. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/chrome-defs.j2 +0 -0
  308. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/chrome-overlay.j2 +0 -0
  309. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/default-content.j2 +0 -0
  310. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/default-defs.j2 +0 -0
  311. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal.svg.j2 +0 -0
  312. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/master-card.svg.j2 +0 -0
  313. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/rhythm-strip.svg.j2 +0 -0
  314. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/stats/brutalist-content.j2 +0 -0
  315. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/stats/brutalist-defs.j2 +0 -0
  316. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/stats/cellular-content.j2 +0 -0
  317. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/stats/cellular-defs.j2 +0 -0
  318. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/stats/chrome-content.j2 +0 -0
  319. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/stats/chrome-defs.j2 +0 -0
  320. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/stats.svg.j2 +0 -0
  321. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/brutalist-content.j2 +0 -0
  322. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/brutalist-defs.j2 +0 -0
  323. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/brutalist-status.j2 +0 -0
  324. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/cellular-content.j2 +0 -0
  325. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/cellular-defs.j2 +0 -0
  326. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/cellular-status.j2 +0 -0
  327. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/chrome-content.j2 +0 -0
  328. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/chrome-defs.j2 +0 -0
  329. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/chrome-status.j2 +0 -0
  330. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/default-content.j2 +0 -0
  331. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/default-defs.j2 +0 -0
  332. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/default-status.j2 +0 -0
  333. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip.svg.j2 +0 -0
  334. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/motions/border/chromatic-pulse.svg.j2 +0 -0
  335. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/motions/border/corner-trace.svg.j2 +0 -0
  336. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/motions/border/dual-orbit.svg.j2 +0 -0
  337. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/motions/border/entanglement.svg.j2 +0 -0
  338. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/motions/border/rimrun.svg.j2 +0 -0
  339. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/partials/provider-glyphs.svg.j2 +0 -0
  340. {hyperweave-0.2.23 → hyperweave-0.2.24}/src/hyperweave/templates/partials/state-signal-cascade.j2 +0 -0
  341. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/__init__.py +0 -0
  342. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/conftest.py +0 -0
  343. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/fixtures/codex_session.jsonl +0 -0
  344. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/fixtures/codex_session_patches.jsonl +0 -0
  345. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/fixtures/github_contributions/synthetic.html +0 -0
  346. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/fixtures/session.json +0 -0
  347. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/fixtures/session.jsonl +0 -0
  348. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/helpers.py +0 -0
  349. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_assembler.py +0 -0
  350. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_badge_cellular.py +0 -0
  351. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_chart_engine.py +0 -0
  352. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_chart_frame.py +0 -0
  353. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_codex_parser.py +0 -0
  354. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_compose_bar_chart.py +0 -0
  355. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_compose_rhythm_strip.py +0 -0
  356. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_compose_variant_field.py +0 -0
  357. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_connectors.py +0 -0
  358. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_core.py +0 -0
  359. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_data_tokens.py +0 -0
  360. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_divider_cellular.py +0 -0
  361. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_divider_genome_specific.py +0 -0
  362. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_font_metrics_chakra.py +0 -0
  363. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_genome_automata.py +0 -0
  364. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_github_scrape.py +0 -0
  365. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_kit.py +0 -0
  366. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_marquee_v0_2_16.py +0 -0
  367. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_mcp.py +0 -0
  368. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_paradigm_cellular.py +0 -0
  369. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_paradigm_dispatch.py +0 -0
  370. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_paradigm_extensibility.py +0 -0
  371. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_parse_transcript_auto.py +0 -0
  372. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_receipt_token_compliance.py +0 -0
  373. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_render.py +0 -0
  374. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_resolver_rhythm.py +0 -0
  375. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_runtime_registries.py +0 -0
  376. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_serve.py +0 -0
  377. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_serve_live_state.py +0 -0
  378. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_slot_metric_state.py +0 -0
  379. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_state_inference.py +0 -0
  380. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_stats_card.py +0 -0
  381. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_strip_cellular.py +0 -0
  382. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_strip_status_toggle.py +0 -0
  383. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_telemetry.py +0 -0
  384. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_telemetry_contract_per_stage.py +0 -0
  385. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_telemetry_skin_dispatch.py +0 -0
  386. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_tool_class_completeness.py +0 -0
  387. {hyperweave-0.2.23 → hyperweave-0.2.24}/tests/test_variant_default_resolution.py +0 -0
  388. {hyperweave-0.2.23 → hyperweave-0.2.24}/uv.lock +0 -0
@@ -5,6 +5,26 @@ All notable changes to HyperWeave are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.2.24] - 2026-05-07
9
+
10
+ Receipts no longer clip past the right edge of the card when one tool dominates the session. Cleanup pass removes an unused template, an unused styling table, and two silent default-position fallbacks in the receipt template.
11
+
12
+ ### Fixed
13
+
14
+ - **Token map row could overflow the receipt's right edge** — sessions where a single tool used most of the tokens (for example 95% by one tool, the rest split between two others) made the smallest tool's cell extend past the card's right edge, hiding part of its label. The token map now shrinks cells proportionally when the row would otherwise overflow, with a minimum width that keeps every cell visible as a readable colored block.
15
+
16
+ ### Removed
17
+
18
+ - **Unused template `templates/components/treemap.svg.j2`** — orphan from before v0.2.21 with no remaining callers in the rendering pipeline.
19
+ - **Unused styling table in `compose/resolver.py`** — values had drifted from the live source in `treemap.py` and no template read it.
20
+ - **Silent default-position fallbacks for the provider and model labels** — these positions are always computed from the actual rendered text width; missing values now raise a clear template error instead of silently rendering at the legacy hardcoded position.
21
+
22
+ ### Notes
23
+
24
+ - 914 tests (was 910); 4 new tests cover token-map cell widths under heavy and balanced tool distributions plus the row of small tool cells fitting within the card.
25
+ - The row of small tool cells was already safe by construction (8 cells * 90px + 7 gaps * 4px = 748 <= 752); a defensive test now locks that contract.
26
+ - ruff + format + mypy --strict green.
27
+
8
28
  ## [0.2.23] - 2026-05-06
9
29
 
10
30
  Multi-runtime tool registry replaces v0.2.22's single empirical `tool-classes.yaml`. Codex receipts ship as the second runtime via spec-driven YAML registries dispatched by JSONL-shape auto-detection.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hyperweave
3
- Version: 0.2.23
3
+ Version: 0.2.24
4
4
  Summary: Headless visual output layer for AI agents. One API call → self-contained SVG.
5
5
  Project-URL: Repository, https://github.com/InnerAura/hyperweave
6
6
  Project-URL: Issues, https://github.com/InnerAura/hyperweave/issues
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.2.23'
22
- __version_tuple__ = version_tuple = (0, 2, 23)
21
+ __version__ = version = '0.2.24'
22
+ __version_tuple__ = version_tuple = (0, 2, 24)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -1606,51 +1606,6 @@ def _wall_clock_minutes(stages: list[dict[str, Any]], fallback_m: float) -> floa
1606
1606
  return max((max(ends) - min(starts)).total_seconds() / 60.0, 1.0)
1607
1607
 
1608
1608
 
1609
- # ── Tier styling table for the treemap (Phase B template thinness) ──
1610
- # All tier-derived font sizes, x offsets, and accent widths live here so
1611
- # the receipt template iterates cells without branching on tier. The
1612
- # values are derived from tier 1 / 2 / 3 visual hierarchy in the v9
1613
- # specimens (claude-code-ledger as the canonical reference).
1614
- _TREEMAP_TIER_STYLES: dict[int, dict[str, Any]] = {
1615
- 1: {
1616
- "accent_w": 4,
1617
- "label_x": 14,
1618
- "label_size": 13,
1619
- "detail_x": 14,
1620
- "detail_y": 72,
1621
- "detail_size": 10,
1622
- "error_size": 9,
1623
- "error_pad": 8,
1624
- "pct_size": 36,
1625
- "pct_y": 58,
1626
- },
1627
- 2: {
1628
- "accent_w": 3,
1629
- "label_x": 10,
1630
- "label_size": 10,
1631
- "detail_x": 10,
1632
- "detail_y": 24,
1633
- "detail_size": 8,
1634
- "error_size": 8,
1635
- "error_pad": 8,
1636
- "pct_size": 0, # tier 2/3 omit the big-pct block
1637
- "pct_y": 0,
1638
- },
1639
- 3: {
1640
- "accent_w": 3,
1641
- "label_x": 9,
1642
- "label_size": 9,
1643
- "detail_x": 9,
1644
- "detail_y": 19,
1645
- "detail_size": 8,
1646
- "error_size": 8,
1647
- "error_pad": 7,
1648
- "pct_size": 0,
1649
- "pct_y": 0,
1650
- },
1651
- }
1652
-
1653
-
1654
1609
  def resolve_receipt(
1655
1610
  spec: ComposeSpec,
1656
1611
  genome: dict[str, Any],
@@ -2039,7 +1994,6 @@ def resolve_receipt(
2039
1994
  "treemap_legend": treemap_legend,
2040
1995
  "treemap_header_chips": treemap_header_chips,
2041
1996
  "treemap_cells": treemap_cells,
2042
- "tier_styles": _TREEMAP_TIER_STYLES,
2043
1997
  # Rhythm panel — v0.2.21 risograph-canonical structure
2044
1998
  "stage_count": len(stages),
2045
1999
  "rhythm_original_count": original_count,
@@ -460,11 +460,33 @@ def compute_treemap_layout(
460
460
  usable = content_w - total_gaps
461
461
  mid_total = sum(t.get("total_tokens", t.get("count", 0)) for t in mid_tools) or 1
462
462
 
463
- x = 0
464
- for i, t in enumerate(mid_tools):
463
+ # Pass 1: compute raw widths with the readability floor.
464
+ raw_w: list[int] = []
465
+ for t in mid_tools:
465
466
  t_tokens = t.get("total_tokens", t.get("count", 0))
466
467
  share = t_tokens / mid_total
467
- w = max(int(usable * share), 40)
468
+ raw_w.append(max(int(usable * share), 40))
469
+
470
+ # Post-hoc rescale when floor pressure pushes the sum past the budget.
471
+ # Mirrors bar_chart.py's rescale pattern. The 24px rescale floor keeps
472
+ # a cell visible as a colored slab; below that, _truncate_label's 24px
473
+ # padding threshold returns empty and the cell becomes a pure color
474
+ # signal — the deliberate graceful-degradation point under skew.
475
+ #
476
+ # Bound: the post-rescale sum is provably ≤ usable when
477
+ # usable ≥ n * rescale_floor. For tier-2 with n ≤ 3 (sorted_tools[1:4])
478
+ # and rescale_floor = 24, this holds for usable ≥ 72 — equivalently
479
+ # content_w ≥ 80. At the receipt's 752px content_w the headroom is
480
+ # ~10*; below 80px the canvas is too small to render anyway.
481
+ raw_total = sum(raw_w)
482
+ if raw_total > usable and raw_total > 0:
483
+ scale = usable / raw_total
484
+ raw_w = [max(int(w * scale), 24) for w in raw_w]
485
+
486
+ # Pass 2: build cells with the (possibly rescaled) widths.
487
+ x = 0
488
+ for i, (t, w) in enumerate(zip(mid_tools, raw_w, strict=True)):
489
+ t_tokens = t.get("total_tokens", t.get("count", 0))
468
490
  cells.append(
469
491
  _make_cell(
470
492
  tier=2,
@@ -64,9 +64,9 @@
64
64
  {% if has_glyph %}
65
65
  <use href="#{{ glyph_id }}" x="24" y="13" width="18" height="18"/>
66
66
  {% endif %}
67
- <text x="{{ provider_label_x | default(50) }}" y="27" class="s ink1" font-size="14" font-weight="700">{{ provider_label }}</text>
67
+ <text x="{{ provider_label_x }}" y="27" class="s ink1" font-size="14" font-weight="700">{{ provider_label }}</text>
68
68
  {% if model_label %}
69
- <text x="{{ model_label_x | default(142) }}" y="27" class="m ink2" font-size="11" letter-spacing="0.04em">· {{ model_label }}</text>
69
+ <text x="{{ model_label_x }}" y="27" class="m ink2" font-size="11" letter-spacing="0.04em">· {{ model_label }}</text>
70
70
  {% endif %}
71
71
  {# Phase pill at top-right — token-driven, branch-free.
72
72
  Voltage (titanium spec): layered structure — dark outer base + thin frame
@@ -131,6 +131,113 @@ def test_tier2_widths_plus_gaps_fit_content_w() -> None:
131
131
  assert last.x + last.w <= 752
132
132
 
133
133
 
134
+ # --------------------------------------------------------------------------- #
135
+ # Floor-pressure rescale (v0.2.24 — tier-2 budget invariant) #
136
+ # --------------------------------------------------------------------------- #
137
+
138
+
139
+ def test_tier2_budget_invariant_under_floor_pressure() -> None:
140
+ """Reproduces production receipt overflow: tier-2 share distribution
141
+ 95% / 3% / 2% pushed the rightmost cell past 752px because the 2%
142
+ cell hit the 40px readability floor without a corresponding rescale
143
+ of its larger siblings. The post-hoc rescale must restore the bound.
144
+ """
145
+ tools = [
146
+ _tool("Bash", 5_000_000, 500, "execute"), # tier-1
147
+ _tool("Edit", 950_000, 200, "mutate"),
148
+ _tool("Read", 30_000, 50, "explore"),
149
+ _tool("Write", 20_000, 30, "mutate"),
150
+ ]
151
+ cells = compute_treemap_layout(tools)
152
+ tier2 = [c for c in cells if c.tier == 2]
153
+ assert len(tier2) == 3, f"expected 3 tier-2 cells, got {len(tier2)}"
154
+ last = max(tier2, key=lambda c: c.x + c.w)
155
+ assert last.x + last.w <= 752, f"production overflow regression: last cell ends at {last.x + last.w}"
156
+
157
+
158
+ def test_tier2_extreme_skew_triggers_rescale() -> None:
159
+ """3 tools at 99% / 0.5% / 0.5% — both small cells hit the 40 floor
160
+ and the largest cell would push raw_total well past usable. The
161
+ rescale must activate, and the post-rescale sum + gaps must fit
162
+ inside content_w. Asserts the budget bound explicitly so a future
163
+ regression where the rescale floor of 24 breaks the bound surfaces
164
+ as a test failure rather than a silent overflow.
165
+ """
166
+ tools = [
167
+ _tool("Bash", 10_000_000, 1000, "execute"), # tier-1
168
+ _tool("Edit", 990_000, 100, "mutate"),
169
+ _tool("Read", 5_000, 5, "explore"),
170
+ _tool("Write", 5_000, 5, "mutate"),
171
+ ]
172
+ cells = compute_treemap_layout(tools)
173
+ tier2 = [c for c in cells if c.tier == 2]
174
+ assert len(tier2) == 3
175
+
176
+ # Rescale activates: the largest cell shrinks below its un-rescaled
177
+ # proportional width (744 * 0.99 ≈ 736).
178
+ largest = max(tier2, key=lambda c: c.w)
179
+ assert largest.w < 736, f"expected rescaled largest cell, got w={largest.w}"
180
+
181
+ # Post-rescale sum invariant: sum of cell widths plus inter-cell gaps
182
+ # must fit inside content_w. This is the budget bound; provably tight
183
+ # when usable >= n * 24 (holds for content_w >= 80; default 752 has ~10* headroom).
184
+ gap_px = 4
185
+ total = sum(c.w for c in tier2) + (len(tier2) - 1) * gap_px
186
+ assert total <= 752, f"tier-2 budget invariant broken: cells={[c.w for c in tier2]}, sum+gaps={total}"
187
+
188
+
189
+ def test_tier2_balanced_distribution_no_rescale() -> None:
190
+ """Balanced 50/30/20 distribution — no cell hits the 40 floor, so
191
+ the rescale path doesn't run. Guards against regressions where the
192
+ rescale runs unnecessarily and shrinks balanced cells.
193
+ """
194
+ tools = [
195
+ _tool("Bash", 5_000_000, 500, "execute"), # tier-1
196
+ _tool("Edit", 500_000, 200, "mutate"),
197
+ _tool("Read", 300_000, 100, "explore"),
198
+ _tool("Write", 200_000, 50, "mutate"),
199
+ ]
200
+ cells = compute_treemap_layout(tools)
201
+ tier2 = [c for c in cells if c.tier == 2]
202
+ assert len(tier2) == 3
203
+
204
+ # No cell at the 40 floor → rescale didn't run → proportional widths
205
+ # are preserved (modulo integer rounding).
206
+ assert all(c.w > 40 for c in tier2), f"cells={[c.w for c in tier2]}"
207
+
208
+ # Order matches descending token rank.
209
+ assert tier2[0].name == "Edit"
210
+ assert tier2[1].name == "Read"
211
+ assert tier2[2].name == "Write"
212
+ assert tier2[0].w > tier2[1].w > tier2[2].w
213
+
214
+ # Budget invariant still holds.
215
+ gap_px = 4
216
+ total = sum(c.w for c in tier2) + (len(tier2) - 1) * gap_px
217
+ assert total <= 752
218
+
219
+
220
+ def test_tier3_uniform_budget_invariant_under_max_cells() -> None:
221
+ """Tier-3 uses uniform 90px cells with max_cells=8. Verify the budget
222
+ invariant at maximum cell count and that the +N more overflow cell
223
+ occupies the last visible slot. Defensive test: tier-3 is provably
224
+ safe today (8*90 + 7*4 = 748 ≤ 752), but a future refactor that
225
+ breaks the uniform-cell contract should fail this test.
226
+ """
227
+ # 1 tier-1 + 3 tier-2 + 12 tier-3 (12 > max_cells=8 → triggers +N more).
228
+ tools = [_tool(f"Tool{i:02d}", 100_000 - i * 100, 50 - i, "coordinate") for i in range(16)]
229
+ cells = compute_treemap_layout(tools)
230
+ tier3 = [c for c in cells if c.tier == 3]
231
+ assert len(tier3) <= 8, f"tier-3 exceeded max_cells: got {len(tier3)}"
232
+
233
+ overflow = [c for c in tier3 if c.is_overflow]
234
+ assert len(overflow) == 1, f"expected 1 +N more cell, got {len(overflow)}"
235
+
236
+ # Budget invariant: rightmost cell edge ≤ content_w.
237
+ rightmost = max(c.x + c.w for c in tier3)
238
+ assert rightmost <= 752, f"tier-3 budget broken: rightmost={rightmost}"
239
+
240
+
134
241
  # --------------------------------------------------------------------------- #
135
242
  # Overflow handling — "+N more" cell #
136
243
  # --------------------------------------------------------------------------- #
@@ -33,6 +33,14 @@ def test_generate_data_cards_writes_stats_and_chart(proofset_module: object) ->
33
33
  Timeline was removed in v0.2.14; the section header retained its name
34
34
  in the script for git-history continuity but only stats + chart artifacts
35
35
  are emitted now.
36
+
37
+ Stats are network-independent and must always render. The chart frame
38
+ requires a successful GitHub stargazer fetch with REST/GraphQL cross-
39
+ check agreement; in CI without auth (or under rate-limit pressure) the
40
+ generator deliberately skips the chart rather than ship disagreeing
41
+ data. That's the system working as designed, not a test failure — so
42
+ we verify stats unconditionally and `pytest.skip` the chart leg when
43
+ the generator legitimately omitted it.
36
44
  """
37
45
  from hyperweave.core.enums import GenomeId
38
46
 
@@ -40,14 +48,27 @@ def test_generate_data_cards_writes_stats_and_chart(proofset_module: object) ->
40
48
  assert count > 0, "generator should emit at least one artifact"
41
49
 
42
50
  out_dir = proofset_module.OUT # type: ignore[attr-defined]
43
- expected_files = ("stats.svg", "chart_stars_full.svg")
44
51
  for genome in GenomeId:
45
- gdir = out_dir / "proofset" / genome / "data-cards"
46
- for fname in expected_files:
47
- fpath = gdir / fname
48
- assert fpath.exists(), f"expected artifact missing: {fpath}"
49
- assert fpath.stat().st_size > 500, f"artifact too small: {fpath}"
50
- assert "<svg" in fpath.read_text(), f"not valid SVG: {fpath}"
52
+ stats = out_dir / "proofset" / genome / "data-cards" / "stats.svg"
53
+ assert stats.exists(), f"expected artifact missing: {stats}"
54
+ assert stats.stat().st_size > 500, f"artifact too small: {stats}"
55
+ assert "<svg" in stats.read_text(), f"not valid SVG: {stats}"
56
+
57
+ # Chart artifacts share a single upstream fetch — if one is missing
58
+ # they're all missing, so probe one genome and skip if absent.
59
+ sample_genome = next(iter(GenomeId))
60
+ sample_chart = out_dir / "proofset" / sample_genome / "data-cards" / "chart_stars_full.svg"
61
+ if not sample_chart.exists():
62
+ pytest.skip(
63
+ "chart artifact intentionally skipped by generator "
64
+ "(GitHub stargazer cross-check disagreement or auth/rate-limit failure); "
65
+ "stats artifacts verified above"
66
+ )
67
+ for genome in GenomeId:
68
+ chart = out_dir / "proofset" / genome / "data-cards" / "chart_stars_full.svg"
69
+ assert chart.exists(), f"expected artifact missing: {chart}"
70
+ assert chart.stat().st_size > 500, f"artifact too small: {chart}"
71
+ assert "<svg" in chart.read_text(), f"not valid SVG: {chart}"
51
72
 
52
73
 
53
74
  def test_generate_readme_includes_new_sections(proofset_module: object) -> None:
@@ -379,11 +379,12 @@ def test_receipt_renders_failed_tool_calls_legend() -> None:
379
379
 
380
380
 
381
381
  def test_treemap_field_is_errors_not_error_count() -> None:
382
- """Both receipt template and the treemap component read cell.errors.
382
+ """No live .j2 template references the stale `cell.error_count` field.
383
383
 
384
- Prior drift: templates/frames/receipt.svg.j2 used `cell.errors` while the
385
- orphan templates/components/treemap.svg.j2 used `cell.error_count`. Both
386
- should now read `cell.errors` so the resolver's single emission key wins.
384
+ Prior drift: receipt.svg.j2 used `cell.errors` while a now-deleted orphan
385
+ treemap component used `cell.error_count`. The orphan was removed in the
386
+ P0 audit cleanup; this test still defends against any future drift across
387
+ all live .j2 files.
387
388
  """
388
389
  from pathlib import Path
389
390
 
@@ -1,46 +0,0 @@
1
- {# HyperWeave Treemap Component — token distribution visualization.
2
- Renders a 3-tier treemap for receipt telemetry frames.
3
- Area = token share, hue = tool class.
4
- Expects: treemap_tiers (list of tier dicts), uid, content_w #}
5
-
6
- {% set tm_w = content_w | default(752) %}
7
-
8
- {% for tier in treemap_tiers | default([]) %}
9
- <g transform="translate(0, {{ tier.y | default(10 + (loop.index0 * 36)) }})"
10
- data-hw-zone="treemap-tier-{{ loop.index0 }}">
11
- {% for cell in tier.cells %}
12
- <rect x="{{ cell.x }}" width="{{ cell.w }}" height="{{ tier.h | default(88) }}" rx="{{ tier.rx | default(3) }}"
13
- fill="url(#{{ uid }}-{{ cell.tool_class }})"
14
- stroke="var(--dna-tool-{{ cell.tool_class }})"
15
- stroke-opacity="0.2" stroke-width="1"/>
16
- {# Cell name #}
17
- <text class="m cell-name" font-size="{{ tier.name_size | default(13) }}"
18
- x="{{ cell.x + 12 }}" y="{{ tier.name_y | default(22) }}">{{ cell.name }}</text>
19
- {% if cell.pct %}
20
- {# Large percentage (tier 1 dominant only) #}
21
- <text class="m" font-size="{{ tier.pct_size | default(32) }}" font-weight="700"
22
- fill="var(--dna-tool-{{ cell.tool_class }})"
23
- x="{{ cell.x + 12 }}" y="{{ tier.pct_y | default(58) }}">{{ cell.pct }}%</text>
24
- {% endif %}
25
- {% if cell.meta %}
26
- <text class="m cell-meta" font-size="{{ tier.meta_size | default(10) }}"
27
- x="{{ cell.x + 12 }}" y="{{ tier.meta_y | default(74) }}">{{ cell.meta }}</text>
28
- {% endif %}
29
- {% if cell.errors %}
30
- <text class="m cell-error" font-size="8"
31
- x="{{ cell.x + cell.w - 10 }}" y="{{ tier.name_y | default(17) }}"
32
- text-anchor="end">{{ cell.error_symbol | default('x') }}{{ cell.errors }}</text>
33
- {% endif %}
34
- {% endfor %}
35
- </g>
36
- {% endfor %}
37
-
38
- {# Encoding key #}
39
- {% if show_key | default(true) %}
40
- <g transform="translate(0, {{ treemap_key_y | default(174) }})">
41
- <text class="m" font-size="8" font-weight="700" fill="var(--dna-signal)">AREA</text>
42
- <text class="m ghost" font-size="8" x="30">-> token share</text>
43
- <text class="m" font-size="8" font-weight="700" fill="var(--dna-signal)" x="140">HUE</text>
44
- <text class="m ghost" font-size="8" x="164">-> tool class</text>
45
- </g>
46
- {% endif %}
File without changes
File without changes
File without changes
File without changes
File without changes