metaobjects 0.11.0__tar.gz → 0.11.1__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 (385) hide show
  1. {metaobjects-0.11.0 → metaobjects-0.11.1}/PKG-INFO +1 -1
  2. {metaobjects-0.11.0 → metaobjects-0.11.1}/pyproject.toml +1 -1
  3. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/generators/entity_model.py +4 -1
  4. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/type_map.py +14 -0
  5. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/core_types.py +13 -0
  6. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/loader/validation_passes.py +74 -0
  7. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/field/field_constants.py +9 -0
  8. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/field/meta_field.py +3 -0
  9. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/spec_metamodel/field.json +12 -0
  10. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_type_map.py +35 -1
  11. metaobjects-0.11.1/tests/unit/test_field_map_validation.py +92 -0
  12. {metaobjects-0.11.0 → metaobjects-0.11.1}/.gitignore +0 -0
  13. {metaobjects-0.11.0 → metaobjects-0.11.1}/LICENSE +0 -0
  14. {metaobjects-0.11.0 → metaobjects-0.11.1}/README.md +0 -0
  15. {metaobjects-0.11.0 → metaobjects-0.11.1}/hatch_build.py +0 -0
  16. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/__init__.py +0 -0
  17. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/__init__.py +0 -0
  18. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/README.md +0 -0
  19. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/servers/csharp.meta.json +0 -0
  20. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/servers/java.meta.json +0 -0
  21. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/servers/kotlin.meta.json +0 -0
  22. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/servers/python.meta.json +0 -0
  23. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/servers/typescript.meta.json +0 -0
  24. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-authoring/SKILL.md +0 -0
  25. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-codegen/SKILL.md +0 -0
  26. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-codegen/references/csharp.md +0 -0
  27. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-codegen/references/java.md +0 -0
  28. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-codegen/references/kotlin.md +0 -0
  29. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-codegen/references/typescript.md +0 -0
  30. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/SKILL.md +0 -0
  31. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/references/csharp.md +0 -0
  32. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/references/java.md +0 -0
  33. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/references/kotlin.md +0 -0
  34. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/references/python.md +0 -0
  35. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/references/typescript.md +0 -0
  36. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/SKILL.md +0 -0
  37. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/references/java.md +0 -0
  38. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/references/kotlin.md +0 -0
  39. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/references/react.md +0 -0
  40. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/references/tanstack.md +0 -0
  41. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/references/typescript.md +0 -0
  42. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-verify/SKILL.md +0 -0
  43. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/skills/metaobjects-verify/references/migration.md +0 -0
  44. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/_content/templates/always-on.md.mustache +0 -0
  45. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/assemble.py +0 -0
  46. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/content_root.py +0 -0
  47. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/scaffold.py +0 -0
  48. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/agent_context/types.py +0 -0
  49. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/apidocs/__init__.py +0 -0
  50. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/apidocs/api_model.py +0 -0
  51. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/apidocs/builder.py +0 -0
  52. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/apidocs/naming.py +0 -0
  53. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/apidocs/paths.py +0 -0
  54. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/apidocs/renderer.py +0 -0
  55. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/attr_class_map.py +0 -0
  56. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/cli.py +0 -0
  57. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/KNOWN_GAPS.md +0 -0
  58. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/__init__.py +0 -0
  59. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/config.py +0 -0
  60. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/constants.py +0 -0
  61. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/extract_delegate_emitter.py +0 -0
  62. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/extract_schema_emitter.py +0 -0
  63. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/format.py +0 -0
  64. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/fr010_field_mapping.py +0 -0
  65. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/generator.py +0 -0
  66. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/generator_registry.py +0 -0
  67. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/generators/__init__.py +0 -0
  68. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/generators/extractor_generator.py +0 -0
  69. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/generators/filter_allowlist_generator.py +0 -0
  70. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/generators/fr019_shared_enum.py +0 -0
  71. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/generators/m2m_codegen.py +0 -0
  72. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/generators/output_parser_generator.py +0 -0
  73. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/generators/output_prompt_generator.py +0 -0
  74. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/generators/payload_vo_generator.py +0 -0
  75. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/generators/render_helper_generator.py +0 -0
  76. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/generators/router_generator.py +0 -0
  77. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/generators/template_generator.py +0 -0
  78. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/generators/tph_plan.py +0 -0
  79. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/generators/trace_helper_generator.py +0 -0
  80. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/instance_artifacts.py +0 -0
  81. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/output_format_spec_emitter.py +0 -0
  82. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/overwrite_policy.py +0 -0
  83. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/runner.py +0 -0
  84. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/runtime/__init__.py +0 -0
  85. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/codegen/runtime/filter_parser.py +0 -0
  86. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/datatype.py +0 -0
  87. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/documentation/__init__.py +0 -0
  88. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/documentation/doc_constants.py +0 -0
  89. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/documentation/doc_provider.py +0 -0
  90. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/documentation/doc_schema.py +0 -0
  91. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/errors.py +0 -0
  92. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/loader/__init__.py +0 -0
  93. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/loader/merge.py +0 -0
  94. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/loader/meta_data_loader.py +0 -0
  95. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/loader/registered_validation.py +0 -0
  96. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/loader/sources/__init__.py +0 -0
  97. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/loader/sources/directory_source.py +0 -0
  98. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/loader/sources/file_source.py +0 -0
  99. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/loader/sources/meta_data_source.py +0 -0
  100. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/loader/sources/uri_source.py +0 -0
  101. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/loader/validate_discriminator.py +0 -0
  102. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/loader/validate_field_readonly.py +0 -0
  103. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/loader/validate_source_parameter_ref.py +0 -0
  104. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/loader/validate_source_physical_names.py +0 -0
  105. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/__init__.py +0 -0
  106. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/__init__.py +0 -0
  107. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/attr/__init__.py +0 -0
  108. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/attr/attr_constants.py +0 -0
  109. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/attr/meta_attr.py +0 -0
  110. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/field/__init__.py +0 -0
  111. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/identity/__init__.py +0 -0
  112. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/identity/identity_constants.py +0 -0
  113. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/identity/meta_identity.py +0 -0
  114. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/object/__init__.py +0 -0
  115. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/object/meta_object.py +0 -0
  116. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/object/meta_object_aware.py +0 -0
  117. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/object/object_class_registry.py +0 -0
  118. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/object/object_constants.py +0 -0
  119. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/object/object_extract.py +0 -0
  120. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/object/value_object.py +0 -0
  121. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/relationship/__init__.py +0 -0
  122. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/relationship/derive_m2m_fields.py +0 -0
  123. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/relationship/meta_relationship.py +0 -0
  124. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/relationship/relationship_constants.py +0 -0
  125. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/validator/__init__.py +0 -0
  126. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/core/validator/validator_constants.py +0 -0
  127. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/meta_data.py +0 -0
  128. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/meta_root.py +0 -0
  129. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/persistence/__init__.py +0 -0
  130. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/persistence/db/__init__.py +0 -0
  131. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/persistence/db/db_constants.py +0 -0
  132. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/persistence/db/db_provider.py +0 -0
  133. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/persistence/origin/__init__.py +0 -0
  134. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/persistence/origin/meta_origin.py +0 -0
  135. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/persistence/origin/origin_constants.py +0 -0
  136. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/persistence/source/__init__.py +0 -0
  137. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/persistence/source/meta_source.py +0 -0
  138. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/persistence/source/source_constants.py +0 -0
  139. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/presentation/__init__.py +0 -0
  140. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/presentation/layout/__init__.py +0 -0
  141. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/presentation/layout/layout_constants.py +0 -0
  142. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/presentation/layout/meta_layout.py +0 -0
  143. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/presentation/ui/__init__.py +0 -0
  144. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/presentation/ui/ui_provider.py +0 -0
  145. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/presentation/view/__init__.py +0 -0
  146. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/presentation/view/meta_view.py +0 -0
  147. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/presentation/view/view_constants.py +0 -0
  148. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/provider_extends.py +0 -0
  149. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/template/__init__.py +0 -0
  150. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/template/meta_template.py +0 -0
  151. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/template/prompt_provider.py +0 -0
  152. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/meta/template/template_constants.py +0 -0
  153. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/naming_refs.py +0 -0
  154. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/parser.py +0 -0
  155. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/parser_yaml.py +0 -0
  156. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/provider.py +0 -0
  157. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/py.typed +0 -0
  158. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/registry.py +0 -0
  159. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/registry_manifest.py +0 -0
  160. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/__init__.py +0 -0
  161. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/email_document.py +0 -0
  162. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/escapers.py +0 -0
  163. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/extract/KNOWN_GAPS.md +0 -0
  164. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/extract/__init__.py +0 -0
  165. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/extract/coerce.py +0 -0
  166. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/extract/extract.py +0 -0
  167. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/extract/extract_map.py +0 -0
  168. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/extract/json_forgiving_reader.py +0 -0
  169. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/extract/locate.py +0 -0
  170. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/extract/normalize.py +0 -0
  171. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/extract/strip.py +0 -0
  172. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/extract/types.py +0 -0
  173. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/extract/xml_forgiving_reader.py +0 -0
  174. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/filesystem_provider.py +0 -0
  175. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/prompt/__init__.py +0 -0
  176. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/prompt/output_format_renderer.py +0 -0
  177. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/prompt/output_format_spec.py +0 -0
  178. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/prompt/prompt_field.py +0 -0
  179. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/prompt/prompt_overrides.py +0 -0
  180. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/prompt/prompt_style.py +0 -0
  181. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/renderer.py +0 -0
  182. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/render/verify.py +0 -0
  183. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/runtime/__init__.py +0 -0
  184. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/runtime/llm_recorder.py +0 -0
  185. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/runtime/n2m_resolver.py +0 -0
  186. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/runtime/object_manager.py +0 -0
  187. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/runtime/tph.py +0 -0
  188. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/serializer_json.py +0 -0
  189. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/shared/__init__.py +0 -0
  190. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/shared/base_types.py +0 -0
  191. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/shared/separators.py +0 -0
  192. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/shared/structural.py +0 -0
  193. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/source/__init__.py +0 -0
  194. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/source/error_source.py +0 -0
  195. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/source/json_path.py +0 -0
  196. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/source/semantic_diff.py +0 -0
  197. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/source/yaml_positions.py +0 -0
  198. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/spec_metamodel/__init__.py +0 -0
  199. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/spec_metamodel/attr.json +0 -0
  200. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/spec_metamodel/db.json +0 -0
  201. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/spec_metamodel/documentation.json +0 -0
  202. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/spec_metamodel/identity.json +0 -0
  203. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/spec_metamodel/layout.json +0 -0
  204. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/spec_metamodel/object.json +0 -0
  205. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/spec_metamodel/origin.json +0 -0
  206. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/spec_metamodel/prompt.json +0 -0
  207. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/spec_metamodel/relationship.json +0 -0
  208. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/spec_metamodel/source.json +0 -0
  209. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/spec_metamodel/template.json +0 -0
  210. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/spec_metamodel/ui.json +0 -0
  211. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/spec_metamodel/validator.json +0 -0
  212. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/spec_metamodel/view.json +0 -0
  213. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/super_resolve.py +0 -0
  214. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/validation_types.py +0 -0
  215. {metaobjects-0.11.0 → metaobjects-0.11.1}/src/metaobjects/yaml_desugar.py +0 -0
  216. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/__init__.py +0 -0
  217. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/__init__.py +0 -0
  218. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/golden/extends/expected/BaseEntity.py +0 -0
  219. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/golden/extends/expected/Program.py +0 -0
  220. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/golden/extends/meta.json +0 -0
  221. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/golden/nested-array/expected/AuthorBrief.py +0 -0
  222. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/golden/nested-array/expected/PostBrief.py +0 -0
  223. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/golden/nested-array/meta.json +0 -0
  224. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/golden/scalars/expected/Metric.py +0 -0
  225. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/golden/scalars/expected/Report.py +0 -0
  226. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/golden/scalars/meta.json +0 -0
  227. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/golden/vanilla/expected/Subscriber.py +0 -0
  228. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/golden/vanilla/meta.json +0 -0
  229. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_abstract_conformance.py +0 -0
  230. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_api_docs_builder.py +0 -0
  231. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_api_docs_paths.py +0 -0
  232. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_cli.py +0 -0
  233. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_cli_registry.py +0 -0
  234. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_cli_staleness_nudge.py +0 -0
  235. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_cli_verify_subverbs.py +0 -0
  236. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_constants_config.py +0 -0
  237. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_entity_model.py +0 -0
  238. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_enum_conformance.py +0 -0
  239. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_extractor_generator.py +0 -0
  240. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_filter_allowlist_generator.py +0 -0
  241. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_format.py +0 -0
  242. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_fr010_output_codegen.py +0 -0
  243. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_fr019_shared_provided_conformance.py +0 -0
  244. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_generator.py +0 -0
  245. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_generator_extension_seams.py +0 -0
  246. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_golden.py +0 -0
  247. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_inherit_without_restate_gate.py +0 -0
  248. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_inheritance_conformance.py +0 -0
  249. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_instance_artifacts.py +0 -0
  250. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_m2m_codegen.py +0 -0
  251. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_output_parser_generator.py +0 -0
  252. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_overwrite_policy.py +0 -0
  253. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_payload_vo_generator.py +0 -0
  254. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_render_helper_conformance.py +0 -0
  255. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_render_helper_generator.py +0 -0
  256. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_router_generator.py +0 -0
  257. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_runner.py +0 -0
  258. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_template_generator.py +0 -0
  259. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_tph_codegen.py +0 -0
  260. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_trace_helper_generator.py +0 -0
  261. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/codegen/test_validation_conformance.py +0 -0
  262. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/__init__.py +0 -0
  263. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/capabilities.py +0 -0
  264. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/conformance-expected-failures.json +0 -0
  265. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/conformance_adapter.py +0 -0
  266. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/corpus.py +0 -0
  267. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/expected_failures.py +0 -0
  268. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/fixture_discovery.py +0 -0
  269. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/navigator.py +0 -0
  270. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/test_agent_context_conformance.py +0 -0
  271. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/test_api_docs_cross_port_conformance.py +0 -0
  272. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/test_conformance.py +0 -0
  273. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/test_extract_conformance.py +0 -0
  274. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/test_extract_object_verdict.py +0 -0
  275. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/test_fr010_loader_attrs.py +0 -0
  276. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/test_fr011_attrs.py +0 -0
  277. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/test_generator_registry_conformance.py +0 -0
  278. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/test_object_model_conformance.py +0 -0
  279. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/test_registry_conformance.py +0 -0
  280. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/test_runner_hardfail.py +0 -0
  281. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/test_spec_metamodel_embed.py +0 -0
  282. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/test_strict_attr_load.py +0 -0
  283. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/test_template_generator_conformance.py +0 -0
  284. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/test_yaml_conformance.py +0 -0
  285. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/conformance/yaml-conformance-expected-failures.json +0 -0
  286. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/__init__.py +0 -0
  287. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/api_contract_assertions.py +0 -0
  288. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/api_contract_m2m_server.py +0 -0
  289. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/api_contract_server.py +0 -0
  290. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/generated_m2m_app.py +0 -0
  291. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/generated_router_app.py +0 -0
  292. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/generated_tph_app.py +0 -0
  293. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/meta_ai_trace.yaml +0 -0
  294. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/normalization.py +0 -0
  295. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/postgres_container.py +0 -0
  296. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/query_runner.py +0 -0
  297. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/scenarios.py +0 -0
  298. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/test_api_contract.py +0 -0
  299. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/test_api_contract_generated.py +0 -0
  300. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/test_api_contract_m2m.py +0 -0
  301. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/test_api_contract_m2m_generated.py +0 -0
  302. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/test_api_contract_tph_generated.py +0 -0
  303. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/test_llm_call_trace.py +0 -0
  304. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/test_normalization.py +0 -0
  305. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/test_query_scenarios.py +0 -0
  306. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/integration/test_runtime_return_types.py +0 -0
  307. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/open_closed_proof_test.py +0 -0
  308. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/__init__.py +0 -0
  309. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/extract/__init__.py +0 -0
  310. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/extract/test_coerce.py +0 -0
  311. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/extract/test_extract.py +0 -0
  312. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/extract/test_extract_map.py +0 -0
  313. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/extract/test_json_forgiving_reader.py +0 -0
  314. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/extract/test_locate.py +0 -0
  315. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/extract/test_model.py +0 -0
  316. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/extract/test_normalize.py +0 -0
  317. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/extract/test_strip.py +0 -0
  318. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/extract/test_xml_forgiving_reader.py +0 -0
  319. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/prompt/__init__.py +0 -0
  320. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/prompt/test_output_format_renderer.py +0 -0
  321. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/test_email_document.py +0 -0
  322. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/test_filesystem_provider.py +0 -0
  323. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/test_output_format_renderer_nested.py +0 -0
  324. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/test_output_prompt_conformance.py +0 -0
  325. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/test_render_conformance.py +0 -0
  326. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/test_render_max_chars.py +0 -0
  327. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/test_verify.py +0 -0
  328. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/render/test_verify_conformance.py +0 -0
  329. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/source/__init__.py +0 -0
  330. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/source/test_fr5c_merge_attribution.py +0 -0
  331. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/source/test_fr5d_reference_resolution.py +0 -0
  332. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/source/test_fr5e_database_source_shape.py +0 -0
  333. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/source/test_json_path.py +0 -0
  334. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/source/test_semantic_diff.py +0 -0
  335. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/source/test_source_on_node.py +0 -0
  336. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/source/test_yaml_positions.py +0 -0
  337. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/test_api_docs_accuracy.py +0 -0
  338. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/__init__.py +0 -0
  339. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_agent_context_staleness.py +0 -0
  340. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_capabilities.py +0 -0
  341. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_common_attrs.py +0 -0
  342. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_core_types.py +0 -0
  343. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_effective_package.py +0 -0
  344. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_errors.py +0 -0
  345. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_field_enum.py +0 -0
  346. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_field_uuid_dbcolumntype.py +0 -0
  347. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_fr016_source_name_and_kind_aliases.py +0 -0
  348. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_llm_recorder.py +0 -0
  349. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_loader.py +0 -0
  350. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_loader_bom.py +0 -0
  351. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_loader_class.py +0 -0
  352. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_merge.py +0 -0
  353. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_meta_attr.py +0 -0
  354. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_meta_data.py +0 -0
  355. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_meta_source.py +0 -0
  356. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_module_shortcuts.py +0 -0
  357. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_n2m_resolver.py +0 -0
  358. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_object_manager_uuid_coercion.py +0 -0
  359. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_one_primary_source.py +0 -0
  360. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_parser.py +0 -0
  361. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_parser_yaml.py +0 -0
  362. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_provider.py +0 -0
  363. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_provider_extension.py +0 -0
  364. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_registry.py +0 -0
  365. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_registry_completeness.py +0 -0
  366. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_registry_extend.py +0 -0
  367. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_registry_sealed.py +0 -0
  368. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_relationship_referential_actions.py +0 -0
  369. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_resolution_key.py +0 -0
  370. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_runtime_resolution_key_binding.py +0 -0
  371. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_serializer.py +0 -0
  372. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_shared_constants.py +0 -0
  373. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_smoke.py +0 -0
  374. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_sources.py +0 -0
  375. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_strict_child_placement.py +0 -0
  376. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_super_resolve.py +0 -0
  377. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_template_toolcall.py +0 -0
  378. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_template_wrong_subtype_attrs.py +0 -0
  379. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_validation_attr_schema.py +0 -0
  380. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_validation_filter_values.py +0 -0
  381. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_validation_origin_paths.py +0 -0
  382. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_validation_sort_field.py +0 -0
  383. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_validation_warnings.py +0 -0
  384. {metaobjects-0.11.0 → metaobjects-0.11.1}/tests/unit/test_yaml_desugar.py +0 -0
  385. {metaobjects-0.11.0 → metaobjects-0.11.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: metaobjects
3
- Version: 0.11.0
3
+ Version: 0.11.1
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.11.0"
3
+ version = "0.11.1"
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"
@@ -109,7 +109,10 @@ def _field_line(field: MetaField, imports: set[str], config: GenConfig) -> tuple
109
109
  pt = py_type_for(field)
110
110
  imports.update(pt.imports)
111
111
  type_expr = pt.expr
112
- if field.sub_type == fc.FIELD_SUBTYPE_OBJECT:
112
+ if field.sub_type in (fc.FIELD_SUBTYPE_OBJECT, fc.FIELD_SUBTYPE_MAP):
113
+ # A field.object (-> VO) and a field.map with @objectRef (-> dict[str, VO])
114
+ # both reference a value-object by name; import it so the annotation
115
+ # py_type_for emitted resolves.
113
116
  ref = field.attrs().get(fc.FIELD_ATTR_OBJECT_REF)
114
117
  if ref:
115
118
  # @objectRef is FQN-expanded at load time; the generated VOs live
@@ -65,6 +65,20 @@ def py_type_for(field: MetaField) -> PyType:
65
65
  constrained, Pydantic runtime-validated) rather than bare ``str``; an enum array
