pyarchinit-mini 2.4.3__tar.gz → 2.4.5__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 (475) hide show
  1. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/CHANGELOG.md +87 -0
  2. {pyarchinit_mini-2.4.3/pyarchinit_mini.egg-info → pyarchinit_mini-2.4.5}/PKG-INFO +1 -1
  3. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/__init__.py +1 -1
  4. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/migrations/__init__.py +39 -0
  5. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/harris_swimlane/swimlane_state.py +106 -4
  6. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/models/harris_matrix.py +4 -1
  7. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/models/inventario_materiali.py +3 -0
  8. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/models/us.py +4 -1
  9. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/harris_creator_routes.py +31 -41
  10. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/harris_creator/editor.html +70 -0
  11. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5/pyarchinit_mini.egg-info}/PKG-INFO +1 -1
  12. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyproject.toml +1 -1
  13. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/fixtures/_generate_harris_swimlane_synthetic.py +3 -1
  14. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_harris_swimlane_routes_session_missing.py +2 -1
  15. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/MANIFEST.in +0 -0
  16. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/README.md +0 -0
  17. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/babel.cfg +0 -0
  18. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/data/media_viewer_demo.db +0 -0
  19. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/data/pyarchinit_mini 2.db +0 -0
  20. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/data/pyarchinit_mini.db +0 -0
  21. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/data/pyarchinit_mini_sample.db +0 -0
  22. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/data/pyarchinit_tutorial.db +0 -0
  23. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/data/pyarchinit_tutorial_backup_20251030_093228.db +0 -0
  24. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/data/pyarchinit_tutorial_clean.db +0 -0
  25. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/data/pyarchinit_tutorial_video.db +0 -0
  26. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/data/pyarchinit_v18_demo.db +0 -0
  27. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/logo/logo_pyarchinit-mini.png +0 -0
  28. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/api/__init__.py +0 -0
  29. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/api/auth.py +0 -0
  30. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/api/dependencies.py +0 -0
  31. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/api/graphml.py +0 -0
  32. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/api/inventario.py +0 -0
  33. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/api/schemas.py +0 -0
  34. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/api/site.py +0 -0
  35. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/api/sync.py +0 -0
  36. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/api/us.py +0 -0
  37. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/cli/__init__.py +0 -0
  38. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/cli/export_import_cli.py +0 -0
  39. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/cli/extended_matrix_import.py +0 -0
  40. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/cli/graphml_cli.py +0 -0
  41. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/cli/harris_import.py +0 -0
  42. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/cli/harris_template.py +0 -0
  43. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/cli/migrate.py +0 -0
  44. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/cli/migrate_vocab.py +0 -0
  45. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/cli/pyarchinit_import_export_cli.py +0 -0
  46. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/cli/sync_cli.py +0 -0
  47. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/cli_interface/__init__.py +0 -0
  48. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/cli_interface/cli_app.py +0 -0
  49. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/config/__init__.py +0 -0
  50. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/config/connection_manager.py +0 -0
  51. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/config/em_node_config_manager.py +0 -0
  52. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/config/em_node_types.yaml +0 -0
  53. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/__init__.py +0 -0
  54. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/concurrency_manager.py +0 -0
  55. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/connection.py +0 -0
  56. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/database_creator.py +0 -0
  57. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/manager.py +0 -0
  58. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/migration_scripts/__init__.py +0 -0
  59. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/migration_scripts/add_file_path.py +0 -0
  60. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/migration_scripts/add_i18n_columns.py +0 -0
  61. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/migration_scripts/add_tipo_documento.py +0 -0
  62. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text.py +0 -0
  63. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text_simple.py +0 -0
  64. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_backfill.py +0 -0
  65. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_schema.py +0 -0
  66. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/migrations/_2026_05_vocab_alignment.py +0 -0
  67. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/migrations/backup.py +0 -0
  68. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/postgres_installer.py +0 -0
  69. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/schemas.py +0 -0
  70. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/database/utils.py +0 -0
  71. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/__init__.py +0 -0
  72. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/analytics_dialog.py +0 -0
  73. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/assets/logo.png +0 -0
  74. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/dialogs.py +0 -0
  75. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/excel_import_dialog.py +0 -0
  76. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/export_import_dialog.py +0 -0
  77. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/graphml_export_dialog.py +0 -0
  78. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/gui_app.py +0 -0
  79. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/harris_matrix_editor.py +0 -0
  80. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/i18n.py +0 -0
  81. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/icons.py +0 -0
  82. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/inventario_dialog_extended.py +0 -0
  83. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/main_window.py +0 -0
  84. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/media_manager_advanced.py +0 -0
  85. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/postgres_installer_dialog.py +0 -0
  86. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/pottery_dialog_extended.py +0 -0
  87. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/pottery_panel.py +0 -0
  88. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/pyarchinit_import_export_dialog.py +0 -0
  89. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/thesaurus_dialog.py +0 -0
  90. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/desktop_gui/us_dialog_extended.py +0 -0
  91. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/dto/__init__.py +0 -0
  92. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/dto/inventario_dto.py +0 -0
  93. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/dto/site_dto.py +0 -0
  94. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/dto/us_dto.py +0 -0
  95. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/exceptions.py +0 -0
  96. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphml_converter/__init__.py +0 -0
  97. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphml_converter/converter.py +0 -0
  98. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphml_converter/dot_parser.py +0 -0
  99. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphml_converter/em_palette.py +0 -0
  100. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphml_converter/graphml_builder.py +0 -0
  101. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphml_converter/graphml_exporter.py +0 -0
  102. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphml_converter/pure_networkx_exporter.py +0 -0
  103. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphml_converter/svg_resources.py +0 -0
  104. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphml_converter/templates/EM_palette.graphml +0 -0
  105. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphml_converter/x11_colors.py +0 -0
  106. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphml_converter/yed_template.py +0 -0
  107. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphml_io/__init__.py +0 -0
  108. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphml_io/reader.py +0 -0
  109. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphml_io/writer.py +0 -0
  110. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphml_io/yed_writer.py +0 -0
  111. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphproj/__init__.py +0 -0
  112. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphproj/auto_regen.py +0 -0
  113. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphproj/edge_registry.py +0 -0
  114. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphproj/exceptions.py +0 -0
  115. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphproj/filesystem.py +0 -0
  116. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphproj/ingest_plan.py +0 -0
  117. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphproj/ingestor.py +0 -0
  118. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphproj/paradata_store.py +0 -0
  119. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/graphproj/projector.py +0 -0
  120. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/harris_matrix/__init__.py +0 -0
  121. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/harris_matrix/enhanced_visualizer.py +0 -0
  122. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/harris_matrix/matrix_generator.py +0 -0
  123. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/harris_matrix/matrix_visualizer.py +0 -0
  124. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/harris_matrix/pyarchinit_visualizer.py +0 -0
  125. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/harris_swimlane/__init__.py +0 -0
  126. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/harris_swimlane/compound_layout.py +0 -0
  127. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/harris_swimlane/exceptions.py +0 -0
  128. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/harris_swimlane/period_sync_service.py +0 -0
  129. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/harris_swimlane/row_provider.py +0 -0
  130. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/i18n/__init__.py +0 -0
  131. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/i18n/flask_babel_config.py +0 -0
  132. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/i18n/locale_manager.py +0 -0
  133. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/__init__.py +0 -0
  134. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/__main__.py +0 -0
  135. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/blender_client.py +0 -0
  136. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/config.py +0 -0
  137. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/event_stream.py +0 -0
  138. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/graphml_parser.py +0 -0
  139. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/http_server.py +0 -0
  140. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/period_filter.py +0 -0
  141. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/prompts/__init__.py +0 -0
  142. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/prompts/base_prompt.py +0 -0
  143. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/prompts/period_visualization_prompt.py +0 -0
  144. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/prompts/stratigraphic_model_prompt.py +0 -0
  145. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/prompts/us_description_prompt.py +0 -0
  146. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/proxy_generator.py +0 -0
  147. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/resources/__init__.py +0 -0
  148. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/resources/base_resource.py +0 -0
  149. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/resources/graphml_resource.py +0 -0
  150. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/resources/periods_resource.py +0 -0
  151. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/resources/relationships_resource.py +0 -0
  152. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/resources/sites_resource.py +0 -0
  153. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/resources/us_resource.py +0 -0
  154. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/server.py +0 -0
  155. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/__init__.py +0 -0
  156. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/base_tool.py +0 -0
  157. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/batch_insert_tool.py +0 -0
  158. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/build_3d_tool.py +0 -0
  159. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/chatgpt_fetch_tool.py +0 -0
  160. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/chatgpt_search_tool.py +0 -0
  161. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/configure_em_nodes_tool.py +0 -0
  162. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/create_database_tool.py +0 -0
  163. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/create_harris_matrix_tool.py +0 -0
  164. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/data_import_parser_tool.py +0 -0
  165. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/data_management_tool.py +0 -0
  166. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/database_manager_tool.py +0 -0
  167. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/delete_data_tool.py +0 -0
  168. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/export_harris_matrix_graphml_tool.py +0 -0
  169. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/export_tool.py +0 -0
  170. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/filter_tool.py +0 -0
  171. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/generate_report_tool.py +0 -0
  172. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/get_schema_tool.py +0 -0
  173. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/import_excel_tool.py +0 -0
  174. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/insert_data_tool.py +0 -0
  175. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/manage_services_tool.py +0 -0
  176. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/material_tool.py +0 -0
  177. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/media_management_tool.py +0 -0
  178. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/position_tool.py +0 -0
  179. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/pyarchinit_sync_tool.py +0 -0
  180. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/resolve_conflicts_tool.py +0 -0
  181. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/service_management_tool.py +0 -0
  182. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/thesaurus_management_tool.py +0 -0
  183. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/update_data_tool.py +0 -0
  184. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/upload_file_tool.py +0 -0
  185. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/validate_relationship_format_tool.py +0 -0
  186. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/validate_relationship_integrity_tool.py +0 -0
  187. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/validate_stratigraphic_relationships_tool.py +0 -0
  188. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/mcp_server/tools/validate_stratigraphy_tool.py +0 -0
  189. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/media_manager/__init__.py +0 -0
  190. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/media_manager/media_handler.py +0 -0
  191. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/models/__init__.py +0 -0
  192. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/models/ai_chat.py +0 -0
  193. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/models/app_setting.py +0 -0
  194. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/models/base.py +0 -0
  195. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/models/datazione.py +0 -0
  196. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/models/extended_matrix.py +0 -0
  197. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/models/media.py +0 -0
  198. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/models/pottery.py +0 -0
  199. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/models/site.py +0 -0
  200. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/models/thesaurus.py +0 -0
  201. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/models/tma.py +0 -0
  202. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/models/user.py +0 -0
  203. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/pdf_export/__init__.py +0 -0
  204. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/pdf_export/pdf_generator.py +0 -0
  205. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/pdf_export/pdf_generator_backup.py +0 -0
  206. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/pdf_export/pyarchinit_finds_template.py +0 -0
  207. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/pdf_export/pyarchinit_inventory_template.py +0 -0
  208. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/pdf_export/usm_implementation.py +0 -0
  209. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/s3d_integration/__init__.py +0 -0
  210. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/s3d_integration/model_manager.py +0 -0
  211. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/s3d_integration/s3d_converter.py +0 -0
  212. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/__init__.py +0 -0
  213. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/auto_translate.py +0 -0
  214. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/configure_claude_desktop.py +0 -0
  215. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/create_admin_user.py +0 -0
  216. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/create_correct_stratigraphy_sample.py +0 -0
  217. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/create_italian_sample_database.py +0 -0
  218. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/create_sample_for_webapp.py +0 -0
  219. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/create_sample_with_50_us.py +0 -0
  220. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/generate_test_3d_model.py +0 -0
  221. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/load_italian_as_main.py +0 -0
  222. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/load_sample_as_main.py +0 -0
  223. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/migrate_relationships.py +0 -0
  224. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/populate_sample_data.py +0 -0
  225. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/populate_simple_data.py +0 -0
  226. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/setup_auth.py +0 -0
  227. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/setup_user_env.py +0 -0
  228. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/test_cascade_delete.py +0 -0
  229. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/test_relationship_fix.py +0 -0
  230. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/update_sample_relationships.py +0 -0
  231. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/update_urls_and_versions.py +0 -0
  232. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/scripts/verify_docs.py +0 -0
  233. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/__init__.py +0 -0
  234. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/ai_assistant_service.py +0 -0
  235. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/ai_chat_service.py +0 -0
  236. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/analytics_service.py +0 -0
  237. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/app_setting_service.py +0 -0
  238. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/backup_service.py +0 -0
  239. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/command_parser.py +0 -0
  240. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/datazione_service.py +0 -0
  241. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/export_import_service.py +0 -0
  242. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/extended_matrix_excel_parser.py +0 -0
  243. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/import_export_service.py +0 -0
  244. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/inventario_service.py +0 -0
  245. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/mcp_executor.py +0 -0
  246. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/media_service.py +0 -0
  247. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/periodizzazione_service.py +0 -0
  248. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/pottery_dto.py +0 -0
  249. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/pottery_pdf_service.py +0 -0
  250. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/pottery_service.py +0 -0
  251. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/relationship_sync_service.py +0 -0
  252. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/search_service.py +0 -0
  253. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/site_service.py +0 -0
  254. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/thesaurus_service.py +0 -0
  255. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/tma_service.py +0 -0
  256. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/us_service.py +0 -0
  257. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/services/user_service.py +0 -0
  258. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/stratigraph/__init__.py +0 -0
  259. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/stratigraph/bundle_creator.py +0 -0
  260. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/stratigraph/bundle_manifest.py +0 -0
  261. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/stratigraph/bundle_validator.py +0 -0
  262. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/stratigraph/connectivity_monitor.py +0 -0
  263. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/stratigraph/sync_orchestrator.py +0 -0
  264. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/stratigraph/sync_queue.py +0 -0
  265. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/stratigraph/sync_state_machine.py +0 -0
  266. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/stratigraph/uuid_manager.py +0 -0
  267. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.mo +0 -0
  268. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.po +0 -0
  269. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.mo +0 -0
  270. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.po +0 -0
  271. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/translations/messages.pot +0 -0
  272. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/utils/__init__.py +0 -0
  273. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/utils/auth.py +0 -0
  274. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/utils/exceptions.py +0 -0
  275. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/utils/relationship_validator.py +0 -0
  276. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/utils/stratigraphic_validator.py +0 -0
  277. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/utils/tma_label_generator.py +0 -0
  278. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/utils/validators.py +0 -0
  279. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/vocab/__init__.py +0 -0
  280. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/vocab/exceptions.py +0 -0
  281. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/vocab/i18n.py +0 -0
  282. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/vocab/loader.py +0 -0
  283. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/vocab/provider.py +0 -0
  284. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/vocab/translations/vocab_en.json +0 -0
  285. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/vocab/translations/vocab_it.json +0 -0
  286. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/vocab/types.py +0 -0
  287. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/app.py +0 -0
  288. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/auth_routes.py +0 -0
  289. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/em_node_config_routes.py +0 -0
  290. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/excel_import_routes.py +0 -0
  291. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/graph_routes.py +0 -0
  292. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/paradata_routes.py +0 -0
  293. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/paradata_ui_routes.py +0 -0
  294. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/pottery_routes.py +0 -0
  295. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/pyarchinit_import_export_routes.py +0 -0
  296. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/s3d_routes.py +0 -0
  297. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/socketio_events.py +0 -0
  298. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/static/css/style.css +0 -0
  299. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/static/images/favicon.ico +0 -0
  300. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/static/images/logo.png +0 -0
  301. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/static/images/no-image.png +0 -0
  302. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/static/images/pyarchinit-mini-logo.png +0 -0
  303. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/static/js/OrbitControls.js +0 -0
  304. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/static/js/harris_creator_editor.js +0 -0
  305. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/static/js/stratigraphic_layout.js +0 -0
  306. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/static/js/three-d-viewer.js +0 -0
  307. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/static/js/three.min.js +0 -0
  308. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/static/js/universal_search.js +0 -0
  309. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.bin +0 -0
  310. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.gltf +0 -0
  311. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.mtl +0 -0
  312. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.obj +0 -0
  313. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/3d_builder/index.html +0 -0
  314. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/3d_viewer/viewer.html +0 -0
  315. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/admin/backups.html +0 -0
  316. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/admin/database.html +0 -0
  317. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/admin/database_connect.html +0 -0
  318. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/admin/database_info.html +0 -0
  319. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/admin/database_upload.html +0 -0
  320. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/admin/settings_ai.html +0 -0
  321. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/ai/assistant.html +0 -0
  322. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/analytics/dashboard.html +0 -0
  323. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/auth/login.html +0 -0
  324. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/auth/users.html +0 -0
  325. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/base.html +0 -0
  326. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/blender_viewer.html +0 -0
  327. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/components/language_switcher.html +0 -0
  328. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/dashboard.html +0 -0
  329. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/datazioni/list.html +0 -0
  330. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/docs/index.html +0 -0
  331. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/em_node_config/index.html +0 -0
  332. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/excel_import/index.html +0 -0
  333. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/export/export_import.html +0 -0
  334. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/graph_import_preview.html +0 -0
  335. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/graph_import_result.html +0 -0
  336. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/harris_creator/index.html +0 -0
  337. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/harris_matrix/graphml_export.html +0 -0
  338. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/harris_matrix/large_graph_message.html +0 -0
  339. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/harris_matrix/stratigraph_viewer.html +0 -0
  340. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/harris_matrix/view.html +0 -0
  341. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/harris_matrix/view_graphviz.html +0 -0
  342. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/harris_matrix/viewer_3d_integrated.html +0 -0
  343. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/inventario/form.html +0 -0
  344. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/inventario/list.html +0 -0
  345. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/media/list.html +0 -0
  346. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/media/upload.html +0 -0
  347. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/messaging/contacts.html +0 -0
  348. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/operators/directory.html +0 -0
  349. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/paradata/edit.html +0 -0
  350. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/paradata/index.html +0 -0
  351. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/paradata/list.html +0 -0
  352. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/pdf/pottery_sheet.html +0 -0
  353. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/periodizzazione/form.html +0 -0
  354. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/periodizzazione/list.html +0 -0
  355. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/periodizzazione/periods.html +0 -0
  356. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/pottery/detail.html +0 -0
  357. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/pottery/form.html +0 -0
  358. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/pottery/import_form.html +0 -0
  359. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/pottery/list.html +0 -0
  360. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/pyarchinit_import_export/index.html +0 -0
  361. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/search/results.html +0 -0
  362. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/sites/detail.html +0 -0
  363. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/sites/form.html +0 -0
  364. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/sites/list.html +0 -0
  365. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/sites/map.html +0 -0
  366. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/stats/targeted.html +0 -0
  367. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/thesaurus/list.html +0 -0
  368. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/tma/form.html +0 -0
  369. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/tma/list.html +0 -0
  370. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/us/form.html +0 -0
  371. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/us/list.html +0 -0
  372. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/templates/validation/report.html +0 -0
  373. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/test_prova_extended_matrix.graphml +0 -0
  374. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/three_d_builder_routes.py +0 -0
  375. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.graphml +0 -0
  376. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
  377. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/vocab_routes.py +0 -0
  378. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_heriverse.json +0 -0
  379. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.graphml +0 -0
  380. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.json +0 -0
  381. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
  382. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini.egg-info/SOURCES.txt +0 -0
  383. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini.egg-info/dependency_links.txt +0 -0
  384. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini.egg-info/entry_points.txt +0 -0
  385. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini.egg-info/not-zip-safe +0 -0
  386. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini.egg-info/requires.txt +0 -0
  387. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/pyarchinit_mini.egg-info/top_level.txt +0 -0
  388. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/requirements.txt +0 -0
  389. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/setup.cfg +0 -0
  390. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/setup.py +0 -0
  391. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/__init__.py +0 -0
  392. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/conftest.py +0 -0
  393. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/e2e/__init__.py +0 -0
  394. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/e2e/test_web_vocab_full_flow.py +0 -0
  395. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/fixtures/_generate_baseline_graphml.py +0 -0
  396. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/fixtures/_generate_synthetic_db.py +0 -0
  397. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/fixtures/build_legacy_with_pottery.py +0 -0
  398. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/__init__.py +0 -0
  399. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_admin_ai_settings_routes.py +0 -0
  400. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_admin_backup_routes.py +0 -0
  401. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_auto_regen_on_save.py +0 -0
  402. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_full_sync_flow.py +0 -0
  403. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_graph_import_flow.py +0 -0
  404. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_graph_routes.py +0 -0
  405. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_harris_matrix_post_cutover.py +0 -0
  406. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_harris_matrix_visual_parity.py +0 -0
  407. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_harris_swimlane_routes_create_row.py +0 -0
  408. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_harris_swimlane_routes_load.py +0 -0
  409. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_harris_swimlane_routes_save.py +0 -0
  410. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_migrate_vocab_cli.py +0 -0
  411. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_paradata_routes_authors.py +0 -0
  412. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_paradata_routes_other_types.py +0 -0
  413. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_paradata_ui.py +0 -0
  414. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_pottery_completion.py +0 -0
  415. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_pottery_excel_roundtrip.py +0 -0
  416. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_pottery_legacy_upgrade.py +0 -0
  417. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_pottery_routes.py +0 -0
  418. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_spec2_coverage_gaps.py +0 -0
  419. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_vocab_routes.py +0 -0
  420. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_yed_export_route.py +0 -0
  421. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/integration/test_yed_writer_parity.py +0 -0
  422. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/__init__.py +0 -0
  423. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_app_setting_model.py +0 -0
  424. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_app_setting_service.py +0 -0
  425. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_auto_regen.py +0 -0
  426. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_backup_service.py +0 -0
  427. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_bundle.py +0 -0
  428. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_concurrency_columns.py +0 -0
  429. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_concurrency_manager.py +0 -0
  430. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_connectivity_monitor.py +0 -0
  431. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_database_utils.py +0 -0
  432. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_deprecated_writers_shim.py +0 -0
  433. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_em_palette_vocab_backed.py +0 -0
  434. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_graphml_io_reader.py +0 -0
  435. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_graphml_io_writer.py +0 -0
  436. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_graphproj_edge_registry.py +0 -0
  437. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_graphproj_exceptions.py +0 -0
  438. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_graphproj_filesystem.py +0 -0
  439. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_graphproj_ingestor_apply.py +0 -0
  440. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_graphproj_ingestor_preview.py +0 -0
  441. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_graphproj_projector.py +0 -0
  442. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_harris_swimlane_compound_layout.py +0 -0
  443. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_harris_swimlane_exceptions.py +0 -0
  444. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_harris_swimlane_period_sync.py +0 -0
  445. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_harris_swimlane_row_provider.py +0 -0
  446. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_harris_swimlane_state_load.py +0 -0
  447. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_harris_swimlane_state_save.py +0 -0
  448. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_ingest_plan.py +0 -0
  449. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_inventario_schema.py +0 -0
  450. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_migrations_backup.py +0 -0
  451. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_migrations_idempotent.py +0 -0
  452. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_optimistic_locking.py +0 -0
  453. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_paradata_store_authors.py +0 -0
  454. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_paradata_store_basic.py +0 -0
  455. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_paradata_store_other_types.py +0 -0
  456. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_pottery_dto.py +0 -0
  457. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_pottery_model.py +0 -0
  458. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_pottery_service.py +0 -0
  459. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_s3d_converter_vocab_backed.py +0 -0
  460. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_site_service.py +0 -0
  461. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_sync_api.py +0 -0
  462. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_sync_cli.py +0 -0
  463. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_sync_orchestrator.py +0 -0
  464. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_sync_queue.py +0 -0
  465. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_sync_state_machine.py +0 -0
  466. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_us_dto_unita_tipo_validator.py +0 -0
  467. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_us_schema.py +0 -0
  468. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_uuid_manager.py +0 -0
  469. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_vocab_bootstrap_failures.py +0 -0
  470. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_vocab_exceptions.py +0 -0
  471. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_vocab_i18n.py +0 -0
  472. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_vocab_loader.py +0 -0
  473. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_vocab_provider.py +0 -0
  474. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_vocab_types.py +0 -0
  475. {pyarchinit_mini-2.4.3 → pyarchinit_mini-2.4.5}/tests/unit/test_yed_writer.py +0 -0
@@ -1,3 +1,90 @@
1
+ ## [2.4.5] - 2026-05-18
2
+
3
+ ### Changed (IT)
4
+ - `/api/node-types` ora alimenta la sidebar del Harris Creator **direttamente
5
+ da VocabProvider** (s3dgraphy JSON catalogues), abbandonando il vecchio
6
+ YAML legacy. Conseguenza: i tipi USVs / USVn / USN / RSF / serSU /
7
+ serUSD / serUSVn / serUSVs / TSU / UL / BR / SE / USD compaiono
8
+ finalmente in sidebar. Aggiornare s3dgraphy aggiungerà automaticamente
9
+ nuovi tipi all'editor.
10
+ - Colore e forma di ogni voce vengono presi da `visual_style.fill_color`
11
+ e `visual_style.shape` di s3dgraphy (es. SF / VSF / RSF = octagon,
12
+ USVs = parallelogram, USVn = hexagon, USD = roundrectangle, BR = diamond).
13
+
14
+ ### Fixed (IT)
15
+ - Pannello Properties ora si popola correttamente al click di un nodo US:
16
+ `SwimlaneState.load` aggiunge `us_number`, `description` (da
17
+ `d_stratigrafica`), `area`, `datazione`, `file_path` ai `data` Cytoscape
18
+ che il pannello legge.
19
+ - Ai US viene allegato anche `shape` / `border_color` / `border_style` da
20
+ VocabProvider — i nodi rendono con la simbologia EM appropriata, non più
21
+ rettangoli grigi.
22
+
23
+ ### Added (IT)
24
+ - Toggle Hide/Show del pannello Properties (icona angle-double in alto a
25
+ destra del pannello): collassa a 36px e la scelta viene persistita in
26
+ `localStorage`. Cytoscape viene `fit()` dopo l'animazione per riempire
27
+ lo spazio guadagnato.
28
+
29
+ ### Changed (EN)
30
+ - `/api/node-types` is now sourced from VocabProvider (s3dgraphy JSON
31
+ catalogues). Bumping s3dgraphy is enough to surface new types in the
32
+ sidebar.
33
+ - US nodes pick `shape`/`fill_color`/`border_color`/`border_style` from
34
+ the s3dgraphy `visual_style` block so EM symbology renders correctly.
35
+
36
+ ### Fixed (EN)
37
+ - Properties panel populates again on node click — `SwimlaneState.load`
38
+ now attaches `us_number` / `description` / `area` / `datazione` /
39
+ `file_path` to the Cytoscape `data` payload.
40
+
41
+ ### Added (EN)
42
+ - Properties panel Hide/Show toggle (collapses to a thin strip on the
43
+ right). Choice persisted in `localStorage`; Cytoscape re-fits the
44
+ viewport after the transition.
45
+
46
+ ## [2.4.4] - 2026-05-18
47
+
48
+ ### Fixed (IT)
49
+ - Nodi US dell'editor swimlane ora hanno `data.color` (risolto via
50
+ `VocabProvider.get_visual_style().fill_color`). Stop ai warning Cytoscape
51
+ "no mapping for property background-color with data field color".
52
+ - Edge stratigrafici deduplicati: `_build_edges` ora ignora le coppie
53
+ doppie `(source, target, edge_name)` e tratta gli inversi `overlies` /
54
+ `is_after` come la stessa relazione (un solo arco invece di due).
55
+ - Editor lancia un layout `dagre` dopo `cy.add()` + `cy.fit()`, così gli US
56
+ si distribuiscono dentro le row e gli archi diventano visibili.
57
+
58
+ ### Added (IT)
59
+ - Modelli SQLAlchemy `US`, `InventarioMateriali`, `Periodizzazione` ora
60
+ definiscono la colonna `node_uuid = Column(String(36))`. Un DB nuovo
61
+ creato via `Base.metadata.create_all()` nasce con la colonna corretta.
62
+ - `DatabaseMigrations.migrate_all_tables()` chiama automaticamente le 3
63
+ migration di Spec 1 (`_2026_05_node_uuid_schema`, `_node_uuid_backfill`,
64
+ `_vocab_alignment`) idempotentemente. Conseguenza: i DB esistenti
65
+ (SQLite o PostgreSQL) vengono aggiornati al primo avvio del web —
66
+ nessun bisogno di lanciare manualmente `pyarchinit-mini-migrate-vocab`.
67
+
68
+ ### Fixed (EN)
69
+ - US nodes in the swimlane editor now carry `data.color`, resolved through
70
+ `VocabProvider.get_visual_style().fill_color`. Eliminates Cytoscape
71
+ warnings about missing color mapping.
72
+ - Stratigraphic edges deduplicated: `_build_edges` ignores duplicate
73
+ `(source, target, edge_name)` triples and treats `overlies` / `is_after`
74
+ inverse pairs as the same edge (one arrow, not two).
75
+ - Editor runs a `dagre` layout after `cy.add()` plus a `cy.fit()` so US
76
+ children spread inside their swimlane row and edges become visible.
77
+
78
+ ### Added (EN)
79
+ - SQLAlchemy models `US`, `InventarioMateriali`, `Periodizzazione` now
80
+ declare `node_uuid = Column(String(36))`. New DBs created via
81
+ `Base.metadata.create_all()` have the column from the start.
82
+ - `DatabaseMigrations.migrate_all_tables()` now invokes the 3 Spec 1
83
+ migrations (`node_uuid_schema`, `node_uuid_backfill`, `vocab_alignment`)
84
+ idempotently. Existing SQLite or PostgreSQL DBs get auto-upgraded on
85
+ the first web startup — no need to run `pyarchinit-mini-migrate-vocab`
86
+ by hand.
87
+
1
88
  ## [2.4.3] - 2026-05-18
