metaobjects 0.15.1__tar.gz → 0.15.3__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 (380) hide show
  1. {metaobjects-0.15.1 → metaobjects-0.15.3}/PKG-INFO +1 -1
  2. {metaobjects-0.15.1 → metaobjects-0.15.3}/pyproject.toml +1 -1
  3. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/output_format_spec_emitter.py +8 -4
  4. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/runtime/filter_parser.py +13 -3
  5. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/registry_manifest.py +11 -1
  6. metaobjects-0.15.3/tests/codegen/test_fr010_nested_object_prompt.py +59 -0
  7. metaobjects-0.15.3/tests/conformance/test_provider_composition_conformance.py +150 -0
  8. {metaobjects-0.15.1 → metaobjects-0.15.3}/.gitignore +0 -0
  9. {metaobjects-0.15.1 → metaobjects-0.15.3}/LICENSE +0 -0
  10. {metaobjects-0.15.1 → metaobjects-0.15.3}/README.md +0 -0
  11. {metaobjects-0.15.1 → metaobjects-0.15.3}/hatch_build.py +0 -0
  12. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/__init__.py +0 -0
  13. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/agent_context/__init__.py +0 -0
  14. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/agent_context/scaffold.py +0 -0
  15. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/apidocs/__init__.py +0 -0
  16. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/apidocs/api_model.py +0 -0
  17. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/apidocs/builder.py +0 -0
  18. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/apidocs/naming.py +0 -0
  19. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/apidocs/paths.py +0 -0
  20. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/apidocs/renderer.py +0 -0
  21. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/attr_class_map.py +0 -0
  22. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/cli.py +0 -0
  23. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/KNOWN_GAPS.md +0 -0
  24. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/__init__.py +0 -0
  25. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/config.py +0 -0
  26. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/constants.py +0 -0
  27. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/extract_delegate_emitter.py +0 -0
  28. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/extract_schema_emitter.py +0 -0
  29. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/format.py +0 -0
  30. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/fr010_field_mapping.py +0 -0
  31. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/generator.py +0 -0
  32. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/generator_registry.py +0 -0
  33. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/generators/__init__.py +0 -0
  34. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/generators/entity_model.py +0 -0
  35. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/generators/extractor_generator.py +0 -0
  36. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/generators/filter_allowlist_generator.py +0 -0
  37. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/generators/fr019_shared_enum.py +0 -0
  38. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/generators/m2m_codegen.py +0 -0
  39. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/generators/output_parser_generator.py +0 -0
  40. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/generators/output_prompt_generator.py +0 -0
  41. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/generators/payload_vo_generator.py +0 -0
  42. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/generators/render_helper_generator.py +0 -0
  43. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/generators/router_generator.py +0 -0
  44. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/generators/template_generator.py +0 -0
  45. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/generators/tph_plan.py +0 -0
  46. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/generators/trace_helper_generator.py +0 -0
  47. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/instance_artifacts.py +0 -0
  48. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/overwrite_policy.py +0 -0
  49. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/runner.py +0 -0
  50. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/runtime/__init__.py +0 -0
  51. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/template_codegen/__init__.py +0 -0
  52. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/template_codegen/output_pattern.py +0 -0
  53. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/template_codegen/template_data.py +0 -0
  54. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/template_codegen/template_spec.py +0 -0
  55. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/codegen/type_map.py +0 -0
  56. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/core_types.py +0 -0
  57. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/datatype.py +0 -0
  58. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/documentation/__init__.py +0 -0
  59. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/documentation/doc_constants.py +0 -0
  60. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/documentation/doc_provider.py +0 -0
  61. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/documentation/doc_schema.py +0 -0
  62. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/errors.py +0 -0
  63. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/loader/__init__.py +0 -0
  64. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/loader/merge.py +0 -0
  65. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/loader/meta_data_loader.py +0 -0
  66. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/loader/registered_validation.py +0 -0
  67. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/loader/sources/__init__.py +0 -0
  68. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/loader/sources/directory_source.py +0 -0
  69. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/loader/sources/file_source.py +0 -0
  70. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/loader/sources/meta_data_source.py +0 -0
  71. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/loader/sources/uri_source.py +0 -0
  72. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/loader/validate_discriminator.py +0 -0
  73. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/loader/validate_field_readonly.py +0 -0
  74. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/loader/validate_source_parameter_ref.py +0 -0
  75. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/loader/validate_source_physical_names.py +0 -0
  76. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/loader/validation_passes.py +0 -0
  77. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/__init__.py +0 -0
  78. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/__init__.py +0 -0
  79. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/attr/__init__.py +0 -0
  80. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/attr/attr_constants.py +0 -0
  81. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/attr/meta_attr.py +0 -0
  82. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/field/__init__.py +0 -0
  83. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/field/field_constants.py +0 -0
  84. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/field/meta_field.py +0 -0
  85. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/identity/__init__.py +0 -0
  86. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/identity/identity_constants.py +0 -0
  87. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/identity/meta_identity.py +0 -0
  88. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/index/__init__.py +0 -0
  89. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/index/index_constants.py +0 -0
  90. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/index/meta_index.py +0 -0
  91. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/object/__init__.py +0 -0
  92. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/object/meta_object.py +0 -0
  93. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/object/meta_object_aware.py +0 -0
  94. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/object/object_class_registry.py +0 -0
  95. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/object/object_constants.py +0 -0
  96. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/object/object_extract.py +0 -0
  97. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/object/value_object.py +0 -0
  98. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/relationship/__init__.py +0 -0
  99. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/relationship/derive_m2m_fields.py +0 -0
  100. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/relationship/meta_relationship.py +0 -0
  101. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/relationship/relationship_constants.py +0 -0
  102. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/validator/__init__.py +0 -0
  103. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/core/validator/validator_constants.py +0 -0
  104. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/meta_data.py +0 -0
  105. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/meta_root.py +0 -0
  106. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/persistence/__init__.py +0 -0
  107. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/persistence/db/__init__.py +0 -0
  108. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/persistence/db/db_constants.py +0 -0
  109. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/persistence/db/db_provider.py +0 -0
  110. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/persistence/origin/__init__.py +0 -0
  111. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/persistence/origin/meta_origin.py +0 -0
  112. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/persistence/origin/origin_constants.py +0 -0
  113. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/persistence/source/__init__.py +0 -0
  114. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/persistence/source/meta_source.py +0 -0
  115. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/persistence/source/source_constants.py +0 -0
  116. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/presentation/__init__.py +0 -0
  117. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/presentation/layout/__init__.py +0 -0
  118. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/presentation/layout/layout_constants.py +0 -0
  119. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/presentation/layout/meta_layout.py +0 -0
  120. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/presentation/ui/__init__.py +0 -0
  121. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/presentation/ui/ui_provider.py +0 -0
  122. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/presentation/view/__init__.py +0 -0
  123. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/presentation/view/meta_view.py +0 -0
  124. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/presentation/view/view_constants.py +0 -0
  125. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/provider_extends.py +0 -0
  126. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/template/__init__.py +0 -0
  127. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/template/meta_template.py +0 -0
  128. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/template/prompt_provider.py +0 -0
  129. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/meta/template/template_constants.py +0 -0
  130. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/naming_refs.py +0 -0
  131. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/parser.py +0 -0
  132. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/parser_yaml.py +0 -0
  133. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/provider.py +0 -0
  134. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/py.typed +0 -0
  135. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/registry.py +0 -0
  136. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/__init__.py +0 -0
  137. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/email_document.py +0 -0
  138. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/escapers.py +0 -0
  139. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/extract/KNOWN_GAPS.md +0 -0
  140. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/extract/__init__.py +0 -0
  141. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/extract/coerce.py +0 -0
  142. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/extract/extract.py +0 -0
  143. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/extract/extract_map.py +0 -0
  144. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/extract/json_forgiving_reader.py +0 -0
  145. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/extract/locate.py +0 -0
  146. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/extract/normalize.py +0 -0
  147. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/extract/strip.py +0 -0
  148. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/extract/types.py +0 -0
  149. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/extract/xml_forgiving_reader.py +0 -0
  150. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/filesystem_provider.py +0 -0
  151. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/prompt/__init__.py +0 -0
  152. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/prompt/output_format_renderer.py +0 -0
  153. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/prompt/output_format_spec.py +0 -0
  154. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/prompt/prompt_field.py +0 -0
  155. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/prompt/prompt_overrides.py +0 -0
  156. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/prompt/prompt_style.py +0 -0
  157. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/renderer.py +0 -0
  158. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/render/verify.py +0 -0
  159. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/runtime/__init__.py +0 -0
  160. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/runtime/llm_recorder.py +0 -0
  161. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/runtime/n2m_resolver.py +0 -0
  162. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/runtime/object_manager.py +0 -0
  163. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/runtime/tph.py +0 -0
  164. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/serializer_json.py +0 -0
  165. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/shared/__init__.py +0 -0
  166. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/shared/base_types.py +0 -0
  167. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/shared/separators.py +0 -0
  168. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/shared/structural.py +0 -0
  169. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/source/__init__.py +0 -0
  170. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/source/error_source.py +0 -0
  171. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/source/json_path.py +0 -0
  172. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/source/semantic_diff.py +0 -0
  173. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/source/yaml_positions.py +0 -0
  174. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/__init__.py +0 -0
  175. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/attr.json +0 -0
  176. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/db.json +0 -0
  177. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/documentation.json +0 -0
  178. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/field.json +0 -0
  179. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/identity.json +0 -0
  180. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/index.json +0 -0
  181. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/layout.json +0 -0
  182. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/object.json +0 -0
  183. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/origin.json +0 -0
  184. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/prompt.json +0 -0
  185. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/relationship.json +0 -0
  186. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/source.json +0 -0
  187. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/template.json +0 -0
  188. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/ui.json +0 -0
  189. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/validator.json +0 -0
  190. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/spec_metamodel/view.json +0 -0
  191. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/super_resolve.py +0 -0
  192. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/validation_types.py +0 -0
  193. {metaobjects-0.15.1 → metaobjects-0.15.3}/src/metaobjects/yaml_desugar.py +0 -0
  194. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/__init__.py +0 -0
  195. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/__init__.py +0 -0
  196. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/golden/extends/expected/BaseEntity.py +0 -0
  197. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/golden/extends/expected/Program.py +0 -0
  198. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/golden/extends/meta.json +0 -0
  199. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/golden/nested-array/expected/AuthorBrief.py +0 -0
  200. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/golden/nested-array/expected/PostBrief.py +0 -0
  201. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/golden/nested-array/meta.json +0 -0
  202. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/golden/scalars/expected/Metric.py +0 -0
  203. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/golden/scalars/expected/Report.py +0 -0
  204. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/golden/scalars/meta.json +0 -0
  205. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/golden/vanilla/expected/Subscriber.py +0 -0
  206. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/golden/vanilla/meta.json +0 -0
  207. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_abstract_conformance.py +0 -0
  208. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_api_docs_builder.py +0 -0
  209. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_api_docs_paths.py +0 -0
  210. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_cli.py +0 -0
  211. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_cli_registry.py +0 -0
  212. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_cli_staleness_nudge.py +0 -0
  213. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_cli_verify_strict.py +0 -0
  214. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_cli_verify_subverbs.py +0 -0
  215. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_constants_config.py +0 -0
  216. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_entity_model.py +0 -0
  217. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_enum_conformance.py +0 -0
  218. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_extends_abstract_field_inheritance.py +0 -0
  219. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_extractor_generator.py +0 -0
  220. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_filter_allowlist_generator.py +0 -0
  221. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_format.py +0 -0
  222. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_fr010_output_codegen.py +0 -0
  223. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_fr019_shared_provided_conformance.py +0 -0
  224. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_generator.py +0 -0
  225. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_generator_extension_seams.py +0 -0
  226. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_golden.py +0 -0
  227. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_inherit_without_restate_gate.py +0 -0
  228. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_inheritance_conformance.py +0 -0
  229. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_instance_artifacts.py +0 -0
  230. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_m2m_codegen.py +0 -0
  231. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_output_parser_generator.py +0 -0
  232. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_overwrite_policy.py +0 -0
  233. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_payload_vo_generator.py +0 -0
  234. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_projection_compile.py +0 -0
  235. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_render_helper_conformance.py +0 -0
  236. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_render_helper_generator.py +0 -0
  237. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_reverse_finders.py +0 -0
  238. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_router_generator.py +0 -0
  239. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_runner.py +0 -0
  240. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_template_data.py +0 -0
  241. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_template_generator.py +0 -0
  242. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_template_output_pattern.py +0 -0
  243. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_template_scope_helpers.py +0 -0
  244. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_template_scope_walk.py +0 -0
  245. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_template_spec.py +0 -0
  246. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_tph_codegen.py +0 -0
  247. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_trace_helper_generator.py +0 -0
  248. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_type_map.py +0 -0
  249. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/codegen/test_validation_conformance.py +0 -0
  250. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/__init__.py +0 -0
  251. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/capabilities.py +0 -0
  252. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/conformance-expected-failures.json +0 -0
  253. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/conformance_adapter.py +0 -0
  254. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/corpus.py +0 -0
  255. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/expected_failures.py +0 -0
  256. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/fixture_discovery.py +0 -0
  257. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/navigator.py +0 -0
  258. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/test_api_docs_cross_port_conformance.py +0 -0
  259. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/test_conformance.py +0 -0
  260. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/test_extract_conformance.py +0 -0
  261. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/test_extract_object_verdict.py +0 -0
  262. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/test_fr010_loader_attrs.py +0 -0
  263. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/test_fr011_attrs.py +0 -0
  264. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/test_generator_registry_conformance.py +0 -0
  265. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/test_object_model_conformance.py +0 -0
  266. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/test_registry_conformance.py +0 -0
  267. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/test_runner_hardfail.py +0 -0
  268. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/test_spec_metamodel_embed.py +0 -0
  269. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/test_strict_attr_load.py +0 -0
  270. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/test_template_codegen_conformance.py +0 -0
  271. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/test_template_generator_conformance.py +0 -0
  272. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/test_yaml_conformance.py +0 -0
  273. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/conformance/yaml-conformance-expected-failures.json +0 -0
  274. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/__init__.py +0 -0
  275. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/api_contract_assertions.py +0 -0
  276. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/api_contract_jsonb_server.py +0 -0
  277. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/api_contract_m2m_server.py +0 -0
  278. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/api_contract_server.py +0 -0
  279. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/generated_jsonb_app.py +0 -0
  280. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/generated_m2m_app.py +0 -0
  281. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/generated_router_app.py +0 -0
  282. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/generated_tph_app.py +0 -0
  283. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/meta_ai_trace.yaml +0 -0
  284. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/normalization.py +0 -0
  285. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/postgres_container.py +0 -0
  286. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/query_runner.py +0 -0
  287. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/scenarios.py +0 -0
  288. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/test_api_contract.py +0 -0
  289. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/test_api_contract_generated.py +0 -0
  290. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/test_api_contract_jsonb.py +0 -0
  291. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/test_api_contract_m2m.py +0 -0
  292. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/test_api_contract_m2m_generated.py +0 -0
  293. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/test_api_contract_tph_generated.py +0 -0
  294. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/test_llm_call_trace.py +0 -0
  295. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/test_normalization.py +0 -0
  296. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/test_query_scenarios.py +0 -0
  297. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/integration/test_runtime_return_types.py +0 -0
  298. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/open_closed_proof_test.py +0 -0
  299. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/__init__.py +0 -0
  300. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/extract/__init__.py +0 -0
  301. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/extract/test_coerce.py +0 -0
  302. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/extract/test_extract.py +0 -0
  303. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/extract/test_extract_map.py +0 -0
  304. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/extract/test_json_forgiving_reader.py +0 -0
  305. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/extract/test_locate.py +0 -0
  306. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/extract/test_model.py +0 -0
  307. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/extract/test_normalize.py +0 -0
  308. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/extract/test_strip.py +0 -0
  309. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/extract/test_xml_forgiving_reader.py +0 -0
  310. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/prompt/__init__.py +0 -0
  311. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/prompt/test_output_format_renderer.py +0 -0
  312. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/test_email_document.py +0 -0
  313. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/test_filesystem_provider.py +0 -0
  314. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/test_output_format_renderer_nested.py +0 -0
  315. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/test_output_prompt_conformance.py +0 -0
  316. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/test_render_conformance.py +0 -0
  317. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/test_render_max_chars.py +0 -0
  318. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/test_verify.py +0 -0
  319. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/render/test_verify_conformance.py +0 -0
  320. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/source/__init__.py +0 -0
  321. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/source/test_fr5c_merge_attribution.py +0 -0
  322. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/source/test_fr5d_reference_resolution.py +0 -0
  323. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/source/test_fr5e_database_source_shape.py +0 -0
  324. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/source/test_json_path.py +0 -0
  325. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/source/test_semantic_diff.py +0 -0
  326. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/source/test_source_on_node.py +0 -0
  327. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/source/test_yaml_positions.py +0 -0
  328. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/test_api_docs_accuracy.py +0 -0
  329. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/__init__.py +0 -0
  330. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_agent_context_staleness.py +0 -0
  331. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_capabilities.py +0 -0
  332. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_common_attrs.py +0 -0
  333. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_core_types.py +0 -0
  334. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_effective_package.py +0 -0
  335. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_errors.py +0 -0
  336. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_field_enum.py +0 -0
  337. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_field_map_validation.py +0 -0
  338. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_field_uuid_dbcolumntype.py +0 -0
  339. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_fr016_source_name_and_kind_aliases.py +0 -0
  340. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_index_lookup.py +0 -0
  341. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_llm_recorder.py +0 -0
  342. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_loader.py +0 -0
  343. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_loader_bom.py +0 -0
  344. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_loader_class.py +0 -0
  345. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_merge.py +0 -0
  346. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_meta_attr.py +0 -0
  347. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_meta_data.py +0 -0
  348. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_meta_source.py +0 -0
  349. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_module_shortcuts.py +0 -0
  350. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_n2m_resolver.py +0 -0
  351. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_n2m_resolver_inherited.py +0 -0
  352. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_object_manager_uuid_coercion.py +0 -0
  353. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_one_primary_source.py +0 -0
  354. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_parser.py +0 -0
  355. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_parser_yaml.py +0 -0
  356. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_provider.py +0 -0
  357. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_provider_extension.py +0 -0
  358. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_registry.py +0 -0
  359. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_registry_completeness.py +0 -0
  360. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_registry_extend.py +0 -0
  361. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_registry_sealed.py +0 -0
  362. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_relationship_referential_actions.py +0 -0
  363. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_resolution_key.py +0 -0
  364. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_runtime_resolution_key_binding.py +0 -0
  365. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_serializer.py +0 -0
  366. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_shared_constants.py +0 -0
  367. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_smoke.py +0 -0
  368. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_sources.py +0 -0
  369. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_strict_child_placement.py +0 -0
  370. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_super_resolve.py +0 -0
  371. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_template_toolcall.py +0 -0
  372. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_template_wrong_subtype_attrs.py +0 -0
  373. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_validation_attr_schema.py +0 -0
  374. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_validation_filter_values.py +0 -0
  375. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_validation_origin_paths.py +0 -0
  376. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_validation_sort_field.py +0 -0
  377. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_validation_warnings.py +0 -0
  378. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_write_coercion_arrays.py +0 -0
  379. {metaobjects-0.15.1 → metaobjects-0.15.3}/tests/unit/test_yaml_desugar.py +0 -0
  380. {metaobjects-0.15.1 → metaobjects-0.15.3}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: metaobjects
