mednotes-opencode 0.1.0
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.
- package/.opencode/agents/med-chat-triager.md +204 -0
- package/.opencode/agents/med-flashcard-maker.md +63 -0
- package/.opencode/agents/med-knowledge-architect.md +230 -0
- package/.opencode/agents/med-link-graph-curator.md +177 -0
- package/.opencode/agents/med-publish-guard.md +62 -0
- package/.opencode/commands/flashcards.md +25 -0
- package/.opencode/commands/mednotes/create.md +25 -0
- package/.opencode/commands/mednotes/enrich.md +27 -0
- package/.opencode/commands/mednotes/fix-wiki.md +27 -0
- package/.opencode/commands/mednotes/history.md +22 -0
- package/.opencode/commands/mednotes/link-body.md +25 -0
- package/.opencode/commands/mednotes/link-related.md +27 -0
- package/.opencode/commands/mednotes/link.md +27 -0
- package/.opencode/commands/mednotes/pdf-library.md +27 -0
- package/.opencode/commands/mednotes/process-chats.md +23 -0
- package/.opencode/commands/mednotes/setup.md +21 -0
- package/.opencode/commands/mednotes/status.md +27 -0
- package/.opencode/commands/mednotes/telemetry.md +27 -0
- package/.opencode/commands/report.md +26 -0
- package/.opencode/mednotes/AGENTS.md +57 -0
- package/.opencode/mednotes/agents/med-chat-triager.md +197 -0
- package/.opencode/mednotes/agents/med-flashcard-maker.md +56 -0
- package/.opencode/mednotes/agents/med-knowledge-architect.md +224 -0
- package/.opencode/mednotes/agents/med-link-graph-curator.md +171 -0
- package/.opencode/mednotes/agents/med-publish-guard.md +55 -0
- package/.opencode/mednotes/contracts/.gitkeep +1 -0
- package/.opencode/mednotes/contracts/agents.json +116 -0
- package/.opencode/mednotes/contracts/opencode-plugin.json +70 -0
- package/.opencode/mednotes/docs/agent-prompt-hardening.md +567 -0
- package/.opencode/mednotes/docs/agent-role-contracts.md +94 -0
- package/.opencode/mednotes/docs/anki-mcp-twenty-rules.md +214 -0
- package/.opencode/mednotes/docs/anki-templates/README.md +39 -0
- package/.opencode/mednotes/docs/anki-templates/cloze.back.html +23 -0
- package/.opencode/mednotes/docs/anki-templates/cloze.front.html +14 -0
- package/.opencode/mednotes/docs/anki-templates/qa.back.html +24 -0
- package/.opencode/mednotes/docs/anki-templates/qa.front.html +14 -0
- package/.opencode/mednotes/docs/anki-templates/style.css +182 -0
- package/.opencode/mednotes/docs/atomicity-splitting-policy.md +113 -0
- package/.opencode/mednotes/docs/extension-docs.md +40 -0
- package/.opencode/mednotes/docs/flashcard-ingestion.md +278 -0
- package/.opencode/mednotes/docs/knowledge-architect.md +208 -0
- package/.opencode/mednotes/docs/merge-policy.md +110 -0
- package/.opencode/mednotes/docs/public-vocabulary.md +104 -0
- package/.opencode/mednotes/docs/semantic-linker.md +141 -0
- package/.opencode/mednotes/docs/taxonomy-policy.md +90 -0
- package/.opencode/mednotes/docs/triage-policy.md +187 -0
- package/.opencode/mednotes/docs/vault-version-control.md +758 -0
- package/.opencode/mednotes/docs/vocabulary-db-recovery.md +58 -0
- package/.opencode/mednotes/docs/workflow-output-contract.md +779 -0
- package/.opencode/mednotes/hooks/hooks.json +79 -0
- package/.opencode/mednotes/package-lock.json +6361 -0
- package/.opencode/mednotes/package.json +15 -0
- package/.opencode/mednotes/pyproject.toml +48 -0
- package/.opencode/mednotes/scripts/bootstrap_windows_python_uv.cmd +13 -0
- package/.opencode/mednotes/scripts/bootstrap_windows_python_uv.ps1 +172 -0
- package/.opencode/mednotes/scripts/enrich_notes.py +23 -0
- package/.opencode/mednotes/scripts/full_reset_windows_python_uv.cmd +13 -0
- package/.opencode/mednotes/scripts/hooks/antigravity_hook_status.mjs +212 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/adapters/antigravity.mjs +169 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/adapters/harness_payload.mjs +103 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/adapters/opencode_plugin.mjs +341 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/adapters/opencode_user_config_sync.mjs +177 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/anki_preflight.mjs +214 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/cli.mjs +143 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/diagnostics.mjs +11 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/domain/agent_directive_core.mjs +160 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/fsm_directive.mjs +1470 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/hook_errors.mjs +120 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/retention.mjs +114 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/runtime.mjs +174 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/telemetry_capture.mjs +511 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/vault_guard.mjs +624 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook.mjs +5 -0
- package/.opencode/mednotes/scripts/mednotes/_runtime_paths.py +24 -0
- package/.opencode/mednotes/scripts/mednotes/anki_model_validator.py +18 -0
- package/.opencode/mednotes/scripts/mednotes/capture_extension_diff.py +1562 -0
- package/.opencode/mednotes/scripts/mednotes/feedback_report.py +16 -0
- package/.opencode/mednotes/scripts/mednotes/flashcard_index.py +18 -0
- package/.opencode/mednotes/scripts/mednotes/flashcard_pipeline.py +18 -0
- package/.opencode/mednotes/scripts/mednotes/flashcard_report.py +18 -0
- package/.opencode/mednotes/scripts/mednotes/flashcard_sources.py +18 -0
- package/.opencode/mednotes/scripts/mednotes/obsidian/README.md +6 -0
- package/.opencode/mednotes/scripts/mednotes/obsidian_note_utils.py +20 -0
- package/.opencode/mednotes/scripts/mednotes/pdf_library/cli.py +16 -0
- package/.opencode/mednotes/scripts/mednotes/project_fsm.py +229 -0
- package/.opencode/mednotes/scripts/mednotes/setup_telemetry_email.py +404 -0
- package/.opencode/mednotes/scripts/mednotes/sync_anki_twenty_rules.py +18 -0
- package/.opencode/mednotes/scripts/mednotes/sync_opencode_user_config.py +36 -0
- package/.opencode/mednotes/scripts/mednotes/wiki/cli.py +20 -0
- package/.opencode/mednotes/scripts/mednotes/wiki_graph.py +18 -0
- package/.opencode/mednotes/scripts/mednotes/wiki_tree.py +134 -0
- package/.opencode/mednotes/scripts/reset_windows_python_uv.ps1 +625 -0
- package/.opencode/mednotes/scripts/run_python.mjs +109 -0
- package/.opencode/mednotes/scripts/vault/vault_commit.ps1 +19 -0
- package/.opencode/mednotes/scripts/vault/vault_commit.sh +18 -0
- package/.opencode/mednotes/scripts/vault/vault_git.ps1 +19 -0
- package/.opencode/mednotes/scripts/vault/vault_git.py +3107 -0
- package/.opencode/mednotes/scripts/vault/vault_git.sh +18 -0
- package/.opencode/mednotes/scripts/vault/vault_precommit.ps1 +19 -0
- package/.opencode/mednotes/scripts/vault/vault_precommit.sh +18 -0
- package/.opencode/mednotes/skills/THIRD_PARTY_NOTICES.md +45 -0
- package/.opencode/mednotes/skills/create-medical-flashcards/SKILL.md +113 -0
- package/.opencode/mednotes/skills/create-medical-note/SKILL.md +90 -0
- package/.opencode/mednotes/skills/enrich-medical-note/SKILL.md +120 -0
- package/.opencode/mednotes/skills/fix-medical-wiki/SKILL.md +559 -0
- package/.opencode/mednotes/skills/link-medical-wiki/SKILL.md +224 -0
- package/.opencode/mednotes/skills/obsidian-cli/SKILL.md +118 -0
- package/.opencode/mednotes/skills/obsidian-markdown/SKILL.md +207 -0
- package/.opencode/mednotes/skills/obsidian-markdown/references/CALLOUTS.md +58 -0
- package/.opencode/mednotes/skills/obsidian-markdown/references/EMBEDS.md +63 -0
- package/.opencode/mednotes/skills/obsidian-markdown/references/PROPERTIES.md +61 -0
- package/.opencode/mednotes/skills/obsidian-ops/SKILL.md +136 -0
- package/.opencode/mednotes/skills/pdf-library/SKILL.md +45 -0
- package/.opencode/mednotes/skills/process-medical-chats/SKILL.md +246 -0
- package/.opencode/mednotes/skills/workflow-report/SKILL.md +100 -0
- package/.opencode/mednotes/src/mednotes/__init__.py +5 -0
- package/.opencode/mednotes/src/mednotes/domains/__init__.py +5 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/README.md +26 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/__init__.py +2 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/build_demo_apkg.py +177 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/contracts.py +385 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/flashcards_machine.py +522 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/fsm.py +817 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/index.py +630 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/install_models.py +445 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/model.py +359 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/obsidian_links.py +135 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/obsidian_note_utils.py +546 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/pipeline.py +580 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/report.py +510 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/sources.py +682 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/sync_rules.py +184 -0
- package/.opencode/mednotes/src/mednotes/domains/history/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/history/history_fsm.py +852 -0
- package/.opencode/mednotes/src/mednotes/domains/history/history_machine.py +453 -0
- package/.opencode/mednotes/src/mednotes/domains/setup/__init__.py +7 -0
- package/.opencode/mednotes/src/mednotes/domains/setup/setup_fsm.py +808 -0
- package/.opencode/mednotes/src/mednotes/domains/setup/setup_machine.py +973 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/README.md +64 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/api.py +668 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/batch_state.py +102 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/atomicity/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/atomicity/atomicity.py +877 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/body_link/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/body_link/body_linker.py +1562 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/effects/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/effects/effect_adapters.py +949 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/effects/fix_wiki_runtime_adapters.py +433 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/graph/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/graph/coverage.py +413 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/graph/graph.py +396 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/graph/graph_fixes.py +161 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/hygiene/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/hygiene/hygiene.py +483 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/__init__.py +2 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/anchors.py +185 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/__init__.py +0 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/cache.py +223 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/config.py +131 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/download.py +224 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/frontmatter.py +59 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/insert.py +227 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/local_import.py +54 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/sources/__init__.py +42 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/sources/web_profiles.py +99 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/sources/web_search.py +203 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/sources/wikimedia.py +102 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/markdown/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/markdown/markdown_db_adapter.mjs +434 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/markdown/markdown_node_runtime.py +274 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/markdown/markdown_query.py +227 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/artifacts.py +605 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/canonical_merge.py +277 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/markdown_zones.py +85 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/meaning_planner.py +307 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_iter.py +67 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_merge.py +278 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_plan.py +409 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_policy.py +22 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/__init__.py +79 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/fixes.py +264 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/frontmatter.py +435 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/models.py +208 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/prompts.py +37 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/tables.py +236 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/validate.py +404 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/provenance.py +478 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/raw_chats.py +273 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/sources_backfill.py +235 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/__init__.py +10 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/anchors.py +16 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/captions.py +47 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/cli.py +179 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/cloud.py +52 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/config.py +196 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/context_packets.py +76 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/db.py +81 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/doctor.py +102 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/figure_ids.py +42 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/ingest.py +326 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/insert.py +316 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/mentions.py +57 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/ocr.py +71 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/paths.py +35 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/pdf_engine.py +77 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/schema.py +155 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/search.py +188 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/tui/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/tui/app.py +89 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/tui/image_backend.py +29 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/tui/state.py +65 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/publish/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/publish/publish.py +1139 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/publish/publish_receipts.py +365 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/publish/publish_recovery.py +240 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/agent_behavior_corpus.py +2069 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/agent_report_validation.py +4448 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/agent_run_audit.py +852 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/architect_prompt_eval.py +341 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/body_linker_eval.py +240 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/curator_output_validation.py +175 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/curator_prompt_eval.py +865 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/triager_prompt_eval.py +1295 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/related_notes/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/related_notes/related_notes.py +1920 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/related_notes/related_notes_headless.py +1186 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/specialist/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/specialist/plan_attestation.py +148 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/specialist/specialist_receipts.py +360 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/specialist/specialist_runtime.py +52 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/specialist/specialist_task_runner.py +2470 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/style/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/style/style.py +1952 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/subagents/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/subagents/agents.py +1767 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/alias_projection.py +331 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/link_terms.py +151 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/llm_disambiguation.py +182 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/__init__.py +116 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/audit.py +201 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/migration.py +314 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/normalize.py +72 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/policy.py +135 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/resolve.py +413 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/schema.py +157 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/status.py +137 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/vocabulary_bootstrap.py +509 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/vocabulary_curator_batch.py +1115 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/vocabulary_ingestion.py +632 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/vocabulary_map.py +930 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/vocabulary_recovery.py +1388 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/cli.py +6665 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/common.py +69 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/config.py +210 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/__init__.py +74 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/agent_report.py +242 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/agent_run_audit.py +196 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/agents.py +601 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/curator.py +256 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/effect_payloads.py +519 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/happy_path.py +190 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/link_git.py +110 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/link_runtime_artifact.py +52 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/note_plan.py +75 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/paths.py +114 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/public_report.py +53 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/publish.py +111 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/raw_coverage.py +217 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/related_notes.py +136 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/related_notes_headless.py +153 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/related_notes_runtime.py +395 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/schema_registry.py +637 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/specialist.py +432 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/status.py +62 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/style_rewrite.py +568 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/vocabulary_ingestion.py +223 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/workflow_blockers.py +510 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/workflow_guardrails.py +637 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/workflow_outcomes.py +121 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/workflow_receipts.py +100 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/__main__.py +4 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/cli.py +275 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/__init__.py +2 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/candidates.py +193 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/cli.py +189 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/gemini.py +220 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/inputs.py +120 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/models.py +34 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/parsing.py +48 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/prompts.py +216 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/quality.py +54 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/reporting.py +24 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/runner.py +433 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/utils.py +39 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/vault_guard_bridge.py +17 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_context_packets.py +454 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_decision_projection.py +133 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_effects.py +1260 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_fsm.py +2768 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_machine.py +1588 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_plan.py +306 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_primary_objective.py +316 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_problem.py +153 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_receipt_evidence.py +306 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_states.py +290 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_user_report.py +342 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/health.py +6332 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_fsm.py +1119 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_git.py +638 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_machine.py +1106 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_retry_governance.py +374 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_runtime_result.py +485 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_triggers.py +183 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/linking.py +2758 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/reference_repair.py +718 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/related_notes_fsm.py +1855 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link_related/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link_related/link_related_machine.py +834 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/process_chats/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/process_chats/process_chats_fsm.py +1592 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/process_chats/process_chats_machine.py +3097 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/process_chats/process_chats_primary_objective.py +28 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/process_chats/process_chats_runtime_result.py +185 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/performance.py +97 -0
- package/.opencode/mednotes/src/mednotes/kernel/__init__.py +6 -0
- package/.opencode/mednotes/src/mednotes/kernel/agent_directive.py +336 -0
- package/.opencode/mednotes/src/mednotes/kernel/base.py +51 -0
- package/.opencode/mednotes/src/mednotes/kernel/blockers.py +39 -0
- package/.opencode/mednotes/src/mednotes/kernel/effect_executor.py +55 -0
- package/.opencode/mednotes/src/mednotes/kernel/effect_intent.py +69 -0
- package/.opencode/mednotes/src/mednotes/kernel/effects.py +160 -0
- package/.opencode/mednotes/src/mednotes/kernel/errors.py +38 -0
- package/.opencode/mednotes/src/mednotes/kernel/fsm_event.py +35 -0
- package/.opencode/mednotes/src/mednotes/kernel/fsm_model.py +55 -0
- package/.opencode/mednotes/src/mednotes/kernel/fsm_transition_result.py +75 -0
- package/.opencode/mednotes/src/mednotes/kernel/guardrails.py +188 -0
- package/.opencode/mednotes/src/mednotes/kernel/progress.py +319 -0
- package/.opencode/mednotes/src/mednotes/kernel/public_report.py +346 -0
- package/.opencode/mednotes/src/mednotes/kernel/state_machine.py +164 -0
- package/.opencode/mednotes/src/mednotes/kernel/workflow.py +619 -0
- package/.opencode/mednotes/src/mednotes/platform/__init__.py +5 -0
- package/.opencode/mednotes/src/mednotes/platform/backup_policy.py +382 -0
- package/.opencode/mednotes/src/mednotes/platform/feedback/__init__.py +62 -0
- package/.opencode/mednotes/src/mednotes/platform/feedback/cli.py +275 -0
- package/.opencode/mednotes/src/mednotes/platform/feedback/contracts.py +83 -0
- package/.opencode/mednotes/src/mednotes/platform/feedback/core.py +4168 -0
- package/.opencode/mednotes/src/mednotes/platform/feedback/integrity.py +989 -0
- package/.opencode/mednotes/src/mednotes/platform/feedback/operational_contract.py +2293 -0
- package/.opencode/mednotes/src/mednotes/platform/feedback/telemetry.py +875 -0
- package/.opencode/mednotes/src/mednotes/platform/feedback/telemetry_config.py +65 -0
- package/.opencode/mednotes/src/mednotes/platform/opencode_runtime_config.py +182 -0
- package/.opencode/mednotes/src/mednotes/platform/paths/__init__.py +1560 -0
- package/.opencode/mednotes/src/mednotes/platform/secrets.py +89 -0
- package/.opencode/mednotes/src/mednotes/platform/user_config.py +103 -0
- package/.opencode/mednotes/src/mednotes/platform/vault_guard.py +214 -0
- package/.opencode/mednotes/uv.lock +932 -0
- package/.opencode/mednotes.generated.json +395 -0
- package/.opencode/opencode.json +31 -0
- package/.opencode/plugins/mednotes-fsm.mjs +7 -0
- package/.opencode/plugins/mednotes_hook/adapters/antigravity.mjs +169 -0
- package/.opencode/plugins/mednotes_hook/adapters/harness_payload.mjs +103 -0
- package/.opencode/plugins/mednotes_hook/adapters/opencode_plugin.mjs +341 -0
- package/.opencode/plugins/mednotes_hook/adapters/opencode_user_config_sync.mjs +177 -0
- package/.opencode/plugins/mednotes_hook/anki_preflight.mjs +214 -0
- package/.opencode/plugins/mednotes_hook/cli.mjs +143 -0
- package/.opencode/plugins/mednotes_hook/diagnostics.mjs +11 -0
- package/.opencode/plugins/mednotes_hook/domain/agent_directive_core.mjs +160 -0
- package/.opencode/plugins/mednotes_hook/fsm_directive.mjs +1470 -0
- package/.opencode/plugins/mednotes_hook/hook_errors.mjs +120 -0
- package/.opencode/plugins/mednotes_hook/retention.mjs +114 -0
- package/.opencode/plugins/mednotes_hook/runtime.mjs +174 -0
- package/.opencode/plugins/mednotes_hook/telemetry_capture.mjs +511 -0
- package/.opencode/plugins/mednotes_hook/vault_guard.mjs +624 -0
- package/AGENTS.md +57 -0
- package/README.md +194 -0
- package/adapters/antigravity/agents.json +80 -0
- package/adapters/antigravity/templates/med-chat-triager.md +214 -0
- package/adapters/antigravity/templates/med-flashcard-maker.md +72 -0
- package/adapters/antigravity/templates/med-knowledge-architect.md +241 -0
- package/adapters/antigravity/templates/med-link-graph-curator.md +187 -0
- package/adapters/antigravity/templates/med-publish-guard.md +71 -0
- package/adapters/gemini-cli/gemini-extension.json +14 -0
- package/adapters/gemini-cli/package.json +15 -0
- package/adapters/gemini-cli/pyproject.toml +48 -0
- package/bin/mednotes-opencode.mjs +155 -0
- package/contracts/agents.json +116 -0
- package/core/agents/med-chat-triager.md +197 -0
- package/core/agents/med-flashcard-maker.md +56 -0
- package/core/agents/med-knowledge-architect.md +224 -0
- package/core/agents/med-link-graph-curator.md +171 -0
- package/core/agents/med-publish-guard.md +55 -0
- package/core/commands/flashcards.toml +22 -0
- package/core/commands/mednotes/create.toml +22 -0
- package/core/commands/mednotes/enrich.toml +24 -0
- package/core/commands/mednotes/fix-wiki.toml +24 -0
- package/core/commands/mednotes/history.toml +19 -0
- package/core/commands/mednotes/link-body.toml +22 -0
- package/core/commands/mednotes/link-related.toml +24 -0
- package/core/commands/mednotes/link.toml +24 -0
- package/core/commands/mednotes/pdf-library.toml +24 -0
- package/core/commands/mednotes/process-chats.toml +20 -0
- package/core/commands/mednotes/setup.toml +18 -0
- package/core/commands/mednotes/status.toml +24 -0
- package/core/commands/mednotes/telemetry.toml +24 -0
- package/core/commands/report.toml +23 -0
- package/core/skills/THIRD_PARTY_NOTICES.md +45 -0
- package/core/skills/create-medical-flashcards/SKILL.md +113 -0
- package/core/skills/create-medical-note/SKILL.md +90 -0
- package/core/skills/enrich-medical-note/SKILL.md +120 -0
- package/core/skills/fix-medical-wiki/SKILL.md +559 -0
- package/core/skills/link-medical-wiki/SKILL.md +224 -0
- package/core/skills/obsidian-cli/SKILL.md +118 -0
- package/core/skills/obsidian-markdown/SKILL.md +207 -0
- package/core/skills/obsidian-markdown/references/CALLOUTS.md +58 -0
- package/core/skills/obsidian-markdown/references/EMBEDS.md +63 -0
- package/core/skills/obsidian-markdown/references/PROPERTIES.md +61 -0
- package/core/skills/obsidian-ops/SKILL.md +136 -0
- package/core/skills/pdf-library/SKILL.md +45 -0
- package/core/skills/process-medical-chats/SKILL.md +246 -0
- package/core/skills/workflow-report/SKILL.md +100 -0
- package/package.json +45 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Dicionário Público (Internal → User)
|
|
2
|
+
|
|
3
|
+
Tradução canônica para resposta visível em workflow público. "Não dizer" é
|
|
4
|
+
proibido por padrão; "Dizer" é a forma humana. Termos internos só aparecem
|
|
5
|
+
em `<details>` técnicos quando o usuário pediu, em `/mednotes:status`, em
|
|
6
|
+
debug explícito, ou na seção `Detalhes técnicos` ao final do relatório.
|
|
7
|
+
|
|
8
|
+
Workflows que exigem UX "just works" (esconder internals por padrão):
|
|
9
|
+
`/mednotes:create`, `/mednotes:enrich`, `/mednotes:fix-wiki`,
|
|
10
|
+
`/mednotes:link`, `/mednotes:link-body`, `/mednotes:link-related`,
|
|
11
|
+
`/mednotes:process-chats`, `/mednotes:pdf-library`, `/flashcards`.
|
|
12
|
+
|
|
13
|
+
Workflows mistos (mais técnico no default): `/mednotes:setup`,
|
|
14
|
+
`/mednotes:status`, `/mednotes:history`, `/mednotes:telemetry`, `/report`.
|
|
15
|
+
|
|
16
|
+
## Execução E Ambiente
|
|
17
|
+
|
|
18
|
+
| Interno | Não dizer | Dizer |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| `uv run python ...` / `uv` | "rodei `uv`", "vou rodar `uv run`" | "preparei o ambiente e rodei", "executei" |
|
|
21
|
+
| `--dry-run`, dry-run | "rodei `--dry-run`", "dry-run limpo" | "fiz uma prévia", "nada foi alterado ainda" |
|
|
22
|
+
| `--apply`, apply | "vou rodar apply" | "vou aplicar" / "aplico se você confirmar" |
|
|
23
|
+
| receipt / recibo (técnico) | "gerei recibo `<path>.json`" | "registrei o que foi feito" / "guardei ponto de restauração" |
|
|
24
|
+
| manifest / batch | "manifest do batch" | "lote" só se precisar contar; preferir "essas 4 notas" |
|
|
25
|
+
| hash / sha256 / `content_hash` | "hash bate", "sha256=…" | omitir; ou "identifiquei a versão da nota" |
|
|
26
|
+
| schema / schema drift / plan v4/v5 | "schema drift", "plano v5" | "o formato esperado mudou; vou recalcular" |
|
|
27
|
+
| `Exit Code:` | "Exit Code 1" | "o comando falhou: <causa curta>" |
|
|
28
|
+
| `tool status=success` | "tool status success" | omitir; falar do resultado |
|
|
29
|
+
| `agent_metrics` / `turns_used` / `max_turns` | "12 turns used" | omitir; em bloqueio: "o agente esgotou tentativas; precisa de revisão" |
|
|
30
|
+
|
|
31
|
+
## Estado E Decisão
|
|
32
|
+
|
|
33
|
+
| Interno | Não dizer | Dizer |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| `next_action` / `next_command` | "next_action", "next_command" | "próxima ação" |
|
|
36
|
+
| `human_decision_required` | "human decision required" | "preciso de uma decisão sua" |
|
|
37
|
+
| `human_decision_packet` | "packet", "opções do packet" | "opções para você escolher" |
|
|
38
|
+
| `blocked_reason` / `status=blocked` | "status=blocked", "blocked_reason=…" | "bloqueio: <causa em pt-BR>" |
|
|
39
|
+
| `preview_ready` / `ready_to_publish` | "preview_ready", "ready_to_publish" | "prévia pronta", "pronto para publicar" |
|
|
40
|
+
| `phase` (ex. `architect`, `triage`) | "fase architect" | "etapa atual: arquitetura/triagem" |
|
|
41
|
+
| `contract_gap` / `error_context` | "contract_gap.missing_next_action" | "o sistema não me deu próxima ação clara; preciso de orientação sua" |
|
|
42
|
+
|
|
43
|
+
## Armazenamento
|
|
44
|
+
|
|
45
|
+
| Interno | Não dizer | Dizer |
|
|
46
|
+
|---|---|---|
|
|
47
|
+
| SQLite / vocabulary DB / DB | "SQLite", "DB de vocabulário" | "índice de vocabulário" |
|
|
48
|
+
| `vocabulary_bootstrap` / `bootstrap_required` | "bootstrap_required" | "o índice de vocabulário precisa ser construído" |
|
|
49
|
+
| `link-trigger-context.v1` | "link trigger context" | omitir; o linker é dito como "reparei as conexões entre notas" |
|
|
50
|
+
| `images_*` frontmatter | "frontmatter `images_*`" | "imagens da nota" |
|
|
51
|
+
|
|
52
|
+
## Versionamento E Vault
|
|
53
|
+
|
|
54
|
+
| Interno | Não dizer | Dizer |
|
|
55
|
+
|---|---|---|
|
|
56
|
+
| restore point / `restore_point_id` / commit | "commit", "branch", "SHA `<abc>`" | "ponto de restauração" |
|
|
57
|
+
| Git / push / `sync_status` | "git push", "sync_status=skipped" | "backup online" / "backup online pendente" |
|
|
58
|
+
| `run-start` / `run-finish` / vault guard | "rodei `run-start`" | omitir; protegido por "ponto de restauração" |
|
|
59
|
+
|
|
60
|
+
## Bypass Técnico (Nunca Em UX Pública)
|
|
61
|
+
|
|
62
|
+
| Interno | Não dizer | Dizer |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| `MEDNOTES_ALLOW_DEV_ESCAPE` | nunca em UX pública | nunca em UX pública |
|
|
65
|
+
| `--skip-prompt-eval` | nunca em UX pública | nunca em UX pública |
|
|
66
|
+
| `--force-diagnose` | nunca em UX pública | nunca em UX pública |
|
|
67
|
+
|
|
68
|
+
## Eval E Avaliação
|
|
69
|
+
|
|
70
|
+
| Interno | Não dizer | Dizer |
|
|
71
|
+
|---|---|---|
|
|
72
|
+
| `eval-curator-batch` / evaluator | "evaluator devolveu needs_review" | "a verificação automática marcou itens para revisão" |
|
|
73
|
+
| `needs_review` | "needs_review" | "preciso revisar antes de aplicar" |
|
|
74
|
+
| `prompt-eval` / curator-prompt-eval.json | "curator-prompt-eval" | omitir; preferir "verificação do plano" |
|
|
75
|
+
|
|
76
|
+
## Agentes E Subagentes
|
|
77
|
+
|
|
78
|
+
| Interno | Não dizer | Dizer |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| `med-link-graph-curator` | nome do agente | "etapa de curadoria de vocabulário" |
|
|
81
|
+
| `med-knowledge-architect` | nome do agente | "etapa de reescrita" |
|
|
82
|
+
| `med-chat-triager` | nome do agente | "etapa de triagem do chat" |
|
|
83
|
+
| `med-publish-guard` | nome do agente | "verificação antes de publicar" |
|
|
84
|
+
| `med-flashcard-maker` | nome do agente | "etapa de geração de cards" |
|
|
85
|
+
| `@generalist` / subagent genérico | mencionar | nunca (rota oficial não usa) |
|
|
86
|
+
|
|
87
|
+
## Quando Internals Podem Aparecer
|
|
88
|
+
|
|
89
|
+
- Sempre em `<details>` recolhido com cabeçalho "Detalhes técnicos" (camada
|
|
90
|
+
visível padrão continua humana).
|
|
91
|
+
- Em `/mednotes:status`, `/mednotes:setup`, `/mednotes:telemetry`,
|
|
92
|
+
`/mednotes:history` no resumo principal quando o usuário pediu inspeção.
|
|
93
|
+
- Em debug explícito (usuário pediu "mostre o JSON", "rode com `--json`",
|
|
94
|
+
"explique o erro técnico").
|
|
95
|
+
|
|
96
|
+
## Anti-Padrão Recorrente (Run Real)
|
|
97
|
+
|
|
98
|
+
Em `/mednotes:fix-wiki`, foi exposto ao usuário: "batch de curadoria",
|
|
99
|
+
"plano v5", "schema drift", "hash mismatch", "uv run", "manifest",
|
|
100
|
+
"needs_review" e "skip-prompt-eval". Tradução correta:
|
|
101
|
+
|
|
102
|
+
> "Fiz uma prévia da Wiki. Encontrei um conflito de versão e preciso da sua
|
|
103
|
+
> decisão antes de continuar. Nada foi alterado ainda. Próxima ação:
|
|
104
|
+
> <frase curta>."
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: med-auto-linker
|
|
3
|
+
description: Contrato compacto do /mednotes:link: diagnostico, desambiguacao contextual e apply auditavel do grafo da Wiki.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Semantic Linker Contract
|
|
7
|
+
|
|
8
|
+
No workflow público `/mednotes:link`, use a CLI pública `wiki/cli.py run-linker`.
|
|
9
|
+
`/mednotes:link-body` usa o mesmo `run-linker` com `--no-related-notes`.
|
|
10
|
+
`/mednotes:link-related` usa `wiki/cli.py related-notes-sync`, cujo output
|
|
11
|
+
público é `medical-notes-workbench.link-related-fsm-result.v1`. O payload
|
|
12
|
+
operacional antigo de Related Notes é detalhe interno: consumidores leem
|
|
13
|
+
`progress_view_model`, `state_machine_snapshot`, `decision`, `receipt`,
|
|
14
|
+
`artifacts`, `diagnostic_context` e `error_context`. O linker cuida só de
|
|
15
|
+
`knowledge_graph`: WikiLinks, aliases, vocabulary DB, meanings, body linker,
|
|
16
|
+
Related Notes, backlinks e validação do grafo. Não corrige estilo, YAML,
|
|
17
|
+
publicação, conteúdo didático, taxonomia nem índice Dataview.
|
|
18
|
+
`/mednotes:link` é o dono de todo reparo de grafo; curadoria semântica é fase
|
|
19
|
+
interna de /mednotes:link, não tarefa manual final para o usuário.
|
|
20
|
+
|
|
21
|
+
Fonte operacional: `~/.gemini/medical-notes-workbench/vocabulary.sqlite`.
|
|
22
|
+
YAML `aliases` é projeção humana do DB, não autorização suficiente para linkar
|
|
23
|
+
corpo. `CATALOGO_WIKI.json`, quando existir, é legado/apoio; não é fonte
|
|
24
|
+
primária de decisão semântica.
|
|
25
|
+
|
|
26
|
+
Contrato público: `run-linker --diagnose --json` lê Wiki/Git/DB/aliases/links,
|
|
27
|
+
export do Related Notes e estado do grafo, salva `link-diagnosis.json` e não
|
|
28
|
+
muta Markdown. `run-linker --diagnose --no-related-notes --json` pula
|
|
29
|
+
`related_notes_sync` para o comando body-only. Workflows que mudaram notas
|
|
30
|
+
passam `--trigger-context <json>`. `run-linker --apply --diagnosis <json>
|
|
31
|
+
--json` consome o diagnóstico salvo, revalida snapshot/hash/Git e bloqueia se
|
|
32
|
+
estiver stale. Se o diagnóstico contém `wiki_dir`, `catalog_path` e
|
|
33
|
+
`vocabulary_db_path`, o apply usa esses caminhos quando overrides explícitos não
|
|
34
|
+
forem passados. `--receipt` nunca sobrescreve arquivo existente; nesse caso o
|
|
35
|
+
workflow bloqueia com `receipt_path_exists`. Apply nunca chama LLM.
|
|
36
|
+
O diagnóstico grava `last_diagnosis_attempt` em `link-state.v2`; repetição sem
|
|
37
|
+
mudança pode retornar `skipped_reason=redundant_diagnosis_without_state_change`.
|
|
38
|
+
Se o vocabulary DB ainda não existe, o diagnóstico registra
|
|
39
|
+
`vocabulary_bootstrap.status=planned` e bloqueia `body_term_linker` com
|
|
40
|
+
`vocabulary_bootstrap_required` quando houver notas a ingerir; criar SQLite,
|
|
41
|
+
limpar aliases/WikiLinks antigos e enfileirar notas é responsabilidade de um
|
|
42
|
+
apply workflow-aware do próprio `/mednotes:link` ou de um workflow que o chama,
|
|
43
|
+
como `/mednotes:fix-wiki`.
|
|
44
|
+
No apply, `vocabulary_semantic_repair` resolve a fila simples com meanings por
|
|
45
|
+
título/nota, policy direta só para título e aliases contextuais; depois força
|
|
46
|
+
novo diagnóstico e aplica. Só bloqueia em decisão humana, conflito ou erro real.
|
|
47
|
+
|
|
48
|
+
Fases fixas:
|
|
49
|
+
|
|
50
|
+
1. `reference_repair`
|
|
51
|
+
2. `contextual_alias_disambiguation`
|
|
52
|
+
3. `body_term_linker`
|
|
53
|
+
4. `related_notes_sync`
|
|
54
|
+
5. `graph_validation`
|
|
55
|
+
|
|
56
|
+
Regras semânticas:
|
|
57
|
+
|
|
58
|
+
- `1 meaning canônico = 1 nota Wiki`.
|
|
59
|
+
- Atomicidade/split segue `atomicity-splitting-policy.md`: o DB decide a partir
|
|
60
|
+
de `semantic_signal` do corpo, nunca de title-only signal; só
|
|
61
|
+
`split_required` vira `deferred_work_items.status=pending`.
|
|
62
|
+
- Várias notas para o mesmo meaning é duplicata/merge.
|
|
63
|
+
- `direct` só linka quando uma surface tem um meaning e uma nota canônica.
|
|
64
|
+
- `requires_context` exige decisão por ocorrência. Exemplo: `PCR` pode ser
|
|
65
|
+
Proteína C Reativa, Parada Cardiorrespiratória ou Reação em Cadeia da
|
|
66
|
+
Polimerase, mesmo se o vault ainda só tiver uma candidata.
|
|
67
|
+
- Matches seguros de único alvo canônico são resolvidos pelo script. Ambiguidades
|
|
68
|
+
médicas reais exigem orquestração oficial por agente/subagent; o script não
|
|
69
|
+
abre `gemini -p` escondido. Alvo inventado, confiança baixa ou contexto
|
|
70
|
+
insuficiente vira `defer`/`no_link`.
|
|
71
|
+
|
|
72
|
+
Body linker usa scanner Aho-Corasick, preserva YAML, headings, code, imagens,
|
|
73
|
+
embeds, footer e `## 🔗 Notas Relacionadas`, exceto quando a fase dela roda.
|
|
74
|
+
Qualidade do body linker é medida por `evaluate-body-linker` com fixtures
|
|
75
|
+
redigidas; falso positivo deve bloquear o gate.
|
|
76
|
+
|
|
77
|
+
`reference_repair` usa trigger context ou Git para `created`, `modified`,
|
|
78
|
+
`deleted`, `renamed`, `moved` e `merged`. Rename/move/merge validado reescreve
|
|
79
|
+
links entrantes; delete sem substituto vira `structural_deleted`.
|
|
80
|
+
|
|
81
|
+
Related Notes é seção gerenciada pelo linker: remover só o bloco abaixo de
|
|
82
|
+
`## 🔗 Notas Relacionadas`, preservar as demais seções finais e reescrever a partir do export
|
|
83
|
+
estável do plugin (`score >= 0.78`, teto configurado, ordem de relevância).
|
|
84
|
+
O recovery oficial do export tenta primeiro o comando do plugin via Obsidian
|
|
85
|
+
CLI. Se a CLI não existir, mas o plugin estiver instalado no vault, o Workbench
|
|
86
|
+
pode reconstruir `index.json` e `medical-notes-export.json` pela rota headless
|
|
87
|
+
compatível com o plugin, lendo a chave do `data.json` sem expor segredo. O
|
|
88
|
+
export público nunca carrega API key, embeddings, cache interno, Markdown bruto
|
|
89
|
+
ou conteúdo clínico; falha de quota vira
|
|
90
|
+
`related_notes_headless_quota_exhausted`. Execução longa demais vira
|
|
91
|
+
`related_notes_headless_time_budget_exhausted`, com índice parcial salvo e
|
|
92
|
+
retomada oficial. A rota headless impõe no mínimo 10s entre chamadas externas
|
|
93
|
+
de embedding, mesmo se `embeddingRequestDelayMs` vier menor, zero ou ausente.
|
|
94
|
+
O orçamento padrão de execução headless é 120s e pode ser ajustado por
|
|
95
|
+
`MEDNOTES_RELATED_NOTES_HEADLESS_MAX_SECONDS` em testes/automação.
|
|
96
|
+
Quando a rota headless já salvou parte do índice, o blocker deve carregar
|
|
97
|
+
payload tipado de progresso Related Notes com total, restante, janela de retry e
|
|
98
|
+
`resume_supported=true`. Se o bloqueio for quota externa ou orçamento de tempo,
|
|
99
|
+
o plano deve deixar claro que a retomada é posterior (`executable_now=false`),
|
|
100
|
+
não continuação imediata; isso não é decisão humana nem instrução para o usuário
|
|
101
|
+
editar Related Notes manualmente.
|
|
102
|
+
O linker não mantém índice Dataview. Notas operacionais marcadas com
|
|
103
|
+
`indice`/`índice` são ignoradas no grafo/linker e devem preservar queries,
|
|
104
|
+
code blocks e forma operacional própria.
|
|
105
|
+
|
|
106
|
+
Proveniência não é Related Notes: `chats[]` é metadata consultável da fonte e
|
|
107
|
+
`## 🧬 Fontes Consolidadas` é a seção visível final, gerenciada pelos workflows
|
|
108
|
+
de publicação/fix-wiki. O linker não cria nem apaga `chats[]`.
|
|
109
|
+
Export stale usa `related-notes-sync --recover-export --mode auto --json`.
|
|
110
|
+
Se Related Notes for o único blocker e body/reference estiverem seguros,
|
|
111
|
+
`run-linker --diagnose` inclui `body_only_fallback.safe=true`; caso contrário,
|
|
112
|
+
`safe=false`.
|
|
113
|
+
Quando `fix-wiki --apply` não consegue recuperar o export, mas os blockers de
|
|
114
|
+
grafo estão dentro da seção gerenciada, ele pode registrar
|
|
115
|
+
`related-notes-safety-cleanup.v1`: remove apenas WikiLinks inválidos já
|
|
116
|
+
presentes em `## 🔗 Notas Relacionadas`, preserva links existentes que ainda
|
|
117
|
+
resolvem para uma única nota e mantém `related_notes_blocked` até o plugin gerar
|
|
118
|
+
um export fresco. Essa limpeza não calcula embeddings nem novas relações.
|
|
119
|
+
|
|
120
|
+
Recibos/diagnósticos não gravam Markdown clínico bruto nem diff textual. O
|
|
121
|
+
`med-link-graph-curator` mantém meanings, aliases, policies e work items; ele
|
|
122
|
+
não edita Markdown diretamente e não chama outro subagente.
|
|
123
|
+
Para `deferred_work_items[].reason=non_atomic_note`, use
|
|
124
|
+
`atomicity-splitting-policy.md`: `semantic_signal` deve trazer evidência do
|
|
125
|
+
corpo, relação/fragmento e estimativa dos filhos; sem isso o apply bloqueia como
|
|
126
|
+
`semantic_ingestion.atomicity_signal_required`.
|
|
127
|
+
O parent passa `agent-work-packet.v1`: path/hash/DB, ações, stop conditions,
|
|
128
|
+
`difficulty_route`, rubrica e contrato. `simple_atomic` é curto;
|
|
129
|
+
`complex_semantic_review` classifica/defer riscos; `blocked_preflight` para
|
|
130
|
+
antes de gastar tokens. `plan_hash` é corpus-only sem runtime; `prompt_identity`
|
|
131
|
+
valida no apply.
|
|
132
|
+
Quando o diagnóstico emitir `vocabulary_curator_batch_plan_path`, o apply ainda
|
|
133
|
+
deve tentar `vocabulary_semantic_repair`; se sobrar pendência humana, continue a
|
|
134
|
+
cadeia dentro do `/mednotes:link` e não encerre como próximo passo manual.
|
|
135
|
+
Depois dos outputs, gere manifest com `collect-curator-outputs`; não escreva
|
|
136
|
+
manual. Rode `eval-curator-batch --report <report> --json`.
|
|
137
|
+
O gate emite `curator-prompt-eval.v1` e bloqueia alias amplo, vazamento, rota
|
|
138
|
+
complexa sem defer/split, orçamento excedido ou falta de `agent_metrics`.
|
|
139
|
+
Apply real exige `--prompt-eval <report.json>`; `--skip-prompt-eval` exige
|
|
140
|
+
`MEDNOTES_ALLOW_DEV_ESCAPE=1` e `--skip-prompt-eval-reason`, e registra
|
|
141
|
+
`agent.curator_prompt_eval_skip`.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Política Canônica de Taxonomia
|
|
2
|
+
|
|
3
|
+
Este contrato governa apenas a hierarquia de pastas da `Wiki_Medicina`.
|
|
4
|
+
A fonte executável de verdade é
|
|
5
|
+
`bundle/scripts/mednotes/wiki/taxonomy/policy.py`; este documento é a
|
|
6
|
+
projeção humana distribuída com a extensão.
|
|
7
|
+
|
|
8
|
+
## Hierarquia
|
|
9
|
+
|
|
10
|
+
- Nível 1: cinco grandes áreas numeradas, em conjunto fechado.
|
|
11
|
+
- Nível 2: especialidades canônicas sob cada grande área, em conjunto fechado.
|
|
12
|
+
- Nível 3: subcategoria opcional sob uma especialidade canônica.
|
|
13
|
+
- Nível 4+: leaf ou pasta de nota.
|
|
14
|
+
|
|
15
|
+
`schema.py` e os subcomandos `taxonomy-*` derivam áreas, especialidades e
|
|
16
|
+
aliases de `policy.py`. Subcategorias/leaves continuam governadas por
|
|
17
|
+
`allow_new_leaf=True` e bloqueio de similaridade próxima.
|
|
18
|
+
|
|
19
|
+
## Grandes Áreas
|
|
20
|
+
|
|
21
|
+
- `1. Clínica Médica`
|
|
22
|
+
- `2. Cirurgia`
|
|
23
|
+
- `3. Ginecologia e Obstetrícia`
|
|
24
|
+
- `4. Pediatria`
|
|
25
|
+
- `5. Medicina Preventiva`
|
|
26
|
+
|
|
27
|
+
## Ginecologia E Obstetrícia
|
|
28
|
+
|
|
29
|
+
A grande área canônica é `3. Ginecologia e Obstetrícia`.
|
|
30
|
+
|
|
31
|
+
Especialidades canônicas:
|
|
32
|
+
|
|
33
|
+
- `Ginecologia`
|
|
34
|
+
- `Obstetrícia`
|
|
35
|
+
|
|
36
|
+
Aliases legados preservados por compatibilidade:
|
|
37
|
+
|
|
38
|
+
- `#. Ginecologia e Obstetricia` -> `3. Ginecologia e Obstetrícia`
|
|
39
|
+
- `3. Ginecologia e Obstetricia` -> `3. Ginecologia e Obstetrícia`
|
|
40
|
+
- `Ginecologia_Obstetricia` -> `3. Ginecologia e Obstetrícia`
|
|
41
|
+
- `Ginecologia e Obstetricia` -> `3. Ginecologia e Obstetrícia`
|
|
42
|
+
- `Ginecologia e Obstetrícia` -> `3. Ginecologia e Obstetrícia`
|
|
43
|
+
- `Obstetricia` -> `3. Ginecologia e Obstetrícia/Obstetrícia`
|
|
44
|
+
|
|
45
|
+
## Versão Da Política
|
|
46
|
+
|
|
47
|
+
A versão executável atual é `2026-05-15.taxonomy-v1`. Planos e recibos de
|
|
48
|
+
migração registram essa versão e não devem ser aplicados quando a versão atual
|
|
49
|
+
for diferente.
|
|
50
|
+
|
|
51
|
+
## Status Humano
|
|
52
|
+
|
|
53
|
+
Use `taxonomy-status` para entender o estado da árvore real antes de aplicar
|
|
54
|
+
migração. O comando emite JSON e pode escrever relatório Markdown com
|
|
55
|
+
`--report-output`.
|
|
56
|
+
|
|
57
|
+
## Criação De Leaf Nova
|
|
58
|
+
|
|
59
|
+
Dry-run pode sugerir `taxonomy_new_dirs`. Publish real só cria diretórios novos
|
|
60
|
+
quando o recibo de dry-run para o mesmo manifest autorizou exatamente esses
|
|
61
|
+
diretórios.
|
|
62
|
+
|
|
63
|
+
## Decisão Operacional
|
|
64
|
+
|
|
65
|
+
- Preservar caminhos que já estão sob área e especialidade canônicas.
|
|
66
|
+
- Resolver aliases conhecidos para o destino canônico antes de publicar ou
|
|
67
|
+
migrar.
|
|
68
|
+
- Criar leaf nova somente sob pai canônico coerente e sem similaridade fuzzy
|
|
69
|
+
bloqueadora.
|
|
70
|
+
- Bloquear para decisão humana quando a área, especialidade, similaridade ou
|
|
71
|
+
destino for ambíguo.
|
|
72
|
+
- Mover pastas somente via `taxonomy-migrate`, com plano, recibo e rollback.
|
|
73
|
+
|
|
74
|
+
## Comandos
|
|
75
|
+
|
|
76
|
+
- `taxonomy-canonical`
|
|
77
|
+
- `taxonomy-tree`
|
|
78
|
+
- `taxonomy-audit`
|
|
79
|
+
- `taxonomy-status`
|
|
80
|
+
- `taxonomy-resolve`
|
|
81
|
+
- `taxonomy-plan`
|
|
82
|
+
- `taxonomy-apply`
|
|
83
|
+
- `taxonomy-rollback`
|
|
84
|
+
- `taxonomy-migrate`
|
|
85
|
+
|
|
86
|
+
`fix-wiki` pode auditar e planejar taxonomia, mas migração de pastas continua
|
|
87
|
+
passando pelo mecanismo de plano/aplicação/rollback de `taxonomy-migrate`.
|
|
88
|
+
`taxonomy-plan`, `taxonomy-apply` e `taxonomy-rollback` são nomes mais claros
|
|
89
|
+
para o mesmo fluxo. `taxonomy-migrate --dry-run|--apply|--rollback` permanece
|
|
90
|
+
compatível.
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# Triage Policy
|
|
2
|
+
|
|
3
|
+
Política editorial para o `med-chat-triager`. Define como dividir um único
|
|
4
|
+
raw chat em unidades semânticas duráveis sem decidir nada sobre a Wiki
|
|
5
|
+
existente. Pareado com `agent-role-contracts.md` e `merge-policy.md`.
|
|
6
|
+
|
|
7
|
+
Regra-âncora:
|
|
8
|
+
|
|
9
|
+
> 1 meaning canônico = 1 nota Wiki. O triager declara meanings; ele não
|
|
10
|
+
> decide se eles já existem.
|
|
11
|
+
|
|
12
|
+
## Ações Permitidas (`triage-note-plan.v2`)
|
|
13
|
+
|
|
14
|
+
### `planned_meaning`
|
|
15
|
+
|
|
16
|
+
Use para cada unidade médica durável que merece virar trabalho downstream
|
|
17
|
+
(nota nova, rewrite canônico ou merge candidato — quem decide é o planner,
|
|
18
|
+
não o triager).
|
|
19
|
+
|
|
20
|
+
Critérios:
|
|
21
|
+
|
|
22
|
+
- representa um conceito médico atômico, com escopo definível em uma frase;
|
|
23
|
+
- o raw chat fornece evidência suficiente para descrever esse escopo;
|
|
24
|
+
- a unidade tem `meaning_claim` com `label`, `scope`, `boundaries`, `kind` e
|
|
25
|
+
`evidence_summary` redigido;
|
|
26
|
+
- `staged_title` é um nome de arquivo limpo em pt-BR (sem path separators,
|
|
27
|
+
caracteres proibidos Windows, controle, ponto/espaço final).
|
|
28
|
+
|
|
29
|
+
Granularidade:
|
|
30
|
+
|
|
31
|
+
- não fragmente abaixo da unidade semântica (ex.: não emita
|
|
32
|
+
`Mecanismo de ação dos ISRS` separado de `ISRS` quando o raw discute apenas
|
|
33
|
+
ISRS como um todo);
|
|
34
|
+
- não infle granularidade (ex.: não emita uma nota por critério de
|
|
35
|
+
diagnóstico isolado quando o raw discute o quadro completo);
|
|
36
|
+
- preferir uma unidade ampla com `attach_to_planned_meaning` em vez de
|
|
37
|
+
várias unidades pequenas mal sustentadas.
|
|
38
|
+
|
|
39
|
+
### `attach_to_planned_meaning`
|
|
40
|
+
|
|
41
|
+
Use para informação útil subordinada a outra unidade do mesmo raw chat.
|
|
42
|
+
Requer `target_item_id` apontando para uma `planned_meaning` válida do mesmo
|
|
43
|
+
plano.
|
|
44
|
+
|
|
45
|
+
`reason_code` fechado:
|
|
46
|
+
|
|
47
|
+
- `supporting_detail`: detalhe clínico/farmacológico que reforça a unidade
|
|
48
|
+
alvo;
|
|
49
|
+
- `boundary_clarification`: discussão que ajuda a delimitar o escopo da
|
|
50
|
+
unidade alvo;
|
|
51
|
+
- `example_or_case`: exemplo/caso que ilustra a unidade alvo;
|
|
52
|
+
- `cross_reference`: menção breve que aponta a unidade alvo para outra
|
|
53
|
+
unidade do mesmo raw.
|
|
54
|
+
|
|
55
|
+
`attach_to_planned_meaning` não vira nota separada. Ele é dica para o
|
|
56
|
+
architect agregar conteúdo dentro da unidade alvo.
|
|
57
|
+
|
|
58
|
+
### `not_a_note`
|
|
59
|
+
|
|
60
|
+
Use para conteúdo do raw chat que não deve virar nota.
|
|
61
|
+
|
|
62
|
+
`reason_code` fechado:
|
|
63
|
+
|
|
64
|
+
- `administrative_chatter`: pedido operacional, metacomentário, saudação;
|
|
65
|
+
- `repetition_no_new_information`: repete unidade já planejada sem novidade;
|
|
66
|
+
- `out_of_scope_for_medical_wiki`: assunto fora do escopo da Wiki médica;
|
|
67
|
+
- `low_value_fragment`: fragmento sem conteúdo médico aproveitável.
|
|
68
|
+
|
|
69
|
+
`reason` em texto livre é obrigatório e deve ser redigido e curto.
|
|
70
|
+
|
|
71
|
+
### `needs_context`
|
|
72
|
+
|
|
73
|
+
Use quando o raw chat **não permite segmentação semântica segura** para a
|
|
74
|
+
unidade em questão. Não é dúvida sobre cobertura existente: é dúvida sobre
|
|
75
|
+
identidade da unidade no próprio raw.
|
|
76
|
+
|
|
77
|
+
`reason_code` fechado:
|
|
78
|
+
|
|
79
|
+
- `evidence_insufficient`: o raw chat não traz texto suficiente para
|
|
80
|
+
sustentar `meaning_claim.scope`/`boundaries`;
|
|
81
|
+
- `multiple_topics_undifferentiated`: o raw mistura múltiplas unidades sem
|
|
82
|
+
que o triager consiga separá-las com segurança a partir do texto;
|
|
83
|
+
- `clinical_ambiguity`: contradição clínica no próprio raw que precisa de
|
|
84
|
+
revisão humana antes de virar nota;
|
|
85
|
+
- `language_or_encoding_blocker`: o raw está corrompido, truncado ou em
|
|
86
|
+
formato que o triager não consegue ler.
|
|
87
|
+
|
|
88
|
+
`needs_context` exige `reason` redigido. Pode existir junto de
|
|
89
|
+
`planned_meaning`/`attach_to_planned_meaning` (planos mistos são permitidos);
|
|
90
|
+
um plano inteiro só com `needs_context` é também válido e cabe ao planner
|
|
91
|
+
decidir entre re-triagem manual e bloqueio.
|
|
92
|
+
|
|
93
|
+
## Proibições
|
|
94
|
+
|
|
95
|
+
- Não declarar que uma nota já existe na Wiki. Isso é decisão do planner
|
|
96
|
+
contra Wiki/vocabulary DB.
|
|
97
|
+
- Não emitir `winner_path`, `merge_target` ou similar.
|
|
98
|
+
- Não consultar vocabulary DB como autoridade.
|
|
99
|
+
- Não usar título de nota Wiki existente como identidade — `meaning_claim`
|
|
100
|
+
vive em texto, não em filename.
|
|
101
|
+
- Não pedir decisão humana genérica. Se a dúvida é editorial, usar
|
|
102
|
+
`needs_context` com `reason_code` específico.
|
|
103
|
+
|
|
104
|
+
## Forma De `meaning_claim`
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"label": "Uso de ISRS em gestantes",
|
|
109
|
+
"scope": "seguranca, contraindicacoes e conduta clinica na gestacao",
|
|
110
|
+
"boundaries": [
|
|
111
|
+
"nao cobre mecanismo geral dos ISRS",
|
|
112
|
+
"nao cobre depressao puerperal como entidade separada"
|
|
113
|
+
],
|
|
114
|
+
"kind": "clinical_concept",
|
|
115
|
+
"evidence_summary": "O chat discute risco e conduta de ISRS na gestacao."
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Campos:
|
|
120
|
+
|
|
121
|
+
- `label`: nome humano da unidade. Curto.
|
|
122
|
+
- `scope`: o que está dentro da unidade. Uma frase.
|
|
123
|
+
- `boundaries`: 1–3 itens em lista descrevendo o que parece relacionado mas
|
|
124
|
+
fica fora. Lista vazia é permitida apenas quando a unidade não tem vizinho
|
|
125
|
+
próximo no raw.
|
|
126
|
+
- `kind`: tipo operacional fechado:
|
|
127
|
+
- `clinical_concept` (entidades clínicas, síndromes, manifestações);
|
|
128
|
+
- `drug_concept` (fármaco/classe);
|
|
129
|
+
- `diagnostic_criterion` (critério/escore);
|
|
130
|
+
- `management_strategy` (conduta/protocolo);
|
|
131
|
+
- `procedure` (procedimento);
|
|
132
|
+
- `physiology_or_mechanism` (mecanismo/fisiologia);
|
|
133
|
+
- `epidemiology_or_definition` (definição/epidemiologia).
|
|
134
|
+
- `evidence_summary`: resumo operacional **redigido** do que no raw sustenta
|
|
135
|
+
a unidade. Sem conteúdo clínico bruto longo, sem citação direta extensa.
|
|
136
|
+
|
|
137
|
+
## Critérios Editoriais Curtos
|
|
138
|
+
|
|
139
|
+
- Se o raw aborda dois assuntos vizinhos com escopo claro e evidência
|
|
140
|
+
separada → duas `planned_meaning` com `boundaries` apontando uma para a
|
|
141
|
+
outra.
|
|
142
|
+
- Se o raw aborda um assunto com vários detalhes que enriquecem aquela
|
|
143
|
+
unidade → uma `planned_meaning` + N `attach_to_planned_meaning`.
|
|
144
|
+
- Se o raw é principalmente operacional ou administrativo → o plano só
|
|
145
|
+
contém `not_a_note`. Plano todo `not_a_note` é válido e marca o raw como
|
|
146
|
+
descarte editorial.
|
|
147
|
+
- Se o raw é claramente médico mas o triager não consegue separar com
|
|
148
|
+
segurança → uma ou mais entradas `needs_context` com `reason_code` exato.
|
|
149
|
+
|
|
150
|
+
## O Que A Triagem Não Decide
|
|
151
|
+
|
|
152
|
+
- Existência prévia na Wiki.
|
|
153
|
+
- Path canônico ou taxonomia final.
|
|
154
|
+
- Quem é "winner" entre dois meanings parecidos.
|
|
155
|
+
- Se duas unidades de raws diferentes representam o mesmo meaning.
|
|
156
|
+
|
|
157
|
+
Tudo isso é responsabilidade do planner Python e/ou curator.
|
|
158
|
+
|
|
159
|
+
## Exemplos Curtos
|
|
160
|
+
|
|
161
|
+
Correto — granularidade ampla com anexos:
|
|
162
|
+
|
|
163
|
+
```text
|
|
164
|
+
T001 planned_meaning ISRS na gestação
|
|
165
|
+
T002 attach_to_planned_meaning → T001 (supporting_detail) farmacocinética
|
|
166
|
+
T003 attach_to_planned_meaning → T001 (boundary_clarification) puerpério não cobre
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Errado — fragmento abaixo da unidade:
|
|
170
|
+
|
|
171
|
+
```text
|
|
172
|
+
T001 planned_meaning Mecanismo de ação dos ISRS
|
|
173
|
+
T002 planned_meaning Meia-vida dos ISRS
|
|
174
|
+
T003 planned_meaning Recaptação de serotonina pelos ISRS
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Correto — descarte editorial:
|
|
178
|
+
|
|
179
|
+
```text
|
|
180
|
+
T001 not_a_note (administrative_chatter) Pedido operacional sem conteúdo médico.
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Correto — raw insuficiente:
|
|
184
|
+
|
|
185
|
+
```text
|
|
186
|
+
T001 needs_context (evidence_insufficient) Discussão fragmentada sobre HAS sem fechamento de escopo.
|
|
187
|
+
```
|