2
89
 
3
90
  ### Fixed (IT)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyarchinit-mini
3
- Version: 2.4.3
3
+ Version: 2.4.5
4
4
  Summary: Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer
5
5
  Home-page: https://github.com/enzococca/pyarchinit-mini
6
6
  Author: PyArchInit Team
@@ -23,7 +23,7 @@ Features:
23
23
  - Scalable and modular architecture
24
24
  """
25
25
 
26
- __version__ = "2.4.3"
26
+ __version__ = "2.4.5"
27
27
  __author__ = "PyArchInit Team"
28
28
  __email__ = "enzo.ccc@gmail.com"
29
29
 
@@ -803,6 +803,14 @@ class DatabaseMigrations:
803
803
  except Exception as e:
804
804
  logger.warning(f"TMA thesaurus trigger failed: {e}")
805
805
 
806
+ # Spec 1 (node_uuid + vocab alignment) — auto-applied so fresh
807
+ # installs and upgraded existing DBs both get the swimlane editor
808
+ # working without a manual `pyarchinit-mini-migrate-vocab` step.
809
+ try:
810
+ total_migrations += self._migrate_spec1_node_uuid_and_vocab()
811
+ except Exception as e:
812
+ logger.warning(f"Spec 1 node_uuid/vocab migration failed: {e}")
813
+
806
814
  logger.info(f"All migrations completed. Total migrations applied: {total_migrations}")
807
815
  return total_migrations
808
816
 
@@ -810,6 +818,37 @@ class DatabaseMigrations:
810
818
  logger.error(f"Error during database migrations: {e}")
811
819
  raise
812
820
 
821
+ def _migrate_spec1_node_uuid_and_vocab(self) -> int:
822
+ """Apply Spec 1 migrations idempotently: node_uuid schema, backfill,
823
+ vocab alignment (USVA/USVB→USVs, USVC→USVn). Each underlying script
824
+ is a no-op when nothing needs changing, so this is safe to call on
825
+ every startup."""
826
+ import importlib
827
+
828
+ pkg = "pyarchinit_mini.database.migrations"
829
+ scripts = [
830
+ f"{pkg}._2026_05_node_uuid_schema",
831
+ f"{pkg}._2026_05_node_uuid_backfill",
832
+ f"{pkg}._2026_05_vocab_alignment",
833
+ ]
834
+ url = str(self.connection.engine.url)
835
+ applied = 0
836
+ for mod_path in scripts:
837
+ try:
838
+ mod = importlib.import_module(mod_path)
839
+ report = mod.run(url, dry_run=False)
840
+ status = getattr(report, "status", "ok")
841
+ if status == "ok":
842
+ rows = getattr(report, "rows_updated", None)
843
+ tables = getattr(report, "tables_changed", None)
844
+ mappings = getattr(report, "mappings", None)
845
+ if rows or tables or mappings:
846
+ applied += 1
847
+ logger.info(f"{mod_path}: {tables or rows or mappings}")
848
+ except Exception as e:
849
+ logger.warning(f"{mod_path} failed: {e}")
850
+ return applied
851
+
813
852
  def get_table_info(self, table_name: str) -> Dict[str, Any]:
814
853
  """Get information about a table structure"""
815
854
  try:
@@ -52,10 +52,64 @@ class SwimlaneState:
52
52
  provider = RowProvider(session, site)
53
53
  rows = provider.list_rows()
54
54
 
55
+ # Resolve unit_type → visual_style via VocabProvider once per request,
56
+ # cached. The editor's Cytoscape style uses `data(color)` and
57
+ # `data(shape)`; if either is missing the node renders grey rectangles
58
+ # and Cytoscape logs a warning per node.
59
+ _SHAPE_TO_CYTOSCAPE = {
60
+ "rounded_rectangle": "roundrectangle",
61
+ "parallelogram": "rhomboid",
62
+ "trapezium": "triangle",
63
+ "trapezium2": "vee",
64
+ # Names that are already valid Cytoscape shapes pass through.
65
+ }
66
+ try:
67
+ from pyarchinit_mini.vocab.provider import VocabProvider
68
+ _vocab = VocabProvider.instance()
69
+ _style_cache: dict[str, dict] = {}
70
+
71
+ def _style_for(ut: str) -> dict:
72
+ if ut in _style_cache:
73
+ return _style_cache[ut]
74
+ try:
75
+ vs = _vocab.get_visual_style(ut)
76
+ raw_shape = (
77
+ vs.get("shape") if isinstance(vs, dict)
78
+ else getattr(vs, "shape", "rectangle")
79
+ )
80
+ fill = (
81
+ vs.get("fill_color") if isinstance(vs, dict)
82
+ else getattr(vs, "fill_color", None)
83
+ ) or "#CCCCCC"
84
+ border = (
85
+ vs.get("border_color") if isinstance(vs, dict)
86
+ else getattr(vs, "border_color", None)
87
+ ) or "#333333"
88
+ border_style = (
89
+ vs.get("border_style") if isinstance(vs, dict)
90
+ else getattr(vs, "border_style", None)
91
+ ) or "solid"
92
+ out = {
93
+ "color": fill,
94
+ "shape": _SHAPE_TO_CYTOSCAPE.get(raw_shape, raw_shape),
95
+ "border_color": border,
96
+ "border_style": border_style,
97
+ }
98
+ except Exception:
99
+ out = {"color": "#CCCCCC", "shape": "rectangle",
100
+ "border_color": "#333333", "border_style": "solid"}
101
+ _style_cache[ut] = out
102
+ return out
103
+ except Exception:
104
+ def _style_for(ut: str) -> dict:
105
+ return {"color": "#CCCCCC", "shape": "rectangle",
106
+ "border_color": "#333333", "border_style": "solid"}
107
+
55
108
  # Load US records for site
56
109
  us_rows = session.execute(text(
57
110
  "SELECT id_us, sito, area, us, unita_tipo, rapporti, node_uuid, "
58
- "periodo_iniziale, fase_iniziale "
111
+ "periodo_iniziale, fase_iniziale, "
112
+ "d_stratigrafica, datazione, file_path "
59
113
  "FROM us_table WHERE sito = :sito ORDER BY id_us"
60
114
  ), {"sito": site}).fetchall()
61
115
 
@@ -83,16 +137,30 @@ class SwimlaneState:
83
137
 
84
138
  pos = initial_node_position(_RowLike(), idx)
85
139
 
140
+ style = _style_for(unita_tipo)
86
141
  nodes.append(CytoscapeElement(
87
142
  data={
88
143
  "id": node_id,
89
144
  "label": f"{unita_tipo}{us_num}",
90
145
  "parent": parent_row_id,
91
146
  "unit_type": unita_tipo,
92
- "period": periodo,
93
- "phase": fase,
147
+ # Visual fields — read by harris_creator_editor.js Cytoscape style
148
+ "color": style["color"],
149
+ "shape": style["shape"],
150
+ "border_color": style["border_color"],
151
+ "border_style": style["border_style"],
152
+ # Identity + provenance
94
153
  "us": us_num,
154
+ "us_number": us_num, # Properties panel reads this name
95
155
  "node_uuid": r[6],
156
+ # Temporal
157
+ "period": periodo,
158
+ "phase": fase,
159
+ # Descriptive fields the Properties panel populates
160
+ "description": r[9] or "", # d_stratigrafica
161
+ "area": (r[2] or "") if r[2] is not None else "",
162
+ "datazione": r[10] or "",
163
+ "file_path": r[11] or "",
96
164
  },
97
165
  position=pos,
98
166
  ))
@@ -124,15 +192,33 @@ class SwimlaneState:
124
192
 
125
193
  @staticmethod
126
194
  def _build_edges(us_rows, us_num_to_node_id: dict) -> list[CytoscapeElement]:
127
- """Parse rapporti for each US via EdgeRegistry (Spec 1)."""
195
+ """Parse rapporti for each US via EdgeRegistry, deduplicating canonical
196
+ triples ``(source, target, edge_name)``.
197
+
198
+ pyarchinit stores stratigraphic relationships from both sides
199
+ (``A copre B`` on row A AND ``B coperto da A`` on row B). Both tokens
200
+ resolve to the same canonical edge ``A overlies B`` — without
201
+ deduplication the editor renders the same arrow twice.
202
+
203
+ Symmetric edge types (``has_same_time``) are deduped on the
204
+ unordered pair so the bidirectional view doesn't show 2 lines.
205
+ """
128
206
  try:
129
207
  from pyarchinit_mini.graphproj.edge_registry import EdgeRegistry
130
208
  registry = EdgeRegistry()
131
209
  except Exception:
132
210
  return []
133
211
 
212
+ # Edges where direction is meaningless (twins).
213
+ SYMMETRIC = {"has_same_time"}
214
+ # Edges that are inverses of each other (A overlies B ≡ B is_after A
215
+ # in stratigraphic Harris semantics). When pyarchinit stores both
216
+ # sides on different US rows, the editor must show one arrow, not two.
217
+ INVERSE_PAIRS = {"overlies": "is_after", "is_after": "overlies"}
218
+
134
219
  edges: list[CytoscapeElement] = []
135
220
  edge_counter = 0
221
+ seen: set[tuple] = set()
136
222
 
137
223
  for r in us_rows:
138
224
  us_num = r[3]
@@ -157,6 +243,22 @@ class SwimlaneState:
157
243
  target_node_id = us_num_to_node_id.get(target_int)
158
244
  if target_node_id is None:
159
245
  continue
246
+
247
+ if edge_name in SYMMETRIC:
248
+ key = (edge_name, tuple(sorted((source_node_id, target_node_id))))
249
+ else:
250
+ key = (edge_name, source_node_id, target_node_id)
251
+ if key in seen:
252
+ continue
253
+ # Check the inverse pair (overlies vs is_after) under the same
254
+ # source/target pair — they represent the same edge.
255
+ inverse_name = INVERSE_PAIRS.get(edge_name)
256
+ if inverse_name is not None:
257
+ inverse_key = (inverse_name, target_node_id, source_node_id)
258
+ if inverse_key in seen:
259
+ continue
260
+ seen.add(key)
261
+
160
262
  edge_counter += 1
161
263
  edges.append(CytoscapeElement(data={
162
264
  "id": f"e{edge_counter}",
@@ -92,7 +92,10 @@ class Periodizzazione(BaseModel):
92
92
  # Confidence and notes
93
93
  affidabilita = Column(String(50)) # 'alta', 'media', 'bassa'
94
94
  note = Column(Text)
95
-
95
+
96
+ # Spec 1: stable node identity for s3dgraphy/EM graph round-trip
97
+ node_uuid = Column(String(36))
98
+
96
99
  # Relationships
97
100
  site_ref = relationship("Site", foreign_keys=[sito])
98
101
  initial_period = relationship("Period", foreign_keys=[period_id_initial])
@@ -97,6 +97,9 @@ class InventarioMateriali(BaseModel):
97
97
  photo_id = Column(Text)
98
98
  drawing_id = Column(Text)
99
99
 
100
+ # Spec 1: stable node identity for s3dgraphy/EM graph round-trip
101
+ node_uuid = Column(String(36))
102
+
100
103
  # Relationships
101
104
  site_ref = relationship("Site", foreign_keys=[sito],
102
105
  primaryjoin="InventarioMateriali.sito == Site.sito")
@@ -196,8 +196,11 @@ class US(BaseModel):
196
196
  rapporti2 = Column(Text)
197
197
  doc_usv = Column(Text)
198
198
 
199
+ # Spec 1: stable node identity for s3dgraphy/EM graph round-trip
200
+ node_uuid = Column(String(36))
201
+
199
202
  # Relationships
200
- site_ref = relationship("Site", foreign_keys=[sito],
203
+ site_ref = relationship("Site", foreign_keys=[sito],
201
204
  primaryjoin="US.sito == Site.sito")
202
205
 
203
206
  def __repr__(self):
@@ -481,17 +481,20 @@ def export_matrix(format):
481
481
 
482
482
  @harris_creator_bp.route('/api/node-types')
483
483
  def get_node_types():
484
+ """List Extended Matrix node types from VocabProvider (s3dgraphy JSON
485
+ catalogues). The previous implementation read a legacy YAML config and
486
+ so missed every node type added in s3dgraphy >= 0.1.42 (USVs/USVn/USN/
487
+ RSF/serSU/serUSD/serUSVn/serUSVs/TSU/UL/BR/SE...). With this refactor,
488
+ upgrading s3dgraphy is enough to make new types appear in the editor.
484
489
  """
485
- Get list of Extended Matrix node types with descriptions
486
- Now dynamically loaded from YAML configuration
487
- """
488
- # Map GraphML/yEd shapes to Cytoscape.js compatible shapes
490
+ # Map s3dgraphy yEd-style shapes to Cytoscape.js shapes.
489
491
  SHAPE_MAP = {
490
- 'note': 'roundrectangle', # Document shape -> rounded rectangle
491
- 'trapezium': 'triangle', # Trapezoid -> triangle
492
- 'trapezium2': 'vee', # Inverted trapezoid -> vee
493
- 'parallelogram': 'rhomboid', # Parallelogram -> rhomboid
494
- # Valid Cytoscape shapes pass through unchanged
492
+ 'note': 'roundrectangle',
493
+ 'trapezium': 'triangle',
494
+ 'trapezium2': 'vee',
495
+ 'parallelogram': 'rhomboid',
496
+ 'rounded_rectangle': 'roundrectangle',
497
+ # Cytoscape-native shapes pass through.
495
498
  'rectangle': 'rectangle',
496
499
  'roundrectangle': 'roundrectangle',
497
500
  'ellipse': 'ellipse',
@@ -503,49 +506,36 @@ def get_node_types():
503
506
  'star': 'star',
504
507
  'diamond': 'diamond',
505
508
  'vee': 'vee',
506
- 'rhomboid': 'rhomboid'
509
+ 'rhomboid': 'rhomboid',
507
510
  }
