fuaran-py 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (770) hide show
  1. fuaran_py-0.2.0/.gitattributes +31 -0
  2. fuaran_py-0.2.0/.github/dependabot.yml +21 -0
  3. fuaran_py-0.2.0/.github/workflows/ci.yml +168 -0
  4. fuaran_py-0.2.0/.github/workflows/publish-pypi.yml +131 -0
  5. fuaran_py-0.2.0/.gitignore +32 -0
  6. fuaran_py-0.2.0/CLAUDE.md +437 -0
  7. fuaran_py-0.2.0/CODE_OF_CONDUCT.md +77 -0
  8. fuaran_py-0.2.0/CONTRIBUTING.md +32 -0
  9. fuaran_py-0.2.0/LICENSE +215 -0
  10. fuaran_py-0.2.0/NOTICE +16 -0
  11. fuaran_py-0.2.0/PKG-INFO +1000 -0
  12. fuaran_py-0.2.0/README.md +970 -0
  13. fuaran_py-0.2.0/SECURITY.md +105 -0
  14. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-accept-full.json +1 -0
  15. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-accept-int-for-float.json +1 -0
  16. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-accept-minimal.json +1 -0
  17. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-reject-enum.json +1 -0
  18. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-reject-float-range.json +1 -0
  19. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-reject-int-range.json +1 -0
  20. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-reject-missing-required.json +1 -0
  21. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-reject-string-len.json +1 -0
  22. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-reject-type-mismatch.json +1 -0
  23. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-reject-undeclared.json +1 -0
  24. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-full.json +1 -0
  25. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-minimal.json +1 -0
  26. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-answered.json +1 -0
  27. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-declined.json +1 -0
  28. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-reject-empty-id.json +1 -0
  29. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-reject-missing-answer.json +1 -0
  30. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-reject-stray-key.json +1 -0
  31. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-reject-unknown-type.json +1 -0
  32. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-superseded-anon.json +1 -0
  33. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-superseded-by.json +1 -0
  34. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-timedout.json +1 -0
  35. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-bad-space.json +1 -0
  36. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-bad-timeout.json +1 -0
  37. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-bad-version.json +1 -0
  38. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-default-nonconformant.json +1 -0
  39. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-duplicate-field.json +1 -0
  40. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-empty-contract.json +1 -0
  41. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-empty-id.json +1 -0
  42. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-missing-version.json +1 -0
  43. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-stray-key.json +1 -0
  44. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-tree-decode.json +1 -0
  45. fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-unknown-node.json +1 -0
  46. fuaran_py-0.2.0/conformance/corpus/envelope/envelope-foreign-major.json +1 -0
  47. fuaran_py-0.2.0/conformance/corpus/envelope/envelope-foreign-namespace.json +1 -0
  48. fuaran_py-0.2.0/conformance/corpus/envelope/envelope-known-current.json +1 -0
  49. fuaran_py-0.2.0/conformance/corpus/envelope/envelope-unknown-behind.json +1 -0
  50. fuaran_py-0.2.0/conformance/corpus/envelope/envelope-unknown-malformed-required-profile.json +1 -0
  51. fuaran_py-0.2.0/conformance/corpus/envelope/envelope-unknown-required-profile.json +1 -0
  52. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-022-lvr-emphasis-loud.expected.json +1 -0
  53. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-022-lvr-emphasis-loud.json +1 -0
  54. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-022-lvr-emphasis-normal.expected.json +1 -0
  55. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-022-lvr-emphasis-normal.json +1 -0
  56. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-1126-clipboard-literal-envelope.expected.json +1 -0
  57. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-1126-clipboard-literal-envelope.json +1 -0
  58. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-1521-int-slot-integral-float.expected.json +1 -0
  59. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-1521-int-slot-integral-float.json +1 -0
  60. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-1521-payload-integer-beyond-int53.expected.json +1 -0
  61. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-1521-payload-integer-beyond-int53.json +1 -0
  62. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-alias-emphasis-muted.expected.json +1 -0
  63. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-alias-emphasis-muted.json +1 -0
  64. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-alias-emphasis-strong.expected.json +1 -0
  65. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-alias-emphasis-strong.json +1 -0
  66. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-alias-tone-danger.expected.json +1 -0
  67. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-alias-tone-danger.json +1 -0
  68. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-alias-tone-positive.expected.json +1 -0
  69. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-alias-tone-positive.json +1 -0
  70. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-explicit-default-column.expected.json +1 -0
  71. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-explicit-default-column.json +1 -0
  72. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-explicit-default-metric.expected.json +1 -0
  73. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-explicit-default-metric.json +1 -0
  74. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-explicit-default-style.expected.json +1 -0
  75. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-explicit-default-style.json +1 -0
  76. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-596-form-explicit-auto-state.expected.json +1 -0
  77. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-596-form-explicit-auto-state.json +1 -0
  78. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-665-rows-opaque-sentinel.expected.json +1 -0
  79. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-665-rows-opaque-sentinel.json +1 -0
  80. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-call-url.expected.json +1 -0
  81. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-call-url.json +1 -0
  82. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-card-title-metric-value.expected.json +1 -0
  83. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-card-title-metric-value.json +1 -0
  84. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-datagrid-data-column-type.expected.json +1 -0
  85. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-datagrid-data-column-type.json +1 -0
  86. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-form-field-name.expected.json +1 -0
  87. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-form-field-name.json +1 -0
  88. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-grid-columns-row.expected.json +1 -0
  89. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-grid-columns-row.json +1 -0
  90. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-navigate-href.expected.json +1 -0
  91. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-navigate-href.json +1 -0
  92. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-select-options-query-deps.expected.json +1 -0
  93. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-select-options-query-deps.json +1 -0
  94. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-bare-text-button-label.expected.json +1 -0
  95. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-bare-text-button-label.json +1 -0
  96. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-bare-text-callout.expected.json +1 -0
  97. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-bare-text-callout.json +1 -0
  98. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-bare-text-heading.expected.json +1 -0
  99. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-bare-text-heading.json +1 -0
  100. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-bare-text-markdown.expected.json +1 -0
  101. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-bare-text-markdown.json +1 -0
  102. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-binding-bound-wrapper.expected.json +1 -0
  103. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-binding-bound-wrapper.json +1 -0
  104. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-daterange-bare-array.expected.json +1 -0
  105. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-daterange-bare-array.json +1 -0
  106. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-daterange-static-envelope.expected.json +1 -0
  107. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-daterange-static-envelope.json +1 -0
  108. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-emphasis-cross-vocab.expected.json +1 -0
  109. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-emphasis-cross-vocab.json +1 -0
  110. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-fact-explicit-defaults.expected.json +1 -0
  111. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-fact-explicit-defaults.json +1 -0
  112. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-filterable-static-dashboard-compact.expected.json +1 -0
  113. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-filterable-static-dashboard-compact.json +1 -0
  114. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-grid-field-named-compact.expected.json +1 -0
  115. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-grid-field-named-compact.json +1 -0
  116. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-grid-transform-param-compact.expected.json +1 -0
  117. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-grid-transform-param-compact.json +1 -0
  118. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-image-caption-envelope.expected.json +1 -0
  119. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-image-caption-envelope.json +1 -0
  120. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-image-empty-srcset.expected.json +1 -0
  121. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-image-empty-srcset.json +1 -0
  122. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-image-explicit-defaults.expected.json +1 -0
  123. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-image-explicit-defaults.json +1 -0
  124. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-image-explicit-expandable-false.expected.json +1 -0
  125. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-image-explicit-expandable-false.json +1 -0
  126. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-master-detail-preselected-compact.expected.json +1 -0
  127. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-master-detail-preselected-compact.json +1 -0
  128. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-navigate-target-self.expected.json +1 -0
  129. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-navigate-target-self.json +1 -0
  130. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-null-static-options.expected.json +1 -0
  131. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-null-static-options.json +1 -0
  132. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-opaque-static-markers.expected.json +1 -0
  133. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-opaque-static-markers.json +1 -0
  134. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-opaque-static-options.expected.json +1 -0
  135. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-opaque-static-options.json +1 -0
  136. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-opaque-static-series.expected.json +1 -0
  137. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-opaque-static-series.json +1 -0
  138. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-opaque-static-values.expected.json +1 -0
  139. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-opaque-static-values.json +1 -0
  140. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-scalar-transform-composition-compact.expected.json +1 -0
  141. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-scalar-transform-composition-compact.json +1 -0
  142. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-a11y-label-bare-scalar.expected.json +1 -0
  143. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-a11y-label-bare-scalar.json +1 -0
  144. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-binding-scalar-fraction.expected.json +1 -0
  145. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-binding-scalar-fraction.json +1 -0
  146. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-grid-no-cols.expected.json +1 -0
  147. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-grid-no-cols.json +1 -0
  148. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-grid-template-no-cols.expected.json +1 -0
  149. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-grid-template-no-cols.json +1 -0
  150. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-options-bare-strings.expected.json +1 -0
  151. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-options-bare-strings.json +1 -0
  152. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-params-map.expected.json +1 -0
  153. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-params-map.json +1 -0
  154. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-segmented-orientation-omitted.expected.json +1 -0
  155. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-segmented-orientation-omitted.json +1 -0
  156. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-static-envelope-plain-scalars.expected.json +1 -0
  157. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-static-envelope-plain-scalars.json +1 -0
  158. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-tonedpill-pill-tag.expected.json +1 -0
  159. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-tonedpill-pill-tag.json +1 -0
  160. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-tonedpill-tone-aliases.expected.json +1 -0
  161. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-tonedpill-tone-aliases.json +1 -0
  162. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-tonedpill-tonemap-alias.expected.json +1 -0
  163. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-tonedpill-tonemap-alias.json +1 -0
  164. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-bare-columns.expected.json +1 -0
  165. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-bare-columns.json +1 -0
  166. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-epoch-timestamps.expected.json +1 -0
  167. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-epoch-timestamps.json +1 -0
  168. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-expr-spellings.expected.json +1 -0
  169. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-expr-spellings.json +1 -0
  170. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-flat-contains.expected.json +1 -0
  171. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-flat-contains.json +1 -0
  172. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-flat-filter.expected.json +1 -0
  173. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-flat-filter.json +1 -0
  174. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-flat-or.expected.json +1 -0
  175. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-flat-or.json +1 -0
  176. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-flat-scalar-fn.expected.json +1 -0
  177. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-flat-scalar-fn.json +1 -0
  178. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-schemaless.expected.json +1 -0
  179. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-schemaless.json +1 -0
  180. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-source-rowmajor.expected.json +1 -0
  181. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-source-rowmajor.json +1 -0
  182. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-source-state-rows.expected.json +1 -0
  183. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-source-state-rows.json +1 -0
  184. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-step-aliases.expected.json +1 -0
  185. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-step-aliases.json +1 -0
  186. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-values-only-columns.expected.json +1 -0
  187. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-values-only-columns.json +1 -0
  188. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-window-cumsum-legacy.expected.json +1 -0
  189. fuaran_py-0.2.0/conformance/corpus/lenient/lenient-window-cumsum-legacy.json +1 -0
  190. fuaran_py-0.2.0/conformance/corpus/manifest.json +4390 -0
  191. fuaran_py-0.2.0/conformance/corpus/markdown/corpus.json +64 -0
  192. fuaran_py-0.2.0/conformance/corpus/nodes/a11y-alert-assertive.json +1 -0
  193. fuaran_py-0.2.0/conformance/corpus/nodes/a11y-button-named.json +1 -0
  194. fuaran_py-0.2.0/conformance/corpus/nodes/a11y-image-decorative.json +1 -0
  195. fuaran_py-0.2.0/conformance/corpus/nodes/a11y-link-labelled.json +1 -0
  196. fuaran_py-0.2.0/conformance/corpus/nodes/a11y-wrapper-all-slots.json +1 -0
  197. fuaran_py-0.2.0/conformance/corpus/nodes/a11y-wrapper-state-bound.json +1 -0
  198. fuaran_py-0.2.0/conformance/corpus/nodes/action-confirm-cancel.json +1 -0
  199. fuaran_py-0.2.0/conformance/corpus/nodes/action-confirm.json +1 -0
  200. fuaran_py-0.2.0/conformance/corpus/nodes/action-focus.json +1 -0
  201. fuaran_py-0.2.0/conformance/corpus/nodes/action-navigate-bound.json +1 -0
  202. fuaran_py-0.2.0/conformance/corpus/nodes/action-navigate-target.json +1 -0
  203. fuaran_py-0.2.0/conformance/corpus/nodes/badge-1.json +1 -0
  204. fuaran_py-0.2.0/conformance/corpus/nodes/badge-transform-live.json +1 -0
  205. fuaran_py-0.2.0/conformance/corpus/nodes/boundary-1.json +1 -0
  206. fuaran_py-0.2.0/conformance/corpus/nodes/box-break-before-1.json +1 -0
  207. fuaran_py-0.2.0/conformance/corpus/nodes/box-keep-together-1.json +1 -0
  208. fuaran_py-0.2.0/conformance/corpus/nodes/btn-1.json +1 -0
  209. fuaran_py-0.2.0/conformance/corpus/nodes/btn-copy-bound.json +1 -0
  210. fuaran_py-0.2.0/conformance/corpus/nodes/btn-copy-link.json +1 -0
  211. fuaran_py-0.2.0/conformance/corpus/nodes/btn-invoke.json +1 -0
  212. fuaran_py-0.2.0/conformance/corpus/nodes/btn-json-payloads.json +1 -0
  213. fuaran_py-0.2.0/conformance/corpus/nodes/btn-read-workbook.json +1 -0
  214. fuaran_py-0.2.0/conformance/corpus/nodes/button-print.json +1 -0
  215. fuaran_py-0.2.0/conformance/corpus/nodes/button-setstate-valuefrom.json +1 -0
  216. fuaran_py-0.2.0/conformance/corpus/nodes/call-into.json +1 -0
  217. fuaran_py-0.2.0/conformance/corpus/nodes/callout-1.json +1 -0
  218. fuaran_py-0.2.0/conformance/corpus/nodes/card-1.json +1 -0
  219. fuaran_py-0.2.0/conformance/corpus/nodes/chart-1.json +1 -0
  220. fuaran_py-0.2.0/conformance/corpus/nodes/chart-annotation-bands.json +1 -0
  221. fuaran_py-0.2.0/conformance/corpus/nodes/chart-annotation-events.json +1 -0
  222. fuaran_py-0.2.0/conformance/corpus/nodes/chart-annotations.json +1 -0
  223. fuaran_py-0.2.0/conformance/corpus/nodes/chart-axis-titles.json +1 -0
  224. fuaran_py-0.2.0/conformance/corpus/nodes/chart-data-labels.json +1 -0
  225. fuaran_py-0.2.0/conformance/corpus/nodes/chart-legend-position.json +1 -0
  226. fuaran_py-0.2.0/conformance/corpus/nodes/chart-state-rows.json +1 -0
  227. fuaran_py-0.2.0/conformance/corpus/nodes/chart-temporal-x.json +1 -0
  228. fuaran_py-0.2.0/conformance/corpus/nodes/chart-value-format.json +1 -0
  229. fuaran_py-0.2.0/conformance/corpus/nodes/code-1.json +1 -0
  230. fuaran_py-0.2.0/conformance/corpus/nodes/composite-root.json +1 -0
  231. fuaran_py-0.2.0/conformance/corpus/nodes/composite-tabs-panels.json +1 -0
  232. fuaran_py-0.2.0/conformance/corpus/nodes/controls-closure.json +1 -0
  233. fuaran_py-0.2.0/conformance/corpus/nodes/controls-declarative.json +1 -0
  234. fuaran_py-0.2.0/conformance/corpus/nodes/custom-1.json +1 -0
  235. fuaran_py-0.2.0/conformance/corpus/nodes/custom-bounded-1.json +1 -0
  236. fuaran_py-0.2.0/conformance/corpus/nodes/custom-bounded-advisory.json +1 -0
  237. fuaran_py-0.2.0/conformance/corpus/nodes/custom-nonascii-keys.json +1 -0
  238. fuaran_py-0.2.0/conformance/corpus/nodes/dash-empty.json +1 -0
  239. fuaran_py-0.2.0/conformance/corpus/nodes/discl-1.json +1 -0
  240. fuaran_py-0.2.0/conformance/corpus/nodes/drawing-1.json +1 -0
  241. fuaran_py-0.2.0/conformance/corpus/nodes/drawing-empty.json +1 -0
  242. fuaran_py-0.2.0/conformance/corpus/nodes/drawing-nonfinite-sentinels.json +1 -0
  243. fuaran_py-0.2.0/conformance/corpus/nodes/drawing-rotated-labels.json +1 -0
  244. fuaran_py-0.2.0/conformance/corpus/nodes/drawing-tipped-shapes.json +1 -0
  245. fuaran_py-0.2.0/conformance/corpus/nodes/embed-1.json +1 -0
  246. fuaran_py-0.2.0/conformance/corpus/nodes/embed-aspect-1.json +1 -0
  247. fuaran_py-0.2.0/conformance/corpus/nodes/embed-permissions-1.json +1 -0
  248. fuaran_py-0.2.0/conformance/corpus/nodes/empty-state-card.json +1 -0
  249. fuaran_py-0.2.0/conformance/corpus/nodes/expr-params-state-selection.json +1 -0
  250. fuaran_py-0.2.0/conformance/corpus/nodes/expr-scalar.json +1 -0
  251. fuaran_py-0.2.0/conformance/corpus/nodes/fact-1.json +1 -0
  252. fuaran_py-0.2.0/conformance/corpus/nodes/filterable-static-dashboard.json +1 -0
  253. fuaran_py-0.2.0/conformance/corpus/nodes/filters-1.json +1 -0
  254. fuaran_py-0.2.0/conformance/corpus/nodes/filters-date-range.json +1 -0
  255. fuaran_py-0.2.0/conformance/corpus/nodes/filters-declarative.json +1 -0
  256. fuaran_py-0.2.0/conformance/corpus/nodes/filters-rating-colour.json +1 -0
  257. fuaran_py-0.2.0/conformance/corpus/nodes/filters-segmented.json +1 -0
  258. fuaran_py-0.2.0/conformance/corpus/nodes/filters-tokens.json +1 -0
  259. fuaran_py-0.2.0/conformance/corpus/nodes/form-1.json +1 -0
  260. fuaran_py-0.2.0/conformance/corpus/nodes/form-color.json +1 -0
  261. fuaran_py-0.2.0/conformance/corpus/nodes/form-combobox-freetext.json +1 -0
  262. fuaran_py-0.2.0/conformance/corpus/nodes/form-combobox-query.json +1 -0
  263. fuaran_py-0.2.0/conformance/corpus/nodes/form-combobox-static.json +1 -0
  264. fuaran_py-0.2.0/conformance/corpus/nodes/form-date-range.json +1 -0
  265. fuaran_py-0.2.0/conformance/corpus/nodes/form-date.json +1 -0
  266. fuaran_py-0.2.0/conformance/corpus/nodes/form-declarative-minimal.json +1 -0
  267. fuaran_py-0.2.0/conformance/corpus/nodes/form-declarative.json +1 -0
  268. fuaran_py-0.2.0/conformance/corpus/nodes/form-field-rules.json +1 -0
  269. fuaran_py-0.2.0/conformance/corpus/nodes/form-local-1.json +1 -0
  270. fuaran_py-0.2.0/conformance/corpus/nodes/form-local-debounce.json +1 -0
  271. fuaran_py-0.2.0/conformance/corpus/nodes/form-local-declared.json +1 -0
  272. fuaran_py-0.2.0/conformance/corpus/nodes/form-ranged.json +1 -0
  273. fuaran_py-0.2.0/conformance/corpus/nodes/form-rating-halves.json +1 -0
  274. fuaran_py-0.2.0/conformance/corpus/nodes/form-rating.json +1 -0
  275. fuaran_py-0.2.0/conformance/corpus/nodes/form-segmented.json +1 -0
  276. fuaran_py-0.2.0/conformance/corpus/nodes/form-toggle.json +1 -0
  277. fuaran_py-0.2.0/conformance/corpus/nodes/form-tokens-freetext.json +1 -0
  278. fuaran_py-0.2.0/conformance/corpus/nodes/form-tokens-query.json +1 -0
  279. fuaran_py-0.2.0/conformance/corpus/nodes/form-tokens-suggested.json +1 -0
  280. fuaran_py-0.2.0/conformance/corpus/nodes/format-bindings.json +1 -0
  281. fuaran_py-0.2.0/conformance/corpus/nodes/format-since.json +1 -0
  282. fuaran_py-0.2.0/conformance/corpus/nodes/frag-decl-1.json +1 -0
  283. fuaran_py-0.2.0/conformance/corpus/nodes/frag-decl-param.json +1 -0
  284. fuaran_py-0.2.0/conformance/corpus/nodes/frag-ref-1.json +1 -0
  285. fuaran_py-0.2.0/conformance/corpus/nodes/frag-ref-args.json +1 -0
  286. fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-confirm-action-pair-ref.json +1 -0
  287. fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-confirm-action-pair.json +1 -0
  288. fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-empty-state-panel-ref.json +1 -0
  289. fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-empty-state-panel.json +1 -0
  290. fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-filter-bar-ref.json +1 -0
  291. fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-filter-bar.json +1 -0
  292. fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-kpi-strip-ref.json +1 -0
  293. fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-kpi-strip.json +1 -0
  294. fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-labelled-metric-row-ref.json +1 -0
  295. fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-labelled-metric-row.json +1 -0
  296. fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-loading-placeholder-ref.json +1 -0
  297. fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-loading-placeholder.json +1 -0
  298. fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-metric-card-ref.json +1 -0
  299. fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-metric-card.json +1 -0
  300. fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-section-header-ref.json +1 -0
  301. fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-section-header.json +1 -0
  302. fuaran_py-0.2.0/conformance/corpus/nodes/glayout-1.json +1 -0
  303. fuaran_py-0.2.0/conformance/corpus/nodes/glayout-tpl-autofit.json +1 -0
  304. fuaran_py-0.2.0/conformance/corpus/nodes/glayout-tpl-fixed.json +1 -0
  305. fuaran_py-0.2.0/conformance/corpus/nodes/glayout-tpl-ratio.json +1 -0
  306. fuaran_py-0.2.0/conformance/corpus/nodes/grid-1.json +1 -0
  307. fuaran_py-0.2.0/conformance/corpus/nodes/grid-bound-sort.json +1 -0
  308. fuaran_py-0.2.0/conformance/corpus/nodes/grid-declared-edit.json +1 -0
  309. fuaran_py-0.2.0/conformance/corpus/nodes/grid-editable-state.json +1 -0
  310. fuaran_py-0.2.0/conformance/corpus/nodes/grid-exportable-1.json +1 -0
  311. fuaran_py-0.2.0/conformance/corpus/nodes/grid-field-named.json +1 -0
  312. fuaran_py-0.2.0/conformance/corpus/nodes/grid-keep-rows-together-1.json +1 -0
  313. fuaran_py-0.2.0/conformance/corpus/nodes/grid-paged-sorted.json +1 -0
  314. fuaran_py-0.2.0/conformance/corpus/nodes/grid-paged.json +1 -0
  315. fuaran_py-0.2.0/conformance/corpus/nodes/grid-reorderable.json +1 -0
  316. fuaran_py-0.2.0/conformance/corpus/nodes/grid-repeat-header-1.json +1 -0
  317. fuaran_py-0.2.0/conformance/corpus/nodes/grid-sort-state-key.json +1 -0
  318. fuaran_py-0.2.0/conformance/corpus/nodes/grid-toned-pill.json +1 -0
  319. fuaran_py-0.2.0/conformance/corpus/nodes/grid-transform-param.json +1 -0
  320. fuaran_py-0.2.0/conformance/corpus/nodes/grid-transform.json +1 -0
  321. fuaran_py-0.2.0/conformance/corpus/nodes/heading-1.json +1 -0
  322. fuaran_py-0.2.0/conformance/corpus/nodes/icon-1.json +1 -0
  323. fuaran_py-0.2.0/conformance/corpus/nodes/image-1.json +1 -0
  324. fuaran_py-0.2.0/conformance/corpus/nodes/image-caption-1.json +1 -0
  325. fuaran_py-0.2.0/conformance/corpus/nodes/image-caption-i18n-1.json +1 -0
  326. fuaran_py-0.2.0/conformance/corpus/nodes/image-expandable-1.json +1 -0
  327. fuaran_py-0.2.0/conformance/corpus/nodes/image-expandable-figure-1.json +1 -0
  328. fuaran_py-0.2.0/conformance/corpus/nodes/image-presentation-1.json +1 -0
  329. fuaran_py-0.2.0/conformance/corpus/nodes/image-srcset-1.json +1 -0
  330. fuaran_py-0.2.0/conformance/corpus/nodes/limit-node-depth-at-max.json +1 -0
  331. fuaran_py-0.2.0/conformance/corpus/nodes/limit-tree-item-depth-at-max.json +1 -0
  332. fuaran_py-0.2.0/conformance/corpus/nodes/link-1.json +1 -0
  333. fuaran_py-0.2.0/conformance/corpus/nodes/link-protected-1.json +1 -0
  334. fuaran_py-0.2.0/conformance/corpus/nodes/list-1.json +1 -0
  335. fuaran_py-0.2.0/conformance/corpus/nodes/lvr-1.json +1 -0
  336. fuaran_py-0.2.0/conformance/corpus/nodes/map-1.json +1 -0
  337. fuaran_py-0.2.0/conformance/corpus/nodes/markdown-1.json +1 -0
  338. fuaran_py-0.2.0/conformance/corpus/nodes/masonry-1.json +1 -0
  339. fuaran_py-0.2.0/conformance/corpus/nodes/masonry-gap.json +1 -0
  340. fuaran_py-0.2.0/conformance/corpus/nodes/master-detail-multi-field.json +1 -0
  341. fuaran_py-0.2.0/conformance/corpus/nodes/master-detail-preselected-second-row.json +1 -0
  342. fuaran_py-0.2.0/conformance/corpus/nodes/master-detail-preselected.json +1 -0
  343. fuaran_py-0.2.0/conformance/corpus/nodes/math-1.json +1 -0
  344. fuaran_py-0.2.0/conformance/corpus/nodes/media-audio-1.json +1 -0
  345. fuaran_py-0.2.0/conformance/corpus/nodes/media-audio-transcript-1.json +1 -0
  346. fuaran_py-0.2.0/conformance/corpus/nodes/media-video-1.json +1 -0
  347. fuaran_py-0.2.0/conformance/corpus/nodes/media-video-autoplay-1.json +1 -0
  348. fuaran_py-0.2.0/conformance/corpus/nodes/media-video-captions-1.json +1 -0
  349. fuaran_py-0.2.0/conformance/corpus/nodes/media-video-poster-1.json +1 -0
  350. fuaran_py-0.2.0/conformance/corpus/nodes/media-video-tracks-2.json +1 -0
  351. fuaran_py-0.2.0/conformance/corpus/nodes/metric-1.json +1 -0
  352. fuaran_py-0.2.0/conformance/corpus/nodes/metric-duration-1.json +1 -0
  353. fuaran_py-0.2.0/conformance/corpus/nodes/metric-float-17sig.json +1 -0
  354. fuaran_py-0.2.0/conformance/corpus/nodes/metric-float-1e17.json +1 -0
  355. fuaran_py-0.2.0/conformance/corpus/nodes/metric-float-bigint.json +1 -0
  356. fuaran_py-0.2.0/conformance/corpus/nodes/metric-float-exp-neg.json +1 -0
  357. fuaran_py-0.2.0/conformance/corpus/nodes/metric-float-exp-pos.json +1 -0
  358. fuaran_py-0.2.0/conformance/corpus/nodes/metric-inverted-polarity.json +1 -0
  359. fuaran_py-0.2.0/conformance/corpus/nodes/metric-invoke.json +1 -0
  360. fuaran_py-0.2.0/conformance/corpus/nodes/metric-nonfinite-sentinel.json +1 -0
  361. fuaran_py-0.2.0/conformance/corpus/nodes/modal-1.json +1 -0
  362. fuaran_py-0.2.0/conformance/corpus/nodes/mount-1.json +1 -0
  363. fuaran_py-0.2.0/conformance/corpus/nodes/mount-2.json +1 -0
  364. fuaran_py-0.2.0/conformance/corpus/nodes/multiselect-1.json +1 -0
  365. fuaran_py-0.2.0/conformance/corpus/nodes/multiselect-chip-list-param.json +1 -0
  366. fuaran_py-0.2.0/conformance/corpus/nodes/node-visible.json +1 -0
  367. fuaran_py-0.2.0/conformance/corpus/nodes/now-environment-binding.json +1 -0
  368. fuaran_py-0.2.0/conformance/corpus/nodes/now-grain.json +1 -0
  369. fuaran_py-0.2.0/conformance/corpus/nodes/popover-anchored-1.json +1 -0
  370. fuaran_py-0.2.0/conformance/corpus/nodes/popover-open-1.json +1 -0
  371. fuaran_py-0.2.0/conformance/corpus/nodes/progress-1.json +1 -0
  372. fuaran_py-0.2.0/conformance/corpus/nodes/query-dependson.json +1 -0
  373. fuaran_py-0.2.0/conformance/corpus/nodes/scalar-transform-composition.json +1 -0
  374. fuaran_py-0.2.0/conformance/corpus/nodes/scroll-1.json +1 -0
  375. fuaran_py-0.2.0/conformance/corpus/nodes/select-1.json +1 -0
  376. fuaran_py-0.2.0/conformance/corpus/nodes/shared-source-seeded-pair.json +1 -0
  377. fuaran_py-0.2.0/conformance/corpus/nodes/skel-1.json +1 -0
  378. fuaran_py-0.2.0/conformance/corpus/nodes/spark-1.json +1 -0
  379. fuaran_py-0.2.0/conformance/corpus/nodes/spark-nonfinite-sentinel.json +1 -0
  380. fuaran_py-0.2.0/conformance/corpus/nodes/split-1.json +1 -0
  381. fuaran_py-0.2.0/conformance/corpus/nodes/stack-1.json +1 -0
  382. fuaran_py-0.2.0/conformance/corpus/nodes/step-1.json +1 -0
  383. fuaran_py-0.2.0/conformance/corpus/nodes/style-direction-isolated-1.json +1 -0
  384. fuaran_py-0.2.0/conformance/corpus/nodes/style-direction-ltr-1.json +1 -0
  385. fuaran_py-0.2.0/conformance/corpus/nodes/style-role-voice-1.json +1 -0
  386. fuaran_py-0.2.0/conformance/corpus/nodes/summary-1.json +1 -0
  387. fuaran_py-0.2.0/conformance/corpus/nodes/switch-1.json +1 -0
  388. fuaran_py-0.2.0/conformance/corpus/nodes/switch-carousel-1.json +1 -0
  389. fuaran_py-0.2.0/conformance/corpus/nodes/switch-on-selection.json +1 -0
  390. fuaran_py-0.2.0/conformance/corpus/nodes/switch-on-transform-scalar.json +1 -0
  391. fuaran_py-0.2.0/conformance/corpus/nodes/switch-predicate-only.json +1 -0
  392. fuaran_py-0.2.0/conformance/corpus/nodes/switch-predicate.json +1 -0
  393. fuaran_py-0.2.0/conformance/corpus/nodes/table-1.json +1 -0
  394. fuaran_py-0.2.0/conformance/corpus/nodes/table-sortable-1.json +1 -0
  395. fuaran_py-0.2.0/conformance/corpus/nodes/tabs-1.json +1 -0
  396. fuaran_py-0.2.0/conformance/corpus/nodes/tabs-explicit-1.json +1 -0
  397. fuaran_py-0.2.0/conformance/corpus/nodes/toast-1.json +1 -0
  398. fuaran_py-0.2.0/conformance/corpus/nodes/tooltip-button-1.json +1 -0
  399. fuaran_py-0.2.0/conformance/corpus/nodes/tooltip-icon-button-1.json +1 -0
  400. fuaran_py-0.2.0/conformance/corpus/nodes/tooltip-metric-1.json +1 -0
  401. fuaran_py-0.2.0/conformance/corpus/nodes/transfer-board.json +1 -0
  402. fuaran_py-0.2.0/conformance/corpus/nodes/tree-1.json +1 -0
  403. fuaran_py-0.2.0/conformance/corpus/nodes/tree-expanded-1.json +1 -0
  404. fuaran_py-0.2.0/conformance/corpus/nodes/tree-selection-1.json +1 -0
  405. fuaran_py-0.2.0/conformance/corpus/nodes/upload-1.json +1 -0
  406. fuaran_py-0.2.0/conformance/corpus/nodes/upload-capture-camera-1.json +1 -0
  407. fuaran_py-0.2.0/conformance/corpus/nodes/upload-capture-microphone-1.json +1 -0
  408. fuaran_py-0.2.0/conformance/corpus/nodes/upload-destination-1.json +1 -0
  409. fuaran_py-0.2.0/conformance/corpus/nodes/upload-drop-1.json +1 -0
  410. fuaran_py-0.2.0/conformance/corpus/nodes/upload-paste-1.json +1 -0
  411. fuaran_py-0.2.0/conformance/corpus/ops/op-batch.json +1 -0
  412. fuaran_py-0.2.0/conformance/corpus/ops/op-editnode.json +1 -0
  413. fuaran_py-0.2.0/conformance/corpus/ops/op-insertchild.json +1 -0
  414. fuaran_py-0.2.0/conformance/corpus/ops/op-movenode.json +1 -0
  415. fuaran_py-0.2.0/conformance/corpus/ops/op-removenode.json +1 -0
  416. fuaran_py-0.2.0/conformance/corpus/ops/op-reorderchildren.json +1 -0
  417. fuaran_py-0.2.0/conformance/corpus/ops/op-replacebinding.json +1 -0
  418. fuaran_py-0.2.0/conformance/corpus/ops/op-replaceroot.json +1 -0
  419. fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-badfield.json +1 -0
  420. fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-badindex.json +1 -0
  421. fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-column0-label.json +1 -0
  422. fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-column1-label.json +1 -0
  423. fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-field0-required.json +1 -0
  424. fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-field1-required.json +1 -0
  425. fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-malformed.json +1 -0
  426. fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-object-value.json +1 -0
  427. fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-yfield0.json +1 -0
  428. fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-yfield1.json +1 -0
  429. fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop.json +1 -0
  430. fuaran_py-0.2.0/conformance/corpus/ops/op-updatestate.json +1 -0
  431. fuaran_py-0.2.0/conformance/corpus/ops/op-updatestyle (phase 147 role=eyebrow + voice=structural).json +1 -0
  432. fuaran_py-0.2.0/conformance/corpus/ops/op-updatestyle (phase 1472 direction=ltr, the only style member).json +1 -0
  433. fuaran_py-0.2.0/conformance/corpus/ops/op-updatestyle.json +1 -0
  434. fuaran_py-0.2.0/conformance/corpus/reject/reject-a11y-hidden-nonbool.json +1 -0
  435. fuaran_py-0.2.0/conformance/corpus/reject/reject-a11y-labelledby-nonstring.json +1 -0
  436. fuaran_py-0.2.0/conformance/corpus/reject/reject-a11y-liveregion-nonstring.json +1 -0
  437. fuaran_py-0.2.0/conformance/corpus/reject/reject-a11y-liveregion-unknown.json +1 -0
  438. fuaran_py-0.2.0/conformance/corpus/reject/reject-a11y-not-object.json +1 -0
  439. fuaran_py-0.2.0/conformance/corpus/reject/reject-a11y-role-nonstring.json +1 -0
  440. fuaran_py-0.2.0/conformance/corpus/reject/reject-action-print-with-payload.json +1 -0
  441. fuaran_py-0.2.0/conformance/corpus/reject/reject-binding-float-bool.json +1 -0
  442. fuaran_py-0.2.0/conformance/corpus/reject/reject-binding-float-sentinel-case.json +1 -0
  443. fuaran_py-0.2.0/conformance/corpus/reject/reject-binding-float-string.json +1 -0
  444. fuaran_py-0.2.0/conformance/corpus/reject/reject-binding-floatseq-sentinel-case.json +1 -0
  445. fuaran_py-0.2.0/conformance/corpus/reject/reject-binding-int-bool.json +1 -0
  446. fuaran_py-0.2.0/conformance/corpus/reject/reject-binding-int-sentinel-string.json +1 -0
  447. fuaran_py-0.2.0/conformance/corpus/reject/reject-box-masonry-nonpositive-cols.json +1 -0
  448. fuaran_py-0.2.0/conformance/corpus/reject/reject-chart-annotation-date-unparseable.json +1 -0
  449. fuaran_py-0.2.0/conformance/corpus/reject/reject-chart-annotation-nonfinite.json +1 -0
  450. fuaran_py-0.2.0/conformance/corpus/reject/reject-chart-annotation-range-unordered.json +1 -0
  451. fuaran_py-0.2.0/conformance/corpus/reject/reject-color-value-not-hex.json +1 -0
  452. fuaran_py-0.2.0/conformance/corpus/reject/reject-combobox-allowfreetext-nonbool.json +1 -0
  453. fuaran_py-0.2.0/conformance/corpus/reject/reject-confirm-missing-onconfirm.json +1 -0
  454. fuaran_py-0.2.0/conformance/corpus/reject/reject-confirm-nested.json +1 -0
  455. fuaran_py-0.2.0/conformance/corpus/reject/reject-daterange-unordered.json +1 -0
  456. fuaran_py-0.2.0/conformance/corpus/reject/reject-embed-missing-title.json +1 -0
  457. fuaran_py-0.2.0/conformance/corpus/reject/reject-embed-permission-nonstring.json +1 -0
  458. fuaran_py-0.2.0/conformance/corpus/reject/reject-embed-unknown-permission.json +1 -0
  459. fuaran_py-0.2.0/conformance/corpus/reject/reject-emptynodeid.json +1 -0
  460. fuaran_py-0.2.0/conformance/corpus/reject/reject-expr-col-reference.json +1 -0
  461. fuaran_py-0.2.0/conformance/corpus/reject/reject-expr-unbound-param.json +1 -0
  462. fuaran_py-0.2.0/conformance/corpus/reject/reject-fieldrule-empty.json +1 -0
  463. fuaran_py-0.2.0/conformance/corpus/reject/reject-fieldrule-length-unordered.json +1 -0
  464. fuaran_py-0.2.0/conformance/corpus/reject/reject-formfield-near-miss-validation.json +1 -0
  465. fuaran_py-0.2.0/conformance/corpus/reject/reject-image-expandable-nonbool.json +1 -0
  466. fuaran_py-0.2.0/conformance/corpus/reject/reject-image-srcset-nonpositive-width.json +1 -0
  467. fuaran_py-0.2.0/conformance/corpus/reject/reject-image-srcset-null.json +1 -0
  468. fuaran_py-0.2.0/conformance/corpus/reject/reject-int-slot-fractional.json +1 -0
  469. fuaran_py-0.2.0/conformance/corpus/reject/reject-int-slot-out-of-range.json +1 -0
  470. fuaran_py-0.2.0/conformance/corpus/reject/reject-invalid-empty.json +0 -0
  471. fuaran_py-0.2.0/conformance/corpus/reject/reject-invalid-garbage.json +1 -0
  472. fuaran_py-0.2.0/conformance/corpus/reject/reject-invalid-truncated.json +1 -0
  473. fuaran_py-0.2.0/conformance/corpus/reject/reject-json-bare-nan.json +1 -0
  474. fuaran_py-0.2.0/conformance/corpus/reject/reject-json-duplicate-key.json +1 -0
  475. fuaran_py-0.2.0/conformance/corpus/reject/reject-json-lone-high-surrogate.json +1 -0
  476. fuaran_py-0.2.0/conformance/corpus/reject/reject-json-lone-low-surrogate.json +1 -0
  477. fuaran_py-0.2.0/conformance/corpus/reject/reject-json-number-empty-exponent.json +1 -0
  478. fuaran_py-0.2.0/conformance/corpus/reject/reject-json-number-leading-plus.json +1 -0
  479. fuaran_py-0.2.0/conformance/corpus/reject/reject-json-number-leading-zero.json +1 -0
  480. fuaran_py-0.2.0/conformance/corpus/reject/reject-json-number-no-integer-part.json +1 -0
  481. fuaran_py-0.2.0/conformance/corpus/reject/reject-json-number-trailing-point.json +1 -0
  482. fuaran_py-0.2.0/conformance/corpus/reject/reject-json-raw-control-char.json +1 -0
  483. fuaran_py-0.2.0/conformance/corpus/reject/reject-json-surrogate-pair-split.json +1 -0
  484. fuaran_py-0.2.0/conformance/corpus/reject/reject-json-trailing-content.json +1 -0
  485. fuaran_py-0.2.0/conformance/corpus/reject/reject-limit-json-depth-at-max.json +1 -0
  486. fuaran_py-0.2.0/conformance/corpus/reject/reject-limit-json-depth.json +1 -0
  487. fuaran_py-0.2.0/conformance/corpus/reject/reject-limit-node-depth.json +1 -0
  488. fuaran_py-0.2.0/conformance/corpus/reject/reject-limit-op-depth.json +1 -0
  489. fuaran_py-0.2.0/conformance/corpus/reject/reject-limit-tree-item-depth.json +1 -0
  490. fuaran_py-0.2.0/conformance/corpus/reject/reject-local-codec-no-inverse.json +1 -0
  491. fuaran_py-0.2.0/conformance/corpus/reject/reject-local-oncommit-and-committo.json +1 -0
  492. fuaran_py-0.2.0/conformance/corpus/reject/reject-media-autoplay-nonbool.json +1 -0
  493. fuaran_py-0.2.0/conformance/corpus/reject/reject-media-missing-label.json +1 -0
  494. fuaran_py-0.2.0/conformance/corpus/reject/reject-media-track-default-nonbool.json +1 -0
  495. fuaran_py-0.2.0/conformance/corpus/reject/reject-media-track-missing-srclang.json +1 -0
  496. fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-binding-type.json +1 -0
  497. fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-custom-moduleid.json +1 -0
  498. fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-markdown-text.json +1 -0
  499. fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-metric-value.json +1 -0
  500. fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-mount-scopeid.json +1 -0
  501. fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-node-id.json +1 -0
  502. fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-node-kind.json +1 -0
  503. fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-switch-cases.json +1 -0
  504. fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-switch-default.json +1 -0
  505. fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-switch-statekey.json +1 -0
  506. fuaran_py-0.2.0/conformance/corpus/reject/reject-modal-modality-nonstring.json +1 -0
  507. fuaran_py-0.2.0/conformance/corpus/reject/reject-modal-modality-unknown.json +1 -0
  508. fuaran_py-0.2.0/conformance/corpus/reject/reject-navigate-target-invalid.json +1 -0
  509. fuaran_py-0.2.0/conformance/corpus/reject/reject-nearmiss-a11y-aria-hidden.json +1 -0
  510. fuaran_py-0.2.0/conformance/corpus/reject/reject-nearmiss-a11y-arialabel.json +1 -0
  511. fuaran_py-0.2.0/conformance/corpus/reject/reject-nearmiss-a11y-live.json +1 -0
  512. fuaran_py-0.2.0/conformance/corpus/reject/reject-nearmiss-a11y-liveregion-case.json +1 -0
  513. fuaran_py-0.2.0/conformance/corpus/reject/reject-nearmiss-column-readonly.json +1 -0
  514. fuaran_py-0.2.0/conformance/corpus/reject/reject-nearmiss-grid-behaviour-record.json +1 -0
  515. fuaran_py-0.2.0/conformance/corpus/reject/reject-nearmiss-grid-current-page.json +1 -0
  516. fuaran_py-0.2.0/conformance/corpus/reject/reject-nearmiss-grid-sortable.json +1 -0
  517. fuaran_py-0.2.0/conformance/corpus/reject/reject-now-grain-invalid.json +1 -0
  518. fuaran_py-0.2.0/conformance/corpus/reject/reject-null-action-aitool-args.json +1 -0
  519. fuaran_py-0.2.0/conformance/corpus/reject/reject-null-action-notify-payload.json +1 -0
  520. fuaran_py-0.2.0/conformance/corpus/reject/reject-null-action-setstate-value.json +1 -0
  521. fuaran_py-0.2.0/conformance/corpus/reject/reject-null-custom-prop.json +1 -0
  522. fuaran_py-0.2.0/conformance/corpus/reject/reject-null-i18n-arg.json +1 -0
  523. fuaran_py-0.2.0/conformance/corpus/reject/reject-null-updateprop-value.json +1 -0
  524. fuaran_py-0.2.0/conformance/corpus/reject/reject-op-insertchild-empty-childid.json +1 -0
  525. fuaran_py-0.2.0/conformance/corpus/reject/reject-op-insertchild-missing-parentid.json +1 -0
  526. fuaran_py-0.2.0/conformance/corpus/reject/reject-op-insertchild-retired-position.json +1 -0
  527. fuaran_py-0.2.0/conformance/corpus/reject/reject-op-missing-type.json +1 -0
  528. fuaran_py-0.2.0/conformance/corpus/reject/reject-op-movenode-retired-newposition.json +1 -0
  529. fuaran_py-0.2.0/conformance/corpus/reject/reject-op-reorderchildren-wrongtype.json +1 -0
  530. fuaran_py-0.2.0/conformance/corpus/reject/reject-op-unknown-yeet.json +1 -0
  531. fuaran_py-0.2.0/conformance/corpus/reject/reject-op-updateprop-missing-path.json +1 -0
  532. fuaran_py-0.2.0/conformance/corpus/reject/reject-op-updatestyle-direction-nonstring.json +1 -0
  533. fuaran_py-0.2.0/conformance/corpus/reject/reject-op-updatestyle-direction-unknown.json +1 -0
  534. fuaran_py-0.2.0/conformance/corpus/reject/reject-rating-max-zero.json +1 -0
  535. fuaran_py-0.2.0/conformance/corpus/reject/reject-setstate-value-and-valuefrom.json +1 -0
  536. fuaran_py-0.2.0/conformance/corpus/reject/reject-spark-element-nonnumeric.json +1 -0
  537. fuaran_py-0.2.0/conformance/corpus/reject/reject-style-direction-nonstring.json +1 -0
  538. fuaran_py-0.2.0/conformance/corpus/reject/reject-style-direction-unknown.json +1 -0
  539. fuaran_py-0.2.0/conformance/corpus/reject/reject-switch-autoadvance-fractional.json +1 -0
  540. fuaran_py-0.2.0/conformance/corpus/reject/reject-switch-autoadvance-negative.json +1 -0
  541. fuaran_py-0.2.0/conformance/corpus/reject/reject-switch-autoadvance-zero.json +1 -0
  542. fuaran_py-0.2.0/conformance/corpus/reject/reject-switch-case-match-and-when.json +1 -0
  543. fuaran_py-0.2.0/conformance/corpus/reject/reject-switch-case-neither.json +1 -0
  544. fuaran_py-0.2.0/conformance/corpus/reject/reject-tokens-closed-without-suggestions.json +1 -0
  545. fuaran_py-0.2.0/conformance/corpus/reject/reject-tokens-value-not-list.json +1 -0
  546. fuaran_py-0.2.0/conformance/corpus/reject/reject-tonedpill-unknown-tone.json +1 -0
  547. fuaran_py-0.2.0/conformance/corpus/reject/reject-tooltip-nonstring.json +1 -0
  548. fuaran_py-0.2.0/conformance/corpus/reject/reject-tree-item-missing-id.json +1 -0
  549. fuaran_py-0.2.0/conformance/corpus/reject/reject-tree-item-missing-label.json +1 -0
  550. fuaran_py-0.2.0/conformance/corpus/reject/reject-tree-nested-item-missing-id.json +1 -0
  551. fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-binding.json +1 -0
  552. fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-capture-source.json +1 -0
  553. fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-drawing-curve-command.json +1 -0
  554. fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-drawing-shape.json +1 -0
  555. fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-image-aspect.json +1 -0
  556. fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-link-protection.json +1 -0
  557. fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-media-kind.json +1 -0
  558. fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-mount-direction.json +1 -0
  559. fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-static-sort-direction.json +1 -0
  560. fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-textsource.json +1 -0
  561. fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-tone.json +1 -0
  562. fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-trend-polarity.json +1 -0
  563. fuaran_py-0.2.0/conformance/corpus/reject/reject-upload-acceptpaste-nonbool.json +1 -0
  564. fuaran_py-0.2.0/conformance/corpus/reject/reject-upload-destination-empty.json +1 -0
  565. fuaran_py-0.2.0/conformance/corpus/reject/reject-upload-droptarget-nonbool.json +1 -0
  566. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongnodekind-sparkler.json +1 -0
  567. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongnodekind-widget.json +1 -0
  568. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-box-break-before.json +1 -0
  569. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-box-children.json +1 -0
  570. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-box-keep-together.json +1 -0
  571. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-clipboard-payload.json +1 -0
  572. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-discriminator.json +1 -0
  573. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-grid-default-sort-column.json +1 -0
  574. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-grid-exportable-number.json +1 -0
  575. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-grid-exportable.json +1 -0
  576. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-grid-keep-rows-together.json +1 -0
  577. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-grid-page-size-zero.json +1 -0
  578. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-grid-repeat-header.json +1 -0
  579. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-grid-transfer-in-key.json +1 -0
  580. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-grid-transfer-out-key.json +1 -0
  581. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-heading-level.json +1 -0
  582. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-id.json +1 -0
  583. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-kind.json +1 -0
  584. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-static-sort-column.json +1 -0
  585. fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-style-tone.json +1 -0
  586. fuaran_py-0.2.0/conformance/corpus/render-fidelity.json +835 -0
  587. fuaran_py-0.2.0/conformance/corpus/schema.json +10000 -0
  588. fuaran_py-0.2.0/conformance/sync_corpus.py +81 -0
  589. fuaran_py-0.2.0/docs/AUTHORING.md +444 -0
  590. fuaran_py-0.2.0/docs/decoder-robustness.json +28 -0
  591. fuaran_py-0.2.0/docs/decoder-robustness.md +21 -0
  592. fuaran_py-0.2.0/docs/fable-python-decision.md +127 -0
  593. fuaran_py-0.2.0/examples/getting_started.py +679 -0
  594. fuaran_py-0.2.0/examples/notebook_display.ipynb +2992 -0
  595. fuaran_py-0.2.0/examples/quickstart_client.py +36 -0
  596. fuaran_py-0.2.0/examples/quickstart_reactive_data_app.py +119 -0
  597. fuaran_py-0.2.0/examples/quickstart_terse_dashboard.py +106 -0
  598. fuaran_py-0.2.0/pyproject.toml +77 -0
  599. fuaran_py-0.2.0/run.ps1 +106 -0
  600. fuaran_py-0.2.0/samples/fastapi-host/README.md +168 -0
  601. fuaran_py-0.2.0/samples/fastapi-host/app.py +344 -0
  602. fuaran_py-0.2.0/src/fuaran_py/__init__.py +113 -0
  603. fuaran_py-0.2.0/src/fuaran_py/ai_tools/__init__.py +86 -0
  604. fuaran_py-0.2.0/src/fuaran_py/ai_tools/dispatch.py +91 -0
  605. fuaran_py-0.2.0/src/fuaran_py/ai_tools/introspect.py +190 -0
  606. fuaran_py-0.2.0/src/fuaran_py/ai_tools/surface.py +194 -0
  607. fuaran_py-0.2.0/src/fuaran_py/canonical.py +216 -0
  608. fuaran_py-0.2.0/src/fuaran_py/charts/__init__.py +3391 -0
  609. fuaran_py-0.2.0/src/fuaran_py/client/__init__.py +77 -0
  610. fuaran_py-0.2.0/src/fuaran_py/client/client.py +284 -0
  611. fuaran_py-0.2.0/src/fuaran_py/client/contract.py +199 -0
  612. fuaran_py-0.2.0/src/fuaran_py/client/session.py +66 -0
  613. fuaran_py-0.2.0/src/fuaran_py/client/wire.py +250 -0
  614. fuaran_py-0.2.0/src/fuaran_py/compute/__init__.py +42 -0
  615. fuaran_py-0.2.0/src/fuaran_py/compute/evaluate.py +621 -0
  616. fuaran_py-0.2.0/src/fuaran_py/conformance/__init__.py +7 -0
  617. fuaran_py-0.2.0/src/fuaran_py/conformance/bridge.py +84 -0
  618. fuaran_py-0.2.0/src/fuaran_py/conformance/decoder_fuzz.py +1046 -0
  619. fuaran_py-0.2.0/src/fuaran_py/conformance/fuzz_exchange.py +209 -0
  620. fuaran_py-0.2.0/src/fuaran_py/conformance/harness.py +111 -0
  621. fuaran_py-0.2.0/src/fuaran_py/conformance/refusal_report.py +123 -0
  622. fuaran_py-0.2.0/src/fuaran_py/dag.py +277 -0
  623. fuaran_py-0.2.0/src/fuaran_py/dataframe/__init__.py +149 -0
  624. fuaran_py-0.2.0/src/fuaran_py/dataframe/codec.py +1098 -0
  625. fuaran_py-0.2.0/src/fuaran_py/dataframe/evaluate.py +930 -0
  626. fuaran_py-0.2.0/src/fuaran_py/dataframe/model.py +428 -0
  627. fuaran_py-0.2.0/src/fuaran_py/elicitation.py +559 -0
  628. fuaran_py-0.2.0/src/fuaran_py/envelope.py +166 -0
  629. fuaran_py-0.2.0/src/fuaran_py/function.py +294 -0
  630. fuaran_py-0.2.0/src/fuaran_py/layout_observer/__init__.py +70 -0
  631. fuaran_py-0.2.0/src/fuaran_py/layout_observer/flags.py +260 -0
  632. fuaran_py-0.2.0/src/fuaran_py/layout_observer/observer.py +230 -0
  633. fuaran_py-0.2.0/src/fuaran_py/limits.py +79 -0
  634. fuaran_py-0.2.0/src/fuaran_py/merge.py +647 -0
  635. fuaran_py-0.2.0/src/fuaran_py/model.py +89 -0
  636. fuaran_py-0.2.0/src/fuaran_py/op_stream/__init__.py +140 -0
  637. fuaran_py-0.2.0/src/fuaran_py/op_stream/hash_chain.py +230 -0
  638. fuaran_py-0.2.0/src/fuaran_py/op_stream/in_memory_sink.py +132 -0
  639. fuaran_py-0.2.0/src/fuaran_py/op_stream/replay.py +375 -0
  640. fuaran_py-0.2.0/src/fuaran_py/op_stream/types.py +280 -0
  641. fuaran_py-0.2.0/src/fuaran_py/ops/__init__.py +72 -0
  642. fuaran_py-0.2.0/src/fuaran_py/ops/apply.py +1053 -0
  643. fuaran_py-0.2.0/src/fuaran_py/ops/decode.py +236 -0
  644. fuaran_py-0.2.0/src/fuaran_py/ops/diff.py +305 -0
  645. fuaran_py-0.2.0/src/fuaran_py/ops/encode.py +11 -0
  646. fuaran_py-0.2.0/src/fuaran_py/ops/placement.py +504 -0
  647. fuaran_py-0.2.0/src/fuaran_py/render_fidelity.py +439 -0
  648. fuaran_py-0.2.0/src/fuaran_py/renderer/__init__.py +132 -0
  649. fuaran_py-0.2.0/src/fuaran_py/renderer/bindings.py +525 -0
  650. fuaran_py-0.2.0/src/fuaran_py/renderer/content/fuaran-reference.css +4009 -0
  651. fuaran_py-0.2.0/src/fuaran_py/renderer/document.py +920 -0
  652. fuaran_py-0.2.0/src/fuaran_py/renderer/egress.py +596 -0
  653. fuaran_py-0.2.0/src/fuaran_py/renderer/email.py +1434 -0
  654. fuaran_py-0.2.0/src/fuaran_py/renderer/html.py +67 -0
  655. fuaran_py-0.2.0/src/fuaran_py/renderer/markdown.py +1211 -0
  656. fuaran_py-0.2.0/src/fuaran_py/renderer/notebook.py +406 -0
  657. fuaran_py-0.2.0/src/fuaran_py/renderer/projection.py +176 -0
  658. fuaran_py-0.2.0/src/fuaran_py/renderer/render.py +2679 -0
  659. fuaran_py-0.2.0/src/fuaran_py/renderer/sanitize.py +591 -0
  660. fuaran_py-0.2.0/src/fuaran_py/renderer/seeds.py +149 -0
  661. fuaran_py-0.2.0/src/fuaran_py/renderer/theme.py +208 -0
  662. fuaran_py-0.2.0/src/fuaran_py/result.py +71 -0
  663. fuaran_py-0.2.0/src/fuaran_py/runtime/__init__.py +22 -0
  664. fuaran_py-0.2.0/src/fuaran_py/runtime/runtime.py +256 -0
  665. fuaran_py-0.2.0/src/fuaran_py/runtime/sample.py +57 -0
  666. fuaran_py-0.2.0/src/fuaran_py/schema/__init__.py +15 -0
  667. fuaran_py-0.2.0/src/fuaran_py/schema/decode.py +4080 -0
  668. fuaran_py-0.2.0/src/fuaran_py/schema/encode.py +11 -0
  669. fuaran_py-0.2.0/src/fuaran_py/schema/types.py +3313 -0
  670. fuaran_py-0.2.0/src/fuaran_py/shapeguard.py +267 -0
  671. fuaran_py-0.2.0/src/fuaran_py/style_observer/__init__.py +129 -0
  672. fuaran_py-0.2.0/src/fuaran_py/style_observer/color.py +91 -0
  673. fuaran_py-0.2.0/src/fuaran_py/style_observer/flags.py +326 -0
  674. fuaran_py-0.2.0/src/fuaran_py/style_observer/manifest_flags.py +108 -0
  675. fuaran_py-0.2.0/src/fuaran_py/style_observer/observer.py +320 -0
  676. fuaran_py-0.2.0/src/fuaran_py/teleport.py +263 -0
  677. fuaran_py-0.2.0/src/fuaran_py/theme_manifest/__init__.py +91 -0
  678. fuaran_py-0.2.0/src/fuaran_py/theme_manifest/decode.py +174 -0
  679. fuaran_py-0.2.0/src/fuaran_py/theme_manifest/manifest.py +184 -0
  680. fuaran_py-0.2.0/src/fuaran_py/theme_manifest/project.py +173 -0
  681. fuaran_py-0.2.0/src/fuaran_py/ui/__init__.py +1474 -0
  682. fuaran_py-0.2.0/src/fuaran_py/ui/capability.py +238 -0
  683. fuaran_py-0.2.0/src/fuaran_py/ui/compute.py +759 -0
  684. fuaran_py-0.2.0/src/fuaran_py/ui/controls.py +313 -0
  685. fuaran_py-0.2.0/src/fuaran_py/ui/quick.py +381 -0
  686. fuaran_py-0.2.0/src/fuaran_py/validator/__init__.py +7 -0
  687. fuaran_py-0.2.0/src/fuaran_py/validator/validate.py +780 -0
  688. fuaran_py-0.2.0/tests/_corpus.py +116 -0
  689. fuaran_py-0.2.0/tests/_reference_host.py +95 -0
  690. fuaran_py-0.2.0/tests/fixtures/dataframe_parity.json +1 -0
  691. fuaran_py-0.2.0/tests/test_action_cases.py +62 -0
  692. fuaran_py-0.2.0/tests/test_ai_tools.py +179 -0
  693. fuaran_py-0.2.0/tests/test_authoring_toggle_now_selection.py +158 -0
  694. fuaran_py-0.2.0/tests/test_bare_state_source.py +75 -0
  695. fuaran_py-0.2.0/tests/test_bridge.py +91 -0
  696. fuaran_py-0.2.0/tests/test_browser_style_observer.py +80 -0
  697. fuaran_py-0.2.0/tests/test_canonical_numbers.py +48 -0
  698. fuaran_py-0.2.0/tests/test_capability_seam.py +118 -0
  699. fuaran_py-0.2.0/tests/test_chart_lowering.py +940 -0
  700. fuaran_py-0.2.0/tests/test_client.py +517 -0
  701. fuaran_py-0.2.0/tests/test_client_mock_endpoint.py +132 -0
  702. fuaran_py-0.2.0/tests/test_compute.py +388 -0
  703. fuaran_py-0.2.0/tests/test_compute_authoring.py +123 -0
  704. fuaran_py-0.2.0/tests/test_controls.py +309 -0
  705. fuaran_py-0.2.0/tests/test_corpus_sync.py +119 -0
  706. fuaran_py-0.2.0/tests/test_dag_roundtrip.py +174 -0
  707. fuaran_py-0.2.0/tests/test_dataframe_parity.py +72 -0
  708. fuaran_py-0.2.0/tests/test_decode_determinism.py +321 -0
  709. fuaran_py-0.2.0/tests/test_decoder_fuzz.py +202 -0
  710. fuaran_py-0.2.0/tests/test_diff.py +365 -0
  711. fuaran_py-0.2.0/tests/test_diff_golden.py +116 -0
  712. fuaran_py-0.2.0/tests/test_egress_policy.py +494 -0
  713. fuaran_py-0.2.0/tests/test_elicitation.py +115 -0
  714. fuaran_py-0.2.0/tests/test_emission_grammar.py +214 -0
  715. fuaran_py-0.2.0/tests/test_envelope.py +93 -0
  716. fuaran_py-0.2.0/tests/test_fastapi_host.py +194 -0
  717. fuaran_py-0.2.0/tests/test_fastapi_spend_guards.py +179 -0
  718. fuaran_py-0.2.0/tests/test_field_rule.py +316 -0
  719. fuaran_py-0.2.0/tests/test_field_widening.py +546 -0
  720. fuaran_py-0.2.0/tests/test_function.py +159 -0
  721. fuaran_py-0.2.0/tests/test_fuzz_exchange.py +168 -0
  722. fuaran_py-0.2.0/tests/test_generative_parity.py +104 -0
  723. fuaran_py-0.2.0/tests/test_kind_set.py +125 -0
  724. fuaran_py-0.2.0/tests/test_layout_observer.py +162 -0
  725. fuaran_py-0.2.0/tests/test_lenient.py +32 -0
  726. fuaran_py-0.2.0/tests/test_limits.py +176 -0
  727. fuaran_py-0.2.0/tests/test_list_params.py +429 -0
  728. fuaran_py-0.2.0/tests/test_local_wire.py +110 -0
  729. fuaran_py-0.2.0/tests/test_manifest_flags.py +135 -0
  730. fuaran_py-0.2.0/tests/test_markdown_corpus.py +176 -0
  731. fuaran_py-0.2.0/tests/test_masonry_layout.py +119 -0
  732. fuaran_py-0.2.0/tests/test_merge_conformance.py +207 -0
  733. fuaran_py-0.2.0/tests/test_merge_primacy.py +207 -0
  734. fuaran_py-0.2.0/tests/test_node_child_routing.py +105 -0
  735. fuaran_py-0.2.0/tests/test_notebook_display.py +356 -0
  736. fuaran_py-0.2.0/tests/test_op_stream.py +555 -0
  737. fuaran_py-0.2.0/tests/test_ops_apply.py +451 -0
  738. fuaran_py-0.2.0/tests/test_packaging_contract.py +37 -0
  739. fuaran_py-0.2.0/tests/test_placement.py +777 -0
  740. fuaran_py-0.2.0/tests/test_projections.py +441 -0
  741. fuaran_py-0.2.0/tests/test_reject.py +20 -0
  742. fuaran_py-0.2.0/tests/test_render_a11y_corpus.py +136 -0
  743. fuaran_py-0.2.0/tests/test_render_a11y_placement.py +88 -0
  744. fuaran_py-0.2.0/tests/test_render_a11y_projection.py +125 -0
  745. fuaran_py-0.2.0/tests/test_render_conditional_visibility.py +133 -0
  746. fuaran_py-0.2.0/tests/test_render_fidelity.py +143 -0
  747. fuaran_py-0.2.0/tests/test_render_obligations.py +764 -0
  748. fuaran_py-0.2.0/tests/test_render_parity.py +197 -0
  749. fuaran_py-0.2.0/tests/test_render_sanitize.py +228 -0
  750. fuaran_py-0.2.0/tests/test_render_tooltip.py +193 -0
  751. fuaran_py-0.2.0/tests/test_renderer.py +395 -0
  752. fuaran_py-0.2.0/tests/test_retired_position.py +68 -0
  753. fuaran_py-0.2.0/tests/test_roundtrip.py +24 -0
  754. fuaran_py-0.2.0/tests/test_runtime.py +146 -0
  755. fuaran_py-0.2.0/tests/test_sanitization_corpus.py +137 -0
  756. fuaran_py-0.2.0/tests/test_scalar_compute_parity.py +174 -0
  757. fuaran_py-0.2.0/tests/test_schema_conformance.py +75 -0
  758. fuaran_py-0.2.0/tests/test_sparkline_lowering.py +204 -0
  759. fuaran_py-0.2.0/tests/test_stacked_omit_default.py +74 -0
  760. fuaran_py-0.2.0/tests/test_state_seeding.py +211 -0
  761. fuaran_py-0.2.0/tests/test_style_observer.py +205 -0
  762. fuaran_py-0.2.0/tests/test_teleport.py +131 -0
  763. fuaran_py-0.2.0/tests/test_theme_manifest.py +118 -0
  764. fuaran_py-0.2.0/tests/test_toned_pill.py +160 -0
  765. fuaran_py-0.2.0/tests/test_trend_polarity.py +248 -0
  766. fuaran_py-0.2.0/tests/test_ui_authoring.py +1637 -0
  767. fuaran_py-0.2.0/tests/test_ui_quick.py +277 -0
  768. fuaran_py-0.2.0/tests/test_validator.py +280 -0
  769. fuaran_py-0.2.0/tests/test_validator_coverage.py +83 -0
  770. fuaran_py-0.2.0/validator-coverage.json +41 -0
