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.
- api/__init__.py +4 -0
- api/cli/__init__.py +10 -0
- api/cli/audit_client.py +92 -0
- api/cli/census_client.py +77 -0
- api/cli/client.py +508 -0
- api/cli/coverage_client.py +121 -0
- api/cli/daemon_client.py +42 -0
- api/cli/fix_client.py +101 -0
- api/cli/inspect_client.py +143 -0
- api/cli/integration_client.py +42 -0
- api/cli/integrity_client.py +45 -0
- api/cli/proposals_client.py +101 -0
- api/cli/quality_client.py +83 -0
- api/cli/refactor_client.py +82 -0
- api/cli/sync_client.py +106 -0
- api/dependencies.py +37 -0
- api/errors.py +74 -0
- api/main.py +88 -0
- api/v1/__init__.py +4 -0
- api/v1/audit_routes.py +302 -0
- api/v1/census_routes.py +207 -0
- api/v1/coverage_routes.py +352 -0
- api/v1/daemon_routes.py +86 -0
- api/v1/development_routes.py +70 -0
- api/v1/fix_routes.py +428 -0
- api/v1/inspect_routes.py +220 -0
- api/v1/integration_routes.py +56 -0
- api/v1/integrity_routes.py +72 -0
- api/v1/knowledge_routes.py +36 -0
- api/v1/lint_routes.py +40 -0
- api/v1/proposals_routes.py +267 -0
- api/v1/quality_routes.py +272 -0
- api/v1/refactor_routes.py +225 -0
- api/v1/sync_routes.py +261 -0
- body/__init__.py +4 -0
- body/analyzers/__init__.py +25 -0
- body/analyzers/base_analyzer.py +28 -0
- body/analyzers/constitutional_path_analyzer.py +63 -0
- body/analyzers/file_analyzer.py +211 -0
- body/analyzers/knowledge_graph_analyzer.py +86 -0
- body/analyzers/prompt_analyzer.py +155 -0
- body/analyzers/symbol_extractor.py +280 -0
- body/atomic/__init__.py +74 -0
- body/atomic/build_tests_action.py +354 -0
- body/atomic/check_actions.py +142 -0
- body/atomic/crate_ops.py +59 -0
- body/atomic/executor.py +470 -0
- body/atomic/file_ops.py +153 -0
- body/atomic/fix_actions.py +1142 -0
- body/atomic/import_resolver.py +200 -0
- body/atomic/metadata_ops.py +161 -0
- body/atomic/modularity_fix.py +839 -0
- body/atomic/modularity_splitter.py +521 -0
- body/atomic/proposal_lifecycle_actions.py +171 -0
- body/atomic/registry.py +326 -0
- body/atomic/remediate_cognitive_role.py +104 -0
- body/atomic/sandbox_lifecycle.py +252 -0
- body/atomic/split_plan.py +155 -0
- body/atomic/sync_actions/__init__.py +22 -0
- body/atomic/sync_actions/chunking_helpers.py +218 -0
- body/atomic/sync_actions/sync_actions.py +431 -0
- body/atomic/test_actions.py +47 -0
- body/autonomy/__init__.py +16 -0
- body/autonomy/audit_analyzer.py +343 -0
- body/autonomy/micro_proposal_executor.py +316 -0
- body/crate_processing/canary_executor.py +144 -0
- body/evaluators/__init__.py +27 -0
- body/evaluators/atomic_actions_evaluator.py +162 -0
- body/evaluators/atomic_actions_format.py +45 -0
- body/evaluators/atomic_actions_rules.py +278 -0
- body/evaluators/base_evaluator.py +67 -0
- body/evaluators/clarity_evaluator.py +83 -0
- body/evaluators/constitutional_evaluator.py +227 -0
- body/evaluators/failure_evaluator.py +136 -0
- body/evaluators/performance_evaluator.py +341 -0
- body/evaluators/security_evaluator.py +393 -0
- body/flows/__init__.py +33 -0
- body/flows/executor.py +275 -0
- body/flows/registry.py +272 -0
- body/flows/result.py +113 -0
- body/governance/__init__.py +29 -0
- body/governance/body_contracts_service.py +317 -0
- body/governance/code_validator.py +118 -0
- body/governance/engine_dispatcher.py +128 -0
- body/governance/intent_guard.py +592 -0
- body/governance/intent_pattern_validators.py +197 -0
- body/governance/key_management_service.py +100 -0
- body/governance/path_validator.py +187 -0
- body/governance/remediation_service.py +263 -0
- body/governance/runtime_validator.py +184 -0
- body/infrastructure/bootstrap.py +135 -0
- body/infrastructure/lifespan.py +85 -0
- body/infrastructure/repositories/__init__.py +1 -0
- body/infrastructure/repositories/decision_trace_repository.py +210 -0
- body/infrastructure/repositories/refusal_repository.py +294 -0
- body/introspection/__init__.py +4 -0
- body/introspection/capability_discovery_service.py +107 -0
- body/introspection/discovery/from_kgb.py +33 -0
- body/introspection/discovery/from_source_scan.py +40 -0
- body/introspection/discovery/loader.py +62 -0
- body/introspection/discovery/registry.py +22 -0
- body/introspection/discovery/semantics.py +21 -0
- body/introspection/discovery/sync.py +47 -0
- body/introspection/drift_detector.py +81 -0
- body/introspection/drift_service.py +48 -0
- body/introspection/export_vectors.py +133 -0
- body/introspection/generate_capability_docs.py +130 -0
- body/introspection/generate_correction_map.py +98 -0
- body/introspection/graph_analysis_service.py +66 -0
- body/introspection/knowledge_graph_service.py +170 -0
- body/introspection/semantic_clusterer.py +128 -0
- body/introspection/symbol_index_builder.py +244 -0
- body/introspection/sync/engine.py +92 -0
- body/introspection/sync/scanner.py +56 -0
- body/introspection/sync/visitor.py +83 -0
- body/introspection/sync_service.py +62 -0
- body/invokers/__init__.py +4 -0
- body/invokers/capability_invoker.py +4 -0
- body/maintenance/command_sync_service.py +73 -0
- body/maintenance/dotenv_sync_service.py +99 -0
- body/maintenance/idempotency_harness.py +70 -0
- body/maintenance/maintenance_service.py +123 -0
- body/maintenance/memory_cleanup_service.py +131 -0
- body/maintenance/refactor_settings_access.py +274 -0
- body/maintenance/scripts/__init__.py +5 -0
- body/maintenance/scripts/context_export.py +278 -0
- body/maintenance/scripts/vector_verify.py +73 -0
- body/maintenance/sync_vectors.py +338 -0
- body/models/__init__.py +4 -0
- body/project_lifecycle/__init__.py +4 -0
- body/project_lifecycle/bootstrap_service.py +157 -0
- body/project_lifecycle/definition_service.py +264 -0
- body/project_lifecycle/integration_service.py +113 -0
- body/project_lifecycle/scaffolding_service.py +187 -0
- body/quality/coverage_analyzer.py +177 -0
- body/repositories/__init__.py +4 -0
- body/self_healing/atomic_actions_fixer.py +113 -0
- body/self_healing/body_ui_fixer.py +193 -0
- body/self_healing/capability_parser.py +65 -0
- body/self_healing/code_style_service.py +51 -0
- body/self_healing/complexity_filter.py +70 -0
- body/self_healing/docstring_service.py +345 -0
- body/self_healing/duplicate_id_service.py +407 -0
- body/self_healing/duplicates_service.py +165 -0
- body/self_healing/handlers/__init__.py +1 -0
- body/self_healing/handlers/id_assignment_handler.py +201 -0
- body/self_healing/handlers/import_sorting_handler.py +181 -0
- body/self_healing/header_service.py +308 -0
- body/self_healing/id_tagging_service.py +227 -0
- body/self_healing/knowledge_consolidation_service.py +80 -0
- body/self_healing/logging_service.py +292 -0
- body/self_healing/owner_tagging_service.py +5 -0
- body/self_healing/placeholder_fixer_service.py +27 -0
- body/self_healing/prune_private_capabilities.py +144 -0
- body/self_healing/purge_legacy_tags_service.py +146 -0
- body/self_healing/remediation_models.py +238 -0
- body/self_healing/test_context/__init__.py +10 -0
- body/self_healing/test_context/detectors.py +74 -0
- body/self_healing/test_context/examples.py +53 -0
- body/self_healing/test_context/formatter.py +65 -0
- body/self_healing/test_context/metrics.py +62 -0
- body/self_healing/test_context/models.py +83 -0
- body/self_healing/test_context/parsers.py +70 -0
- body/self_healing/test_context_analyzer.py +79 -0
- body/self_healing/test_failure_analyzer.py +259 -0
- body/self_healing/test_target_analyzer.py +118 -0
- body/self_healing/vulture_healer.py +161 -0
- body/services/__init__.py +4 -0
- body/services/artifact_service.py +155 -0
- body/services/blackboard_service/__init__.py +22 -0
- body/services/blackboard_service/blackboard_claim_service.py +216 -0
- body/services/blackboard_service/blackboard_proposal_service.py +305 -0
- body/services/blackboard_service/blackboard_query_service.py +333 -0
- body/services/blackboard_service/blackboard_service.py +602 -0
- body/services/capabilities.py +51 -0
- body/services/cim/__init__.py +22 -0
- body/services/cim/baselines.py +102 -0
- body/services/cim/census_service.py +190 -0
- body/services/cim/cim_constants.py +116 -0
- body/services/cim/cim_path_utils.py +123 -0
- body/services/cim/diff.py +152 -0
- body/services/cim/history.py +94 -0
- body/services/cim/models.py +319 -0
- body/services/cim/policy.py +149 -0
- body/services/cim/scanners.py +332 -0
- body/services/coherence_service.py +552 -0
- body/services/consequence_log_service.py +189 -0
- body/services/constitutional_rule_loader.py +141 -0
- body/services/constitutional_validator.py +366 -0
- body/services/crate_creation_service.py +217 -0
- body/services/crate_processing_service.py +279 -0
- body/services/crawl_service/__init__.py +10 -0
- body/services/crawl_service/main_module.py +531 -0
- body/services/crawl_service/orchestrator.py +452 -0
- body/services/crawl_service/symbol_processing.py +279 -0
- body/services/database_service.py +242 -0
- body/services/doc_service.py +57 -0
- body/services/file_service.py +260 -0
- body/services/governance_claims_service.py +240 -0
- body/services/governance_init.py +41 -0
- body/services/health_log_service.py +167 -0
- body/services/intent_schema_validator.py +211 -0
- body/services/llm_client.py +87 -0
- body/services/mind_state_service.py +129 -0
- body/services/policy_expression_evaluator.py +154 -0
- body/services/proposal_supervision_service.py +187 -0
- body/services/representation_coherence_service.py +209 -0
- body/services/service_registry.py +431 -0
- body/services/session_attached_service.py +51 -0
- body/services/symbol_query_service.py +218 -0
- body/services/symbol_service.py +94 -0
- body/services/validation/__init__.py +14 -0
- body/services/validation/python_validator.py +89 -0
- body/services/validation/validation_policies.py +121 -0
- body/services/worker_registry_service.py +184 -0
- body/validators/__init__.py +1 -0
- body/validators/logic_conservation_validator.py +201 -0
- body/workers/call_site_rewriter.py +527 -0
- body/workers/prompt_artifact_writer.py +323 -0
- cli/__init__.py +4 -0
- cli/admin_cli.py +98 -0
- cli/cli_user.py +121 -0
- cli/commands/__init__.py +4 -0
- cli/commands/audit_reporter.py +272 -0
- cli/commands/check/__init__.py +115 -0
- cli/commands/check/audit.py +130 -0
- cli/commands/check/converters.py +129 -0
- cli/commands/check/diagnostics_commands.py +70 -0
- cli/commands/check/formatters.py +310 -0
- cli/commands/check/imports.py +73 -0
- cli/commands/check/quality.py +71 -0
- cli/commands/check/quality_gates.py +107 -0
- cli/commands/check/rule.py +136 -0
- cli/commands/check/utils.py +28 -0
- cli/commands/check_atomic_actions.py +167 -0
- cli/commands/components.py +66 -0
- cli/commands/coverage/__init__.py +22 -0
- cli/commands/coverage/analysis_commands.py +87 -0
- cli/commands/coverage/check_commands.py +173 -0
- cli/commands/coverage/generation_commands.py +155 -0
- cli/commands/coverage/services/__init__.py +15 -0
- cli/commands/coverage/services/coverage_checker.py +50 -0
- cli/commands/coverage/services/coverage_reporter.py +81 -0
- cli/commands/coverage/services/gaps_analyzer.py +114 -0
- cli/commands/daemon.py +908 -0
- cli/commands/develop.py +127 -0
- cli/commands/diagnostics.py +32 -0
- cli/commands/fix/__init__.py +84 -0
- cli/commands/fix/all_commands.py +94 -0
- cli/commands/fix/atomic_actions.py +48 -0
- cli/commands/fix/audit.py +146 -0
- cli/commands/fix/body_ui.py +93 -0
- cli/commands/fix/code_style.py +52 -0
- cli/commands/fix/db_tools.py +90 -0
- cli/commands/fix/fix_ir.py +79 -0
- cli/commands/fix/handler_discovery.py +54 -0
- cli/commands/fix/imports.py +55 -0
- cli/commands/fix/list_commands.py +54 -0
- cli/commands/fix/metadata.py +160 -0
- cli/commands/fix/modularity.py +88 -0
- cli/commands/fix/settings_access.py +65 -0
- cli/commands/fix_governed.py +103 -0
- cli/commands/fix_logging.py +24 -0
- cli/commands/governance.py +294 -0
- cli/commands/guard.py +125 -0
- cli/commands/inspect/__init__.py +79 -0
- cli/commands/inspect/_helpers.py +226 -0
- cli/commands/inspect/analysis.py +158 -0
- cli/commands/inspect/decisions.py +140 -0
- cli/commands/inspect/diagnostics.py +126 -0
- cli/commands/inspect/drift.py +100 -0
- cli/commands/inspect/patterns.py +102 -0
- cli/commands/inspect/refusals.py +211 -0
- cli/commands/inspect/repo_census.py +175 -0
- cli/commands/inspect/status.py +48 -0
- cli/commands/interactive_test.py +85 -0
- cli/commands/mind.py +49 -0
- cli/commands/refactor.py +234 -0
- cli/commands/refactor_support/__init__.py +7 -0
- cli/commands/refactor_support/analyzer.py +107 -0
- cli/commands/refactor_support/config.py +67 -0
- cli/commands/refactor_support/display.py +170 -0
- cli/commands/refactor_support/recommendations.py +55 -0
- cli/commands/run.py +60 -0
- cli/commands/search.py +103 -0
- cli/commands/status.py +86 -0
- cli/commands/submit.py +23 -0
- cli/interactive.py +177 -0
- cli/logic/__init__.py +7 -0
- cli/logic/agent.py +110 -0
- cli/logic/audit_capability_domains.py +106 -0
- cli/logic/audit_renderer.py +150 -0
- cli/logic/autonomy/actions.py +36 -0
- cli/logic/autonomy/views.py +116 -0
- cli/logic/body_contracts_checker.py +23 -0
- cli/logic/build.py +27 -0
- cli/logic/byor.py +148 -0
- cli/logic/capability.py +27 -0
- cli/logic/cli_utils.py +210 -0
- cli/logic/context.py +7 -0
- cli/logic/db.py +154 -0
- cli/logic/db_manage.py +22 -0
- cli/logic/decision_inspect_logic.py +62 -0
- cli/logic/diagnostics.py +148 -0
- cli/logic/diagnostics_policy.py +100 -0
- cli/logic/diagnostics_registry.py +165 -0
- cli/logic/duplicates.py +19 -0
- cli/logic/embeddings_cli.py +43 -0
- cli/logic/governance/__init__.py +16 -0
- cli/logic/governance/engine.py +216 -0
- cli/logic/governance/forensics_service.py +67 -0
- cli/logic/governance/limb_status_service.py +83 -0
- cli/logic/governance/renderer.py +115 -0
- cli/logic/governance/traceability_service.py +78 -0
- cli/logic/governance_logic.py +33 -0
- cli/logic/hub/__init__.py +14 -0
- cli/logic/hub/app.py +107 -0
- cli/logic/hub/formatter.py +29 -0
- cli/logic/hub/introspection.py +20 -0
- cli/logic/hub/repository.py +17 -0
- cli/logic/init.py +22 -0
- cli/logic/interactive_test/__init__.py +21 -0
- cli/logic/interactive_test/session.py +102 -0
- cli/logic/interactive_test/steps/__init__.py +23 -0
- cli/logic/interactive_test/steps/execution.py +53 -0
- cli/logic/interactive_test/steps/generation.py +88 -0
- cli/logic/interactive_test/steps/healing.py +79 -0
- cli/logic/interactive_test/steps/utils.py +31 -0
- cli/logic/interactive_test/steps/verification.py +71 -0
- cli/logic/interactive_test/ui.py +203 -0
- cli/logic/interactive_test/workflow.py +168 -0
- cli/logic/interactive_test_logic.py +41 -0
- cli/logic/knowledge.py +47 -0
- cli/logic/legacy_scan_logic.py +306 -0
- cli/logic/list_audits.py +49 -0
- cli/logic/log_audit.py +53 -0
- cli/logic/new.py +8 -0
- cli/logic/project_docs.py +28 -0
- cli/logic/reconcile.py +127 -0
- cli/logic/refusal_inspect_logic.py +208 -0
- cli/logic/report.py +47 -0
- cli/logic/status.py +47 -0
- cli/logic/symbol_drift.py +77 -0
- cli/logic/sync.py +48 -0
- cli/logic/sync_domains.py +72 -0
- cli/logic/sync_manifest.py +31 -0
- cli/logic/tools.py +133 -0
- cli/logic/utils_migration.py +43 -0
- cli/logic/validate.py +107 -0
- cli/logic/vector_drift.py +109 -0
- cli/logic/yaml_processor.py +5 -0
- cli/renderers/audit_detail.py +37 -0
- cli/renderers/audit_overview.py +39 -0
- cli/resources/__init__.py +27 -0
- cli/resources/admin/__init__.py +23 -0
- cli/resources/admin/coverage.py +63 -0
- cli/resources/admin/debt_scan.py +195 -0
- cli/resources/admin/forensics.py +97 -0
- cli/resources/admin/health.py +66 -0
- cli/resources/admin/hub.py +9 -0
- cli/resources/admin/meta.py +47 -0
- cli/resources/admin/patterns.py +28 -0
- cli/resources/admin/refusals.py +31 -0
- cli/resources/admin/self_check.py +175 -0
- cli/resources/admin/status.py +66 -0
- cli/resources/admin/summary.py +67 -0
- cli/resources/admin/traces.py +46 -0
- cli/resources/admin/validate_env.py +56 -0
- cli/resources/code/__init__.py +31 -0
- cli/resources/code/actions.py +48 -0
- cli/resources/code/audit.py +416 -0
- cli/resources/code/audit_duplicates.py +22 -0
- cli/resources/code/check_imports.py +75 -0
- cli/resources/code/check_ui.py +62 -0
- cli/resources/code/clarity.py +51 -0
- cli/resources/code/complexity.py +55 -0
- cli/resources/code/docstrings.py +51 -0
- cli/resources/code/fix_atomic.py +51 -0
- cli/resources/code/format.py +62 -0
- cli/resources/code/hub.py +10 -0
- cli/resources/code/integrity.py +75 -0
- cli/resources/code/lint.py +37 -0
- cli/resources/code/logging.py +49 -0
- cli/resources/code/refactor.py +32 -0
- cli/resources/code/test.py +30 -0
- cli/resources/coherence/__init__.py +13 -0
- cli/resources/coherence/check.py +111 -0
- cli/resources/coherence/hub.py +13 -0
- cli/resources/coherence/repair_counts.py +73 -0
- cli/resources/coherence/report.py +144 -0
- cli/resources/coherence/seed.py +297 -0
- cli/resources/coherence/supersede.py +124 -0
- cli/resources/coherence/triage.py +81 -0
- cli/resources/constitution/__init__.py +19 -0
- cli/resources/constitution/audit.py +49 -0
- cli/resources/constitution/query.py +45 -0
- cli/resources/constitution/status.py +34 -0
- cli/resources/constitution/validate.py +36 -0
- cli/resources/context/__init__.py +21 -0
- cli/resources/context/build.py +374 -0
- cli/resources/context/cache.py +156 -0
- cli/resources/context/explain.py +140 -0
- cli/resources/context/hub.py +11 -0
- cli/resources/context/search.py +114 -0
- cli/resources/database/__init__.py +13 -0
- cli/resources/database/cleanup.py +107 -0
- cli/resources/database/export.py +61 -0
- cli/resources/database/hub.py +11 -0
- cli/resources/database/migrate.py +57 -0
- cli/resources/database/status.py +101 -0
- cli/resources/database/sync.py +84 -0
- cli/resources/database/sync_env.py +76 -0
- cli/resources/database/sync_registry.py +48 -0
- cli/resources/dev/__init__.py +14 -0
- cli/resources/dev/hub.py +11 -0
- cli/resources/dev/refactor.py +92 -0
- cli/resources/dev/stability.py +60 -0
- cli/resources/dev/strategic_audit.py +113 -0
- cli/resources/dev/sync.py +51 -0
- cli/resources/dev/test.py +34 -0
- cli/resources/intent/__init__.py +11 -0
- cli/resources/intent/hub.py +9 -0
- cli/resources/intent/sync_vocabulary.py +396 -0
- cli/resources/project/__init__.py +19 -0
- cli/resources/project/docs.py +41 -0
- cli/resources/project/new.py +40 -0
- cli/resources/project/onboard.py +31 -0
- cli/resources/proposals/__init__.py +28 -0
- cli/resources/proposals/create.py +82 -0
- cli/resources/proposals/integrate.py +49 -0
- cli/resources/proposals/list.py +76 -0
- cli/resources/proposals/manage.py +117 -0
- cli/resources/runtime/__init__.py +9 -0
- cli/resources/runtime/health.py +925 -0
- cli/resources/secrets/__init__.py +10 -0
- cli/resources/secrets/hub.py +9 -0
- cli/resources/secrets/manage.py +309 -0
- cli/resources/symbols/__init__.py +13 -0
- cli/resources/symbols/audit.py +46 -0
- cli/resources/symbols/fix_ids.py +43 -0
- cli/resources/symbols/hub.py +11 -0
- cli/resources/symbols/resolve_duplicates.py +30 -0
- cli/resources/symbols/sync.py +39 -0
- cli/resources/symbols/tag.py +47 -0
- cli/resources/vectors/__init__.py +11 -0
- cli/resources/vectors/cleanup.py +95 -0
- cli/resources/vectors/hub.py +9 -0
- cli/resources/vectors/query.py +105 -0
- cli/resources/vectors/status.py +30 -0
- cli/resources/vectors/sync.py +57 -0
- cli/resources/vectors/sync_code.py +67 -0
- cli/resources/workers/__init__.py +13 -0
- cli/resources/workers/blackboard.py +253 -0
- cli/resources/workers/remediate.py +337 -0
- cli/resources/workers/run.py +140 -0
- cli/utils/__init__.py +32 -0
- cli/utils/annotation_formatter.py +154 -0
- cli/utils/decorators.py +184 -0
- cli/utils/display.py +79 -0
- cli/utils/exit_codes.py +59 -0
- cli/utils/helpers.py +34 -0
- cli/utils/prompts.py +21 -0
- core_runtime-0.1.1.dist-info/LICENSE +21 -0
- core_runtime-0.1.1.dist-info/METADATA +346 -0
- core_runtime-0.1.1.dist-info/RECORD +962 -0
- core_runtime-0.1.1.dist-info/WHEEL +4 -0
- core_runtime-0.1.1.dist-info/entry_points.txt +4 -0
- mind/__init__.py +4 -0
- mind/coherence/__init__.py +1 -0
- mind/coherence/checker.py +314 -0
- mind/coherence/checks/__init__.py +4 -0
- mind/coherence/checks/base.py +34 -0
- mind/coherence/checks/r1_scoped.py +228 -0
- mind/coherence/checks/row2_grounding.py +69 -0
- mind/coherence/checks/row3_citation.py +119 -0
- mind/coherence/checks/row4_naming.py +126 -0
- mind/coherence/checks/sameconcern.py +136 -0
- mind/coherence/checks/specgap.py +233 -0
- mind/coherence/checks/vocabulary.py +112 -0
- mind/coherence/llm_judge.py +207 -0
- mind/enforcement/audit.py +78 -0
- mind/governance/__init__.py +22 -0
- mind/governance/assumption_extractor.py +326 -0
- mind/governance/audit_context.py +520 -0
- mind/governance/audit_postprocessor.py +36 -0
- mind/governance/audit_report_writer.py +46 -0
- mind/governance/audit_types.py +98 -0
- mind/governance/auditor.py +179 -0
- mind/governance/authority_package_builder.py +502 -0
- mind/governance/constitutional_auditor_dynamic.py +362 -0
- mind/governance/enforcement/__init__.py +24 -0
- mind/governance/enforcement_loader.py +245 -0
- mind/governance/enforcement_methods.py +28 -0
- mind/governance/entry_point_policy.py +62 -0
- mind/governance/executable_rule.py +127 -0
- mind/governance/filtered_audit.py +272 -0
- mind/governance/finding_processor.py +76 -0
- mind/governance/meta_validator.py +259 -0
- mind/governance/micro_proposal_validator.py +169 -0
- mind/governance/policy_coverage_service.py +183 -0
- mind/governance/policy_rule.py +94 -0
- mind/governance/rule_conflict_detector.py +127 -0
- mind/governance/rule_executor.py +306 -0
- mind/governance/rule_extractor.py +376 -0
- mind/governance/stateless_audit.py +206 -0
- mind/governance/violation_report.py +136 -0
- mind/logic/engines/_knowledge_gate_duplication.py +117 -0
- mind/logic/engines/action_gate.py +76 -0
- mind/logic/engines/artifact_gate.py +1168 -0
- mind/logic/engines/ast_gate/__init__.py +9 -0
- mind/logic/engines/ast_gate/base.py +263 -0
- mind/logic/engines/ast_gate/checks/__init__.py +35 -0
- mind/logic/engines/ast_gate/checks/async_checks.py +276 -0
- mind/logic/engines/ast_gate/checks/capability_checks.py +197 -0
- mind/logic/engines/ast_gate/checks/conservation_checks.py +126 -0
- mind/logic/engines/ast_gate/checks/generic_checks.py +244 -0
- mind/logic/engines/ast_gate/checks/import_checks.py +164 -0
- mind/logic/engines/ast_gate/checks/knowledge_source_check.py +88 -0
- mind/logic/engines/ast_gate/checks/logging_checks.py +133 -0
- mind/logic/engines/ast_gate/checks/metadata_checks.py +242 -0
- mind/logic/engines/ast_gate/checks/modularity_checks.py +436 -0
- mind/logic/engines/ast_gate/checks/naming_checks.py +120 -0
- mind/logic/engines/ast_gate/checks/prompt_model_checks.py +83 -0
- mind/logic/engines/ast_gate/checks/protected_namespace_access_check.py +298 -0
- mind/logic/engines/ast_gate/checks/purity_checks.py +421 -0
- mind/logic/engines/ast_gate/checks/purity_enforcement_check.py +56 -0
- mind/logic/engines/ast_gate/checks/runtime_import_boundary.py +198 -0
- mind/logic/engines/ast_gate/checks/schema_conformance_checks.py +130 -0
- mind/logic/engines/ast_gate/engine.py +317 -0
- mind/logic/engines/ast_gate.py +19 -0
- mind/logic/engines/base.py +106 -0
- mind/logic/engines/cli_gate/__init__.py +25 -0
- mind/logic/engines/cli_gate/base_check.py +45 -0
- mind/logic/engines/cli_gate/checks/__init__.py +31 -0
- mind/logic/engines/cli_gate/checks/async_execution.py +65 -0
- mind/logic/engines/cli_gate/checks/dangerous_explicit.py +60 -0
- mind/logic/engines/cli_gate/checks/discovery_strict.py +167 -0
- mind/logic/engines/cli_gate/checks/help_required.py +43 -0
- mind/logic/engines/cli_gate/checks/no_duplicates.py +57 -0
- mind/logic/engines/cli_gate/checks/no_layer_exposure.py +48 -0
- mind/logic/engines/cli_gate/checks/resource_first.py +58 -0
- mind/logic/engines/cli_gate/checks/standard_verbs.py +50 -0
- mind/logic/engines/cli_gate/engine.py +211 -0
- mind/logic/engines/glob_gate.py +214 -0
- mind/logic/engines/knowledge_gate.py +410 -0
- mind/logic/engines/llm_gate.py +407 -0
- mind/logic/engines/llm_gate_stub.py +67 -0
- mind/logic/engines/passive_gate.py +45 -0
- mind/logic/engines/regex_gate.py +97 -0
- mind/logic/engines/registry.py +134 -0
- mind/logic/engines/runtime_gate.py +265 -0
- mind/logic/engines/taxonomy_gate.py +229 -0
- mind/logic/engines/workflow_gate/__init__.py +22 -0
- mind/logic/engines/workflow_gate/base_check.py +42 -0
- mind/logic/engines/workflow_gate/checks/__init__.py +32 -0
- mind/logic/engines/workflow_gate/checks/alignment.py +93 -0
- mind/logic/engines/workflow_gate/checks/audit.py +80 -0
- mind/logic/engines/workflow_gate/checks/canary.py +47 -0
- mind/logic/engines/workflow_gate/checks/coverage.py +74 -0
- mind/logic/engines/workflow_gate/checks/dead_code.py +53 -0
- mind/logic/engines/workflow_gate/checks/import_resolution.py +97 -0
- mind/logic/engines/workflow_gate/checks/linter.py +104 -0
- mind/logic/engines/workflow_gate/checks/quality.py +49 -0
- mind/logic/engines/workflow_gate/checks/ruff_format.py +99 -0
- mind/logic/engines/workflow_gate/checks/tests.py +81 -0
- mind/logic/engines/workflow_gate/engine.py +207 -0
- shared/__init__.py +32 -0
- shared/action_logger.py +61 -0
- shared/action_types.py +199 -0
- shared/activity_logging.py +149 -0
- shared/ai/constitutional_envelope.py +341 -0
- shared/ai/prompt_model.py +585 -0
- shared/ai/response_parser.py +191 -0
- shared/ast_utility.py +279 -0
- shared/atomic_action.py +117 -0
- shared/cli/__init__.py +6 -0
- shared/cli/app_introspection.py +134 -0
- shared/cli/command_meta.py +224 -0
- shared/cli_types.py +92 -0
- shared/component_primitive.py +216 -0
- shared/config.py +216 -0
- shared/config_loader.py +54 -0
- shared/context.py +113 -0
- shared/exceptions.py +100 -0
- shared/governance/__init__.py +9 -0
- shared/governance/coherence_harvester.py +258 -0
- shared/governance_token.py +77 -0
- shared/infrastructure/__init__.py +5 -0
- shared/infrastructure/adapters/__init__.py +5 -0
- shared/infrastructure/adapters/embedding_provider.py +66 -0
- shared/infrastructure/bootstrap_registry.py +57 -0
- shared/infrastructure/clients/__init__.py +5 -0
- shared/infrastructure/clients/qdrant_client.py +455 -0
- shared/infrastructure/config_service.py +382 -0
- shared/infrastructure/config_validator.py +70 -0
- shared/infrastructure/context/__init__.py +45 -0
- shared/infrastructure/context/builder.py +804 -0
- shared/infrastructure/context/cache.py +101 -0
- shared/infrastructure/context/database.py +205 -0
- shared/infrastructure/context/limb_workspace.py +134 -0
- shared/infrastructure/context/models.py +65 -0
- shared/infrastructure/context/providers/__init__.py +18 -0
- shared/infrastructure/context/providers/ast.py +211 -0
- shared/infrastructure/context/providers/db.py +165 -0
- shared/infrastructure/context/providers/vectors.py +195 -0
- shared/infrastructure/context/redactor.py +109 -0
- shared/infrastructure/context/serializers.py +144 -0
- shared/infrastructure/context/service.py +271 -0
- shared/infrastructure/context/validator.py +247 -0
- shared/infrastructure/database/models/__init__.py +80 -0
- shared/infrastructure/database/models/autonomous_proposals.py +83 -0
- shared/infrastructure/database/models/decision_traces.py +129 -0
- shared/infrastructure/database/models/governance.py +183 -0
- shared/infrastructure/database/models/knowledge.py +205 -0
- shared/infrastructure/database/models/learning.py +99 -0
- shared/infrastructure/database/models/llm_config.py +274 -0
- shared/infrastructure/database/models/operations.py +152 -0
- shared/infrastructure/database/models/refusals.py +147 -0
- shared/infrastructure/database/models/system.py +124 -0
- shared/infrastructure/database/models/vectors.py +113 -0
- shared/infrastructure/database/models/workers.py +96 -0
- shared/infrastructure/database/session_manager.py +166 -0
- shared/infrastructure/diagnostic_service.py +103 -0
- shared/infrastructure/events/__init__.py +5 -0
- shared/infrastructure/events/base.py +44 -0
- shared/infrastructure/events/bus.py +76 -0
- shared/infrastructure/git_service.py +385 -0
- shared/infrastructure/intent/action_risk.py +135 -0
- shared/infrastructure/intent/audit_verdict.py +131 -0
- shared/infrastructure/intent/autonomy_dirty_tree.py +104 -0
- shared/infrastructure/intent/canonical_enums.py +116 -0
- shared/infrastructure/intent/cognitive_roles.py +96 -0
- shared/infrastructure/intent/errors.py +13 -0
- shared/infrastructure/intent/filesystem_operations.py +359 -0
- shared/infrastructure/intent/intent_connector.py +157 -0
- shared/infrastructure/intent/intent_repository.py +707 -0
- shared/infrastructure/intent/intent_validator.py +248 -0
- shared/infrastructure/intent/operational_capabilities.py +470 -0
- shared/infrastructure/intent/operational_config.py +1343 -0
- shared/infrastructure/intent/operational_mode.py +66 -0
- shared/infrastructure/intent/task_type_phases.py +180 -0
- shared/infrastructure/intent/test_coverage_paths.py +181 -0
- shared/infrastructure/intent/vocabulary_projection.py +241 -0
- shared/infrastructure/knowledge/knowledge_service.py +155 -0
- shared/infrastructure/knowledge_graph_service.py +214 -0
- shared/infrastructure/llm/client.py +448 -0
- shared/infrastructure/llm/client_registry.py +153 -0
- shared/infrastructure/llm/fallback_client.py +144 -0
- shared/infrastructure/llm/providers/anthropic.py +113 -0
- shared/infrastructure/llm/providers/base.py +130 -0
- shared/infrastructure/llm/providers/ollama.py +265 -0
- shared/infrastructure/llm/providers/openai.py +168 -0
- shared/infrastructure/repositories/__init__.py +5 -0
- shared/infrastructure/repositories/db/__init__.py +5 -0
- shared/infrastructure/repositories/db/common.py +138 -0
- shared/infrastructure/repositories/db/engine.py +26 -0
- shared/infrastructure/repositories/db/migration_service.py +75 -0
- shared/infrastructure/repositories/db/status_service.py +61 -0
- shared/infrastructure/repositories/memory_repository.py +134 -0
- shared/infrastructure/repositories/symbol_definition_repository.py +170 -0
- shared/infrastructure/repositories/task_repository.py +59 -0
- shared/infrastructure/repositories/vector_link_repository.py +83 -0
- shared/infrastructure/rooted_repository.py +50 -0
- shared/infrastructure/secrets_service.py +317 -0
- shared/infrastructure/specs/__init__.py +9 -0
- shared/infrastructure/specs/specs_repository.py +100 -0
- shared/infrastructure/storage/file_classifier.py +32 -0
- shared/infrastructure/storage/file_handler.py +330 -0
- shared/infrastructure/storage/file_provider.py +233 -0
- shared/infrastructure/storage/integrity_service.py +108 -0
- shared/infrastructure/validation/black_formatter.py +41 -0
- shared/infrastructure/validation/quality.py +46 -0
- shared/infrastructure/validation/ruff_linter.py +104 -0
- shared/infrastructure/validation/syntax_checker.py +45 -0
- shared/infrastructure/validation/test_runner.py +167 -0
- shared/infrastructure/validation/yaml_validator.py +45 -0
- shared/infrastructure/vector/__init__.py +15 -0
- shared/infrastructure/vector/adapters/__init__.py +20 -0
- shared/infrastructure/vector/adapters/constitutional/__init__.py +26 -0
- shared/infrastructure/vector/adapters/constitutional/chunker.py +246 -0
- shared/infrastructure/vector/adapters/constitutional/doc_key_resolver.py +109 -0
- shared/infrastructure/vector/adapters/constitutional/item_builder.py +158 -0
- shared/infrastructure/vector/adapters/constitutional/utils.py +39 -0
- shared/infrastructure/vector/adapters/constitutional_adapter.py +309 -0
- shared/infrastructure/vector/adapters/specs_adapter.py +171 -0
- shared/infrastructure/vector/cognitive_adapter.py +119 -0
- shared/infrastructure/vector/vector_index_service.py +230 -0
- shared/logger.py +195 -0
- shared/models/__init__.py +47 -0
- shared/models/action_result.py +77 -0
- shared/models/audit_models.py +106 -0
- shared/models/audit_rendering.py +30 -0
- shared/models/capability_models.py +22 -0
- shared/models/constitutional_validation.py +185 -0
- shared/models/drift_models.py +24 -0
- shared/models/embedding_payload.py +45 -0
- shared/models/execution_models.py +71 -0
- shared/models/pattern_graph.py +62 -0
- shared/models/prompt_model.py +244 -0
- shared/models/refusal_result.py +294 -0
- shared/models/remediation.py +35 -0
- shared/models/validation_result.py +34 -0
- shared/models/vector_models.py +62 -0
- shared/models/workflow_models.py +242 -0
- shared/path_resolver.py +408 -0
- shared/path_utils.py +60 -0
- shared/processors/base_processor.py +171 -0
- shared/processors/yaml_processor.py +72 -0
- shared/protocols/__init__.py +21 -0
- shared/protocols/brain_services.py +35 -0
- shared/protocols/cognitive.py +35 -0
- shared/protocols/executor.py +47 -0
- shared/protocols/interpreter.py +24 -0
- shared/protocols/knowledge.py +21 -0
- shared/protocols/llm.py +25 -0
- shared/protocols/typer_protocols.py +37 -0
- shared/time.py +18 -0
- shared/universal.py +43 -0
- shared/utils/__init__.py +81 -0
- shared/utils/audit_grouping.py +50 -0
- shared/utils/common_knowledge.py +82 -0
- shared/utils/domain_mapper.py +61 -0
- shared/utils/embedding_utils.py +182 -0
- shared/utils/glob_match.py +93 -0
- shared/utils/header_tools.py +177 -0
- shared/utils/parallel_processor.py +60 -0
- shared/utils/parsing.py +189 -0
- shared/utils/path_utils.py +268 -0
- shared/utils/subprocess_utils.py +87 -0
- shared/workers/__init__.py +19 -0
- shared/workers/base.py +533 -0
- shared/workers/declaration_validator.py +124 -0
- shared/workers/loop_hold_telemetry.py +210 -0
- shared/workers/schedule.py +123 -0
- will/__init__.py +4 -0
- will/agents/__init__.py +4 -0
- will/agents/base_planner.py +133 -0
- will/agents/code_generation/__init__.py +15 -0
- will/agents/code_generation/code_generator.py +247 -0
- will/agents/code_generation/context_formatters.py +99 -0
- will/agents/code_generation/correction_engine.py +157 -0
- will/agents/code_generation/extraction.py +165 -0
- will/agents/code_generation/pattern_validator.py +264 -0
- will/agents/code_generation/prompt_builders.py +209 -0
- will/agents/coder_agent.py +229 -0
- will/agents/coder_agent_refusal_handler.py +168 -0
- will/agents/cognitive_orchestrator.py +152 -0
- will/agents/conversational/__init__.py +13 -0
- will/agents/conversational/agent.py +271 -0
- will/agents/conversational/factory.py +72 -0
- will/agents/conversational/helpers.py +116 -0
- will/agents/execution_agent.py +294 -0
- will/agents/governance_mixin.py +132 -0
- will/agents/planner_agent.py +261 -0
- will/agents/resource_selector.py +228 -0
- will/agents/strategic_auditor/__init__.py +15 -0
- will/agents/strategic_auditor/agent.py +199 -0
- will/agents/strategic_auditor/context_gatherer.py +586 -0
- will/agents/strategic_auditor/effects.py +136 -0
- will/agents/strategic_auditor/models.py +61 -0
- will/agents/strategic_auditor/reasoning.py +169 -0
- will/agents/tagger_agent.py +294 -0
- will/agents/traced_agent_mixin.py +33 -0
- will/autonomy/__init__.py +20 -0
- will/autonomy/autonomous_developer.py +127 -0
- will/autonomy/proposal.py +585 -0
- will/autonomy/proposal_execution_pipeline.py +264 -0
- will/autonomy/proposal_executor.py +410 -0
- will/autonomy/proposal_mapper.py +187 -0
- will/autonomy/proposal_repository.py +118 -0
- will/autonomy/proposal_service.py +251 -0
- will/autonomy/proposal_state_manager.py +239 -0
- will/deciders/__init__.py +9 -0
- will/deciders/governance_decider.py +207 -0
- will/governance/__init__.py +13 -0
- will/governance/audit_remediation_runner.py +197 -0
- will/governance/audit_runner.py +368 -0
- will/governance/census_runner.py +278 -0
- will/governance/coverage_runner.py +489 -0
- will/governance/daemon_runner.py +164 -0
- will/governance/fix_runner.py +693 -0
- will/governance/inspect_runner.py +521 -0
- will/governance/integrity_runner.py +66 -0
- will/governance/lint_runner.py +93 -0
- will/governance/refactor_runner.py +372 -0
- will/governance/sync_runner.py +186 -0
- will/interpreters/__init__.py +44 -0
- will/interpreters/cli_args_interpreter.py +106 -0
- will/interpreters/natural_language_interpreter.py +276 -0
- will/interpreters/request_interpreter.py +126 -0
- will/lifecycle/__init__.py +12 -0
- will/lifecycle/integration_runner.py +54 -0
- will/maintenance/metadata_scribe_service.py +64 -0
- will/orchestration/__init__.py +4 -0
- will/orchestration/cognitive_service.py +185 -0
- will/orchestration/decision_tracer.py +257 -0
- will/orchestration/intent_alignment.py +59 -0
- will/orchestration/intent_guard.py +20 -0
- will/orchestration/phase_registry.py +92 -0
- will/orchestration/process_orchestrator.py +270 -0
- will/orchestration/prompt_pipeline.py +174 -0
- will/orchestration/remediation_orchestrator.py +292 -0
- will/orchestration/self_correction_engine.py +154 -0
- will/orchestration/validation_pipeline.py +45 -0
- will/orchestration/workflow_orchestrator.py +277 -0
- will/phases/__init__.py +24 -0
- will/phases/audit_phase.py +152 -0
- will/phases/canary/pytest_runner.py +156 -0
- will/phases/canary/result_builder.py +130 -0
- will/phases/canary/test_discovery.py +104 -0
- will/phases/canary_validation_phase.py +188 -0
- will/phases/code_generation/artifact_saver.py +175 -0
- will/phases/code_generation/code_sensor.py +117 -0
- will/phases/code_generation/file_path_extractor.py +53 -0
- will/phases/code_generation/work_directory_manager.py +83 -0
- will/phases/code_generation_phase.py +480 -0
- will/phases/execution_phase.py +179 -0
- will/phases/interpret_phase.py +266 -0
- will/phases/load_phase.py +102 -0
- will/phases/parse_phase.py +117 -0
- will/phases/planning_phase.py +182 -0
- will/phases/runtime_phase.py +112 -0
- will/phases/sandbox_validation_phase.py +130 -0
- will/phases/style_check_phase.py +209 -0
- will/phases/test_generation_phase.py +159 -0
- will/self_healing/alignment/persistence.py +53 -0
- will/self_healing/alignment/sandbox.py +51 -0
- will/self_healing/alignment/specialists.py +165 -0
- will/self_healing/alignment_orchestrator.py +140 -0
- will/self_healing/audit_remediation_service.py +199 -0
- will/self_healing/batch_remediation_service.py +280 -0
- will/self_healing/capability_reconciliation_service.py +96 -0
- will/self_healing/capability_tagging_service.py +224 -0
- will/self_healing/clarity_service.py +204 -0
- will/self_healing/complexity_service.py +260 -0
- will/self_healing/context_aware_test_generator.py +298 -0
- will/self_healing/coverage_remediation_service.py +97 -0
- will/self_healing/coverage_watcher.py +192 -0
- will/self_healing/enrichment_service.py +211 -0
- will/self_healing/linelength_service.py +168 -0
- will/self_healing/modularity_remediation_service.py +203 -0
- will/self_healing/remediation_evidence_writer.py +144 -0
- will/self_healing/remediation_executor.py +113 -0
- will/self_healing/remediation_interpretation/__init__.py +1 -0
- will/self_healing/remediation_interpretation/file_context_assembler.py +383 -0
- will/self_healing/remediation_interpretation/file_role_detector.py +599 -0
- will/self_healing/remediation_interpretation/finding_normalizer.py +221 -0
- will/self_healing/remediation_interpretation/models.py +198 -0
- will/self_healing/remediation_interpretation/reasoning_brief_builder.py +235 -0
- will/self_healing/remediation_interpretation/responsibility_extractor.py +421 -0
- will/self_healing/remediation_interpretation/service.py +202 -0
- will/self_healing/remediation_interpretation/strategy_catalog.py +252 -0
- will/self_healing/remediation_interpretation/strategy_selector.py +395 -0
- will/self_healing/remediation_pattern_matcher.py +126 -0
- will/self_healing/simple_test_generator.py +252 -0
- will/self_healing/single_file_remediation.py +137 -0
- will/self_healing/test_generation/automatic_repair.py +377 -0
- will/self_healing/test_generation/code_extractor.py +238 -0
- will/self_healing/test_generation/context_builder.py +140 -0
- will/self_healing/test_generation/executor.py +64 -0
- will/self_healing/test_generation/failure_parser.py +37 -0
- will/self_healing/test_generation/generation_workflow.py +140 -0
- will/self_healing/test_generation/generator.py +283 -0
- will/self_healing/test_generation/llm_correction.py +160 -0
- will/self_healing/test_generation/repair_workflow.py +128 -0
- will/self_healing/test_generation/single_test_fixer.py +77 -0
- will/self_healing/test_generation/test_extractor.py +50 -0
- will/self_healing/test_generation/test_scorer.py +53 -0
- will/self_healing/test_generation/test_validator.py +64 -0
- will/self_healing/test_generator.py +12 -0
- will/strategists/__init__.py +46 -0
- will/strategists/base_strategist.py +29 -0
- will/strategists/clarity_strategist.py +55 -0
- will/strategists/complexity_strategist.py +55 -0
- will/strategists/fix_strategist.py +467 -0
- will/strategists/sync_strategist.py +369 -0
- will/strategists/test_strategist.py +140 -0
- will/strategists/validation_strategist.py +315 -0
- will/test_generation/__init__.py +46 -0
- will/test_generation/adaptive_test_generator.py +123 -0
- will/test_generation/artifacts.py +102 -0
- will/test_generation/harness_detection.py +103 -0
- will/test_generation/helpers/__init__.py +14 -0
- will/test_generation/helpers/context_extractor.py +100 -0
- will/test_generation/helpers/test_executor.py +230 -0
- will/test_generation/llm_output.py +62 -0
- will/test_generation/models.py +25 -0
- will/test_generation/persistence.py +248 -0
- will/test_generation/phases/__init__.py +16 -0
- will/test_generation/phases/generation_phase.py +150 -0
- will/test_generation/phases/load_phase.py +53 -0
- will/test_generation/phases/parse_phase.py +50 -0
- will/test_generation/prompt_engine.py +123 -0
- will/test_generation/result_aggregator.py +73 -0
- will/test_generation/sandbox.py +203 -0
- will/test_generation/strategy_link.py +56 -0
- will/test_generation/test_extractor.py +140 -0
- will/test_generation/validation.py +89 -0
- will/tools/__init__.py +13 -0
- will/tools/anchor_builder.py +111 -0
- will/tools/anchor_search.py +73 -0
- will/tools/anchors/discovery.py +55 -0
- will/tools/anchors/storage.py +32 -0
- will/tools/architectural_context_builder.py +94 -0
- will/tools/cognitive_toolbox.py +47 -0
- will/tools/context/code_snippet_extractor.py +83 -0
- will/tools/context/embedding_search.py +76 -0
- will/tools/context/formatter.py +87 -0
- will/tools/context/models.py +38 -0
- will/tools/context/query_builder.py +42 -0
- will/tools/context/retriever.py +182 -0
- will/tools/context/standards.py +53 -0
- will/tools/file_navigator.py +180 -0
- will/tools/layers.py +31 -0
- will/tools/module_anchor_generator.py +137 -0
- will/tools/module_descriptor.py +154 -0
- will/tools/policy_vectorizer.py +184 -0
- will/tools/symbol_finder.py +188 -0
- will/tools/tool_generator.py +103 -0
- will/workers/audit_ingest_worker.py +207 -0
- will/workers/audit_violation_filter.py +108 -0
- will/workers/audit_violation_normalizer.py +108 -0
- will/workers/audit_violation_sensor.py +370 -0
- will/workers/blackboard_shop_manager.py +280 -0
- will/workers/capability_tagger.py +153 -0
- will/workers/circuit_breaker.py +335 -0
- will/workers/coherence_sensor.py +212 -0
- will/workers/commit_reachability_auditor.py +135 -0
- will/workers/db_sync_worker.py +96 -0
- will/workers/governance_embedding/__init__.py +9 -0
- will/workers/governance_embedding/governance_embedder_worker.py +189 -0
- will/workers/intent_inspector.py +599 -0
- will/workers/observer_worker.py +158 -0
- will/workers/prompt_extractor_worker.py +241 -0
- will/workers/proposal_consumer_effects.py +216 -0
- will/workers/proposal_consumer_revival.py +131 -0
- will/workers/proposal_consumer_worker.py +271 -0
- will/workers/proposal_pipeline_shop_manager.py +273 -0
- will/workers/repo_crawler.py +171 -0
- will/workers/repo_embedding/__init__.py +18 -0
- will/workers/repo_embedding/helpers.py +245 -0
- will/workers/repo_embedding/repo_embedder_workers.py +163 -0
- will/workers/test_coverage_sensor.py +208 -0
- will/workers/test_remediator/__init__.py +12 -0
- will/workers/test_remediator/_operations.py +295 -0
- will/workers/test_remediator/worker.py +187 -0
- will/workers/test_runner_sensor.py +430 -0
- will/workers/violation_executor.py +496 -0
- will/workers/violation_remediator.py +394 -0
- will/workers/violation_remediator_blackboard.py +225 -0
- will/workers/violation_remediator_body/__init__.py +12 -0
- will/workers/violation_remediator_body/blackboard.py +139 -0
- will/workers/violation_remediator_body/ceremony.py +154 -0
- will/workers/violation_remediator_body/context.py +70 -0
- will/workers/violation_remediator_body/llm.py +112 -0
- will/workers/violation_remediator_body/models.py +35 -0
- will/workers/violation_remediator_body/worker.py +518 -0
- will/workers/violation_remediator_proposal.py +328 -0
- will/workers/worker_shop_manager.py +244 -0
- will/workflows/__init__.py +23 -0
- will/workflows/dev_sync_reporter.py +274 -0
- 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,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
|
+
)
|