508
511
 
509
512
  try:
510
- config_manager = get_config_manager()
511
- all_types = config_manager.get_all_node_types()
512
-
513
- # Default colors for visual editor (can be customized in config)
514
- default_colors = {
515
- 'US': '#90CAF9', 'USM': '#FFAB91', 'USVA': '#CE93D8',
516
- 'USVB': '#E1BEE7', 'USVC': '#F48FB1', 'TU': '#80CBC4',
517
- 'USD': '#A5D6A7', 'SF': '#FFD54F', 'VSF': '#FFE082',
518
- 'CON': '#BCAAA4', 'DOC': '#B0BEC5', 'Extractor': '#EF9A9A',
519
- 'Combinar': '#9FA8DA', 'property': '#CFD8DC'
520
- }
513
+ from pyarchinit_mini.vocab.provider import VocabProvider
514
+ provider = VocabProvider.instance()
515
+ unit_types = provider.get_unit_types()
521
516
 
522
517
  node_types = []
523
- for tipo_id, config in all_types.items():
524
- visual = config.get('visual', {})
525
-
526
- # Build label
527
- label = f"{tipo_id} - {config.get('name', tipo_id)}"
528
- if config.get('description'):
529
- label += f" ({config.get('description')})"
530
-
531
- # Get shape from config and map to Cytoscape-compatible shape
532
- config_shape = visual.get('shape', 'rectangle')
533
- cytoscape_shape = SHAPE_MAP.get(config_shape, 'rectangle')
518
+ for ut in unit_types:
519
+ style = getattr(ut, "visual_style", None) or {}
520
+ shape = style.get("shape", "rectangle") if isinstance(style, dict) else getattr(style, "shape", "rectangle")
521
+ fill = style.get("fill_color", "#CCCCCC") if isinstance(style, dict) else getattr(style, "fill_color", "#CCCCCC")
522
+ description = getattr(ut, "description", "") or ""
523
+ label = ut.abbreviation
524
+ if description:
525
+ label = f"{ut.abbreviation} - {description[:80]}"
534
526
 