3
- Version: 0.15.1
3
+ Version: 0.15.3
4
4
  Summary: Cross-language metadata standard: declare typed entities once, generate idiomatic drift-checked code across languages — Python port.
5
5
  Project-URL: Homepage, https://metaobjects.dev
6
6
  Project-URL: Repository, https://github.com/metaobjectsdev/metaobjects
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "metaobjects"
3
- version = "0.15.1"
3
+ version = "0.15.3"
4
4
  description = "Cross-language metadata standard: declare typed entities once, generate idiomatic drift-checked code across languages — Python port."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -44,10 +44,14 @@ def _prompt_field_literal(field: MetaData) -> str:
44
44
  array = "True" if fm.is_array(field) else "False"
45
45
 
46
46
  if field.sub_type == fc.FIELD_SUBTYPE_OBJECT:
47
- return (
48
- f'PromptField("{name}", FieldKind.OBJECT, {req}, array={array})'
49
- " # FR-010: nested prompt deferred"
50
- )
47
+ # FR-010: nested prompt deferred — emit a FieldKind.OBJECT placeholder (nested
48
+ # defaults to None on PromptField). The note lives HERE, not in the returned
49
+ # literal: spec_literal joins every field onto ONE line, and a Python '#' inline
50
+ # comment would swallow the rest of that line — including the closing `])` — so a
51
+ # nested-object payload emitted invalid Python (unterminated list) and crashed
52
+ # `gen` + `verify --codegen`. The other ports use `/* */` block comments, which
53
+ # are inline-safe; Python has none, so the literal must carry no comment.
54
+ return f'PromptField("{name}", FieldKind.OBJECT, {req}, array={array})'
51
55
 
52
56
  example = _opt_string_attr(field, fc.FIELD_ATTR_EXAMPLE)
53
57
  instruction = _opt_string_attr(field, fc.FIELD_ATTR_INSTRUCTION)
@@ -14,8 +14,9 @@ Returned ``FilterParseResult`` is either:
14
14
  * ``predicates`` populated + ``error_envelope`` ``None`` — success path; the
15
15
  generated router passes ``predicates`` into the repository.
16
16
  * ``error_envelope`` non-``None`` (one of ``invalid_filter_field`` /
17
- ``invalid_filter_op`` / ``invalid_filter_value``) — the generated router
18
- raises ``HTTPException(status_code=400, detail=result.error_envelope)``.
17
+ ``invalid_filter_op`` / ``invalid_filter_value`` / ``filter.in_too_large``) —
18
+ the generated router raises
19
+ ``HTTPException(status_code=400, detail=result.error_envelope)``.
19
20
 
20
21
  Mirror of the Java ``FilterParser`` / Kotlin ``KotlinFilterAllowlistGenerator`` /
21
22
  C# ``FilterParser`` ports — same wire grammar, same error envelopes, same
@@ -35,6 +36,13 @@ _INVALID_VALUE = object()
35
36
  _ERR_FIELD = "invalid_filter_field"
36
37
  _ERR_OP = "invalid_filter_op"
37
38
  _ERR_VALUE = "invalid_filter_value"
39
+ _ERR_IN_TOO_LARGE = "filter.in_too_large"
40
+
41
+ # Cross-port cap on the number of elements in an ``in``-list. A larger list is
42
+ # rejected with the ``filter.in_too_large`` envelope so a caller cannot force an
43
+ # unbounded ``IN (...)`` against the DB. Matches the TypeScript ``runtime-ts``
44
+ # filter parser's ``DEFAULT_MAX_IN_LIST``.
45
+ MAX_IN_LIST = 100
38
46
 
39
47
 
40
48
  @dataclass(frozen=True)
@@ -85,7 +93,7 @@ def parse_filter(
85
93
  validated + coerced filter list (preserving URL order); on failure,
86
94
  ``error_envelope`` is one of the cross-port envelopes
87
95
  (``invalid_filter_field`` / ``invalid_filter_op`` /
88
- ``invalid_filter_value``).
96
+ ``invalid_filter_value`` / ``filter.in_too_large``).
89
97
  """
90
98
  allowed_set = set(allowed_fields)
91
99
  ops_map: dict[str, frozenset[str]] = {
@@ -129,6 +137,8 @@ def parse_filter(
129
137
  coerced = _coerce_value(value, op)
130
138
  if coerced is _INVALID_VALUE:
131
139
  return FilterParseResult(error_envelope={"error": _ERR_VALUE})
140
+ if op == "in" and isinstance(coerced, list) and len(coerced) > MAX_IN_LIST:
141
+ return FilterParseResult(error_envelope={"error": _ERR_IN_TOO_LARGE})
132
142
  out.append(FilterPredicate(field=field_name, op=op, value=coerced))
133
143
 
134
144
  return FilterParseResult(predicates=out)
@@ -255,6 +255,15 @@ def _sorted_children(definition: TypeDefinition) -> list[dict[str, object]]:
255
255
  return children
256
256
 
257
257
 
258
+ METAMODEL_VERSION = "0.9"
259
+ """Rolled-up spec-version for the cross-port registry manifest.
260
+
261
+ ``"0"`` = pre-1.0 / unstable (semver major-0). Flips to ``"1.0"`` at the
262
+ 1.0 vocabulary cut. Emitted as the first top-level key in the canonical
263
+ manifest so every port's byte-comparison gate sees it at position 0.
264
+ """
265
+
266
+
258
267
  def build_registry_manifest(registry: TypeRegistry) -> dict[str, object]:
259
268
  """Build the canonical registry-manifest object from an assembled registry.
