core-runtime 0.1.1__py3-none-any.whl

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 (962) hide show
  1. api/__init__.py +4 -0
  2. api/cli/__init__.py +10 -0
  3. api/cli/audit_client.py +92 -0
  4. api/cli/census_client.py +77 -0
  5. api/cli/client.py +508 -0
  6. api/cli/coverage_client.py +121 -0
  7. api/cli/daemon_client.py +42 -0
  8. api/cli/fix_client.py +101 -0
  9. api/cli/inspect_client.py +143 -0
  10. api/cli/integration_client.py +42 -0
  11. api/cli/integrity_client.py +45 -0
  12. api/cli/proposals_client.py +101 -0
  13. api/cli/quality_client.py +83 -0
  14. api/cli/refactor_client.py +82 -0
  15. api/cli/sync_client.py +106 -0
  16. api/dependencies.py +37 -0
  17. api/errors.py +74 -0
  18. api/main.py +88 -0
  19. api/v1/__init__.py +4 -0
  20. api/v1/audit_routes.py +302 -0
  21. api/v1/census_routes.py +207 -0
  22. api/v1/coverage_routes.py +352 -0
  23. api/v1/daemon_routes.py +86 -0
  24. api/v1/development_routes.py +70 -0
  25. api/v1/fix_routes.py +428 -0
  26. api/v1/inspect_routes.py +220 -0
  27. api/v1/integration_routes.py +56 -0
  28. api/v1/integrity_routes.py +72 -0
  29. api/v1/knowledge_routes.py +36 -0
  30. api/v1/lint_routes.py +40 -0
  31. api/v1/proposals_routes.py +267 -0
  32. api/v1/quality_routes.py +272 -0
  33. api/v1/refactor_routes.py +225 -0
  34. api/v1/sync_routes.py +261 -0
  35. body/__init__.py +4 -0
  36. body/analyzers/__init__.py +25 -0
  37. body/analyzers/base_analyzer.py +28 -0
  38. body/analyzers/constitutional_path_analyzer.py +63 -0
  39. body/analyzers/file_analyzer.py +211 -0
  40. body/analyzers/knowledge_graph_analyzer.py +86 -0
  41. body/analyzers/prompt_analyzer.py +155 -0
  42. body/analyzers/symbol_extractor.py +280 -0
  43. body/atomic/__init__.py +74 -0
  44. body/atomic/build_tests_action.py +354 -0
  45. body/atomic/check_actions.py +142 -0
  46. body/atomic/crate_ops.py +59 -0
  47. body/atomic/executor.py +470 -0
  48. body/atomic/file_ops.py +153 -0
  49. body/atomic/fix_actions.py +1142 -0
  50. body/atomic/import_resolver.py +200 -0
  51. body/atomic/metadata_ops.py +161 -0
  52. body/atomic/modularity_fix.py +839 -0
  53. body/atomic/modularity_splitter.py +521 -0
  54. body/atomic/proposal_lifecycle_actions.py +171 -0
  55. body/atomic/registry.py +326 -0
  56. body/atomic/remediate_cognitive_role.py +104 -0
  57. body/atomic/sandbox_lifecycle.py +252 -0
  58. body/atomic/split_plan.py +155 -0
  59. body/atomic/sync_actions/__init__.py +22 -0
  60. body/atomic/sync_actions/chunking_helpers.py +218 -0
  61. body/atomic/sync_actions/sync_actions.py +431 -0
  62. body/atomic/test_actions.py +47 -0
  63. body/autonomy/__init__.py +16 -0
  64. body/autonomy/audit_analyzer.py +343 -0
  65. body/autonomy/micro_proposal_executor.py +316 -0
  66. body/crate_processing/canary_executor.py +144 -0
  67. body/evaluators/__init__.py +27 -0
  68. body/evaluators/atomic_actions_evaluator.py +162 -0
  69. body/evaluators/atomic_actions_format.py +45 -0
  70. body/evaluators/atomic_actions_rules.py +278 -0
  71. body/evaluators/base_evaluator.py +67 -0
  72. body/evaluators/clarity_evaluator.py +83 -0
  73. body/evaluators/constitutional_evaluator.py +227 -0
  74. body/evaluators/failure_evaluator.py +136 -0
  75. body/evaluators/performance_evaluator.py +341 -0
  76. body/evaluators/security_evaluator.py +393 -0
  77. body/flows/__init__.py +33 -0
  78. body/flows/executor.py +275 -0
  79. body/flows/registry.py +272 -0
  80. body/flows/result.py +113 -0
  81. body/governance/__init__.py +29 -0
  82. body/governance/body_contracts_service.py +317 -0
  83. body/governance/code_validator.py +118 -0
  84. body/governance/engine_dispatcher.py +128 -0
  85. body/governance/intent_guard.py +592 -0
  86. body/governance/intent_pattern_validators.py +197 -0
  87. body/governance/key_management_service.py +100 -0
  88. body/governance/path_validator.py +187 -0
  89. body/governance/remediation_service.py +263 -0
  90. body/governance/runtime_validator.py +184 -0
  91. body/infrastructure/bootstrap.py +135 -0
  92. body/infrastructure/lifespan.py +85 -0
  93. body/infrastructure/repositories/__init__.py +1 -0
  94. body/infrastructure/repositories/decision_trace_repository.py +210 -0
  95. body/infrastructure/repositories/refusal_repository.py +294 -0
  96. body/introspection/__init__.py +4 -0
  97. body/introspection/capability_discovery_service.py +107 -0
  98. body/introspection/discovery/from_kgb.py +33 -0
  99. body/introspection/discovery/from_source_scan.py +40 -0
  100. body/introspection/discovery/loader.py +62 -0
  101. body/introspection/discovery/registry.py +22 -0
  102. body/introspection/discovery/semantics.py +21 -0
  103. body/introspection/discovery/sync.py +47 -0
  104. body/introspection/drift_detector.py +81 -0
  105. body/introspection/drift_service.py +48 -0
  106. body/introspection/export_vectors.py +133 -0
  107. body/introspection/generate_capability_docs.py +130 -0
  108. body/introspection/generate_correction_map.py +98 -0
  109. body/introspection/graph_analysis_service.py +66 -0
  110. body/introspection/knowledge_graph_service.py +170 -0
  111. body/introspection/semantic_clusterer.py +128 -0
  112. body/introspection/symbol_index_builder.py +244 -0
  113. body/introspection/sync/engine.py +92 -0
  114. body/introspection/sync/scanner.py +56 -0
  115. body/introspection/sync/visitor.py +83 -0
  116. body/introspection/sync_service.py +62 -0
  117. body/invokers/__init__.py +4 -0
  118. body/invokers/capability_invoker.py +4 -0
  119. body/maintenance/command_sync_service.py +73 -0
  120. body/maintenance/dotenv_sync_service.py +99 -0
  121. body/maintenance/idempotency_harness.py +70 -0
  122. body/maintenance/maintenance_service.py +123 -0
  123. body/maintenance/memory_cleanup_service.py +131 -0
  124. body/maintenance/refactor_settings_access.py +274 -0
  125. body/maintenance/scripts/__init__.py +5 -0
  126. body/maintenance/scripts/context_export.py +278 -0
  127. body/maintenance/scripts/vector_verify.py +73 -0
  128. body/maintenance/sync_vectors.py +338 -0
  129. body/models/__init__.py +4 -0
  130. body/project_lifecycle/__init__.py +4 -0
  131. body/project_lifecycle/bootstrap_service.py +157 -0
  132. body/project_lifecycle/definition_service.py +264 -0
  133. body/project_lifecycle/integration_service.py +113 -0
  134. body/project_lifecycle/scaffolding_service.py +187 -0
  135. body/quality/coverage_analyzer.py +177 -0
  136. body/repositories/__init__.py +4 -0
  137. body/self_healing/atomic_actions_fixer.py +113 -0
  138. body/self_healing/body_ui_fixer.py +193 -0
  139. body/self_healing/capability_parser.py +65 -0
  140. body/self_healing/code_style_service.py +51 -0
  141. body/self_healing/complexity_filter.py +70 -0
  142. body/self_healing/docstring_service.py +345 -0
  143. body/self_healing/duplicate_id_service.py +407 -0
  144. body/self_healing/duplicates_service.py +165 -0
  145. body/self_healing/handlers/__init__.py +1 -0
  146. body/self_healing/handlers/id_assignment_handler.py +201 -0
  147. body/self_healing/handlers/import_sorting_handler.py +181 -0
  148. body/self_healing/header_service.py +308 -0
  149. body/self_healing/id_tagging_service.py +227 -0
  150. body/self_healing/knowledge_consolidation_service.py +80 -0
  151. body/self_healing/logging_service.py +292 -0
  152. body/self_healing/owner_tagging_service.py +5 -0
  153. body/self_healing/placeholder_fixer_service.py +27 -0
  154. body/self_healing/prune_private_capabilities.py +144 -0
  155. body/self_healing/purge_legacy_tags_service.py +146 -0
  156. body/self_healing/remediation_models.py +238 -0
  157. body/self_healing/test_context/__init__.py +10 -0
  158. body/self_healing/test_context/detectors.py +74 -0
  159. body/self_healing/test_context/examples.py +53 -0
  160. body/self_healing/test_context/formatter.py +65 -0
  161. body/self_healing/test_context/metrics.py +62 -0
  162. body/self_healing/test_context/models.py +83 -0
  163. body/self_healing/test_context/parsers.py +70 -0
  164. body/self_healing/test_context_analyzer.py +79 -0
  165. body/self_healing/test_failure_analyzer.py +259 -0
  166. body/self_healing/test_target_analyzer.py +118 -0
  167. body/self_healing/vulture_healer.py +161 -0
  168. body/services/__init__.py +4 -0
  169. body/services/artifact_service.py +155 -0
  170. body/services/blackboard_service/__init__.py +22 -0
  171. body/services/blackboard_service/blackboard_claim_service.py +216 -0
  172. body/services/blackboard_service/blackboard_proposal_service.py +305 -0
  173. body/services/blackboard_service/blackboard_query_service.py +333 -0
  174. body/services/blackboard_service/blackboard_service.py +602 -0
  175. body/services/capabilities.py +51 -0
  176. body/services/cim/__init__.py +22 -0
  177. body/services/cim/baselines.py +102 -0
  178. body/services/cim/census_service.py +190 -0
  179. body/services/cim/cim_constants.py +116 -0
  180. body/services/cim/cim_path_utils.py +123 -0
  181. body/services/cim/diff.py +152 -0
  182. body/services/cim/history.py +94 -0
  183. body/services/cim/models.py +319 -0
  184. body/services/cim/policy.py +149 -0
  185. body/services/cim/scanners.py +332 -0
  186. body/services/coherence_service.py +552 -0
  187. body/services/consequence_log_service.py +189 -0
  188. body/services/constitutional_rule_loader.py +141 -0
  189. body/services/constitutional_validator.py +366 -0
  190. body/services/crate_creation_service.py +217 -0
  191. body/services/crate_processing_service.py +279 -0
  192. body/services/crawl_service/__init__.py +10 -0
  193. body/services/crawl_service/main_module.py +531 -0
  194. body/services/crawl_service/orchestrator.py +452 -0
  195. body/services/crawl_service/symbol_processing.py +279 -0
  196. body/services/database_service.py +242 -0
  197. body/services/doc_service.py +57 -0
  198. body/services/file_service.py +260 -0
  199. body/services/governance_claims_service.py +240 -0
  200. body/services/governance_init.py +41 -0
  201. body/services/health_log_service.py +167 -0
  202. body/services/intent_schema_validator.py +211 -0
  203. body/services/llm_client.py +87 -0
  204. body/services/mind_state_service.py +129 -0
  205. body/services/policy_expression_evaluator.py +154 -0
  206. body/services/proposal_supervision_service.py +187 -0
  207. body/services/representation_coherence_service.py +209 -0
  208. body/services/service_registry.py +431 -0
  209. body/services/session_attached_service.py +51 -0
  210. body/services/symbol_query_service.py +218 -0
  211. body/services/symbol_service.py +94 -0
  212. body/services/validation/__init__.py +14 -0
  213. body/services/validation/python_validator.py +89 -0
  214. body/services/validation/validation_policies.py +121 -0
  215. body/services/worker_registry_service.py +184 -0
  216. body/validators/__init__.py +1 -0
  217. body/validators/logic_conservation_validator.py +201 -0
  218. body/workers/call_site_rewriter.py +527 -0
  219. body/workers/prompt_artifact_writer.py +323 -0
  220. cli/__init__.py +4 -0
  221. cli/admin_cli.py +98 -0
  222. cli/cli_user.py +121 -0
  223. cli/commands/__init__.py +4 -0
  224. cli/commands/audit_reporter.py +272 -0
  225. cli/commands/check/__init__.py +115 -0
  226. cli/commands/check/audit.py +130 -0
  227. cli/commands/check/converters.py +129 -0
  228. cli/commands/check/diagnostics_commands.py +70 -0
  229. cli/commands/check/formatters.py +310 -0
  230. cli/commands/check/imports.py +73 -0
  231. cli/commands/check/quality.py +71 -0
  232. cli/commands/check/quality_gates.py +107 -0
  233. cli/commands/check/rule.py +136 -0
  234. cli/commands/check/utils.py +28 -0
  235. cli/commands/check_atomic_actions.py +167 -0
  236. cli/commands/components.py +66 -0
  237. cli/commands/coverage/__init__.py +22 -0
  238. cli/commands/coverage/analysis_commands.py +87 -0
  239. cli/commands/coverage/check_commands.py +173 -0
  240. cli/commands/coverage/generation_commands.py +155 -0
  241. cli/commands/coverage/services/__init__.py +15 -0
  242. cli/commands/coverage/services/coverage_checker.py +50 -0
  243. cli/commands/coverage/services/coverage_reporter.py +81 -0
  244. cli/commands/coverage/services/gaps_analyzer.py +114 -0
  245. cli/commands/daemon.py +908 -0
  246. cli/commands/develop.py +127 -0
  247. cli/commands/diagnostics.py +32 -0
  248. cli/commands/fix/__init__.py +84 -0
  249. cli/commands/fix/all_commands.py +94 -0
  250. cli/commands/fix/atomic_actions.py +48 -0
  251. cli/commands/fix/audit.py +146 -0
  252. cli/commands/fix/body_ui.py +93 -0
  253. cli/commands/fix/code_style.py +52 -0
  254. cli/commands/fix/db_tools.py +90 -0
  255. cli/commands/fix/fix_ir.py +79 -0
  256. cli/commands/fix/handler_discovery.py +54 -0
  257. cli/commands/fix/imports.py +55 -0
  258. cli/commands/fix/list_commands.py +54 -0
  259. cli/commands/fix/metadata.py +160 -0
  260. cli/commands/fix/modularity.py +88 -0
  261. cli/commands/fix/settings_access.py +65 -0
  262. cli/commands/fix_governed.py +103 -0
  263. cli/commands/fix_logging.py +24 -0
  264. cli/commands/governance.py +294 -0
  265. cli/commands/guard.py +125 -0
  266. cli/commands/inspect/__init__.py +79 -0
  267. cli/commands/inspect/_helpers.py +226 -0
  268. cli/commands/inspect/analysis.py +158 -0
  269. cli/commands/inspect/decisions.py +140 -0
  270. cli/commands/inspect/diagnostics.py +126 -0
  271. cli/commands/inspect/drift.py +100 -0
  272. cli/commands/inspect/patterns.py +102 -0
  273. cli/commands/inspect/refusals.py +211 -0
  274. cli/commands/inspect/repo_census.py +175 -0
  275. cli/commands/inspect/status.py +48 -0
  276. cli/commands/interactive_test.py +85 -0
  277. cli/commands/mind.py +49 -0
  278. cli/commands/refactor.py +234 -0
  279. cli/commands/refactor_support/__init__.py +7 -0
  280. cli/commands/refactor_support/analyzer.py +107 -0
  281. cli/commands/refactor_support/config.py +67 -0
  282. cli/commands/refactor_support/display.py +170 -0
  283. cli/commands/refactor_support/recommendations.py +55 -0
  284. cli/commands/run.py +60 -0
  285. cli/commands/search.py +103 -0
  286. cli/commands/status.py +86 -0
  287. cli/commands/submit.py +23 -0
  288. cli/interactive.py +177 -0
  289. cli/logic/__init__.py +7 -0
  290. cli/logic/agent.py +110 -0
  291. cli/logic/audit_capability_domains.py +106 -0
  292. cli/logic/audit_renderer.py +150 -0
  293. cli/logic/autonomy/actions.py +36 -0
  294. cli/logic/autonomy/views.py +116 -0
  295. cli/logic/body_contracts_checker.py +23 -0
  296. cli/logic/build.py +27 -0
  297. cli/logic/byor.py +148 -0
  298. cli/logic/capability.py +27 -0
  299. cli/logic/cli_utils.py +210 -0
  300. cli/logic/context.py +7 -0
  301. cli/logic/db.py +154 -0
  302. cli/logic/db_manage.py +22 -0
  303. cli/logic/decision_inspect_logic.py +62 -0
  304. cli/logic/diagnostics.py +148 -0
  305. cli/logic/diagnostics_policy.py +100 -0
  306. cli/logic/diagnostics_registry.py +165 -0
  307. cli/logic/duplicates.py +19 -0
  308. cli/logic/embeddings_cli.py +43 -0
  309. cli/logic/governance/__init__.py +16 -0
  310. cli/logic/governance/engine.py +216 -0
  311. cli/logic/governance/forensics_service.py +67 -0
  312. cli/logic/governance/limb_status_service.py +83 -0
  313. cli/logic/governance/renderer.py +115 -0
  314. cli/logic/governance/traceability_service.py +78 -0
  315. cli/logic/governance_logic.py +33 -0
  316. cli/logic/hub/__init__.py +14 -0
  317. cli/logic/hub/app.py +107 -0
  318. cli/logic/hub/formatter.py +29 -0
  319. cli/logic/hub/introspection.py +20 -0
  320. cli/logic/hub/repository.py +17 -0
  321. cli/logic/init.py +22 -0
  322. cli/logic/interactive_test/__init__.py +21 -0
  323. cli/logic/interactive_test/session.py +102 -0
  324. cli/logic/interactive_test/steps/__init__.py +23 -0
  325. cli/logic/interactive_test/steps/execution.py +53 -0
  326. cli/logic/interactive_test/steps/generation.py +88 -0
  327. cli/logic/interactive_test/steps/healing.py +79 -0
  328. cli/logic/interactive_test/steps/utils.py +31 -0
  329. cli/logic/interactive_test/steps/verification.py +71 -0
  330. cli/logic/interactive_test/ui.py +203 -0
  331. cli/logic/interactive_test/workflow.py +168 -0
  332. cli/logic/interactive_test_logic.py +41 -0
  333. cli/logic/knowledge.py +47 -0
  334. cli/logic/legacy_scan_logic.py +306 -0
  335. cli/logic/list_audits.py +49 -0
  336. cli/logic/log_audit.py +53 -0
  337. cli/logic/new.py +8 -0
  338. cli/logic/project_docs.py +28 -0
  339. cli/logic/reconcile.py +127 -0
  340. cli/logic/refusal_inspect_logic.py +208 -0
  341. cli/logic/report.py +47 -0
  342. cli/logic/status.py +47 -0
  343. cli/logic/symbol_drift.py +77 -0
  344. cli/logic/sync.py +48 -0
  345. cli/logic/sync_domains.py +72 -0
  346. cli/logic/sync_manifest.py +31 -0
  347. cli/logic/tools.py +133 -0
  348. cli/logic/utils_migration.py +43 -0
  349. cli/logic/validate.py +107 -0
  350. cli/logic/vector_drift.py +109 -0
  351. cli/logic/yaml_processor.py +5 -0
  352. cli/renderers/audit_detail.py +37 -0
  353. cli/renderers/audit_overview.py +39 -0
  354. cli/resources/__init__.py +27 -0
  355. cli/resources/admin/__init__.py +23 -0
  356. cli/resources/admin/coverage.py +63 -0
  357. cli/resources/admin/debt_scan.py +195 -0
  358. cli/resources/admin/forensics.py +97 -0
  359. cli/resources/admin/health.py +66 -0
  360. cli/resources/admin/hub.py +9 -0
  361. cli/resources/admin/meta.py +47 -0
  362. cli/resources/admin/patterns.py +28 -0
  363. cli/resources/admin/refusals.py +31 -0
  364. cli/resources/admin/self_check.py +175 -0
  365. cli/resources/admin/status.py +66 -0
  366. cli/resources/admin/summary.py +67 -0
  367. cli/resources/admin/traces.py +46 -0
  368. cli/resources/admin/validate_env.py +56 -0
  369. cli/resources/code/__init__.py +31 -0
  370. cli/resources/code/actions.py +48 -0
  371. cli/resources/code/audit.py +416 -0
  372. cli/resources/code/audit_duplicates.py +22 -0
  373. cli/resources/code/check_imports.py +75 -0
  374. cli/resources/code/check_ui.py +62 -0
  375. cli/resources/code/clarity.py +51 -0
  376. cli/resources/code/complexity.py +55 -0
  377. cli/resources/code/docstrings.py +51 -0
  378. cli/resources/code/fix_atomic.py +51 -0
  379. cli/resources/code/format.py +62 -0
  380. cli/resources/code/hub.py +10 -0
  381. cli/resources/code/integrity.py +75 -0
  382. cli/resources/code/lint.py +37 -0
  383. cli/resources/code/logging.py +49 -0
  384. cli/resources/code/refactor.py +32 -0
  385. cli/resources/code/test.py +30 -0
  386. cli/resources/coherence/__init__.py +13 -0
  387. cli/resources/coherence/check.py +111 -0
  388. cli/resources/coherence/hub.py +13 -0
  389. cli/resources/coherence/repair_counts.py +73 -0
  390. cli/resources/coherence/report.py +144 -0
  391. cli/resources/coherence/seed.py +297 -0
  392. cli/resources/coherence/supersede.py +124 -0
  393. cli/resources/coherence/triage.py +81 -0
  394. cli/resources/constitution/__init__.py +19 -0
  395. cli/resources/constitution/audit.py +49 -0
  396. cli/resources/constitution/query.py +45 -0
  397. cli/resources/constitution/status.py +34 -0
  398. cli/resources/constitution/validate.py +36 -0
  399. cli/resources/context/__init__.py +21 -0
  400. cli/resources/context/build.py +374 -0
  401. cli/resources/context/cache.py +156 -0
  402. cli/resources/context/explain.py +140 -0
  403. cli/resources/context/hub.py +11 -0
  404. cli/resources/context/search.py +114 -0
  405. cli/resources/database/__init__.py +13 -0
  406. cli/resources/database/cleanup.py +107 -0
  407. cli/resources/database/export.py +61 -0
  408. cli/resources/database/hub.py +11 -0
  409. cli/resources/database/migrate.py +57 -0
  410. cli/resources/database/status.py +101 -0
  411. cli/resources/database/sync.py +84 -0
  412. cli/resources/database/sync_env.py +76 -0
  413. cli/resources/database/sync_registry.py +48 -0
  414. cli/resources/dev/__init__.py +14 -0
  415. cli/resources/dev/hub.py +11 -0
  416. cli/resources/dev/refactor.py +92 -0
  417. cli/resources/dev/stability.py +60 -0
  418. cli/resources/dev/strategic_audit.py +113 -0
  419. cli/resources/dev/sync.py +51 -0
  420. cli/resources/dev/test.py +34 -0
  421. cli/resources/intent/__init__.py +11 -0
  422. cli/resources/intent/hub.py +9 -0
  423. cli/resources/intent/sync_vocabulary.py +396 -0
  424. cli/resources/project/__init__.py +19 -0
  425. cli/resources/project/docs.py +41 -0
  426. cli/resources/project/new.py +40 -0
  427. cli/resources/project/onboard.py +31 -0
  428. cli/resources/proposals/__init__.py +28 -0
  429. cli/resources/proposals/create.py +82 -0
  430. cli/resources/proposals/integrate.py +49 -0
  431. cli/resources/proposals/list.py +76 -0
  432. cli/resources/proposals/manage.py +117 -0
  433. cli/resources/runtime/__init__.py +9 -0
  434. cli/resources/runtime/health.py +925 -0
  435. cli/resources/secrets/__init__.py +10 -0
  436. cli/resources/secrets/hub.py +9 -0
  437. cli/resources/secrets/manage.py +309 -0
  438. cli/resources/symbols/__init__.py +13 -0
  439. cli/resources/symbols/audit.py +46 -0
  440. cli/resources/symbols/fix_ids.py +43 -0
  441. cli/resources/symbols/hub.py +11 -0
  442. cli/resources/symbols/resolve_duplicates.py +30 -0
  443. cli/resources/symbols/sync.py +39 -0
  444. cli/resources/symbols/tag.py +47 -0
  445. cli/resources/vectors/__init__.py +11 -0
  446. cli/resources/vectors/cleanup.py +95 -0
  447. cli/resources/vectors/hub.py +9 -0
  448. cli/resources/vectors/query.py +105 -0
  449. cli/resources/vectors/status.py +30 -0
  450. cli/resources/vectors/sync.py +57 -0
  451. cli/resources/vectors/sync_code.py +67 -0
  452. cli/resources/workers/__init__.py +13 -0
  453. cli/resources/workers/blackboard.py +253 -0
  454. cli/resources/workers/remediate.py +337 -0
  455. cli/resources/workers/run.py +140 -0
  456. cli/utils/__init__.py +32 -0
  457. cli/utils/annotation_formatter.py +154 -0
  458. cli/utils/decorators.py +184 -0
  459. cli/utils/display.py +79 -0
  460. cli/utils/exit_codes.py +59 -0
  461. cli/utils/helpers.py +34 -0
  462. cli/utils/prompts.py +21 -0
  463. core_runtime-0.1.1.dist-info/LICENSE +21 -0
  464. core_runtime-0.1.1.dist-info/METADATA +346 -0
  465. core_runtime-0.1.1.dist-info/RECORD +962 -0
  466. core_runtime-0.1.1.dist-info/WHEEL +4 -0
  467. core_runtime-0.1.1.dist-info/entry_points.txt +4 -0
  468. mind/__init__.py +4 -0
  469. mind/coherence/__init__.py +1 -0
  470. mind/coherence/checker.py +314 -0
  471. mind/coherence/checks/__init__.py +4 -0
  472. mind/coherence/checks/base.py +34 -0
  473. mind/coherence/checks/r1_scoped.py +228 -0
  474. mind/coherence/checks/row2_grounding.py +69 -0
  475. mind/coherence/checks/row3_citation.py +119 -0
  476. mind/coherence/checks/row4_naming.py +126 -0
  477. mind/coherence/checks/sameconcern.py +136 -0
  478. mind/coherence/checks/specgap.py +233 -0
  479. mind/coherence/checks/vocabulary.py +112 -0
  480. mind/coherence/llm_judge.py +207 -0
  481. mind/enforcement/audit.py +78 -0
  482. mind/governance/__init__.py +22 -0
  483. mind/governance/assumption_extractor.py +326 -0
  484. mind/governance/audit_context.py +520 -0
  485. mind/governance/audit_postprocessor.py +36 -0
  486. mind/governance/audit_report_writer.py +46 -0
  487. mind/governance/audit_types.py +98 -0
  488. mind/governance/auditor.py +179 -0
  489. mind/governance/authority_package_builder.py +502 -0
  490. mind/governance/constitutional_auditor_dynamic.py +362 -0
  491. mind/governance/enforcement/__init__.py +24 -0
  492. mind/governance/enforcement_loader.py +245 -0
  493. mind/governance/enforcement_methods.py +28 -0
  494. mind/governance/entry_point_policy.py +62 -0
  495. mind/governance/executable_rule.py +127 -0
  496. mind/governance/filtered_audit.py +272 -0
  497. mind/governance/finding_processor.py +76 -0
  498. mind/governance/meta_validator.py +259 -0
  499. mind/governance/micro_proposal_validator.py +169 -0
  500. mind/governance/policy_coverage_service.py +183 -0
  501. mind/governance/policy_rule.py +94 -0
  502. mind/governance/rule_conflict_detector.py +127 -0
  503. mind/governance/rule_executor.py +306 -0
  504. mind/governance/rule_extractor.py +376 -0
  505. mind/governance/stateless_audit.py +206 -0
  506. mind/governance/violation_report.py +136 -0
  507. mind/logic/engines/_knowledge_gate_duplication.py +117 -0
  508. mind/logic/engines/action_gate.py +76 -0
  509. mind/logic/engines/artifact_gate.py +1168 -0
  510. mind/logic/engines/ast_gate/__init__.py +9 -0
  511. mind/logic/engines/ast_gate/base.py +263 -0
  512. mind/logic/engines/ast_gate/checks/__init__.py +35 -0
  513. mind/logic/engines/ast_gate/checks/async_checks.py +276 -0
  514. mind/logic/engines/ast_gate/checks/capability_checks.py +197 -0
  515. mind/logic/engines/ast_gate/checks/conservation_checks.py +126 -0
  516. mind/logic/engines/ast_gate/checks/generic_checks.py +244 -0
  517. mind/logic/engines/ast_gate/checks/import_checks.py +164 -0
  518. mind/logic/engines/ast_gate/checks/knowledge_source_check.py +88 -0
  519. mind/logic/engines/ast_gate/checks/logging_checks.py +133 -0
  520. mind/logic/engines/ast_gate/checks/metadata_checks.py +242 -0
  521. mind/logic/engines/ast_gate/checks/modularity_checks.py +436 -0
  522. mind/logic/engines/ast_gate/checks/naming_checks.py +120 -0
  523. mind/logic/engines/ast_gate/checks/prompt_model_checks.py +83 -0
  524. mind/logic/engines/ast_gate/checks/protected_namespace_access_check.py +298 -0
  525. mind/logic/engines/ast_gate/checks/purity_checks.py +421 -0
  526. mind/logic/engines/ast_gate/checks/purity_enforcement_check.py +56 -0
  527. mind/logic/engines/ast_gate/checks/runtime_import_boundary.py +198 -0
  528. mind/logic/engines/ast_gate/checks/schema_conformance_checks.py +130 -0
  529. mind/logic/engines/ast_gate/engine.py +317 -0
  530. mind/logic/engines/ast_gate.py +19 -0
  531. mind/logic/engines/base.py +106 -0
  532. mind/logic/engines/cli_gate/__init__.py +25 -0
  533. mind/logic/engines/cli_gate/base_check.py +45 -0
  534. mind/logic/engines/cli_gate/checks/__init__.py +31 -0
  535. mind/logic/engines/cli_gate/checks/async_execution.py +65 -0
  536. mind/logic/engines/cli_gate/checks/dangerous_explicit.py +60 -0
  537. mind/logic/engines/cli_gate/checks/discovery_strict.py +167 -0
  538. mind/logic/engines/cli_gate/checks/help_required.py +43 -0
  539. mind/logic/engines/cli_gate/checks/no_duplicates.py +57 -0
  540. mind/logic/engines/cli_gate/checks/no_layer_exposure.py +48 -0
  541. mind/logic/engines/cli_gate/checks/resource_first.py +58 -0
  542. mind/logic/engines/cli_gate/checks/standard_verbs.py +50 -0
  543. mind/logic/engines/cli_gate/engine.py +211 -0
  544. mind/logic/engines/glob_gate.py +214 -0
  545. mind/logic/engines/knowledge_gate.py +410 -0
  546. mind/logic/engines/llm_gate.py +407 -0
  547. mind/logic/engines/llm_gate_stub.py +67 -0
  548. mind/logic/engines/passive_gate.py +45 -0
  549. mind/logic/engines/regex_gate.py +97 -0
  550. mind/logic/engines/registry.py +134 -0
  551. mind/logic/engines/runtime_gate.py +265 -0
  552. mind/logic/engines/taxonomy_gate.py +229 -0
  553. mind/logic/engines/workflow_gate/__init__.py +22 -0
  554. mind/logic/engines/workflow_gate/base_check.py +42 -0
  555. mind/logic/engines/workflow_gate/checks/__init__.py +32 -0
  556. mind/logic/engines/workflow_gate/checks/alignment.py +93 -0
  557. mind/logic/engines/workflow_gate/checks/audit.py +80 -0
  558. mind/logic/engines/workflow_gate/checks/canary.py +47 -0
  559. mind/logic/engines/workflow_gate/checks/coverage.py +74 -0
  560. mind/logic/engines/workflow_gate/checks/dead_code.py +53 -0
  561. mind/logic/engines/workflow_gate/checks/import_resolution.py +97 -0
  562. mind/logic/engines/workflow_gate/checks/linter.py +104 -0
  563. mind/logic/engines/workflow_gate/checks/quality.py +49 -0
  564. mind/logic/engines/workflow_gate/checks/ruff_format.py +99 -0
  565. mind/logic/engines/workflow_gate/checks/tests.py +81 -0
  566. mind/logic/engines/workflow_gate/engine.py +207 -0
  567. shared/__init__.py +32 -0
  568. shared/action_logger.py +61 -0
  569. shared/action_types.py +199 -0
  570. shared/activity_logging.py +149 -0
  571. shared/ai/constitutional_envelope.py +341 -0
  572. shared/ai/prompt_model.py +585 -0
  573. shared/ai/response_parser.py +191 -0
  574. shared/ast_utility.py +279 -0
  575. shared/atomic_action.py +117 -0
  576. shared/cli/__init__.py +6 -0
  577. shared/cli/app_introspection.py +134 -0
  578. shared/cli/command_meta.py +224 -0
  579. shared/cli_types.py +92 -0
  580. shared/component_primitive.py +216 -0
  581. shared/config.py +216 -0
  582. shared/config_loader.py +54 -0
  583. shared/context.py +113 -0
  584. shared/exceptions.py +100 -0
  585. shared/governance/__init__.py +9 -0
  586. shared/governance/coherence_harvester.py +258 -0
  587. shared/governance_token.py +77 -0
  588. shared/infrastructure/__init__.py +5 -0
  589. shared/infrastructure/adapters/__init__.py +5 -0
  590. shared/infrastructure/adapters/embedding_provider.py +66 -0
  591. shared/infrastructure/bootstrap_registry.py +57 -0
  592. shared/infrastructure/clients/__init__.py +5 -0
  593. shared/infrastructure/clients/qdrant_client.py +455 -0
  594. shared/infrastructure/config_service.py +382 -0
  595. shared/infrastructure/config_validator.py +70 -0
  596. shared/infrastructure/context/__init__.py +45 -0
  597. shared/infrastructure/context/builder.py +804 -0
  598. shared/infrastructure/context/cache.py +101 -0
  599. shared/infrastructure/context/database.py +205 -0
  600. shared/infrastructure/context/limb_workspace.py +134 -0
  601. shared/infrastructure/context/models.py +65 -0
  602. shared/infrastructure/context/providers/__init__.py +18 -0
  603. shared/infrastructure/context/providers/ast.py +211 -0
  604. shared/infrastructure/context/providers/db.py +165 -0
  605. shared/infrastructure/context/providers/vectors.py +195 -0
  606. shared/infrastructure/context/redactor.py +109 -0
  607. shared/infrastructure/context/serializers.py +144 -0
  608. shared/infrastructure/context/service.py +271 -0
  609. shared/infrastructure/context/validator.py +247 -0
  610. shared/infrastructure/database/models/__init__.py +80 -0
  611. shared/infrastructure/database/models/autonomous_proposals.py +83 -0
  612. shared/infrastructure/database/models/decision_traces.py +129 -0
  613. shared/infrastructure/database/models/governance.py +183 -0
  614. shared/infrastructure/database/models/knowledge.py +205 -0
  615. shared/infrastructure/database/models/learning.py +99 -0
  616. shared/infrastructure/database/models/llm_config.py +274 -0
  617. shared/infrastructure/database/models/operations.py +152 -0
  618. shared/infrastructure/database/models/refusals.py +147 -0
  619. shared/infrastructure/database/models/system.py +124 -0
  620. shared/infrastructure/database/models/vectors.py +113 -0
  621. shared/infrastructure/database/models/workers.py +96 -0
  622. shared/infrastructure/database/session_manager.py +166 -0
  623. shared/infrastructure/diagnostic_service.py +103 -0
  624. shared/infrastructure/events/__init__.py +5 -0
  625. shared/infrastructure/events/base.py +44 -0
  626. shared/infrastructure/events/bus.py +76 -0
  627. shared/infrastructure/git_service.py +385 -0
  628. shared/infrastructure/intent/action_risk.py +135 -0
  629. shared/infrastructure/intent/audit_verdict.py +131 -0
  630. shared/infrastructure/intent/autonomy_dirty_tree.py +104 -0
  631. shared/infrastructure/intent/canonical_enums.py +116 -0
  632. shared/infrastructure/intent/cognitive_roles.py +96 -0
  633. shared/infrastructure/intent/errors.py +13 -0
  634. shared/infrastructure/intent/filesystem_operations.py +359 -0
  635. shared/infrastructure/intent/intent_connector.py +157 -0
  636. shared/infrastructure/intent/intent_repository.py +707 -0
  637. shared/infrastructure/intent/intent_validator.py +248 -0
  638. shared/infrastructure/intent/operational_capabilities.py +470 -0
  639. shared/infrastructure/intent/operational_config.py +1343 -0
  640. shared/infrastructure/intent/operational_mode.py +66 -0
  641. shared/infrastructure/intent/task_type_phases.py +180 -0
  642. shared/infrastructure/intent/test_coverage_paths.py +181 -0
  643. shared/infrastructure/intent/vocabulary_projection.py +241 -0
  644. shared/infrastructure/knowledge/knowledge_service.py +155 -0
  645. shared/infrastructure/knowledge_graph_service.py +214 -0
  646. shared/infrastructure/llm/client.py +448 -0
  647. shared/infrastructure/llm/client_registry.py +153 -0
  648. shared/infrastructure/llm/fallback_client.py +144 -0
  649. shared/infrastructure/llm/providers/anthropic.py +113 -0
  650. shared/infrastructure/llm/providers/base.py +130 -0
  651. shared/infrastructure/llm/providers/ollama.py +265 -0
  652. shared/infrastructure/llm/providers/openai.py +168 -0
  653. shared/infrastructure/repositories/__init__.py +5 -0
  654. shared/infrastructure/repositories/db/__init__.py +5 -0
  655. shared/infrastructure/repositories/db/common.py +138 -0
  656. shared/infrastructure/repositories/db/engine.py +26 -0
  657. shared/infrastructure/repositories/db/migration_service.py +75 -0
  658. shared/infrastructure/repositories/db/status_service.py +61 -0
  659. shared/infrastructure/repositories/memory_repository.py +134 -0
  660. shared/infrastructure/repositories/symbol_definition_repository.py +170 -0
  661. shared/infrastructure/repositories/task_repository.py +59 -0
  662. shared/infrastructure/repositories/vector_link_repository.py +83 -0
  663. shared/infrastructure/rooted_repository.py +50 -0
  664. shared/infrastructure/secrets_service.py +317 -0
  665. shared/infrastructure/specs/__init__.py +9 -0
  666. shared/infrastructure/specs/specs_repository.py +100 -0
  667. shared/infrastructure/storage/file_classifier.py +32 -0
  668. shared/infrastructure/storage/file_handler.py +330 -0
  669. shared/infrastructure/storage/file_provider.py +233 -0
  670. shared/infrastructure/storage/integrity_service.py +108 -0
  671. shared/infrastructure/validation/black_formatter.py +41 -0
  672. shared/infrastructure/validation/quality.py +46 -0
  673. shared/infrastructure/validation/ruff_linter.py +104 -0
  674. shared/infrastructure/validation/syntax_checker.py +45 -0
  675. shared/infrastructure/validation/test_runner.py +167 -0
  676. shared/infrastructure/validation/yaml_validator.py +45 -0
  677. shared/infrastructure/vector/__init__.py +15 -0
  678. shared/infrastructure/vector/adapters/__init__.py +20 -0
  679. shared/infrastructure/vector/adapters/constitutional/__init__.py +26 -0
  680. shared/infrastructure/vector/adapters/constitutional/chunker.py +246 -0
  681. shared/infrastructure/vector/adapters/constitutional/doc_key_resolver.py +109 -0
  682. shared/infrastructure/vector/adapters/constitutional/item_builder.py +158 -0
  683. shared/infrastructure/vector/adapters/constitutional/utils.py +39 -0
  684. shared/infrastructure/vector/adapters/constitutional_adapter.py +309 -0
  685. shared/infrastructure/vector/adapters/specs_adapter.py +171 -0
  686. shared/infrastructure/vector/cognitive_adapter.py +119 -0
  687. shared/infrastructure/vector/vector_index_service.py +230 -0
  688. shared/logger.py +195 -0
  689. shared/models/__init__.py +47 -0
  690. shared/models/action_result.py +77 -0
  691. shared/models/audit_models.py +106 -0
  692. shared/models/audit_rendering.py +30 -0
  693. shared/models/capability_models.py +22 -0
  694. shared/models/constitutional_validation.py +185 -0
  695. shared/models/drift_models.py +24 -0
  696. shared/models/embedding_payload.py +45 -0
  697. shared/models/execution_models.py +71 -0
  698. shared/models/pattern_graph.py +62 -0
  699. shared/models/prompt_model.py +244 -0
  700. shared/models/refusal_result.py +294 -0
  701. shared/models/remediation.py +35 -0
  702. shared/models/validation_result.py +34 -0
  703. shared/models/vector_models.py +62 -0
  704. shared/models/workflow_models.py +242 -0
  705. shared/path_resolver.py +408 -0
  706. shared/path_utils.py +60 -0
  707. shared/processors/base_processor.py +171 -0
  708. shared/processors/yaml_processor.py +72 -0
  709. shared/protocols/__init__.py +21 -0
  710. shared/protocols/brain_services.py +35 -0
  711. shared/protocols/cognitive.py +35 -0
  712. shared/protocols/executor.py +47 -0
  713. shared/protocols/interpreter.py +24 -0
  714. shared/protocols/knowledge.py +21 -0
  715. shared/protocols/llm.py +25 -0
  716. shared/protocols/typer_protocols.py +37 -0
  717. shared/time.py +18 -0
  718. shared/universal.py +43 -0
  719. shared/utils/__init__.py +81 -0
  720. shared/utils/audit_grouping.py +50 -0
  721. shared/utils/common_knowledge.py +82 -0
  722. shared/utils/domain_mapper.py +61 -0
  723. shared/utils/embedding_utils.py +182 -0
  724. shared/utils/glob_match.py +93 -0
  725. shared/utils/header_tools.py +177 -0
  726. shared/utils/parallel_processor.py +60 -0
  727. shared/utils/parsing.py +189 -0
  728. shared/utils/path_utils.py +268 -0
  729. shared/utils/subprocess_utils.py +87 -0
  730. shared/workers/__init__.py +19 -0
  731. shared/workers/base.py +533 -0
  732. shared/workers/declaration_validator.py +124 -0
  733. shared/workers/loop_hold_telemetry.py +210 -0
  734. shared/workers/schedule.py +123 -0
  735. will/__init__.py +4 -0
  736. will/agents/__init__.py +4 -0
  737. will/agents/base_planner.py +133 -0
  738. will/agents/code_generation/__init__.py +15 -0
  739. will/agents/code_generation/code_generator.py +247 -0
  740. will/agents/code_generation/context_formatters.py +99 -0
  741. will/agents/code_generation/correction_engine.py +157 -0
  742. will/agents/code_generation/extraction.py +165 -0
  743. will/agents/code_generation/pattern_validator.py +264 -0
  744. will/agents/code_generation/prompt_builders.py +209 -0
  745. will/agents/coder_agent.py +229 -0
  746. will/agents/coder_agent_refusal_handler.py +168 -0
  747. will/agents/cognitive_orchestrator.py +152 -0
  748. will/agents/conversational/__init__.py +13 -0
  749. will/agents/conversational/agent.py +271 -0
  750. will/agents/conversational/factory.py +72 -0
  751. will/agents/conversational/helpers.py +116 -0
  752. will/agents/execution_agent.py +294 -0
  753. will/agents/governance_mixin.py +132 -0
  754. will/agents/planner_agent.py +261 -0
  755. will/agents/resource_selector.py +228 -0
  756. will/agents/strategic_auditor/__init__.py +15 -0
  757. will/agents/strategic_auditor/agent.py +199 -0
  758. will/agents/strategic_auditor/context_gatherer.py +586 -0
  759. will/agents/strategic_auditor/effects.py +136 -0
  760. will/agents/strategic_auditor/models.py +61 -0
  761. will/agents/strategic_auditor/reasoning.py +169 -0
  762. will/agents/tagger_agent.py +294 -0
  763. will/agents/traced_agent_mixin.py +33 -0
  764. will/autonomy/__init__.py +20 -0
  765. will/autonomy/autonomous_developer.py +127 -0
  766. will/autonomy/proposal.py +585 -0
  767. will/autonomy/proposal_execution_pipeline.py +264 -0
  768. will/autonomy/proposal_executor.py +410 -0
  769. will/autonomy/proposal_mapper.py +187 -0
  770. will/autonomy/proposal_repository.py +118 -0
  771. will/autonomy/proposal_service.py +251 -0
  772. will/autonomy/proposal_state_manager.py +239 -0
  773. will/deciders/__init__.py +9 -0
  774. will/deciders/governance_decider.py +207 -0
  775. will/governance/__init__.py +13 -0
  776. will/governance/audit_remediation_runner.py +197 -0
  777. will/governance/audit_runner.py +368 -0
  778. will/governance/census_runner.py +278 -0
  779. will/governance/coverage_runner.py +489 -0
  780. will/governance/daemon_runner.py +164 -0
  781. will/governance/fix_runner.py +693 -0
  782. will/governance/inspect_runner.py +521 -0
  783. will/governance/integrity_runner.py +66 -0
  784. will/governance/lint_runner.py +93 -0
  785. will/governance/refactor_runner.py +372 -0
  786. will/governance/sync_runner.py +186 -0
  787. will/interpreters/__init__.py +44 -0
  788. will/interpreters/cli_args_interpreter.py +106 -0
  789. will/interpreters/natural_language_interpreter.py +276 -0
  790. will/interpreters/request_interpreter.py +126 -0
  791. will/lifecycle/__init__.py +12 -0
  792. will/lifecycle/integration_runner.py +54 -0
  793. will/maintenance/metadata_scribe_service.py +64 -0
  794. will/orchestration/__init__.py +4 -0
  795. will/orchestration/cognitive_service.py +185 -0
  796. will/orchestration/decision_tracer.py +257 -0
  797. will/orchestration/intent_alignment.py +59 -0
  798. will/orchestration/intent_guard.py +20 -0
  799. will/orchestration/phase_registry.py +92 -0
  800. will/orchestration/process_orchestrator.py +270 -0
  801. will/orchestration/prompt_pipeline.py +174 -0
  802. will/orchestration/remediation_orchestrator.py +292 -0
  803. will/orchestration/self_correction_engine.py +154 -0
  804. will/orchestration/validation_pipeline.py +45 -0
  805. will/orchestration/workflow_orchestrator.py +277 -0
  806. will/phases/__init__.py +24 -0
  807. will/phases/audit_phase.py +152 -0
  808. will/phases/canary/pytest_runner.py +156 -0
  809. will/phases/canary/result_builder.py +130 -0
  810. will/phases/canary/test_discovery.py +104 -0
  811. will/phases/canary_validation_phase.py +188 -0
  812. will/phases/code_generation/artifact_saver.py +175 -0
  813. will/phases/code_generation/code_sensor.py +117 -0
  814. will/phases/code_generation/file_path_extractor.py +53 -0
  815. will/phases/code_generation/work_directory_manager.py +83 -0
  816. will/phases/code_generation_phase.py +480 -0
  817. will/phases/execution_phase.py +179 -0
  818. will/phases/interpret_phase.py +266 -0
  819. will/phases/load_phase.py +102 -0
  820. will/phases/parse_phase.py +117 -0
  821. will/phases/planning_phase.py +182 -0
  822. will/phases/runtime_phase.py +112 -0
  823. will/phases/sandbox_validation_phase.py +130 -0
  824. will/phases/style_check_phase.py +209 -0
  825. will/phases/test_generation_phase.py +159 -0
  826. will/self_healing/alignment/persistence.py +53 -0
  827. will/self_healing/alignment/sandbox.py +51 -0
  828. will/self_healing/alignment/specialists.py +165 -0
  829. will/self_healing/alignment_orchestrator.py +140 -0
  830. will/self_healing/audit_remediation_service.py +199 -0
  831. will/self_healing/batch_remediation_service.py +280 -0
  832. will/self_healing/capability_reconciliation_service.py +96 -0
  833. will/self_healing/capability_tagging_service.py +224 -0
  834. will/self_healing/clarity_service.py +204 -0
  835. will/self_healing/complexity_service.py +260 -0
  836. will/self_healing/context_aware_test_generator.py +298 -0
  837. will/self_healing/coverage_remediation_service.py +97 -0
  838. will/self_healing/coverage_watcher.py +192 -0
  839. will/self_healing/enrichment_service.py +211 -0
  840. will/self_healing/linelength_service.py +168 -0
  841. will/self_healing/modularity_remediation_service.py +203 -0
  842. will/self_healing/remediation_evidence_writer.py +144 -0
  843. will/self_healing/remediation_executor.py +113 -0
  844. will/self_healing/remediation_interpretation/__init__.py +1 -0
  845. will/self_healing/remediation_interpretation/file_context_assembler.py +383 -0
  846. will/self_healing/remediation_interpretation/file_role_detector.py +599 -0
  847. will/self_healing/remediation_interpretation/finding_normalizer.py +221 -0
  848. will/self_healing/remediation_interpretation/models.py +198 -0
  849. will/self_healing/remediation_interpretation/reasoning_brief_builder.py +235 -0
  850. will/self_healing/remediation_interpretation/responsibility_extractor.py +421 -0
  851. will/self_healing/remediation_interpretation/service.py +202 -0
  852. will/self_healing/remediation_interpretation/strategy_catalog.py +252 -0
  853. will/self_healing/remediation_interpretation/strategy_selector.py +395 -0
  854. will/self_healing/remediation_pattern_matcher.py +126 -0
  855. will/self_healing/simple_test_generator.py +252 -0
  856. will/self_healing/single_file_remediation.py +137 -0
  857. will/self_healing/test_generation/automatic_repair.py +377 -0
  858. will/self_healing/test_generation/code_extractor.py +238 -0
  859. will/self_healing/test_generation/context_builder.py +140 -0
  860. will/self_healing/test_generation/executor.py +64 -0
  861. will/self_healing/test_generation/failure_parser.py +37 -0
  862. will/self_healing/test_generation/generation_workflow.py +140 -0
  863. will/self_healing/test_generation/generator.py +283 -0
  864. will/self_healing/test_generation/llm_correction.py +160 -0
  865. will/self_healing/test_generation/repair_workflow.py +128 -0
  866. will/self_healing/test_generation/single_test_fixer.py +77 -0
  867. will/self_healing/test_generation/test_extractor.py +50 -0
  868. will/self_healing/test_generation/test_scorer.py +53 -0
  869. will/self_healing/test_generation/test_validator.py +64 -0
  870. will/self_healing/test_generator.py +12 -0
  871. will/strategists/__init__.py +46 -0
  872. will/strategists/base_strategist.py +29 -0
  873. will/strategists/clarity_strategist.py +55 -0
  874. will/strategists/complexity_strategist.py +55 -0
  875. will/strategists/fix_strategist.py +467 -0
  876. will/strategists/sync_strategist.py +369 -0
  877. will/strategists/test_strategist.py +140 -0
  878. will/strategists/validation_strategist.py +315 -0
  879. will/test_generation/__init__.py +46 -0
  880. will/test_generation/adaptive_test_generator.py +123 -0
  881. will/test_generation/artifacts.py +102 -0
  882. will/test_generation/harness_detection.py +103 -0
  883. will/test_generation/helpers/__init__.py +14 -0
  884. will/test_generation/helpers/context_extractor.py +100 -0
  885. will/test_generation/helpers/test_executor.py +230 -0
  886. will/test_generation/llm_output.py +62 -0
  887. will/test_generation/models.py +25 -0
  888. will/test_generation/persistence.py +248 -0
  889. will/test_generation/phases/__init__.py +16 -0
  890. will/test_generation/phases/generation_phase.py +150 -0
  891. will/test_generation/phases/load_phase.py +53 -0
  892. will/test_generation/phases/parse_phase.py +50 -0
  893. will/test_generation/prompt_engine.py +123 -0
  894. will/test_generation/result_aggregator.py +73 -0
  895. will/test_generation/sandbox.py +203 -0
  896. will/test_generation/strategy_link.py +56 -0
  897. will/test_generation/test_extractor.py +140 -0
  898. will/test_generation/validation.py +89 -0
  899. will/tools/__init__.py +13 -0
  900. will/tools/anchor_builder.py +111 -0
  901. will/tools/anchor_search.py +73 -0
  902. will/tools/anchors/discovery.py +55 -0
  903. will/tools/anchors/storage.py +32 -0
  904. will/tools/architectural_context_builder.py +94 -0
  905. will/tools/cognitive_toolbox.py +47 -0
  906. will/tools/context/code_snippet_extractor.py +83 -0
  907. will/tools/context/embedding_search.py +76 -0
  908. will/tools/context/formatter.py +87 -0
  909. will/tools/context/models.py +38 -0
  910. will/tools/context/query_builder.py +42 -0
  911. will/tools/context/retriever.py +182 -0
  912. will/tools/context/standards.py +53 -0
  913. will/tools/file_navigator.py +180 -0
  914. will/tools/layers.py +31 -0
  915. will/tools/module_anchor_generator.py +137 -0
  916. will/tools/module_descriptor.py +154 -0
  917. will/tools/policy_vectorizer.py +184 -0
  918. will/tools/symbol_finder.py +188 -0
  919. will/tools/tool_generator.py +103 -0
  920. will/workers/audit_ingest_worker.py +207 -0
  921. will/workers/audit_violation_filter.py +108 -0
  922. will/workers/audit_violation_normalizer.py +108 -0
  923. will/workers/audit_violation_sensor.py +370 -0
  924. will/workers/blackboard_shop_manager.py +280 -0
  925. will/workers/capability_tagger.py +153 -0
  926. will/workers/circuit_breaker.py +335 -0
  927. will/workers/coherence_sensor.py +212 -0
  928. will/workers/commit_reachability_auditor.py +135 -0
  929. will/workers/db_sync_worker.py +96 -0
  930. will/workers/governance_embedding/__init__.py +9 -0
  931. will/workers/governance_embedding/governance_embedder_worker.py +189 -0
  932. will/workers/intent_inspector.py +599 -0
  933. will/workers/observer_worker.py +158 -0
  934. will/workers/prompt_extractor_worker.py +241 -0
  935. will/workers/proposal_consumer_effects.py +216 -0
  936. will/workers/proposal_consumer_revival.py +131 -0
  937. will/workers/proposal_consumer_worker.py +271 -0
  938. will/workers/proposal_pipeline_shop_manager.py +273 -0
  939. will/workers/repo_crawler.py +171 -0
  940. will/workers/repo_embedding/__init__.py +18 -0
  941. will/workers/repo_embedding/helpers.py +245 -0
  942. will/workers/repo_embedding/repo_embedder_workers.py +163 -0
  943. will/workers/test_coverage_sensor.py +208 -0
  944. will/workers/test_remediator/__init__.py +12 -0
  945. will/workers/test_remediator/_operations.py +295 -0
  946. will/workers/test_remediator/worker.py +187 -0
  947. will/workers/test_runner_sensor.py +430 -0
  948. will/workers/violation_executor.py +496 -0
  949. will/workers/violation_remediator.py +394 -0
  950. will/workers/violation_remediator_blackboard.py +225 -0
  951. will/workers/violation_remediator_body/__init__.py +12 -0
  952. will/workers/violation_remediator_body/blackboard.py +139 -0
  953. will/workers/violation_remediator_body/ceremony.py +154 -0
  954. will/workers/violation_remediator_body/context.py +70 -0
  955. will/workers/violation_remediator_body/llm.py +112 -0
  956. will/workers/violation_remediator_body/models.py +35 -0
  957. will/workers/violation_remediator_body/worker.py +518 -0
  958. will/workers/violation_remediator_proposal.py +328 -0
  959. will/workers/worker_shop_manager.py +244 -0
  960. will/workflows/__init__.py +23 -0
  961. will/workflows/dev_sync_reporter.py +274 -0
  962. will/workflows/dev_sync_workflow.py +118 -0
@@ -0,0 +1,43 @@
1
+ # src/cli/logic/utils_migration.py
2
+ """
3
+ Shared utilities for constitutional migration and domain rationalization.
4
+ This is the canonical location for logic used by migration-related tools.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import re
10
+ from pathlib import Path
11
+
12
+ from ruamel.yaml import YAML
13
+
14
+
15
+ yaml_handler = YAML()
16
+ yaml_handler.preserve_quotes = True
17
+ yaml_handler.indent(mapping=2, sequence=4, offset=2)
18
+
19
+
20
+ # ID: 64bb309f-1cf9-4480-afc4-78130e8357e2
21
+ def parse_migration_plan(plan_path: Path) -> dict[str, str]:
22
+ """Parses the markdown migration plan into a mapping dictionary."""
23
+ if not plan_path.exists():
24
+ raise FileNotFoundError(f"Migration plan not found at: {plan_path}")
25
+ content = plan_path.read_text(encoding="utf-8")
26
+ pattern = re.compile(r"\|\s*`([^`]+)`\s*\|\s*`([^`]+)`\s*\|")
27
+ matches = pattern.findall(content)
28
+ if not matches:
29
+ raise ValueError("No valid domain mappings found in the migration plan.")
30
+ return {old.strip(): new.strip() for old, new in matches}
31
+
32
+
33
+ # ID: 80131c72-c024-4823-8226-f63c5d8c4704
34
+ def replacer(match: re.Match, domain_map: dict, py_file: Path, repo_root: Path) -> str:
35
+ """Replacement function for re.subn to update capability tags."""
36
+ old_cap = match.group(1)
37
+ for old_domain, new_domain in domain_map.items():
38
+ if old_cap.startswith(old_domain):
39
+ new_cap = old_cap.replace(old_domain, new_domain, 1)
40
+ if old_cap != new_cap:
41
+ # FUTURE: Add logging if needed
42
+ pass
43
+ return match.group(0)
cli/logic/validate.py ADDED
@@ -0,0 +1,107 @@
1
+ # src/cli/logic/validate.py
2
+ """
3
+ CLI commands for validating constitutional and governance integrity.
4
+
5
+ CONSTITUTIONAL ALIGNMENT:
6
+ - Single Responsibility: CLI presentation and user interaction
7
+ - Delegates validation logic to services
8
+ - Thin adapter layer
9
+
10
+ Extracted responsibilities:
11
+ - Schema validation → IntentSchemaValidator
12
+ - Expression evaluation → PolicyExpressionEvaluator
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ from pathlib import Path
18
+
19
+ import typer
20
+
21
+ from body.services.intent_schema_validator import IntentSchemaValidator
22
+ from body.services.policy_expression_evaluator import (
23
+ PolicyExpressionEvaluator,
24
+ ReviewContext,
25
+ )
26
+ from shared.logger import getLogger
27
+
28
+
29
+ logger = getLogger(__name__)
30
+ validate_app = typer.Typer(help="Commands for validating constitutional integrity.")
31
+
32
+
33
+ # ---------------------------------------------------------------------------
34
+ # CLI command: validate .intent against JSON Schemas
35
+ # ---------------------------------------------------------------------------
36
+
37
+
38
+ @validate_app.command("intent-schema")
39
+ # ID: 3c97e5c8-ad67-4865-b636-0860ab74775b
40
+ def validate_intent_schema(
41
+ intent_path: Path = typer.Option(
42
+ Path(".intent"),
43
+ "--intent-path",
44
+ help="Path to the .intent directory (Mind root).",
45
+ ),
46
+ ) -> None:
47
+ """
48
+ Validate .intent YAML documents that declare `$schema` against their JSON Schemas.
49
+
50
+ Current behaviour (A2 migration-friendly):
51
+ - Walks `.intent/**` (excluding runtime/state folders).
52
+ - For each YAML/YML file:
53
+ * If it has a `$schema` field → validate against that JSON Schema.
54
+ * If it has no `$schema` field → report as [SKIP], but do NOT fail.
55
+
56
+ This allows gradual rollout of schema governance across the Mind.
57
+ """
58
+ logger.info("Running .intent JSON-schema validation via core-admin.")
59
+
60
+ # Use service for validation logic
61
+ validator = IntentSchemaValidator(intent_path.resolve())
62
+ results, skipped = validator.validate_all()
63
+
64
+ # CLI presentation logic
65
+ if not results:
66
+ typer.echo("No .intent YAML files with $schema found. Nothing to validate.")
67
+ if skipped:
68
+ _print_skipped(skipped)
69
+ return
70
+
71
+ # Print results
72
+ errors = []
73
+ for result in results:
74
+ if result.is_valid:
75
+ typer.echo(f"[OK] {result.yaml_path} ✓")
76
+ else:
77
+ errors.append(f"[FAIL] {result.yaml_path}: {result.error_message}")
78
+
79
+ # Handle failures
80
+ if errors:
81
+ typer.echo("\nSchema validation errors:", err=True)
82
+ typer.echo("\n".join(errors), err=True)
83
+ raise typer.Exit(code=1)
84
+
85
+ typer.echo("\nAll .intent documents with $schema validated successfully.")
86
+
87
+ if skipped:
88
+ _print_skipped(skipped)
89
+
90
+
91
+ def _print_skipped(skipped: list[str]) -> None:
92
+ """Print skipped files message."""
93
+ typer.echo("\nSkipped files (no $schema yet):")
94
+ for msg in skipped:
95
+ typer.echo(f" {msg}")
96
+
97
+
98
+ # ---------------------------------------------------------------------------
99
+ # Re-export for backward compatibility
100
+ # ---------------------------------------------------------------------------
101
+
102
+ # Export ReviewContext and evaluator for any code that imports from here
103
+ __all__ = [
104
+ "PolicyExpressionEvaluator",
105
+ "ReviewContext",
106
+ "validate_app",
107
+ ]
@@ -0,0 +1,109 @@
1
+ # src/cli/logic/vector_drift.py
2
+
3
+ """Provides functionality for the vector_drift module."""
4
+
5
+ from __future__ import annotations
6
+
7
+ import asyncio
8
+
9
+ from sqlalchemy import text
10
+
11
+ from shared.context import CoreContext
12
+ from shared.infrastructure.clients.qdrant_client import QdrantService
13
+ from shared.infrastructure.database.session_manager import get_session
14
+ from shared.logger import getLogger
15
+
16
+
17
+ logger = getLogger(__name__)
18
+
19
+
20
+ async def _fetch_postgres_vector_ids() -> set[str]:
21
+ """
22
+ Authoritative source of vector IDs is the link table:
23
+ core.symbol_vector_links(symbol_id UUID, vector_id TEXT, ...)
24
+ """
25
+ async with get_session() as session:
26
+ rows = await session.execute(
27
+ text("SELECT vector_id::text FROM core.symbol_vector_links")
28
+ )
29
+ return {r[0] for r in rows}
30
+
31
+
32
+ async def _fetch_qdrant_point_ids(qdrant_service: QdrantService) -> set[str]:
33
+ """
34
+ Fetch all point IDs from Qdrant without payloads/vectors.
35
+
36
+ PHASE 1 FIX: Uses scroll_all_points() service method instead of direct client access.
37
+ """
38
+ points = await qdrant_service.scroll_all_points(
39
+ with_payload=False, with_vectors=False
40
+ )
41
+ all_ids = {str(p.id) for p in points}
42
+ return all_ids
43
+
44
+
45
+ # ID: fc322479-d062-486a-b2cc-636cd2eb7a86
46
+ async def inspect_vector_drift(context: CoreContext) -> dict:
47
+ """
48
+ Verifies synchronization between PostgreSQL and Qdrant using the
49
+ context's QdrantService.
50
+
51
+ Returns:
52
+ dict: Contains synchronization results with keys:
53
+ - postgres_count: Number of vector IDs in PostgreSQL
54
+ - qdrant_count: Number of point IDs in Qdrant
55
+ - missing_in_qdrant: List of IDs missing in Qdrant
56
+ - orphans_in_qdrant: List of orphaned IDs in Qdrant
57
+ - status: "synchronized" or "drift_detected"
58
+ - error: Error message if any
59
+ """
60
+ logger.info("Verifying synchronization between PostgreSQL and Qdrant...")
61
+ if context.qdrant_service is None and context.registry:
62
+ try:
63
+ context.qdrant_service = await context.registry.get_qdrant_service()
64
+ except Exception as e:
65
+ error_msg = f"Failed to initialize QdrantService: {e}"
66
+ logger.error(error_msg)
67
+ return {"error": error_msg, "status": "error"}
68
+ if not context.qdrant_service:
69
+ error_msg = "QdrantService not available in context."
70
+ logger.error(error_msg)
71
+ return {"error": error_msg, "status": "error"}
72
+ try:
73
+ postgres_ids, qdrant_ids = await asyncio.gather(
74
+ _fetch_postgres_vector_ids(),
75
+ _fetch_qdrant_point_ids(context.qdrant_service),
76
+ )
77
+ except Exception as e:
78
+ error_msg = f"Error connecting to a database: {e}"
79
+ logger.error(error_msg)
80
+ return {"error": error_msg, "status": "error"}
81
+ logger.info("Found %s linked vector IDs in PostgreSQL.", len(postgres_ids))
82
+ logger.info("Found %s point IDs in Qdrant.", len(qdrant_ids))
83
+ missing_in_qdrant = sorted(postgres_ids - qdrant_ids)
84
+ orphans_in_qdrant = sorted(qdrant_ids - postgres_ids)
85
+ result = {
86
+ "postgres_count": len(postgres_ids),
87
+ "qdrant_count": len(qdrant_ids),
88
+ "missing_in_qdrant": missing_in_qdrant,
89
+ "orphans_in_qdrant": orphans_in_qdrant,
90
+ "status": (
91
+ "synchronized"
92
+ if not missing_in_qdrant and (not orphans_in_qdrant)
93
+ else "drift_detected"
94
+ ),
95
+ }
96
+ if not missing_in_qdrant and (not orphans_in_qdrant):
97
+ logger.info(
98
+ "Perfect synchronization. PostgreSQL and Qdrant are perfectly aligned."
99
+ )
100
+ else:
101
+ if missing_in_qdrant:
102
+ logger.warning(
103
+ "Found %s vector IDs missing in Qdrant", len(missing_in_qdrant)
104
+ )
105
+ if orphans_in_qdrant:
106
+ logger.warning(
107
+ "Found %s orphaned point IDs in Qdrant", len(orphans_in_qdrant)
108
+ )
109
+ return result
@@ -0,0 +1,5 @@
1
+ # src/cli/logic/yaml_processor.py
2
+
3
+ """Provides functionality for the yaml_processor module."""
4
+
5
+ from __future__ import annotations
@@ -0,0 +1,37 @@
1
+ # src/cli/renderers/audit_detail.py
2
+ """Renderer for detailed audit findings."""
3
+
4
+ from rich.console import Console
5
+ from rich.panel import Panel
6
+ from rich.table import Table
7
+
8
+ from shared.models.audit_rendering import SeverityGroup, get_severity_style
9
+
10
+
11
+ # ID: 5d19aa95-ce9e-49b4-b7eb-7f32c9bfd431
12
+ def truncate(text: str, max_len: int) -> str:
13
+ """Truncate text with ellipsis if too long."""
14
+ return text[:max_len] + "..." if len(text) > max_len else text
15
+
16
+
17
+ # ID: eb606556-5524-43c9-82b2-9706ba6c4930
18
+ def render_details(console: Console, groups: list[SeverityGroup]) -> None:
19
+ """Render detailed tables for each severity group in panels."""
20
+ for group in groups:
21
+ count = len(group.findings)
22
+ if count == 0:
23
+ continue
24
+ inner_table = Table(show_header=True, header_style="bold white")
25
+ inner_table.add_column("ID", style="cyan", width=12, no_wrap=True)
26
+ inner_table.add_column("Title", style="bold white")
27
+ inner_table.add_column("Description", min_width=40)
28
+ inner_table.add_column("Recommendation", min_width=30)
29
+ for finding in group.findings:
30
+ desc = truncate(finding.description, 80)
31
+ rec = truncate(str(getattr(finding, "recommendation", "N/A")), 60)
32
+ inner_table.add_row(finding.id, finding.title, desc, rec)
33
+ title = f"{group.severity.name} ({count} findings)"
34
+ style = get_severity_style(group.severity)
35
+ panel = Panel(inner_table, title=title, border_style=style, expand=False)
36
+ console.print(panel)
37
+ console.print()
@@ -0,0 +1,39 @@
1
+ # src/cli/renderers/audit_overview.py
2
+ """Renderer for audit overview table."""
3
+
4
+ from __future__ import annotations
5
+
6
+ from rich.console import Console
7
+ from rich.table import Table
8
+ from rich.text import Text
9
+
10
+ from shared.logger import getLogger
11
+ from shared.models.audit_rendering import SeverityGroup, get_severity_style
12
+
13
+
14
+ logger = getLogger(__name__)
15
+
16
+
17
+ # ID: a42afd0d-567d-4404-a401-aa26b2664246
18
+ def render_overview(console: Console, groups: list[SeverityGroup]) -> None:
19
+ """Render overview table with severity counts and percentages."""
20
+ total = sum(len(g.findings) for g in groups)
21
+ if total == 0:
22
+ console.print("[bold green]No findings.[/]")
23
+ return
24
+ table = Table(
25
+ title="[bold magenta]Audit Overview[/bold magenta]",
26
+ show_header=True,
27
+ header_style="bold magenta",
28
+ )
29
+ table.add_column("Severity", style="dim")
30
+ table.add_column("Count", justify="right", style="cyan")
31
+ table.add_column("%", justify="right", style="magenta")
32
+ for group in groups:
33
+ count = len(group.findings)
34
+ if count == 0:
35
+ continue
36
+ pct = count / total * 100
37
+ sev_text = Text(group.severity.name, style=get_severity_style(group.severity))
38
+ table.add_row(sev_text, str(count), f"{pct:.1f}%")
39
+ console.print(table)
@@ -0,0 +1,27 @@
1
+ # src/cli/resources/__init__.py
2
+ """
3
+ Resource-first CLI command modules.
4
+
5
+ Constitutional Alignment:
6
+ - Commands organized by resource (database, vectors, code, etc.)
7
+ - No exposure of internal architecture layers (mind/body/will)
8
+ - Resource-action pattern enforced at registration
9
+
10
+ Structure:
11
+ database/ - PostgreSQL operations
12
+ vectors/ - Qdrant vector operations
13
+ code/ - Codebase operations
14
+ symbols/ - Symbol registry operations
15
+ constitution/ - Governance operations
16
+ proposals/ - Autonomy workflow
17
+ project/ - Project lifecycle
18
+ dev/ - Developer workflows
19
+ admin/ - System administration
20
+
21
+ Governed by: .intent/rules/cli/interface_design.json
22
+ """
23
+
24
+ from __future__ import annotations
25
+
26
+
27
+ __all__ = []
@@ -0,0 +1,23 @@
1
+ # src/cli/resources/admin/__init__.py
2
+ """Admin forensic resource hub."""
3
+
4
+ from __future__ import annotations
5
+
6
+ # Register Forensic Neurons
7
+ from . import (
8
+ coverage,
9
+ debt_scan,
10
+ forensics,
11
+ health,
12
+ patterns,
13
+ refusals,
14
+ self_check,
15
+ status,
16
+ summary,
17
+ traces,
18
+ validate_env,
19
+ )
20
+ from .hub import app
21
+
22
+
23
+ __all__ = ["app"]
@@ -0,0 +1,63 @@
1
+ # src/cli/resources/admin/coverage.py
2
+ """
3
+ Admin Coverage Command - Constitutional Binding Audit.
4
+ Analyzes the gap between declared laws and physical enforcement.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import typer
10
+ from rich.console import Console
11
+ from rich.panel import Panel
12
+ from rich.table import Table
13
+
14
+ from cli.logic.governance.traceability_service import GovernanceTraceabilityService
15
+ from cli.utils import core_command
16
+ from shared.cli.command_meta import CommandBehavior, CommandLayer, command_meta
17
+
18
+ from .hub import app
19
+
20
+
21
+ console = Console()
22
+
23
+
24
+ @app.command("coverage")
25
+ @command_meta(
26
+ canonical_name="admin.coverage",
27
+ behavior=CommandBehavior.READ,
28
+ layer=CommandLayer.MIND,
29
+ summary="Audit the binding between constitutional rules and enforcement engines.",
30
+ )
31
+ @core_command(dangerous=False, requires_context=True)
32
+ # ID: 7e425c3d-d707-4f5c-84e6-57c510cfd473
33
+ async def admin_coverage_cmd(ctx: typer.Context) -> None:
34
+ """
35
+ Generate a Traceability Matrix.
36
+ Identifies 'Critical Gaps' where Blocking rules have no enforcement engine.
37
+ """
38
+ core_context = ctx.obj
39
+ service = GovernanceTraceabilityService(core_context.git_service.repo_path)
40
+ console.print(
41
+ "\n[bold cyan]⚖️ Audit: Constitutional Binding Analysis...[/bold cyan]\n"
42
+ )
43
+ report = service.generate_traceability_report()
44
+ summary = report["summary"]
45
+ stats = f"Total Rules: {summary['total_rules']}\nEnforced : [green]{summary['enforced_count']}[/green]\nUnbound : [yellow]{summary['unbound_count']}[/yellow]\nCoverage : [bold]{summary['coverage_percent']}%[/bold]"
46
+ console.print(Panel(stats, title="Coverage Summary", expand=False))
47
+ if report["critical_gaps"]:
48
+ console.print(
49
+ "\n[bold red]🚨 CRITICAL GAPS: Blocking Rules without Enforcement[/bold red]"
50
+ )
51
+ gap_table = Table(show_header=True, header_style="bold red")
52
+ gap_table.add_column("Rule ID", style="cyan")
53
+ gap_table.add_column("Policy Source", style="dim")
54
+ for gap in report["critical_gaps"]:
55
+ gap_table.add_row(gap["id"], gap["policy"])
56
+ console.print(gap_table)
57
+ else:
58
+ console.print(
59
+ "\n[bold green]✅ No Critical Gaps: All 'Blocking' rules are bound to engines.[/bold green]"
60
+ )
61
+ console.print(
62
+ "\n[dim]Full Traceability Matrix saved to: reports/governance/traceability_matrix.json[/dim]\n"
63
+ )
@@ -0,0 +1,195 @@
1
+ # src/cli/resources/admin/debt_scan.py
2
+ """
3
+ Admin Legacy Command - Technical Debt Map.
4
+
5
+ Scans the codebase for markers that indicate workarounds, healed
6
+ violations, circular import patches, and unresolved TODOs.
7
+
8
+ Output tells you exactly where to focus cleanup work.
9
+
10
+ Constitutional Alignment:
11
+ - Behavior: READ (pure scan, no mutations)
12
+ - Layer: MIND (governance visibility)
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ from pathlib import Path
18
+
19
+ import typer
20
+ from rich.console import Console
21
+ from rich.panel import Panel
22
+ from rich.table import Table
23
+
24
+ from cli.logic.legacy_scan_logic import (
25
+ LEGACY_MARKERS,
26
+ LegacyScanResult,
27
+ get_top_debt_files,
28
+ scan_for_legacy_markers,
29
+ )
30
+ from cli.utils import core_command
31
+ from shared.cli.command_meta import CommandBehavior, CommandLayer, command_meta
32
+
33
+ from .hub import app
34
+
35
+
36
+ console = Console()
37
+
38
+
39
+ @app.command("legacy")
40
+ @command_meta(
41
+ canonical_name="admin.legacy",
42
+ behavior=CommandBehavior.READ,
43
+ layer=CommandLayer.MIND,
44
+ summary="Scan codebase for legacy markers and technical debt.",
45
+ )
46
+ @core_command(dangerous=False, requires_context=False)
47
+ # ID: 35659535-e2b1-4df5-8671-d3c485557100
48
+ def admin_legacy_cmd(
49
+ ctx: typer.Context,
50
+ severity: str = typer.Option(
51
+ None, "--severity", "-s", help="Filter by severity: high, medium, low"
52
+ ),
53
+ top: int = typer.Option(
54
+ 20, "--top", "-n", help="Show top N files by debt load (default: 20)"
55
+ ),
56
+ detail: bool = typer.Option(
57
+ False, "--detail", "-d", help="Show individual lines, not just file summary"
58
+ ),
59
+ marker: str = typer.Option(
60
+ None,
61
+ "--marker",
62
+ "-m",
63
+ help="Filter by marker type (e.g. HEALED, FUTURE, DEPRECATED)",
64
+ ),
65
+ ) -> None:
66
+ """
67
+ Find every HEALED, CONSTITUTIONAL FIX, CIRCULARITY FIX, DEPRECATED,
68
+ FUTURE, PENDING, HACK, WORKAROUND and LEGACY marker in the codebase.
69
+
70
+ This is your cleanup map. Start with high severity, highest count files.
71
+
72
+ Examples:
73
+ core-admin admin legacy
74
+ core-admin admin legacy --severity high
75
+ core-admin admin legacy --marker HEALED --detail
76
+ core-admin admin legacy --top 5 --detail
77
+ """
78
+ repo_root = Path.cwd()
79
+ if severity and severity not in ("high", "medium", "low"):
80
+ console.print("[red]Invalid severity. Choose: high, medium, low[/red]")
81
+ raise typer.Exit(1)
82
+ if marker:
83
+ marker = marker.upper()
84
+ if marker not in LEGACY_MARKERS:
85
+ valid = ", ".join(LEGACY_MARKERS.keys())
86
+ console.print(f"[red]Unknown marker '{marker}'. Valid: {valid}[/red]")
87
+ raise typer.Exit(1)
88
+ console.print(
89
+ f"\n[bold cyan]🔍 Scanning for technical debt in {repo_root}/src ...[/bold cyan]\n"
90
+ )
91
+ result = scan_for_legacy_markers(
92
+ repo_root=repo_root, scan_dirs=["src"], severity_filter=severity
93
+ )
94
+ if marker:
95
+ result = _filter_by_marker(result, marker)
96
+ if result.total_hits == 0:
97
+ console.print("[green]✅ No legacy markers found. Clean codebase![/green]\n")
98
+ return
99
+ _print_summary_panel(result)
100
+ _print_marker_breakdown(result)
101
+ _print_file_table(result, top=top, detail=detail)
102
+
103
+
104
+ def _filter_by_marker(result: LegacyScanResult, marker: str) -> LegacyScanResult:
105
+ """Return a new result containing only hits for the given marker."""
106
+ from cli.logic.legacy_scan_logic import FileLegacySummary
107
+
108
+ filtered = []
109
+ for file_summary in result.files_with_hits:
110
+ matching = [h for h in file_summary.hits if h.marker == marker]
111
+ if matching:
112
+ fs = FileLegacySummary(file_path=file_summary.file_path)
113
+ fs.hits = matching
114
+ filtered.append(fs)
115
+ result.files_with_hits = filtered
116
+ return result
117
+
118
+
119
+ def _print_summary_panel(result: LegacyScanResult) -> None:
120
+ """Print the top-level summary panel."""
121
+ high = result.total_high_severity
122
+ total = result.total_hits
123
+ files = len(result.files_with_hits)
124
+ high_color = "red" if high > 0 else "green"
125
+ summary = f"Files scanned : {result.files_scanned}\nFiles with debt: {files}\nTotal markers : {total}\n[{high_color}]High severity : {high}[/{high_color}]"
126
+ console.print(
127
+ Panel(summary, title="[bold]Technical Debt Summary[/bold]", expand=False)
128
+ )
129
+
130
+
131
+ def _print_marker_breakdown(result: LegacyScanResult) -> None:
132
+ """Print per-marker count table."""
133
+ totals = result.marker_totals
134
+ if not totals:
135
+ return
136
+ table = Table(
137
+ title="Marker Breakdown",
138
+ header_style="bold magenta",
139
+ show_header=True,
140
+ show_lines=False,
141
+ )
142
+ table.add_column("Marker", style="cyan", min_width=20)
143
+ table.add_column("Count", justify="right", min_width=6)
144
+ table.add_column("Severity", min_width=8)
145
+ table.add_column("Meaning", style="dim")
146
+ for marker_key, count in totals.items():
147
+ info = LEGACY_MARKERS.get(marker_key, {})
148
+ severity = info.get("severity", "?")
149
+ color = info.get("color", "white")
150
+ label = info.get("description", "")
151
+ table.add_row(
152
+ f"[{color}]{marker_key}[/{color}]",
153
+ str(count),
154
+ f"[{color}]{severity}[/{color}]",
155
+ label,
156
+ )
157
+ console.print(table)
158
+ console.print()
159
+
160
+
161
+ def _print_file_table(result: LegacyScanResult, top: int, detail: bool) -> None:
162
+ """Print per-file debt table, optionally with line detail."""
163
+ files = get_top_debt_files(result, limit=top)
164
+ if not files:
165
+ return
166
+ table = Table(
167
+ title=f"Top {top} Files by Debt Load",
168
+ header_style="bold magenta",
169
+ show_header=True,
170
+ show_lines=detail,
171
+ )
172
+ table.add_column("File", style="cyan")
173
+ table.add_column("Total", justify="right", min_width=6)
174
+ table.add_column("High", justify="right", min_width=6, style="red")
175
+ table.add_column("Markers")
176
+ for file_summary in files:
177
+ marker_str = ", ".join((f"{k}x{v}" for k, v in file_summary.by_marker.items()))
178
+ table.add_row(
179
+ file_summary.file_path,
180
+ str(file_summary.total),
181
+ str(file_summary.high_severity_count),
182
+ marker_str,
183
+ )
184
+ if detail:
185
+ for hit in file_summary.hits:
186
+ table.add_row(
187
+ f" [dim]L{hit.line_number}[/dim]",
188
+ "",
189
+ "",
190
+ f"[{hit.color}]{hit.marker}[/{hit.color}] [dim]{hit.line_content}[/dim]",
191
+ )
192
+ console.print(table)
193
+ console.print(
194
+ "\n[dim]Run with --detail to see individual lines. Run with --severity high to focus on critical debt.[/dim]\n"
195
+ )