535
527
  node_types.append({
536
- 'value': tipo_id,
537
- 'label': label,
538
- 'color': default_colors.get(tipo_id, '#B0BEC5'), # Use default or gray
539
- 'shape': cytoscape_shape,
540
- 'custom': config.get('custom', False)
528
+ "value": ut.abbreviation,
529
+ "label": label,
530
+ "color": fill,
531
+ "shape": SHAPE_MAP.get(shape, "rectangle"),
532
+ "family": getattr(ut, "family", None),
541
533
  })
542
-
543
534
  return jsonify(node_types)
544
-
545
535
  except Exception as e:
546
- # Fallback to minimal list if config fails
547
536
  return jsonify([
548
- {'value': 'US', 'label': 'US - Standard Stratigraphic Unit', 'color': '#90CAF9', 'shape': 'rectangle'}
537
+ {"value": "US", "label": "US - Standard Stratigraphic Unit",
538
+ "color": "#F0F0F0", "shape": "rectangle"}
549
539
  ])
550
540
 
551
541
 
@@ -63,6 +63,26 @@
63
63
  padding: 15px;
64
64
  width: 300px;
65
65
  overflow-y: auto;
66
+ transition: width 0.2s ease, padding 0.2s ease;
67
+ }
68
+ #properties-panel.collapsed {
69
+ width: 36px;
70
+ padding: 6px 4px;
71
+ overflow: hidden;
72
+ }
73
+ #properties-panel.collapsed > *:not(.props-toggle-bar) {
74
+ display: none !important;
75
+ }
76
+ .props-toggle-bar {
77
+ display: flex;
78
+ justify-content: flex-end;
79
+ margin-bottom: 8px;
80
+ }
81
+ #properties-panel.collapsed .props-toggle-bar {
82
+ justify-content: center;
83
+ }
84
+ #properties-panel.collapsed .props-toggle-bar button .toggle-label {
85
+ display: none;
66
86
  }