@@ -0,0 +1,31 @@
1
+ # Pin canonical text-file line endings to LF.
2
+ #
3
+ # `text=auto` lets git detect text vs. binary; `eol=lf` pins the
4
+ # canonical in-repo line ending. On a Windows checkout, files stay LF
5
+ # on disk (no autocrlf round-trip churn), eliminating the recurring
6
+ # "LF will be replaced by CRLF the next time Git touches it" warnings
7
+ # and phantom "modified" churn on tool-regenerated files.
8
+
9
+ * text=auto eol=lf
10
+
11
+ # Explicit binary types — git's auto-detection is usually correct
12
+ # but spell out the common ones to be safe.
13
+ *.png binary
14
+ *.jpg binary
15
+ *.jpeg binary
16
+ *.gif binary
17
+ *.ico binary
18
+ *.svg binary
19
+ *.dll binary
20
+ *.exe binary
21
+ *.pdb binary
22
+ *.nupkg binary
23
+ *.snupkg binary
24
+ *.zip binary
25
+ *.tar binary
26
+ *.gz binary
27
+ *.pdf binary
28
+ *.woff binary
29
+ *.woff2 binary
30
+ *.ttf binary
31
+ *.eot binary
@@ -0,0 +1,21 @@
1
+ # Dependabot — the other half of SHA-pinning a GitHub Action.
2
+ #
3
+ # A digest pin removes the "a moved tag silently changed the credential-bearing
4
+ # code in my publish job" hazard, and replaces it with "the pin is now frozen at
5
+ # whatever was current the day it was written". This config is what keeps the
6
+ # second from becoming permanent: Dependabot proposes each bump as a reviewable
7
+ # PR carrying the new digest and the release notes behind it, so an upgrade is a
8
+ # decision somebody made rather than one that happened.
9
+ #
10
+ # Scope is `github-actions` only. The language ecosystems in this repository are
11
+ # pinned and reviewed through their own lockfiles/props and are deliberately not
12
+ # on Dependabot's schedule here.
13
+ version: 2
14
+ updates:
15
+ - package-ecosystem: github-actions
16
+ directory: "/"
17
+ schedule:
18
+ interval: monthly
19
+ open-pull-requests-limit: 5
20
+ commit-message:
21
+ prefix: ci
@@ -0,0 +1,168 @@
1
+ # Build, test and wire-format conformance gate for the Python host.
2
+ #
3
+ # ── Layout ───────────────────────────────────────────────────────────────────
4
+ # The conformance corpus is its own public repository. The test suite resolves
5
+ # it as a SIBLING of this repo root (tests/_corpus.py walks to
6
+ # `<container>/wire-format-fixtures`), so this repo is checked out into a
7
+ # subdirectory and the corpus beside it:
8
+ #
9
+ # $GITHUB_WORKSPACE/
10
+ # ├── fuaran-py/ ← this repo
11
+ # └── wire-format-fixtures/ ← the corpus (fuaran-ui/fuaran-ui-specification)
12
+ #
13
+ # The corpus repository is PUBLIC, so the checkout is anonymous — no token.
14
+ #
15
+ # ── Why the corpus assertion below is not optional ───────────────────────────
16
+ # When the corpus is absent, tests/_corpus.py does NOT fail — it silently falls
17
+ # back to the committed offline snapshot under conformance/corpus/. A layout
18
+ # drift would therefore leave the suite certifying against a stale local copy of
19
+ # the spec while the job stayed green, which is the one failure mode a
20
+ # conformance gate must never have. The assertion turns that into a hard stop.
21
+
22
+ name: CI
23
+
24
+ on:
25
+ push:
26
+ branches: [main]
27
+ pull_request:
28
+ branches: [main]
29
+
30
+ permissions:
31
+ contents: read
32
+
33
+ env:
34
+ # ── QUARANTINE ──────────────────────────────────────────────────────────────────────────
35
+ # Cases that fail on a clean tree are excluded from the blocking gate here, so
36
+ # that a NEW regression is caught while known drift stays visible. An entry is
37
+ # not a judgement that a case is wrong — it is a record of known, understood,
38
+ # outstanding work, and the list SHRINKS TO EMPTY as the decoder catches up.
39
+ # Delete entries as they start passing; do not add to it to make a red build
40
+ # green without a root-cause note — a new failure here is the regression this
41
+ # gate exists to catch.
42
+ #
43
+ # EMPTY as of 2026-08-13: the Toggle/Now/Switch vocabulary landed
44
+ # (3ac3c87/8e9fac3), the offline corpus snapshot was re-synced (392abd6), and
45
+ # every formerly quarantined case passes against the current corpus —
46
+ # verified by the full suite at 1627 passed with zero deselections AND each
47
+ # former entry re-run by node ID (24 passed). The machinery stays armed; a
48
+ # future corpus advance repopulates the list the same way.
49
+ QUARANTINE: ""
50
+
51
+ jobs:
52
+ build:
53
+ runs-on: ubuntu-latest
54
+ strategy:
55
+ fail-fast: false
56
+ matrix:
57
+ # 3.12 is the declared floor (pyproject requires-python); 3.13 stays as the
58
+ # workspace's own interpreter. Both must pass, or the floor is a claim.
59
+ python-version: ['3.12', '3.13']
60
+ # The `live-host` extra carries what `samples/fastapi-host/` needs to be
61
+ # TESTED. Both rows are needed and they prove different things: with the
62
+ # extra, `tests/test_fastapi_host.py` gates — the sample's credential
63
+ # containment is asserted rather than assumed; without it, the suite is
64
+ # proven to skip CLEANLY, which is what lets `fuaran-py` claim to be
65
+ # dependency-light. Before this axis existed only the second arrangement
66
+ # ever ran, so the sample's tests skipped on every run in a green job.
67
+ extras: ['dev', 'dev,live-host']
68
+ name: "Test (py${{ matrix.python-version }}, ${{ matrix.extras }})"
69
+ defaults:
70
+ run:
71
+ working-directory: fuaran-py
72
+ steps:
73
+ - uses: actions/checkout@v4
74
+ with:
75
+ path: fuaran-py
76
+
77
+ # Deliberately UNPINNED: the corpus is the shared conformance authority
78
+ # every host certifies against, and one current spec for all hosts is the
79
+ # point of giving it a single home. Pinning here would let this host drift
80
+ # from the spec without anything going red.
81
+ - name: Check out the wire-format conformance corpus
82
+ uses: actions/checkout@v4
83
+ with:
84
+ repository: fuaran-ui/fuaran-ui-specification
85
+ path: wire-format-fixtures
86
+
87
+ - name: Assert the corpus is where the tests resolve it
88
+ run: test -f ../wire-format-fixtures/manifest.json
89
+
90
+ - uses: actions/setup-python@v5
91
+ with:
92
+ python-version: ${{ matrix.python-version }}
93
+
94
+ - name: Install
95
+ run: |
96
+ python -m pip install --upgrade pip
97
+ python -m pip install ".[${{ matrix.extras }}]"
98
+
99
+ - name: Lint (ruff check)
100
+ run: python -m ruff check .
101
+
102
+ - name: Format check (ruff format)
103
+ run: python -m ruff format --check .
104
+
105
+ - name: Type check (mypy)
106
+ run: python -m mypy
107
+
108
+ # Print what this gate does NOT cover, on every run. A cap nobody can see
109
+ # reads as "covered everything".
110
+ - name: Report the conformance quarantine
111
+ run: |
112
+ if [ -n "$QUARANTINE" ]; then
113
+ echo "The blocking gate below EXCLUDES these known-failing cases:"
114
+ echo "$QUARANTINE" | tr ' ' '\n' | grep -v '^--deselect$' | sed 's/^/ - /'
115
+ else
116
+ echo "Quarantine EMPTY — the blocking gate covers the full conformance suite."
117
+ fi
118
+ echo
119
+ echo "ALSO NOT GATED HERE — inert rather than quarantined (see the skip"
120
+ echo "summary that -rs prints under each test run below):"
121
+ echo " - the reference-renderer parity tests read the reference host's source"
122
+ echo " from a sibling checkout this workflow does not make, so they skip."
123
+ echo " A skip here does NOT mean the path they look in is right: it was"
124
+ echo " wrong for months (the host was renamed) and this note read as the"
125
+ echo " explanation. What proves the path now is"
126
+ echo " test_reference_host_resolves_in_a_cross_host_checkout, which never"
127
+ echo " skips and fails in any checkout that HAS sibling hosts but no"
128
+ echo " reference host. It passes here because this job is genuinely a"
129
+ echo " single-host checkout — the one shape in which skipping is honest."
130
+ echo " - the FastAPI sample-host tests, on the rows that install [dev] ALONE."
131
+ echo " fastapi is a sample-only dependency, so the skip there is honest and is"
132
+ echo " itself the evidence that this package is dependency-light. The [dev,live-host]"
133
+ echo " rows install it and those tests GATE — read the matrix row name to know"
134
+ echo " which arrangement this run is."
135
+ {
136
+ echo "### Conformance quarantine (excluded from the blocking gate)"
137
+ echo
138
+ if [ -n "$QUARANTINE" ]; then
139
+ echo '```'
140
+ echo "$QUARANTINE" | tr ' ' '\n' | grep -v '^--deselect$'
141
+ echo '```'
142
+ else
143
+ echo "Empty — the blocking gate covers the full conformance suite."
144
+ fi
145
+ } >> "$GITHUB_STEP_SUMMARY"
146
+
147
+ # Non-blocking: runs the FULL suite so the size of the existing drift is
148
+ # measured on every run rather than inferred from the quarantine list.
149
+ - name: Conformance drift (reported, non-blocking)
150
+ continue-on-error: true
151
+ run: |
152
+ set +e
153
+ python -m pytest -q -rs > drift.log 2>&1
154
+ status=$?
155
+ tail -40 drift.log
156
+ {
157
+ echo "### Full suite, including quarantined cases (non-blocking)"
158
+ echo
159
+ echo '```'
160
+ grep -E '^[0-9]+ (failed|passed)|failed,|passed,' drift.log | tail -3
161
+ echo '```'
162
+ } >> "$GITHUB_STEP_SUMMARY"
163
+ exit 0
164
+
165
+ # THE GATE. Everything the suite currently passes, including every
166
+ # conformance case outside the quarantine above.
167
+ - name: Test (gated)
168
+ run: python -m pytest -q -rs $QUARANTINE
@@ -0,0 +1,131 @@
1
+ # Publish fuaran-py to PyPI on a version tag, via PyPI Trusted Publishing (OIDC — no stored token).
2
+ #
3
+ # Trigger: a `v*` tag push only. A branch push reaches no publish job.
4
+ # Prerequisites (one-time, on pypi.org): register this repository as the project's trusted
5
+ # publisher — owner `fuaran-ui`, repository `fuaran-py`, workflow `publish-pypi.yml`,
6
+ # environment `pypi` — then create the `pypi` environment on this repository.
7
+ # The tag must equal the version in pyproject.toml; the gate below refuses otherwise, so a
8
+ # mistyped tag never publishes a mismatched release.
9
+ #
10
+ # WHAT THIS WORKFLOW REFUSES TO PUBLISH, and why each refusal exists:
11
+ # * a tag whose version does not match pyproject.toml — the `build` job's version gate;
12
+ # * a tree whose suite is red — the `test` job below, which `publish` `needs`. Until it
13
+ # existed, a `v*` tag published whatever was at that commit having run no test, no lint
14
+ # and no type check: the ONLY gate on the released artefact was that it built. CI runs
15
+ # the same checks on a branch push, but a tag push is a different event on a different
16
+ # ref, so "CI was green on main" was never a statement about the tagged commit;
17
+ # * a version PyPI already serves — `skip-existing` is deliberately absent. With it, a
18
+ # re-tag of an already-published version exited 0 having uploaded nothing, so a release
19
+ # that silently did not happen was indistinguishable from one that did. Without it the
20
+ # run fails, by name, and the fix is to cut a new version.
21
+ name: publish-pypi
22
+
23
+ on:
24
+ push:
25
+ tags: ["v*"]
26
+
27
+ permissions:
28
+ contents: read
29
+
30
+ jobs:
31
+ # The gate on the TAGGED tree. Mirrors ci.yml's blocking steps — the corpus
32
+ # checkout it certifies against, the lint/format/type checks, and the suite —
33
+ # on the release interpreter. Its failure is what stops `publish` below.
34
+ test:
35
+ runs-on: ubuntu-latest
36
+ defaults:
37
+ run:
38
+ working-directory: fuaran-py
39
+ steps:
40
+ - uses: actions/checkout@v4
41
+ with:
42
+ path: fuaran-py
43
+
44
+ # Deliberately UNPINNED, for the reason ci.yml states: the corpus is the
45
+ # shared conformance authority and one current spec for all hosts is the
46
+ # point of giving it a single home.
47
+ - name: Check out the wire-format conformance corpus
48
+ uses: actions/checkout@v4
49
+ with:
50
+ repository: fuaran-ui/fuaran-ui-specification
51
+ path: wire-format-fixtures
52
+
53
+ # Every corpus-dependent test skips when the corpus is absent, so a layout
54
+ # drift would retire the conformance leg and still report green. Assert it.
55
+ - name: Assert the corpus is where the tests resolve it
56
+ run: test -f ../wire-format-fixtures/manifest.json
57
+
58
+ - uses: actions/setup-python@v5
59
+ with:
60
+ python-version: "3.13"
61
+
62
+ - name: Install
63
+ run: |
64
+ python -m pip install --upgrade pip
65
+ python -m pip install ".[dev]"
66
+
67
+ - name: Lint (ruff check)
68
+ run: python -m ruff check .
69
+
70
+ - name: Format check (ruff format)
71
+ run: python -m ruff format --check .
72
+
73
+ - name: Type check (mypy)
74
+ run: python -m mypy
75
+
76
+ - name: Test (gated)
77
+ run: python -m pytest -q -rs
78
+
79
+ build:
80
+ runs-on: ubuntu-latest
81
+ steps:
82
+ - uses: actions/checkout@v4
83
+ - uses: actions/setup-python@v5
84
+ with:
85
+ python-version: "3.13"
86
+ - name: Version gate — tag must equal pyproject version
87
+ run: |
88
+ set -euo pipefail
89
+ tag="${GITHUB_REF_NAME#v}"
90
+ ver="$(python - <<'PY'
91
+ import tomllib
92
+ print(tomllib.load(open("pyproject.toml","rb"))["project"]["version"])
93
+ PY
94
+ )"
95
+ if [ "$tag" != "$ver" ]; then
96
+ echo "tag v$tag does not match pyproject version $ver" >&2
97
+ exit 1
98
+ fi
99
+ - name: Build sdist + wheel
100
+ run: |
101
+ python -m pip install --upgrade pip build
102
+ python -m build
103
+ - uses: actions/upload-artifact@v4
104
+ with:
105
+ name: dist
106
+ path: dist/
107
+ if-no-files-found: error
108
+
109
+ publish:
110
+ # BOTH, not just `build`: a green build says the artefact assembles, which is
111
+ # not a statement about whether the code in it works.
112
+ needs: [test, build]
113
+ runs-on: ubuntu-latest
114
+ environment: pypi
115
+ permissions:
116
+ id-token: write
117
+ contents: read
118
+ steps:
119
+ - uses: actions/download-artifact@v4
120
+ with:
121
+ name: dist
122
+ path: dist/
123
+ # SHA-PINNED, not tag-pinned: this step holds the OIDC-minted publishing
124
+ # identity, so a moved `release/v1` is credential-bearing code nobody
125
+ # reviewed. `# v1.14.2` records which release the digest is; Dependabot's
126
+ # `github-actions` schedule proposes the bumps as reviewable PRs.
127
+ #
128
+ # `skip-existing` is deliberately ABSENT — see the header. A re-tag of an
129
+ # already-published version must fail, not exit 0 having uploaded nothing.
130
+ - name: Publish to PyPI (Trusted Publishing)
131
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
@@ -0,0 +1,32 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ .eggs/
6
+ build/
7
+ dist/
8
+
9
+ # Virtual environments
10
+ .venv/
11
+ venv/
12
+ env/
13
+
14
+ # Tooling caches
15
+ .pytest_cache/
16
+ .mypy_cache/
17
+ .ruff_cache/
18
+ .coverage
19
+ htmlcov/
20
+ coverage.xml
21
+
22
+ # Editors / OS
23
+ .vscode/
24
+ .idea/
25
+ .DS_Store
26
+ Thumbs.db
27
+
28
+ # The synced corpus snapshot (conformance/corpus/) IS committed — it makes
29
+ # fuaran-py standalone-testable offline and gives the drift guard
30
+ # (tests/test_corpus_sync.py) a committed baseline to pin against the authority.
31
+ # Re-sync + re-commit it whenever the authoritative corpus regenerates
32
+ # (python conformance/sync_corpus.py), per the §11 forward-coupling rule.