metaobjects 0.11.1__tar.gz → 0.12.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 (390) hide show
  1. metaobjects-0.12.1/.gitignore +6 -0
  2. {metaobjects-0.11.1 → metaobjects-0.12.1}/PKG-INFO +13 -1
  3. {metaobjects-0.11.1 → metaobjects-0.12.1}/README.md +12 -0
  4. metaobjects-0.12.1/hatch_build.py +15 -0
  5. {metaobjects-0.11.1 → metaobjects-0.12.1}/pyproject.toml +1 -1
  6. metaobjects-0.12.1/src/metaobjects/agent_context/__init__.py +24 -0
  7. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/agent_context/scaffold.py +10 -99
  8. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/cli.py +46 -132
  9. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/generators/entity_model.py +34 -2
  10. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/loader/validation_passes.py +641 -59
  11. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/persistence/db/db_constants.py +6 -0
  12. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/spec_metamodel/db.json +1 -1
  13. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/spec_metamodel/field.json +20 -7
  14. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/spec_metamodel/identity.json +3 -0
  15. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/spec_metamodel/object.json +3 -0
  16. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/spec_metamodel/origin.json +3 -0
  17. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/spec_metamodel/relationship.json +3 -0
  18. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/spec_metamodel/source.json +1 -0
  19. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/spec_metamodel/template.json +2 -0
  20. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/spec_metamodel/validator.json +10 -1
  21. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_cli.py +24 -0
  22. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_entity_model.py +54 -0
  23. metaobjects-0.12.1/tests/codegen/test_projection_compile.py +55 -0
  24. metaobjects-0.12.1/tests/conformance/conformance-expected-failures.json +6 -0
  25. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_agent_context_staleness.py +8 -21
  26. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_fr016_source_name_and_kind_aliases.py +22 -14
  27. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_validation_origin_paths.py +15 -6
  28. {metaobjects-0.11.1 → metaobjects-0.12.1}/uv.lock +1 -1
  29. metaobjects-0.11.1/.gitignore +0 -8
  30. metaobjects-0.11.1/hatch_build.py +0 -39
  31. metaobjects-0.11.1/src/metaobjects/agent_context/__init__.py +0 -55
  32. metaobjects-0.11.1/src/metaobjects/agent_context/_content/README.md +0 -14
  33. metaobjects-0.11.1/src/metaobjects/agent_context/_content/servers/csharp.meta.json +0 -5
  34. metaobjects-0.11.1/src/metaobjects/agent_context/_content/servers/java.meta.json +0 -5
  35. metaobjects-0.11.1/src/metaobjects/agent_context/_content/servers/kotlin.meta.json +0 -5
  36. metaobjects-0.11.1/src/metaobjects/agent_context/_content/servers/python.meta.json +0 -5
  37. metaobjects-0.11.1/src/metaobjects/agent_context/_content/servers/typescript.meta.json +0 -5
  38. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-authoring/SKILL.md +0 -379
  39. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-codegen/SKILL.md +0 -99
  40. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-codegen/references/csharp.md +0 -87
  41. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-codegen/references/java.md +0 -94
  42. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-codegen/references/kotlin.md +0 -110
  43. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-codegen/references/typescript.md +0 -165
  44. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/SKILL.md +0 -189
  45. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/references/csharp.md +0 -110
  46. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/references/java.md +0 -108
  47. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/references/kotlin.md +0 -130
  48. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/references/python.md +0 -116
  49. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-prompts/references/typescript.md +0 -150
  50. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/SKILL.md +0 -130
  51. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/references/java.md +0 -96
  52. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/references/kotlin.md +0 -99
  53. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/references/react.md +0 -86
  54. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/references/tanstack.md +0 -119
  55. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-runtime-ui/references/typescript.md +0 -92
  56. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-verify/SKILL.md +0 -107
  57. metaobjects-0.11.1/src/metaobjects/agent_context/_content/skills/metaobjects-verify/references/migration.md +0 -105
  58. metaobjects-0.11.1/src/metaobjects/agent_context/_content/templates/always-on.md.mustache +0 -27
  59. metaobjects-0.11.1/src/metaobjects/agent_context/assemble.py +0 -133
  60. metaobjects-0.11.1/src/metaobjects/agent_context/content_root.py +0 -54
  61. metaobjects-0.11.1/src/metaobjects/agent_context/types.py +0 -44
  62. metaobjects-0.11.1/tests/conformance/conformance-expected-failures.json +0 -25
  63. metaobjects-0.11.1/tests/conformance/test_agent_context_conformance.py +0 -79
  64. {metaobjects-0.11.1 → metaobjects-0.12.1}/LICENSE +0 -0
  65. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/__init__.py +0 -0
  66. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/apidocs/__init__.py +0 -0
  67. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/apidocs/api_model.py +0 -0
  68. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/apidocs/builder.py +0 -0
  69. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/apidocs/naming.py +0 -0
  70. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/apidocs/paths.py +0 -0
  71. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/apidocs/renderer.py +0 -0
  72. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/attr_class_map.py +0 -0
  73. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/KNOWN_GAPS.md +0 -0
  74. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/__init__.py +0 -0
  75. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/config.py +0 -0
  76. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/constants.py +0 -0
  77. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/extract_delegate_emitter.py +0 -0
  78. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/extract_schema_emitter.py +0 -0
  79. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/format.py +0 -0
  80. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/fr010_field_mapping.py +0 -0
  81. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/generator.py +0 -0
  82. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/generator_registry.py +0 -0
  83. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/generators/__init__.py +0 -0
  84. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/generators/extractor_generator.py +0 -0
  85. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/generators/filter_allowlist_generator.py +0 -0
  86. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/generators/fr019_shared_enum.py +0 -0
  87. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/generators/m2m_codegen.py +0 -0
  88. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/generators/output_parser_generator.py +0 -0
  89. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/generators/output_prompt_generator.py +0 -0
  90. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/generators/payload_vo_generator.py +0 -0
  91. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/generators/render_helper_generator.py +0 -0
  92. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/generators/router_generator.py +0 -0
  93. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/generators/template_generator.py +0 -0
  94. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/generators/tph_plan.py +0 -0
  95. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/generators/trace_helper_generator.py +0 -0
  96. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/instance_artifacts.py +0 -0
  97. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/output_format_spec_emitter.py +0 -0
  98. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/overwrite_policy.py +0 -0
  99. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/runner.py +0 -0
  100. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/runtime/__init__.py +0 -0
  101. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/runtime/filter_parser.py +0 -0
  102. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/codegen/type_map.py +0 -0
  103. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/core_types.py +0 -0
  104. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/datatype.py +0 -0
  105. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/documentation/__init__.py +0 -0
  106. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/documentation/doc_constants.py +0 -0
  107. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/documentation/doc_provider.py +0 -0
  108. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/documentation/doc_schema.py +0 -0
  109. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/errors.py +0 -0
  110. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/loader/__init__.py +0 -0
  111. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/loader/merge.py +0 -0
  112. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/loader/meta_data_loader.py +0 -0
  113. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/loader/registered_validation.py +0 -0
  114. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/loader/sources/__init__.py +0 -0
  115. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/loader/sources/directory_source.py +0 -0
  116. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/loader/sources/file_source.py +0 -0
  117. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/loader/sources/meta_data_source.py +0 -0
  118. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/loader/sources/uri_source.py +0 -0
  119. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/loader/validate_discriminator.py +0 -0
  120. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/loader/validate_field_readonly.py +0 -0
  121. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/loader/validate_source_parameter_ref.py +0 -0
  122. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/loader/validate_source_physical_names.py +0 -0
  123. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/__init__.py +0 -0
  124. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/__init__.py +0 -0
  125. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/attr/__init__.py +0 -0
  126. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/attr/attr_constants.py +0 -0
  127. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/attr/meta_attr.py +0 -0
  128. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/field/__init__.py +0 -0
  129. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/field/field_constants.py +0 -0
  130. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/field/meta_field.py +0 -0
  131. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/identity/__init__.py +0 -0
  132. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/identity/identity_constants.py +0 -0
  133. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/identity/meta_identity.py +0 -0
  134. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/object/__init__.py +0 -0
  135. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/object/meta_object.py +0 -0
  136. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/object/meta_object_aware.py +0 -0
  137. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/object/object_class_registry.py +0 -0
  138. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/object/object_constants.py +0 -0
  139. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/object/object_extract.py +0 -0
  140. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/object/value_object.py +0 -0
  141. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/relationship/__init__.py +0 -0
  142. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/relationship/derive_m2m_fields.py +0 -0
  143. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/relationship/meta_relationship.py +0 -0
  144. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/relationship/relationship_constants.py +0 -0
  145. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/validator/__init__.py +0 -0
  146. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/core/validator/validator_constants.py +0 -0
  147. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/meta_data.py +0 -0
  148. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/meta_root.py +0 -0
  149. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/persistence/__init__.py +0 -0
  150. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/persistence/db/__init__.py +0 -0
  151. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/persistence/db/db_provider.py +0 -0
  152. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/persistence/origin/__init__.py +0 -0
  153. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/persistence/origin/meta_origin.py +0 -0
  154. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/persistence/origin/origin_constants.py +0 -0
  155. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/persistence/source/__init__.py +0 -0
  156. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/persistence/source/meta_source.py +0 -0
  157. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/persistence/source/source_constants.py +0 -0
  158. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/presentation/__init__.py +0 -0
  159. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/presentation/layout/__init__.py +0 -0
  160. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/presentation/layout/layout_constants.py +0 -0
  161. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/presentation/layout/meta_layout.py +0 -0
  162. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/presentation/ui/__init__.py +0 -0
  163. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/presentation/ui/ui_provider.py +0 -0
  164. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/presentation/view/__init__.py +0 -0
  165. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/presentation/view/meta_view.py +0 -0
  166. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/presentation/view/view_constants.py +0 -0
  167. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/provider_extends.py +0 -0
  168. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/template/__init__.py +0 -0
  169. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/template/meta_template.py +0 -0
  170. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/template/prompt_provider.py +0 -0
  171. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/meta/template/template_constants.py +0 -0
  172. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/naming_refs.py +0 -0
  173. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/parser.py +0 -0
  174. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/parser_yaml.py +0 -0
  175. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/provider.py +0 -0
  176. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/py.typed +0 -0
  177. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/registry.py +0 -0
  178. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/registry_manifest.py +0 -0
  179. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/__init__.py +0 -0
  180. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/email_document.py +0 -0
  181. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/escapers.py +0 -0
  182. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/extract/KNOWN_GAPS.md +0 -0
  183. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/extract/__init__.py +0 -0
  184. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/extract/coerce.py +0 -0
  185. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/extract/extract.py +0 -0
  186. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/extract/extract_map.py +0 -0
  187. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/extract/json_forgiving_reader.py +0 -0
  188. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/extract/locate.py +0 -0
  189. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/extract/normalize.py +0 -0
  190. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/extract/strip.py +0 -0
  191. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/extract/types.py +0 -0
  192. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/extract/xml_forgiving_reader.py +0 -0
  193. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/filesystem_provider.py +0 -0
  194. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/prompt/__init__.py +0 -0
  195. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/prompt/output_format_renderer.py +0 -0
  196. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/prompt/output_format_spec.py +0 -0
  197. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/prompt/prompt_field.py +0 -0
  198. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/prompt/prompt_overrides.py +0 -0
  199. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/prompt/prompt_style.py +0 -0
  200. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/renderer.py +0 -0
  201. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/render/verify.py +0 -0
  202. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/runtime/__init__.py +0 -0
  203. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/runtime/llm_recorder.py +0 -0
  204. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/runtime/n2m_resolver.py +0 -0
  205. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/runtime/object_manager.py +0 -0
  206. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/runtime/tph.py +0 -0
  207. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/serializer_json.py +0 -0
  208. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/shared/__init__.py +0 -0
  209. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/shared/base_types.py +0 -0
  210. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/shared/separators.py +0 -0
  211. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/shared/structural.py +0 -0
  212. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/source/__init__.py +0 -0
  213. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/source/error_source.py +0 -0
  214. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/source/json_path.py +0 -0
  215. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/source/semantic_diff.py +0 -0
  216. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/source/yaml_positions.py +0 -0
  217. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/spec_metamodel/__init__.py +0 -0
  218. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/spec_metamodel/attr.json +0 -0
  219. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/spec_metamodel/documentation.json +0 -0
  220. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/spec_metamodel/layout.json +0 -0
  221. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/spec_metamodel/prompt.json +0 -0
  222. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/spec_metamodel/ui.json +0 -0
  223. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/spec_metamodel/view.json +0 -0
  224. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/super_resolve.py +0 -0
  225. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/validation_types.py +0 -0
  226. {metaobjects-0.11.1 → metaobjects-0.12.1}/src/metaobjects/yaml_desugar.py +0 -0
  227. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/__init__.py +0 -0
  228. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/__init__.py +0 -0
  229. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/golden/extends/expected/BaseEntity.py +0 -0
  230. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/golden/extends/expected/Program.py +0 -0
  231. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/golden/extends/meta.json +0 -0
  232. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/golden/nested-array/expected/AuthorBrief.py +0 -0
  233. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/golden/nested-array/expected/PostBrief.py +0 -0
  234. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/golden/nested-array/meta.json +0 -0
  235. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/golden/scalars/expected/Metric.py +0 -0
  236. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/golden/scalars/expected/Report.py +0 -0
  237. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/golden/scalars/meta.json +0 -0
  238. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/golden/vanilla/expected/Subscriber.py +0 -0
  239. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/golden/vanilla/meta.json +0 -0
  240. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_abstract_conformance.py +0 -0
  241. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_api_docs_builder.py +0 -0
  242. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_api_docs_paths.py +0 -0
  243. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_cli_registry.py +0 -0
  244. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_cli_staleness_nudge.py +0 -0
  245. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_cli_verify_subverbs.py +0 -0
  246. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_constants_config.py +0 -0
  247. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_enum_conformance.py +0 -0
  248. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_extractor_generator.py +0 -0
  249. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_filter_allowlist_generator.py +0 -0
  250. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_format.py +0 -0
  251. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_fr010_output_codegen.py +0 -0
  252. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_fr019_shared_provided_conformance.py +0 -0
  253. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_generator.py +0 -0
  254. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_generator_extension_seams.py +0 -0
  255. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_golden.py +0 -0
  256. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_inherit_without_restate_gate.py +0 -0
  257. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_inheritance_conformance.py +0 -0
  258. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_instance_artifacts.py +0 -0
  259. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_m2m_codegen.py +0 -0
  260. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_output_parser_generator.py +0 -0
  261. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_overwrite_policy.py +0 -0
  262. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_payload_vo_generator.py +0 -0
  263. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_render_helper_conformance.py +0 -0
  264. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_render_helper_generator.py +0 -0
  265. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_router_generator.py +0 -0
  266. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_runner.py +0 -0
  267. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_template_generator.py +0 -0
  268. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_tph_codegen.py +0 -0
  269. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_trace_helper_generator.py +0 -0
  270. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_type_map.py +0 -0
  271. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/codegen/test_validation_conformance.py +0 -0
  272. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/__init__.py +0 -0
  273. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/capabilities.py +0 -0
  274. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/conformance_adapter.py +0 -0
  275. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/corpus.py +0 -0
  276. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/expected_failures.py +0 -0
  277. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/fixture_discovery.py +0 -0
  278. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/navigator.py +0 -0
  279. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/test_api_docs_cross_port_conformance.py +0 -0
  280. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/test_conformance.py +0 -0
  281. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/test_extract_conformance.py +0 -0
  282. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/test_extract_object_verdict.py +0 -0
  283. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/test_fr010_loader_attrs.py +0 -0
  284. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/test_fr011_attrs.py +0 -0
  285. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/test_generator_registry_conformance.py +0 -0
  286. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/test_object_model_conformance.py +0 -0
  287. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/test_registry_conformance.py +0 -0
  288. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/test_runner_hardfail.py +0 -0
  289. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/test_spec_metamodel_embed.py +0 -0
  290. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/test_strict_attr_load.py +0 -0
  291. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/test_template_generator_conformance.py +0 -0
  292. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/test_yaml_conformance.py +0 -0
  293. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/conformance/yaml-conformance-expected-failures.json +0 -0
  294. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/__init__.py +0 -0
  295. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/api_contract_assertions.py +0 -0
  296. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/api_contract_m2m_server.py +0 -0
  297. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/api_contract_server.py +0 -0
  298. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/generated_m2m_app.py +0 -0
  299. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/generated_router_app.py +0 -0
  300. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/generated_tph_app.py +0 -0
  301. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/meta_ai_trace.yaml +0 -0
  302. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/normalization.py +0 -0
  303. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/postgres_container.py +0 -0
  304. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/query_runner.py +0 -0
  305. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/scenarios.py +0 -0
  306. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/test_api_contract.py +0 -0
  307. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/test_api_contract_generated.py +0 -0
  308. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/test_api_contract_m2m.py +0 -0
  309. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/test_api_contract_m2m_generated.py +0 -0
  310. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/test_api_contract_tph_generated.py +0 -0
  311. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/test_llm_call_trace.py +0 -0
  312. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/test_normalization.py +0 -0
  313. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/test_query_scenarios.py +0 -0
  314. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/integration/test_runtime_return_types.py +0 -0
  315. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/open_closed_proof_test.py +0 -0
  316. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/__init__.py +0 -0
  317. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/extract/__init__.py +0 -0
  318. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/extract/test_coerce.py +0 -0
  319. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/extract/test_extract.py +0 -0
  320. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/extract/test_extract_map.py +0 -0
  321. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/extract/test_json_forgiving_reader.py +0 -0
  322. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/extract/test_locate.py +0 -0
  323. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/extract/test_model.py +0 -0
  324. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/extract/test_normalize.py +0 -0
  325. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/extract/test_strip.py +0 -0
  326. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/extract/test_xml_forgiving_reader.py +0 -0
  327. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/prompt/__init__.py +0 -0
  328. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/prompt/test_output_format_renderer.py +0 -0
  329. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/test_email_document.py +0 -0
  330. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/test_filesystem_provider.py +0 -0
  331. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/test_output_format_renderer_nested.py +0 -0
  332. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/test_output_prompt_conformance.py +0 -0
  333. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/test_render_conformance.py +0 -0
  334. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/test_render_max_chars.py +0 -0
  335. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/test_verify.py +0 -0
  336. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/render/test_verify_conformance.py +0 -0
  337. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/source/__init__.py +0 -0
  338. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/source/test_fr5c_merge_attribution.py +0 -0
  339. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/source/test_fr5d_reference_resolution.py +0 -0
  340. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/source/test_fr5e_database_source_shape.py +0 -0
  341. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/source/test_json_path.py +0 -0
  342. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/source/test_semantic_diff.py +0 -0
  343. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/source/test_source_on_node.py +0 -0
  344. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/source/test_yaml_positions.py +0 -0
  345. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/test_api_docs_accuracy.py +0 -0
  346. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/__init__.py +0 -0
  347. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_capabilities.py +0 -0
  348. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_common_attrs.py +0 -0
  349. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_core_types.py +0 -0
  350. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_effective_package.py +0 -0
  351. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_errors.py +0 -0
  352. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_field_enum.py +0 -0
  353. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_field_map_validation.py +0 -0
  354. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_field_uuid_dbcolumntype.py +0 -0
  355. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_llm_recorder.py +0 -0
  356. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_loader.py +0 -0
  357. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_loader_bom.py +0 -0
  358. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_loader_class.py +0 -0
  359. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_merge.py +0 -0
  360. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_meta_attr.py +0 -0
  361. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_meta_data.py +0 -0
  362. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_meta_source.py +0 -0
  363. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_module_shortcuts.py +0 -0
  364. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_n2m_resolver.py +0 -0
  365. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_object_manager_uuid_coercion.py +0 -0
  366. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_one_primary_source.py +0 -0
  367. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_parser.py +0 -0
  368. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_parser_yaml.py +0 -0
  369. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_provider.py +0 -0
  370. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_provider_extension.py +0 -0
  371. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_registry.py +0 -0
  372. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_registry_completeness.py +0 -0
  373. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_registry_extend.py +0 -0
  374. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_registry_sealed.py +0 -0
  375. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_relationship_referential_actions.py +0 -0
  376. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_resolution_key.py +0 -0
  377. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_runtime_resolution_key_binding.py +0 -0
  378. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_serializer.py +0 -0
  379. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_shared_constants.py +0 -0
  380. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_smoke.py +0 -0
  381. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_sources.py +0 -0
  382. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_strict_child_placement.py +0 -0
  383. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_super_resolve.py +0 -0
  384. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_template_toolcall.py +0 -0
  385. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_template_wrong_subtype_attrs.py +0 -0
  386. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_validation_attr_schema.py +0 -0
  387. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_validation_filter_values.py +0 -0
  388. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_validation_sort_field.py +0 -0
  389. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_validation_warnings.py +0 -0
  390. {metaobjects-0.11.1 → metaobjects-0.12.1}/tests/unit/test_yaml_desugar.py +0 -0