67
87
 
68
88
  .property-field {
@@ -280,6 +300,12 @@
280
300
 
281
301
  <!-- Right Properties Panel -->
282
302
  <div id="properties-panel">
303
+ <div class="props-toggle-bar">
304
+ <button type="button" class="btn btn-sm btn-outline-secondary" onclick="togglePropertiesPanel()" title="Hide/show Properties panel">
305
+ <i class="fas fa-angle-double-right"></i>
306
+ <span class="toggle-label">Hide</span>
307
+ </button>
308
+ </div>
283
309
  <h6 class="mb-3"><i class="fas fa-cog"></i> Properties</h6>
284
310
 
285
311
  <div id="no-selection" class="text-center text-muted py-5">
@@ -442,6 +468,31 @@
442
468
  // work even if loadSwimlaneState() never succeeds (e.g. DB migration pending).
443
469
  window._currentSite = (document.getElementById('site-name') || {}).value || null;
444
470
 
471
+ // Properties panel collapse/expand (persists choice in localStorage).
472
+ function togglePropertiesPanel() {
473
+ const panel = document.getElementById('properties-panel');
474
+ if (!panel) return;
475
+ const collapsed = panel.classList.toggle('collapsed');
476
+ try { localStorage.setItem('harris_props_collapsed', collapsed ? '1' : '0'); } catch (e) {}
477
+ const icon = panel.querySelector('.props-toggle-bar button i');
478
+ if (icon) {
479
+ icon.classList.toggle('fa-angle-double-right', !collapsed);
480
+ icon.classList.toggle('fa-angle-double-left', collapsed);
481
+ }
482
+ const lbl = panel.querySelector('.props-toggle-bar .toggle-label');
483
+ if (lbl) lbl.textContent = collapsed ? 'Show' : 'Hide';
484
+ if (typeof cy !== 'undefined') {
485
+ setTimeout(() => { try { cy.resize(); cy.fit(undefined, 30); } catch(e){} }, 220);
486
+ }
487
+ }
488
+ window.addEventListener('DOMContentLoaded', () => {
489
+ try {
490
+ if (localStorage.getItem('harris_props_collapsed') === '1') {
491
+ togglePropertiesPanel();
492
+ }
493
+ } catch (e) {}
494
+ });
495
+
445
496
  async function loadSwimlaneState(site) {
446
497
  try {
447
498
  const r = await fetch(`/harris-creator/api/load/${encodeURIComponent(site)}`);
@@ -519,6 +570,25 @@ function renderSwimlaneState(state) {
519
570
  });
520
571
  });
