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.
- {metalist-0.7.6/metalist.egg-info → metalist-0.8.0}/PKG-INFO +10 -5
- {metalist-0.7.6 → metalist-0.8.0}/README.md +9 -4
- {metalist-0.7.6 → metalist-0.8.0}/app/main.py +23 -5
- {metalist-0.7.6 → metalist-0.8.0}/app/services/diagnostics.py +52 -20
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/api-error-diagnostics.js +5 -1
- {metalist-0.7.6 → metalist-0.8.0}/app/version.py +1 -1
- {metalist-0.7.6 → metalist-0.8.0/metalist.egg-info}/PKG-INFO +10 -5
- {metalist-0.7.6 → metalist-0.8.0}/MANIFEST.in +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/__init__.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/__init__.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/deps.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/dev.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/middleware/auth.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/note_requests.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/request_auth.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/ai.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/app_updates.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/auth.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/backups.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/files.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/notes.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/ontology.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/reminders.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/remote_images.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/routes/test.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/transactions.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/api/upload_limits.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/config.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/data_directory.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/__init__.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/backup_settings_sql.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/engine.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/file_schema.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/file_session.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/files_sql.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/link_titles_sql.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/live_recovery.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/migrations.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/notes_sql.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/ontology_rules_sql.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/reminders_sql.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/retire_sounds.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/schema.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/search_history_sql.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/session.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/settings_sql.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/tab_state_sql.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/db/version.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/encryption_audit.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/exception_boundaries.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/https_proxy.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/models/commands.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/models/database.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/models/entities.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/models/enums.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/models/linked_list.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/models/list_operations.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/models/list_traversal.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/models/note_crud.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/models/utils.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/network_settings.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/presentation/__init__.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/presentation/render/__init__.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/presentation/render/note_renderer.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/presentation/templates.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/security/authenticated_logging.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/security/encryption.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/security/http_error_diagnostics.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/security/http_headers.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/security/note_html.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/security/request_boundary.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/security/request_hosts.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/security/sensitive_cache.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/security/sensitive_logging.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/security/shell_execution.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/security/validation_errors.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/server_runtime.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/__init__.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/__init__.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/actions.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/cloud_privacy.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/context.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/evidence_serialization.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/help_catalog.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/history.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/inference.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/investigation.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/judging.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/menu_actions.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/model_policy.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/openai_cost_tracking.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/openai_inference.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/permissions.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/prompt_settings.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/prompts/__init__.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/prompts/final-response.md +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/prompts/help-response.md +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/prompts/system.md +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/prompts/tool-result.md +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/retrieval_settings.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/runtime.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/scope.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skill_settings.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/__init__.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-ai.md +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-data.md +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-formatting.md +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-menus.md +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-notes.md +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-privacy.md +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-references.md +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-reminders.md +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-search.md +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/help-tags.md +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/skills/scoped-investigation.md +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/structured_inference.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/tagging.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/tagging_run.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/token_estimation.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/tools.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/agent/trace.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/ai_chat.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/ai_chat_rendering.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/ai_chat_stream.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/app_update_worker.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/app_updates.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/auth.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/auth_cache_state.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/auth_service.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/backlink_index.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/backlinks.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/backup_service.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/backup_settings_service.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/bulk_operation.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/client_state_service.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/content_cache.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/content_formatting.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/embedded_references.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/encryption.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/exception_capture.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/file_registry.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/file_storage.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/footnote_layout.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/footnote_rendering.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/hierarchy.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/html_export.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/html_unformatting.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/hydration_state.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/image_size_formatting.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/inline_image_occurrences.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/input_errors.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/integrity.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/latex_rendering.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/link_titles.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/login_rate_limit.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/maintenance_mode.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/markdown_rendering.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/namespace_deletion_jobs.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/namespace_deletion_worker.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/namespace_rename_jobs.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/namespace_rename_worker.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/namespace_runtime_guard.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/namespace_switcher.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/note_fullscreen.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/note_image_tags.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/note_ordering.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/note_store.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/ontology_rules_store.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/openai_credentials.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/password_note_fields.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/reference_presentation.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/reminders.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/remote_image_proxy.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/request_recovery.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/resource_limits.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/root_sorting.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/runtime_generation.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/runtime_hardening.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/runtime_lock.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/search_history.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/search_history_storage.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/search_index.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/search_query.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/search_text.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/selected_text_tag.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/self_update.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/session_timeout_service.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/shell_session_service.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/snapshot.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/store.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/structured_note_renderers.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/sync.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/sync_state.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/tab_state.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/tag_case.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/tag_ontology.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/tag_rename.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/tag_suggestions.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/tag_term_matching.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/test_reset.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/tokens.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/undo_state.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/update_backups.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/update_installer.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/update_preflight.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/view_cache.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/view_diff.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/view_state.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/services/windows_process_control.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/startup_environment.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/startup_js_sanity.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/startup_sanity.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/startup_sanity_config.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/config/agent-menu-actions.json +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/config/command_palette_tags.json +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/css/floating-notes.css +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/css/forms.css +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/css/main.css +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/img/favicon.ico +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/locked.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/main.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/activity-tracker.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/agent-menu-actions.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/agent-prompt-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/agent-retrieval-settings.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/ai-agent-debug-view.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/ai-chat-api.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/ai-chat-panel-controller.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/ai-chat-panel-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/ai-thinking-level-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/bulk-elapsed-clock.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/bulk-proposal-ui.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/cloud-privacy-policy.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/ai-chat/proposal-menu.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/api-client.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/api-failure-classification-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/app-update-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/application-state.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/async-result.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/auth.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/client-state-api.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/client-state-migration.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/activation-auth-policy.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/backup-command-availability.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/click-activation-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/command-palette-controller.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/endpoint-registry.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/note-layout-preferences.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/preferences-store.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/tag-config-loader.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/command-palette/usage-store.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/config.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/connectivity-monitor.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/context-menu/context-menu-registry.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/context-menu/context-menu-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/context-menu/context-menu-target-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/context-menu/input-caret-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/disconnect-editing-state-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/dom-utils-fixed.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/dom-utils.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/editor-commands.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/editor-selection.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/editor-toolbar.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/elapsed-time.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/error-handler.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/error-overlay.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/expected-errors.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/location-flags.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/login-namespace-picker.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/maintenance.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/agent-prompt-editor-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/ai-agent-settings-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/alphabetize-root-notes-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/backup-restore-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/backup-result-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/backup-retention-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/backup-settings-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/base-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/confirmation-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/delete-namespace-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/delete-namespace-validation.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/help-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/namespace-loading-page.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/namespace-modals.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/namespace-ports-profile.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/namespace-rename-validation.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/note-layout-appearance-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/ontology-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/password-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/prioritize-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/random-password-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/reminder-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/reset-updated-at-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/search-suggestion-statistics-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/session-timeout-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/modals/version-info-modal.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/actions/content-actions.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/actions/history-actions.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/actions/note-actions.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/actions/search-actions.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/actions/selection-actions.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/actions/ui-actions.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/events/context-menu-events.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/events/focus-events.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/events/inactivity-events.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/events/input-events.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/events/keyboard-events.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/events/mouse-events.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/events/search-events.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/mode-context.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/mode-logger.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/mode-manager-controller.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/add-style-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/animated-scroll-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/backlinks-navigation-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/backlinks-panel-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/clipboard-shortcut-policy-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/collapse-affordance-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/collapse-editing-policy-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/command-gate-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/context-menu-target-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/deselect-selection-state-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/differential-view-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/edit-session-collapse-policy-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/edit-session-collapse-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/embedded-image-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/file-drop-policy-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/file-image-preview-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/file-reference-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/filtered-refresh-selection-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/floating-note-dom.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/floating-note-layout.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/floating-note-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/footnote-navigation-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/history-selection-policy-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/history-shortcut-policy-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/html-paste-sanitizer-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/image-context-menu-action-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/image-file-insert-choice-modal-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/infinite-scroll-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/link-context-menu-action-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/link-title-prefetch-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/markdown-render-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/mermaid-render-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-click-target-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-clipboard-write-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-collapse-animation-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-context-menu-action-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-delete-shortcut-policy-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-drag-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-fullscreen-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-reposition-animation-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-split-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/note-timestamp-hover-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/password-clipboard-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/polling-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/reference-source-navigation-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/remote-image-proxy-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/remove-formatting-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/root-date-separator-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/root-sort-indicator-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/root-sort-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/scroll-anchor-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/scroll-restoration-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/scroll-to-top-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-contexts-overlay-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-debounce-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-input-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-interaction-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-redaction-reveal-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-suggestion-statistics-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-suggestion-window-labels-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-suggestion-windows-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-suggestions-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/search-syntax-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/selected-formatting-removal-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/selected-text-tag-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/shell-output-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tab-dom-cache-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tab-drag-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tab-duplication-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tab-state-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tag-bar-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tag-input-selection-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tag-proposal-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tag-suggestions-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/tag-syntax-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/todo-toggle-editing-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/untagged-view-indicator-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/mode-manager/services/view-mode-search-shortcut-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/note-html-sanitizer.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/password-generator.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/password-operation-response.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/password-policy.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/password-strength.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/reminder-store.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/reminder-surface-service.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/selection-markers.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/session-auth.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/tag-token.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/modules/uuid.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/namespace-deleted.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/namespace-renamed.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/vendor/dompurify-3.4.13.LICENSE.txt +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/vendor/dompurify-3.4.13.min.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/vendor/markdown-it-14.3.2.LICENSE.txt +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/vendor/markdown-it-14.3.2.min.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/vendor/mermaid-11.16.1.LICENSE.txt +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/vendor/mermaid-11.16.1.min.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/vendor/zxcvbn-4.4.2.LICENSE.txt +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/js/vendor/zxcvbn-4.4.2.js +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/note-html-policy.json +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/static/video/login-startup.mp4 +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/templates/base.html +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/templates/index.html +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/templates/locked.html +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/templates/maintenance.html +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/templates/namespace_deleted.html +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/templates/namespace_renamed.html +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/templates/notes_list.html +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/upload_limits.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/__init__.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/add_selected_text_tag.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/alphabetize_root_notes.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/base.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/bulk_tag_proposals.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/collapse.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/copy_note.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/create_child.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/create_note.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/create_sibling.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/delete_subtree.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/delete_tag.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/expand.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/indent.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/lock.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/move.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/move_to_top.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/outdent.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/paste_child.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/paste_sibling.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/prefetch_link_titles.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/prioritize.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/redo.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/rename_tag.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/reset_updated_at.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/resize_image.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/run_shell.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/search_comment_autofill.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/search_context_tags.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/set_collapse_bulk.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/set_collapse_in_context.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/split_note.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/tag_proposals.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/toggle_reference_mode.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/toggle_todo_done.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/undo.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/unformat_content.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/update_content.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/usecases/view.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/utils/__init__.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/utils/encryption.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/app/utils/text_utils.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/convert-from-legacy.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/main.py +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/metalist.egg-info/SOURCES.txt +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/metalist.egg-info/dependency_links.txt +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/metalist.egg-info/entry_points.txt +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/metalist.egg-info/requires.txt +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/metalist.egg-info/top_level.txt +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/pyproject.toml +0 -0
- {metalist-0.7.6 → metalist-0.8.0}/scripts/generate-lan-cert.sh +0 -0
- {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.
|
|
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.
|
|
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.
|
|
360
|
-
3.
|
|
361
|
-
4. The tag
|
|
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.
|
|
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.
|
|
324
|
-
3.
|
|
325
|
-
4. The tag
|
|
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
|
-
|
|
107
|
-
if record.exc_info is not None:
|
|
108
|
-
|
|
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()}{
|
|
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":
|
|
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
|
-
|
|
401
|
-
"
|
|
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
|
-
|
|
411
|
-
|
|
412
|
-
"
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
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
|
-
|
|
479
|
-
"
|
|
480
|
-
|
|
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
|
-
|
|
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
|
-
|
|
701
|
-
"
|
|
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
|
-
|
|
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,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: metalist
|
|
3
|
-
Version: 0.
|
|
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.
|
|
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.
|
|
360
|
-
3.
|
|
361
|
-
4. The tag
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|