66
66
  becomes ``list[Literal[...]]``. An enum WITHOUT declared values falls back to
67
67
  ``str``."""
68
+ if field.sub_type == fc.FIELD_SUBTYPE_MAP:
69
+ # field.map → dict[str, V]. Keys are always strings; V is a value-object
70
+ # (@objectRef → bare class name) or a scalar (@valueType, defaulting to
71
+ # str). A map is stored as a single jsonb/object column and is NEVER
72
+ # wrapped in list[...] (isArray does not apply), so return directly.
73
+ ref = field.attrs().get(fc.FIELD_ATTR_OBJECT_REF)
74
+ if ref:
75
+ # @objectRef is expanded to a package-qualified FQN at load time; the
76
+ # emitted VOs live flat in one generated package, so type by the bare
77
+ # class name (mirrors the field.object branch below).
78
+ return PyType(f"dict[str, {str(ref).split('::')[-1]}]")
79
+ value_type = field.attrs().get(fc.FIELD_ATTR_VALUE_TYPE)
80
+ value = _SCALAR.get(str(value_type), PyType("str")) if value_type else PyType("str")
81
+ return PyType(f"dict[str, {value.expr}]", value.imports)
68
82
  if field.sub_type == fc.FIELD_SUBTYPE_OBJECT:
69
83
  ref = field.attrs().get(fc.FIELD_ATTR_OBJECT_REF)
70
84
  # @objectRef is expanded to a package-qualified FQN at load time
@@ -26,6 +26,7 @@ from .meta.core.field.field_constants import (
26
26
  FIELD_ATTR_SCALE,
27
27
  FIELD_ATTR_STORAGE,
28
28
  FIELD_ATTR_UNIQUE,
29
+ FIELD_ATTR_VALUE_TYPE,
29
30
  FIELD_ATTR_VALUES,
30
31
  FIELD_SUBTYPE_ENUM,
31
32
  STORAGE_VALUES,
@@ -335,6 +336,18 @@ for _def in core_provider._defs: # noqa: SLF001 (provider build-time enrichment
335
336
  )
336
337
  break
337
338
 
339
+ # field.map carries the @valueType attr (scalar value subtype) IN ADDITION to the
340
+ # common field attrs (@objectRef is already common). The bulk loop registered
341
+ # field.map with the common attrs; append @valueType to that definition (mirrors
342
+ # TS, where field.map's attr set = commonFieldAttrs + @valueType + @objectRef).
343
+ # The exactly-one-of @valueType/@objectRef rule is enforced by validation_passes.
344
+ for _def in core_provider._defs: # noqa: SLF001 (provider build-time enrichment)
345
+ if _def.type == TYPE_FIELD and _def.sub_type == fc.FIELD_SUBTYPE_MAP:
346
+ _def.attrs.append(
347
+ AttrSchema(name=FIELD_ATTR_VALUE_TYPE, value_type=ATTR_SUBTYPE_STRING, required=False)
348
+ )
349
+ break
350
+
338
351
  # field.enum — dedicated registration with required @values attr.
339
352
  # Inherits every common field attr (column / required / unique / default /
340
353
  # maxLength / filterable / sortable / etc.) so the D2 type-coercion guard
@@ -22,18 +22,23 @@ from ..meta.core.field.field_constants import (
22
22
  FIELD_ATTR_DEFAULT,
23
23
  FIELD_ATTR_OBJECT_REF,
24
24
  FIELD_ATTR_STORAGE,
25
+ FIELD_ATTR_VALUE_TYPE,
25
26
  FIELD_ATTR_VALUES,
26
27
  FIELD_SUBTYPE_BOOLEAN,
27
28
  FIELD_SUBTYPE_CURRENCY,
29
+ FIELD_SUBTYPE_DATE,
28
30
  FIELD_SUBTYPE_DECIMAL,
29
31
  FIELD_SUBTYPE_DOUBLE,
30
32
  FIELD_SUBTYPE_ENUM,
31
33
  FIELD_SUBTYPE_FLOAT,
32
34
  FIELD_SUBTYPE_INT,
33
35
  FIELD_SUBTYPE_LONG,
36
+ FIELD_SUBTYPE_MAP,
34
37
  FIELD_SUBTYPE_OBJECT,
35
38
  FIELD_SUBTYPE_STRING,
39
+ FIELD_SUBTYPE_TIME,
36
40
  FIELD_SUBTYPE_TIMESTAMP,
41
+ FIELD_SUBTYPE_UUID,
37
42
  )
38
43
  from ..meta.persistence.db.db_constants import (
39
44
  DB_COLUMN_TYPE_JSONB,
@@ -156,6 +161,9 @@ def run_validations(
156
161
  # FR-015 — source.rdb @parameterRef typed-input rules.
157
162
  validate_source_parameter_ref(root, errors)
158
163
  _validate_field_object_storage(root, errors)
164
+ # field.map — exactly one of @valueType (scalar) or @objectRef (VO), and
165
+ # @valueType (when set) must name a known scalar subtype.
166
+ _validate_field_map(root, errors)
159
167
  _validate_templates(root, errors)
160
168
  _validate_subtype_rules(root, errors, warnings)
161
169
  _validate_max_occurs(root, registry, errors)
@@ -1527,6 +1535,72 @@ def _validate_field_object_storage(root: MetaData, errors: list[MetaError]) -> N
1527
1535
  ))
1528
1536
 
1529
1537
 
1538
+ # ---------------------------------------------------------------------------
1539
+ # Pass: field.map value-type validation
1540
+ #
1541
+ # A field.map is an open-keyed map (dict[str, V] / Record<string,V>) stored in a
1542
+ # single jsonb column. Keys are always strings. The value type is set by EXACTLY
1543
+ # ONE of @valueType (a scalar value subtype) or @objectRef (a value-object). This
1544
+ # pass enforces that exactly-one-of rule and that @valueType (when set) names a
1545
+ # known scalar subtype. Cross-port parity: TS validateFieldMap, Java
1546
+ # validateFieldMap, C# ValidateFieldMap.
1547
+ # ---------------------------------------------------------------------------
1548
+
1549
+ # Scalar value subtypes legal as a field.map @valueType (mirrors the TS
1550
+ # _MAP_SCALAR_VALUE_SUBTYPES set).
1551
+ _MAP_SCALAR_VALUE_SUBTYPES = frozenset({
1552
+ FIELD_SUBTYPE_STRING,
1553
+ FIELD_SUBTYPE_INT,
1554
+ FIELD_SUBTYPE_LONG,
1555
+ FIELD_SUBTYPE_DOUBLE,
1556
+ FIELD_SUBTYPE_FLOAT,
1557
+ FIELD_SUBTYPE_DECIMAL,
1558
+ FIELD_SUBTYPE_BOOLEAN,
1559
+ FIELD_SUBTYPE_DATE,
1560
+ FIELD_SUBTYPE_TIME,
1561
+ FIELD_SUBTYPE_TIMESTAMP,
1562
+ FIELD_SUBTYPE_UUID,
1563
+ })
1564
+
1565
+
1566
+ def _validate_field_map(root: MetaData, errors: list[MetaError]) -> None:
1567
+ for obj in (c for c in root.own_children() if c.type == TYPE_OBJECT):
1568
+ for field in (c for c in obj.own_children() if c.type == TYPE_FIELD):
1569
+ if field.sub_type != FIELD_SUBTYPE_MAP:
1570
+ continue
1571
+
1572
+ value_type = field.attr(FIELD_ATTR_VALUE_TYPE)
1573
+ has_value_type = isinstance(value_type, str) and bool(value_type)
1574
+ object_ref = field.attr(FIELD_ATTR_OBJECT_REF)
1575
+ has_object_ref = isinstance(object_ref, str) and bool(object_ref)
1576
+
1577
+ if has_value_type == has_object_ref:
1578
+ which = "both are set" if has_value_type else "neither is set"
1579
+ errors.append(MetaError(
1580
+ code=ErrorCode.ERR_BAD_ATTR_VALUE,
1581
+ message=(
1582
+ f'field.map "{obj.name}.{field.name}" must set exactly one of '
1583
+ f"@valueType (a scalar value subtype) or @objectRef (a "
1584
+ f"value-object); {which}"
1585
+ ),
1586
+ envelope=field.source,
1587
+ ))
1588
+ continue
1589
+
1590
+ if has_value_type and value_type not in _MAP_SCALAR_VALUE_SUBTYPES:
1591
+ errors.append(MetaError(
1592
+ code=ErrorCode.ERR_BAD_ATTR_VALUE,
1593
+ message=(
1594
+ f'field.map "{obj.name}.{field.name}" has @valueType '
1595
+ f'"{value_type}" which is not a scalar value subtype '
1596
+ f"(string/int/long/double/float/decimal/boolean/date/time/"
1597
+ f"timestamp/uuid). For a value-object-valued map use @objectRef "
1598
+ f"instead."
1599
+ ),
1600
+ envelope=field.source,
1601
+ ))
1602
+
1603
+
1530
1604
  # ---------------------------------------------------------------------------
1531
1605
  # Pass: template.* validation (FR-004)
1532
1606
  # ---------------------------------------------------------------------------
@@ -12,6 +12,10 @@ FIELD_SUBTYPE_TIMESTAMP = "timestamp"
12
12
  FIELD_SUBTYPE_TIME = "time"
13
13
  FIELD_SUBTYPE_DECIMAL = "decimal"
14
14
  FIELD_SUBTYPE_OBJECT = "object"
15
+ # An open-keyed map (dict[str, V] / Record<string,V>) stored in a single jsonb
16
+ # column. Keys are always strings; the value type is set by @valueType (a scalar
17
+ # field subtype) or @objectRef (a value-object). Mirrors TS FIELD_SUBTYPE_MAP.
18
+ FIELD_SUBTYPE_MAP = "map"
15
19
  FIELD_SUBTYPE_CURRENCY = "currency"
16
20
  FIELD_SUBTYPE_ENUM = "enum"
17
21
  # R6 Plan 2a — field.uuid is a logical identity scalar (ADR-0013). String-backed
@@ -33,6 +37,7 @@ FIELD_SUBTYPES = (
33
37
  FIELD_SUBTYPE_TIME,
34
38
  FIELD_SUBTYPE_DECIMAL,
35
39
  FIELD_SUBTYPE_OBJECT,
40
+ FIELD_SUBTYPE_MAP,
36
41
  FIELD_SUBTYPE_CURRENCY,
37
42
  FIELD_SUBTYPE_UUID,
38
43
  # Note: FIELD_SUBTYPE_ENUM is intentionally excluded here; it is registered
@@ -58,6 +63,10 @@ FIELD_ATTR_SORTABLE = "sortable"
58
63
  FIELD_ATTR_SORTABLE_DEFAULT_ORDER = "sortableDefaultOrder"
59
64
  FIELD_ATTR_AUTO_SET = "autoSet"
60
65
  FIELD_ATTR_OBJECT_REF = "objectRef"
66
+ # @valueType — scalar value subtype of a field.map (open-keyed map). Mutually
67
+ # exclusive with @objectRef (which sets a value-object value type); exactly one of
68
+ # the two must be set. Keys are always strings. Mirrors TS FIELD_ATTR_VALUE_TYPE.
69
+ FIELD_ATTR_VALUE_TYPE = "valueType"
61
70
  FIELD_ATTR_VALUES = "values"
62
71
  # FR-010 field-teaching attrs (any field; drive the output-format prompt fragment).
63
72
  # Never carried in comments.
@@ -17,6 +17,9 @@ _FIELD_DATA_TYPE = {
17
17
  fc.FIELD_SUBTYPE_TIME: DataType.DATE,
18
18
  fc.FIELD_SUBTYPE_DECIMAL: DataType.DECIMAL,
19
19
  fc.FIELD_SUBTYPE_OBJECT: DataType.OBJECT,
20
+ # field.map is the map analog of field.object — an open-keyed map stored as a
21
+ # single jsonb/object column. Same logical data type as field.object.
22
+ fc.FIELD_SUBTYPE_MAP: DataType.OBJECT,
20
23
  fc.FIELD_SUBTYPE_CURRENCY: DataType.LONG,
21
24
  fc.FIELD_SUBTYPE_ENUM: DataType.STRING,
22
25
  # R6 Plan 2a — field.uuid is string-backed on the wire; the native uuid.UUID
@@ -105,6 +105,18 @@
105
105
  { "type": "attr", "subType": "string", "name": "objectRef", "min": 0, "max": 1, "description": "Name (or FQN) of the target object an object-typed field nests — drives nested-object (de)serialization." }
106
106
  ]
107
107
  },
108
+ {
109
+ "type": "field",
110
+ "subType": "map",
111
+ "dataType": "object",
112
+ "extendsBase": true,
113
+ "description": "An open-keyed map (Record<string,V> / dict[str,V]) stored in a single jsonb column. Keys are always strings (the JSON object constraint); the value type is set by @valueType (a scalar field subtype) or @objectRef (a value-object).",
114
+ "rules": "Keys are always strings. Set exactly one of @valueType (a scalar value subtype: string/int/long/double/float/decimal/boolean/date/time/timestamp/uuid) or @objectRef (a value-object name or FQN). Stored as a single jsonb column holding the JSON object — never a native array; isArray does not apply.",
115
+ "children": [
116
+ { "type": "attr", "subType": "string", "name": "valueType", "min": 0, "max": 1, "description": "Scalar value subtype for a scalar-valued map (string/int/long/double/float/decimal/boolean/date/time/timestamp/uuid). Mutually exclusive with @objectRef; exactly one of the two must be set." },
117
+ { "type": "attr", "subType": "string", "name": "objectRef", "min": 0, "max": 1, "description": "Name (or FQN) of the value-object for a value-object-valued map. Mutually exclusive with @valueType; exactly one of the two must be set." }
118
+ ]
119
+ },
108
120
  {
109
121
  "type": "field",
110
122
  "subType": "currency",
@@ -5,11 +5,19 @@ from metaobjects.meta.core.field import field_constants as fc
5
5
  from metaobjects.shared.base_types import TYPE_FIELD
6
6
 
7
7
 
8
- def _field(sub_type: str, *, is_array: bool = False, object_ref: str | None = None) -> MetaField:
8
+ def _field(
9
+ sub_type: str,
10
+ *,
11
+ is_array: bool = False,
12
+ object_ref: str | None = None,
13
+ value_type: str | None = None,
14
+ ) -> MetaField:
9
15
  f = MetaField(TYPE_FIELD, sub_type, "x")
10
16
  f.is_array = is_array
11
17
  if object_ref is not None:
12
18
  f.set_attr(fc.FIELD_ATTR_OBJECT_REF, object_ref)
19
+ if value_type is not None:
20
+ f.set_attr(fc.FIELD_ATTR_VALUE_TYPE, value_type)
13
21
  return f
14
22
 
15
23
 
@@ -60,6 +68,32 @@ def test_uuid_binds_native_uuid_with_import() -> None:
60
68
  assert "import uuid" in t.imports
61
69
 
62
70
 
71
+ def test_map_with_scalar_value_type() -> None:
72
+ # field.map → dict[str, V]; V is the scalar Python type for @valueType.
73
+ assert py_type_for(_field(fc.FIELD_SUBTYPE_MAP, value_type="string")).expr == "dict[str, str]"
74
+ assert py_type_for(_field(fc.FIELD_SUBTYPE_MAP, value_type="int")).expr == "dict[str, int]"
75
+ # A scalar value type that carries an import propagates it to the map type.
76
+ dec = py_type_for(_field(fc.FIELD_SUBTYPE_MAP, value_type="decimal"))
77
+ assert dec.expr == "dict[str, Decimal]" and "from decimal import Decimal" in dec.imports
78
+
79
+
80
+ def test_map_with_object_ref() -> None:
81
+ # field.map with @objectRef → dict[str, <VO bare name>] (FQN folded to base).
82
+ assert py_type_for(_field(fc.FIELD_SUBTYPE_MAP, object_ref="SomeVO")).expr == "dict[str, SomeVO]"
83
+ assert (
84
+ py_type_for(_field(fc.FIELD_SUBTYPE_MAP, object_ref="acme::pkg::SomeVO")).expr
85
+ == "dict[str, SomeVO]"
86
+ )
87
+
88
+
89
+ def test_map_is_never_wrapped_in_list() -> None:
90
+ # isArray does not apply to a map — it is a single jsonb/object column.
91
+ assert (
92
+ py_type_for(_field(fc.FIELD_SUBTYPE_MAP, value_type="string", is_array=True)).expr
93
+ == "dict[str, str]"
94
+ )
95
+
96
+
63
97
  def test_dbcolumntype_uuid_string_stays_str() -> None:
64
98
  # R6 Plan 2b — @dbColumnType:uuid only changes the DB column type; the native
65
99
  # binding of a field.string is unchanged (stays a Python str).
@@ -0,0 +1,92 @@
1
+ """Unit tests for the field.map value-type validation pass.
2
+
3
+ A ``field.map`` is an open-keyed map (``dict[str, V]`` / ``Record<string,V>``)
4
+ stored in a single jsonb column. Keys are always strings; the value type is set
5
+ by EXACTLY ONE of ``@valueType`` (a scalar value subtype) or ``@objectRef`` (a
6
+ value-object). This suite exercises the loader's ``_validate_field_map`` pass —
7
+ cross-port parity with the TS ``validateFieldMap``.
8
+ """
9
+ from __future__ import annotations
10
+
11
+ import json
12
+
13
+ from metaobjects import MetaDataLoader
14
+ from metaobjects.errors import ErrorCode
15
+
16
+
17
+ def _load(*map_attrs: dict[str, object]):
18
+ """Load a root with one VO (``Score``) and an entity carrying one field.map
19
+ per supplied attr dict. Returns the LoadResult."""
20
+ map_fields = [
21
+ {"field.map": {"name": f"m{i}", **attrs}} for i, attrs in enumerate(map_attrs)
22
+ ]
23
+ doc = {
24
+ "metadata.root": {
25
+ "package": "acme",
26
+ "children": [
27
+ {
28
+ "object.value": {
29
+ "name": "Score",
30
+ "children": [{"field.int": {"name": "points"}}],
31
+ }
32
+ },
33
+ {
34
+ "object.entity": {
35
+ "name": "Player",
36
+ "children": [
37
+ {"field.long": {"name": "id"}},
38
+ *map_fields,
39
+ {"identity.primary": {"@fields": "id"}},
40
+ ],
41
+ }
42
+ },
43
+ ],
44
+ }
45
+ }
46
+ return MetaDataLoader.from_string(json.dumps(doc))
47
+
48
+
49
+ def _bad_attr_errors(result) -> list[str]:
50
+ return [e.message for e in result.errors if e.code is ErrorCode.ERR_BAD_ATTR_VALUE]
51
+
52
+
53
+ def test_value_type_only_loads_clean() -> None:
54
+ result = _load({"@valueType": "string"})
55
+ assert not result.errors, [str(e) for e in result.errors]
56
+
57
+
58
+ def test_object_ref_only_loads_clean() -> None:
59
+ result = _load({"@objectRef": "Score"})
60
+ assert not result.errors, [str(e) for e in result.errors]
61
+
62
+
63
+ def test_neither_value_type_nor_object_ref_is_an_error() -> None:
64
+ result = _load({})
65
+ errs = _bad_attr_errors(result)
66
+ assert errs, "field.map with neither @valueType nor @objectRef must error"
67
+ assert any("neither is set" in m for m in errs)
68
+
69
+
70
+ def test_both_value_type_and_object_ref_is_an_error() -> None:
71
+ result = _load({"@valueType": "string", "@objectRef": "Score"})
72
+ errs = _bad_attr_errors(result)
73
+ assert errs, "field.map with both @valueType and @objectRef must error"
74
+ assert any("both are set" in m for m in errs)
75
+
76
+
77
+ def test_non_scalar_value_type_is_an_error() -> None:
78
+ # "object" is a field subtype but NOT a scalar value subtype — a VO-valued
79
+ # map must use @objectRef instead.
80
+ result = _load({"@valueType": "object"})
81
+ errs = _bad_attr_errors(result)
82
+ assert errs, "field.map with a non-scalar @valueType must error"
83
+ assert any("not a scalar value subtype" in m for m in errs)
84
+
85
+
86
+ def test_every_scalar_value_type_loads_clean() -> None:
87
+ scalars = [
88
+ "string", "int", "long", "double", "float", "decimal",
89
+ "boolean", "date", "time", "timestamp", "uuid",
90
+ ]
91
+ result = _load(*({"@valueType": s} for s in scalars))
92
+ assert not result.errors, [str(e) for e in result.errors]
File without changes
File without changes
File without changes