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,70 @@
1
+ # src/cli/commands/check/diagnostics_commands.py
2
+ """
3
+ Diagnostic and contract verification commands.
4
+
5
+ Thin clients over /v1/quality/* (ADR-055 D6 Batch C3). Policy coverage
6
+ and Body UI contract checks both execute server-side; this module
7
+ renders the responses.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import logging
13
+
14
+ import typer
15
+ from rich.console import Console
16
+
17
+ from api.cli import CoreApiClient
18
+ from cli.logic.diagnostics_policy import policy_coverage
19
+ from cli.utils import core_command
20
+
21
+
22
+ logger = logging.getLogger(__name__)
23
+ console = Console()
24
+
25
+
26
+ @core_command(dangerous=False)
27
+ # ID: 2d3aad66-4285-48c7-b65d-f32ab7f86a01
28
+ async def diagnostics_cmd(ctx: typer.Context) -> None:
29
+ """
30
+ Audit the constitution for policy coverage and structural integrity.
31
+ """
32
+ _ = ctx
33
+ await policy_coverage()
34
+
35
+
36
+ @core_command(dangerous=False)
37
+ # ID: a2eeec63-e811-4430-8e97-7d317bd0c384
38
+ async def check_body_ui_cmd(ctx: typer.Context) -> None:
39
+ """
40
+ Check for Body layer UI contract violations (print, rich usage, os.environ).
41
+
42
+ Body modules must be HEADLESS.
43
+ """
44
+ _ = ctx
45
+ console.print("[bold cyan]🔍 Checking Body UI Contracts...[/bold cyan]")
46
+ client = CoreApiClient()
47
+ result = await client.quality_body_ui()
48
+ if result.get("status") == "ok":
49
+ console.print("[green]✅ Body contracts compliant.[/green]")
50
+ return
51
+
52
+ violations = result.get("violations", [])
53
+ console.print(f"\n[red]❌ Found {len(violations)} contract violations:[/red]\n")
54
+ by_file: dict[str, list[dict]] = {}
55
+ for v in violations:
56
+ path = v.get("file", "unknown")
57
+ by_file.setdefault(path, []).append(v)
58
+ for path, file_violations in by_file.items():
59
+ console.print(f"[bold]{path}[/bold]:")
60
+ for v in file_violations:
61
+ rule = v.get("rule_id", "unknown")
62
+ msg = v.get("message", "")
63
+ line = v.get("line")
64
+ loc = f"line {line}" if line else "general"
65
+ console.print(f" - [{rule}] {msg} ({loc})")
66
+ console.print()
67
+ console.print(
68
+ "[yellow]💡 Run 'core-admin fix body-ui --write' to auto-fix.[/yellow]"
69
+ )
70
+ raise typer.Exit(1)
@@ -0,0 +1,310 @@
1
+ # src/cli/commands/check/formatters.py
2
+ """
3
+ Output formatters for audit results.
4
+
5
+ Handles Rich UI presentation of findings, summaries, and statistics.
6
+ All formatting logic lives here - keeps command code clean.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import re
12
+ from collections import defaultdict
13
+
14
+ from rich.console import Console
15
+ from rich.panel import Panel
16
+ from rich.table import Table
17
+
18
+ from shared.logger import getLogger
19
+ from shared.models import AuditFinding, AuditSeverity
20
+
21
+
22
+ logger = getLogger(__name__)
23
+ console = Console()
24
+
25
+
26
+ # ID: b0dc9c82-dd40-4970-94e8-911fd3354930
27
+ def print_verbose_findings(findings: list[AuditFinding]) -> None:
28
+ """Prints every single finding in a detailed table for verbose output."""
29
+ table = Table(
30
+ title="[bold]Verbose Audit Findings[/bold]",
31
+ show_header=True,
32
+ header_style="bold magenta",
33
+ )
34
+ table.add_column("Severity", style="cyan")
35
+ table.add_column("Check ID", style="magenta")
36
+ table.add_column("Message", style="white", overflow="fold")
37
+ table.add_column("File:Line", style="yellow")
38
+ severity_styles = {
39
+ AuditSeverity.BLOCK: "[bold red]ERROR[/bold red]",
40
+ AuditSeverity.HIGH: "[bold yellow]WARNING[/bold yellow]",
41
+ AuditSeverity.INFO: "[dim]INFO[/dim]",
42
+ }
43
+ for finding in findings:
44
+ location = str(finding.file_path or "")
45
+ if finding.line_number:
46
+ location += f":{finding.line_number}"
47
+ table.add_row(
48
+ severity_styles.get(finding.severity, str(finding.severity)),
49
+ finding.check_id,
50
+ finding.message,
51
+ location,
52
+ )
53
+ console.print(table)
54
+
55
+
56
+ # ID: cac19f77-d41c-4493-aeaa-7eb5af07cd90
57
+ def print_summary_findings(findings: list[AuditFinding]) -> None:
58
+ """Groups findings by check ID only and prints a summary table."""
59
+ grouped_findings: dict[tuple[str, AuditSeverity], list[AuditFinding]] = defaultdict(
60
+ list
61
+ )
62
+ for f in findings:
63
+ key = (f.check_id, f.severity)
64
+ grouped_findings[key].append(f)
65
+ table = Table(
66
+ title="[bold]Audit Findings Summary[/bold]",
67
+ show_header=True,
68
+ header_style="bold magenta",
69
+ )
70
+ table.add_column("Severity", style="cyan")
71
+ table.add_column("Check ID", style="magenta")
72
+ table.add_column("Message", style="white", overflow="fold")
73
+ table.add_column("Occurrences", style="yellow", justify="right")
74
+ severity_styles = {
75
+ AuditSeverity.BLOCK: "[bold red]ERROR[/bold red]",
76
+ AuditSeverity.HIGH: "[bold yellow]WARNING[/bold yellow]",
77
+ AuditSeverity.INFO: "[dim]INFO[/dim]",
78
+ }
79
+ sorted_items = sorted(
80
+ grouped_findings.items(),
81
+ key=lambda item: (item[0][1], item[0][0]),
82
+ reverse=True,
83
+ )
84
+ for (check_id, severity), finding_list in sorted_items:
85
+ representative_message = finding_list[0].message
86
+ table.add_row(
87
+ severity_styles.get(severity, str(severity)),
88
+ check_id,
89
+ representative_message,
90
+ str(len(finding_list)),
91
+ )
92
+ console.print(table)
93
+ console.print("\n[dim]Run with '--verbose' to see all individual locations.[/dim]")
94
+
95
+
96
+ # ID: 5127f2bc-b6fc-4452-9b6d-1c0d7f828043
97
+ def print_audit_summary(
98
+ *,
99
+ passed: bool,
100
+ errors: list[AuditFinding],
101
+ warnings: list[AuditFinding],
102
+ unassigned_count: int | None = None,
103
+ title_prefix: str = "",
104
+ ) -> None:
105
+ """Print audit summary panel with pass/fail status."""
106
+ summary_table = Table.grid(expand=True, padding=(0, 1))
107
+ summary_table.add_column(justify="left")
108
+ summary_table.add_column(justify="right", style="bold")
109
+ summary_table.add_row("Errors:", f"[red]{len(errors)}[/red]")
110
+ summary_table.add_row("Warnings:", f"[yellow]{len(warnings)}[/yellow]")
111
+ if unassigned_count is not None:
112
+ summary_table.add_row("Unassigned Symbols:", f"[cyan]{unassigned_count}[/cyan]")
113
+ title = (
114
+ f"✅ {title_prefix}AUDIT PASSED" if passed else f"❌ {title_prefix}AUDIT FAILED"
115
+ )
116
+ style = "bold green" if passed else "bold red"
117
+ console.print(Panel(summary_table, title=title, style=style, expand=False))
118
+
119
+
120
+ # ID: e76eccad-7bfe-4134-ae63-2e7be93f5536
121
+ def print_filtered_audit_summary(
122
+ *,
123
+ passed: bool,
124
+ stats: dict,
125
+ errors: list[AuditFinding],
126
+ warnings: list[AuditFinding],
127
+ ) -> None:
128
+ """Print summary for filtered/focused audit runs."""
129
+ summary_table = Table.grid(expand=True, padding=(0, 1))
130
+ summary_table.add_column(justify="left")
131
+ summary_table.add_column(justify="right", style="bold")
132
+ summary_table.add_row("Total Rules:", str(stats["total_rules"]))
133
+ summary_table.add_row("Filtered Rules:", str(stats["filtered_rules"]))
134
+ summary_table.add_row("Executed Rules:", str(stats["executed_rules"]))
135
+ summary_table.add_row("Failed Rules:", f"[red]{stats.get('failed_rules', 0)}[/red]")
136
+ summary_table.add_row("", "")
137
+ summary_table.add_row("Total Findings:", str(stats["total_findings"]))
138
+ summary_table.add_row("Errors:", f"[red]{len(errors)}[/red]")
139
+ summary_table.add_row("Warnings:", f"[yellow]{len(warnings)}[/yellow]")
140
+ title = "✅ FILTERED AUDIT PASSED" if passed else "❌ FILTERED AUDIT FAILED"
141
+ style = "bold green" if passed else "bold red"
142
+ console.print(Panel(summary_table, title=title, style=style, expand=False))
143
+
144
+
145
+ # ID: a6337eb6-9780-46a0-817c-0e02acd2d206
146
+ def print_executed_rules(executed_rules: set[str]) -> None:
147
+ """Print list of executed rules."""
148
+ if not executed_rules:
149
+ return
150
+ console.print("\n[dim]Executed rules:[/dim]")
151
+ for rule_id in sorted(executed_rules):
152
+ console.print(f" [dim]• {rule_id}[/dim]")
153
+
154
+
155
+ # ID: ea2aff39-6dec-4462-9dd0-c4b116125e0a
156
+ def print_migration_delta(*, legacy_executed: set[str], v2_rule_ids: set[str]) -> None:
157
+ """Print migration delta showing legacy vs v2 coverage."""
158
+ legacy_only = sorted(legacy_executed - v2_rule_ids)
159
+ v2_only = sorted(v2_rule_ids - legacy_executed)
160
+ overlap = sorted(legacy_executed & v2_rule_ids)
161
+ table = Table(
162
+ title="[bold]Migration Delta (Legacy vs Engine-Based)[/bold]",
163
+ show_header=True,
164
+ header_style="bold magenta",
165
+ )
166
+ table.add_column("Metric", style="cyan")
167
+ table.add_column("Count", style="yellow", justify="right")
168
+ table.add_row("Legacy executed ids (evidence)", str(len(legacy_executed)))
169
+ table.add_row("V2 rule ids (from findings)", str(len(v2_rule_ids)))
170
+ table.add_row("Overlap", str(len(overlap)))
171
+ table.add_row("Legacy-only", str(len(legacy_only)))
172
+ table.add_row("V2-only", str(len(v2_only)))
173
+ console.print(table)
174
+
175
+ def _sample(values: list[str], n: int = 15) -> str:
176
+ if not values:
177
+ return "-"
178
+ shown = values[:n]
179
+ more = len(values) - len(shown)
180
+ suffix = f" (+{more} more)" if more > 0 else ""
181
+ return ", ".join(shown) + suffix
182
+
183
+ details = Table(
184
+ title="[bold]Migration Candidates (Samples)[/bold]",
185
+ show_header=True,
186
+ header_style="bold magenta",
187
+ )
188
+ details.add_column("Category", style="cyan")
189
+ details.add_column("Sample ids", style="white", overflow="fold")
190
+ details.add_row("Legacy-only (candidate to migrate)", _sample(legacy_only))
191
+ details.add_row("V2-only (new coverage not in legacy evidence)", _sample(v2_only))
192
+ console.print(details)
193
+
194
+
195
+ _CHECK_TO_TASK: dict[str, str] = {
196
+ "test": "test_generation",
197
+ "coverage": "test_generation",
198
+ "docstring": "code_modification",
199
+ "linkage": "code_modification",
200
+ "architecture": "code_modification",
201
+ "agent": "code_modification",
202
+ "safety": "code_modification",
203
+ "ai": "code_modification",
204
+ "purity": "code_modification",
205
+ "modularity": "code_modification",
206
+ "logic": "code_modification",
207
+ "workflow": "code_modification",
208
+ }
209
+ _SKIP_FILE_PREFIXES = ("DB", "none", "None", "System", "/")
210
+ _CALL_PATTERNS = {"make_request_async", "make_request", "invoke", "print", "logger"}
211
+
212
+
213
+ def _is_real_file_path(file_path: str) -> bool:
214
+ """Return True only for real source file paths."""
215
+ if not file_path:
216
+ return False
217
+ if any(file_path.startswith(p) for p in _SKIP_FILE_PREFIXES):
218
+ return False
219
+ if not file_path.endswith(".py"):
220
+ return False
221
+ return True
222
+
223
+
224
+ def _infer_task_type(check_id: str) -> str:
225
+ """Map check_id prefix to the most appropriate context build task type."""
226
+ check_lower = check_id.lower()
227
+ for prefix, task in _CHECK_TO_TASK.items():
228
+ if check_lower.startswith(prefix):
229
+ return task
230
+ return "code_modification"
231
+
232
+
233
+ def _extract_symbol(finding: AuditFinding) -> str | None:
234
+ """
235
+ Try to extract a symbol name from a finding.
236
+
237
+ Priority:
238
+ 1. context["symbol_key"] / context["symbol_path"]
239
+ 2. context["name"] / context["symbol_name"]
240
+ 3. Parse message — only class/function names, not call patterns
241
+ """
242
+ ctx = finding.context or {}
243
+ symbol_key = ctx.get("symbol_key") or ctx.get("symbol_path")
244
+ if symbol_key:
245
+ name = str(symbol_key).split("::")[-1].strip()
246
+ if name and name not in _CALL_PATTERNS:
247
+ return name
248
+ name = ctx.get("name") or ctx.get("symbol_name")
249
+ if name and str(name).strip() not in _CALL_PATTERNS:
250
+ return str(name).strip()
251
+ match = re.search("'([A-Za-z_][A-Za-z0-9_]*)'", finding.message or "")
252
+ if match:
253
+ candidate = match.group(1)
254
+ if candidate not in _CALL_PATTERNS:
255
+ return candidate
256
+ return None
257
+
258
+
259
+ # ID: 91657aab-4dc3-478b-9563-ce344e823e15
260
+ def print_context_build_hints(findings: list[AuditFinding]) -> None:
261
+ """
262
+ Print exact context build commands for actionable findings.
263
+
264
+ Bridges audit output directly to the AI workflow with zero manual translation.
265
+ Only emits hints for ERROR/WARNING findings with real .py file paths,
266
+ deduplicated by (file, symbol) pair.
267
+ """
268
+ actionable = [
269
+ f
270
+ for f in findings
271
+ if _is_real_file_path(str(f.file_path or ""))
272
+ and f.severity >= AuditSeverity.HIGH
273
+ ]
274
+ if not actionable:
275
+ return
276
+ seen: set[tuple[str, str | None]] = set()
277
+ hints: list[tuple[AuditFinding, str | None]] = []
278
+ for f in actionable:
279
+ symbol = _extract_symbol(f)
280
+ key = (str(f.file_path), symbol)
281
+ if key not in seen:
282
+ seen.add(key)
283
+ hints.append((f, symbol))
284
+ console.print()
285
+ console.print(
286
+ Panel(
287
+ f"[dim]{len(hints)} actionable location(s). Run the command below for each, then paste the output to Claude.[/dim]",
288
+ title="[bold cyan]💡 AI Workflow — Next Steps[/bold cyan]",
289
+ expand=False,
290
+ )
291
+ )
292
+ severity_icon = {
293
+ AuditSeverity.BLOCK: "[bold red]❌ ERROR[/bold red]",
294
+ AuditSeverity.HIGH: "[bold yellow]⚠️ WARN [/bold yellow]",
295
+ }
296
+ for finding, symbol in hints:
297
+ file_path = str(finding.file_path)
298
+ task = _infer_task_type(finding.check_id)
299
+ icon = severity_icon.get(finding.severity, "")
300
+ console.print(f"\n {icon} [magenta]{finding.check_id}[/magenta]")
301
+ console.print(f" [dim]{finding.message[:100]}[/dim]")
302
+ if symbol:
303
+ console.print(
304
+ f"\n [green]core-admin context build \\\n --file {file_path} \\\n --symbol {symbol} \\\n --task {task} \\\n --output var/context_for_claude.md[/green]"
305
+ )
306
+ else:
307
+ console.print(
308
+ f"\n [green]core-admin context build \\\n --file {file_path} \\\n --task {task} \\\n --output var/context_for_claude.md[/green]"
309
+ )
310
+ console.print()
@@ -0,0 +1,73 @@
1
+ # src/cli/commands/check/imports.py
2
+ """
3
+ Import integrity check command — thin client over POST /v1/quality/imports.
4
+
5
+ Enforces: code.imports.must_resolve, code.imports.no_stale_namespace.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import logging
11
+
12
+ import typer
13
+ from rich.console import Console
14
+ from rich.table import Table
15
+
16
+ from api.cli import CoreApiClient
17
+ from cli.utils import core_command
18
+
19
+
20
+ logger = logging.getLogger(__name__)
21
+ console = Console()
22
+
23
+
24
+ @core_command(dangerous=False, requires_context=False)
25
+ # ID: 90ad21a4-b24a-4247-aeb5-3abf13cb45ae
26
+ async def imports_cmd(ctx: typer.Context) -> None:
27
+ """
28
+ Verify all import statements resolve to existing modules.
29
+
30
+ Checks for:
31
+ - F821: References to undefined names (moved/deleted modules)
32
+ - F401: Stale imports left after refactoring
33
+
34
+ Enforces constitutional rules:
35
+ - code.imports.must_resolve
36
+ - code.imports.no_stale_namespace
37
+ """
38
+ _ = ctx
39
+ console.rule("[bold cyan]Import Integrity Check[/bold cyan]")
40
+ console.print("[dim]Scanning src/ for unresolvable imports (F821, F401)...[/dim]\n")
41
+ client = CoreApiClient()
42
+ result = await client.quality_imports()
43
+ if result.get("status") == "ok":
44
+ console.print("[bold green]✅ All imports resolve cleanly.[/bold green]")
45
+ return
46
+ violations = result.get("violations", [])
47
+ violation_count = len(violations)
48
+ console.print(
49
+ f"[bold red]❌ {violation_count} unresolvable import(s) found.[/bold red]\n"
50
+ )
51
+ if violations:
52
+ table = Table(
53
+ title="Import Violations", show_header=True, header_style="bold red"
54
+ )
55
+ table.add_column("File", style="cyan", overflow="fold")
56
+ table.add_column("Line", style="yellow", justify="right", width=6)
57
+ table.add_column("Rule", style="magenta", width=6)
58
+ table.add_column("Message", style="white", overflow="fold")
59
+ for v in violations:
60
+ table.add_row(
61
+ v.get("file", ""),
62
+ str(v.get("line", "")),
63
+ v.get("rule", ""),
64
+ v.get("message", ""),
65
+ )
66
+ console.print(table)
67
+ console.print(
68
+ "\n[dim]Fix: Update stale import paths or remove unused imports.[/dim]"
69
+ )
70
+ console.print(
71
+ "[dim]Rule violated: code.imports.must_resolve (.intent/rules/code/imports.json)[/dim]"
72
+ )
73
+ raise typer.Exit(code=1)
@@ -0,0 +1,71 @@
1
+ # src/cli/commands/check/quality.py
2
+ """
3
+ Code quality and system health commands.
4
+
5
+ Thin clients over the /v1/quality namespace (ADR-055 D3). lint and
6
+ tests are async (subprocess-backed); system bundles lint+tests+audit.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import typer
12
+ from rich.console import Console
13
+
14
+ from api.cli import CoreApiClient
15
+ from cli.utils import core_command
16
+
17
+
18
+ console = Console()
19
+
20
+
21
+ async def _poll_quality(client: CoreApiClient, label: str, initial: dict) -> dict:
22
+ """Poll an async /quality dispatch to terminal status, raising on failure."""
23
+ run_id = initial.get("run_id")
24
+ if not run_id:
25
+ console.print(f"[red]{label} failed to dispatch: {initial}[/red]")
26
+ raise typer.Exit(1)
27
+ final = await client._poll_run(run_id)
28
+ if final.get("status") != "completed":
29
+ console.print(f"[red]{label} failed: {final.get('error') or final}[/red]")
30
+ raise typer.Exit(1)
31
+ return final
32
+
33
+
34
+ @core_command(dangerous=False)
35
+ # ID: 23a0948a-570d-442d-b19a-ebd3af4f1c2d
36
+ async def lint_cmd(ctx: typer.Context) -> None:
37
+ """
38
+ Check code formatting and quality using Black and Ruff.
39
+ """
40
+ _ = ctx
41
+ client = CoreApiClient()
42
+ initial = await client.quality_lint()
43
+ await _poll_quality(client, "quality.lint", initial)
44
+ console.print("[green]✓ lint completed.[/green]")
45
+
46
+
47
+ @core_command(dangerous=False)
48
+ # ID: 3e9af575-9c8b-483d-b63a-477e5c6b0a02
49
+ async def tests_cmd(ctx: typer.Context) -> None:
50
+ """
51
+ Run the project test suite via pytest.
52
+ """
53
+ _ = ctx
54
+ client = CoreApiClient()
55
+ initial = await client.quality_tests()
56
+ await _poll_quality(client, "quality.tests", initial)
57
+ console.print("[green]✓ tests completed.[/green]")
58
+
59
+
60
+ @core_command(dangerous=False)
61
+ # ID: fdb8e693-c147-469a-a17a-1ee59227985b
62
+ async def system_cmd(ctx: typer.Context) -> None:
63
+ """
64
+ Run all system health checks: Lint, Tests, and Constitutional Audit.
65
+ """
66
+ _ = ctx
67
+ client = CoreApiClient()
68
+ console.rule("[bold cyan]System Health Bundle (lint + tests + audit)[/bold cyan]")
69
+ initial = await client.quality_system()
70
+ await _poll_quality(client, "quality.system", initial)
71
+ console.print("[green]✓ system health bundle completed.[/green]")
@@ -0,0 +1,107 @@
1
+ # src/cli/commands/check/quality_gates.py
2
+ """
3
+ Quality Gates Command — thin client over POST /v1/quality/gates.
4
+
5
+ Dispatches the six industry-standard checks (ruff/mypy/pytest/pip-audit/
6
+ radon/vulture) server-side via fix_runs (kind='quality_check'). The CLI
7
+ polls and renders the per-check summary.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import logging
13
+
14
+ import typer
15
+ from rich.console import Console
16
+ from rich.table import Table
17
+
18
+ from api.cli import CoreApiClient
19
+ from cli.utils import core_command
20
+
21
+
22
+ logger = logging.getLogger(__name__)
23
+ console = Console()
24
+
25
+
26
+ @core_command(dangerous=False, requires_context=False)
27
+ # ID: 41993614-7f98-425d-bfab-5c5d65c26d2f
28
+ async def quality_gates_cmd(
29
+ ctx: typer.Context,
30
+ fix: bool = typer.Option(False, "--fix", help="Attempt to auto-fix violations"),
31
+ strict: bool = typer.Option(False, "--strict", help="Fail on warnings"),
32
+ ) -> None:
33
+ """
34
+ Run all quality gates (ruff, mypy, coverage, security, complexity, dead code).
35
+
36
+ Dispatches to POST /v1/quality/gates; the server runs the bundle and
37
+ persists per-check results in fix_runs.result. --fix and --strict are
38
+ forwarded as params.
39
+ """
40
+ _ = ctx
41
+ console.print("\n[bold blue]🔍 Running Quality Gates[/bold blue]\n")
42
+ client = CoreApiClient()
43
+ initial = await client.quality_gates()
44
+ run_id = initial.get("run_id")
45
+ if not run_id:
46
+ console.print(f"[red]quality.gates failed to dispatch: {initial}[/red]")
47
+ raise typer.Exit(1)
48
+ final = await client._poll_run(run_id)
49
+ if final.get("status") not in {"completed", "failed"}:
50
+ console.print(f"[red]quality.gates unexpected status: {final}[/red]")
51
+ raise typer.Exit(1)
52
+
53
+ payload = final.get("result") or {}
54
+ results = payload.get("checks", payload.get("results", []))
55
+ _display_summary(results, strict=strict, fix=fix)
56
+
57
+ critical_failures = [
58
+ r for r in results if not r.get("passed") and not r.get("is_warning")
59
+ ]
60
+ warning_failures = [
61
+ r for r in results if not r.get("passed") and r.get("is_warning")
62
+ ]
63
+ if critical_failures or (strict and warning_failures):
64
+ raise typer.Exit(code=1)
65
+
66
+
67
+ def _display_summary(results: list[dict], *, strict: bool, fix: bool) -> None:
68
+ """Render the server's per-check results as a table."""
69
+ console.print("\n[bold]Quality Gates Summary[/bold]\n")
70
+ table = Table(show_header=True, header_style="bold cyan")
71
+ table.add_column("Check", style="cyan")
72
+ table.add_column("Status", justify="center")
73
+ table.add_column("Type", justify="center")
74
+ table.add_column("Summary", style="dim")
75
+ for result in results:
76
+ check_type = "WARNING" if result.get("is_warning") else "ERROR"
77
+ if result.get("passed"):
78
+ status = "[green]✓ PASS[/green]"
79
+ elif result.get("is_warning"):
80
+ status = "[yellow]⚠ WARN[/yellow]"
81
+ else:
82
+ status = "[red]✗ FAIL[/red]"
83
+ summary = result.get("summary", "")
84
+ if len(summary) > 60:
85
+ summary = summary[:60] + "..."
86
+ table.add_row(result.get("name", ""), status, check_type, summary)
87
+ console.print(table)
88
+ critical_fails = sum(
89
+ 1 for r in results if not r.get("passed") and not r.get("is_warning")
90
+ )
91
+ warning_fails = sum(
92
+ 1 for r in results if not r.get("passed") and r.get("is_warning")
93
+ )
94
+ if critical_fails == 0 and warning_fails == 0:
95
+ console.print("\n[bold green]✅ All quality gates passed![/bold green]\n")
96
+ elif critical_fails == 0:
97
+ console.print(
98
+ f"\n[bold yellow]⚠️ {warning_fails} warning(s) - review recommended[/bold yellow]\n"
99
+ )
100
+ else:
101
+ console.print(
102
+ f"\n[bold red]❌ {critical_fails} critical failure(s) - must fix before merge[/bold red]\n"
103
+ )
104
+ if fix:
105
+ logger.info("--fix forwarded to server (per-check auto-fix where supported).")
106
+ if strict:
107
+ logger.info("--strict in effect: warnings will fail this run.")