@@ -0,0 +1,6 @@
1
+ .venv/
2
+ __pycache__/
3
+ *.pyc
4
+ .mypy_cache/
5
+ .pytest_cache/
6
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: metaobjects
3
- Version: 0.11.1
3
+ Version: 0.12.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
@@ -86,6 +86,18 @@ verify), `runtime` (SQLAlchemy-Core object manager), and `migrate`.
86
86
  ([ADR-0006](https://github.com/metaobjectsdev/metaobjects/blob/main/spec/decisions/ADR-0006-ai-first-yaml-authoring.md)).
87
87
  Desugared to canonical JSON at load time. A directory may mix both freely.
88
88
 
89
+ ## AI assistant context
90
+
91
+ To scaffold MetaObjects context files (`.metaobjects/AGENTS.md`, `.metaobjects/CLAUDE.md`, and
92
+ `.claude/skills/metaobjects-*/`) into your project so your AI assistant understands how to
93
+ author metadata and run codegen, use the Node `meta` CLI:
94
+
95
+ ```bash
96
+ npx meta agent-docs --server python
97
+ ```
98
+
99
+ (Running `metaobjects agent-docs` in the Python CLI prints this redirect and exits.)
100
+
89
101
  ## Links
90
102
 
91
103
  - Standard, docs, and the other four ports: <https://metaobjects.dev>
@@ -51,6 +51,18 @@ verify), `runtime` (SQLAlchemy-Core object manager), and `migrate`.
51
51
  ([ADR-0006](https://github.com/metaobjectsdev/metaobjects/blob/main/spec/decisions/ADR-0006-ai-first-yaml-authoring.md)).
52
52
  Desugared to canonical JSON at load time. A directory may mix both freely.
53
53
 
54
+ ## AI assistant context
55
+
56
+ To scaffold MetaObjects context files (`.metaobjects/AGENTS.md`, `.metaobjects/CLAUDE.md`, and
57
+ `.claude/skills/metaobjects-*/`) into your project so your AI assistant understands how to
58
+ author metadata and run codegen, use the Node `meta` CLI:
59
+
60
+ ```bash
61
+ npx meta agent-docs --server python
62
+ ```
63
+
64
+ (Running `metaobjects agent-docs` in the Python CLI prints this redirect and exits.)
65
+
54
66
  ## Links
55
67
 
56
68
  - Standard, docs, and the other four ports: <https://metaobjects.dev>
@@ -0,0 +1,15 @@
1
+ """Build hook — no-op.
2
+
3
+ The ``agent-context/`` content tree vendoring into ``_content/`` has been removed:
4
+ agent-context scaffolding is now owned by the Node ``meta agent-docs`` CLI. This
5
+ file is kept as a no-op to avoid breaking any build tooling that references it.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from hatchling.builders.hooks.plugin.interface import BuildHookInterface
11
+
12
+
13
+ class CustomBuildHook(BuildHookInterface):
14
+ def initialize(self, version: str, build_data: dict) -> None:
15
+ pass # Nothing to vendor — scaffolding moved to the Node meta CLI.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "metaobjects"
3
- version = "0.11.1"
3
+ version = "0.12.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"
@@ -0,0 +1,24 @@
1
+ """Agent-context staleness nudge — manifest reader for gen/verify.
2
+
3
+ The assembly path has moved to the Node ``meta agent-docs`` CLI. This package
4
+ now only exposes the staleness-nudge symbols (``agent_context_staleness``,
5
+ ``Manifest``, ``AGENT_CONTEXT_MANIFEST_PATH``, ``installed_metaobjects_version``)
6
+ used by ``gen``/``verify`` to detect when the copied-in agent context predates
7
+ the installed MetaObjects version.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from .scaffold import (
13
+ AGENT_CONTEXT_MANIFEST_PATH,
14
+ Manifest,
15
+ agent_context_staleness,
16
+ installed_metaobjects_version,
17
+ )
18
+
19
+ __all__ = [
20
+ "AGENT_CONTEXT_MANIFEST_PATH",
21
+ "Manifest",
22
+ "agent_context_staleness",
23
+ "installed_metaobjects_version",
24
+ ]
@@ -1,24 +1,18 @@
1
- """Scaffold planning + sidecar manifest for the agent-context writer.
2
-
3
- Port of ``server/typescript/packages/sdk/src/agent-context/scaffold.ts``. Pure:
4
- all filesystem access is via a ``read_current`` callback so the planning logic is
5
- testable without touching disk.
6
-
7
- A file is safe to overwrite iff it is absent, or its on-disk sha256 still equals
8
- the hash the prior manifest recorded (the user hasn't hand-edited it). A
9
- hand-edited file is preserved — the fresh contents go to ``<path>.new`` instead.
1
+ """Sidecar manifest + staleness nudge for the agent-context scaffolder.
2
+
3
+ The assembly path (assemble / plan_scaffold / ScaffoldDecision) has been removed —
4
+ that work is now owned by the Node ``meta agent-docs`` CLI. This module retains
5
+ only the staleness-nudge machinery (``agent_context_staleness``, ``Manifest``,
6
+ ``AGENT_CONTEXT_MANIFEST_PATH``, ``installed_metaobjects_version``) which is used
7
+ by ``gen``/``verify`` to detect when the scaffolded agent context predates the
8
+ installed MetaObjects version.
10
9
  """
11
10
 
12
11
  from __future__ import annotations
13
12
 
14
- import hashlib
15
- from collections.abc import Callable
16
- from dataclasses import dataclass, field
13
+ from dataclasses import dataclass
17
14
  from importlib.metadata import PackageNotFoundError, version as _pkg_version
18
15
 
19
- from .assemble import AssembledFile
20
- from .types import Stack
21
-
22
16
  #: Consumer-relative path of the sidecar manifest that tracks scaffolded files.
23
17
  AGENT_CONTEXT_MANIFEST_PATH = ".metaobjects/.agent-context.json"
24
18
 
@@ -82,89 +76,6 @@ class Manifest:
82
76
  )
83
77
 
84
78
 
85
- @dataclass
86
- class _Write:
87
- path: str
88
- contents: str
89
-
90
-
91
- @dataclass
92
- class _Conflict:
93
- path: str
94
- new_path: str
95
- contents: str
96
-
97
-
98
- @dataclass
99
- class ScaffoldDecision:
100
- """The outcome of planning a (re-)scaffold."""
101
-
102
- #: files to (over)write at their own path: new, or unmodified-since-last-scaffold.
103
- writes: list[_Write] = field(default_factory=list)
104
- #: hand-edited files: write the fresh contents to ``<path>.new``, leave the original.
105
- conflicts: list[_Conflict] = field(default_factory=list)
106
- #: the manifest to persist after writing.
107
- manifest: Manifest | None = None
108
- #: paths the prior manifest tracked that are no longer assembled — reported, never deleted.
109
- removed: list[str] = field(default_factory=list)
110
-
111
-
112
- def hash_contents(s: str) -> str:
113
- """sha256 hex of the UTF-8 bytes of ``s`` (matches the TS digest)."""
114
- return hashlib.sha256(s.encode("utf-8")).hexdigest()
115
-
116
-
117
- def plan_scaffold(
118
- stack: Stack,
119
- assembled: list[AssembledFile],
120
- prior: Manifest | None,
121
- read_current: Callable[[str], str | None],
122
- generated_by: str | None = None,
123
- ) -> ScaffoldDecision:
124
- """Decide what to write for a (re-)scaffold (pure; FS via ``read_current``).
125
-
126
- ``generated_by`` is the MetaObjects version doing the scaffold — stamped into
127
- the persisted manifest so a later ``gen``/``verify`` can detect staleness.
128
- """
129
- writes: list[_Write] = []
130
- conflicts: list[_Conflict] = []
131
- files: dict[str, str] = {}
132
-
133
- for f in assembled:
134
- files[f.path] = hash_contents(f.contents)
135
- current = read_current(f.path)
136
- if current is None:
137
- writes.append(_Write(path=f.path, contents=f.contents))
138
- continue
139
- prior_hash = prior.files.get(f.path) if prior else None
140
- if prior_hash is not None and hash_contents(current) == prior_hash:
141
- writes.append(_Write(path=f.path, contents=f.contents)) # refresh
142
- else:
143
- conflicts.append(
144
- _Conflict(
145
- path=f.path, new_path=f"{f.path}.new", contents=f.contents
146
- )
147
- )
148
-
149
- assembled_paths = {f.path for f in assembled}
150
- removed = (
151
- [p for p in prior.files if p not in assembled_paths] if prior else []
152
- )
153
-
154
- return ScaffoldDecision(
155
- writes=writes,
156
- conflicts=conflicts,
157
- manifest=Manifest(
158
- version=1,
159
- servers=list(stack.servers),
160
- clients=list(stack.clients),
161
- files=files,
162
- generated_by=generated_by,
163
- ),
164
- removed=removed,
165
- )
166
-
167
-
168
79
  def agent_context_staleness(
169
80
  manifest: dict[str, object] | None, current_version: str
170
81
  ) -> str | None:
@@ -186,6 +97,6 @@ def agent_context_staleness(
186
97
  frm = generated_by if generated_by else "an older MetaObjects"
187
98
  return (
188
99
  f"MetaObjects agent context was generated by {frm}; "
189
- f"you're on {current_version}. Re-run 'metaobjects agent-docs' to "
100
+ f"you're on {current_version}. Run 'npx meta agent-docs --server python' to "
190
101
  f"refresh the .claude/skills docs."
191
102
  )
@@ -43,13 +43,8 @@ from pathlib import Path
43
43
  from metaobjects import MetaDataLoader
44
44
  from metaobjects.agent_context import (
45
45
  AGENT_CONTEXT_MANIFEST_PATH,
46
- Manifest,
47
46
  agent_context_staleness,
48
- assemble,
49
47
  installed_metaobjects_version,
50
- make_stack,
51
- plan_scaffold,
52
- resolve_agent_context_root,
53
48
  )
54
49
  from metaobjects.meta.meta_data import MetaData
55
50
  from metaobjects.codegen.config import GenConfig
@@ -134,21 +129,37 @@ def _resolve_generators(names: str) -> tuple[list[Generator], list[str]]:
134
129
  return gens, errors
135
130
 
136
131
 
132
+ def _parse_entities(value: str | None) -> list[str] | None:
133
+ """Parse a comma-separated ``--entities`` value into a name list (``None`` =
134
+ no filter = generate every entity). Blank names are dropped."""
135
+ if not value:
136
+ return None
137
+ names = [n.strip() for n in value.split(",") if n.strip()]
138
+ return names or None
139
+
140
+
137
141
  def _generate(
138
- metadata_dir: str, out_dir: str, generators: list[Generator] | None = None
142
+ metadata_dir: str,
143
+ out_dir: str,
144
+ generators: list[Generator] | None = None,
145
+ entity_filter: list[str] | None = None,
139
146
  ) -> tuple[list[str], list[str]]:
140
147
  """Run the generator suite into ``out_dir``.
141
148
 
142
149
  ``generators`` defaults to the zero-config default suite; pass a registry-
143
- resolved subset for ``--generators``. Returns ``(written_paths, errors)``. On
144
- a load error, ``errors`` is non-empty and no files are written.
150
+ resolved subset for ``--generators``. ``entity_filter`` (the ``--entities``
151
+ allowlist) restricts which entities are EMITTED while the WHOLE model is still
152
+ loaded, so cross-entity references (``extends`` bases, ``@objectRef`` VOs)
153
+ resolve — emit a subset without splitting the metadata. Returns
154
+ ``(written_paths, errors)``. On a load error, ``errors`` is non-empty and no
155
+ files are written.
145
156
  """
146
157
  root, errors = _load_root(metadata_dir)
147
158
  if root is None:
148
159
  return [], errors
149
160
  config = GenConfig(out_dir=out_dir)
150
161
  suite = generators if generators is not None else _default_generators()
151
- result = run_gen(config, root, generators=suite)
162
+ result = run_gen(config, root, generators=suite, entity_filter=entity_filter)
152
163
  written = [path for path, status in result.files if status != "refused"]
153
164
  return written, []
154
165
 
@@ -282,7 +293,8 @@ def _cmd_gen(args: argparse.Namespace) -> int:
282
293
  print(f" {msg}", file=sys.stderr)
283
294
  return 1
284
295
 
285
- written, errors = _generate(args.metadata_dir, args.out, generators)
296
+ entities = _parse_entities(getattr(args, "entities", None))
297
+ written, errors = _generate(args.metadata_dir, args.out, generators, entities)
286
298
  if errors:
287
299
  print("error: failed to load metadata:", file=sys.stderr)
288
300
  for msg in errors:
@@ -322,9 +334,12 @@ def _verify_codegen(args: argparse.Namespace) -> int:
322
334
  )
323
335
  return 2
324
336
 
325
- # Reuse the exact gen code path — regenerate into a throwaway temp dir.
337
+ # Reuse the exact gen code path — regenerate into a throwaway temp dir. The
338
+ # --entities filter must match the `gen` that produced --out, or the diff
339
+ # reports the un-emitted entities as spurious drift.
326
340
  with tempfile.TemporaryDirectory() as tmp:
327
- written, errors = _generate(args.metadata_dir, tmp)
341
+ entities = _parse_entities(getattr(args, "entities", None))
342
+ written, errors = _generate(args.metadata_dir, tmp, None, entities)
328
343
  if errors:
329
344
  print("error: failed to load metadata:", file=sys.stderr)
330
345
  for msg in errors:
@@ -521,129 +536,14 @@ def _cmd_verify(args: argparse.Namespace) -> int:
521
536
  return exit_code
522
537
 
523
538
 
524
- #: The root-doc filenames we look for / create, and the line we append so a
525
- #: Claude Code agent always picks up the slim always-on context.
526
- _ROOT_DOC_CANDIDATES = ("CLAUDE.md", "AGENTS.md")
527
- _ROOT_DOC_IMPORT_LINE = "@.metaobjects/AGENTS.md"
528
-
529
-
530
- def _detect_python_server(out_dir: Path) -> bool:
531
- """Simple stack detection: a ``pyproject.toml`` in --out marks a Python project."""
532
- return (out_dir / "pyproject.toml").is_file()
533
-
534
-
535
- def _wire_root_doc(out_dir: Path) -> str | None:
536
- """Append ``@.metaobjects/AGENTS.md`` to the root CLAUDE.md/AGENTS.md.
537
-
538
- Idempotent — if the import line is already present in either doc, do nothing.
539
- If neither doc exists, create ``CLAUDE.md`` with the import line. Returns the
540
- doc filename that was created/updated, or ``None`` if it was already wired.
541
- """
542
- existing = [name for name in _ROOT_DOC_CANDIDATES if (out_dir / name).is_file()]
543
- # Already wired in any existing doc → idempotent no-op.
544
- for name in existing:
545
- text = (out_dir / name).read_text(encoding="utf-8")
546
- if _ROOT_DOC_IMPORT_LINE in text:
547
- return None
548
-
549
- if existing:
550
- target = out_dir / existing[0]
551
- text = target.read_text(encoding="utf-8")
552
- sep = "" if text.endswith("\n") or text == "" else "\n"
553
- target.write_text(f"{text}{sep}{_ROOT_DOC_IMPORT_LINE}\n", encoding="utf-8")
554
- return existing[0]
555
-
556
- target = out_dir / "CLAUDE.md"
557
- target.write_text(f"{_ROOT_DOC_IMPORT_LINE}\n", encoding="utf-8")
558
- return "CLAUDE.md"
559
-
560
-
561
539
  def _cmd_agent_docs(args: argparse.Namespace) -> int:
562
- """``agent-docs`` — scaffold the slim MetaObjects Claude Code agent context.
563
-
564
- Resolve the stack from ``--server`` / ``--client`` (repeatable). With neither,
565
- detect ``pyproject.toml`` → a python server. Assemble against the bundled
566
- content tree, then write the files into ``--out`` (default cwd): each new or
567
- manifest-unmodified file is written at its path; a hand-edited file's fresh
568
- contents go to ``<path>.new``. Append the always-on import to a root
569
- CLAUDE.md/AGENTS.md (idempotent), and persist the sidecar manifest.
570
- """
571
- out_dir = Path(args.out).resolve() if args.out else Path.cwd()
572
-
573
- servers = list(args.server or [])
574
- clients = list(args.client or [])
575
- if not servers and not clients:
576
- if _detect_python_server(out_dir):
577
- servers = ["python"]
578
- else:
579
- print(
580
- "error: no --server/--client given and no pyproject.toml found to "
581
- "detect a stack. Pass at least one --server or --client.",
582
- file=sys.stderr,
583
- )
584
- return 2
585
-
586
- try:
587
- content_root = resolve_agent_context_root()
588
- except FileNotFoundError as e:
589
- print(f"error: {e}", file=sys.stderr)
590
- return 1
591
-
592
- stack = make_stack(servers, clients)
593
- assembled = assemble(content_root, stack)
594
-
595
- # Load the prior manifest, if any, so hand-edits are preserved on re-run.
596
- manifest_path = out_dir / AGENT_CONTEXT_MANIFEST_PATH
597
- prior: Manifest | None = None
598
- if manifest_path.is_file():
599
- try:
600
- prior = Manifest.from_json(
601
- json.loads(manifest_path.read_text(encoding="utf-8"))
602
- )
603
- except (json.JSONDecodeError, ValueError, KeyError):
604
- prior = None # corrupt sidecar → treat as a fresh scaffold
605
-
606
- def _read_current(rel: str) -> str | None:
607
- p = out_dir / rel
608
- return p.read_bytes().decode("utf-8") if p.is_file() else None
609
-
610
- decision = plan_scaffold(
611
- stack,
612
- assembled,
613
- prior,
614
- _read_current,
615
- generated_by=installed_metaobjects_version(),
616
- )
617
-
618
- for w in decision.writes:
619
- dest = out_dir / w.path
620
- dest.parent.mkdir(parents=True, exist_ok=True)
621
- dest.write_bytes(w.contents.encode("utf-8"))
622
- print(f"wrote {w.path}")
623
- for c in decision.conflicts:
624
- dest = out_dir / c.new_path
625
- dest.parent.mkdir(parents=True, exist_ok=True)
626
- dest.write_bytes(c.contents.encode("utf-8"))
627
- print(f"hand-edited; wrote fresh copy to {c.new_path} (kept your {c.path})")
628
- for rel in decision.removed:
629
- print(f"note: {rel} no longer applies to this stack (not deleted)")
630
-
631
- # Persist the manifest.
632
- assert decision.manifest is not None
633
- manifest_path.parent.mkdir(parents=True, exist_ok=True)
634
- manifest_path.write_text(
635
- json.dumps(decision.manifest.to_json(), indent=2) + "\n", encoding="utf-8"
636
- )
637
-
638
- wired = _wire_root_doc(out_dir)
639
- if wired is not None:
640
- print(f"wired {_ROOT_DOC_IMPORT_LINE} into {wired}")
641
-
540
+ """``agent-docs`` — redirect to the canonical Node meta CLI scaffolder."""
642
541
  print(
643
- f"metaobjects agent-docs: scaffolded {len(assembled)} file(s) for stack "
644
- f"servers={list(stack.servers)} clients={list(stack.clients)} under {out_dir}"
542
+ "agent-context scaffolding moved to the meta CLI — run: "
543
+ "npx meta agent-docs --server python [--client <fw>] [--out <dir>]",
544
+ file=sys.stderr,
645
545
  )
646
- return 0
546
+ return 1
647
547
 
648
548
 
649
549
  def _build_parser() -> argparse.ArgumentParser:
@@ -686,6 +586,15 @@ def _build_parser() -> argparse.ArgumentParser:
686
586
  default=None,
687
587
  help="(reserved) package hint; Python derives package from metadata",
688
588
  )
589
+ gen.add_argument(
590
+ "--entities",
591
+ default=None,
592
+ help=(
593
+ "comma-separated entity NAMES to emit (allowlist). The whole model is "
594
+ "still loaded so `extends` bases and @objectRef VOs resolve; only the "
595
+ "named entities are written. Omit to emit every entity."
596
+ ),
597
+ )
689
598
  gen.set_defaults(func=_cmd_gen)
690
599
 
691
600
  docs = sub.add_parser(
@@ -758,6 +667,11 @@ def _build_parser() -> argparse.ArgumentParser:
758
667
  default=None,
759
668
  help="on-disk template/prompt dir the --templates gate resolves refs against",
760
669
  )
670
+ verify.add_argument(
671
+ "--entities",
672
+ default=None,
673
+ help="comma-separated entity allowlist for --codegen drift (match `gen --entities`)",
674
+ )
761
675
  verify.set_defaults(func=_cmd_verify)
762
676
 
763
677
  agent_docs = sub.add_parser(
@@ -1,6 +1,8 @@
1
1
  """object.* → Pydantic v2 model module (sub-project A)."""
2
2
  from __future__ import annotations
3
3
 
4
+ import re
5
+
4
6
  from metaobjects.meta.core.field.meta_field import MetaField
5
7
  from metaobjects.meta.core.object.meta_object import MetaObject
6
8
  from metaobjects.meta.core.field import field_constants as fc
@@ -25,6 +27,27 @@ def _is_int(value: object) -> bool:
25
27
  return isinstance(value, int) and not isinstance(value, bool)
26
28
 
27
29
 
30
+ # SQL expression defaults: anything matching is a SERVER-side default (the DB fills
31
+ # it), NOT a Python literal default — so `@default: gen_random_uuid()` must not emit
32
+ # `id: uuid.UUID = "gen_random_uuid()"`. Mirrors the TS column-mapper's
33
+ # SQL_EXPR_PATTERNS (and migrate-ts EXPR_DEFAULT_PATTERNS) so every port agrees on
34
+ # what counts as an expression.
35
+ _SQL_EXPR_DEFAULT_PATTERNS = (
36
+ re.compile(r"^now$", re.I),
37
+ re.compile(r"^now\(\)$", re.I),
38
+ re.compile(r"^current_timestamp$", re.I),
39
+ re.compile(r"^current_date$", re.I),
40
+ re.compile(r"^current_time$", re.I),
41
+ re.compile(r"\(\)$"), # anything function-like, e.g. gen_random_uuid()
42
+ )
43
+
44
+
45
+ def _is_sql_expr_default(value: object) -> bool:
46
+ """True iff *value* is a server-side SQL expression default (DB-filled), not a
47
+ Python literal. Only string defaults can be expressions."""
48
+ return isinstance(value, str) and any(p.search(value) for p in _SQL_EXPR_DEFAULT_PATTERNS)
49
+
50
+
28
51
  def _validators(field: MetaField, sub_type: str) -> list[MetaField]:
29
52
  """The field's own ``validator.<sub_type>`` children (effective, supers included)."""
30
53
  return [
@@ -121,7 +144,10 @@ def _field_line(field: MetaField, imports: set[str], config: GenConfig) -> tuple
121
144
  imports.add(f"from .{ref_name} import {ref_name}")
122
145
  required = field.attrs().get(fc.FIELD_ATTR_REQUIRED) is True
123
146
  default_raw = field.attrs().get(fc.FIELD_ATTR_DEFAULT)
124
- has_default = default_raw is not None
147
+ # A server-side expression default (now(), gen_random_uuid(), CURRENT_TIMESTAMP)
148
+ # is filled by the DB — the Python model carries no default for it (the field keeps
149
+ # its required/optional shape). Only literal defaults become Pydantic defaults.
150
+ has_default = default_raw is not None and not _is_sql_expr_default(default_raw)
125
151
  enum_type_name = type_name if shared is not None else None
126
152
 
127
153
  constraints = _validator_constraints(field)
@@ -154,7 +180,13 @@ def _field_line(field: MetaField, imports: set[str], config: GenConfig) -> tuple
154
180
  else:
155
181
  assignment = " = None"
156
182
 
157
- return f" {field.name}: {annotation}{assignment}", uses_field
183
+ # Pydantic field name = @column when present, else field.name. A cross-port
184
+ # entity carries the camelCase field.name (the TS property) AND the snake_case
185
+ # @column (the physical DB column); the Python model field IS the column, so it
186
+ # binds straight to the row. Backward-compatible: snake-authored models with no
187
+ # @column emit field.name unchanged.
188
+ py_name = field.attrs().get(fc.FIELD_ATTR_COLUMN) or field.name
189
+ return f" {py_name}: {annotation}{assignment}", uses_field
158
190
 
159
191
 
160
192
  def _effective_fqn(entity: MetaObject) -> str: