metaobjects 0.15.6__tar.gz → 0.15.8__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 (381) hide show
  1. {metaobjects-0.15.6 → metaobjects-0.15.8}/PKG-INFO +1 -1
  2. {metaobjects-0.15.6 → metaobjects-0.15.8}/pyproject.toml +1 -1
  3. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/errors.py +11 -0
  4. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/loader/merge.py +21 -0
  5. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/loader/validation_passes.py +65 -0
  6. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/naming_refs.py +67 -0
  7. {metaobjects-0.15.6 → metaobjects-0.15.8}/.gitignore +0 -0
  8. {metaobjects-0.15.6 → metaobjects-0.15.8}/LICENSE +0 -0
  9. {metaobjects-0.15.6 → metaobjects-0.15.8}/README.md +0 -0
  10. {metaobjects-0.15.6 → metaobjects-0.15.8}/hatch_build.py +0 -0
  11. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/__init__.py +0 -0
  12. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/agent_context/__init__.py +0 -0
  13. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/agent_context/scaffold.py +0 -0
  14. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/apidocs/__init__.py +0 -0
  15. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/apidocs/api_model.py +0 -0
  16. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/apidocs/builder.py +0 -0
  17. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/apidocs/naming.py +0 -0
  18. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/apidocs/paths.py +0 -0
  19. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/apidocs/renderer.py +0 -0
  20. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/attr_class_map.py +0 -0
  21. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/cli.py +0 -0
  22. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/KNOWN_GAPS.md +0 -0
  23. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/__init__.py +0 -0
  24. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/config.py +0 -0
  25. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/constants.py +0 -0
  26. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/extract_delegate_emitter.py +0 -0
  27. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/extract_schema_emitter.py +0 -0
  28. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/format.py +0 -0
  29. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/fr010_field_mapping.py +0 -0
  30. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/generator.py +0 -0
  31. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/generator_registry.py +0 -0
  32. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/generators/__init__.py +0 -0
  33. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/generators/entity_model.py +0 -0
  34. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/generators/extractor_generator.py +0 -0
  35. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/generators/filter_allowlist_generator.py +0 -0
  36. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/generators/fr019_shared_enum.py +0 -0
  37. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/generators/m2m_codegen.py +0 -0
  38. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/generators/output_parser_generator.py +0 -0
  39. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/generators/output_prompt_generator.py +0 -0
  40. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/generators/payload_vo_generator.py +0 -0
  41. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/generators/render_helper_generator.py +0 -0
  42. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/generators/router_generator.py +0 -0
  43. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/generators/template_generator.py +0 -0
  44. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/generators/tph_plan.py +0 -0
  45. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/generators/trace_helper_generator.py +0 -0
  46. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/instance_artifacts.py +0 -0
  47. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/output_format_spec_emitter.py +0 -0
  48. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/overwrite_policy.py +0 -0
  49. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/runner.py +0 -0
  50. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/runtime/__init__.py +0 -0
  51. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/runtime/filter_parser.py +0 -0
  52. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/template_codegen/__init__.py +0 -0
  53. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/template_codegen/output_pattern.py +0 -0
  54. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/template_codegen/template_data.py +0 -0
  55. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/template_codegen/template_spec.py +0 -0
  56. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/codegen/type_map.py +0 -0
  57. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/core_types.py +0 -0
  58. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/datatype.py +0 -0
  59. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/documentation/__init__.py +0 -0
  60. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/documentation/doc_constants.py +0 -0
  61. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/documentation/doc_provider.py +0 -0
  62. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/documentation/doc_schema.py +0 -0
  63. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/loader/__init__.py +0 -0
  64. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/loader/meta_data_loader.py +0 -0
  65. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/loader/registered_validation.py +0 -0
  66. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/loader/sources/__init__.py +0 -0
  67. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/loader/sources/directory_source.py +0 -0
  68. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/loader/sources/file_source.py +0 -0
  69. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/loader/sources/meta_data_source.py +0 -0
  70. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/loader/sources/uri_source.py +0 -0
  71. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/loader/validate_discriminator.py +0 -0
  72. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/loader/validate_field_readonly.py +0 -0
  73. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/loader/validate_source_parameter_ref.py +0 -0
  74. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/loader/validate_source_physical_names.py +0 -0
  75. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/__init__.py +0 -0
  76. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/__init__.py +0 -0
  77. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/attr/__init__.py +0 -0
  78. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/attr/attr_constants.py +0 -0
  79. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/attr/meta_attr.py +0 -0
  80. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/field/__init__.py +0 -0
  81. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/field/field_constants.py +0 -0
  82. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/field/meta_field.py +0 -0
  83. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/identity/__init__.py +0 -0
  84. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/identity/identity_constants.py +0 -0
  85. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/identity/meta_identity.py +0 -0
  86. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/index/__init__.py +0 -0
  87. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/index/index_constants.py +0 -0
  88. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/index/meta_index.py +0 -0
  89. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/object/__init__.py +0 -0
  90. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/object/meta_object.py +0 -0
  91. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/object/meta_object_aware.py +0 -0
  92. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/object/object_class_registry.py +0 -0
  93. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/object/object_constants.py +0 -0
  94. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/object/object_extract.py +0 -0
  95. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/object/value_object.py +0 -0
  96. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/relationship/__init__.py +0 -0
  97. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/relationship/derive_m2m_fields.py +0 -0
  98. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/relationship/meta_relationship.py +0 -0
  99. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/relationship/relationship_constants.py +0 -0
  100. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/validator/__init__.py +0 -0
  101. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/core/validator/validator_constants.py +0 -0
  102. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/meta_data.py +0 -0
  103. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/meta_root.py +0 -0
  104. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/persistence/__init__.py +0 -0
  105. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/persistence/db/__init__.py +0 -0
  106. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/persistence/db/db_constants.py +0 -0
  107. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/persistence/db/db_provider.py +0 -0
  108. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/persistence/origin/__init__.py +0 -0
  109. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/persistence/origin/meta_origin.py +0 -0
  110. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/persistence/origin/origin_constants.py +0 -0
  111. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/persistence/source/__init__.py +0 -0
  112. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/persistence/source/meta_source.py +0 -0
  113. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/persistence/source/source_constants.py +0 -0
  114. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/presentation/__init__.py +0 -0
  115. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/presentation/layout/__init__.py +0 -0
  116. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/presentation/layout/layout_constants.py +0 -0
  117. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/presentation/layout/meta_layout.py +0 -0
  118. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/presentation/ui/__init__.py +0 -0
  119. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/presentation/ui/ui_provider.py +0 -0
  120. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/presentation/view/__init__.py +0 -0
  121. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/presentation/view/meta_view.py +0 -0
  122. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/presentation/view/view_constants.py +0 -0
  123. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/provider_extends.py +0 -0
  124. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/template/__init__.py +0 -0
  125. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/template/meta_template.py +0 -0
  126. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/template/prompt_provider.py +0 -0
  127. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/meta/template/template_constants.py +0 -0
  128. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/parser.py +0 -0
  129. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/parser_yaml.py +0 -0
  130. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/provider.py +0 -0
  131. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/py.typed +0 -0
  132. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/registry.py +0 -0
  133. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/registry_manifest.py +0 -0
  134. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/__init__.py +0 -0
  135. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/email_document.py +0 -0
  136. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/escapers.py +0 -0
  137. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/extract/KNOWN_GAPS.md +0 -0
  138. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/extract/__init__.py +0 -0
  139. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/extract/coerce.py +0 -0
  140. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/extract/extract.py +0 -0
  141. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/extract/extract_map.py +0 -0
  142. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/extract/json_forgiving_reader.py +0 -0
  143. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/extract/locate.py +0 -0
  144. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/extract/normalize.py +0 -0
  145. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/extract/strip.py +0 -0
  146. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/extract/types.py +0 -0
  147. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/extract/xml_forgiving_reader.py +0 -0
  148. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/filesystem_provider.py +0 -0
  149. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/prompt/__init__.py +0 -0
  150. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/prompt/output_format_renderer.py +0 -0
  151. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/prompt/output_format_spec.py +0 -0
  152. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/prompt/prompt_field.py +0 -0
  153. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/prompt/prompt_overrides.py +0 -0
  154. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/prompt/prompt_style.py +0 -0
  155. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/renderer.py +0 -0
  156. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/render/verify.py +0 -0
  157. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/runtime/__init__.py +0 -0
  158. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/runtime/llm_recorder.py +0 -0
  159. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/runtime/n2m_resolver.py +0 -0
  160. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/runtime/object_manager.py +0 -0
  161. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/runtime/tph.py +0 -0
  162. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/serializer_json.py +0 -0
  163. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/shared/__init__.py +0 -0
  164. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/shared/base_types.py +0 -0
  165. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/shared/separators.py +0 -0
  166. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/shared/structural.py +0 -0
  167. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/source/__init__.py +0 -0
  168. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/source/error_source.py +0 -0
  169. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/source/json_path.py +0 -0
  170. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/source/semantic_diff.py +0 -0
  171. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/source/yaml_positions.py +0 -0
  172. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/__init__.py +0 -0
  173. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/attr.json +0 -0
  174. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/db.json +0 -0
  175. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/documentation.json +0 -0
  176. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/field.json +0 -0
  177. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/identity.json +0 -0
  178. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/index.json +0 -0
  179. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/layout.json +0 -0
  180. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/object.json +0 -0
  181. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/origin.json +0 -0
  182. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/prompt.json +0 -0
  183. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/relationship.json +0 -0
  184. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/source.json +0 -0
  185. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/template.json +0 -0
  186. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/ui.json +0 -0
  187. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/validator.json +0 -0
  188. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/spec_metamodel/view.json +0 -0
  189. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/super_resolve.py +0 -0
  190. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/validation_types.py +0 -0
  191. {metaobjects-0.15.6 → metaobjects-0.15.8}/src/metaobjects/yaml_desugar.py +0 -0
  192. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/__init__.py +0 -0
  193. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/__init__.py +0 -0
  194. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/golden/extends/expected/BaseEntity.py +0 -0
  195. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/golden/extends/expected/Program.py +0 -0
  196. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/golden/extends/meta.json +0 -0
  197. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/golden/nested-array/expected/AuthorBrief.py +0 -0
  198. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/golden/nested-array/expected/PostBrief.py +0 -0
  199. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/golden/nested-array/meta.json +0 -0
  200. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/golden/scalars/expected/Metric.py +0 -0
  201. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/golden/scalars/expected/Report.py +0 -0
  202. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/golden/scalars/meta.json +0 -0
  203. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/golden/vanilla/expected/Subscriber.py +0 -0
  204. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/golden/vanilla/meta.json +0 -0
  205. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_abstract_conformance.py +0 -0
  206. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_api_docs_builder.py +0 -0
  207. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_api_docs_paths.py +0 -0
  208. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_cli.py +0 -0
  209. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_cli_providers.py +0 -0
  210. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_cli_registry.py +0 -0
  211. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_cli_staleness_nudge.py +0 -0
  212. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_cli_verify_strict.py +0 -0
  213. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_cli_verify_subverbs.py +0 -0
  214. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_constants_config.py +0 -0
  215. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_entity_model.py +0 -0
  216. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_enum_conformance.py +0 -0
  217. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_extends_abstract_field_inheritance.py +0 -0
  218. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_extractor_generator.py +0 -0
  219. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_filter_allowlist_generator.py +0 -0
  220. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_format.py +0 -0
  221. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_fr010_nested_object_prompt.py +0 -0
  222. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_fr010_output_codegen.py +0 -0
  223. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_fr019_shared_provided_conformance.py +0 -0
  224. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_generator.py +0 -0
  225. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_generator_extension_seams.py +0 -0
  226. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_golden.py +0 -0
  227. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_inherit_without_restate_gate.py +0 -0
  228. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_inheritance_conformance.py +0 -0
  229. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_instance_artifacts.py +0 -0
  230. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_m2m_codegen.py +0 -0
  231. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_output_parser_generator.py +0 -0
  232. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_overwrite_policy.py +0 -0
  233. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_payload_vo_generator.py +0 -0
  234. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_projection_compile.py +0 -0
  235. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_render_helper_conformance.py +0 -0
  236. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_render_helper_generator.py +0 -0
  237. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_reverse_finders.py +0 -0
  238. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_router_generator.py +0 -0
  239. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_runner.py +0 -0
  240. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_template_data.py +0 -0
  241. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_template_generator.py +0 -0
  242. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_template_output_pattern.py +0 -0
  243. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_template_scope_helpers.py +0 -0
  244. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_template_scope_walk.py +0 -0
  245. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_template_spec.py +0 -0
  246. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_tph_codegen.py +0 -0
  247. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_trace_helper_generator.py +0 -0
  248. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_type_map.py +0 -0
  249. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/codegen/test_validation_conformance.py +0 -0
  250. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/__init__.py +0 -0
  251. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/capabilities.py +0 -0
  252. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/conformance-expected-failures.json +0 -0
  253. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/conformance_adapter.py +0 -0
  254. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/corpus.py +0 -0
  255. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/expected_failures.py +0 -0
  256. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/fixture_discovery.py +0 -0
  257. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/navigator.py +0 -0
  258. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/test_api_docs_cross_port_conformance.py +0 -0
  259. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/test_conformance.py +0 -0
  260. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/test_extract_conformance.py +0 -0
  261. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/test_extract_object_verdict.py +0 -0
  262. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/test_fr010_loader_attrs.py +0 -0
  263. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/test_fr011_attrs.py +0 -0
  264. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/test_generator_registry_conformance.py +0 -0
  265. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/test_object_model_conformance.py +0 -0
  266. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/test_provider_composition_conformance.py +0 -0
  267. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/test_registry_conformance.py +0 -0
  268. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/test_runner_hardfail.py +0 -0
  269. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/test_spec_metamodel_embed.py +0 -0
  270. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/test_strict_attr_load.py +0 -0
  271. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/test_template_codegen_conformance.py +0 -0
  272. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/test_template_generator_conformance.py +0 -0
  273. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/test_yaml_conformance.py +0 -0
  274. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/conformance/yaml-conformance-expected-failures.json +0 -0
  275. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/__init__.py +0 -0
  276. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/api_contract_assertions.py +0 -0
  277. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/api_contract_jsonb_server.py +0 -0
  278. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/api_contract_m2m_server.py +0 -0
  279. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/api_contract_server.py +0 -0
  280. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/generated_jsonb_app.py +0 -0
  281. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/generated_m2m_app.py +0 -0
  282. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/generated_router_app.py +0 -0
  283. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/generated_tph_app.py +0 -0
  284. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/meta_ai_trace.yaml +0 -0
  285. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/normalization.py +0 -0
  286. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/postgres_container.py +0 -0
  287. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/query_runner.py +0 -0
  288. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/scenarios.py +0 -0
  289. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/test_api_contract.py +0 -0
  290. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/test_api_contract_generated.py +0 -0
  291. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/test_api_contract_jsonb.py +0 -0
  292. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/test_api_contract_m2m.py +0 -0
  293. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/test_api_contract_m2m_generated.py +0 -0
  294. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/test_api_contract_tph_generated.py +0 -0
  295. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/test_llm_call_trace.py +0 -0
  296. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/test_normalization.py +0 -0
  297. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/test_query_scenarios.py +0 -0
  298. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/integration/test_runtime_return_types.py +0 -0
  299. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/open_closed_proof_test.py +0 -0
  300. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/__init__.py +0 -0
  301. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/extract/__init__.py +0 -0
  302. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/extract/test_coerce.py +0 -0
  303. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/extract/test_extract.py +0 -0
  304. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/extract/test_extract_map.py +0 -0
  305. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/extract/test_json_forgiving_reader.py +0 -0
  306. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/extract/test_locate.py +0 -0
  307. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/extract/test_model.py +0 -0
  308. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/extract/test_normalize.py +0 -0
  309. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/extract/test_strip.py +0 -0
  310. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/extract/test_xml_forgiving_reader.py +0 -0
  311. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/prompt/__init__.py +0 -0
  312. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/prompt/test_output_format_renderer.py +0 -0
  313. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/test_email_document.py +0 -0
  314. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/test_filesystem_provider.py +0 -0
  315. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/test_output_format_renderer_nested.py +0 -0
  316. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/test_output_prompt_conformance.py +0 -0
  317. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/test_render_conformance.py +0 -0
  318. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/test_render_max_chars.py +0 -0
  319. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/test_verify.py +0 -0
  320. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/render/test_verify_conformance.py +0 -0
  321. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/source/__init__.py +0 -0
  322. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/source/test_fr5c_merge_attribution.py +0 -0
  323. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/source/test_fr5d_reference_resolution.py +0 -0
  324. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/source/test_fr5e_database_source_shape.py +0 -0
  325. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/source/test_json_path.py +0 -0
  326. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/source/test_semantic_diff.py +0 -0
  327. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/source/test_source_on_node.py +0 -0
  328. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/source/test_yaml_positions.py +0 -0
  329. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/test_api_docs_accuracy.py +0 -0
  330. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/__init__.py +0 -0
  331. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_agent_context_staleness.py +0 -0
  332. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_capabilities.py +0 -0
  333. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_common_attrs.py +0 -0
  334. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_core_types.py +0 -0
  335. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_effective_package.py +0 -0
  336. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_errors.py +0 -0
  337. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_field_enum.py +0 -0
  338. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_field_map_validation.py +0 -0
  339. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_field_uuid_dbcolumntype.py +0 -0
  340. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_fr016_source_name_and_kind_aliases.py +0 -0
  341. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_index_lookup.py +0 -0
  342. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_llm_recorder.py +0 -0
  343. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_loader.py +0 -0
  344. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_loader_bom.py +0 -0
  345. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_loader_class.py +0 -0
  346. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_merge.py +0 -0
  347. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_meta_attr.py +0 -0
  348. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_meta_data.py +0 -0
  349. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_meta_source.py +0 -0
  350. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_module_shortcuts.py +0 -0
  351. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_n2m_resolver.py +0 -0
  352. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_n2m_resolver_inherited.py +0 -0
  353. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_object_manager_uuid_coercion.py +0 -0
  354. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_one_primary_source.py +0 -0
  355. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_parser.py +0 -0
  356. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_parser_yaml.py +0 -0
  357. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_provider.py +0 -0
  358. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_provider_extension.py +0 -0
  359. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_registry.py +0 -0
  360. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_registry_completeness.py +0 -0
  361. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_registry_extend.py +0 -0
  362. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_registry_sealed.py +0 -0
  363. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_relationship_referential_actions.py +0 -0
  364. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_resolution_key.py +0 -0
  365. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_runtime_resolution_key_binding.py +0 -0
  366. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_serializer.py +0 -0
  367. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_shared_constants.py +0 -0
  368. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_smoke.py +0 -0
  369. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_sources.py +0 -0
  370. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_strict_child_placement.py +0 -0
  371. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_super_resolve.py +0 -0
  372. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_template_toolcall.py +0 -0
  373. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_template_wrong_subtype_attrs.py +0 -0
  374. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_validation_attr_schema.py +0 -0
  375. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_validation_filter_values.py +0 -0
  376. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_validation_origin_paths.py +0 -0
  377. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_validation_sort_field.py +0 -0
  378. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_validation_warnings.py +0 -0
  379. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_write_coercion_arrays.py +0 -0
  380. {metaobjects-0.15.6 → metaobjects-0.15.8}/tests/unit/test_yaml_desugar.py +0 -0
  381. {metaobjects-0.15.6 → metaobjects-0.15.8}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: metaobjects
3
- Version: 0.15.6
3
+ Version: 0.15.8
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.6"
3
+ version = "0.15.8"
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"
@@ -132,6 +132,17 @@ class ErrorCode(str, Enum):
132
132
  # emit this yet (the T6 guard is deferred — like TS, it belongs in the parser);
133
133
  # the enum tracks the shared corpus code so resolution/desugar stay aligned.
134
134
  ERR_RELATIVE_REF_IN_CANONICAL = "ERR_RELATIVE_REF_IN_CANONICAL"
135
+ # ADR-0041 — cross-package reference resolution contract. A BARE object
136
+ # reference (no ``::``) that names an object present in MORE THAN ONE package,
137
+ # with NO match in the referrer's own package, is ambiguous — the author must
138
+ # qualify it with the package (FQN). Applies to every object-ref-bearing attr
139
+ # (@objectRef / @references / @from / @of / @via heads / @parameterRef /
140
+ # @payloadRef / @responseRef). An FQN ref resolves exactly and is never
141
+ # ambiguous; a bare ref that matches the referrer's own package, or exactly one
142
+ # package anywhere, resolves fine. ``extends`` is intentionally NOT covered
143
+ # (its same-package/root-strict super-resolver yields ERR_UNRESOLVED_SUPER on a
144
+ # bare cross-package miss, not ambiguity).
145
+ ERR_AMBIGUOUS_REF = "ERR_AMBIGUOUS_REF"
135
146
  # FR-033 — strict structural-placement vocabulary. ERR_CHILD_NOT_ALLOWED: a
136
147
  # structural child (field/identity/source/validator/… — not an attr) is placed
137
148
  # under a parent whose registered childRules do not admit it (the structural
@@ -67,12 +67,33 @@ def merge_roots(
67
67
  warnings = []
68
68
  if envelope_warnings is None:
69
69
  envelope_warnings = []
70
+ # #160 — an overlay-ONLY root (every object child is `overlay: true`) re-opens
71
+ # objects declared in OTHER files; it must not become the merge accumulator
72
+ # (`roots[0]`) or the base declarations get appended AFTER the overlaid nodes,
73
+ # leaving a projection ahead of its base entities so the order-dependent super-
74
+ # resolution can't resolve its `extends`/`@via`. Directory discovery order is
75
+ # not guaranteed to present base files first (Python `rglob` can yield a top-
76
+ # level overlay file before a subdir base file), so stable-partition base roots
77
+ # ahead of overlay-only roots here — making the merge order-independent and
78
+ # matching the TS loader's result. Stable within each group preserves the
79
+ # existing last-writer-wins overlay semantics.
80
+ roots = [r for r in roots if not _is_overlay_only_root(r)] + [
81
+ r for r in roots if _is_overlay_only_root(r)
82
+ ]
70
83
  target = roots[0]
71
84
  for src in roots[1:]:
72
85
  _merge_into(target, src, errors, warnings, envelope_warnings)
73
86
  return target
74
87
 
75
88
 
89
+ def _is_overlay_only_root(root: MetaData) -> bool:
90
+ """True when every object child of *root* is an `overlay: true` re-open (and
91
+ there is at least one) — i.e. the root declares no base objects of its own, so
92
+ it must merge after the base-declaring roots (#160)."""
93
+ kids = list(root.own_children())
94
+ return bool(kids) and all(getattr(c, "is_overlay", False) for c in kids)
95
+
96
+
76
97
  def _source_files(env: ErrorSource) -> tuple[str, ...]:
77
98
  """Extract the ``files`` tuple from any envelope that carries one.
78
99
 
@@ -107,6 +107,7 @@ from ..meta.core.object.object_constants import (
107
107
  from ..meta.core.identity.identity_constants import IDENTITY_ATTR_FIELDS
108
108
  from ..meta.core.index.index_constants import INDEX_ATTR_FIELDS, INDEX_SUBTYPE_LOOKUP
109
109
  from ..source import resolved_source
110
+ from ..naming_refs import CHILD_REF_SEP, REF_BEARING_ATTR_NAMES, resolve_object_ref
110
111
 
111
112
  # A subtype-specific template attr is valid ONLY on the subtype it is registered
112
113
  # for. The metamodel registers these per-subtype (see the core_types template block),
@@ -179,6 +180,8 @@ def run_validations(
179
180
  # @valueType (when set) must name a known scalar subtype.
180
181
  _validate_field_map(root, errors)
181
182
  _validate_templates(root, errors)
183
+ # ADR-0041 — cross-package bare-reference ambiguity (the object-ref contract).
184
+ _validate_cross_package_refs(root, errors)
182
185
  _validate_subtype_rules(root, errors, warnings)
183
186
  # FR-024 B3 — projection identity pass-through + key correspondence.
184
187
  _validate_identity_passthrough(root, errors)
@@ -208,6 +211,68 @@ def _walk(root: MetaData) -> list[MetaData]:
208
211
  return result
209
212
 
210
213
 
214
+ # ---------------------------------------------------------------------------
215
+ # Pass: cross-package reference ambiguity (the object-ref contract, ADR-0041)
216
+ # ---------------------------------------------------------------------------
217
+
218
+
219
+ def _validate_cross_package_refs(root: MetaData, errors: list[MetaError]) -> None:
220
+ """ADR-0041 — a BARE object reference (no ``::``) that names an object present
221
+ in MORE THAN ONE package, with NO match in the referrer's own package, is
222
+ ambiguous → ERR_AMBIGUOUS_REF (the author must qualify it with the package).
223
+
224
+ An FQN ref is exact (never ambiguous); a bare ref matching the referrer's own
225
+ package, or exactly one package anywhere, resolves fine. Covers every
226
+ object-ref-bearing attr in ``REF_BEARING_ATTR_NAMES`` (@objectRef / @references
227
+ / @from / @of / @via / @parameterRef / @payloadRef / @responseRef) — the dotted
228
+ ``.child`` tail of the origin heads is stripped to the entity OWNER. ``extends``
229
+ is intentionally NOT covered: its same-package/root-strict super-resolver never
230
+ matches a packaged object by bare name, so a bare cross-package ``extends`` is
231
+ unresolved (ERR_UNRESOLVED_SUPER), not ambiguous. Mirrors the TS reference
232
+ ``validateCrossPackageRefs``.
233
+ """
234
+
235
+ def _visit(node: MetaData, obj: MetaData, referrer_pkg: str) -> None:
236
+ for attr_name in REF_BEARING_ATTR_NAMES:
237
+ # ADR-0039 sanctioned own: judge the ref AUTHORED on THIS node; an
238
+ # inherited ref was judged on its declaring node. Mirrors the TS
239
+ # `node.ownAttr(attrName)`.
240
+ raw = node.attr(attr_name)
241
+ if not isinstance(raw, str):
242
+ continue
243
+ # Owner = the object part; strip any FR-024 dotted `.child` tail. An FQN
244
+ # owner (has `::`) is resolved exactly and can never be ambiguous.
245
+ dot = raw.find(CHILD_REF_SEP)
246
+ owner = raw if dot == -1 else raw[:dot]
247
+ if PACKAGE_SEP in owner or owner == "":
248
+ continue
249
+ if not resolve_object_ref(root, owner, referrer_pkg).ambiguous:
250
+ continue
251
+ pkgs = [
252
+ c.resolution_key()
253
+ for c in root.children()
254
+ if c.type == TYPE_OBJECT and c.name == owner
255
+ ]
256
+ errors.append(
257
+ MetaError(
258
+ f'@{attr_name} "{raw}" on {obj.fqn()}: bare reference "{owner}" '
259
+ f"is ambiguous — it names an object in multiple packages "
260
+ f"({', '.join(pkgs)}) and none is in the referrer's package "
261
+ f'"{referrer_pkg}". Qualify it with the package (FQN).',
262
+ ErrorCode.ERR_AMBIGUOUS_REF,
263
+ envelope=resolved_source(node.source, obj.fqn(), owner),
264
+ )
265
+ )
266
+ for c in node.own_children():
267
+ _visit(c, obj, referrer_pkg)
268
+
269
+ for obj in root.children():
270
+ if obj.type != TYPE_OBJECT:
271
+ continue
272
+ referrer_pkg = obj.package or obj.file_default_package or ""
273
+ _visit(obj, obj, referrer_pkg)
274
+
275
+
211
276
  # ---------------------------------------------------------------------------
212
277
  # Pass: attr-schema validation
213
278
  # ---------------------------------------------------------------------------
@@ -29,6 +29,8 @@ NEVER expanded — it is the node's identity.
29
29
  """
30
30
  from __future__ import annotations
31
31
 
32
+ from typing import TYPE_CHECKING, NamedTuple, Optional
33
+
32
34
  from .meta.core.field.field_constants import FIELD_ATTR_OBJECT_REF
33
35
  from .meta.core.identity.identity_constants import IDENTITY_REFERENCE_ATTR_REFERENCES
34
36
  from .meta.core.relationship.relationship_constants import RELATIONSHIP_ATTR_OBJECT_REF
@@ -42,8 +44,12 @@ from .meta.template.template_constants import (
42
44
  TEMPLATE_ATTR_PAYLOAD_REF,
43
45
  TEMPLATE_ATTR_RESPONSE_REF,
44
46
  )
47
+ from .shared.base_types import TYPE_OBJECT
45
48
  from .shared.separators import PACKAGE_SEP
46
49
 
50
+ if TYPE_CHECKING:
51
+ from .meta.meta_data import MetaData
52
+
47
53
  # Structural separator literals (Python has no PACKAGE_PARENT / CHILD_REF_SEPARATOR
48
54
  # constant module; the TS values are "::" / "." / ".." — PACKAGE_SEP already
49
55
  # carries "::"). Defined here to mirror TS naming-refs.ts.
@@ -139,3 +145,64 @@ def expand_ref(raw: str, package_context: str) -> str:
139
145
  """
140
146
  owner, tail = _split_child_tail(raw)
141
147
  return _expand_owner(owner, package_context) + tail
148
+
149
+
150
+ # ---------------------------------------------------------------------------
151
+ # ADR-0041 — cross-package OBJECT reference resolution contract
152
+ # ---------------------------------------------------------------------------
153
+ # The SINGLE resolver every object-ref site shares so the same-package-preference
154
+ # contract is uniform. Mirrors the TS reference ``resolveObjectRef`` /
155
+ # ``objectPackage`` in naming-refs.ts.
156
+
157
+
158
+ class ObjectRefResolution(NamedTuple):
159
+ """Result of :func:`resolve_object_ref` — mirrors the TS ``{ node?, ambiguous? }``.
160
+
161
+ * ``node`` — the uniquely-resolved object (``None`` when nothing matched, or
162
+ when a bare ref is cross-package-ambiguous).
163
+ * ``ambiguous`` — True ONLY for a BARE ref that names an object in more than
164
+ one OTHER package with none in the referrer's own package.
165
+ """
166
+
167
+ node: Optional["MetaData"]
168
+ ambiguous: bool
169
+
170
+
171
+ def _object_package(node: "MetaData") -> str:
172
+ """The effective package of a root-level object — its ``resolution_key()`` minus
173
+ the trailing ``::<name>`` ("" for a root-level/empty-package object). Mirrors
174
+ the TS ``objectPackage``.
175
+ """
176
+ key = node.resolution_key()
177
+ i = key.rfind(PACKAGE_SEP)
178
+ return "" if i == -1 else key[:i]
179
+
180
+
181
+ def resolve_object_ref(
182
+ root: "MetaData", ref: str, referrer_pkg: str
183
+ ) -> ObjectRefResolution:
184
+ """Resolve a metadata OBJECT reference under the ADR-0041 cross-package contract.
185
+
186
+ * **FQN** (``ref`` contains ``::``) → EXACT match on ``resolution_key()``/
187
+ ``fqn()``. Never a bare-tail fallback, so an FQN pointing at one package never
188
+ binds a same-named object in another (the cross-port bug ADR-0041 closes).
189
+ * **bare** (no ``::``) → prefer an object of that name in the REFERRER's own
190
+ package; else a UNIQUE object of that name across all packages; else (>1
191
+ across OTHER packages, none in the referrer's) → ``ambiguous``.
192
+
193
+ *referrer_pkg* is the effective package of the node carrying the ref. Returns an
194
+ :class:`ObjectRefResolution`. Mirrors the TS ``resolveObjectRef``.
195
+ """
196
+ objects = [c for c in root.children() if c.type == TYPE_OBJECT]
197
+ if PACKAGE_SEP in ref:
198
+ for c in objects:
199
+ if c.resolution_key() == ref or c.fqn() == ref:
200
+ return ObjectRefResolution(c, False)
201
+ return ObjectRefResolution(None, False)
202
+ matches = [c for c in objects if c.name == ref]
203
+ if len(matches) <= 1:
204
+ return ObjectRefResolution(matches[0] if matches else None, False)
205
+ for c in matches:
206
+ if _object_package(c) == referrer_pkg:
207
+ return ObjectRefResolution(c, False)
208
+ return ObjectRefResolution(None, True)
File without changes
File without changes
File without changes