brainlayer 1.3.0__tar.gz → 1.4.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 (866) hide show
  1. {brainlayer-1.3.0 → brainlayer-1.4.0}/.github/workflows/ci.yml +6 -0
  2. {brainlayer-1.3.0 → brainlayer-1.4.0}/PKG-INFO +1 -1
  3. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarServer.swift +34 -1
  4. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarWindowRootView.swift +1 -1
  5. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/MCPRouter.swift +7 -2
  6. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/bundle/Info.plist +2 -2
  7. brainlayer-1.4.0/docs/brew-layer-conformance.md +66 -0
  8. {brainlayer-1.3.0 → brainlayer-1.4.0}/pyproject.toml +1 -1
  9. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/hotlane_brainbar_daemon.py +18 -3
  10. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/brainlayer-env-run.sh +64 -5
  11. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.drain.plist +3 -7
  12. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.enrichment.plist +3 -1
  13. brainlayer-1.4.0/scripts/launchd/com.brainlayer.hotlane-brainbar.plist +74 -0
  14. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/install.sh +8 -1
  15. brainlayer-1.4.0/scripts/reembed_backfill_loop.py +363 -0
  16. {brainlayer-1.3.0 → brainlayer-1.4.0}/server.json +2 -2
  17. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/__init__.py +1 -1
  18. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/cli/__init__.py +236 -4
  19. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/cloud_backfill.py +262 -47
  20. brainlayer-1.4.0/src/brainlayer/doctor.py +384 -0
  21. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/drain.py +62 -27
  22. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/enrichment_controller.py +113 -4
  23. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/health_check.py +33 -2
  24. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/index_new.py +1 -1
  25. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/mcp/search_handler.py +8 -9
  26. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/mcp/store_handler.py +46 -8
  27. brainlayer-1.4.0/src/brainlayer/memory_types.py +13 -0
  28. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/classify.py +2 -28
  29. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/store.py +2 -2
  30. brainlayer-1.4.0/src/brainlayer/system_prompt_guard.py +30 -0
  31. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/vector_store.py +5 -2
  32. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_arbitration.py +258 -0
  33. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_cli_enrich.py +36 -0
  34. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_cli_launchd_mode_a.py +6 -0
  35. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_cloud_backfill.py +171 -6
  36. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_deferred_embedding.py +83 -0
  37. brainlayer-1.4.0/tests/test_doctor.py +211 -0
  38. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrich_supervisor.py +149 -0
  39. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_controller.py +2 -2
  40. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_flex_integration.py +1 -0
  41. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_hotlane_brainbar_daemon.py +84 -10
  42. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_hybrid_helper_contract.py +4 -2
  43. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_installable_build.py +24 -1
  44. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_launchd_hygiene.py +88 -4
  45. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_handler.py +5 -4
  46. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_profile.py +24 -1
  47. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_stability_health_check.py +59 -0
  48. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_store_handler.py +86 -0
  49. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_write_queue.py +103 -0
  50. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_write_resilience_under_load.py +4 -2
  51. {brainlayer-1.3.0 → brainlayer-1.4.0}/.claude-plugin/marketplace.json +0 -0
  52. {brainlayer-1.3.0 → brainlayer-1.4.0}/.claude.local.md.example +0 -0
  53. {brainlayer-1.3.0 → brainlayer-1.4.0}/.gitattributes +0 -0
  54. {brainlayer-1.3.0 → brainlayer-1.4.0}/.githooks/pre-push +0 -0
  55. {brainlayer-1.3.0 → brainlayer-1.4.0}/.github/workflows/docs.yml +0 -0
  56. {brainlayer-1.3.0 → brainlayer-1.4.0}/.github/workflows/publish.yml +0 -0
  57. {brainlayer-1.3.0 → brainlayer-1.4.0}/.gitignore +0 -0
  58. {brainlayer-1.3.0 → brainlayer-1.4.0}/.mcp.json.example +0 -0
  59. {brainlayer-1.3.0 → brainlayer-1.4.0}/AGENTS.md +0 -0
  60. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_ACTION_ITEMS.md +0 -0
  61. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_CRITICAL_ISSUES.md +0 -0
  62. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_FINAL_STATUS.md +0 -0
  63. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_PR_COMMENT_HELPER_FAST_PROFILE.md +0 -0
  64. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REREVIEW_P2_KG_CLEANUP.md +0 -0
  65. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW.md +0 -0
  66. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_352.md +0 -0
  67. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_BRAINBAR_HELPER_FAST_PROFILE.md +0 -0
  68. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_DEFLAKE_AGENT_PROFILES.md +0 -0
  69. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_FINDINGS.md +0 -0
  70. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_FIX_PYTHON_CI.md +0 -0
  71. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_FTS_RECALL.md +0 -0
  72. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_HOOKS_FAIL_LOUD.md +0 -0
  73. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_P2_KG_CLEANUP.md +0 -0
  74. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_P6B.md +0 -0
  75. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_QUICK_CAPTURE.md +0 -0
  76. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_QUICK_CAPTURE_UX_FIX.md +0 -0
  77. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_RESTORE_CAPTURE_ACTIONS.md +0 -0
  78. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_REVIEW_SUMMARY.md +0 -0
  79. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_SUMMARY.md +0 -0
  80. {brainlayer-1.3.0 → brainlayer-1.4.0}/BUGBOT_SUMMARY_HELPER_FAST_PROFILE.md +0 -0
  81. {brainlayer-1.3.0 → brainlayer-1.4.0}/CHANGELOG.md +0 -0
  82. {brainlayer-1.3.0 → brainlayer-1.4.0}/CLAUDE.md +0 -0
  83. {brainlayer-1.3.0 → brainlayer-1.4.0}/CODEOWNERS +0 -0
  84. {brainlayer-1.3.0 → brainlayer-1.4.0}/CONTRIBUTING.md +0 -0
  85. {brainlayer-1.3.0 → brainlayer-1.4.0}/LICENSE +0 -0
  86. {brainlayer-1.3.0 → brainlayer-1.4.0}/README.md +0 -0
  87. {brainlayer-1.3.0 → brainlayer-1.4.0}/SLICE-B-BRIEF.md +0 -0
  88. {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/flex-after-productionprompt-hybrid-taxonomy-combined.jsonl +0 -0
  89. {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/flex-after-productionprompt-hybrid-taxonomy-retry1.jsonl +0 -0
  90. {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/flex-after-productionprompt-hybrid-taxonomy.jsonl +0 -0
  91. {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/flex-before-oldprompt-validation-off.jsonl +0 -0
  92. {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-combined-summary.json +0 -0
  93. {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-combined.jsonl +0 -0
  94. {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-retry1-summary.json +0 -0
  95. {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-retry1.jsonl +0 -0
  96. {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash-summary.json +0 -0
  97. {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/judge-after-hybrid-vs-before-gemini-flash.jsonl +0 -0
  98. {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/recommended-36k-batch-backfill-plan.md +0 -0
  99. {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/selection-after-retry1.jsonl +0 -0
  100. {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/selection-cloudsafe-pilot50.jsonl +0 -0
  101. {brainlayer-1.3.0 → brainlayer-1.4.0}/artifacts/flex-hybrid-taxonomy-2026-06-16/selection-judge-retry1.jsonl +0 -0
  102. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/.gitignore +0 -0
  103. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Package.resolved +0 -0
  104. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Package.swift +0 -0
  105. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Scripts/brainbar_stdio_adapter.py +0 -0
  106. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarApp.swift +0 -0
  107. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarAppSupport.swift +0 -0
  108. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarCommandBar.swift +0 -0
  109. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarDashboardPanelController.swift +0 -0
  110. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarInstanceLock.swift +0 -0
  111. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarProcessControl.swift +0 -0
  112. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarRuntime.swift +0 -0
  113. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarSettingsActions.swift +0 -0
  114. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarSettingsView.swift +0 -0
  115. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarStatusPopoverController.swift +0 -0
  116. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarURLAction.swift +0 -0
  117. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBarWindowState.swift +0 -0
  118. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBusClient.swift +0 -0
  119. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainBusEvent.swift +0 -0
  120. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainDatabase.swift +0 -0
  121. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/BrainLayerConfig.swift +0 -0
  122. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/AgentActivityMonitor.swift +0 -0
  123. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/BrainBarDashboardFixture.swift +0 -0
  124. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/BrainBarLivePulse.swift +0 -0
  125. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/DaemonHealthMonitor.swift +0 -0
  126. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/DashboardMetricFormatter.swift +0 -0
  127. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/PipelineState.swift +0 -0
  128. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/SparklineRenderer.swift +0 -0
  129. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/StatsCollector.swift +0 -0
  130. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Dashboard/StatusPopoverView.swift +0 -0
  131. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/DegradationState.swift +0 -0
  132. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/DesignTokens.swift +0 -0
  133. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Formatters.swift +0 -0
  134. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Formatting/TextFormatter.swift +0 -0
  135. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/HotkeyManager.swift +0 -0
  136. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/HotkeyRouteStatus.swift +0 -0
  137. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/HybridSearchHelperClient.swift +0 -0
  138. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionContinuation.swift +0 -0
  139. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionEvent.swift +0 -0
  140. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionFeedView.swift +0 -0
  141. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionPresentation.swift +0 -0
  142. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionStore.swift +0 -0
  143. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/InjectionSummaryView.swift +0 -0
  144. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/EntityCache.swift +0 -0
  145. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGAtlasLayout.swift +0 -0
  146. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGAtlasMode.swift +0 -0
  147. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGAtlasPresentation.swift +0 -0
  148. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGCanvasView.swift +0 -0
  149. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGEdge.swift +0 -0
  150. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGEdgeView.swift +0 -0
  151. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGNode.swift +0 -0
  152. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGNodeView.swift +0 -0
  153. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGRelationPresentation.swift +0 -0
  154. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGSidebarView.swift +0 -0
  155. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGSimulationController.swift +0 -0
  156. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/KGViewModel.swift +0 -0
  157. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/KnowledgeGraph/ScrollWheelZoomView.swift +0 -0
  158. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/MCPFraming.swift +0 -0
  159. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/DigestResult.swift +0 -0
  160. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/EntityCard.swift +0 -0
  161. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/KGSearchResult.swift +0 -0
  162. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/KGTemporalDate.swift +0 -0
  163. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/SearchResult.swift +0 -0
  164. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Models/StatsResult.swift +0 -0
  165. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/QuickCaptureController.swift +0 -0
  166. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/QuickCapturePanel.swift +0 -0
  167. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/QuickCapturePanelState.swift +0 -0
  168. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/SearchFilters.swift +0 -0
  169. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/SearchPanelController.swift +0 -0
  170. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/SearchProfileLogger.swift +0 -0
  171. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/SearchQueryActor.swift +0 -0
  172. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/SearchViewModel.swift +0 -0
  173. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Views/Components/ChunkConversationSheet.swift +0 -0
  174. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Views/Components/SearchResultCard.swift +0 -0
  175. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Views/Components/SearchResultsList.swift +0 -0
  176. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Views/Components/WrappingPillLayout.swift +0 -0
  177. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBar/Views/ExpirationPill.swift +0 -0
  178. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarCommandBar.swift +0 -0
  179. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarDaemonMain.swift +0 -0
  180. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarDashboardPanelController.swift +0 -0
  181. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarInstanceLock.swift +0 -0
  182. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarProcessControl.swift +0 -0
  183. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarRuntime.swift +0 -0
  184. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarServer.swift +0 -0
  185. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarSettingsActions.swift +0 -0
  186. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarStatusPopoverController.swift +0 -0
  187. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarURLAction.swift +0 -0
  188. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarWindowRootView.swift +0 -0
  189. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBarWindowState.swift +0 -0
  190. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBusClient.swift +0 -0
  191. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainBusEvent.swift +0 -0
  192. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/BrainDatabase.swift +0 -0
  193. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/AgentActivityMonitor.swift +0 -0
  194. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/BrainBarLivePulse.swift +0 -0
  195. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/DaemonHealthMonitor.swift +0 -0
  196. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/DashboardMetricFormatter.swift +0 -0
  197. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/PipelineState.swift +0 -0
  198. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/SparklineRenderer.swift +0 -0
  199. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/StatsCollector.swift +0 -0
  200. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Dashboard/StatusPopoverView.swift +0 -0
  201. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/DegradationState.swift +0 -0
  202. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/DesignTokens.swift +0 -0
  203. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Formatters.swift +0 -0
  204. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Formatting/TextFormatter.swift +0 -0
  205. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/HotkeyManager.swift +0 -0
  206. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/HotkeyRouteStatus.swift +0 -0
  207. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/HybridSearchHelperClient.swift +0 -0
  208. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionContinuation.swift +0 -0
  209. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionEvent.swift +0 -0
  210. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionFeedView.swift +0 -0
  211. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionPresentation.swift +0 -0
  212. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionStore.swift +0 -0
  213. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/InjectionSummaryView.swift +0 -0
  214. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/EntityCache.swift +0 -0
  215. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGAtlasLayout.swift +0 -0
  216. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGAtlasMode.swift +0 -0
  217. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGAtlasPresentation.swift +0 -0
  218. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGCanvasView.swift +0 -0
  219. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGEdge.swift +0 -0
  220. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGEdgeView.swift +0 -0
  221. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGNode.swift +0 -0
  222. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGNodeView.swift +0 -0
  223. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGRelationPresentation.swift +0 -0
  224. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGSidebarView.swift +0 -0
  225. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGSimulationController.swift +0 -0
  226. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/KGViewModel.swift +0 -0
  227. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/KnowledgeGraph/ScrollWheelZoomView.swift +0 -0
  228. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/MCPFraming.swift +0 -0
  229. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/MCPRouter.swift +0 -0
  230. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/DigestResult.swift +0 -0
  231. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/EntityCard.swift +0 -0
  232. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/KGSearchResult.swift +0 -0
  233. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/KGTemporalDate.swift +0 -0
  234. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/SearchResult.swift +0 -0
  235. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Models/StatsResult.swift +0 -0
  236. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/QuickCaptureController.swift +0 -0
  237. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/QuickCapturePanel.swift +0 -0
  238. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/QuickCapturePanelState.swift +0 -0
  239. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/SearchFilters.swift +0 -0
  240. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/SearchPanelController.swift +0 -0
  241. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/SearchProfileLogger.swift +0 -0
  242. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/SearchQueryActor.swift +0 -0
  243. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/SearchViewModel.swift +0 -0
  244. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Views/Components/ChunkConversationSheet.swift +0 -0
  245. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Views/Components/SearchResultCard.swift +0 -0
  246. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Views/Components/SearchResultsList.swift +0 -0
  247. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Views/Components/WrappingPillLayout.swift +0 -0
  248. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarDaemon/Views/ExpirationPill.swift +0 -0
  249. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarLifecycle/BrainBarLifecycleWatchdog.swift +0 -0
  250. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Sources/BrainBarLifecycle/BrainBarRestartHandoff.swift +0 -0
  251. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarDaemonTests/BrainBarDaemonLaunchModeTests.swift +0 -0
  252. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/AgentActivityMonitorTests.swift +0 -0
  253. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarDashboardPanelControllerTests.swift +0 -0
  254. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarDashboardSnapshotTests.swift +0 -0
  255. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarReliabilityTests.swift +0 -0
  256. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarRuntimeWiringTests.swift +0 -0
  257. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarSettingsSnapshotTests.swift +0 -0
  258. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarSettingsViewModelTests.swift +0 -0
  259. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarStartupRecoveryTests.swift +0 -0
  260. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarStatusPopoverControllerTests.swift +0 -0
  261. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarUXLogicTests.swift +0 -0
  262. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarWindowRootViewVectorDetailLayoutTests.swift +0 -0
  263. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBarWindowStateTests.swift +0 -0
  264. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainBusEventHubTests.swift +0 -0
  265. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainDatabaseWindowedBucketsTests.swift +0 -0
  266. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/BrainLayerConfigTests.swift +0 -0
  267. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/ChunkConversationTests.swift +0 -0
  268. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/DashboardRedesignSnapshotTests.swift +0 -0
  269. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/DashboardTests.swift +0 -0
  270. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/DatabaseTests.swift +0 -0
  271. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/DegradationStateTests.swift +0 -0
  272. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/DesignTokensTests.swift +0 -0
  273. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/FormattersTests.swift +0 -0
  274. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/HybridSearchHelperClientTests.swift +0 -0
  275. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/InjectionContinuationTests.swift +0 -0
  276. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/InjectionConversationSelectionTests.swift +0 -0
  277. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/InjectionEventTests.swift +0 -0
  278. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/InjectionPresentationTests.swift +0 -0
  279. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/InjectionStoreTests.swift +0 -0
  280. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KGAtlasLayoutTests.swift +0 -0
  281. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KGAtlasPresentationTests.swift +0 -0
  282. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KGBadgeConsistencyTests.swift +0 -0
  283. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KGExpirationRenderingTests.swift +0 -0
  284. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KGSidebarSynopsisTests.swift +0 -0
  285. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/KnowledgeGraphTests.swift +0 -0
  286. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/MCPFramingTests.swift +0 -0
  287. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/MCPRouterTests.swift +0 -0
  288. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/PopoverTabTests.swift +0 -0
  289. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/QuickCaptureConversationTests.swift +0 -0
  290. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/QuickCapturePanelTests.swift +0 -0
  291. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/QuickCaptureTests.swift +0 -0
  292. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/RENDER_VERIFICATION.md +0 -0
  293. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/RecordingHybridSearchClient.swift +0 -0
  294. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SearchFiltersTests.swift +0 -0
  295. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SearchPanelControllerTests.swift +0 -0
  296. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SearchQueryActorTests.swift +0 -0
  297. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SearchResultPresentationTests.swift +0 -0
  298. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SearchViewModelTests.swift +0 -0
  299. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SocketIntegrationTests.swift +0 -0
  300. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SparklineRendererIconTests.swift +0 -0
  301. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/SparklineSnapshotTests.swift +0 -0
  302. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/StabilityFixTests.swift +0 -0
  303. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/StatsCollectorTests.swift +0 -0
  304. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/Tests/BrainBarTests/TextFormatterParityTests.swift +0 -0
  305. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/build-app.sh +0 -0
  306. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/bundle/com.brainlayer.brainbar-daemon.plist +0 -0
  307. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/bundle/com.brainlayer.brainbar.plist +0 -0
  308. {brainlayer-1.3.0 → brainlayer-1.4.0}/brain-bar/karabiner/brainbar-f4.json +0 -0
  309. {brainlayer-1.3.0 → brainlayer-1.4.0}/bugbot-review-notes.md +0 -0
  310. {brainlayer-1.3.0 → brainlayer-1.4.0}/bugbot_pr_comment.md +0 -0
  311. {brainlayer-1.3.0 → brainlayer-1.4.0}/contracts/engine-ui-contract.md +0 -0
  312. {brainlayer-1.3.0 → brainlayer-1.4.0}/contracts/entity-types.yaml +0 -0
  313. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/abcde-experiment-isolation.md +0 -0
  314. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/adr/0000-template.md +0 -0
  315. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/adr/0001-sqlite-vec-over-dedicated-vector-db.md +0 -0
  316. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/adr/0002-reciprocal-rank-fusion-for-hybrid-search.md +0 -0
  317. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/arbitration.md +0 -0
  318. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/architecture/MODULE-MAP.md +0 -0
  319. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/architecture.md +0 -0
  320. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/archive/chat-based-analysis-design.md +0 -0
  321. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/archive/chat-tags-example.yaml +0 -0
  322. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/archive/communication-analysis.md +0 -0
  323. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/archive/hierarchical-clustering-deep-research.md +0 -0
  324. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/archive/hierarchical-clustering-research.txt +0 -0
  325. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/archive/research-chat-based-analysis.md +0 -0
  326. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/archive/research-prompt-embeddings.md +0 -0
  327. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/assets/logo.svg +0 -0
  328. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/backup-strategy.md +0 -0
  329. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/configuration.md +0 -0
  330. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/contributing.md +0 -0
  331. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/data-locations.md +0 -0
  332. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/embedding-setup.md +0 -0
  333. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/enrichment-provider-agnostic-design.md +0 -0
  334. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/enrichment-runbook.md +0 -0
  335. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/enrichment.md +0 -0
  336. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/index.md +0 -0
  337. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/kg-spec.md +0 -0
  338. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/local-models-guide.md +0 -0
  339. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/mcp-config.md +0 -0
  340. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/mcp-tools.md +0 -0
  341. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/operations/brainlayer-health-check.md +0 -0
  342. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/orqi-batch-contract.md +0 -0
  343. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-02-25-phase-3-brain-digest.md +0 -0
  344. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-02-25-phase-6-sentiment.md +0 -0
  345. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-03-30-enrichment-launchagent.md +0 -0
  346. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-03-31-phase2-search-window-design.md +0 -0
  347. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-03-31-phase2-search-window.md +0 -0
  348. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-04-05-p1a-fts5-health.md +0 -0
  349. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-04-05-p1b-eval-framework.md +0 -0
  350. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-04-18-brainbar-dashboard-flow-collab.md +0 -0
  351. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-04-18-brainbar-dashboard-flow.md +0 -0
  352. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-04-18-brainbar-injections-graph-hybrid.md +0 -0
  353. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-06-01-db-shrink-fts5-dedup.md +0 -0
  354. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-06-02-phoenix-eval-integration.md +0 -0
  355. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/plans/2026-06-14-reembed-unvectored-backlog.md +0 -0
  356. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/quickstart.md +0 -0
  357. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/research/launch-readiness-audit.md +0 -0
  358. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/research/session-enrichment/README.md +0 -0
  359. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/research/session-enrichment/auto-extracting-learnings.md +0 -0
  360. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/research/session-enrichment/brainstore-write-tools.md +0 -0
  361. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/research/session-enrichment/cli-ux-patterns.md +0 -0
  362. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/research/session-enrichment/conversation-reconstruction.md +0 -0
  363. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/research/session-enrichment/prompts.md +0 -0
  364. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/research/session-enrichment/session-enrichment-architecture.md +0 -0
  365. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/roadmap.md +0 -0
  366. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/showcase-claude-collab-discovery.md +0 -0
  367. {brainlayer-1.3.0 → brainlayer-1.4.0}/docs/stylesheets/extra.css +0 -0
  368. {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/.claude-plugin/plugin.json +0 -0
  369. {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/.gitignore +0 -0
  370. {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/.mcp.json +0 -0
  371. {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/hooks/hooks.json +0 -0
  372. {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/hooks/session-start.sh +0 -0
  373. {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/hooks/session-stop.sh +0 -0
  374. {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/hooks/tool-error.sh +0 -0
  375. {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/hooks/tool-observe.sh +0 -0
  376. {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/scripts/brainbar-hook.py +0 -0
  377. {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/scripts/queue-flusher.py +0 -0
  378. {brainlayer-1.3.0 → brainlayer-1.4.0}/extensions/brainlayer-plugin/skills/memory/SKILL.md +0 -0
  379. {brainlayer-1.3.0 → brainlayer-1.4.0}/findings.md +0 -0
  380. {brainlayer-1.3.0 → brainlayer-1.4.0}/greptile.json +0 -0
  381. {brainlayer-1.3.0 → brainlayer-1.4.0}/hooks/brainbar-postcompact.py +0 -0
  382. {brainlayer-1.3.0 → brainlayer-1.4.0}/hooks/brainbar-prompt-capture.py +0 -0
  383. {brainlayer-1.3.0 → brainlayer-1.4.0}/hooks/brainbar-stop-index.py +0 -0
  384. {brainlayer-1.3.0 → brainlayer-1.4.0}/hooks/brainlayer-prompt-search.py +0 -0
  385. {brainlayer-1.3.0 → brainlayer-1.4.0}/hooks/brainlayer-session-start.py +0 -0
  386. {brainlayer-1.3.0 → brainlayer-1.4.0}/hooks/dedup_coordination.py +0 -0
  387. {brainlayer-1.3.0 → brainlayer-1.4.0}/hooks/post-commit.py +0 -0
  388. {brainlayer-1.3.0 → brainlayer-1.4.0}/hooks/session-cleanup.py +0 -0
  389. {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/index.html +0 -0
  390. {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/logos/brainlayer.svg +0 -0
  391. {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/logos/claude.svg +0 -0
  392. {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/logos/cursor.svg +0 -0
  393. {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/logos/gemini.svg +0 -0
  394. {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/logos/kiro.svg +0 -0
  395. {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/logos/openai.svg +0 -0
  396. {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/logos/vscode.svg +0 -0
  397. {brainlayer-1.3.0 → brainlayer-1.4.0}/landing/logos/zed.svg +0 -0
  398. {brainlayer-1.3.0 → brainlayer-1.4.0}/launchd/com.brainlayer.jsonl-backup.plist +0 -0
  399. {brainlayer-1.3.0 → brainlayer-1.4.0}/launchd/com.brainlayer.watch.plist +0 -0
  400. {brainlayer-1.3.0 → brainlayer-1.4.0}/launchd/install-newsyslog.sh +0 -0
  401. {brainlayer-1.3.0 → brainlayer-1.4.0}/launchd/newsyslog.d/README.md +0 -0
  402. {brainlayer-1.3.0 → brainlayer-1.4.0}/launchd/newsyslog.d/brainlayer.conf +0 -0
  403. {brainlayer-1.3.0 → brainlayer-1.4.0}/macroscope.md +0 -0
  404. {brainlayer-1.3.0 → brainlayer-1.4.0}/migrations/002_decay_columns.sql +0 -0
  405. {brainlayer-1.3.0 → brainlayer-1.4.0}/migrations/003_raw_entities_json.sql +0 -0
  406. {brainlayer-1.3.0 → brainlayer-1.4.0}/migrations/004_enrich_status.sql +0 -0
  407. {brainlayer-1.3.0 → brainlayer-1.4.0}/mkdocs.yml +0 -0
  408. {brainlayer-1.3.0 → brainlayer-1.4.0}/overrides/main.html +0 -0
  409. {brainlayer-1.3.0 → brainlayer-1.4.0}/prd-json/index.json +0 -0
  410. {brainlayer-1.3.0 → brainlayer-1.4.0}/prd-json/stories/BUG-005.json +0 -0
  411. {brainlayer-1.3.0 → brainlayer-1.4.0}/prd-json/stories/MP-003.json +0 -0
  412. {brainlayer-1.3.0 → brainlayer-1.4.0}/prd-json/stories/MP-004.json +0 -0
  413. {brainlayer-1.3.0 → brainlayer-1.4.0}/prd-json/stories/US-001.json +0 -0
  414. {brainlayer-1.3.0 → brainlayer-1.4.0}/prd-json/stories/US-002.json +0 -0
  415. {brainlayer-1.3.0 → brainlayer-1.4.0}/progress.txt +0 -0
  416. {brainlayer-1.3.0 → brainlayer-1.4.0}/results/abcde_n893_summary.json +0 -0
  417. {brainlayer-1.3.0 → brainlayer-1.4.0}/results/abcde_n893_summary.md +0 -0
  418. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/__init__.py +0 -0
  419. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/abcde_report.py +0 -0
  420. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill-context.py +0 -0
  421. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill-created-at.py +0 -0
  422. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill-metadata.py +0 -0
  423. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill_chunk_origin_provenance.py +0 -0
  424. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill_content_class.py +0 -0
  425. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill_data/.gitignore +0 -0
  426. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill_decay.py +0 -0
  427. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill_dedupe.py +0 -0
  428. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill_kg_promotion.py +0 -0
  429. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/backfill_orchestrate.sh +0 -0
  430. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/batch_submit_paced.py +0 -0
  431. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/braintrust_ingest.py +0 -0
  432. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/build_qrels.py +0 -0
  433. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/calibrate_importance.py +0 -0
  434. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/classify-all.py +0 -0
  435. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/cleanup-profanity-chunks.py +0 -0
  436. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/cleanup_stale_mcp.py +0 -0
  437. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/cloud_backfill.py +0 -0
  438. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/cloud_stream.py +0 -0
  439. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/db_shrink_eval.py +0 -0
  440. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/db_shrink_migrate.py +0 -0
  441. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/dedup_entities.py +0 -0
  442. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/diarize_episodes.py +0 -0
  443. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/drain_daemon.py +0 -0
  444. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/enrich_recent.py +0 -0
  445. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/enrichment_backfill.py +0 -0
  446. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/enrichment_llm_judge.py +0 -0
  447. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/enrichment_pilot.py +0 -0
  448. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/enrichment_quality_benchmark.py +0 -0
  449. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/export_lexical_defense_snapshot.py +0 -0
  450. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/generate-fixtures.sh +0 -0
  451. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/generate_abcde_variants.py +0 -0
  452. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/generate_style_card.py +0 -0
  453. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/hot_currentness_benchmark.py +0 -0
  454. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/index_youtube.py +0 -0
  455. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/install-karabiner-rule.sh +0 -0
  456. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_backfill.py +0 -0
  457. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_cleanup.py +0 -0
  458. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_cleanup_apply.py +0 -0
  459. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_cleanup_dryrun.py +0 -0
  460. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_dedup.py +0 -0
  461. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_entity_dedup.py +0 -0
  462. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_entity_judge.py +0 -0
  463. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_flag_batch.py +0 -0
  464. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_p2_crosstype_cleanup.py +0 -0
  465. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_p2_safe_cleanup.py +0 -0
  466. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_rebuild.py +0 -0
  467. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_review_session.py +0 -0
  468. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_session_finish.py +0 -0
  469. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/kg_session_harvest.py +0 -0
  470. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/label-chunks.py +0 -0
  471. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/backup-daily.sh +0 -0
  472. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/brainlayer.env.example +0 -0
  473. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.backup-daily.plist +0 -0
  474. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.decay.plist +0 -0
  475. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.health-check.plist +0 -0
  476. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.index.plist +0 -0
  477. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.jsonl-backup.plist +0 -0
  478. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.maintenance-nightly.plist +0 -0
  479. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.maintenance-weekly.plist +0 -0
  480. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.repair-fts.plist +0 -0
  481. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.wal-checkpoint.plist +0 -0
  482. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/com.brainlayer.watch.plist +0 -0
  483. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/launchd/jsonl-backup.sh +0 -0
  484. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/maintenance/brainlayer_maintenance.py +0 -0
  485. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/merge_queue.py +0 -0
  486. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/mine_corrections.py +0 -0
  487. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/mine_failed_queries.py +0 -0
  488. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/mine_frustrations.py +0 -0
  489. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/monitor_batch_reenrichment.py +0 -0
  490. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/p0_longitudinal_count.py +0 -0
  491. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/phase-boundaries.py +0 -0
  492. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/pre-label.py +0 -0
  493. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/promote_tag_entities.py +0 -0
  494. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/purge_orphaned_vectors.py +0 -0
  495. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/quarantine_noise.py +0 -0
  496. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/rebuild_vec0_tables.py +0 -0
  497. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/reembed_bge_m3.py +0 -0
  498. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/reembed_bgem3.py +0 -0
  499. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/replay_brain_store_fallbacks.py +0 -0
  500. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/resimhash_dedupe.py +0 -0
  501. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/run-second-analysis-after-first.sh +0 -0
  502. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/run_abcde_enrich.py +0 -0
  503. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/run_benchmark.py +0 -0
  504. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/run_decay_job.py +0 -0
  505. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/run_evals.py +0 -0
  506. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/run_tests.sh +0 -0
  507. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/scope-config.py +0 -0
  508. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/score_entity_health.py +0 -0
  509. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/seed_agent_profiles.py +0 -0
  510. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/seed_aliases.py +0 -0
  511. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/smoke/README.md +0 -0
  512. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/smoke/firstturn-brainlayer-smoke.sh +0 -0
  513. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/smoke/repogolem_mcp_transport_smoke.py +0 -0
  514. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/tombstone_singleton_tags.py +0 -0
  515. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/train-setfit.py +0 -0
  516. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/verify_hebrew_search.py +0 -0
  517. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/vertex_poll_import.py +0 -0
  518. {brainlayer-1.3.0 → brainlayer-1.4.0}/scripts/wal_checkpoint.py +0 -0
  519. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/_helpers.py +0 -0
  520. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/agent_profiles.py +0 -0
  521. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/backup_daily.py +0 -0
  522. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/bitemporal.py +0 -0
  523. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/brainbar_hybrid_helper.py +0 -0
  524. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/calibrate.py +0 -0
  525. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/chunk_origin.py +0 -0
  526. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/chunk_origin_backfill.py +0 -0
  527. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/classify.py +0 -0
  528. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/claude_paths.py +0 -0
  529. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/cli/wizard.py +0 -0
  530. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/cli_new.py +0 -0
  531. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/clustering.py +0 -0
  532. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/config.py +0 -0
  533. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/content_class.py +0 -0
  534. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/correction_judge.py +0 -0
  535. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/db_shrink.py +0 -0
  536. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/decay.py +0 -0
  537. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/decay_backfill.py +0 -0
  538. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/decay_job.py +0 -0
  539. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/dedupe.py +0 -0
  540. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/embeddings.py +0 -0
  541. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/engine.py +0 -0
  542. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/__init__.py +0 -0
  543. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/abcde_enrich_runner.py +0 -0
  544. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/abcde_variants.py +0 -0
  545. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/abcde_variants.yaml +0 -0
  546. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/benchmark.py +0 -0
  547. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/enrichment_gold.py +0 -0
  548. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/enrichment_graders.py +0 -0
  549. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/enrichment_judge.py +0 -0
  550. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/enrichment_llm_judge.py +0 -0
  551. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/enrichment_quality_benchmark.py +0 -0
  552. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/experiment_store.py +0 -0
  553. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/fixtures/README.md +0 -0
  554. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/labeling/enrichment-labeler.html +0 -0
  555. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/__init__.py +0 -0
  556. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/__main__.py +0 -0
  557. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/baseline_store.py +0 -0
  558. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/cli.py +0 -0
  559. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/models.py +0 -0
  560. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/phoenix_client.py +0 -0
  561. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/regression_gate.py +0 -0
  562. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/eval/phoenix_gate/triggers.py +0 -0
  563. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/fallback_replay.py +0 -0
  564. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/git_learning.py +0 -0
  565. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/hooks/__init__.py +0 -0
  566. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/hooks/indexer.py +0 -0
  567. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/ingest/__init__.py +0 -0
  568. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/ingest/codex.py +0 -0
  569. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/ingest_guard.py +0 -0
  570. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/isolation_proof.py +0 -0
  571. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/jsonl_backup.py +0 -0
  572. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/kg/__init__.py +0 -0
  573. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/kg_cleanup.py +0 -0
  574. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/kg_judge.py +0 -0
  575. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/kg_promotion.py +0 -0
  576. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/kg_repo.py +0 -0
  577. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/kg_review_session.py +0 -0
  578. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/kg_session_finish.py +0 -0
  579. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/kg_session_harvest.py +0 -0
  580. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/lexical_defense.py +0 -0
  581. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/lexical_defense_dictionary.json +0 -0
  582. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/maintenance.py +0 -0
  583. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/mcp/__init__.py +0 -0
  584. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/mcp/_format.py +0 -0
  585. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/mcp/_shared.py +0 -0
  586. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/mcp/enrich_handler.py +0 -0
  587. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/mcp/entity_handler.py +0 -0
  588. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/mcp/tags_handler.py +0 -0
  589. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/migrate.py +0 -0
  590. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/parent_death.py +0 -0
  591. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/paths.py +0 -0
  592. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/phonetic.py +0 -0
  593. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/__init__.py +0 -0
  594. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/agent_enrichment.py +0 -0
  595. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/analyze_communication.py +0 -0
  596. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/batch_extraction.py +0 -0
  597. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/brain_graph.py +0 -0
  598. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/chat_tags.py +0 -0
  599. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/chunk.py +0 -0
  600. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/cluster_sampling.py +0 -0
  601. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/code_intelligence.py +0 -0
  602. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/correction_detection.py +0 -0
  603. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/correction_mining.py +0 -0
  604. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/digest.py +0 -0
  605. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/enrichment.py +0 -0
  606. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/enrichment_tiers.py +0 -0
  607. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/entity_extraction.py +0 -0
  608. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/entity_resolution.py +0 -0
  609. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/extract.py +0 -0
  610. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/extract_claude_desktop.py +0 -0
  611. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/extract_corrections.py +0 -0
  612. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/extract_markdown.py +0 -0
  613. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/extract_whatsapp.py +0 -0
  614. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/frustration_mining.py +0 -0
  615. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/git_overlay.py +0 -0
  616. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/kg_extraction.py +0 -0
  617. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/kg_extraction_groq.py +0 -0
  618. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/longitudinal_analyzer.py +0 -0
  619. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/obsidian_export.py +0 -0
  620. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/operation_grouping.py +0 -0
  621. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/plan_linking.py +0 -0
  622. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/rate_limiter.py +0 -0
  623. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/sanitize.py +0 -0
  624. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/semantic_style.py +0 -0
  625. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/sentiment.py +0 -0
  626. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/session_enrichment.py +0 -0
  627. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/style_embed.py +0 -0
  628. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/style_index.py +0 -0
  629. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/tag_entity_promotion.py +0 -0
  630. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/temporal_chains.py +0 -0
  631. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/time_batcher.py +0 -0
  632. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/unified_timeline.py +0 -0
  633. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/pipeline/write_queue.py +0 -0
  634. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/provenance.py +0 -0
  635. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/provenance_autosupersede.py +0 -0
  636. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/provenance_integration.py +0 -0
  637. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/queue_io.py +0 -0
  638. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/queue_merge.py +0 -0
  639. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/reembed_backfill.py +0 -0
  640. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/scoping.py +0 -0
  641. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/search_profile.py +0 -0
  642. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/search_repo.py +0 -0
  643. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/session_repo.py +0 -0
  644. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/setup.py +0 -0
  645. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/storage.py +0 -0
  646. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/tag_normalization.py +0 -0
  647. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/taxonomy.json +0 -0
  648. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/telemetry.py +0 -0
  649. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/types.py +0 -0
  650. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/wal_checkpoint.py +0 -0
  651. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/watcher.py +0 -0
  652. {brainlayer-1.3.0 → brainlayer-1.4.0}/src/brainlayer/watcher_bridge.py +0 -0
  653. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/BrainBarWindowRootView.test.swift +0 -0
  654. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/__init__.py +0 -0
  655. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/conftest.py +0 -0
  656. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/eval/phoenix_gate/test_phoenix_gate.py +0 -0
  657. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/eval_baselines.json +0 -0
  658. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/eval_mcp_brainlayer.json +0 -0
  659. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/eval_pr3_relevance_qrels.json +0 -0
  660. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/eval_qrels.json +0 -0
  661. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/fixtures/README.md +0 -0
  662. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/fixtures/stale_index_query.json +0 -0
  663. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/mock_mcp/__init__.py +0 -0
  664. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/mock_mcp/assertions.py +0 -0
  665. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/mock_mcp/base.py +0 -0
  666. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/mock_mcp/mock_brainlayer.py +0 -0
  667. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/mock_mcp/mock_github.py +0 -0
  668. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/mock_mcp/mock_voicelayer.py +0 -0
  669. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/regression/__init__.py +0 -0
  670. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/regression/_stale_index_fixture.py +0 -0
  671. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/regression/test_drift_detection.py +0 -0
  672. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/regression/test_fts5_determinism.sh +0 -0
  673. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/stale_index_query.test.ts +0 -0
  674. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_3tool_aliases.py +0 -0
  675. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_6pm_entity_upgrades.py +0 -0
  676. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_abcde_enrich_runner.py +0 -0
  677. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_abcde_report.py +0 -0
  678. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_abcde_variants.py +0 -0
  679. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_adaptive_injection.py +0 -0
  680. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_agent_profiles.py +0 -0
  681. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_atomic_brick_schema.py +0 -0
  682. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_audit_recursion_filter.py +0 -0
  683. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_audit_search_quality.py +0 -0
  684. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_auto_enrich.py +0 -0
  685. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_backup_daily.py +0 -0
  686. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_batch_extraction.py +0 -0
  687. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_batch_reenrichment_setup.py +0 -0
  688. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_behavioral_pr_loop.py +0 -0
  689. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_bitemporal_phase1.py +0 -0
  690. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_brain_graph_compat.py +0 -0
  691. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_brain_tags.py +0 -0
  692. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_brainbar_build_app_guards.py +0 -0
  693. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_brainbar_helper_fast_profile.py +0 -0
  694. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_brainbar_hybrid_helper.py +0 -0
  695. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_brainstore.py +0 -0
  696. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_braintrust_ingest.py +0 -0
  697. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_calibrate_importance.py +0 -0
  698. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_chat_list.py +0 -0
  699. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_chunk.py +0 -0
  700. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_chunk_lifecycle.py +0 -0
  701. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_chunk_origin_provenance.py +0 -0
  702. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_chunker.py +0 -0
  703. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_classify.py +0 -0
  704. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_cleanup_profanity_chunks.py +0 -0
  705. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_cli_direct_sqlite.py +0 -0
  706. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_cli_provenance.py +0 -0
  707. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_code_intelligence.py +0 -0
  708. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_concurrent_enrichment.py +0 -0
  709. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_conditional_hooks.py +0 -0
  710. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_consumer_scoping.py +0 -0
  711. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_content_class.py +0 -0
  712. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_context_pipeline.py +0 -0
  713. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_correction_detection_gate.py +0 -0
  714. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_correction_judge.py +0 -0
  715. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_correction_mining.py +0 -0
  716. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_dashboard.py +0 -0
  717. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_db_lock_resilience.py +0 -0
  718. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_db_shrink.py +0 -0
  719. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_decay.py +0 -0
  720. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_dedup_coordination.py +0 -0
  721. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_dedupe.py +0 -0
  722. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_deferred_mcp_provenance_guard.py +0 -0
  723. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_dev_dependencies.py +0 -0
  724. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_digest_connect.py +0 -0
  725. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_digest_enrichment.py +0 -0
  726. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_digest_pipeline_v2.py +0 -0
  727. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_drain_health.py +0 -0
  728. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_embedding_truncation.py +0 -0
  729. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_engine.py +0 -0
  730. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_engine_package_boundary.py +0 -0
  731. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrich_defaults.py +0 -0
  732. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_bounded_commit.py +0 -0
  733. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_data_integrity.py +0 -0
  734. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_entity_schema.py +0 -0
  735. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_fallback.py +0 -0
  736. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_gold.py +0 -0
  737. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_graders.py +0 -0
  738. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_judge.py +0 -0
  739. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_llm_judge.py +0 -0
  740. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_quality_benchmark.py +0 -0
  741. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_reliability.py +0 -0
  742. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_threshold.py +0 -0
  743. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_tiers.py +0 -0
  744. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_tiers_agent_sources.py +0 -0
  745. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_enrichment_v2.py +0 -0
  746. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_entity_contracts.py +0 -0
  747. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_entity_dedup.py +0 -0
  748. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_entity_extraction.py +0 -0
  749. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_entity_fact_correction_judge.py +0 -0
  750. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_entity_parent_relations.py +0 -0
  751. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_entity_type_gate.py +0 -0
  752. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_entity_type_sync.py +0 -0
  753. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_eval_baselines.py +0 -0
  754. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_eval_framework.py +0 -0
  755. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_experiment_store.py +0 -0
  756. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_extract_markdown.py +0 -0
  757. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_fallback_replay.py +0 -0
  758. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_follow_up_rewrite.py +0 -0
  759. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_frustration_mining.py +0 -0
  760. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_fts5_health.py +0 -0
  761. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_git_learning.py +0 -0
  762. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_groq_backend.py +0 -0
  763. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_groq_rate_limit.py +0 -0
  764. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_hebrew_alias.py +0 -0
  765. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_hook_slim.py +0 -0
  766. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_hot_currentness_benchmark.py +0 -0
  767. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_hybrid_search.py +0 -0
  768. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_hybrid_search_decay.py +0 -0
  769. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_ingest_codex.py +0 -0
  770. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_ingest_guard.py +0 -0
  771. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_isolation_proof_harness.py +0 -0
  772. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_issue_type.py +0 -0
  773. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_jsonl_backup.py +0 -0
  774. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_jsonl_watcher.py +0 -0
  775. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_boost_reconnect.py +0 -0
  776. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_cleanup.py +0 -0
  777. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_entity_dedup.py +0 -0
  778. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_extraction.py +0 -0
  779. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_hybrid_retrieval.py +0 -0
  780. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_judge.py +0 -0
  781. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_p2_crosstype_cleanup.py +0 -0
  782. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_p2_safe_cleanup.py +0 -0
  783. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_promotion.py +0 -0
  784. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_quality.py +0 -0
  785. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_rebuild.py +0 -0
  786. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_relations.py +0 -0
  787. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_review_session.py +0 -0
  788. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_schema.py +0 -0
  789. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_session_finish.py +0 -0
  790. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_session_harvest.py +0 -0
  791. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_kg_standard.py +0 -0
  792. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_lexical_defense.py +0 -0
  793. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_lifecycle.py +0 -0
  794. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_maintenance_routine.py +0 -0
  795. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mcp_digest_modes.py +0 -0
  796. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mcp_format.py +0 -0
  797. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mcp_input_schema_limits.py +0 -0
  798. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mcp_labeled_field_output.py +0 -0
  799. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mcp_lazy_startup.py +0 -0
  800. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mcp_socket_config_templates.py +0 -0
  801. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mcp_timeout.py +0 -0
  802. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mcp_warm_route.py +0 -0
  803. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mine_queries.py +0 -0
  804. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mlx_health_recovery.py +0 -0
  805. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_mmr_default_off.py +0 -0
  806. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_ner_eval.py +0 -0
  807. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_newsyslog_config.py +0 -0
  808. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_normalize_project.py +0 -0
  809. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_p0_longitudinal_count.py +0 -0
  810. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_parent_death.py +0 -0
  811. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_paths.py +0 -0
  812. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_phase2.py +0 -0
  813. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_phase2_plugin_manifest.py +0 -0
  814. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_phase2_plugin_queue.py +0 -0
  815. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_phase3_digest.py +0 -0
  816. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_phase3_qa.py +0 -0
  817. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_phase5.py +0 -0
  818. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_phase6_critical.py +0 -0
  819. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_phase6_sentiment.py +0 -0
  820. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_post_commit_hook.py +0 -0
  821. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_precompact_chunk_origin.py +0 -0
  822. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_prompt_classification.py +0 -0
  823. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_provenance.py +0 -0
  824. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_provenance_autosupersede.py +0 -0
  825. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_provenance_integration.py +0 -0
  826. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_quarantine_noise.py +0 -0
  827. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_queue_merge.py +0 -0
  828. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_rate_limiter.py +0 -0
  829. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_realtime_hooks.py +0 -0
  830. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_recent_enrichment.py +0 -0
  831. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_reembed_backfill.py +0 -0
  832. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_reembed_bgem3.py +0 -0
  833. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_release_version_sync.py +0 -0
  834. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_run_tests_script.py +0 -0
  835. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_sanitize.py +0 -0
  836. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_alias_expansion.py +0 -0
  837. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_chunk_id.py +0 -0
  838. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_exact_chunk_id.py +0 -0
  839. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_filter_params.py +0 -0
  840. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_gaps.py +0 -0
  841. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_quality.py +0 -0
  842. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_routing.py +0 -0
  843. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_trigram_fts.py +0 -0
  844. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_search_validation.py +0 -0
  845. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_semantic_style.py +0 -0
  846. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_session_enrichment.py +0 -0
  847. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_session_enrichment_candidates.py +0 -0
  848. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_smart_search_entity_dedup.py +0 -0
  849. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_stale_index_fixture.py +0 -0
  850. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_stop_hook_created_at.py +0 -0
  851. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_storage.py +0 -0
  852. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_tag_entity_promotion.py +0 -0
  853. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_telemetry.py +0 -0
  854. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_think_recall_integration.py +0 -0
  855. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_tool_annotations.py +0 -0
  856. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_tool_description_quality.py +0 -0
  857. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_transport_replay_attribution.py +0 -0
  858. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_truncation.py +0 -0
  859. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_vector_store.py +0 -0
  860. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_vector_store_pragma_tuning.py +0 -0
  861. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_vector_store_readonly.py +0 -0
  862. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_vector_store_schema_flags.py +0 -0
  863. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_wal_checkpoint_module.py +0 -0
  864. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_watcher_bridge.py +0 -0
  865. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_wizard.py +0 -0
  866. {brainlayer-1.3.0 → brainlayer-1.4.0}/tests/test_writer_pidfile_mutex.py +0 -0
@@ -76,6 +76,12 @@ jobs:
76
76
  --ignore=tests/test_follow_up_rewrite.py
77
77
  --ignore=tests/test_prompt_classification.py
78
78
 
79
+ - name: Doctor fixture gate
80
+ env:
81
+ HF_HUB_OFFLINE: "1"
82
+ TRANSFORMERS_OFFLINE: "1"
83
+ run: pytest tests/test_doctor.py -v --tb=short
84
+
79
85
  - name: Isolated eval and hook routing tests
80
86
  env:
81
87
  HF_HUB_OFFLINE: "1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: brainlayer
3
- Version: 1.3.0
3
+ Version: 1.4.0
4
4
  Summary: Persistent memory MCP server for AI agents — 13 tools, semantic search, knowledge graph, on-device SQLite
5
5
  Project-URL: Homepage, https://brainlayer.etanheyman.com
6
6
  Project-URL: Repository, https://github.com/EtanHey/brainlayer
@@ -664,11 +664,20 @@ final class BrainBarServer: @unchecked Sendable {
664
664
 
665
665
  // Claude Desktop's MCPB utility process currently parses raw extension
666
666
  // stdout in 8192-byte chunks. Raw newline transport omits optional tool
667
- // annotations; Content-Length transport keeps the canonical tools/list.
667
+ // annotations and the verbose human-readable description prose (both the
668
+ // top-level tool descriptions and the per-property inputSchema
669
+ // descriptions). The Content-Length transport keeps the canonical, fully
670
+ // described tools/list; the raw line keeps only the machine-required
671
+ // shape (name + inputSchema structure) so the response stays under the
672
+ // 8192-byte MCPB chunk limit without dropping any tool.
668
673
  var compactResult = result
669
674
  compactResult["tools"] = tools.map { tool in
670
675
  var compact = tool
671
676
  compact.removeValue(forKey: "annotations")
677
+ compact.removeValue(forKey: "description")
678
+ if let schema = compact["inputSchema"] as? [String: Any] {
679
+ compact["inputSchema"] = stripSchemaDescriptions(schema)
680
+ }
672
681
  return compact
673
682
  }
674
683
 
@@ -677,6 +686,30 @@ final class BrainBarServer: @unchecked Sendable {
677
686
  return compactResponse
678
687
  }
679
688
 
689
+ /// Recursively removes human-readable `description` keys from a JSON schema
690
+ /// so the raw-line tools/list stays under Claude Desktop's MCPB chunk limit.
691
+ /// Structural keys (type, properties, required, enum, items, maxLength, …)
692
+ /// are preserved so the tool remains callable.
693
+ private static func stripSchemaDescriptions(_ schema: [String: Any]) -> [String: Any] {
694
+ var stripped = schema
695
+ stripped.removeValue(forKey: "description")
696
+ if let properties = stripped["properties"] as? [String: Any] {
697
+ var newProperties: [String: Any] = [:]
698
+ for (key, value) in properties {
699
+ if let nested = value as? [String: Any] {
700
+ newProperties[key] = stripSchemaDescriptions(nested)
701
+ } else {
702
+ newProperties[key] = value
703
+ }
704
+ }
705
+ stripped["properties"] = newProperties
706
+ }
707
+ if let items = stripped["items"] as? [String: Any] {
708
+ stripped["items"] = stripSchemaDescriptions(items)
709
+ }
710
+ return stripped
711
+ }
712
+
680
713
  private func disconnectClient(fd: Int32) {
681
714
  if let subscriptionID = clients[fd]?.brainBusSubscriptionID {
682
715
  brainBus.unsubscribeSynchronously(subscriptionID)
@@ -2130,7 +2130,7 @@ struct BrainBarDashboardLayout {
2130
2130
  diagnosticItemColumns = containerSize.width >= 760 ? 2 : 1
2131
2131
 
2132
2132
  compactCards = compactWidth || compactHeight
2133
- outerPadding = compactCards ? 24 : 32
2133
+ outerPadding = compactCards ? 24 : 36
2134
2134
  sectionSpacing = compactCards ? 20 : 28
2135
2135
  gridSpacing = compactCards ? 16 : 22
2136
2136
  cardPadding = compactCards ? 22 : 32
@@ -14,8 +14,13 @@ final class MCPRouter: @unchecked Sendable {
14
14
  // for replay so brain_store returns well under the 1s prompt-queue budget.
15
15
  // Longer contention handling belongs in the deferred single-writer/backpressure
16
16
  // path, not in the synchronous MCP response.
17
- private static let mcpStoreBusyTimeoutMillis: Int32 = 250
18
- private static let mcpStoreRetries = 1
17
+ //
18
+ // Budget math: a contended BEGIN IMMEDIATE blocks up to the busy timeout, and
19
+ // each extra retry adds another busy-timeout block plus a retry sleep. To stay
20
+ // under the 200ms queue budget the synchronous path makes exactly one short
21
+ // attempt (retries == 0) with a sub-budget busy timeout, then queues on busy.
22
+ private static let mcpStoreBusyTimeoutMillis: Int32 = 100
23
+ private static let mcpStoreRetries = 0
19
24
 
20
25
  private struct ToolOutput {
21
26
  let text: String
@@ -9,9 +9,9 @@
9
9
  <key>CFBundleIdentifier</key>
10
10
  <string>com.brainlayer.brainbar</string>
11
11
  <key>CFBundleVersion</key>
12
- <string>1.0.0</string>
12
+ <string>1.4.0</string>
13
13
  <key>CFBundleShortVersionString</key>
14
- <string>1.0.0</string>
14
+ <string>1.4.0</string>
15
15
  <key>CFBundlePackageType</key>
16
16
  <string>APPL</string>
17
17
  <key>CFBundleExecutable</key>
@@ -0,0 +1,66 @@
1
+ # BrainLayer — Robust Brew Layer Conformance
2
+
3
+ > Self-audit of BrainLayer against the cross-layer **Robust Brew Layer Standard**
4
+ > (`orchestrator/standards/robust-brew-layer.md`, owner: cmuxlayerClaude).
5
+ > Status as of **2026-06-21**, after the M1-clone (`happycampr`) friction sprint.
6
+ > Every ✅ below is verified either on the live M4 dev machine or the M1 clone
7
+ > end-to-end install (`brew install --cask brainbar` → working `1.3.0,1`).
8
+
9
+ ## Headline (§0 / §0.1) — two-consumer split
10
+
11
+ BrainLayer is the standard's reference **two-consumer split**:
12
+
13
+ - **App / fleet (socket + daemon):** `BrainBarDaemon` serves `brain_search` over the
14
+ **canonical socket `/tmp/brainbar.sock`** for the live BrainBar UI and for
15
+ cross-repo fleet agents. This is the genuinely-needed daemon case (§0).
16
+ - **Agents (stdio MCP):** `brainlayer-mcp` (`brainlayer serve`) is a **stdio** server
17
+ launched per-agent that talks to the SQLite store directly — *not* through the
18
+ app's socket. This removes the agent path's dependency on the socket/daemon
19
+ failure classes (7a/7b/7c) entirely.
20
+
21
+ ### Write-path invariant (§0.1 hard requirement)
22
+
23
+ The store runs in **WAL mode**. The concurrency invariant is preserved as follows:
24
+
25
+ - **Reads** (`brain_search`, both DB-direct stdio and socket-served): safe under WAL —
26
+ SQLite WAL permits concurrent readers alongside writers. Agent read connections
27
+ open read-only.
28
+ - **Writes** (`brain_store`, watcher, enrichment): serialized through the
29
+ **`com.brainlayer.drain` queue → single applying writer** (`docs/configuration.md`:
30
+ "Drain queued writes as the single writer"), with `WAL` + `busy_timeout` retry on
31
+ `SQLITE_BUSY` for any direct writer. The single-writer consistency assumption is
32
+ thus held by the drain, not by the GUI daemon — so the DB-direct stdio agent MCP
33
+ is a **reader**, never a competing writer.
34
+
35
+ This satisfies §0.1: consumers are documented (socket = app/fleet, stdio = agents),
36
+ and the write-path invariant is stated.
37
+
38
+ ## Conformance matrix
39
+
40
+ | § | Class | Status | Evidence |
41
+ |---|---|---|---|
42
+ | 0 / 0.1 | stdio-preferred / split + write-path invariant documented | ✅ | This doc; `brainlayer-mcp` stdio + `BrainBarDaemon` socket; drain = single writer |
43
+ | 1 | account-rename self-heal (no interactive sudo) | ⚠️ **partial** | Cask `preflight` self-heals dangling `localaiengine`-tainted Caskroom symlinks (account-agnostic via `start_with?`, user-owned only, no sudo) — **M1-verified**. **Gap:** no standalone `brainlayer doctor --fix` CLI (the §1 MUST form). |
44
+ | 2 | sudo-free cask uninstall / upgrade | ✅ | brainbar installs **user** LaunchAgents (`gui/$uid`), no privileged helper → uninstall needs no sudo; `zap` stanza present; caveats document the two genuine sudo edge-cases (root-owned leftover after rename; clone-upgrade heuristic) |
45
+ | 3 | tap-add + trust documented | ✅ (shared runbook, orc-owned) | M1 install succeeded → tap trusted; brainbar resolves as `etanhey/layers/brainbar` |
46
+ | 4 | venv-python everywhere | ✅ | Daemon resolves the formula venv python via `resolveHomebrewVenvPython` (PR #528) before any bare-python fallback; hooks self-resolve src via `sys.path.insert` + degrade gracefully under `except` guards (never hard-fail on bare `python3`) |
47
+ | 5 | headless serve + daemon integrity | ✅ | **5a** canonical `/tmp/brainbar.sock`, zero stale `mcplayer-*` aliases in the bundle. **5b** `BrainBarDaemon` LaunchAgent (`RunAtLoad`/`KeepAlive`) brings the socket up headless. **5c** cask `postflight` re-bootstraps the daemon+UI LaunchAgents on reinstall (PR #525 / cask) — **M1-verified auto-bootstrap, PID assigned, no `setup --launchd` needed**. **5d** daemon is its own executable + LaunchAgent, not a GUI-app child |
48
+ | 6 | declared deps + correct cask names + adopt | ✅ | Agent MCP is **stdio** → structurally immune to the socat 3-address footgun; fleet socket access verified **connecting** on M1 (`brain_search` 5 results, no `-32000`) |
49
+ | 7 | read-only commands stay read-only | ⚠️ **review** | Action-verbs mutate appropriately (`reconcile-launchd`, `watch`, `wal-checkpoint`, `serve`); `health-check` is read-only. **Open:** `setup` ("create brainlayer.env…") and `init` (interactive wizard) mutate — but both are the **documented install entrypoints** (formula caveat: "Run setup after install"), not surprise-mutating inspect-verbs. Needs standard-owner ruling on whether documented-`setup`-as-install must be renamed `install`. |
50
+
51
+ ## Remaining work
52
+
53
+ 1. **§1 — `brainlayer doctor` / `doctor --fix` CLI (the one real MUST gap).**
54
+ The *friction* is functionally fixed and M1-verified (cask preflight heals the
55
+ reinstall case), but the standard prescribes a standalone non-interactive CLI:
56
+ detect stale Caskroom artifacts (account-agnostic), `--fix` heals without bare
57
+ sudo (`sudo -n` probe), root-owned → `STOP:` + distinct exit code, idempotent,
58
+ SHOULD scan the sibling manifest (brainbar, karabiner-elements, aldente,
59
+ wispr-flow, codex). The detection logic already exists in the cask preflight and
60
+ would be lifted into the CLI. **Scoped follow-on; the M1 already works without it.**
61
+
62
+ 2. **§7 — read-only ruling.** Confirm with the standard owner whether `setup`/`init`
63
+ may remain the documented install entrypoints or must move mutation behind an
64
+ explicit `install` subcommand.
65
+
66
+ Everything else (§0, §2, §3, §4, §5, §6) is conformant and M1-clone-verified.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "brainlayer"
3
- version = "1.3.0"
3
+ version = "1.4.0"
4
4
  description = "Persistent memory MCP server for AI agents — 13 tools, semantic search, knowledge graph, on-device SQLite"
5
5
  license = {text = "Apache-2.0"}
6
6
  readme = "README.md"
@@ -30,6 +30,7 @@ LOGGER = logging.getLogger("brainlayer.hotlane_brainbar")
30
30
  STOP = False
31
31
  DEFAULT_HOTLANE_ENRICH_LIMIT = 5
32
32
  DEFAULT_BACKLOG_BATCH = 4
33
+ MAX_BACKLOG_BATCH = 16
33
34
 
34
35
 
35
36
  class CycleResult(NamedTuple):
@@ -83,6 +84,13 @@ def _queue_depth(queue_dir: Path) -> int:
83
84
  return 0
84
85
 
85
86
 
87
+ def _high_priority_queue_depth(queue_dir: Path) -> int:
88
+ try:
89
+ return sum(1 for path in queue_dir.glob("*.jsonl") if not path.name.startswith("enrichment-"))
90
+ except OSError:
91
+ return 0
92
+
93
+
86
94
  def run_cycle(
87
95
  *,
88
96
  store: VectorStore,
@@ -143,6 +151,7 @@ def run(
143
151
  max_cycles: int | None = None,
144
152
  queue_dir: Path | None = None,
145
153
  queue_depth_fn: Callable[[Path], int] = _queue_depth,
154
+ high_priority_queue_depth_fn: Callable[[Path], int] = _high_priority_queue_depth,
146
155
  ) -> None:
147
156
  model = model_factory()
148
157
  embed_batch_fn = getattr(model, "embed_texts", None)
@@ -162,6 +171,7 @@ def run(
162
171
  last_enrich = 0.0
163
172
  enrich_disabled = False
164
173
  cycles = 0
174
+ backlog_batch = min(max(backlog_batch, 0), MAX_BACKLOG_BATCH)
165
175
  LOGGER.info("hotlane adapter started db=%s", db_path)
166
176
  while not STOP:
167
177
  if max_cycles is not None and cycles >= max_cycles:
@@ -169,14 +179,19 @@ def run(
169
179
  try:
170
180
  now = time_fn()
171
181
  queue_has_backlog = queue_depth_fn(queue_dir) > 0
182
+ queue_has_high_priority_backlog = queue_has_backlog and high_priority_queue_depth_fn(queue_dir) > 0
172
183
  if queue_has_backlog:
173
- LOGGER.info("durable queue has backlog; yielding writer slot to drain")
184
+ LOGGER.info("durable queue has backlog; suppressing enrichment only")
185
+ if queue_has_high_priority_backlog:
186
+ LOGGER.info("durable high-priority queue has backlog; yielding writer slot to drain")
187
+ cycles += 1
188
+ sleep_fn(interval)
189
+ continue
174
190
  cycle_backlog_batch = backlog_batch if backlog_batch > 0 and now - last_backlog >= backlog_interval else 0
175
191
  cycle_enrich_limit = (
176
192
  enrich_limit if not enrich_disabled and enrich_limit > 0 and now - last_enrich >= enrich_interval else 0
177
193
  )
178
194
  if queue_has_backlog:
179
- cycle_backlog_batch = 0
180
195
  cycle_enrich_limit = 0
181
196
  if cycle_backlog_batch > 0:
182
197
  last_backlog = now
@@ -234,7 +249,7 @@ def main() -> None:
234
249
  interval=max(args.interval, 0.25),
235
250
  recent_limit=max(args.recent_limit, 1),
236
251
  backlog_interval=max(args.backlog_interval, 1.0),
237
- backlog_batch=max(args.backlog_batch, 0),
252
+ backlog_batch=min(max(args.backlog_batch, 0), MAX_BACKLOG_BATCH),
238
253
  enrich_interval=max(args.enrich_interval, 1.0),
239
254
  enrich_limit=max(args.enrich_limit, 0),
240
255
  enrich_since_hours=max(args.enrich_since_hours, 0),
@@ -3,6 +3,7 @@
3
3
  set -euo pipefail
4
4
 
5
5
  ENV_FILE="${BRAINLAYER_ENV_FILE:-$HOME/.config/brainlayer/brainlayer.env}"
6
+ export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$HOME/.local/bin:${PATH:-}"
6
7
 
7
8
  if [ ! -f "$ENV_FILE" ]; then
8
9
  echo "ERROR: BrainLayer env file not found at $ENV_FILE" >&2
@@ -22,10 +23,66 @@ if [ -n "$(find "$ENV_FILE" -prune -perm -0002 -print 2>/dev/null)" ]; then
22
23
  exit 78
23
24
  fi
24
25
 
25
- set -a
26
- # shellcheck disable=SC1090
27
- source "$ENV_FILE"
28
- set +a
26
+ valid_env_key() {
27
+ case "$1" in
28
+ ""|[0-9]*|*[!A-Za-z0-9_]*)
29
+ return 1
30
+ ;;
31
+ *)
32
+ return 0
33
+ ;;
34
+ esac
35
+ }
36
+
37
+ strip_matching_quotes() {
38
+ local value="$1"
39
+ if [[ "$value" == \"*\" && "$value" == *\" ]]; then
40
+ printf '%s' "${value:1:${#value}-2}"
41
+ elif [[ "$value" == \'*\' && "$value" == *\' ]]; then
42
+ printf '%s' "${value:1:${#value}-2}"
43
+ else
44
+ printf '%s' "$value"
45
+ fi
46
+ }
47
+
48
+ load_simple_env_file() {
49
+ local raw_line line key value
50
+ while IFS= read -r raw_line || [ -n "$raw_line" ]; do
51
+ line="${raw_line#"${raw_line%%[![:space:]]*}"}"
52
+ line="${line%"${line##*[![:space:]]}"}"
53
+ case "$line" in
54
+ ""|\#*)
55
+ continue
56
+ ;;
57
+ export\ *)
58
+ line="${line#export }"
59
+ ;;
60
+ esac
61
+ case "$line" in
62
+ *=*) ;;
63
+ *) continue ;;
64
+ esac
65
+ key="${line%%=*}"
66
+ value="${line#*=}"
67
+ key="${key%"${key##*[![:space:]]}"}"
68
+ value="${value#"${value%%[![:space:]]*}"}"
69
+ if ! valid_env_key "$key"; then
70
+ continue
71
+ fi
72
+ case "$value" in
73
+ *'$('*|*'`'*)
74
+ continue
75
+ ;;
76
+ esac
77
+ export "$key=$(strip_matching_quotes "$value")"
78
+ done < "$ENV_FILE"
79
+ }
80
+
81
+ env_file_declares_google_key() {
82
+ grep -Eq '^[[:space:]]*(export[[:space:]]+)?GOOGLE(_GENERATIVE_AI)?_API_KEY[[:space:]]*=' "$ENV_FILE"
83
+ }
84
+
85
+ load_simple_env_file
29
86
 
30
87
  is_false() {
31
88
  case "${1:-}" in
@@ -68,7 +125,9 @@ if [ "${BRAINLAYER_SKIP_DISABLE_GATES:-0}" != "1" ]; then
68
125
  fi
69
126
  fi
70
127
 
71
- if [ "${BRAINLAYER_REQUIRE_GOOGLE_API_KEY:-0}" = "1" ] && [ -z "${GOOGLE_API_KEY:-${GOOGLE_GENERATIVE_AI_API_KEY:-}}" ]; then
128
+ if [ "${BRAINLAYER_REQUIRE_GOOGLE_API_KEY:-0}" = "1" ] \
129
+ && [ -z "${GOOGLE_API_KEY:-${GOOGLE_GENERATIVE_AI_API_KEY:-}}" ] \
130
+ && ! env_file_declares_google_key; then
72
131
  echo "ERROR: GOOGLE_API_KEY not set by $ENV_FILE" >&2
73
132
  exit 78
74
133
  fi
@@ -25,13 +25,9 @@
25
25
  <string>__BRAINLAYER_ENV_FILE__</string>
26
26
  <key>BRAINLAYER_LAUNCHD_SERVICE</key>
27
27
  <string>drain</string>
28
- <!-- Write chunks WITHOUT computing embeddings inside the drain's write
29
- transaction. Inline embedding lengthens the write-lock hold time and,
30
- under multi-writer contention (BrainBar/daemon/hybrid/watcher), starves
31
- the drain on SQLITE_BUSY so the realtime queue backs up. Vectors are
32
- backfilled out-of-band by enrichment/hotlane. (M1/throughput fix.) -->
33
- <key>BRAINLAYER_DRAIN_EMBED</key>
34
- <string>0</string>
28
+ <!-- Production leaves drain embedding enabled. Embeddings are precomputed
29
+ before BEGIN IMMEDIATE, so vector coverage does not depend on hotlane
30
+ liveness and the write-lock window stays bounded. -->
35
31
  </dict>
36
32
  <key>StandardOutPath</key>
37
33
  <string>__HOME__/Library/Logs/brainlayer/drain.out.log</string>
@@ -30,7 +30,9 @@
30
30
  <key>BRAINLAYER_STALL_TIMEOUT</key>
31
31
  <string>300</string>
32
32
  <key>BRAINLAYER_ENRICHMENT_QUEUE_WRITES</key>
33
- <string>0</string>
33
+ <string>1</string>
34
+ <key>BRAINLAYER_ENRICH_IDLE_BACKLOG</key>
35
+ <string>1</string>
34
36
  <key>BRAINLAYER_ENV_FILE</key>
35
37
  <string>__BRAINLAYER_ENV_FILE__</string>
36
38
  <key>BRAINLAYER_REQUIRE_GOOGLE_API_KEY</key>
@@ -0,0 +1,74 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>Label</key>
6
+ <string>com.brainlayer.hotlane-brainbar</string>
7
+ <key>ProgramArguments</key>
8
+ <array>
9
+ <string>__BRAINLAYER_ENV_RUN__</string>
10
+ <string>__BRAINLAYER_PYTHON__</string>
11
+ <string>__BRAINLAYER_DIR__/scripts/hotlane_brainbar_daemon.py</string>
12
+ <string>--interval</string>
13
+ <string>1.0</string>
14
+ <string>--recent-limit</string>
15
+ <string>5</string>
16
+ <string>--backlog-interval</string>
17
+ <string>10.0</string>
18
+ <string>--backlog-batch</string>
19
+ <string>4</string>
20
+ <string>--enrich-interval</string>
21
+ <string>10.0</string>
22
+ <string>--enrich-limit</string>
23
+ <string>5</string>
24
+ <string>--enrich-since-hours</string>
25
+ <string>87600</string>
26
+ </array>
27
+ <key>WorkingDirectory</key>
28
+ <string>__BRAINLAYER_DIR__</string>
29
+ <key>KeepAlive</key>
30
+ <true/>
31
+ <key>StandardOutPath</key>
32
+ <string>__HOME__/Library/Logs/brainlayer/hotlane-brainbar.out.log</string>
33
+ <key>StandardErrorPath</key>
34
+ <string>__HOME__/Library/Logs/brainlayer/hotlane-brainbar.err.log</string>
35
+ <key>EnvironmentVariables</key>
36
+ <dict>
37
+ <key>PATH</key>
38
+ <string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:__HOME__/.local/bin</string>
39
+ <key>PYTHONUNBUFFERED</key>
40
+ <string>1</string>
41
+ <key>BRAINLAYER_ENV_FILE</key>
42
+ <string>__BRAINLAYER_ENV_FILE__</string>
43
+ <key>BRAINLAYER_REQUIRE_GOOGLE_API_KEY</key>
44
+ <string>1</string>
45
+ <key>BRAINLAYER_REPO_ROOT</key>
46
+ <string>__BRAINLAYER_DIR__</string>
47
+ <key>BRAINLAYER_GEMINI_SERVICE_TIER</key>
48
+ <string>flex</string>
49
+ <key>BRAINLAYER_ENRICH_CONCURRENCY</key>
50
+ <string>4</string>
51
+ <key>BRAINLAYER_ENRICH_RATE</key>
52
+ <string>15</string>
53
+ <key>BRAINLAYER_LAUNCHD_SERVICE</key>
54
+ <string>hotlane-brainbar</string>
55
+ </dict>
56
+ <key>RunAtLoad</key>
57
+ <true/>
58
+ <key>ThrottleInterval</key>
59
+ <integer>5</integer>
60
+ <key>Nice</key>
61
+ <integer>10</integer>
62
+ <key>ProcessType</key>
63
+ <string>Background</string>
64
+ <key>ExitTimeOut</key>
65
+ <integer>30</integer>
66
+ <key>LowPriorityIO</key>
67
+ <true/>
68
+ <key>SoftResourceLimits</key>
69
+ <dict>
70
+ <key>NumberOfFiles</key>
71
+ <integer>4096</integer>
72
+ </dict>
73
+ </dict>
74
+ </plist>
@@ -16,6 +16,7 @@
16
16
  # ./scripts/launchd/install.sh jsonl-backup # Install daily JSONL backup only
17
17
  # ./scripts/launchd/install.sh maintenance # Install recurring maintenance jobs
18
18
  # ./scripts/launchd/install.sh health-check # Install stability health check only
19
+ # ./scripts/launchd/install.sh hotlane # Install BrainBar hotlane embed/enrich daemon only
19
20
  # ./scripts/launchd/install.sh remove # Unload and remove all
20
21
  set -euo pipefail
21
22
 
@@ -255,6 +256,10 @@ case "${1:-all}" in
255
256
  health-check)
256
257
  install_plist health-check
257
258
  ;;
259
+ hotlane|hotlane-brainbar)
260
+ verify_gemini_env_file
261
+ install_plist hotlane-brainbar
262
+ ;;
258
263
  all)
259
264
  install_env_runner
260
265
  verify_config_file
@@ -262,6 +267,7 @@ case "${1:-all}" in
262
267
  install_plist index
263
268
  install_plist drain
264
269
  install_plist watch
270
+ install_plist hotlane-brainbar
265
271
  install_plist enrichment
266
272
  install_plist decay
267
273
  install_plist wal-checkpoint
@@ -290,11 +296,12 @@ case "${1:-all}" in
290
296
  remove_plist maintenance-nightly 2>/dev/null || true
291
297
  remove_plist maintenance-weekly 2>/dev/null || true
292
298
  remove_plist health-check 2>/dev/null || true
299
+ remove_plist hotlane-brainbar 2>/dev/null || true
293
300
  rm -f "$BRAINLAYER_LIB_DIR/backup-daily.sh"
294
301
  rm -f "$BRAINLAYER_LIB_DIR/jsonl-backup.sh"
295
302
  ;;
296
303
  *)
297
- echo "Usage: $0 [index|watch|enrich|enrichment|decay|drain|repair-fts|load [name]|unload [name]|checkpoint|backup|jsonl-backup|maintenance|maintenance-nightly|maintenance-weekly|health-check|all|remove]"
304
+ echo "Usage: $0 [index|watch|enrich|enrichment|decay|drain|hotlane|repair-fts|load [name]|unload [name]|checkpoint|backup|jsonl-backup|maintenance|maintenance-nightly|maintenance-weekly|health-check|all|remove]"
298
305
  exit 1
299
306
  ;;
300
307
  esac