MetaList 0.7.6__tar.gz → 0.8.0__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 (473) hide show
  1. {metalist-0.7.6/metalist.egg-info → metalist-0.8.0}/PKG-INFO +10 -5
  2. {metalist-0.7.6 → metalist-0.8.0}/README.md +9 -4
  3. {metalist-0.7.6 → metalist-0.8.0}/app/main.py +23 -5
  4. {metalist-0.7.6 → metalist-0.8.0}/app/services/diagnostics.py +52 -20
  5. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/api-error-diagnostics.js +5 -1
  6. {metalist-0.7.6 → metalist-0.8.0}/app/version.py +1 -1
  7. {metalist-0.7.6 → metalist-0.8.0/metalist.egg-info}/PKG-INFO +10 -5
  8. {metalist-0.7.6 → metalist-0.8.0}/MANIFEST.in +0 -0
  9. {metalist-0.7.6 → metalist-0.8.0}/app/__init__.py +0 -0
  10. {metalist-0.7.6 → metalist-0.8.0}/app/api/__init__.py +0 -0
  11. {metalist-0.7.6 → metalist-0.8.0}/app/api/deps.py +0 -0
  12. {metalist-0.7.6 → metalist-0.8.0}/app/api/dev.py +0 -0
  13. {metalist-0.7.6 → metalist-0.8.0}/app/api/middleware/auth.py +0 -0
  14. {metalist-0.7.6 → metalist-0.8.0}/app/api/note_requests.py +0 -0
  15. {metalist-0.7.6 → metalist-0.8.0}/app/api/request_auth.py +0 -0
  16. {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/ai.py +0 -0
  17. {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/app_updates.py +0 -0
  18. {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/auth.py +0 -0
  19. {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/backups.py +0 -0
  20. {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/files.py +0 -0
  21. {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/notes.py +0 -0
  22. {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/ontology.py +0 -0
  23. {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/reminders.py +0 -0
  24. {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/remote_images.py +0 -0
  25. {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/test.py +0 -0
  26. {metalist-0.7.6 → metalist-0.8.0}/app/api/transactions.py +0 -0
  27. {metalist-0.7.6 → metalist-0.8.0}/app/api/upload_limits.py +0 -0
  28. {metalist-0.7.6 → metalist-0.8.0}/app/config.py +0 -0
  29. {metalist-0.7.6 → metalist-0.8.0}/app/data_directory.py +0 -0
  30. {metalist-0.7.6 → metalist-0.8.0}/app/db/__init__.py +0 -0
  31. {metalist-0.7.6 → metalist-0.8.0}/app/db/backup_settings_sql.py +0 -0
  32. {metalist-0.7.6 → metalist-0.8.0}/app/db/engine.py +0 -0
  33. {metalist-0.7.6 → metalist-0.8.0}/app/db/file_schema.py +0 -0
  34. {metalist-0.7.6 → metalist-0.8.0}/app/db/file_session.py +0 -0
  35. {metalist-0.7.6 → metalist-0.8.0}/app/db/files_sql.py +0 -0
  36. {metalist-0.7.6 → metalist-0.8.0}/app/db/link_titles_sql.py +0 -0
  37. {metalist-0.7.6 → metalist-0.8.0}/app/db/live_recovery.py +0 -0
  38. {metalist-0.7.6 → metalist-0.8.0}/app/db/migrations.py +0 -0
  39. {metalist-0.7.6 → metalist-0.8.0}/app/db/notes_sql.py +0 -0
  40. {metalist-0.7.6 → metalist-0.8.0}/app/db/ontology_rules_sql.py +0 -0
  41. {metalist-0.7.6 → metalist-0.8.0}/app/db/reminders_sql.py +0 -0
  42. {metalist-0.7.6 → metalist-0.8.0}/app/db/retire_sounds.py +0 -0
  43. {metalist-0.7.6 → metalist-0.8.0}/app/db/schema.py +0 -0
  44. {metalist-0.7.6 → metalist-0.8.0}/app/db/search_history_sql.py +0 -0
  45. {metalist-0.7.6 → metalist-0.8.0}/app/db/session.py +0 -0
  46. {metalist-0.7.6 → metalist-0.8.0}/app/db/settings_sql.py +0 -0
  47. {metalist-0.7.6 → metalist-0.8.0}/app/db/tab_state_sql.py +0 -0
  48. {metalist-0.7.6 → metalist-0.8.0}/app/db/version.py +0 -0
  49. {metalist-0.7.6 → metalist-0.8.0}/app/encryption_audit.py +0 -0
  50. {metalist-0.7.6 → metalist-0.8.0}/app/exception_boundaries.py +0 -0
  51. {metalist-0.7.6 → metalist-0.8.0}/app/https_proxy.py +0 -0
  52. {metalist-0.7.6 → metalist-0.8.0}/app/models/commands.py +0 -0
  53. {metalist-0.7.6 → metalist-0.8.0}/app/models/database.py +0 -0
  54. {metalist-0.7.6 → metalist-0.8.0}/app/models/entities.py +0 -0
  55. {metalist-0.7.6 → metalist-0.8.0}/app/models/enums.py +0 -0
  56. {metalist-0.7.6 → metalist-0.8.0}/app/models/linked_list.py +0 -0
  57. {metalist-0.7.6 → metalist-0.8.0}/app/models/list_operations.py +0 -0
  58. {metalist-0.7.6 → metalist-0.8.0}/app/models/list_traversal.py +0 -0
  59. {metalist-0.7.6 → metalist-0.8.0}/app/models/note_crud.py +0 -0
  60. {metalist-0.7.6 → metalist-0.8.0}/app/models/utils.py +0 -0
  61. {metalist-0.7.6 → metalist-0.8.0}/app/network_settings.py +0 -0
  62. {metalist-0.7.6 → metalist-0.8.0}/app/presentation/__init__.py +0 -0
  63. {metalist-0.7.6 → metalist-0.8.0}/app/presentation/render/__init__.py +0 -0
  64. {metalist-0.7.6 → metalist-0.8.0}/app/presentation/render/note_renderer.py +0 -0
  65. {metalist-0.7.6 → metalist-0.8.0}/app/presentation/templates.py +0 -0
  66. {metalist-0.7.6 → metalist-0.8.0}/app/security/authenticated_logging.py +0 -0
  67. {metalist-0.7.6 → metalist-0.8.0}/app/security/encryption.py +0 -0
  68. {metalist-0.7.6 → metalist-0.8.0}/app/security/http_error_diagnostics.py +0 -0
  69. {metalist-0.7.6 → metalist-0.8.0}/app/security/http_headers.py +0 -0
  70. {metalist-0.7.6 → metalist-0.8.0}/app/security/note_html.py +0 -0
  71. {metalist-0.7.6 → metalist-0.8.0}/app/security/request_boundary.py +0 -0
  72. {metalist-0.7.6 → metalist-0.8.0}/app/security/request_hosts.py +0 -0
  73. {metalist-0.7.6 → metalist-0.8.0}/app/security/sensitive_cache.py +0 -0
  74. {metalist-0.7.6 → metalist-0.8.0}/app/security/sensitive_logging.py +0 -0
  75. {metalist-0.7.6 → metalist-0.8.0}/app/security/shell_execution.py +0 -0
  76. {metalist-0.7.6 → metalist-0.8.0}/app/security/validation_errors.py +0 -0
  77. {metalist-0.7.6 → metalist-0.8.0}/app/server_runtime.py +0 -0
  78. {metalist-0.7.6 → metalist-0.8.0}/app/services/__init__.py +0 -0
  79. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/__init__.py +0 -0
  80. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/actions.py +0 -0
  81. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/cloud_privacy.py +0 -0
  82. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/context.py +0 -0
  83. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/evidence_serialization.py +0 -0
  84. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/help_catalog.py +0 -0
  85. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/history.py +0 -0
  86. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/inference.py +0 -0
  87. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/investigation.py +0 -0
  88. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/judging.py +0 -0
  89. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/menu_actions.py +0 -0
  90. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/model_policy.py +0 -0
  91. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/openai_cost_tracking.py +0 -0
  92. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/openai_inference.py +0 -0
  93. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/permissions.py +0 -0
  94. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/prompt_settings.py +0 -0
  95. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/prompts/__init__.py +0 -0
  96. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/prompts/final-response.md +0 -0
  97. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/prompts/help-response.md +0 -0
  98. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/prompts/system.md +0 -0
  99. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/prompts/tool-result.md +0 -0
  100. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/retrieval_settings.py +0 -0
  101. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/runtime.py +0 -0
  102. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/scope.py +0 -0
  103. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skill_settings.py +0 -0
  104. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/__init__.py +0 -0
  105. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-ai.md +0 -0
  106. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-data.md +0 -0
  107. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-formatting.md +0 -0
  108. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-menus.md +0 -0
  109. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-notes.md +0 -0
  110. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-privacy.md +0 -0
  111. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-references.md +0 -0
  112. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-reminders.md +0 -0
  113. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-search.md +0 -0
  114. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-tags.md +0 -0
  115. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/scoped-investigation.md +0 -0
  116. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/structured_inference.py +0 -0
  117. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/tagging.py +0 -0
  118. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/tagging_run.py +0 -0
  119. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/token_estimation.py +0 -0
  120. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/tools.py +0 -0
  121. {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/trace.py +0 -0
  122. {metalist-0.7.6 → metalist-0.8.0}/app/services/ai_chat.py +0 -0
  123. {metalist-0.7.6 → metalist-0.8.0}/app/services/ai_chat_rendering.py +0 -0
  124. {metalist-0.7.6 → metalist-0.8.0}/app/services/ai_chat_stream.py +0 -0
  125. {metalist-0.7.6 → metalist-0.8.0}/app/services/app_update_worker.py +0 -0
  126. {metalist-0.7.6 → metalist-0.8.0}/app/services/app_updates.py +0 -0
  127. {metalist-0.7.6 → metalist-0.8.0}/app/services/auth.py +0 -0
  128. {metalist-0.7.6 → metalist-0.8.0}/app/services/auth_cache_state.py +0 -0
  129. {metalist-0.7.6 → metalist-0.8.0}/app/services/auth_service.py +0 -0
  130. {metalist-0.7.6 → metalist-0.8.0}/app/services/backlink_index.py +0 -0
  131. {metalist-0.7.6 → metalist-0.8.0}/app/services/backlinks.py +0 -0
  132. {metalist-0.7.6 → metalist-0.8.0}/app/services/backup_service.py +0 -0
  133. {metalist-0.7.6 → metalist-0.8.0}/app/services/backup_settings_service.py +0 -0
  134. {metalist-0.7.6 → metalist-0.8.0}/app/services/bulk_operation.py +0 -0
  135. {metalist-0.7.6 → metalist-0.8.0}/app/services/client_state_service.py +0 -0
  136. {metalist-0.7.6 → metalist-0.8.0}/app/services/content_cache.py +0 -0
  137. {metalist-0.7.6 → metalist-0.8.0}/app/services/content_formatting.py +0 -0
  138. {metalist-0.7.6 → metalist-0.8.0}/app/services/embedded_references.py +0 -0
  139. {metalist-0.7.6 → metalist-0.8.0}/app/services/encryption.py +0 -0
  140. {metalist-0.7.6 → metalist-0.8.0}/app/services/exception_capture.py +0 -0
  141. {metalist-0.7.6 → metalist-0.8.0}/app/services/file_registry.py +0 -0
  142. {metalist-0.7.6 → metalist-0.8.0}/app/services/file_storage.py +0 -0
  143. {metalist-0.7.6 → metalist-0.8.0}/app/services/footnote_layout.py +0 -0
  144. {metalist-0.7.6 → metalist-0.8.0}/app/services/footnote_rendering.py +0 -0
  145. {metalist-0.7.6 → metalist-0.8.0}/app/services/hierarchy.py +0 -0
  146. {metalist-0.7.6 → metalist-0.8.0}/app/services/html_export.py +0 -0
  147. {metalist-0.7.6 → metalist-0.8.0}/app/services/html_unformatting.py +0 -0
  148. {metalist-0.7.6 → metalist-0.8.0}/app/services/hydration_state.py +0 -0
  149. {metalist-0.7.6 → metalist-0.8.0}/app/services/image_size_formatting.py +0 -0
  150. {metalist-0.7.6 → metalist-0.8.0}/app/services/inline_image_occurrences.py +0 -0
  151. {metalist-0.7.6 → metalist-0.8.0}/app/services/input_errors.py +0 -0
  152. {metalist-0.7.6 → metalist-0.8.0}/app/services/integrity.py +0 -0
  153. {metalist-0.7.6 → metalist-0.8.0}/app/services/latex_rendering.py +0 -0
  154. {metalist-0.7.6 → metalist-0.8.0}/app/services/link_titles.py +0 -0
  155. {metalist-0.7.6 → metalist-0.8.0}/app/services/login_rate_limit.py +0 -0
  156. {metalist-0.7.6 → metalist-0.8.0}/app/services/maintenance_mode.py +0 -0
  157. {metalist-0.7.6 → metalist-0.8.0}/app/services/markdown_rendering.py +0 -0
  158. {metalist-0.7.6 → metalist-0.8.0}/app/services/namespace_deletion_jobs.py +0 -0
  159. {metalist-0.7.6 → metalist-0.8.0}/app/services/namespace_deletion_worker.py +0 -0
  160. {metalist-0.7.6 → metalist-0.8.0}/app/services/namespace_rename_jobs.py +0 -0
  161. {metalist-0.7.6 → metalist-0.8.0}/app/services/namespace_rename_worker.py +0 -0
  162. {metalist-0.7.6 → metalist-0.8.0}/app/services/namespace_runtime_guard.py +0 -0
  163. {metalist-0.7.6 → metalist-0.8.0}/app/services/namespace_switcher.py +0 -0
  164. {metalist-0.7.6 → metalist-0.8.0}/app/services/note_fullscreen.py +0 -0
  165. {metalist-0.7.6 → metalist-0.8.0}/app/services/note_image_tags.py +0 -0
  166. {metalist-0.7.6 → metalist-0.8.0}/app/services/note_ordering.py +0 -0
  167. {metalist-0.7.6 → metalist-0.8.0}/app/services/note_store.py +0 -0
  168. {metalist-0.7.6 → metalist-0.8.0}/app/services/ontology_rules_store.py +0 -0
  169. {metalist-0.7.6 → metalist-0.8.0}/app/services/openai_credentials.py +0 -0
  170. {metalist-0.7.6 → metalist-0.8.0}/app/services/password_note_fields.py +0 -0
  171. {metalist-0.7.6 → metalist-0.8.0}/app/services/reference_presentation.py +0 -0
  172. {metalist-0.7.6 → metalist-0.8.0}/app/services/reminders.py +0 -0
  173. {metalist-0.7.6 → metalist-0.8.0}/app/services/remote_image_proxy.py +0 -0
  174. {metalist-0.7.6 → metalist-0.8.0}/app/services/request_recovery.py +0 -0
  175. {metalist-0.7.6 → metalist-0.8.0}/app/services/resource_limits.py +0 -0
  176. {metalist-0.7.6 → metalist-0.8.0}/app/services/root_sorting.py +0 -0
  177. {metalist-0.7.6 → metalist-0.8.0}/app/services/runtime_generation.py +0 -0
  178. {metalist-0.7.6 → metalist-0.8.0}/app/services/runtime_hardening.py +0 -0
  179. {metalist-0.7.6 → metalist-0.8.0}/app/services/runtime_lock.py +0 -0
  180. {metalist-0.7.6 → metalist-0.8.0}/app/services/search_history.py +0 -0
  181. {metalist-0.7.6 → metalist-0.8.0}/app/services/search_history_storage.py +0 -0
  182. {metalist-0.7.6 → metalist-0.8.0}/app/services/search_index.py +0 -0
  183. {metalist-0.7.6 → metalist-0.8.0}/app/services/search_query.py +0 -0
  184. {metalist-0.7.6 → metalist-0.8.0}/app/services/search_text.py +0 -0
  185. {metalist-0.7.6 → metalist-0.8.0}/app/services/selected_text_tag.py +0 -0
  186. {metalist-0.7.6 → metalist-0.8.0}/app/services/self_update.py +0 -0
  187. {metalist-0.7.6 → metalist-0.8.0}/app/services/session_timeout_service.py +0 -0
  188. {metalist-0.7.6 → metalist-0.8.0}/app/services/shell_session_service.py +0 -0
  189. {metalist-0.7.6 → metalist-0.8.0}/app/services/snapshot.py +0 -0
  190. {metalist-0.7.6 → metalist-0.8.0}/app/services/store.py +0 -0
  191. {metalist-0.7.6 → metalist-0.8.0}/app/services/structured_note_renderers.py +0 -0
  192. {metalist-0.7.6 → metalist-0.8.0}/app/services/sync.py +0 -0
  193. {metalist-0.7.6 → metalist-0.8.0}/app/services/sync_state.py +0 -0
  194. {metalist-0.7.6 → metalist-0.8.0}/app/services/tab_state.py +0 -0
  195. {metalist-0.7.6 → metalist-0.8.0}/app/services/tag_case.py +0 -0
  196. {metalist-0.7.6 → metalist-0.8.0}/app/services/tag_ontology.py +0 -0
  197. {metalist-0.7.6 → metalist-0.8.0}/app/services/tag_rename.py +0 -0
  198. {metalist-0.7.6 → metalist-0.8.0}/app/services/tag_suggestions.py +0 -0
  199. {metalist-0.7.6 → metalist-0.8.0}/app/services/tag_term_matching.py +0 -0
  200. {metalist-0.7.6 → metalist-0.8.0}/app/services/test_reset.py +0 -0
  201. {metalist-0.7.6 → metalist-0.8.0}/app/services/tokens.py +0 -0
  202. {metalist-0.7.6 → metalist-0.8.0}/app/services/undo_state.py +0 -0
  203. {metalist-0.7.6 → metalist-0.8.0}/app/services/update_backups.py +0 -0
  204. {metalist-0.7.6 → metalist-0.8.0}/app/services/update_installer.py +0 -0
  205. {metalist-0.7.6 → metalist-0.8.0}/app/services/update_preflight.py +0 -0
  206. {metalist-0.7.6 → metalist-0.8.0}/app/services/view_cache.py +0 -0
  207. {metalist-0.7.6 → metalist-0.8.0}/app/services/view_diff.py +0 -0
  208. {metalist-0.7.6 → metalist-0.8.0}/app/services/view_state.py +0 -0
  209. {metalist-0.7.6 → metalist-0.8.0}/app/services/windows_process_control.py +0 -0
  210. {metalist-0.7.6 → metalist-0.8.0}/app/startup_environment.py +0 -0
  211. {metalist-0.7.6 → metalist-0.8.0}/app/startup_js_sanity.py +0 -0
  212. {metalist-0.7.6 → metalist-0.8.0}/app/startup_sanity.py +0 -0
  213. {metalist-0.7.6 → metalist-0.8.0}/app/startup_sanity_config.py +0 -0
  214. {metalist-0.7.6 → metalist-0.8.0}/app/static/config/agent-menu-actions.json +0 -0
  215. {metalist-0.7.6 → metalist-0.8.0}/app/static/config/command_palette_tags.json +0 -0
  216. {metalist-0.7.6 → metalist-0.8.0}/app/static/css/floating-notes.css +0 -0
  217. {metalist-0.7.6 → metalist-0.8.0}/app/static/css/forms.css +0 -0
  218. {metalist-0.7.6 → metalist-0.8.0}/app/static/css/main.css +0 -0
  219. {metalist-0.7.6 → metalist-0.8.0}/app/static/img/favicon.ico +0 -0
  220. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/locked.js +0 -0
  221. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/main.js +0 -0
  222. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/activity-tracker.js +0 -0
  223. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/agent-menu-actions.js +0 -0
  224. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/agent-prompt-service.js +0 -0
  225. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/agent-retrieval-settings.js +0 -0
  226. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/ai-agent-debug-view.js +0 -0
  227. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/ai-chat-api.js +0 -0
  228. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/ai-chat-panel-controller.js +0 -0
  229. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/ai-chat-panel-service.js +0 -0
  230. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/ai-thinking-level-service.js +0 -0
  231. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/bulk-elapsed-clock.js +0 -0
  232. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/bulk-proposal-ui.js +0 -0
  233. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/cloud-privacy-policy.js +0 -0
  234. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/proposal-menu.js +0 -0
  235. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/api-client.js +0 -0
  236. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/api-failure-classification-service.js +0 -0
  237. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/app-update-service.js +0 -0
  238. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/application-state.js +0 -0
  239. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/async-result.js +0 -0
  240. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/auth.js +0 -0
  241. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/client-state-api.js +0 -0
  242. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/client-state-migration.js +0 -0
  243. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/activation-auth-policy.js +0 -0
  244. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/backup-command-availability.js +0 -0
  245. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/click-activation-service.js +0 -0
  246. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/command-palette-controller.js +0 -0
  247. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/endpoint-registry.js +0 -0
  248. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/note-layout-preferences.js +0 -0
  249. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/preferences-store.js +0 -0
  250. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/tag-config-loader.js +0 -0
  251. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/usage-store.js +0 -0
  252. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/config.js +0 -0
  253. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/connectivity-monitor.js +0 -0
  254. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/context-menu/context-menu-registry.js +0 -0
  255. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/context-menu/context-menu-service.js +0 -0
  256. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/context-menu/context-menu-target-service.js +0 -0
  257. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/context-menu/input-caret-service.js +0 -0
  258. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/disconnect-editing-state-service.js +0 -0
  259. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/dom-utils-fixed.js +0 -0
  260. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/dom-utils.js +0 -0
  261. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/editor-commands.js +0 -0
  262. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/editor-selection.js +0 -0
  263. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/editor-toolbar.js +0 -0
  264. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/elapsed-time.js +0 -0
  265. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/error-handler.js +0 -0
  266. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/error-overlay.js +0 -0
  267. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/expected-errors.js +0 -0
  268. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/location-flags.js +0 -0
  269. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/login-namespace-picker.js +0 -0
  270. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/maintenance.js +0 -0
  271. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/agent-prompt-editor-modal.js +0 -0
  272. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/ai-agent-settings-modal.js +0 -0
  273. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/alphabetize-root-notes-modal.js +0 -0
  274. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/backup-restore-modal.js +0 -0
  275. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/backup-result-modal.js +0 -0
  276. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/backup-retention-modal.js +0 -0
  277. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/backup-settings-modal.js +0 -0
  278. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/base-modal.js +0 -0
  279. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/confirmation-modal.js +0 -0
  280. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/delete-namespace-modal.js +0 -0
  281. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/delete-namespace-validation.js +0 -0
  282. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/help-modal.js +0 -0
  283. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/namespace-loading-page.js +0 -0
  284. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/namespace-modals.js +0 -0
  285. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/namespace-ports-profile.js +0 -0
  286. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/namespace-rename-validation.js +0 -0
  287. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/note-layout-appearance-modal.js +0 -0
  288. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/ontology-modal.js +0 -0
  289. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/password-modal.js +0 -0
  290. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/prioritize-modal.js +0 -0
  291. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/random-password-modal.js +0 -0
  292. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/reminder-modal.js +0 -0
  293. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/reset-updated-at-modal.js +0 -0
  294. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/search-suggestion-statistics-modal.js +0 -0
  295. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/session-timeout-modal.js +0 -0
  296. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/version-info-modal.js +0 -0
  297. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/actions/content-actions.js +0 -0
  298. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/actions/history-actions.js +0 -0
  299. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/actions/note-actions.js +0 -0
  300. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/actions/search-actions.js +0 -0
  301. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/actions/selection-actions.js +0 -0
  302. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/actions/ui-actions.js +0 -0
  303. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/events/context-menu-events.js +0 -0
  304. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/events/focus-events.js +0 -0
  305. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/events/inactivity-events.js +0 -0
  306. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/events/input-events.js +0 -0
  307. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/events/keyboard-events.js +0 -0
  308. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/events/mouse-events.js +0 -0
  309. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/events/search-events.js +0 -0
  310. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/mode-context.js +0 -0
  311. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/mode-logger.js +0 -0
  312. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/mode-manager-controller.js +0 -0
  313. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/add-style-service.js +0 -0
  314. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/animated-scroll-service.js +0 -0
  315. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/backlinks-navigation-service.js +0 -0
  316. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/backlinks-panel-service.js +0 -0
  317. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/clipboard-shortcut-policy-service.js +0 -0
  318. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/collapse-affordance-service.js +0 -0
  319. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/collapse-editing-policy-service.js +0 -0
  320. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/command-gate-service.js +0 -0
  321. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/context-menu-target-service.js +0 -0
  322. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/deselect-selection-state-service.js +0 -0
  323. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/differential-view-service.js +0 -0
  324. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/edit-session-collapse-policy-service.js +0 -0
  325. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/edit-session-collapse-service.js +0 -0
  326. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/embedded-image-service.js +0 -0
  327. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/file-drop-policy-service.js +0 -0
  328. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/file-image-preview-service.js +0 -0
  329. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/file-reference-service.js +0 -0
  330. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/filtered-refresh-selection-service.js +0 -0
  331. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/floating-note-dom.js +0 -0
  332. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/floating-note-layout.js +0 -0
  333. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/floating-note-service.js +0 -0
  334. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/footnote-navigation-service.js +0 -0
  335. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/history-selection-policy-service.js +0 -0
  336. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/history-shortcut-policy-service.js +0 -0
  337. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/html-paste-sanitizer-service.js +0 -0
  338. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/image-context-menu-action-service.js +0 -0
  339. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/image-file-insert-choice-modal-service.js +0 -0
  340. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/infinite-scroll-service.js +0 -0
  341. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/link-context-menu-action-service.js +0 -0
  342. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/link-title-prefetch-service.js +0 -0
  343. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/markdown-render-service.js +0 -0
  344. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/mermaid-render-service.js +0 -0
  345. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-click-target-service.js +0 -0
  346. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-clipboard-write-service.js +0 -0
  347. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-collapse-animation-service.js +0 -0
  348. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-context-menu-action-service.js +0 -0
  349. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-delete-shortcut-policy-service.js +0 -0
  350. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-drag-service.js +0 -0
  351. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-fullscreen-service.js +0 -0
  352. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-reposition-animation-service.js +0 -0
  353. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-split-service.js +0 -0
  354. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-timestamp-hover-service.js +0 -0
  355. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/password-clipboard-service.js +0 -0
  356. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/polling-service.js +0 -0
  357. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/reference-source-navigation-service.js +0 -0
  358. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/remote-image-proxy-service.js +0 -0
  359. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/remove-formatting-service.js +0 -0
  360. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/root-date-separator-service.js +0 -0
  361. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/root-sort-indicator-service.js +0 -0
  362. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/root-sort-service.js +0 -0
  363. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/scroll-anchor-service.js +0 -0
  364. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/scroll-restoration-service.js +0 -0
  365. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/scroll-to-top-service.js +0 -0
  366. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-contexts-overlay-service.js +0 -0
  367. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-debounce-service.js +0 -0
  368. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-input-service.js +0 -0
  369. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-interaction-service.js +0 -0
  370. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-redaction-reveal-service.js +0 -0
  371. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-suggestion-statistics-service.js +0 -0
  372. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-suggestion-window-labels-service.js +0 -0
  373. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-suggestion-windows-service.js +0 -0
  374. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-suggestions-service.js +0 -0
  375. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-syntax-service.js +0 -0
  376. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/selected-formatting-removal-service.js +0 -0
  377. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/selected-text-tag-service.js +0 -0
  378. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/shell-output-service.js +0 -0
  379. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tab-dom-cache-service.js +0 -0
  380. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tab-drag-service.js +0 -0
  381. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tab-duplication-service.js +0 -0
  382. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tab-state-service.js +0 -0
  383. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tag-bar-service.js +0 -0
  384. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tag-input-selection-service.js +0 -0
  385. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tag-proposal-service.js +0 -0
  386. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tag-suggestions-service.js +0 -0
  387. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tag-syntax-service.js +0 -0
  388. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/todo-toggle-editing-service.js +0 -0
  389. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/untagged-view-indicator-service.js +0 -0
  390. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/view-mode-search-shortcut-service.js +0 -0
  391. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/note-html-sanitizer.js +0 -0
  392. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/password-generator.js +0 -0
  393. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/password-operation-response.js +0 -0
  394. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/password-policy.js +0 -0
  395. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/password-strength.js +0 -0
  396. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/reminder-store.js +0 -0
  397. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/reminder-surface-service.js +0 -0
  398. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/selection-markers.js +0 -0
  399. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/session-auth.js +0 -0
  400. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/tag-token.js +0 -0
  401. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/uuid.js +0 -0
  402. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/namespace-deleted.js +0 -0
  403. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/namespace-renamed.js +0 -0
  404. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/vendor/dompurify-3.4.13.LICENSE.txt +0 -0
  405. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/vendor/dompurify-3.4.13.min.js +0 -0
  406. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/vendor/markdown-it-14.3.2.LICENSE.txt +0 -0
  407. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/vendor/markdown-it-14.3.2.min.js +0 -0
  408. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/vendor/mermaid-11.16.1.LICENSE.txt +0 -0
  409. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/vendor/mermaid-11.16.1.min.js +0 -0
  410. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/vendor/zxcvbn-4.4.2.LICENSE.txt +0 -0
  411. {metalist-0.7.6 → metalist-0.8.0}/app/static/js/vendor/zxcvbn-4.4.2.js +0 -0
  412. {metalist-0.7.6 → metalist-0.8.0}/app/static/note-html-policy.json +0 -0
  413. {metalist-0.7.6 → metalist-0.8.0}/app/static/video/login-startup.mp4 +0 -0
  414. {metalist-0.7.6 → metalist-0.8.0}/app/templates/base.html +0 -0
  415. {metalist-0.7.6 → metalist-0.8.0}/app/templates/index.html +0 -0
  416. {metalist-0.7.6 → metalist-0.8.0}/app/templates/locked.html +0 -0
  417. {metalist-0.7.6 → metalist-0.8.0}/app/templates/maintenance.html +0 -0
  418. {metalist-0.7.6 → metalist-0.8.0}/app/templates/namespace_deleted.html +0 -0
  419. {metalist-0.7.6 → metalist-0.8.0}/app/templates/namespace_renamed.html +0 -0
  420. {metalist-0.7.6 → metalist-0.8.0}/app/templates/notes_list.html +0 -0
  421. {metalist-0.7.6 → metalist-0.8.0}/app/upload_limits.py +0 -0
  422. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/__init__.py +0 -0
  423. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/add_selected_text_tag.py +0 -0
  424. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/alphabetize_root_notes.py +0 -0
  425. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/base.py +0 -0
  426. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/bulk_tag_proposals.py +0 -0
  427. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/collapse.py +0 -0
  428. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/copy_note.py +0 -0
  429. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/create_child.py +0 -0
  430. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/create_note.py +0 -0
  431. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/create_sibling.py +0 -0
  432. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/delete_subtree.py +0 -0
  433. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/delete_tag.py +0 -0
  434. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/expand.py +0 -0
  435. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/indent.py +0 -0
  436. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/lock.py +0 -0
  437. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/move.py +0 -0
  438. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/move_to_top.py +0 -0
  439. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/outdent.py +0 -0
  440. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/paste_child.py +0 -0
  441. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/paste_sibling.py +0 -0
  442. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/prefetch_link_titles.py +0 -0
  443. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/prioritize.py +0 -0
  444. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/redo.py +0 -0
  445. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/rename_tag.py +0 -0
  446. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/reset_updated_at.py +0 -0
  447. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/resize_image.py +0 -0
  448. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/run_shell.py +0 -0
  449. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/search_comment_autofill.py +0 -0
  450. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/search_context_tags.py +0 -0
  451. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/set_collapse_bulk.py +0 -0
  452. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/set_collapse_in_context.py +0 -0
  453. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/split_note.py +0 -0
  454. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/tag_proposals.py +0 -0
  455. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/toggle_reference_mode.py +0 -0
  456. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/toggle_todo_done.py +0 -0
  457. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/undo.py +0 -0
  458. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/unformat_content.py +0 -0
  459. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/update_content.py +0 -0
  460. {metalist-0.7.6 → metalist-0.8.0}/app/usecases/view.py +0 -0
  461. {metalist-0.7.6 → metalist-0.8.0}/app/utils/__init__.py +0 -0
  462. {metalist-0.7.6 → metalist-0.8.0}/app/utils/encryption.py +0 -0
  463. {metalist-0.7.6 → metalist-0.8.0}/app/utils/text_utils.py +0 -0
  464. {metalist-0.7.6 → metalist-0.8.0}/convert-from-legacy.py +0 -0
  465. {metalist-0.7.6 → metalist-0.8.0}/main.py +0 -0
  466. {metalist-0.7.6 → metalist-0.8.0}/metalist.egg-info/SOURCES.txt +0 -0
  467. {metalist-0.7.6 → metalist-0.8.0}/metalist.egg-info/dependency_links.txt +0 -0
  468. {metalist-0.7.6 → metalist-0.8.0}/metalist.egg-info/entry_points.txt +0 -0
  469. {metalist-0.7.6 → metalist-0.8.0}/metalist.egg-info/requires.txt +0 -0
  470. {metalist-0.7.6 → metalist-0.8.0}/metalist.egg-info/top_level.txt +0 -0
  471. {metalist-0.7.6 → metalist-0.8.0}/pyproject.toml +0 -0
  472. {metalist-0.7.6 → metalist-0.8.0}/scripts/generate-lan-cert.sh +0 -0
  473. {metalist-0.7.6 → metalist-0.8.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: metalist
3
- Version: 0.7.6
3
+ Version: 0.8.0
4
4
  Summary: A minimalist single-user note-taking app with SSR, fast in-memory tree operations, and efficient sync.
5
5
  Project-URL: Homepage, https://github.com/evolvingstuff/metalist
6
6
  Project-URL: Repository, https://github.com/evolvingstuff/metalist
@@ -48,6 +48,11 @@ A minimalist single-user note-taking app focused on server-side rendering (SSR),
48
48
  - Multi-tab search contexts with server-persisted scroll/search state (survives browser restarts)
49
49
  - Manual namespace backups/restores to a user-selected backup folder with retention controls
50
50
 
51
+ ## Changes in 0.8.0
52
+
53
+ - Error diagnostics now record safe request IDs, exception types, and source locations through Loguru; full tracebacks are available only in authenticated encrypted logs.
54
+ - Releases run the full cross-platform matrix once on the `main` push. The tag publishes those exact tested distributions without rerunning the matrix.
55
+
51
56
  ## Changes in 0.7.5
52
57
 
53
58
  - Unexpected API 500 errors now show the exception class and MetaList source line in the browser, without exposing note contents, exception messages, or local filesystem paths.
@@ -57,7 +62,7 @@ A minimalist single-user note-taking app focused on server-side rendering (SSR),
57
62
 
58
63
  - Updates use a private, checksum-verified uv release on Windows, macOS, and Linux. The updater does not execute a user-installed uv, and it revalidates both the cached official archive and extracted executable before each use.
59
64
  - The HTTPS listener retries one bodyless safe request after a transient backend reset, records final transport failures server-side, and never replays a mutation or request body.
60
- - Release CI builds one distribution pair, starts independent platform/Python, installed-update, browser-smoke, and browser-soak gates in parallel, and caches only hash- or lockfile-verified dependencies. Cross-platform runtime changes must pass branch CI before merge.
65
+ - Release CI builds one distribution pair, starts independent platform/Python, installed-update, browser-smoke, and browser-soak gates in parallel, and caches only hash- or lockfile-verified dependencies.
61
66
 
62
67
  ## Changes in 0.7.3
63
68
 
@@ -356,9 +361,9 @@ This repo now packages itself under the PyPI distribution name `metalist`. Curre
356
361
 
357
362
  Recommended release path:
358
363
  1. In the existing PyPI project `metalist`, configure GitHub Trusted Publishing for `evolvingstuff/metalist` and the workflow file `.github/workflows/publish-pypi.yml`.
359
- 2. Push the candidate commit to a branch and wait for the `Publish to PyPI` validation workflow to pass for that exact commit. GitHub-hosted Windows, macOS, and Linux runners install the built wheel and test application startup outside the source checkout on Python 3.10 through 3.14. Every matrix job also exercises the real `metalist update` path with uv, backups, interpreter preservation, and two-namespace restart against a local release index. The old-version fixture carries the candidate updater so this validates the mechanism being shipped; it does not retroactively fix older installed updaters. You do not need those operating systems locally. Archive verification also checks runtime files, including agent Markdown resources, against both the wheel and source distribution.
360
- 3. Only after every required check passes, create and push the release tag for that same commit. Any intervening change requires a new validation run before tagging. Branch and pull-request runs validate without publishing.
361
- 4. The tag workflow repeats validation and publishes the same artifacts tested by its full matrix. Manual publication also requires all checks to pass. Users can then run it with `uvx metalist`, install it persistently with `uv tool install metalist`, or install it with `pip install metalist`.
364
+ 2. Develop and review the candidate on a feature branch with focused checks. Merge it into `main` and push `main` once. This runs the full `Publish to PyPI` validation matrix for that exact commit. GitHub-hosted Windows, macOS, and Linux runners install the built wheel and test application startup outside the source checkout on Python 3.10 through 3.14. Every installed-package matrix job also exercises the real `metalist update` path with uv, backups, interpreter preservation, and two-namespace restart against a local release index. The old-version fixture carries the candidate updater so this validates the mechanism being shipped; it does not retroactively fix older installed updaters. You do not need those operating systems locally. Archive verification checks runtime files, including agent Markdown resources, against both the wheel and source distribution.
365
+ 3. Wait for the exact-commit main release matrix to pass, then run `.venv/bin/python scripts/release.py X.Y.Z` to create and push the tag. Any intervening change requires a new main validation run before tagging.
366
+ 4. The tag job independently verifies every main-job conclusion and reuses the wheel and source distribution from that run for GitHub Trusted Publishing; it does not repeat the matrix. Manual dispatch cannot publish. The release driver compares PyPI hashes with the tested artifact and checks a clean public install. Users can then run it with `uvx metalist`, install it persistently with `uv tool install metalist`, or install it with `pip install metalist`.
362
367
 
363
368
  If `--input` is omitted, a file picker opens (when `tkinter` and its native `_tkinter` component are available).
364
369
  Notes tagged with `@implies` are converted into ontology rules and are not imported as notes. Legacy rules that are invalid under the current ontology grammar are reported and skipped while valid rules continue importing.
@@ -12,6 +12,11 @@ A minimalist single-user note-taking app focused on server-side rendering (SSR),
12
12
  - Multi-tab search contexts with server-persisted scroll/search state (survives browser restarts)
13
13
  - Manual namespace backups/restores to a user-selected backup folder with retention controls
14
14
 
15
+ ## Changes in 0.8.0
16
+
17
+ - Error diagnostics now record safe request IDs, exception types, and source locations through Loguru; full tracebacks are available only in authenticated encrypted logs.
18
+ - Releases run the full cross-platform matrix once on the `main` push. The tag publishes those exact tested distributions without rerunning the matrix.
19
+
15
20
  ## Changes in 0.7.5
16
21
 
17
22
  - Unexpected API 500 errors now show the exception class and MetaList source line in the browser, without exposing note contents, exception messages, or local filesystem paths.
@@ -21,7 +26,7 @@ A minimalist single-user note-taking app focused on server-side rendering (SSR),
21
26
 
22
27
  - Updates use a private, checksum-verified uv release on Windows, macOS, and Linux. The updater does not execute a user-installed uv, and it revalidates both the cached official archive and extracted executable before each use.
23
28
  - The HTTPS listener retries one bodyless safe request after a transient backend reset, records final transport failures server-side, and never replays a mutation or request body.
24
- - Release CI builds one distribution pair, starts independent platform/Python, installed-update, browser-smoke, and browser-soak gates in parallel, and caches only hash- or lockfile-verified dependencies. Cross-platform runtime changes must pass branch CI before merge.
29
+ - Release CI builds one distribution pair, starts independent platform/Python, installed-update, browser-smoke, and browser-soak gates in parallel, and caches only hash- or lockfile-verified dependencies.
25
30
 
26
31
  ## Changes in 0.7.3
27
32
 
@@ -320,9 +325,9 @@ This repo now packages itself under the PyPI distribution name `metalist`. Curre
320
325
 
321
326
  Recommended release path:
322
327
  1. In the existing PyPI project `metalist`, configure GitHub Trusted Publishing for `evolvingstuff/metalist` and the workflow file `.github/workflows/publish-pypi.yml`.
323
- 2. Push the candidate commit to a branch and wait for the `Publish to PyPI` validation workflow to pass for that exact commit. GitHub-hosted Windows, macOS, and Linux runners install the built wheel and test application startup outside the source checkout on Python 3.10 through 3.14. Every matrix job also exercises the real `metalist update` path with uv, backups, interpreter preservation, and two-namespace restart against a local release index. The old-version fixture carries the candidate updater so this validates the mechanism being shipped; it does not retroactively fix older installed updaters. You do not need those operating systems locally. Archive verification also checks runtime files, including agent Markdown resources, against both the wheel and source distribution.
324
- 3. Only after every required check passes, create and push the release tag for that same commit. Any intervening change requires a new validation run before tagging. Branch and pull-request runs validate without publishing.
325
- 4. The tag workflow repeats validation and publishes the same artifacts tested by its full matrix. Manual publication also requires all checks to pass. Users can then run it with `uvx metalist`, install it persistently with `uv tool install metalist`, or install it with `pip install metalist`.
328
+ 2. Develop and review the candidate on a feature branch with focused checks. Merge it into `main` and push `main` once. This runs the full `Publish to PyPI` validation matrix for that exact commit. GitHub-hosted Windows, macOS, and Linux runners install the built wheel and test application startup outside the source checkout on Python 3.10 through 3.14. Every installed-package matrix job also exercises the real `metalist update` path with uv, backups, interpreter preservation, and two-namespace restart against a local release index. The old-version fixture carries the candidate updater so this validates the mechanism being shipped; it does not retroactively fix older installed updaters. You do not need those operating systems locally. Archive verification checks runtime files, including agent Markdown resources, against both the wheel and source distribution.
329
+ 3. Wait for the exact-commit main release matrix to pass, then run `.venv/bin/python scripts/release.py X.Y.Z` to create and push the tag. Any intervening change requires a new main validation run before tagging.
330
+ 4. The tag job independently verifies every main-job conclusion and reuses the wheel and source distribution from that run for GitHub Trusted Publishing; it does not repeat the matrix. Manual dispatch cannot publish. The release driver compares PyPI hashes with the tested artifact and checks a clean public install. Users can then run it with `uvx metalist`, install it persistently with `uv tool install metalist`, or install it with `pip install metalist`.
326
331
 
327
332
  If `--input` is omitted, a file picker opens (when `tkinter` and its native `_tkinter` component are available).
328
333
  Notes tagged with `@implies` are converted into ontology rules and are not imported as notes. Legacy rules that are invalid under the current ontology grammar are reported and skipped while valid rules continue importing.
@@ -53,8 +53,11 @@ from app.services.namespace_switcher import open_or_launch_namespace
53
53
  from app.services.namespace_runtime_guard import start_namespace_runtime_guard
54
54
  from app.services.diagnostics import configure_process_diagnostics
55
55
  from app.services.diagnostics import allow_plaintext_diagnostics
56
+ from app.services.diagnostics import log_unexpected_exception
56
57
  from app.services.diagnostics import start_asyncio_diagnostics
57
58
  from app.services.diagnostics import track_request
59
+ from app.services.diagnostics import write_encrypted_exception_trace
60
+ from app.security.sensitive_logging import traceback_frame_summary
58
61
  from app.api.request_auth import clear_auth_cookie
59
62
  from app.api.routes.notes import router as api2_router
60
63
  from app.api.routes.auth import router as api2_auth_router
@@ -103,13 +106,20 @@ class InterceptHandler(logging.Handler):
103
106
  frame = frame.f_back
104
107
  depth += 1
105
108
 
106
- error_type = ""
107
- if record.exc_info is not None:
108
- error_type = f" error_type={record.exc_info[0].__name__}"
109
+ error_detail = ""
110
+ if record.exc_info is not None and record.exc_info[0] is not None:
111
+ error_detail = (
112
+ f" error_type={record.exc_info[0].__name__} "
113
+ f"frames={traceback_frame_summary(record.exc_info[2])}"
114
+ )
109
115
  logger.opt(depth=depth).log(
110
116
  level,
111
- f"{record.getMessage()}{error_type}",
117
+ f"{record.getMessage()}{error_detail}",
112
118
  )
119
+ if record.exc_info is not None and record.exc_info[1] is not None:
120
+ write_encrypted_exception_trace(
121
+ context="standard logging", exception=record.exc_info[1], request_id="",
122
+ )
113
123
 
114
124
 
115
125
  logging.basicConfig(handlers=[InterceptHandler()], level=0, force=True)
@@ -153,11 +163,18 @@ async def handle_ontology_parse_error(request: Request, exc: OntologyParseError)
153
163
 
154
164
  @app.exception_handler(Exception)
155
165
  async def handle_unexpected_server_error(request: Request, exc: Exception):
166
+ request_id = request.scope.get("state", {}).get("diagnostic_request_id", "")
167
+ log_unexpected_exception(
168
+ context="HTTP request", exception=exc, request_id=request_id, level="ERROR",
169
+ )
170
+ diagnostic = describe_server_exception(exc)
171
+ if request_id:
172
+ diagnostic["requestId"] = request_id
156
173
  return JSONResponse(
157
174
  status_code=500,
158
175
  content={
159
176
  "detail": "Internal server error",
160
- "diagnostic": describe_server_exception(exc),
177
+ "diagnostic": diagnostic,
161
178
  },
162
179
  headers={"Cache-Control": "no-store, private", "X-Content-Type-Options": "nosniff"},
163
180
  )
@@ -361,6 +378,7 @@ async def redirect_remote_http_to_https(request: Request, call_next):
361
378
  @app.middleware("http")
362
379
  async def log_requests(request: Request, call_next):
363
380
  request_id = uuid.uuid4().hex[:8]
381
+ request.state.diagnostic_request_id = request_id
364
382
  handler = request.scope.get("endpoint")
365
383
  handler_name = getattr(handler, "__qualname__", "unknown")
366
384
 
@@ -116,6 +116,42 @@ def authenticated_logging_is_active() -> bool:
116
116
  return _authenticated_logging_active
117
117
 
118
118
 
119
+ def log_unexpected_exception(
120
+ *, context: str, exception: BaseException, request_id: str, level: str,
121
+ ) -> None:
122
+ """Keep plaintext diagnostics data-free; retain full traces in encrypted logs."""
123
+ if context == "":
124
+ raise ValueError("Exception context must not be empty")
125
+ if level not in {"ERROR", "CRITICAL"}:
126
+ raise ValueError(f"Unsupported unexpected-exception level: {level}")
127
+ logger.bind(request_id=request_id).log(
128
+ level,
129
+ "[diagnostics] unexpected {context} exception "
130
+ "error_type={error_type} frames={frames}",
131
+ context=context,
132
+ error_type=type(exception).__name__,
133
+ frames=traceback_frame_summary(exception.__traceback__),
134
+ )
135
+ write_encrypted_exception_trace(
136
+ context=context, exception=exception, request_id=request_id,
137
+ )
138
+
139
+
140
+ def write_encrypted_exception_trace(
141
+ *, context: str, exception: BaseException, request_id: str,
142
+ ) -> None:
143
+ """Write exception messages only to the authenticated encrypted sink."""
144
+ with _authenticated_logging_lock:
145
+ if not _authenticated_logging_active:
146
+ return
147
+ if _authenticated_log_sink is None:
148
+ raise RuntimeError("Authenticated logging is active without an encrypted sink")
149
+ formatted = "".join(traceback.format_exception(exception))
150
+ _authenticated_log_sink.write(
151
+ f"[diagnostics] {context} request_id={request_id}\n{formatted}"
152
+ )
153
+
154
+
119
155
  def _disable_plaintext_fault_logging() -> None:
120
156
  if hasattr(signal, "SIGUSR1"):
121
157
  faulthandler.unregister(signal.SIGUSR1)
@@ -397,22 +433,20 @@ def _direct_append_log_recycler_loop() -> None:
397
433
 
398
434
 
399
435
  def _log_unhandled_exception(exc_type, exc_value, exc_traceback) -> None:
400
- logger.critical(
401
- "[diagnostics] unhandled process exception error_type={error_type} frames={frames}",
402
- error_type=exc_type.__name__,
403
- frames=traceback_frame_summary(exc_traceback),
436
+ log_unexpected_exception(
437
+ context="process", exception=exc_value, request_id="", level="CRITICAL",
404
438
  )
405
439
 
406
440
 
407
441
  def _log_unhandled_thread_exception(args: threading.ExceptHookArgs) -> None:
408
442
  if args.thread is None:
409
443
  raise RuntimeError("Thread exception hook missing thread")
410
- logger.critical(
411
- "[diagnostics] unhandled thread exception thread={thread_name} "
412
- "error_type={error_type} frames={frames}",
413
- thread_name=args.thread.name,
414
- error_type=args.exc_type.__name__,
415
- frames=traceback_frame_summary(args.exc_traceback),
444
+ exception = args.exc_value
445
+ if exception is None:
446
+ raise RuntimeError("Thread exception hook missing exception")
447
+ log_unexpected_exception(
448
+ context=f"thread {args.thread.name}", exception=exception,
449
+ request_id="", level="CRITICAL",
416
450
  )
417
451
 
418
452
 
@@ -475,13 +509,13 @@ class TrackedRequest:
475
509
  ended_at=time.perf_counter(),
476
510
  )
477
511
  if exc_type is not None:
478
- logger.error(
479
- "[diagnostics] request crashed request_id={request_id} "
480
- "duration={duration:.2f} ms error_type={error_type} frames={frames}",
512
+ if exc is None:
513
+ raise RuntimeError("Tracked request exited with an exception type but no exception")
514
+ log_unexpected_exception(
515
+ context=f"request after {duration_ms:.2f} ms",
516
+ exception=exc,
481
517
  request_id=self._request_id,
482
- duration=duration_ms,
483
- error_type=exc_type.__name__,
484
- frames=traceback_frame_summary(exc_traceback),
518
+ level="ERROR",
485
519
  )
486
520
  return False
487
521
 
@@ -697,10 +731,8 @@ def _handle_asyncio_exception(
697
731
  ) -> None:
698
732
  exception = context.get("exception")
699
733
  if isinstance(exception, BaseException):
700
- logger.error(
701
- "[diagnostics] unhandled asyncio exception error_type={error_type} frames={frames}",
702
- error_type=type(exception).__name__,
703
- frames=traceback_frame_summary(exception.__traceback__),
734
+ log_unexpected_exception(
735
+ context="asyncio task", exception=exception, request_id="", level="ERROR",
704
736
  )
705
737
  return
706
738
  logger.error(
@@ -1,5 +1,6 @@
1
1
  const ERROR_TYPE = /^[A-Za-z_][A-Za-z0-9_]*$/;
2
2
  const CODE_LOCATION = /^(?:app(?:\/[A-Za-z_][A-Za-z0-9_]*)+\.py:\d+|external)$/;
3
+ const REQUEST_ID = /^[a-f0-9]{8}$/;
3
4
 
4
5
  export async function describeApiFailure(response) {
5
6
  const base = `API call failed: ${response.status} ${response.statusText}`;
@@ -12,5 +13,8 @@ export async function describeApiFailure(response) {
12
13
  if (!ERROR_TYPE.test(diagnostic?.errorType) || !CODE_LOCATION.test(diagnostic?.codeLocation)) {
13
14
  return base;
14
15
  }
15
- return `${base} (${diagnostic.errorType} at ${diagnostic.codeLocation})`;
16
+ const requestId = REQUEST_ID.test(diagnostic.requestId)
17
+ ? `, request ${diagnostic.requestId}`
18
+ : '';
19
+ return `${base} (${diagnostic.errorType} at ${diagnostic.codeLocation}${requestId})`;
16
20
  }
@@ -1,3 +1,3 @@
1
1
  """Single authoritative MetaList application version."""
2
2
 
3
- __version__ = "0.7.6"
3
+ __version__ = "0.8.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: metalist
3
- Version: 0.7.6
3
+ Version: 0.8.0
4
4
  Summary: A minimalist single-user note-taking app with SSR, fast in-memory tree operations, and efficient sync.
5
5
  Project-URL: Homepage, https://github.com/evolvingstuff/metalist
6
6
  Project-URL: Repository, https://github.com/evolvingstuff/metalist
@@ -48,6 +48,11 @@ A minimalist single-user note-taking app focused on server-side rendering (SSR),
48
48
  - Multi-tab search contexts with server-persisted scroll/search state (survives browser restarts)
49
49
  - Manual namespace backups/restores to a user-selected backup folder with retention controls
50
50
 
51
+ ## Changes in 0.8.0
52
+
53
+ - Error diagnostics now record safe request IDs, exception types, and source locations through Loguru; full tracebacks are available only in authenticated encrypted logs.
54
+ - Releases run the full cross-platform matrix once on the `main` push. The tag publishes those exact tested distributions without rerunning the matrix.
55
+
51
56
  ## Changes in 0.7.5
52
57
 
53
58
  - Unexpected API 500 errors now show the exception class and MetaList source line in the browser, without exposing note contents, exception messages, or local filesystem paths.
@@ -57,7 +62,7 @@ A minimalist single-user note-taking app focused on server-side rendering (SSR),
57
62
 
58
63
  - Updates use a private, checksum-verified uv release on Windows, macOS, and Linux. The updater does not execute a user-installed uv, and it revalidates both the cached official archive and extracted executable before each use.
59
64
  - The HTTPS listener retries one bodyless safe request after a transient backend reset, records final transport failures server-side, and never replays a mutation or request body.
60
- - Release CI builds one distribution pair, starts independent platform/Python, installed-update, browser-smoke, and browser-soak gates in parallel, and caches only hash- or lockfile-verified dependencies. Cross-platform runtime changes must pass branch CI before merge.
65
+ - Release CI builds one distribution pair, starts independent platform/Python, installed-update, browser-smoke, and browser-soak gates in parallel, and caches only hash- or lockfile-verified dependencies.
61
66
 
62
67
  ## Changes in 0.7.3
63
68
 
@@ -356,9 +361,9 @@ This repo now packages itself under the PyPI distribution name `metalist`. Curre
356
361
 
357
362
  Recommended release path:
358
363
  1. In the existing PyPI project `metalist`, configure GitHub Trusted Publishing for `evolvingstuff/metalist` and the workflow file `.github/workflows/publish-pypi.yml`.
359
- 2. Push the candidate commit to a branch and wait for the `Publish to PyPI` validation workflow to pass for that exact commit. GitHub-hosted Windows, macOS, and Linux runners install the built wheel and test application startup outside the source checkout on Python 3.10 through 3.14. Every matrix job also exercises the real `metalist update` path with uv, backups, interpreter preservation, and two-namespace restart against a local release index. The old-version fixture carries the candidate updater so this validates the mechanism being shipped; it does not retroactively fix older installed updaters. You do not need those operating systems locally. Archive verification also checks runtime files, including agent Markdown resources, against both the wheel and source distribution.
360
- 3. Only after every required check passes, create and push the release tag for that same commit. Any intervening change requires a new validation run before tagging. Branch and pull-request runs validate without publishing.
361
- 4. The tag workflow repeats validation and publishes the same artifacts tested by its full matrix. Manual publication also requires all checks to pass. Users can then run it with `uvx metalist`, install it persistently with `uv tool install metalist`, or install it with `pip install metalist`.
364
+ 2. Develop and review the candidate on a feature branch with focused checks. Merge it into `main` and push `main` once. This runs the full `Publish to PyPI` validation matrix for that exact commit. GitHub-hosted Windows, macOS, and Linux runners install the built wheel and test application startup outside the source checkout on Python 3.10 through 3.14. Every installed-package matrix job also exercises the real `metalist update` path with uv, backups, interpreter preservation, and two-namespace restart against a local release index. The old-version fixture carries the candidate updater so this validates the mechanism being shipped; it does not retroactively fix older installed updaters. You do not need those operating systems locally. Archive verification checks runtime files, including agent Markdown resources, against both the wheel and source distribution.
365
+ 3. Wait for the exact-commit main release matrix to pass, then run `.venv/bin/python scripts/release.py X.Y.Z` to create and push the tag. Any intervening change requires a new main validation run before tagging.
366
+ 4. The tag job independently verifies every main-job conclusion and reuses the wheel and source distribution from that run for GitHub Trusted Publishing; it does not repeat the matrix. Manual dispatch cannot publish. The release driver compares PyPI hashes with the tested artifact and checks a clean public install. Users can then run it with `uvx metalist`, install it persistently with `uv tool install metalist`, or install it with `pip install metalist`.
362
367
 
363
368
  If `--input` is omitted, a file picker opens (when `tkinter` and its native `_tkinter` component are available).
364
369
  Notes tagged with `@implies` are converted into ontology rules and are not imported as notes. Legacy rules that are invalid under the current ontology grammar are reported and skipped while valid rules continue importing.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes