miner-harness 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. miner_harness-0.1.0/.claude/settings.local.json +35 -0
  2. miner_harness-0.1.0/.coverage.claude.pid3.XTQBlLZx.HLhidamyyZvh +0 -0
  3. miner_harness-0.1.0/.git +1 -0
  4. miner_harness-0.1.0/.github/pull_request_template.md +32 -0
  5. miner_harness-0.1.0/.github/workflows/ci.yml +95 -0
  6. miner_harness-0.1.0/.github/workflows/e2e.yml +62 -0
  7. miner_harness-0.1.0/.github/workflows/release.yml +58 -0
  8. miner_harness-0.1.0/.gitignore +48 -0
  9. miner_harness-0.1.0/CHANGELOG.md +70 -0
  10. miner_harness-0.1.0/CLAUDE.md +122 -0
  11. miner_harness-0.1.0/CONTRIBUTING.md +92 -0
  12. miner_harness-0.1.0/PKG-INFO +202 -0
  13. miner_harness-0.1.0/README.md +159 -0
  14. miner_harness-0.1.0/docs/adr/ADR-001-stack-decision.md +65 -0
  15. miner_harness-0.1.0/docs/adr/ADR-002-geosgb-data-access.md +220 -0
  16. miner_harness-0.1.0/docs/adr/ADR-003-engineering-security-standards.md +166 -0
  17. miner_harness-0.1.0/docs/adr/ADR-004-user-interface.md +79 -0
  18. miner_harness-0.1.0/docs/adr/ADR-005-remote-sensing-strategy.md +79 -0
  19. miner_harness-0.1.0/docs/architecture/branch-protection.md +93 -0
  20. miner_harness-0.1.0/docs/architecture/environment-protocols.md +131 -0
  21. miner_harness-0.1.0/docs/architecture/fase-0-baseline-governanca.md +162 -0
  22. miner_harness-0.1.0/docs/architecture/fase-0-gate-saida.md +138 -0
  23. miner_harness-0.1.0/docs/architecture/fase-1-discovery-report.md +287 -0
  24. miner_harness-0.1.0/docs/architecture/fase-1-gate-saida.md +84 -0
  25. miner_harness-0.1.0/docs/architecture/fase-10-gate-saida.md +126 -0
  26. miner_harness-0.1.0/docs/architecture/fase-11-gate-saida.md +112 -0
  27. miner_harness-0.1.0/docs/architecture/fase-2-gate-saida.md +87 -0
  28. miner_harness-0.1.0/docs/architecture/fase-3-gate-saida.md +135 -0
  29. miner_harness-0.1.0/docs/architecture/fase-4-gate-saida.md +139 -0
  30. miner_harness-0.1.0/docs/architecture/fase-5-gate-saida.md +127 -0
  31. miner_harness-0.1.0/docs/architecture/fase-6-gate-saida.md +124 -0
  32. miner_harness-0.1.0/docs/architecture/fase-7-gate-saida.md +123 -0
  33. miner_harness-0.1.0/docs/architecture/fase-8-gate-saida.md +109 -0
  34. miner_harness-0.1.0/docs/architecture/fase-9-gate-saida.md +119 -0
  35. miner_harness-0.1.0/docs/architecture/knowledge-crystallization-local.md +121 -0
  36. miner_harness-0.1.0/docs/architecture/system-overview.md +97 -0
  37. miner_harness-0.1.0/docs/architecture/wizard-gate-saida.md +45 -0
  38. miner_harness-0.1.0/docs/personas/dr-augusto-valen.md +108 -0
  39. miner_harness-0.1.0/docs/prd/PRD-001-miner-harness.md +169 -0
  40. miner_harness-0.1.0/docs/rca/.gitkeep +0 -0
  41. miner_harness-0.1.0/docs/rfc/.gitkeep +0 -0
  42. miner_harness-0.1.0/docs/rfc/RFC-001-geosgb-connector.md +344 -0
  43. miner_harness-0.1.0/docs/rfc/RFC-002-agent-orchestration.md +732 -0
  44. miner_harness-0.1.0/docs/rfc/RFC-003-storage-and-index.md +616 -0
  45. miner_harness-0.1.0/infra/.gitkeep +0 -0
  46. miner_harness-0.1.0/pyproject.toml +118 -0
  47. miner_harness-0.1.0/scripts/.gitkeep +0 -0
  48. miner_harness-0.1.0/src/.gitkeep +0 -0
  49. miner_harness-0.1.0/src/miner_harness/__init__.py +8 -0
  50. miner_harness-0.1.0/src/miner_harness/agents/__init__.py +23 -0
  51. miner_harness-0.1.0/src/miner_harness/agents/base.py +193 -0
  52. miner_harness-0.1.0/src/miner_harness/agents/evaluator.py +33 -0
  53. miner_harness-0.1.0/src/miner_harness/agents/geochemist.py +25 -0
  54. miner_harness-0.1.0/src/miner_harness/agents/geophysicist.py +25 -0
  55. miner_harness-0.1.0/src/miner_harness/agents/remote_sensing.py +22 -0
  56. miner_harness-0.1.0/src/miner_harness/agents/structural_geo.py +25 -0
  57. miner_harness-0.1.0/src/miner_harness/cache/__init__.py +18 -0
  58. miner_harness-0.1.0/src/miner_harness/cache/manager.py +181 -0
  59. miner_harness-0.1.0/src/miner_harness/cache/sqlite_store.py +388 -0
  60. miner_harness-0.1.0/src/miner_harness/cache/ttl_policy.py +54 -0
  61. miner_harness-0.1.0/src/miner_harness/cache/types.py +50 -0
  62. miner_harness-0.1.0/src/miner_harness/cli/__init__.py +14 -0
  63. miner_harness-0.1.0/src/miner_harness/cli/app.py +214 -0
  64. miner_harness-0.1.0/src/miner_harness/cli/commands.py +275 -0
  65. miner_harness-0.1.0/src/miner_harness/connectors/__init__.py +1 -0
  66. miner_harness-0.1.0/src/miner_harness/connectors/geosgb/__init__.py +17 -0
  67. miner_harness-0.1.0/src/miner_harness/connectors/geosgb/alias_mapper.py +174 -0
  68. miner_harness-0.1.0/src/miner_harness/connectors/geosgb/connector.py +468 -0
  69. miner_harness-0.1.0/src/miner_harness/connectors/geosgb/grid_extractor.py +163 -0
  70. miner_harness-0.1.0/src/miner_harness/connectors/geosgb/sanitizer.py +73 -0
  71. miner_harness-0.1.0/src/miner_harness/connectors/geosgb/services.py +108 -0
  72. miner_harness-0.1.0/src/miner_harness/connectors/geosgb/throttled_client.py +180 -0
  73. miner_harness-0.1.0/src/miner_harness/connectors/ollama/__init__.py +15 -0
  74. miner_harness-0.1.0/src/miner_harness/connectors/ollama/client.py +251 -0
  75. miner_harness-0.1.0/src/miner_harness/connectors/ollama/prompt_manager.py +276 -0
  76. miner_harness-0.1.0/src/miner_harness/connectors/ollama/registry.py +157 -0
  77. miner_harness-0.1.0/src/miner_harness/core/__init__.py +31 -0
  78. miner_harness-0.1.0/src/miner_harness/core/config.py +126 -0
  79. miner_harness-0.1.0/src/miner_harness/core/exceptions.py +117 -0
  80. miner_harness-0.1.0/src/miner_harness/core/types.py +232 -0
  81. miner_harness-0.1.0/src/miner_harness/index/__init__.py +23 -0
  82. miner_harness-0.1.0/src/miner_harness/index/document_store.py +259 -0
  83. miner_harness-0.1.0/src/miner_harness/index/embedder.py +111 -0
  84. miner_harness-0.1.0/src/miner_harness/index/search_engine.py +216 -0
  85. miner_harness-0.1.0/src/miner_harness/index/text_builder.py +168 -0
  86. miner_harness-0.1.0/src/miner_harness/index/types.py +38 -0
  87. miner_harness-0.1.0/src/miner_harness/observability/__init__.py +12 -0
  88. miner_harness-0.1.0/src/miner_harness/observability/health.py +240 -0
  89. miner_harness-0.1.0/src/miner_harness/observability/logging_config.py +82 -0
  90. miner_harness-0.1.0/src/miner_harness/observability/metrics.py +242 -0
  91. miner_harness-0.1.0/src/miner_harness/orchestrator/__init__.py +22 -0
  92. miner_harness-0.1.0/src/miner_harness/orchestrator/context_builder.py +139 -0
  93. miner_harness-0.1.0/src/miner_harness/orchestrator/orchestrator.py +341 -0
  94. miner_harness-0.1.0/src/miner_harness/orchestrator/report_validator.py +379 -0
  95. miner_harness-0.1.0/src/miner_harness/rca/__init__.py +32 -0
  96. miner_harness-0.1.0/src/miner_harness/rca/classifier.py +181 -0
  97. miner_harness-0.1.0/src/miner_harness/rca/diagnostics.py +137 -0
  98. miner_harness-0.1.0/src/miner_harness/rca/reporter.py +291 -0
  99. miner_harness-0.1.0/src/miner_harness/rca/retry.py +144 -0
  100. miner_harness-0.1.0/src/miner_harness/self_improvement/__init__.py +43 -0
  101. miner_harness-0.1.0/src/miner_harness/self_improvement/feedback_loop.py +148 -0
  102. miner_harness-0.1.0/src/miner_harness/self_improvement/profiler.py +176 -0
  103. miner_harness-0.1.0/src/miner_harness/self_improvement/rca_learner.py +142 -0
  104. miner_harness-0.1.0/src/miner_harness/self_improvement/tuner.py +233 -0
  105. miner_harness-0.1.0/src/miner_harness/wizard/__init__.py +39 -0
  106. miner_harness-0.1.0/src/miner_harness/wizard/checks.py +249 -0
  107. miner_harness-0.1.0/src/miner_harness/wizard/installer.py +185 -0
  108. miner_harness-0.1.0/src/miner_harness/wizard/runner.py +206 -0
  109. miner_harness-0.1.0/tests/.gitkeep +0 -0
  110. miner_harness-0.1.0/tests/__init__.py +0 -0
  111. miner_harness-0.1.0/tests/agents/__init__.py +0 -0
  112. miner_harness-0.1.0/tests/agents/test_agents.py +222 -0
  113. miner_harness-0.1.0/tests/cache/__init__.py +0 -0
  114. miner_harness-0.1.0/tests/cache/test_manager.py +116 -0
  115. miner_harness-0.1.0/tests/cache/test_sqlite_store.py +270 -0
  116. miner_harness-0.1.0/tests/cache/test_ttl_policy.py +97 -0
  117. miner_harness-0.1.0/tests/cli/__init__.py +0 -0
  118. miner_harness-0.1.0/tests/cli/test_app.py +57 -0
  119. miner_harness-0.1.0/tests/cli/test_commands.py +240 -0
  120. miner_harness-0.1.0/tests/conftest.py +69 -0
  121. miner_harness-0.1.0/tests/connectors/__init__.py +0 -0
  122. miner_harness-0.1.0/tests/connectors/geosgb/__init__.py +0 -0
  123. miner_harness-0.1.0/tests/connectors/geosgb/test_alias_mapper.py +84 -0
  124. miner_harness-0.1.0/tests/connectors/geosgb/test_connector.py +266 -0
  125. miner_harness-0.1.0/tests/connectors/geosgb/test_grid_extractor.py +141 -0
  126. miner_harness-0.1.0/tests/connectors/geosgb/test_sanitizer.py +76 -0
  127. miner_harness-0.1.0/tests/connectors/geosgb/test_throttled_client.py +134 -0
  128. miner_harness-0.1.0/tests/connectors/ollama/__init__.py +0 -0
  129. miner_harness-0.1.0/tests/connectors/ollama/test_client.py +139 -0
  130. miner_harness-0.1.0/tests/connectors/ollama/test_prompt_manager.py +127 -0
  131. miner_harness-0.1.0/tests/connectors/ollama/test_registry.py +70 -0
  132. miner_harness-0.1.0/tests/contract/__init__.py +0 -0
  133. miner_harness-0.1.0/tests/contract/test_module_contracts.py +406 -0
  134. miner_harness-0.1.0/tests/core/__init__.py +0 -0
  135. miner_harness-0.1.0/tests/core/test_config.py +85 -0
  136. miner_harness-0.1.0/tests/core/test_types.py +145 -0
  137. miner_harness-0.1.0/tests/e2e/__init__.py +0 -0
  138. miner_harness-0.1.0/tests/e2e/conftest.py +65 -0
  139. miner_harness-0.1.0/tests/e2e/test_geosgb_live.py +146 -0
  140. miner_harness-0.1.0/tests/e2e/test_ollama_live.py +129 -0
  141. miner_harness-0.1.0/tests/e2e/test_pipeline_live.py +205 -0
  142. miner_harness-0.1.0/tests/index/__init__.py +0 -0
  143. miner_harness-0.1.0/tests/index/test_document_store.py +165 -0
  144. miner_harness-0.1.0/tests/index/test_search_engine.py +261 -0
  145. miner_harness-0.1.0/tests/index/test_text_builder.py +155 -0
  146. miner_harness-0.1.0/tests/integration/__init__.py +0 -0
  147. miner_harness-0.1.0/tests/integration/test_cache_index_pipeline.py +326 -0
  148. miner_harness-0.1.0/tests/integration/test_orchestrator_pipeline.py +259 -0
  149. miner_harness-0.1.0/tests/observability/__init__.py +0 -0
  150. miner_harness-0.1.0/tests/observability/test_health.py +180 -0
  151. miner_harness-0.1.0/tests/observability/test_logging_config.py +65 -0
  152. miner_harness-0.1.0/tests/observability/test_metrics.py +116 -0
  153. miner_harness-0.1.0/tests/orchestrator/__init__.py +0 -0
  154. miner_harness-0.1.0/tests/orchestrator/test_context_builder.py +110 -0
  155. miner_harness-0.1.0/tests/orchestrator/test_orchestrator.py +315 -0
  156. miner_harness-0.1.0/tests/orchestrator/test_report_validator.py +232 -0
  157. miner_harness-0.1.0/tests/property/__init__.py +0 -0
  158. miner_harness-0.1.0/tests/property/test_property_based.py +305 -0
  159. miner_harness-0.1.0/tests/rca/__init__.py +1 -0
  160. miner_harness-0.1.0/tests/rca/test_classifier.py +117 -0
  161. miner_harness-0.1.0/tests/rca/test_diagnostics.py +143 -0
  162. miner_harness-0.1.0/tests/rca/test_reporter.py +138 -0
  163. miner_harness-0.1.0/tests/rca/test_retry.py +161 -0
  164. miner_harness-0.1.0/tests/self_improvement/__init__.py +0 -0
  165. miner_harness-0.1.0/tests/self_improvement/test_feedback_loop.py +133 -0
  166. miner_harness-0.1.0/tests/self_improvement/test_profiler.py +143 -0
  167. miner_harness-0.1.0/tests/self_improvement/test_rca_learner.py +148 -0
  168. miner_harness-0.1.0/tests/self_improvement/test_tuner.py +170 -0
  169. miner_harness-0.1.0/tests/storage/__init__.py +0 -0
  170. miner_harness-0.1.0/tests/wizard/__init__.py +0 -0
  171. miner_harness-0.1.0/tests/wizard/test_checks.py +187 -0
  172. miner_harness-0.1.0/tests/wizard/test_installer.py +136 -0
  173. miner_harness-0.1.0/tests/wizard/test_runner.py +99 -0
  174. miner_harness-0.1.0/uv.lock +1748 -0