521
572
 
573
+ // Run dagre layout inside each swimlane row so US nodes spread out
574
+ // horizontally and stratigraphic edges become visible. Without a layout
575
+ // pass, all US children of a row get stacked at the row's centroid and
576
+ // the edges collapse into invisible zero-length segments.
577
+ try {
578
+ cy.layout({
579
+ name: 'dagre',
580
+ rankDir: 'LR',
581
+ nodeSep: 50,
582
+ rankSep: 80,
583
+ fit: false,
584
+ }).run();
585
+ } catch (e) {
586
+ console.warn('dagre layout failed, falling back to grid:', e);
587
+ cy.layout({name: 'grid'}).run();
588
+ }
589
+ // Fit viewport so the user actually sees the rows + nodes + edges.
590
+ cy.fit(undefined, 30);
591
+
522
592
  // Save state references for later use
523
593
  window._currentSite = state.site;
524
594
  window._pendingChanges = state.pending_changes || {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyarchinit-mini
3
- Version: 2.4.3
3
+ Version: 2.4.5
4
4
  Summary: Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer
5
5
  Home-page: https://github.com/enzococca/pyarchinit-mini
6
6
  Author: PyArchInit Team
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pyarchinit-mini"
7
- version = "2.4.3"
7
+ version = "2.4.5"
8
8
  description = "Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer"
9
9
  readme = "README.md"
10
10
  license = {text = "GPL-2.0"}
@@ -34,6 +34,7 @@ CREATE TABLE us_table (
34
34
  id_us INTEGER PRIMARY KEY AUTOINCREMENT,
35
35
  sito TEXT, area TEXT, us INTEGER, unita_tipo TEXT,
36
36
  d_stratigrafica TEXT, d_interpretativa TEXT,
37
+ datazione TEXT, file_path TEXT,
37
38
  rapporti TEXT, node_uuid TEXT,
38
39
  periodo_iniziale TEXT, fase_iniziale TEXT,
39
40
  periodo_finale TEXT, fase_finale TEXT
@@ -62,11 +63,12 @@ for i in range(30):
62
63
  us_records.append(
63
64
  ("Volterra", "A", 1000 + i, "US",
64
65
  f"strat {i}", f"interp {i}",
66
+ f"100..200", None,
65
67
  rapporti, f"uuid-{i:03d}",
66
68
  period, phase, None, None)
67
69
  )
68
70
  c.executemany(
69
- "INSERT INTO us_table (sito, area, us, unita_tipo, d_stratigrafica, d_interpretativa, rapporti, node_uuid, periodo_iniziale, fase_iniziale, periodo_finale, fase_finale) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)",
71
+ "INSERT INTO us_table (sito, area, us, unita_tipo, d_stratigrafica, d_interpretativa, datazione, file_path, rapporti, node_uuid, periodo_iniziale, fase_iniziale, periodo_finale, fase_finale) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
70
72
  us_records,
71
73
  )
72
74
 
@@ -32,7 +32,8 @@ def client_no_session(tmp_path, monkeypatch):
32
32
  );
33
33
  CREATE TABLE us_table (
34
34
  id_us INTEGER PRIMARY KEY,
35
- sito TEXT, us INTEGER, unita_tipo TEXT,
35
+ sito TEXT, area TEXT, us INTEGER, unita_tipo TEXT,
36
+ d_stratigrafica TEXT, datazione TEXT, file_path TEXT,
36
37
  rapporti TEXT, node_uuid TEXT,
37
38
  periodo_iniziale TEXT, fase_iniziale TEXT
38
39
  );