260
269
 
@@ -306,8 +315,9 @@ def build_registry_manifest(registry: TypeRegistry) -> dict[str, object]:
306
315
  if default_sub is not None:
307
316
  default_sub_types[type_name] = default_sub
308
317
 
309
- # Fixed top-level key order: types, commonAttrs, defaultSubTypes.
318
+ # Fixed top-level key order: metamodelVersion (C4), types, commonAttrs, defaultSubTypes.
310
319
  return {
320
+ "metamodelVersion": METAMODEL_VERSION,
311
321
  "types": types,
312
322
  "commonAttrs": common_attrs,
313
323
  "defaultSubTypes": default_sub_types,
@@ -0,0 +1,59 @@
1
+ """Regression: a ``template.output`` payload with a NESTED ``field.object`` must emit
2
+ VALID Python from the output-prompt spec emitter (a ``FieldKind.OBJECT`` placeholder),
3
+ NOT crash ``gen`` / ``verify --codegen``.
4
+
5
+ The bug (0.15.0): the nested-object branch appended an inline ``# FR-010: nested prompt
6
+ deferred`` comment to the emitted literal. ``spec_literal`` joins every field onto ONE
7
+ line, so the Python ``#`` swallowed the rest of the line — including the closing ``])`` —
8
+ producing an unterminated list (``SyntaxError: '[' was never closed``). The other four
9
+ ports use ``/* */`` block comments, which are inline-safe; Python has none, so the literal
10
+ must carry no comment.
11
+ """
12
+ from __future__ import annotations
13
+
14
+ import ast
15
+
16
+ import metaobjects.core_types # noqa: F401 — side-effect: registers attr classes
17
+ from metaobjects.codegen import output_format_spec_emitter as ofs
18
+ from metaobjects.meta.core.field import field_constants as fc
19
+ from metaobjects.meta.core.field.meta_field import MetaField
20
+ from metaobjects.meta.core.object.meta_object import MetaObject
21
+ from metaobjects.meta.template import template_constants as tc
22
+ from metaobjects.meta.template.meta_template import MetaTemplate
23
+ from metaobjects.shared.base_types import TYPE_FIELD, TYPE_OBJECT, TYPE_TEMPLATE
24
+
25
+
26
+ def _envelope() -> tuple[MetaObject, MetaTemplate]:
27
+ before = MetaField(TYPE_FIELD, fc.FIELD_SUBTYPE_STRING, "before")
28
+ before.set_attr(fc.FIELD_ATTR_REQUIRED, True)
29
+ # the nested object sits BETWEEN two scalars, so a swallowed line would eat both the
30
+ # trailing field and the closing bracket.
31
+ inner = MetaField(TYPE_FIELD, fc.FIELD_SUBTYPE_OBJECT, "inner")
32
+ inner.set_attr(fc.FIELD_ATTR_REQUIRED, True)
33
+ after = MetaField(TYPE_FIELD, fc.FIELD_SUBTYPE_STRING, "after")
34
+
35
+ vo = MetaObject(TYPE_OBJECT, "value", "Envelope")
36
+ vo.package = "acme::ai"
37
+ for f in (before, inner, after):
38
+ vo.add_child(f)
39
+
40
+ tmpl = MetaTemplate(TYPE_TEMPLATE, tc.TEMPLATE_SUBTYPE_OUTPUT, "EnvOutput")
41
+ tmpl.set_attr(tc.TEMPLATE_ATTR_PAYLOAD_REF, "Envelope")
42
+ tmpl.set_attr(tc.TEMPLATE_ATTR_FORMAT, "xml")
43
+ tmpl.set_attr(tc.TEMPLATE_ATTR_PROMPT_STYLE, "guide")
44
+ return vo, tmpl
45
+
46
+
47
+ def test_nested_object_payload_emits_parseable_python() -> None:
48
+ vo, tmpl = _envelope()
49
+ lit = ofs.spec_literal(vo, tmpl, "Envelope")
50
+
51
+ # 1) the whole OutputFormatSpec(...) literal must be valid Python — the core bug.
52
+ ast.parse(lit) # raised "SyntaxError: '[' was never closed" on the broken output
53
+
54
+ # 2) the nested field is a FieldKind.OBJECT placeholder …
55
+ assert "FieldKind.OBJECT" in lit
56
+ # 3) … with NO inline comment in the emitted literal (that was the swallow) …
57
+ assert "#" not in lit
58
+ # 4) … and the field AFTER the nested one survived (was not commented out).
59
+ assert '"after"' in lit
@@ -0,0 +1,150 @@
1
+ """Provider-composition conformance runner (Python port).
2
+
3
+ Five registry/provider error codes are Tier-1 cross-port invariants that the
4
+ metadata-input -> error corpus cannot reach: they are triggered by HOW providers
5
+ are composed and sealed, not by any metadata document. This runner gates them
6
+ from the shared corpus at fixtures/provider-composition-conformance/.
7
+
8
+ Each port supplies the SAME canonical named-provider set (see the corpus
9
+ README). A manifest names providers by id; the runner maps names -> provider
10
+ objects, composes, and asserts the surfaced .code. The registry-sealed scenario
11
+ composes, seals, then runs a probe provider's register_types against the sealed
12
+ registry.
13
+ """
14
+ from __future__ import annotations
15
+
16
+ import json
17
+ from pathlib import Path
18
+
19
+ import pytest
20
+
21
+ from metaobjects.errors import ErrorCode, ParseError
22
+ from metaobjects.provider import Provider, compose_registry
23
+ from metaobjects.registry import AttrSchema, ChildRule, TypeDefinition, TypeRegistry
24
+ from metaobjects.meta.template.meta_template import MetaTemplate
25
+ from metaobjects.shared.base_types import TYPE_ATTR
26
+
27
+ # Fresh, otherwise-unused template subtype the attr-conflict / seal providers use.
28
+ _CONFLICT_SUBTYPE = "compositionprobe"
29
+ _CONFLICT_ATTR = "conflictAttr"
30
+
31
+
32
+ def _corpus_root() -> Path:
33
+ here = Path(__file__).resolve()
34
+ for parent in [here, *here.parents]:
35
+ candidate = parent / "fixtures" / "provider-composition-conformance"
36
+ if candidate.is_dir():
37
+ return candidate
38
+ raise RuntimeError("could not locate fixtures/provider-composition-conformance from " + str(here))
39
+
40
+
41
+ def _noop_provider(provider_id: str, *deps: str) -> Provider:
42
+ return Provider(provider_id, dependencies=tuple(deps))
43
+
44
+
45
+ def _attr_conflict_base_provider() -> Provider:
46
+ """Registers a fresh test-only type carrying a single string attr."""
47
+ p = Provider("attr-conflict-base")
48
+ p.add(
49
+ TypeDefinition(
50
+ type="template",
51
+ sub_type=_CONFLICT_SUBTYPE,
52
+ factory=lambda t, s, n: MetaTemplate(t, s, n),
53
+ attrs=[AttrSchema(_CONFLICT_ATTR, "string")],
54
+ child_rules=[ChildRule(TYPE_ATTR, "*")],
55
+ )
56
+ )
57
+ return p
58
+
59
+
60
+ class _AttrConflictClashProvider(Provider):
61
+ """Extends the base's type, redefining the same attr name -> attr conflict."""
62
+
63
+ def __init__(self) -> None:
64
+ super().__init__("attr-conflict-clash", dependencies=("attr-conflict-base",))
65
+
66
+ def register_types(self, registry: TypeRegistry) -> None: # noqa: D401
67
+ registry.extend(
68
+ "template",
69
+ _CONFLICT_SUBTYPE,
70
+ attributes=[AttrSchema(_CONFLICT_ATTR, "string")],
71
+ )
72
+
73
+
74
+ class _SealProbeProvider(Provider):
75
+ """Attempts a mutating registration — throws against a sealed registry."""
76
+
77
+ def __init__(self) -> None:
78
+ super().__init__("seal-probe")
79
+
80
+ def register_types(self, registry: TypeRegistry) -> None: # noqa: D401
81
+ registry.register(
82
+ TypeDefinition(
83
+ type="template",
84
+ sub_type="sealprobe",
85
+ factory=lambda t, s, n: MetaTemplate(t, s, n),
86
+ attrs=[],
87
+ child_rules=[],
88
+ )
89
+ )
90
+
91
+
92
+ def _providers() -> dict[str, Provider]:
93
+ return {
94
+ "duplicate-x": _noop_provider("duplicate-x"),
95
+ # Same `.id` as duplicate-x — surfaces ERR_PROVIDER_DUPLICATE_ID at compose time.
96
+ "duplicate-x-clone": _noop_provider("duplicate-x"),
97
+ "depends-on-missing": _noop_provider("depends-on-missing", "does-not-exist"),
98
+ "cycle-a": _noop_provider("cycle-a", "cycle-b"),
99
+ "cycle-b": _noop_provider("cycle-b", "cycle-a"),
100
+ "attr-conflict-base": _attr_conflict_base_provider(),
101
+ "attr-conflict-clash": _AttrConflictClashProvider(),
102
+ "seal-probe": _SealProbeProvider(),
103
+ }
104
+
105
+
106
+ def _resolve(providers: dict[str, Provider], pid: str) -> Provider:
107
+ p = providers.get(pid)
108
+ if p is None:
109
+ raise ValueError(f'Unknown named provider "{pid}" in provider-composition corpus')
110
+ return p
111
+
112
+
113
+ def _manifest_files() -> list[Path]:
114
+ return sorted(_corpus_root().glob("*.json"))
115
+
116
+
117
+ def _error_code(exc: BaseException) -> str:
118
+ code = getattr(exc, "code", None)
119
+ if isinstance(code, ErrorCode):
120
+ return code.value
121
+ if isinstance(code, str):
122
+ return code
123
+ return "ERR_UNKNOWN"
124
+
125
+
126
+ def test_corpus_non_empty() -> None:
127
+ assert len(_manifest_files()) > 0
128
+
129
+
130
+ @pytest.mark.parametrize("manifest_path", _manifest_files(), ids=lambda p: p.name)
131
+ def test_provider_composition(manifest_path: Path) -> None:
132
+ manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
133
+ providers = _providers()
134
+ expected = manifest["expectedError"]
135
+ resolved = [_resolve(providers, pid) for pid in manifest["providers"]]
136
+
137
+ if "sealThenRegister" in manifest:
138
+ # Compose (must succeed), seal, then run the probe against the sealed registry.
139
+ registry = compose_registry(resolved)
140
+ registry.seal()
141
+ probe = _resolve(providers, manifest["sealThenRegister"])
142
+ with pytest.raises(ParseError) as exc_info:
143
+ probe.register_types(registry)
144
+ assert _error_code(exc_info.value) == expected
145
+ return
146
+
147
+ # Ordinary scenario: the compose call itself throws.
148
+ with pytest.raises(ParseError) as exc_info:
149
+ compose_registry(resolved)
150
+ assert _error_code(exc_info.value) == expected
File without changes
File without changes
File without changes