@@ -0,0 +1,35 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(python -m ruff check src/miner_harness/self_improvement/ tests/self_improvement/)",
5
+ "Bash(where ruff *)",
6
+ "Bash(ruff --version)",
7
+ "Bash(python -m pytest tests/self_improvement/ -v)",
8
+ "Bash(python -m pip show pytest)",
9
+ "Bash(pip show *)",
10
+ "Bash(ls .venv/Scripts/)",
11
+ "Bash(ls venv/Scripts/)",
12
+ "Bash(ls .venv/bin/)",
13
+ "PowerShell(Get-Command pytest -ErrorAction SilentlyContinue)",
14
+ "PowerShell(Get-Command ruff -ErrorAction SilentlyContinue)",
15
+ "PowerShell(Get-Command python -ErrorAction SilentlyContinue)",
16
+ "PowerShell($env:PATH -split \";\" | Where-Object { $_ -match \"python|pip|uv|conda\" })",
17
+ "Bash(uv run *)",
18
+ "Bash(uv add *)",
19
+ "Bash(git add *)",
20
+ "Bash(git commit -m ' *)",
21
+ "Bash(git push *)",
22
+ "Bash(gh pr create --title 'feat: Phase 11 — Self-Improvement' --body ' *)",
23
+ "Bash(gh pr *)",
24
+ "Bash(gh run *)",
25
+ "Bash(git fetch *)",
26
+ "Bash(git checkout *)",
27
+ "Bash(git pull *)",
28
+ "Bash(git merge *)",
29
+ "Bash(gh release *)",
30
+ "Bash(echo \"exit: $?\")",
31
+ "Bash(git tag *)",
32
+ "Bash(uv build *)"
33
+ ]
34
+ }
35
+ }
@@ -0,0 +1 @@
1
+ gitdir: C:/Users/victo/Documents/Claude/Projects/Testing rules/miner-harness/.git/worktrees/hopeful-hypatia-9aec15
@@ -0,0 +1,32 @@
1
+ ## Descricao
2
+
3
+ <!-- Descreva brevemente o que este PR faz -->
4
+
5
+ ## Tipo de Mudanca
6
+
7
+ - [ ] `feat:` Nova funcionalidade
8
+ - [ ] `fix:` Correcao de bug
9
+ - [ ] `refactor:` Refatoracao sem mudanca funcional
10
+ - [ ] `test:` Adicao/correcao de testes
11
+ - [ ] `docs:` Documentacao
12
+ - [ ] `ci:` Mudancas de CI/CD
13
+ - [ ] `chore:` Manutencao
14
+
15
+ ## Checklist
16
+
17
+ - [ ] Testes passando (`pytest tests/ -v`)
18
+ - [ ] Lint limpo (`ruff check src/ tests/`)
19
+ - [ ] Mypy limpo (`mypy src/ --strict`)
20
+ - [ ] Coverage >= 80%
21
+ - [ ] Conventional Commits no titulo do PR
22
+
23
+ ## Rastreabilidade
24
+
25
+ <!-- Vincule a RFC, ADR ou issue relevante -->
26
+ - RFC:
27
+ - ADR:
28
+ - Issue:
29
+
30
+ ## Notas para Revisao
31
+
32
+ <!-- Algo que o revisor deve saber? -->
@@ -0,0 +1,95 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main, develop]
6
+ pull_request:
7
+ branches: [main, develop]
8
+
9
+ concurrency:
10
+ group: ci-${{ github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ jobs:
14
+ lint:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - uses: actions/setup-python@v5
19
+ with:
20
+ python-version: '3.11'
21
+ - name: Install ruff
22
+ run: pip install ruff
23
+ - name: Lint
24
+ run: ruff check src/ tests/
25
+ - name: Format check
26
+ run: ruff format --check src/ tests/
27
+
28
+ typecheck:
29
+ runs-on: ubuntu-latest
30
+ needs: lint
31
+ steps:
32
+ - uses: actions/checkout@v4
33
+ - uses: actions/setup-python@v5
34
+ with:
35
+ python-version: '3.11'
36
+ - name: Install dependencies
37
+ run: pip install -e ".[dev]"
38
+ - name: Type check
39
+ run: mypy src/ --strict
40
+
41
+ test:
42
+ runs-on: ubuntu-latest
43
+ needs: lint
44
+ strategy:
45
+ matrix:
46
+ python-version: ['3.11', '3.12']
47
+ steps:
48
+ - uses: actions/checkout@v4
49
+ - uses: actions/setup-python@v5
50
+ with:
51
+ python-version: ${{ matrix.python-version }}
52
+ - name: Install dependencies
53
+ run: pip install -e ".[dev]"
54
+ - name: Run tests with coverage
55
+ run: pytest tests/ -v --tb=short --cov --cov-report=term-missing --cov-report=xml
56
+ - name: Check coverage threshold
57
+ run: coverage report --fail-under=80
58
+
59
+ security:
60
+ runs-on: ubuntu-latest
61
+ needs: lint
62
+ steps:
63
+ - uses: actions/checkout@v4
64
+ - uses: actions/setup-python@v5
65
+ with:
66
+ python-version: '3.11'
67
+ - name: Install dependencies
68
+ run: pip install -e ".[dev]"
69
+ - name: Security scan (bandit)
70
+ run: bandit -r src/ -ll --format json --output bandit-report.json || true
71
+ - name: Check bandit results
72
+ run: bandit -r src/ -ll
73
+ - name: Dependency audit
74
+ run: pip-audit --skip-editable
75
+
76
+ # Gate job — all checks must pass before merge is allowed
77
+ gate:
78
+ runs-on: ubuntu-latest
79
+ needs: [lint, typecheck, test, security]
80
+ if: always()
81
+ steps:
82
+ - name: Check all jobs passed
83
+ run: |
84
+ if [ "${{ needs.lint.result }}" != "success" ] || \
85
+ [ "${{ needs.typecheck.result }}" != "success" ] || \
86
+ [ "${{ needs.test.result }}" != "success" ] || \
87
+ [ "${{ needs.security.result }}" != "success" ]; then
88
+ echo "One or more required jobs failed:"
89
+ echo " lint: ${{ needs.lint.result }}"
90
+ echo " typecheck: ${{ needs.typecheck.result }}"
91
+ echo " test: ${{ needs.test.result }}"
92
+ echo " security: ${{ needs.security.result }}"
93
+ exit 1
94
+ fi
95
+ echo "All gates passed — merge allowed."
@@ -0,0 +1,62 @@
1
+ name: E2E Tests
2
+
3
+ # Disparado manualmente ou em schedule semanal (domingo 06:00 UTC)
4
+ # Requer: runner com acesso à internet (GeoSGB) e Ollama instalado
5
+ on:
6
+ workflow_dispatch:
7
+ inputs:
8
+ ollama_model:
9
+ description: "Modelo Ollama a usar"
10
+ default: "qwen3:8b-q4_K_M"
11
+ required: false
12
+ schedule:
13
+ - cron: "0 6 * * 0" # domingo 06:00 UTC
14
+
15
+ jobs:
16
+ e2e:
17
+ name: E2E (GeoSGB + Ollama)
18
+ runs-on: ubuntu-latest
19
+ timeout-minutes: 30
20
+
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+
24
+ - name: Install uv
25
+ uses: astral-sh/setup-uv@v5
26
+ with:
27
+ version: "latest"
28
+
29
+ - name: Set up Python
30
+ run: uv python install 3.11
31
+
32
+ - name: Install dependencies
33
+ run: uv sync --all-extras
34
+
35
+ - name: Install Ollama
36
+ run: |
37
+ curl -fsSL https://ollama.com/install.sh | sh
38
+ ollama serve &
39
+ sleep 5
40
+
41
+ - name: Pull model
42
+ run: |
43
+ MODEL="${{ github.event.inputs.ollama_model || 'qwen3:8b-q4_K_M' }}"
44
+ ollama pull "$MODEL"
45
+ env:
46
+ OLLAMA_HOST: http://localhost:11434
47
+
48
+ - name: Run e2e tests
49
+ run: uv run pytest tests/e2e/ -v --tb=short --timeout=300
50
+ env:
51
+ MINER_E2E: "1"
52
+ MINER_OLLAMA_URL: "http://localhost:11434"
53
+ MINER_OLLAMA_MODEL: "${{ github.event.inputs.ollama_model || 'qwen3:8b-q4_K_M' }}"
54
+
55
+ - name: Upload e2e report
56
+ if: always()
57
+ uses: actions/upload-artifact@v4
58
+ with:
59
+ name: e2e-report
60
+ path: |
61
+ .pytest_cache/
62
+ retention-days: 7
@@ -0,0 +1,58 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ permissions:
9
+ contents: write
10
+
11
+ jobs:
12
+ validate:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ - uses: actions/setup-python@v5
17
+ with:
18
+ python-version: '3.11'
19
+ - name: Install dependencies
20
+ run: pip install -e ".[dev]"
21
+ - name: Lint
22
+ run: ruff check src/ tests/
23
+ - name: Type check
24
+ run: mypy src/ --strict
25
+ - name: Run tests
26
+ run: pytest tests/ -v --tb=short --cov --cov-report=term-missing
27
+ - name: Coverage threshold
28
+ run: coverage report --fail-under=80
29
+ - name: Security scan
30
+ run: bandit -r src/ -ll
31
+
32
+ release:
33
+ runs-on: ubuntu-latest
34
+ needs: validate
35
+ steps:
36
+ - uses: actions/checkout@v4
37
+ with:
38
+ fetch-depth: 0
39
+ - name: Generate changelog
40
+ id: changelog
41
+ run: |
42
+ PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
43
+ if [ -z "$PREV_TAG" ]; then
44
+ CHANGES=$(git log --pretty=format:"- %s (%h)" HEAD)
45
+ else
46
+ CHANGES=$(git log --pretty=format:"- %s (%h)" ${PREV_TAG}..HEAD)
47
+ fi
48
+ echo "changes<<EOF" >> $GITHUB_OUTPUT
49
+ echo "$CHANGES" >> $GITHUB_OUTPUT
50
+ echo "EOF" >> $GITHUB_OUTPUT
51
+ - name: Create GitHub Release
52
+ uses: softprops/action-gh-release@v2
53
+ with:
54
+ body: |
55
+ ## Changes
56
+
57
+ ${{ steps.changelog.outputs.changes }}
58
+ generate_release_notes: true
@@ -0,0 +1,48 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.egg-info/
6
+ dist/
7
+ build/
8
+ *.egg
9
+ .eggs/
10
+
11
+ # Virtual environments
12
+ .venv/
13
+ venv/
14
+ env/
15
+
16
+ # IDE
17
+ .vscode/
18
+ .idea/
19
+ *.swp
20
+ *.swo
21
+
22
+ # OS
23
+ .DS_Store
24
+ Thumbs.db
25
+
26
+ # Testing
27
+ .pytest_cache/
28
+ .coverage
29
+ htmlcov/
30
+ .mypy_cache/
31
+
32
+ # Data (large files)
33
+ data/
34
+ *.tif
35
+ *.tiff
36
+ *.shp
37
+ *.dbf
38
+ *.shx
39
+ *.prj
40
+
41
+ # Models
42
+ models/
43
+ *.gguf
44
+ *.bin
45
+
46
+ # Environment
47
+ .env
48
+ .env.local
@@ -0,0 +1,70 @@
1
+ # Changelog
2
+
3
+ ## [0.1.0] — 2026-05-17
4
+
5
+ Primeira release — todas as 11 fases do ASO v3 completas.
6
+
7
+ ### Adicionado
8
+
9
+ **Core**
10
+ - `core/types.py` — modelos Pydantic para todos os domínios geológicos (OcorrenciaMineral, DadoGravimetrico, AmostraGeoquimica, DatacaoGeocronologica, UnidadeLitoestratigrafica, ProjetoAerogeofisico, ProspectionReport)
11
+ - `core/config.py` — configuração hierárquica (MinerHarnessConfig, StorageConfig, GeoSGBConfig, OrchestratorConfig)
12
+ - `core/exceptions.py` — hierarquia de exceções tipadas
13
+
14
+ **Conectores**
15
+ - `connectors/geosgb/` — connector completo para API GeoSGB: MapServer/identify (grid + dedup) + FeatureServer/query com paginação, rate limiting, alias mapping
16
+ - `connectors/ollama/` — cliente async httpx para Ollama: chat, embeddings, list_models, health
17
+
18
+ **Orquestrador**
19
+ - `orchestrator/orchestrator.py` — pipeline principal: connector → cache → context → agentes → report
20
+ - `orchestrator/report_validator.py` — validação e reparo automático de relatórios
21
+ - `orchestrator/context_builder.py` — construção de contexto para agentes
22
+
23
+ **Agentes**
24
+ - `agents/` — 5 agentes especialistas: geólogo estrutural, geofísico, geoquímico, sensoriamento remoto, avaliador
25
+ - `agents/base.py` — classe base com retry e logging estruturado
26
+
27
+ **Cache**
28
+ - `cache/manager.py` — CacheManager com TTL configurável
29
+ - `cache/sqlite_store.py` — persistência SQLite
30
+
31
+ **Índice**
32
+ - `index/document_store.py` — índice vetorial via sqlite-vec
33
+ - `index/search_engine.py` — busca semântica
34
+
35
+ **Observabilidade**
36
+ - `observability/health.py` — health checks async (disco, Ollama, cache, índice)
37
+ - `observability/metrics.py` — MetricsCollector com structlog
38
+ - `observability/logging_config.py` — configuração de logging estruturado
39
+
40
+ **RCA**
41
+ - `rca/classifier.py` — classificação automática de falhas
42
+ - `rca/diagnostics.py` — diagnóstico estruturado
43
+ - `rca/reporter.py` — geração de relatórios RCA em JSON
44
+ - `rca/retry.py` — retry com backoff exponencial
45
+
46
+ **Self-Improvement**
47
+ - `self_improvement/profiler.py` — profiling de pipeline e identificação de gargalos
48
+ - `self_improvement/tuner.py` — geração de recomendações de tuning
49
+ - `self_improvement/rca_learner.py` — aprendizado a partir de histórico de RCA
50
+ - `self_improvement/feedback_loop.py` — ciclo Profile → Tune → Apply → Learn
51
+
52
+ **Wizard**
53
+ - `wizard/checks.py` — verificações puras de pré-requisitos (Python, disco, Ollama, MINER_HOME)
54
+ - `wizard/installer.py` — criação de MINER_HOME, config.json, env_hint.sh
55
+ - `wizard/runner.py` — UI Rich com injeção de Console para testabilidade
56
+
57
+ **CLI**
58
+ - `miner-harness analyze` — pipeline completo de análise
59
+ - `miner-harness validate` — validação de relatório JSON
60
+ - `miner-harness install` — wizard de instalação (interativo e --non-interactive)
61
+ - `miner-harness health` — health checks do sistema
62
+ - `miner-harness cache stats/clear` — gestão do cache
63
+
64
+ **Testes**
65
+ - 447 testes unitários e de integração (92% cobertura)
66
+ - 17 testes e2e opt-in (`MINER_E2E=1`) contra GeoSGB real e Ollama local
67
+
68
+ **CI/CD**
69
+ - GitHub Actions: lint (ruff), typecheck (mypy), test (3.11 + 3.12), security (bandit + pip-audit), gate
70
+ - Workflow e2e separado (manual + schedule semanal)
@@ -0,0 +1,122 @@
1
+ # miner-harness — CLAUDE.md
2
+
3
+ ## Identidade do Projeto
4
+
5
+ **miner-harness** é um sistema de prospecção mineral inteligente que utiliza agentes especialistas em geologia e geofísica para analisar dados da base GeoSGB. O sistema roda localmente, com LLMs embarcados, e disponibiliza um wizard de instalação para download.
6
+
7
+ - **Repositório**: https://github.com/VictorAMM/miner-harness
8
+ - **Metodologia**: Agentic SDLC Operating System v3 (ASO v3)
9
+ - **Documentação ASO**: `../entrai-docs/`
10
+
11
+ ## Persona Principal
12
+
13
+ **Dr. Augusto Valen** — Geólogo exploracionista e geofísico de elite (25+ anos). Define o tom técnico e o framework analítico dos agentes. Ver `docs/personas/dr-augusto-valen.md`.
14
+
15
+ ## Princípios Inegociáveis (ASO v3)
16
+
17
+ 1. **Contexto e segurança antes de velocidade** — nunca pular etapas de discovery
18
+ 2. **Decision-by-evidence** — proibido decisões por "vibe"; toda decisão com rationale explícito
19
+ 3. **Secure-by-Design** — segurança desde a Fase 0
20
+ 4. **Policy-as-Code** — bloquear avanço em caso de violação
21
+ 5. **Evaluator-Optimizer** — toda saída crítica passa por avaliação
22
+ 6. **Memória persistente e temporal** — semântica, episódica e procedural
23
+
24
+ ## Stack e Arquitetura
25
+
26
+ ### Decisão de Stack (Discovery-First)
27
+ - **Python 3** — core do sistema: agentes, análise geoespacial, ML, integração com LLMs locais
28
+ - **LLMs embarcados** — modelos rodando localmente (ollama/llama.cpp ou similar)
29
+ - **Execução local** — aplicação instala e roda na máquina do usuário
30
+ - **Wizard de instalação** — installer para download com setup guiado
31
+
32
+ ### Dependências esperadas
33
+ - GeoSGB como fonte de dados principal
34
+ - Bibliotecas geocientíficas (geopandas, rasterio, shapely, etc.)
35
+ - Framework de agentes com LLM local
36
+ - Interface de usuário para o wizard
37
+
38
+ ## Fases do Projeto (ASO v3)
39
+
40
+ O desenvolvimento segue as fases 0→11 do Agentic SDLC OS:
41
+
42
+ ```
43
+ Fase 0 — Fundação e Governança ✅ CONCLUÍDA (2026-05-11)
44
+ Fase 1 — Discovery e Pesquisa Autônoma ✅ CONCLUÍDA (2026-05-11)
45
+ Fase 2 — PRD Executável ✅ CONCLUÍDA (2026-05-11)
46
+ Fase 3 — Technical Design e RFC Swarm ✅ CONCLUÍDA (2026-05-12)
47
+ Fase 4 — Incepção de Infra ✅ CONCLUÍDA (2026-05-12)
48
+ Fase 5 — Implementação ✅ CONCLUÍDA (2026-05-15)
49
+ Fase 6 — Validation Harness ✅ CONCLUÍDA (2026-05-16)
50
+ Fase 7 — Testing Swarm ✅ CONCLUÍDA (2026-05-16)
51
+ Fase 8 — Governed CI/CD ✅ CONCLUÍDA (2026-05-16)
52
+ Fase 9 — Observabilidade ✅ CONCLUÍDA (2026-05-16)
53
+ Fase 10 — RCA Autônomo ✅ CONCLUÍDA (2026-05-17)
54
+ Fase 11 — Self-Improvement ✅ CONCLUÍDA (2026-05-17)
55
+ Wizard — Instalação Guiada ✅ CONCLUÍDA (2026-05-17)
56
+ ```
57
+
58
+ **Status**: Todas as fases concluídas. Próximo entregável: testes e2e com GeoSGB real + Ollama local.
59
+
60
+ ## Grafo de Rastreabilidade
61
+
62
+ ```
63
+ Feature ↔ PRD ↔ RFC ↔ ADR ↔ Commit ↔ Deploy ↔ Incidente ↔ RCA
64
+ ```
65
+
66
+ ## Estrutura do Projeto
67
+
68
+ ```
69
+ miner-harness/
70
+ ├── CLAUDE.md # Este arquivo
71
+ ├── docs/
72
+ │ ├── prd/ # Product Requirements Documents
73
+ │ ├── rfc/ # Request for Comments (design técnico)
74
+ │ ├── adr/ # Architecture Decision Records
75
+ │ ├── rca/ # Root Cause Analysis
76
+ │ ├── architecture/ # Diagramas e decisões de arquitetura
77
+ │ └── personas/ # Personas dos agentes
78
+ ├── src/ # Código-fonte
79
+ ├── tests/ # Testes
80
+ ├── scripts/ # Scripts de automação e instalação
81
+ ├── infra/ # Configuração de infraestrutura
82
+ └── .github/workflows/ # GitHub Actions CI/CD
83
+ ```
84
+
85
+ ## Convenções de Código
86
+
87
+ - **Linguagem principal**: Python 3.11+
88
+ - **Formatação**: ruff (lint + format)
89
+ - **Tipos**: type hints obrigatórios em funções públicas
90
+ - **Testes**: pytest
91
+ - **Commits**: Conventional Commits (`feat:`, `fix:`, `docs:`, `refactor:`, `test:`)
92
+ - **Branches**: `main` (prod), `develop` (integração), `feature/*`, `fix/*`
93
+
94
+ ## Templates de Artefatos
95
+
96
+ Usar os templates definidos em `../entrai-docs/docs/agentic-os/templates/README.md`:
97
+ - **PRD** → `docs/prd/`
98
+ - **RFC** → `docs/rfc/`
99
+ - **ADR** → `docs/adr/` (com `valid_from`, `valid_until`, `review_trigger`)
100
+ - **RCA** → `docs/rca/`
101
+
102
+ ## Gates de Qualidade
103
+
104
+ Antes de avançar qualquer fase:
105
+ - [ ] Checklist de segurança OWASP
106
+ - [ ] Validação por Evaluator-Optimizer
107
+ - [ ] Policy-as-Code sem violações
108
+ - [ ] Testes passando
109
+ - [ ] Documentação atualizada
110
+
111
+ ## CI/CD (GitHub Actions)
112
+
113
+ - Lint e format check em todo PR
114
+ - Testes automatizados
115
+ - Security scan
116
+ - Build do wizard de instalação
117
+
118
+ ## Notas
119
+
120
+ - Toda decisão arquitetural deve ter ADR com validade temporal
121
+ - Incertezas devem ser marcadas com `[NEEDS CLARIFICATION]`
122
+ - PRD define O QUÊ e PORQUÊ, nunca o COMO
@@ -0,0 +1,92 @@
1
+ # Contribuindo para miner-harness
2
+
3
+ ## Requisitos
4
+
5
+ - Python 3.11+
6
+ - Ferramentas de dev: `pip install -e ".[dev]"`
7
+
8
+ ## Fluxo de Desenvolvimento
9
+
10
+ 1. Criar branch a partir de `develop`:
11
+ ```bash
12
+ git checkout develop
13
+ git pull origin develop
14
+ git checkout -b feature/minha-feature
15
+ ```
16
+
17
+ 2. Implementar mudancas seguindo as convencoes abaixo.
18
+
19
+ 3. Verificar localmente antes de abrir PR:
20
+ ```bash
21
+ ruff check src/ tests/
22
+ ruff format --check src/ tests/
23
+ mypy src/ --strict
24
+ pytest tests/ -v --cov --cov-report=term-missing
25
+ coverage report --fail-under=80
26
+ bandit -r src/ -ll
27
+ ```
28
+
29
+ 4. Abrir PR para `develop` com titulo em Conventional Commits.
30
+
31
+ ## Conventional Commits
32
+
33
+ Todos os commits devem seguir o formato:
34
+
35
+ ```
36
+ <tipo>(<escopo>): <descricao>
37
+
38
+ [corpo opcional]
39
+
40
+ [footer opcional]
41
+ ```
42
+
43
+ Tipos validos:
44
+ - `feat` — Nova funcionalidade
45
+ - `fix` — Correcao de bug
46
+ - `docs` — Documentacao
47
+ - `refactor` — Refatoracao sem mudanca funcional
48
+ - `test` — Adicao/correcao de testes
49
+ - `ci` — Mudancas de CI/CD
50
+ - `chore` — Manutencao geral
51
+
52
+ Exemplo:
53
+ ```
54
+ feat(cache): adicionar TTL configuravel por servico
55
+
56
+ Permite configurar TTL diferente para cada tipo de dado do GeoSGB.
57
+ Dados gravimetricos mudam menos frequentemente que ocorrencias.
58
+
59
+ Refs: RFC-003 §3.2
60
+ ```
61
+
62
+ ## Gates de Qualidade
63
+
64
+ Nenhum PR sera mergeado se:
65
+ - Ruff reportar erros de lint ou formatacao
66
+ - Mypy (strict) reportar erros de tipo
67
+ - Testes falharem
68
+ - Coverage ficar abaixo de 80%
69
+ - Bandit encontrar vulnerabilidades de severidade media+
70
+ - pip-audit encontrar dependencias vulneraveis
71
+
72
+ ## Estrutura de Testes
73
+
74
+ ```
75
+ tests/
76
+ ├── cache/ # Testes unitarios do CacheManager
77
+ ├── cli/ # Testes dos comandos CLI
78
+ ├── connectors/ # Testes dos connectors (GeoSGB, Ollama)
79
+ ├── contract/ # Testes de contrato entre modulos
80
+ ├── core/ # Testes dos tipos e config
81
+ ├── index/ # Testes do VectorIndex
82
+ ├── integration/ # Testes de integracao end-to-end
83
+ ├── orchestrator/ # Testes do Orchestrator
84
+ └── property/ # Property-based tests (Hypothesis)
85
+ ```
86
+
87
+ ## Rastreabilidade
88
+
89
+ Toda mudanca significativa deve referenciar:
90
+ - RFC relevante (ex: `Refs: RFC-001 §4.1`)
91
+ - ADR se houver decisao arquitetural
92
+ - Issue/ticket se aplicavel