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.
- fuaran_py-0.2.0/.gitattributes +31 -0
- fuaran_py-0.2.0/.github/dependabot.yml +21 -0
- fuaran_py-0.2.0/.github/workflows/ci.yml +168 -0
- fuaran_py-0.2.0/.github/workflows/publish-pypi.yml +131 -0
- fuaran_py-0.2.0/.gitignore +32 -0
- fuaran_py-0.2.0/CLAUDE.md +437 -0
- fuaran_py-0.2.0/CODE_OF_CONDUCT.md +77 -0
- fuaran_py-0.2.0/CONTRIBUTING.md +32 -0
- fuaran_py-0.2.0/LICENSE +215 -0
- fuaran_py-0.2.0/NOTICE +16 -0
- fuaran_py-0.2.0/PKG-INFO +1000 -0
- fuaran_py-0.2.0/README.md +970 -0
- fuaran_py-0.2.0/SECURITY.md +105 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-accept-full.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-accept-int-for-float.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-accept-minimal.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-reject-enum.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-reject-float-range.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-reject-int-range.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-reject-missing-required.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-reject-string-len.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-reject-type-mismatch.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-ans-reject-undeclared.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-full.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-minimal.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-answered.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-declined.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-reject-empty-id.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-reject-missing-answer.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-reject-stray-key.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-reject-unknown-type.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-superseded-anon.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-superseded-by.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-out-timedout.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-bad-space.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-bad-timeout.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-bad-version.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-default-nonconformant.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-duplicate-field.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-empty-contract.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-empty-id.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-missing-version.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-stray-key.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-tree-decode.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/elicitation/elc-reject-unknown-node.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/envelope/envelope-foreign-major.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/envelope/envelope-foreign-namespace.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/envelope/envelope-known-current.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/envelope/envelope-unknown-behind.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/envelope/envelope-unknown-malformed-required-profile.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/envelope/envelope-unknown-required-profile.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-022-lvr-emphasis-loud.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-022-lvr-emphasis-loud.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-022-lvr-emphasis-normal.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-022-lvr-emphasis-normal.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-1126-clipboard-literal-envelope.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-1126-clipboard-literal-envelope.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-1521-int-slot-integral-float.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-1521-int-slot-integral-float.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-1521-payload-integer-beyond-int53.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-1521-payload-integer-beyond-int53.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-alias-emphasis-muted.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-alias-emphasis-muted.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-alias-emphasis-strong.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-alias-emphasis-strong.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-alias-tone-danger.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-alias-tone-danger.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-alias-tone-positive.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-alias-tone-positive.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-explicit-default-column.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-explicit-default-column.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-explicit-default-metric.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-explicit-default-metric.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-explicit-default-style.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-460-explicit-default-style.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-596-form-explicit-auto-state.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-596-form-explicit-auto-state.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-665-rows-opaque-sentinel.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-665-rows-opaque-sentinel.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-call-url.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-call-url.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-card-title-metric-value.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-card-title-metric-value.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-datagrid-data-column-type.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-datagrid-data-column-type.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-form-field-name.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-form-field-name.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-grid-columns-row.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-grid-columns-row.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-navigate-href.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-navigate-href.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-select-options-query-deps.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-alias-select-options-query-deps.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-bare-text-button-label.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-bare-text-button-label.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-bare-text-callout.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-bare-text-callout.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-bare-text-heading.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-bare-text-heading.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-bare-text-markdown.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-bare-text-markdown.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-binding-bound-wrapper.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-binding-bound-wrapper.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-daterange-bare-array.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-daterange-bare-array.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-daterange-static-envelope.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-daterange-static-envelope.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-emphasis-cross-vocab.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-emphasis-cross-vocab.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-fact-explicit-defaults.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-fact-explicit-defaults.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-filterable-static-dashboard-compact.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-filterable-static-dashboard-compact.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-grid-field-named-compact.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-grid-field-named-compact.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-grid-transform-param-compact.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-grid-transform-param-compact.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-image-caption-envelope.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-image-caption-envelope.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-image-empty-srcset.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-image-empty-srcset.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-image-explicit-defaults.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-image-explicit-defaults.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-image-explicit-expandable-false.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-image-explicit-expandable-false.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-master-detail-preselected-compact.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-master-detail-preselected-compact.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-navigate-target-self.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-navigate-target-self.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-null-static-options.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-null-static-options.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-opaque-static-markers.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-opaque-static-markers.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-opaque-static-options.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-opaque-static-options.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-opaque-static-series.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-opaque-static-series.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-opaque-static-values.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-opaque-static-values.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-scalar-transform-composition-compact.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-scalar-transform-composition-compact.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-a11y-label-bare-scalar.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-a11y-label-bare-scalar.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-binding-scalar-fraction.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-binding-scalar-fraction.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-grid-no-cols.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-grid-no-cols.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-grid-template-no-cols.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-grid-template-no-cols.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-options-bare-strings.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-options-bare-strings.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-params-map.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-params-map.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-segmented-orientation-omitted.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-segmented-orientation-omitted.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-static-envelope-plain-scalars.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-shape-static-envelope-plain-scalars.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-tonedpill-pill-tag.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-tonedpill-pill-tag.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-tonedpill-tone-aliases.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-tonedpill-tone-aliases.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-tonedpill-tonemap-alias.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-tonedpill-tonemap-alias.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-bare-columns.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-bare-columns.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-epoch-timestamps.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-epoch-timestamps.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-expr-spellings.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-expr-spellings.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-flat-contains.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-flat-contains.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-flat-filter.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-flat-filter.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-flat-or.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-flat-or.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-flat-scalar-fn.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-flat-scalar-fn.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-schemaless.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-schemaless.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-source-rowmajor.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-source-rowmajor.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-source-state-rows.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-source-state-rows.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-step-aliases.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-step-aliases.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-values-only-columns.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-transform-values-only-columns.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-window-cumsum-legacy.expected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/lenient/lenient-window-cumsum-legacy.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/manifest.json +4390 -0
- fuaran_py-0.2.0/conformance/corpus/markdown/corpus.json +64 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/a11y-alert-assertive.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/a11y-button-named.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/a11y-image-decorative.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/a11y-link-labelled.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/a11y-wrapper-all-slots.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/a11y-wrapper-state-bound.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/action-confirm-cancel.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/action-confirm.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/action-focus.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/action-navigate-bound.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/action-navigate-target.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/badge-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/badge-transform-live.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/boundary-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/box-break-before-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/box-keep-together-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/btn-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/btn-copy-bound.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/btn-copy-link.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/btn-invoke.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/btn-json-payloads.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/btn-read-workbook.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/button-print.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/button-setstate-valuefrom.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/call-into.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/callout-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/card-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/chart-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/chart-annotation-bands.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/chart-annotation-events.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/chart-annotations.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/chart-axis-titles.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/chart-data-labels.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/chart-legend-position.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/chart-state-rows.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/chart-temporal-x.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/chart-value-format.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/code-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/composite-root.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/composite-tabs-panels.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/controls-closure.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/controls-declarative.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/custom-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/custom-bounded-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/custom-bounded-advisory.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/custom-nonascii-keys.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/dash-empty.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/discl-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/drawing-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/drawing-empty.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/drawing-nonfinite-sentinels.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/drawing-rotated-labels.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/drawing-tipped-shapes.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/embed-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/embed-aspect-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/embed-permissions-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/empty-state-card.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/expr-params-state-selection.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/expr-scalar.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/fact-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/filterable-static-dashboard.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/filters-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/filters-date-range.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/filters-declarative.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/filters-rating-colour.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/filters-segmented.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/filters-tokens.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-color.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-combobox-freetext.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-combobox-query.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-combobox-static.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-date-range.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-date.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-declarative-minimal.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-declarative.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-field-rules.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-local-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-local-debounce.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-local-declared.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-ranged.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-rating-halves.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-rating.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-segmented.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-toggle.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-tokens-freetext.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-tokens-query.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/form-tokens-suggested.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/format-bindings.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/format-since.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-decl-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-decl-param.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-ref-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-ref-args.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-confirm-action-pair-ref.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-confirm-action-pair.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-empty-state-panel-ref.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-empty-state-panel.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-filter-bar-ref.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-filter-bar.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-kpi-strip-ref.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-kpi-strip.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-labelled-metric-row-ref.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-labelled-metric-row.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-loading-placeholder-ref.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-loading-placeholder.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-metric-card-ref.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-metric-card.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-section-header-ref.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/frag-stdlib-section-header.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/glayout-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/glayout-tpl-autofit.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/glayout-tpl-fixed.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/glayout-tpl-ratio.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/grid-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/grid-bound-sort.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/grid-declared-edit.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/grid-editable-state.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/grid-exportable-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/grid-field-named.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/grid-keep-rows-together-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/grid-paged-sorted.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/grid-paged.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/grid-reorderable.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/grid-repeat-header-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/grid-sort-state-key.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/grid-toned-pill.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/grid-transform-param.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/grid-transform.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/heading-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/icon-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/image-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/image-caption-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/image-caption-i18n-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/image-expandable-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/image-expandable-figure-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/image-presentation-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/image-srcset-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/limit-node-depth-at-max.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/limit-tree-item-depth-at-max.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/link-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/link-protected-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/list-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/lvr-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/map-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/markdown-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/masonry-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/masonry-gap.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/master-detail-multi-field.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/master-detail-preselected-second-row.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/master-detail-preselected.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/math-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/media-audio-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/media-audio-transcript-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/media-video-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/media-video-autoplay-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/media-video-captions-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/media-video-poster-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/media-video-tracks-2.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/metric-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/metric-duration-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/metric-float-17sig.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/metric-float-1e17.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/metric-float-bigint.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/metric-float-exp-neg.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/metric-float-exp-pos.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/metric-inverted-polarity.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/metric-invoke.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/metric-nonfinite-sentinel.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/modal-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/mount-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/mount-2.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/multiselect-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/multiselect-chip-list-param.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/node-visible.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/now-environment-binding.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/now-grain.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/popover-anchored-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/popover-open-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/progress-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/query-dependson.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/scalar-transform-composition.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/scroll-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/select-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/shared-source-seeded-pair.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/skel-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/spark-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/spark-nonfinite-sentinel.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/split-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/stack-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/step-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/style-direction-isolated-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/style-direction-ltr-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/style-role-voice-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/summary-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/switch-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/switch-carousel-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/switch-on-selection.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/switch-on-transform-scalar.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/switch-predicate-only.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/switch-predicate.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/table-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/table-sortable-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/tabs-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/tabs-explicit-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/toast-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/tooltip-button-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/tooltip-icon-button-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/tooltip-metric-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/transfer-board.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/tree-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/tree-expanded-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/tree-selection-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/upload-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/upload-capture-camera-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/upload-capture-microphone-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/upload-destination-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/upload-drop-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/nodes/upload-paste-1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-batch.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-editnode.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-insertchild.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-movenode.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-removenode.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-reorderchildren.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-replacebinding.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-replaceroot.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-badfield.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-badindex.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-column0-label.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-column1-label.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-field0-required.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-field1-required.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-malformed.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-object-value.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-yfield0.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop-nested-yfield1.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-updateprop.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-updatestate.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-updatestyle (phase 147 role=eyebrow + voice=structural).json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-updatestyle (phase 1472 direction=ltr, the only style member).json +1 -0
- fuaran_py-0.2.0/conformance/corpus/ops/op-updatestyle.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-a11y-hidden-nonbool.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-a11y-labelledby-nonstring.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-a11y-liveregion-nonstring.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-a11y-liveregion-unknown.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-a11y-not-object.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-a11y-role-nonstring.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-action-print-with-payload.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-binding-float-bool.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-binding-float-sentinel-case.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-binding-float-string.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-binding-floatseq-sentinel-case.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-binding-int-bool.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-binding-int-sentinel-string.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-box-masonry-nonpositive-cols.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-chart-annotation-date-unparseable.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-chart-annotation-nonfinite.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-chart-annotation-range-unordered.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-color-value-not-hex.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-combobox-allowfreetext-nonbool.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-confirm-missing-onconfirm.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-confirm-nested.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-daterange-unordered.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-embed-missing-title.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-embed-permission-nonstring.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-embed-unknown-permission.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-emptynodeid.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-expr-col-reference.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-expr-unbound-param.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-fieldrule-empty.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-fieldrule-length-unordered.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-formfield-near-miss-validation.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-image-expandable-nonbool.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-image-srcset-nonpositive-width.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-image-srcset-null.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-int-slot-fractional.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-int-slot-out-of-range.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-invalid-empty.json +0 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-invalid-garbage.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-invalid-truncated.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-json-bare-nan.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-json-duplicate-key.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-json-lone-high-surrogate.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-json-lone-low-surrogate.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-json-number-empty-exponent.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-json-number-leading-plus.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-json-number-leading-zero.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-json-number-no-integer-part.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-json-number-trailing-point.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-json-raw-control-char.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-json-surrogate-pair-split.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-json-trailing-content.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-limit-json-depth-at-max.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-limit-json-depth.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-limit-node-depth.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-limit-op-depth.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-limit-tree-item-depth.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-local-codec-no-inverse.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-local-oncommit-and-committo.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-media-autoplay-nonbool.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-media-missing-label.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-media-track-default-nonbool.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-media-track-missing-srclang.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-binding-type.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-custom-moduleid.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-markdown-text.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-metric-value.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-mount-scopeid.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-node-id.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-node-kind.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-switch-cases.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-switch-default.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-missing-switch-statekey.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-modal-modality-nonstring.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-modal-modality-unknown.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-navigate-target-invalid.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-nearmiss-a11y-aria-hidden.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-nearmiss-a11y-arialabel.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-nearmiss-a11y-live.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-nearmiss-a11y-liveregion-case.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-nearmiss-column-readonly.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-nearmiss-grid-behaviour-record.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-nearmiss-grid-current-page.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-nearmiss-grid-sortable.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-now-grain-invalid.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-null-action-aitool-args.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-null-action-notify-payload.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-null-action-setstate-value.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-null-custom-prop.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-null-i18n-arg.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-null-updateprop-value.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-op-insertchild-empty-childid.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-op-insertchild-missing-parentid.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-op-insertchild-retired-position.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-op-missing-type.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-op-movenode-retired-newposition.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-op-reorderchildren-wrongtype.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-op-unknown-yeet.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-op-updateprop-missing-path.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-op-updatestyle-direction-nonstring.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-op-updatestyle-direction-unknown.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-rating-max-zero.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-setstate-value-and-valuefrom.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-spark-element-nonnumeric.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-style-direction-nonstring.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-style-direction-unknown.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-switch-autoadvance-fractional.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-switch-autoadvance-negative.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-switch-autoadvance-zero.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-switch-case-match-and-when.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-switch-case-neither.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-tokens-closed-without-suggestions.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-tokens-value-not-list.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-tonedpill-unknown-tone.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-tooltip-nonstring.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-tree-item-missing-id.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-tree-item-missing-label.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-tree-nested-item-missing-id.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-binding.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-capture-source.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-drawing-curve-command.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-drawing-shape.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-image-aspect.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-link-protection.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-media-kind.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-mount-direction.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-static-sort-direction.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-textsource.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-tone.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-unknown-trend-polarity.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-upload-acceptpaste-nonbool.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-upload-destination-empty.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-upload-droptarget-nonbool.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongnodekind-sparkler.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongnodekind-widget.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-box-break-before.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-box-children.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-box-keep-together.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-clipboard-payload.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-discriminator.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-grid-default-sort-column.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-grid-exportable-number.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-grid-exportable.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-grid-keep-rows-together.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-grid-page-size-zero.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-grid-repeat-header.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-grid-transfer-in-key.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-grid-transfer-out-key.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-heading-level.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-id.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-kind.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-static-sort-column.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/reject/reject-wrongtype-style-tone.json +1 -0
- fuaran_py-0.2.0/conformance/corpus/render-fidelity.json +835 -0
- fuaran_py-0.2.0/conformance/corpus/schema.json +10000 -0
- fuaran_py-0.2.0/conformance/sync_corpus.py +81 -0
- fuaran_py-0.2.0/docs/AUTHORING.md +444 -0
- fuaran_py-0.2.0/docs/decoder-robustness.json +28 -0
- fuaran_py-0.2.0/docs/decoder-robustness.md +21 -0
- fuaran_py-0.2.0/docs/fable-python-decision.md +127 -0
- fuaran_py-0.2.0/examples/getting_started.py +679 -0
- fuaran_py-0.2.0/examples/notebook_display.ipynb +2992 -0
- fuaran_py-0.2.0/examples/quickstart_client.py +36 -0
- fuaran_py-0.2.0/examples/quickstart_reactive_data_app.py +119 -0
- fuaran_py-0.2.0/examples/quickstart_terse_dashboard.py +106 -0
- fuaran_py-0.2.0/pyproject.toml +77 -0
- fuaran_py-0.2.0/run.ps1 +106 -0
- fuaran_py-0.2.0/samples/fastapi-host/README.md +168 -0
- fuaran_py-0.2.0/samples/fastapi-host/app.py +344 -0
- fuaran_py-0.2.0/src/fuaran_py/__init__.py +113 -0
- fuaran_py-0.2.0/src/fuaran_py/ai_tools/__init__.py +86 -0
- fuaran_py-0.2.0/src/fuaran_py/ai_tools/dispatch.py +91 -0
- fuaran_py-0.2.0/src/fuaran_py/ai_tools/introspect.py +190 -0
- fuaran_py-0.2.0/src/fuaran_py/ai_tools/surface.py +194 -0
- fuaran_py-0.2.0/src/fuaran_py/canonical.py +216 -0
- fuaran_py-0.2.0/src/fuaran_py/charts/__init__.py +3391 -0
- fuaran_py-0.2.0/src/fuaran_py/client/__init__.py +77 -0
- fuaran_py-0.2.0/src/fuaran_py/client/client.py +284 -0
- fuaran_py-0.2.0/src/fuaran_py/client/contract.py +199 -0
- fuaran_py-0.2.0/src/fuaran_py/client/session.py +66 -0
- fuaran_py-0.2.0/src/fuaran_py/client/wire.py +250 -0
- fuaran_py-0.2.0/src/fuaran_py/compute/__init__.py +42 -0
- fuaran_py-0.2.0/src/fuaran_py/compute/evaluate.py +621 -0
- fuaran_py-0.2.0/src/fuaran_py/conformance/__init__.py +7 -0
- fuaran_py-0.2.0/src/fuaran_py/conformance/bridge.py +84 -0
- fuaran_py-0.2.0/src/fuaran_py/conformance/decoder_fuzz.py +1046 -0
- fuaran_py-0.2.0/src/fuaran_py/conformance/fuzz_exchange.py +209 -0
- fuaran_py-0.2.0/src/fuaran_py/conformance/harness.py +111 -0
- fuaran_py-0.2.0/src/fuaran_py/conformance/refusal_report.py +123 -0
- fuaran_py-0.2.0/src/fuaran_py/dag.py +277 -0
- fuaran_py-0.2.0/src/fuaran_py/dataframe/__init__.py +149 -0
- fuaran_py-0.2.0/src/fuaran_py/dataframe/codec.py +1098 -0
- fuaran_py-0.2.0/src/fuaran_py/dataframe/evaluate.py +930 -0
- fuaran_py-0.2.0/src/fuaran_py/dataframe/model.py +428 -0
- fuaran_py-0.2.0/src/fuaran_py/elicitation.py +559 -0
- fuaran_py-0.2.0/src/fuaran_py/envelope.py +166 -0
- fuaran_py-0.2.0/src/fuaran_py/function.py +294 -0
- fuaran_py-0.2.0/src/fuaran_py/layout_observer/__init__.py +70 -0
- fuaran_py-0.2.0/src/fuaran_py/layout_observer/flags.py +260 -0
- fuaran_py-0.2.0/src/fuaran_py/layout_observer/observer.py +230 -0
- fuaran_py-0.2.0/src/fuaran_py/limits.py +79 -0
- fuaran_py-0.2.0/src/fuaran_py/merge.py +647 -0
- fuaran_py-0.2.0/src/fuaran_py/model.py +89 -0
- fuaran_py-0.2.0/src/fuaran_py/op_stream/__init__.py +140 -0
- fuaran_py-0.2.0/src/fuaran_py/op_stream/hash_chain.py +230 -0
- fuaran_py-0.2.0/src/fuaran_py/op_stream/in_memory_sink.py +132 -0
- fuaran_py-0.2.0/src/fuaran_py/op_stream/replay.py +375 -0
- fuaran_py-0.2.0/src/fuaran_py/op_stream/types.py +280 -0
- fuaran_py-0.2.0/src/fuaran_py/ops/__init__.py +72 -0
- fuaran_py-0.2.0/src/fuaran_py/ops/apply.py +1053 -0
- fuaran_py-0.2.0/src/fuaran_py/ops/decode.py +236 -0
- fuaran_py-0.2.0/src/fuaran_py/ops/diff.py +305 -0
- fuaran_py-0.2.0/src/fuaran_py/ops/encode.py +11 -0
- fuaran_py-0.2.0/src/fuaran_py/ops/placement.py +504 -0
- fuaran_py-0.2.0/src/fuaran_py/render_fidelity.py +439 -0
- fuaran_py-0.2.0/src/fuaran_py/renderer/__init__.py +132 -0
- fuaran_py-0.2.0/src/fuaran_py/renderer/bindings.py +525 -0
- fuaran_py-0.2.0/src/fuaran_py/renderer/content/fuaran-reference.css +4009 -0
- fuaran_py-0.2.0/src/fuaran_py/renderer/document.py +920 -0
- fuaran_py-0.2.0/src/fuaran_py/renderer/egress.py +596 -0
- fuaran_py-0.2.0/src/fuaran_py/renderer/email.py +1434 -0
- fuaran_py-0.2.0/src/fuaran_py/renderer/html.py +67 -0
- fuaran_py-0.2.0/src/fuaran_py/renderer/markdown.py +1211 -0
- fuaran_py-0.2.0/src/fuaran_py/renderer/notebook.py +406 -0
- fuaran_py-0.2.0/src/fuaran_py/renderer/projection.py +176 -0
- fuaran_py-0.2.0/src/fuaran_py/renderer/render.py +2679 -0
- fuaran_py-0.2.0/src/fuaran_py/renderer/sanitize.py +591 -0
- fuaran_py-0.2.0/src/fuaran_py/renderer/seeds.py +149 -0
- fuaran_py-0.2.0/src/fuaran_py/renderer/theme.py +208 -0
- fuaran_py-0.2.0/src/fuaran_py/result.py +71 -0
- fuaran_py-0.2.0/src/fuaran_py/runtime/__init__.py +22 -0
- fuaran_py-0.2.0/src/fuaran_py/runtime/runtime.py +256 -0
- fuaran_py-0.2.0/src/fuaran_py/runtime/sample.py +57 -0
- fuaran_py-0.2.0/src/fuaran_py/schema/__init__.py +15 -0
- fuaran_py-0.2.0/src/fuaran_py/schema/decode.py +4080 -0
- fuaran_py-0.2.0/src/fuaran_py/schema/encode.py +11 -0
- fuaran_py-0.2.0/src/fuaran_py/schema/types.py +3313 -0
- fuaran_py-0.2.0/src/fuaran_py/shapeguard.py +267 -0
- fuaran_py-0.2.0/src/fuaran_py/style_observer/__init__.py +129 -0
- fuaran_py-0.2.0/src/fuaran_py/style_observer/color.py +91 -0
- fuaran_py-0.2.0/src/fuaran_py/style_observer/flags.py +326 -0
- fuaran_py-0.2.0/src/fuaran_py/style_observer/manifest_flags.py +108 -0
- fuaran_py-0.2.0/src/fuaran_py/style_observer/observer.py +320 -0
- fuaran_py-0.2.0/src/fuaran_py/teleport.py +263 -0
- fuaran_py-0.2.0/src/fuaran_py/theme_manifest/__init__.py +91 -0
- fuaran_py-0.2.0/src/fuaran_py/theme_manifest/decode.py +174 -0
- fuaran_py-0.2.0/src/fuaran_py/theme_manifest/manifest.py +184 -0
- fuaran_py-0.2.0/src/fuaran_py/theme_manifest/project.py +173 -0
- fuaran_py-0.2.0/src/fuaran_py/ui/__init__.py +1474 -0
- fuaran_py-0.2.0/src/fuaran_py/ui/capability.py +238 -0
- fuaran_py-0.2.0/src/fuaran_py/ui/compute.py +759 -0
- fuaran_py-0.2.0/src/fuaran_py/ui/controls.py +313 -0
- fuaran_py-0.2.0/src/fuaran_py/ui/quick.py +381 -0
- fuaran_py-0.2.0/src/fuaran_py/validator/__init__.py +7 -0
- fuaran_py-0.2.0/src/fuaran_py/validator/validate.py +780 -0
- fuaran_py-0.2.0/tests/_corpus.py +116 -0
- fuaran_py-0.2.0/tests/_reference_host.py +95 -0
- fuaran_py-0.2.0/tests/fixtures/dataframe_parity.json +1 -0
- fuaran_py-0.2.0/tests/test_action_cases.py +62 -0
- fuaran_py-0.2.0/tests/test_ai_tools.py +179 -0
- fuaran_py-0.2.0/tests/test_authoring_toggle_now_selection.py +158 -0
- fuaran_py-0.2.0/tests/test_bare_state_source.py +75 -0
- fuaran_py-0.2.0/tests/test_bridge.py +91 -0
- fuaran_py-0.2.0/tests/test_browser_style_observer.py +80 -0
- fuaran_py-0.2.0/tests/test_canonical_numbers.py +48 -0
- fuaran_py-0.2.0/tests/test_capability_seam.py +118 -0
- fuaran_py-0.2.0/tests/test_chart_lowering.py +940 -0
- fuaran_py-0.2.0/tests/test_client.py +517 -0
- fuaran_py-0.2.0/tests/test_client_mock_endpoint.py +132 -0
- fuaran_py-0.2.0/tests/test_compute.py +388 -0
- fuaran_py-0.2.0/tests/test_compute_authoring.py +123 -0
- fuaran_py-0.2.0/tests/test_controls.py +309 -0
- fuaran_py-0.2.0/tests/test_corpus_sync.py +119 -0
- fuaran_py-0.2.0/tests/test_dag_roundtrip.py +174 -0
- fuaran_py-0.2.0/tests/test_dataframe_parity.py +72 -0
- fuaran_py-0.2.0/tests/test_decode_determinism.py +321 -0
- fuaran_py-0.2.0/tests/test_decoder_fuzz.py +202 -0
- fuaran_py-0.2.0/tests/test_diff.py +365 -0
- fuaran_py-0.2.0/tests/test_diff_golden.py +116 -0
- fuaran_py-0.2.0/tests/test_egress_policy.py +494 -0
- fuaran_py-0.2.0/tests/test_elicitation.py +115 -0
- fuaran_py-0.2.0/tests/test_emission_grammar.py +214 -0
- fuaran_py-0.2.0/tests/test_envelope.py +93 -0
- fuaran_py-0.2.0/tests/test_fastapi_host.py +194 -0
- fuaran_py-0.2.0/tests/test_fastapi_spend_guards.py +179 -0
- fuaran_py-0.2.0/tests/test_field_rule.py +316 -0
- fuaran_py-0.2.0/tests/test_field_widening.py +546 -0
- fuaran_py-0.2.0/tests/test_function.py +159 -0
- fuaran_py-0.2.0/tests/test_fuzz_exchange.py +168 -0
- fuaran_py-0.2.0/tests/test_generative_parity.py +104 -0
- fuaran_py-0.2.0/tests/test_kind_set.py +125 -0
- fuaran_py-0.2.0/tests/test_layout_observer.py +162 -0
- fuaran_py-0.2.0/tests/test_lenient.py +32 -0
- fuaran_py-0.2.0/tests/test_limits.py +176 -0
- fuaran_py-0.2.0/tests/test_list_params.py +429 -0
- fuaran_py-0.2.0/tests/test_local_wire.py +110 -0
- fuaran_py-0.2.0/tests/test_manifest_flags.py +135 -0
- fuaran_py-0.2.0/tests/test_markdown_corpus.py +176 -0
- fuaran_py-0.2.0/tests/test_masonry_layout.py +119 -0
- fuaran_py-0.2.0/tests/test_merge_conformance.py +207 -0
- fuaran_py-0.2.0/tests/test_merge_primacy.py +207 -0
- fuaran_py-0.2.0/tests/test_node_child_routing.py +105 -0
- fuaran_py-0.2.0/tests/test_notebook_display.py +356 -0
- fuaran_py-0.2.0/tests/test_op_stream.py +555 -0
- fuaran_py-0.2.0/tests/test_ops_apply.py +451 -0
- fuaran_py-0.2.0/tests/test_packaging_contract.py +37 -0
- fuaran_py-0.2.0/tests/test_placement.py +777 -0
- fuaran_py-0.2.0/tests/test_projections.py +441 -0
- fuaran_py-0.2.0/tests/test_reject.py +20 -0
- fuaran_py-0.2.0/tests/test_render_a11y_corpus.py +136 -0
- fuaran_py-0.2.0/tests/test_render_a11y_placement.py +88 -0
- fuaran_py-0.2.0/tests/test_render_a11y_projection.py +125 -0
- fuaran_py-0.2.0/tests/test_render_conditional_visibility.py +133 -0
- fuaran_py-0.2.0/tests/test_render_fidelity.py +143 -0
- fuaran_py-0.2.0/tests/test_render_obligations.py +764 -0
- fuaran_py-0.2.0/tests/test_render_parity.py +197 -0
- fuaran_py-0.2.0/tests/test_render_sanitize.py +228 -0
- fuaran_py-0.2.0/tests/test_render_tooltip.py +193 -0
- fuaran_py-0.2.0/tests/test_renderer.py +395 -0
- fuaran_py-0.2.0/tests/test_retired_position.py +68 -0
- fuaran_py-0.2.0/tests/test_roundtrip.py +24 -0
- fuaran_py-0.2.0/tests/test_runtime.py +146 -0
- fuaran_py-0.2.0/tests/test_sanitization_corpus.py +137 -0
- fuaran_py-0.2.0/tests/test_scalar_compute_parity.py +174 -0
- fuaran_py-0.2.0/tests/test_schema_conformance.py +75 -0
- fuaran_py-0.2.0/tests/test_sparkline_lowering.py +204 -0
- fuaran_py-0.2.0/tests/test_stacked_omit_default.py +74 -0
- fuaran_py-0.2.0/tests/test_state_seeding.py +211 -0
- fuaran_py-0.2.0/tests/test_style_observer.py +205 -0
- fuaran_py-0.2.0/tests/test_teleport.py +131 -0
- fuaran_py-0.2.0/tests/test_theme_manifest.py +118 -0
- fuaran_py-0.2.0/tests/test_toned_pill.py +160 -0
- fuaran_py-0.2.0/tests/test_trend_polarity.py +248 -0
- fuaran_py-0.2.0/tests/test_ui_authoring.py +1637 -0
- fuaran_py-0.2.0/tests/test_ui_quick.py +277 -0
- fuaran_py-0.2.0/tests/test_validator.py +280 -0
- fuaran_py-0.2.0/tests/test_validator_coverage.py +83 -0
- 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.
|