mega-brain-ai 1.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.
Potentially problematic release.
This version of mega-brain-ai might be problematic. Click here for more details.
- package/.claude/CLAUDE.md +155 -0
- package/.claude/commands/agents.md +161 -0
- package/.claude/commands/ask.md +117 -0
- package/.claude/commands/benchmark.md +224 -0
- package/.claude/commands/chat.md +343 -0
- package/.claude/commands/compare.md +116 -0
- package/.claude/commands/conclave.md +194 -0
- package/.claude/commands/config.md +133 -0
- package/.claude/commands/council.md +194 -0
- package/.claude/commands/create-agent.md +452 -0
- package/.claude/commands/debate.md +157 -0
- package/.claude/commands/documentation/create-architecture-documentation.md +175 -0
- package/.claude/commands/dossiers.md +180 -0
- package/.claude/commands/evolve.md +223 -0
- package/.claude/commands/extract-dna.md +170 -0
- package/.claude/commands/extract-knowledge.md +507 -0
- package/.claude/commands/inbox.md +296 -0
- package/.claude/commands/ingest-empresa.md +191 -0
- package/.claude/commands/ingest.md +182 -0
- package/.claude/commands/jarvis-briefing.md +67 -0
- package/.claude/commands/jarvis-control.md +169 -0
- package/.claude/commands/jarvis-full.md +181 -0
- package/.claude/commands/jarvis.md +212 -0
- package/.claude/commands/ler-drive.md +212 -0
- package/.claude/commands/log.md +158 -0
- package/.claude/commands/loop.md +133 -0
- package/.claude/commands/loops.md +73 -0
- package/.claude/commands/mission-autopilot.md +538 -0
- package/.claude/commands/mission.md +353 -0
- package/.claude/commands/process-inbox.md +148 -0
- package/.claude/commands/process-jarvis.md +3036 -0
- package/.claude/commands/process-video.md +131 -0
- package/.claude/commands/rag-search.md +78 -0
- package/.claude/commands/resume.md +33 -0
- package/.claude/commands/save.md +38 -0
- package/.claude/commands/scan-inbox.md +125 -0
- package/.claude/commands/setup.md +99 -0
- package/.claude/commands/system-digest.md +243 -0
- package/.claude/commands/verify.md +182 -0
- package/.claude/commands/view-dna.md +169 -0
- package/.claude/hooks/agent_doctor.py +433 -0
- package/.claude/hooks/agent_memory_persister.py +203 -0
- package/.claude/hooks/auto_formatter.py +158 -0
- package/.claude/hooks/checkpoint_writer.py +244 -0
- package/.claude/hooks/claude_md_guard.py +146 -0
- package/.claude/hooks/creation_validator.py +357 -0
- package/.claude/hooks/enforce_dual_location.py +501 -0
- package/.claude/hooks/enforce_plan_mode.py +220 -0
- package/.claude/hooks/inbox_age_alert.py +367 -0
- package/.claude/hooks/jarvis_briefing.py +506 -0
- package/.claude/hooks/ledger_updater.py +301 -0
- package/.claude/hooks/memory_hints_injector.py +251 -0
- package/.claude/hooks/memory_updater.py +202 -0
- package/.claude/hooks/multi_agent_hook.py +464 -0
- package/.claude/hooks/notification_system.py +120 -0
- package/.claude/hooks/pattern_analyzer.py +526 -0
- package/.claude/hooks/pending_tracker.py +188 -0
- package/.claude/hooks/post_batch_cascading.py +1740 -0
- package/.claude/hooks/post_output_validator.py +358 -0
- package/.claude/hooks/post_tool_use.py +120 -0
- package/.claude/hooks/post_write_validator.py +200 -0
- package/.claude/hooks/quality_watchdog.py +394 -0
- package/.claude/hooks/ralph_wiggum.py +277 -0
- package/.claude/hooks/session-source-sync.py +218 -0
- package/.claude/hooks/session_autosave_v2.py +1135 -0
- package/.claude/hooks/session_end.py +203 -0
- package/.claude/hooks/session_start.py +939 -0
- package/.claude/hooks/skill_indexer.py +48 -0
- package/.claude/hooks/skill_router.py +358 -0
- package/.claude/hooks/stop_hook_completeness.py +178 -0
- package/.claude/hooks/subagent_tracker.py +163 -0
- package/.claude/hooks/token_checkpoint.py +584 -0
- package/.claude/hooks/user_prompt_submit.py +125 -0
- package/.claude/rules/ANTHROPIC-STANDARDS.md +384 -0
- package/.claude/rules/CLAUDE-LITE.md +201 -0
- package/.claude/rules/RULE-GROUP-1.md +320 -0
- package/.claude/rules/RULE-GROUP-2.md +307 -0
- package/.claude/rules/RULE-GROUP-3.md +248 -0
- package/.claude/rules/RULE-GROUP-4.md +427 -0
- package/.claude/rules/RULE-GROUP-5.md +388 -0
- package/.claude/rules/RULE-GROUP-6.md +387 -0
- package/.claude/rules/logging.md +53 -0
- package/.claude/rules/mcp-governance.md +128 -0
- package/.claude/rules/pipeline.md +60 -0
- package/.claude/rules/state-management.md +93 -0
- package/.claude/scripts/apply-tags.py +77 -0
- package/.claude/scripts/batch-extract-transcriptions.py +132 -0
- package/.claude/scripts/build-complete-index.py +250 -0
- package/.claude/scripts/build-planilha-index.py +170 -0
- package/.claude/scripts/complete-tag-matching.py +250 -0
- package/.claude/scripts/deduplicate-inbox.py +139 -0
- package/.claude/scripts/docx-xml-extractor.py +141 -0
- package/.claude/scripts/extract-docx-text.py +58 -0
- package/.claude/scripts/extract-single-transcription.py +74 -0
- package/.claude/scripts/extract_docx_from_gdrive.py +77 -0
- package/.claude/scripts/organized-downloader.py +246 -0
- package/.claude/scripts/planilha-tagger.py +187 -0
- package/.claude/scripts/revert-tags.py +70 -0
- package/.claude/scripts/source-sync.py +265 -0
- package/.claude/scripts/tag-inbox-files.py +276 -0
- package/.claude/scripts/tag-inbox-v2.py +253 -0
- package/.claude/scripts/test-extraction.py +35 -0
- package/.claude/scripts/test-full-extraction.py +74 -0
- package/.claude/skills/00-SKILL-CREATOR/SKILL.md +186 -0
- package/.claude/skills/01-SKILL-DOCS-MEGABRAIN/SKILL.md +251 -0
- package/.claude/skills/02-SKILL-PYTHON-MEGABRAIN/SKILL.md +323 -0
- package/.claude/skills/03-SKILL-AGENT-CREATION/SKILL.md +374 -0
- package/.claude/skills/04-SKILL-KNOWLEDGE-EXTRACTION/SKILL.md +318 -0
- package/.claude/skills/05-SKILL-PIPELINE-JARVIS/SKILL.md +430 -0
- package/.claude/skills/06-SKILL-BRAINSTORMING/SKILL.md +72 -0
- package/.claude/skills/07-SKILL-DISPATCHING-PARALLEL-AGENTS/SKILL.md +193 -0
- package/.claude/skills/08-SKILL-EXECUTING-PLANS/SKILL.md +114 -0
- package/.claude/skills/09-SKILL-WRITING-PLANS/SKILL.md +184 -0
- package/.claude/skills/10-SKILL-VERIFICATION-BEFORE-COMPLETION/SKILL.md +130 -0
- package/.claude/skills/11-SKILL-USING-SUPERPOWERS/SKILL.md +105 -0
- package/.claude/skills/DETECTION-PROTOCOL.md +217 -0
- package/.claude/skills/README.md +240 -0
- package/.claude/skills/SKILL-REGISTRY.md +284 -0
- package/.claude/skills/SKILL-SUGGESTIONS.md +114 -0
- package/.claude/skills/_TEMPLATES/SKILL-WRITER-GUIDE.md +385 -0
- package/.claude/skills/chronicler/SKILL.md +146 -0
- package/.claude/skills/chronicler/chronicler_core.py +468 -0
- package/.claude/skills/code-review/SKILL.md +160 -0
- package/.claude/skills/council/SKILL.md +210 -0
- package/.claude/skills/executor/SKILL.md +161 -0
- package/.claude/skills/fase-2-5-tagging/SKILL.md +182 -0
- package/.claude/skills/feature-dev/SKILL.md +154 -0
- package/.claude/skills/finance-agent/SKILL.md +137 -0
- package/.claude/skills/frontend-design/SKILL.md +165 -0
- package/.claude/skills/gdrive-transcription-downloader/SKILL.md +249 -0
- package/.claude/skills/gemini-fallback/SKILL.md +67 -0
- package/.claude/skills/gemini-fallback/gemini_fetch.py +0 -0
- package/.claude/skills/gha/SKILL.md +96 -0
- package/.claude/skills/gha/gha_diagnostic.py +227 -0
- package/.claude/skills/github-workflow/SKILL.md +190 -0
- package/.claude/skills/hookify/SKILL.md +134 -0
- package/.claude/skills/hybrid-source-reading/SKILL.md +265 -0
- package/.claude/skills/jarvis/SKILL.md +546 -0
- package/.claude/skills/jarvis-briefing/SKILL.md +340 -0
- package/.claude/skills/ler-planilha/SKILL.md +281 -0
- package/.claude/skills/plugin-dev/SKILL.md +176 -0
- package/.claude/skills/pr-review-toolkit/SKILL.md +178 -0
- package/.claude/skills/resume/SKILL.md +61 -0
- package/.claude/skills/save/SKILL.md +87 -0
- package/.claude/skills/skill-writer/SKILL.md +153 -0
- package/.claude/skills/skill-writer/examples.md +191 -0
- package/.claude/skills/skill-writer/troubleshooting.md +205 -0
- package/.claude/skills/smart-download-tagger/SKILL.md +148 -0
- package/.claude/skills/source-sync/SKILL.md +240 -0
- package/.claude/skills/sync-docs/SKILL.md +193 -0
- package/.claude/skills/sync-docs/config.json +37 -0
- package/.claude/skills/sync-docs/gdrive_sync.py +358 -0
- package/.claude/skills/sync-docs/reauth.py +71 -0
- package/.claude/skills/talent-agent/SKILL.md +183 -0
- package/.claude/skills/verify/SKILL.md +154 -0
- package/.claude/skills/verify/verify_runner.py +0 -0
- package/.claude/skills/verify-6-levels/SKILL.md +234 -0
- package/.claude/templates/BATCH-LOG-TEMPLATE.md +221 -0
- package/.claudeignore +9 -0
- package/.gitattributes +4 -0
- package/.github/layer1-allowlist.txt +80 -0
- package/.github/layer2-manifest.txt +40 -0
- package/.gitignore +219 -0
- package/README.md +1210 -0
- package/agents/_templates/INDEX.md +741 -0
- package/agents/_templates/TEMPLATE-AGENT-MD-ULTRA-ROBUSTO-V3.md +2399 -0
- package/agents/boardroom/CHECKLIST-MASTER.md +281 -0
- package/agents/boardroom/INTEGRATION-GUIDE.md +406 -0
- package/agents/boardroom/README.md +238 -0
- package/agents/boardroom/config/BOARDROOM-CONFIG.md +186 -0
- package/agents/boardroom/config/TTS-INTEGRATION.md +258 -0
- package/agents/boardroom/config/VOICE-PROFILES.md +624 -0
- package/agents/boardroom/config/voice_mapping.json +128 -0
- package/agents/boardroom/scripts/audio_generator.py +375 -0
- package/agents/boardroom/scripts/audio_generator_edge.py +353 -0
- package/agents/boardroom/scripts/jarvis_boardroom_hook.py +415 -0
- package/agents/boardroom/scripts/notebooklm_generator.py +578 -0
- package/agents/boardroom/templates/EPISODE-TEMPLATE.md +367 -0
- package/agents/boardroom/templates/scene-templates/SCENE-AGENT-DEBATE.md +252 -0
- package/agents/boardroom/templates/scene-templates/SCENE-COUNCIL.md +270 -0
- package/agents/boardroom/templates/scene-templates/SCENE-DNA-CONSULTATION.md +126 -0
- package/agents/boardroom/templates/scene-templates/SCENE-QUESTION.md +174 -0
- package/agents/boardroom/workflows/WORKFLOW-AUDIO-GENERATION.md +421 -0
- package/agents/constitution/BASE-CONSTITUTION.md +254 -0
- package/agents/council/CRITIC.md +197 -0
- package/agents/council/DEVILS-ADVOCATE.md +274 -0
- package/agents/council/SYNTHESIZER.md +293 -0
- package/agents/council/advogado-do-diabo/AGENT.md +489 -0
- package/agents/council/advogado-do-diabo/SOUL.md +100 -0
- package/agents/council/critico-metodologico/AGENT.md +670 -0
- package/agents/council/critico-metodologico/SOUL.md +107 -0
- package/agents/council/sintetizador/AGENT.md +558 -0
- package/agents/council/sintetizador/SOUL.md +94 -0
- package/agents/persons/_example/AGENT-EXAMPLE.md +42 -0
- package/agents/persons/_example/DNA-EXAMPLE.yaml +61 -0
- package/agents/protocols/AGENT-COGNITION-PROTOCOL.md +779 -0
- package/agents/protocols/AGENT-INTEGRITY-PROTOCOL.md +692 -0
- package/agents/protocols/BATCH-VISUAL-PROTOCOL.md +841 -0
- package/agents/protocols/DNA-CONFIG-TEMPLATE.yaml +181 -0
- package/agents/protocols/DNA-EXTRACTION-PROTOCOL.md +370 -0
- package/agents/protocols/EPISTEMIC-PROTOCOL.md +333 -0
- package/agents/protocols/LOG-STRUCTURE-PROTOCOL.md +65 -0
- package/agents/protocols/MEMORY-PROTOCOL.md +567 -0
- package/agents/protocols/NARRATIVE-SYNTHESIS-PROTOCOL.md +278 -0
- package/agents/protocols/PHASE-4-VERIFICATION-CHECKPOINT.md +146 -0
- package/agents/protocols/SOUL-TEMPLATE.md +416 -0
- package/agents/protocols/TEMPLATE-EVOLUTION-PROTOCOL.md +544 -0
- package/agents/protocols/VISUAL-DIFF-PROTOCOL.md +159 -0
- package/agents/sua-empresa/README.md +44 -0
- package/agents/sua-empresa/_example/jds/EXAMPLE-JD.md +42 -0
- package/agents/sua-empresa/_example/org/EXAMPLE-ORG.md +32 -0
- package/agents/sua-empresa/_example/roles/EXAMPLE-ROLE.md +38 -0
- package/bin/cli.js +2 -0
- package/bin/lib/ascii-art.js +234 -0
- package/bin/lib/installer.js +402 -0
- package/bin/lib/setup-wizard.js +95 -0
- package/bin/lib/validate-email.js +109 -0
- package/bin/mega-brain.js +97 -0
- package/bin/push.js +342 -0
- package/bin/templates/env.example +38 -0
- package/inbox/.gitkeep +0 -0
- package/integrations/README.md +46 -0
- package/integrations/mcps/MCP-REGISTRY.md +56 -0
- package/integrations/mcps/excalidraw/CONFIG.md +56 -0
- package/integrations/mcps/gdrive/CONFIG.md +38 -0
- package/knowledge/dna/.gitkeep +0 -0
- package/knowledge/dossiers/persons/.gitkeep +0 -0
- package/knowledge/dossiers/persons/DOSSIER-EXAMPLE.md +49 -0
- package/knowledge/dossiers/system/.gitkeep +0 -0
- package/knowledge/dossiers/themes/.gitkeep +0 -0
- package/knowledge/playbooks/.gitkeep +0 -0
- package/knowledge/playbooks/PLAYBOOK-EXAMPLE.md +50 -0
- package/knowledge/sources/.gitkeep +0 -0
- package/logs/.gitkeep +0 -0
- package/package.json +128 -0
- package/processing/canonical/.gitkeep +0 -0
- package/processing/chunks/.gitkeep +0 -0
- package/processing/insights/.gitkeep +0 -0
- package/processing/narratives/.gitkeep +0 -0
- package/reference/CONSELHO.md +337 -0
- package/reference/CONTEXT7_README.md +28 -0
- package/reference/JARVIS-LOGGING-PROTOCOL.md +380 -0
- package/reference/QUICK-START.md +197 -0
- package/reference/README-RALPH-CASCATEAMENTO.md +207 -0
- package/reference/TEMPLATE-MASTER.md +727 -0
- package/reference/prds/prd-jarvis-mega-brain-v3.md +1305 -0
- package/reference/templates/phase5/IMPLEMENTATION-GUIDE.md +355 -0
- package/reference/templates/phase5/MOGA-BRAIN-PHASE5-TEMPLATES.md +1284 -0
- package/reference/templates/phase5/README.md +165 -0
- package/reference/workflow-claude-code-boris-cherny-continuous-claude.md +2232 -0
- package/system/database/001_moneyclub_buyers.sql +160 -0
- package/system/database/002_premium_token.sql +97 -0
- package/system/database/apply-migration.mjs +129 -0
- package/system/docs/MEGA-BRAIN-DEMO-COMPLETA.md +1226 -0
- package/system/docs/MEGA-BRAIN-MANIFESTO-COMPLETO.md +1054 -0
- package/system/docs/MOGA-BRAIN-EXPLICACAO-COMPLETA.md +791 -0
- package/system/docs/STRATEGIC-INTEGRATION-GUIDE.md +725 -0
- package/system/docs/architecture/01-system-context.md +136 -0
- package/system/docs/architecture/02-components.md +225 -0
- package/system/docs/architecture/03-data-flow.md +235 -0
- package/system/docs/architecture/04-integrations.md +283 -0
- package/system/docs/architecture/README.md +71 -0
- package/system/docs/architecture/diagrams/component-diagram.mmd +50 -0
- package/system/docs/architecture/diagrams/data-flow.mmd +39 -0
- package/system/docs/architecture/diagrams/system-overview.mmd +68 -0
- package/system/protocols/AGENT-AUTHORITY.md +217 -0
- package/system/protocols/CONSTITUICAO-BASE.md +115 -0
- package/system/protocols/CONSTITUTION.md +231 -0
- package/system/protocols/GOVERNANCE-MAP.md +123 -0
- package/system/protocols/HOOK-SECURITY-THREAT-MODEL.md +152 -0
- package/system/protocols/ORQUESTRACAO-PROTOCOL.md +215 -0
- package/system/protocols/_archive/CHUNKING-PROTOCOL.md +207 -0
- package/system/protocols/_archive/ENTITY-RESOLUTION-PROTOCOL.md +269 -0
- package/system/protocols/_archive/INSIGHT-EXTRACTION-PROTOCOL.md +257 -0
- package/system/protocols/_archive/NARRATIVE-SYNTHESIS-PROTOCOL.md +290 -0
- package/system/protocols/agents/AGENT-INTERACTION.md +315 -0
- package/system/protocols/agents/CORTEX-PROTOCOL.md +520 -0
- package/system/protocols/agents/EPISTEMIC-PROTOCOL.md +465 -0
- package/system/protocols/agents/MEMORY-PROTOCOL.md +366 -0
- package/system/protocols/agents/WAR-ROOM.md +355 -0
- package/system/protocols/company/COMPANY-DOCUMENT-PROTOCOL.md +793 -0
- package/system/protocols/company/COMPANY-ENRICHMENT-PROTOCOL.md +679 -0
- package/system/protocols/conclave/CONCLAVE-LOG-TEMPLATE-v2.md +309 -0
- package/system/protocols/conclave/CONCLAVE-PROTOCOL.md +518 -0
- package/system/protocols/conclave/DEBATE-DYNAMICS-CONFIG.yaml +322 -0
- package/system/protocols/conclave/DEBATE-DYNAMICS-PROTOCOL.md +613 -0
- package/system/protocols/conclave/DEBATE-PROTOCOL.md +323 -0
- package/system/protocols/council/COUNCIL-LOG-TEMPLATE-v2.md +309 -0
- package/system/protocols/council/COUNCIL-PROTOCOL.md +518 -0
- package/system/protocols/council/DEBATE-DYNAMICS-CONFIG.yaml +322 -0
- package/system/protocols/council/DEBATE-DYNAMICS-PROTOCOL.md +613 -0
- package/system/protocols/council/DEBATE-PROTOCOL.md +323 -0
- package/system/protocols/dna/DNA-EXTRACTION-PROTOCOL.md +1214 -0
- package/system/protocols/dna/ENRICHMENT-PROTOCOL.md +408 -0
- package/system/protocols/dna/REASONING-MODEL-PROTOCOL.md +331 -0
- package/system/protocols/pipeline/DOSSIER-COMPILATION-PROTOCOL.md +790 -0
- package/system/protocols/pipeline/NARRATIVE-METABOLISM-PROTOCOL.md +292 -0
- package/system/protocols/pipeline/PIPELINE-JARVIS-v2.1.md +606 -0
- package/system/protocols/pipeline/PROMPT-1.1-CHUNKING.md +154 -0
- package/system/protocols/pipeline/PROMPT-1.2-ENTITY-RESOLUTION.md +186 -0
- package/system/protocols/pipeline/PROMPT-2.1-DNA-TAGS-INCREMENT.md +208 -0
- package/system/protocols/pipeline/PROMPT-2.1-INSIGHT-EXTRACTION.md +191 -0
- package/system/protocols/pipeline/PROMPT-3.1-NARRATIVE-SYNTHESIS.md +331 -0
- package/system/protocols/pipeline/SOURCES-COMPILATION-PROTOCOL.md +340 -0
- package/system/protocols/system/AUTO-LOG-PROTOCOL.md +369 -0
- package/system/protocols/system/CHECKPOINT-ENFORCEMENT.md +176 -0
- package/system/protocols/system/ENFORCEMENT.md +435 -0
- package/system/protocols/system/LOG-TEMPLATES.md +1068 -0
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
# ENFORCEMENT RULES
|
|
2
|
+
## Regras que Impedem Atalhos no Pipeline Jarvis v2.1
|
|
3
|
+
|
|
4
|
+
> **Versão:** 2.0.0
|
|
5
|
+
> **Atualizado:** 2025-12-18
|
|
6
|
+
> **Propósito:** Bloquear execução sem pré-requisitos + garantir integridade
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## VISÃO GERAL
|
|
11
|
+
|
|
12
|
+
O sistema de **Enforcement** garante que o pipeline seja executado **completamente**, sem atalhos que comprometam a integridade dos dados.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## O PROBLEMA DOS ATALHOS
|
|
17
|
+
|
|
18
|
+
### O Que São Atalhos?
|
|
19
|
+
|
|
20
|
+
Atalhos ocorrem quando o pipeline pula fases, resultando em:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
ATALHO (ERRADO):
|
|
24
|
+
Transcript → [Leitura direta] → THEMES/*.md ou DOSSIER/*.md → MEMORYs
|
|
25
|
+
⬇️
|
|
26
|
+
SEM chunks, SEM canonical, SEM insights-state, SEM narratives
|
|
27
|
+
|
|
28
|
+
PIPELINE CORRETO:
|
|
29
|
+
Transcript → Chunks → Entities → Insights → Narratives → DOSSIER → MEMORYs
|
|
30
|
+
⬇️ ⬇️ ⬇️ ⬇️ ⬇️
|
|
31
|
+
STATE FILE STATE FILE STATE FILE STATE FILE RASTREÁVEL
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Consequências dos Atalhos
|
|
35
|
+
|
|
36
|
+
| Consequência | Impacto |
|
|
37
|
+
|--------------|---------|
|
|
38
|
+
| State files vazios | Não é possível rastrear o que foi processado |
|
|
39
|
+
| Sem chunk_ids | Não é possível citar fontes |
|
|
40
|
+
| Sem canonicalização | Entidades duplicadas/inconsistentes |
|
|
41
|
+
| DOSSIERs incompletos | Agentes consultam informação parcial |
|
|
42
|
+
| MEMORYs sem referência | Conhecimento sem fonte verificável |
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## REGRAS DE ENFORCEMENT
|
|
47
|
+
|
|
48
|
+
### REGRA 1: Bloqueio de Escrita Direta
|
|
49
|
+
|
|
50
|
+
**Antes de criar/modificar arquivos em `/knowledge/`, verificar:**
|
|
51
|
+
|
|
52
|
+
```python
|
|
53
|
+
def enforce_before_knowledge_write(target_path, source_id):
|
|
54
|
+
"""
|
|
55
|
+
BLOQUEIA escrita em /knowledge/ se pipeline não foi executado
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
# 1. Verificar se chunks existem para este source_id
|
|
59
|
+
chunks_state = load_json("/processing/chunks/CHUNKS-STATE.json")
|
|
60
|
+
source_chunks = [c for c in chunks_state["chunks"] if c["meta"]["source_id"] == source_id]
|
|
61
|
+
|
|
62
|
+
if len(source_chunks) == 0:
|
|
63
|
+
raise EnforcementError(
|
|
64
|
+
code="NO_CHUNKS",
|
|
65
|
+
message=f"Não é possível escrever em {target_path}. "
|
|
66
|
+
f"Source {source_id} não tem chunks em CHUNKS-STATE.json. "
|
|
67
|
+
f"Execute o pipeline completo primeiro.",
|
|
68
|
+
action="run /process-jarvis"
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# 2. Verificar se insights existem
|
|
72
|
+
insights_state = load_json("/processing/insights/INSIGHTS-STATE.json")
|
|
73
|
+
has_insights = any(
|
|
74
|
+
source_id in [i["source"]["id"] for i in person_insights]
|
|
75
|
+
for person_insights in insights_state["insights_state"]["persons"].values()
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
if not has_insights:
|
|
79
|
+
raise EnforcementError(
|
|
80
|
+
code="NO_INSIGHTS",
|
|
81
|
+
message=f"Não é possível escrever em {target_path}. "
|
|
82
|
+
f"Source {source_id} não tem insights em INSIGHTS-STATE.json. "
|
|
83
|
+
f"Execute o pipeline completo primeiro.",
|
|
84
|
+
action="run /process-jarvis"
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
# 3. Verificar se narrativa existe (para DOSSIERs)
|
|
88
|
+
if "dossiers" in target_path:
|
|
89
|
+
narratives_state = load_json("/processing/narratives/NARRATIVES-STATE.json")
|
|
90
|
+
person_name = extract_person_from_path(target_path)
|
|
91
|
+
|
|
92
|
+
if person_name not in narratives_state["narratives_state"]["persons"]:
|
|
93
|
+
raise EnforcementError(
|
|
94
|
+
code="NO_NARRATIVE",
|
|
95
|
+
message=f"Não é possível criar DOSSIER para {person_name}. "
|
|
96
|
+
f"Narrativa não existe em NARRATIVES-STATE.json. "
|
|
97
|
+
f"Execute o pipeline completo primeiro.",
|
|
98
|
+
action="run /process-jarvis"
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
# Se passou todas as verificações, permite escrita
|
|
102
|
+
return True
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### REGRA 2: Checkpoints Bloqueantes
|
|
108
|
+
|
|
109
|
+
**Após cada fase crítica, verificar antes de continuar:**
|
|
110
|
+
|
|
111
|
+
```python
|
|
112
|
+
CHECKPOINTS = {
|
|
113
|
+
"PHASE_2": {
|
|
114
|
+
"verify": lambda ctx: len(ctx.new_chunks) > 0,
|
|
115
|
+
"error": "Phase 2 não produziu chunks",
|
|
116
|
+
"action": "EXIT"
|
|
117
|
+
},
|
|
118
|
+
"PHASE_3": {
|
|
119
|
+
"verify": lambda ctx: ctx.source_person in ctx.canonical_map["persons"],
|
|
120
|
+
"error": "SOURCE_PERSON não foi canonicalizada",
|
|
121
|
+
"action": "WARN" # Warning mas continua
|
|
122
|
+
},
|
|
123
|
+
"PHASE_4": {
|
|
124
|
+
"verify": lambda ctx: (
|
|
125
|
+
ctx.source_person in ctx.insights_state["persons"] and
|
|
126
|
+
len(ctx.insights_state["persons"][ctx.source_person]) > 0
|
|
127
|
+
),
|
|
128
|
+
"error": "Phase 4 não produziu insights",
|
|
129
|
+
"action": "EXIT"
|
|
130
|
+
},
|
|
131
|
+
"PHASE_5": {
|
|
132
|
+
"verify": lambda ctx: (
|
|
133
|
+
ctx.source_person in ctx.narratives_state["persons"] and
|
|
134
|
+
len(ctx.narratives_state["persons"][ctx.source_person]["narrative"]) > 100
|
|
135
|
+
),
|
|
136
|
+
"error": "Phase 5 não produziu narrativa",
|
|
137
|
+
"action": "EXIT"
|
|
138
|
+
},
|
|
139
|
+
"PHASE_6": {
|
|
140
|
+
"verify": lambda ctx: exists(f"/knowledge/dossiers/persons/DOSSIER-{ctx.source_person}.md"),
|
|
141
|
+
"error": "Phase 6 não criou DOSSIER",
|
|
142
|
+
"action": "EXIT"
|
|
143
|
+
},
|
|
144
|
+
"PHASE_7": {
|
|
145
|
+
"verify": lambda ctx: all([
|
|
146
|
+
ctx.chunks_verified,
|
|
147
|
+
ctx.canonical_verified,
|
|
148
|
+
ctx.insights_verified,
|
|
149
|
+
ctx.narratives_verified,
|
|
150
|
+
ctx.dossier_verified,
|
|
151
|
+
ctx.memory_verified,
|
|
152
|
+
ctx.rag_verified,
|
|
153
|
+
ctx.registry_verified,
|
|
154
|
+
ctx.session_verified
|
|
155
|
+
]),
|
|
156
|
+
"error": "Verification checklist falhou",
|
|
157
|
+
"action": "EXIT"
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
def run_checkpoint(phase_id, context):
|
|
162
|
+
"""
|
|
163
|
+
Executa checkpoint e bloqueia se falhar
|
|
164
|
+
"""
|
|
165
|
+
checkpoint = CHECKPOINTS[phase_id]
|
|
166
|
+
|
|
167
|
+
if not checkpoint["verify"](context):
|
|
168
|
+
if checkpoint["action"] == "EXIT":
|
|
169
|
+
raise CheckpointError(
|
|
170
|
+
phase=phase_id,
|
|
171
|
+
message=checkpoint["error"],
|
|
172
|
+
context=context.to_dict()
|
|
173
|
+
)
|
|
174
|
+
elif checkpoint["action"] == "WARN":
|
|
175
|
+
log_warning(f"[{phase_id}] {checkpoint['error']}")
|
|
176
|
+
|
|
177
|
+
log_success(f"✓ CHECKPOINT {phase_id}: OK")
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
### REGRA 3: Validação de Integridade dos State Files
|
|
183
|
+
|
|
184
|
+
**Antes de cada operação, verificar integridade:**
|
|
185
|
+
|
|
186
|
+
```python
|
|
187
|
+
def validate_state_files():
|
|
188
|
+
"""
|
|
189
|
+
Valida que todos os state files estão íntegros e consistentes
|
|
190
|
+
"""
|
|
191
|
+
errors = []
|
|
192
|
+
|
|
193
|
+
# 1. CHUNKS-STATE deve ter estrutura válida
|
|
194
|
+
chunks = load_json("/processing/chunks/CHUNKS-STATE.json")
|
|
195
|
+
if "chunks" not in chunks and "sources" not in chunks:
|
|
196
|
+
errors.append("CHUNKS-STATE.json com estrutura inválida")
|
|
197
|
+
|
|
198
|
+
# 2. CANONICAL-MAP deve ter estrutura válida
|
|
199
|
+
canonical = load_json("/processing/canonical/CANONICAL-MAP.json")
|
|
200
|
+
if "entities" not in canonical:
|
|
201
|
+
errors.append("CANONICAL-MAP.json com estrutura inválida")
|
|
202
|
+
|
|
203
|
+
# 3. INSIGHTS-STATE deve ter estrutura válida
|
|
204
|
+
insights = load_json("/processing/insights/INSIGHTS-STATE.json")
|
|
205
|
+
if "categories" not in insights and "insights_state" not in insights:
|
|
206
|
+
errors.append("INSIGHTS-STATE.json com estrutura inválida")
|
|
207
|
+
|
|
208
|
+
# 4. NARRATIVES-STATE deve ter estrutura válida
|
|
209
|
+
narratives = load_json("/processing/narratives/NARRATIVES-STATE.json")
|
|
210
|
+
if "persons" not in narratives and "themes" not in narratives:
|
|
211
|
+
errors.append("NARRATIVES-STATE.json com estrutura inválida")
|
|
212
|
+
|
|
213
|
+
# 5. Cross-validation: insights devem referenciar chunks existentes
|
|
214
|
+
# (implementar conforme necessidade)
|
|
215
|
+
|
|
216
|
+
if errors:
|
|
217
|
+
raise IntegrityError(errors)
|
|
218
|
+
|
|
219
|
+
return True
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
### REGRA 4: Auditoria de Operações
|
|
225
|
+
|
|
226
|
+
**Toda operação deve ser logada:**
|
|
227
|
+
|
|
228
|
+
```python
|
|
229
|
+
AUDIT_LOG_PATH = "/logs/AUDIT/audit.jsonl"
|
|
230
|
+
|
|
231
|
+
def audit_operation(operation_type, details):
|
|
232
|
+
"""
|
|
233
|
+
Loga toda operação para auditoria
|
|
234
|
+
"""
|
|
235
|
+
entry = {
|
|
236
|
+
"timestamp": datetime.now().isoformat(),
|
|
237
|
+
"operation": operation_type,
|
|
238
|
+
"details": details,
|
|
239
|
+
"checksum": compute_checksum(details)
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
append_jsonl(AUDIT_LOG_PATH, entry)
|
|
243
|
+
|
|
244
|
+
# Operações auditadas
|
|
245
|
+
AUDITED_OPERATIONS = [
|
|
246
|
+
"CHUNK_CREATE",
|
|
247
|
+
"ENTITY_RESOLVE",
|
|
248
|
+
"INSIGHT_EXTRACT",
|
|
249
|
+
"NARRATIVE_SYNTHESIZE",
|
|
250
|
+
"DOSSIER_CREATE",
|
|
251
|
+
"DOSSIER_UPDATE",
|
|
252
|
+
"MEMORY_UPDATE",
|
|
253
|
+
"RAG_INDEX",
|
|
254
|
+
"STATE_FILE_WRITE"
|
|
255
|
+
]
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
### REGRA 5: Proteção Contra Sobrescrita
|
|
261
|
+
|
|
262
|
+
**Nunca sobrescrever, sempre fazer merge incremental:**
|
|
263
|
+
|
|
264
|
+
```python
|
|
265
|
+
def safe_write_state_file(path, new_data, merge_strategy):
|
|
266
|
+
"""
|
|
267
|
+
Escreve em state file com proteção contra perda de dados
|
|
268
|
+
"""
|
|
269
|
+
|
|
270
|
+
# 1. Backup do estado atual
|
|
271
|
+
if exists(path):
|
|
272
|
+
current = load_json(path)
|
|
273
|
+
backup_path = f"{path}.backup.{datetime.now().strftime('%Y%m%d%H%M%S')}"
|
|
274
|
+
write_json(backup_path, current)
|
|
275
|
+
else:
|
|
276
|
+
current = create_empty_state(path)
|
|
277
|
+
|
|
278
|
+
# 2. Merge incremental (nunca substituição total)
|
|
279
|
+
if merge_strategy == "APPEND":
|
|
280
|
+
merged = deep_merge_append(current, new_data)
|
|
281
|
+
elif merge_strategy == "UPDATE":
|
|
282
|
+
merged = deep_merge_update(current, new_data)
|
|
283
|
+
else:
|
|
284
|
+
raise ValueError(f"Estratégia de merge inválida: {merge_strategy}")
|
|
285
|
+
|
|
286
|
+
# 3. Atualizar metadata
|
|
287
|
+
merged["meta"]["last_updated"] = datetime.now().isoformat()
|
|
288
|
+
merged["meta"]["version"] = current["meta"].get("version", 0) + 1
|
|
289
|
+
|
|
290
|
+
# 4. Validar integridade antes de escrever
|
|
291
|
+
validate_state_structure(merged, path)
|
|
292
|
+
|
|
293
|
+
# 5. Escrever
|
|
294
|
+
write_json(path, merged)
|
|
295
|
+
|
|
296
|
+
# 6. Auditar
|
|
297
|
+
audit_operation("STATE_FILE_WRITE", {
|
|
298
|
+
"path": path,
|
|
299
|
+
"strategy": merge_strategy,
|
|
300
|
+
"items_before": count_items(current),
|
|
301
|
+
"items_after": count_items(merged),
|
|
302
|
+
"backup": backup_path
|
|
303
|
+
})
|
|
304
|
+
|
|
305
|
+
return merged
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## MATRIZ DE ENFORCEMENT
|
|
311
|
+
|
|
312
|
+
| Operação | Verificação Requerida | Ação se Falhar |
|
|
313
|
+
|----------|----------------------|----------------|
|
|
314
|
+
| Criar DOSSIER pessoa | Narrativa existe | BLOQUEAR |
|
|
315
|
+
| Criar DOSSIER tema | 2+ pessoas no tema | SKIP com log |
|
|
316
|
+
| Atualizar MEMORY | DOSSIER correspondente existe | BLOQUEAR |
|
|
317
|
+
| Criar arquivo em THEMES/ | Chunks existem | BLOQUEAR |
|
|
318
|
+
| Indexar no RAG | Arquivo foi gerado pelo pipeline | WARN |
|
|
319
|
+
| Avançar Phase 3→4 | Checkpoint Phase 2 passou | BLOQUEAR |
|
|
320
|
+
| Avançar Phase 4→5 | Checkpoint Phase 4 passou | BLOQUEAR |
|
|
321
|
+
| Avançar Phase 5→6 | Checkpoint Phase 5 passou | BLOQUEAR |
|
|
322
|
+
| Avançar Phase 6→7 | Checkpoint Phase 6 passou | BLOQUEAR |
|
|
323
|
+
| Finalizar pipeline | Todos os 9 itens do checklist | BLOQUEAR |
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## MENSAGENS DE ERRO
|
|
328
|
+
|
|
329
|
+
### Formato Padrão
|
|
330
|
+
|
|
331
|
+
```
|
|
332
|
+
┌───────────────────────────────────────────────────────────────────────────────┐
|
|
333
|
+
│ ⛔ ENFORCEMENT ERROR │
|
|
334
|
+
├───────────────────────────────────────────────────────────────────────────────┤
|
|
335
|
+
│ │
|
|
336
|
+
│ Código: {ERROR_CODE} │
|
|
337
|
+
│ Operação bloqueada: {OPERATION} │
|
|
338
|
+
│ │
|
|
339
|
+
│ Motivo: │
|
|
340
|
+
│ {DETAILED_REASON} │
|
|
341
|
+
│ │
|
|
342
|
+
│ Estado atual: │
|
|
343
|
+
│ {CURRENT_STATE} │
|
|
344
|
+
│ │
|
|
345
|
+
│ Para resolver: │
|
|
346
|
+
│ {RESOLUTION_COMMAND} │
|
|
347
|
+
│ │
|
|
348
|
+
└───────────────────────────────────────────────────────────────────────────────┘
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
### Exemplo Real
|
|
352
|
+
|
|
353
|
+
```
|
|
354
|
+
┌───────────────────────────────────────────────────────────────────────────────┐
|
|
355
|
+
│ ⛔ ENFORCEMENT ERROR │
|
|
356
|
+
├───────────────────────────────────────────────────────────────────────────────┤
|
|
357
|
+
│ │
|
|
358
|
+
│ Código: NO_CHUNKS │
|
|
359
|
+
│ Operação bloqueada: Criar DOSSIER-Jeremy-Haynes.md │
|
|
360
|
+
│ │
|
|
361
|
+
│ Motivo: │
|
|
362
|
+
│ Não é possível criar DOSSIER para Jeremy Haynes. │
|
|
363
|
+
│ Source JH001 não tem chunks em CHUNKS-STATE.json. │
|
|
364
|
+
│ O material não passou pelas fases 2-5 do pipeline. │
|
|
365
|
+
│ │
|
|
366
|
+
│ Estado atual: │
|
|
367
|
+
│ - CHUNKS-STATE.json: 0 chunks para JH001 │
|
|
368
|
+
│ - INSIGHTS-STATE.json: Jeremy Haynes não existe │
|
|
369
|
+
│ - NARRATIVES-STATE.json: Jeremy Haynes não existe │
|
|
370
|
+
│ │
|
|
371
|
+
│ Para resolver: │
|
|
372
|
+
│ /process-jarvis inbox/JEREMY\ HAYNES/PODCASTS/recurring-high-ticket.txt │
|
|
373
|
+
│ │
|
|
374
|
+
└───────────────────────────────────────────────────────────────────────────────┘
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## BYPASS DE EMERGÊNCIA
|
|
380
|
+
|
|
381
|
+
Em casos excepcionais, o enforcement pode ser bypassado com flag explícita:
|
|
382
|
+
|
|
383
|
+
```bash
|
|
384
|
+
/process-jarvis arquivo.txt --bypass-enforcement --reason "Migração de dados legados"
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
**IMPORTANTE:**
|
|
388
|
+
- Requer flag `--reason` com justificativa
|
|
389
|
+
- Gera log de auditoria especial
|
|
390
|
+
- Marca o output como "BYPASS" para revisão posterior
|
|
391
|
+
- Deve ser usado APENAS em migrações ou correções
|
|
392
|
+
|
|
393
|
+
```python
|
|
394
|
+
def handle_bypass(reason):
|
|
395
|
+
"""
|
|
396
|
+
Processa bypass de enforcement
|
|
397
|
+
"""
|
|
398
|
+
if not reason or len(reason) < 10:
|
|
399
|
+
raise ValueError("--reason deve ter pelo menos 10 caracteres")
|
|
400
|
+
|
|
401
|
+
audit_operation("ENFORCEMENT_BYPASS", {
|
|
402
|
+
"reason": reason,
|
|
403
|
+
"user": get_current_user(),
|
|
404
|
+
"timestamp": datetime.now().isoformat()
|
|
405
|
+
})
|
|
406
|
+
|
|
407
|
+
log_warning(f"⚠️ ENFORCEMENT BYPASS: {reason}")
|
|
408
|
+
log_warning("Outputs serão marcados como BYPASS para revisão")
|
|
409
|
+
|
|
410
|
+
return True
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
---
|
|
414
|
+
|
|
415
|
+
## CHECKLIST DE IMPLEMENTAÇÃO
|
|
416
|
+
|
|
417
|
+
Para implementar o enforcement, o Claude Code deve:
|
|
418
|
+
|
|
419
|
+
- [x] Adicionar verificação antes de escrever em `/knowledge/`
|
|
420
|
+
- [x] Implementar checkpoints após cada fase
|
|
421
|
+
- [x] Criar função de validação de state files
|
|
422
|
+
- [x] Implementar audit log
|
|
423
|
+
- [x] Criar proteção contra sobrescrita
|
|
424
|
+
- [x] Implementar mensagens de erro formatadas
|
|
425
|
+
- [x] Criar flag de bypass para emergências
|
|
426
|
+
- [x] Integrar com logs do pipeline
|
|
427
|
+
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
## CHANGELOG
|
|
431
|
+
|
|
432
|
+
| Versão | Data | Mudança |
|
|
433
|
+
|--------|------|---------|
|
|
434
|
+
| 2.0.0 | 2025-12-18 | Versão completa com todas as regras de enforcement |
|
|
435
|
+
| 1.0.0 | 2025-12-18 | Criação inicial (checkpoints básicos) |
|