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,62 @@
|
|
|
1
|
+
# src/body/introspection/discovery/loader.py
|
|
2
|
+
|
|
3
|
+
"""Refactored logic for src/features/introspection/discovery/loader.py."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from collections.abc import Iterable
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _iter_capability_files(base: Path) -> Iterable[Path]:
|
|
12
|
+
if not base.exists():
|
|
13
|
+
return []
|
|
14
|
+
for p in sorted(base.glob("**/*")):
|
|
15
|
+
if p.is_dir():
|
|
16
|
+
continue
|
|
17
|
+
if p.suffix.lower() in {".yaml", ".yml"}:
|
|
18
|
+
yield p
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _extract_canonical_from_doc(doc: dict) -> set[str]:
|
|
22
|
+
canonical: set[str] = set()
|
|
23
|
+
tags = doc.get("tags", [])
|
|
24
|
+
if isinstance(tags, list):
|
|
25
|
+
for item in tags:
|
|
26
|
+
if isinstance(item, dict) and isinstance(item.get("key"), str):
|
|
27
|
+
canonical.add(item["key"])
|
|
28
|
+
return canonical
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _extract_aliases_from_doc(doc: dict) -> dict[str, str]:
|
|
32
|
+
aliases: dict[str, str] = {}
|
|
33
|
+
raw = doc.get("aliases")
|
|
34
|
+
if isinstance(raw, dict):
|
|
35
|
+
for k, v in raw.items():
|
|
36
|
+
if isinstance(k, str) and isinstance(v, str) and k and v:
|
|
37
|
+
aliases[k] = v
|
|
38
|
+
return aliases
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _detect_alias_cycles(aliases: dict[str, str]) -> list[list[str]]:
|
|
42
|
+
visited: set[str] = set()
|
|
43
|
+
stack: set[str] = set()
|
|
44
|
+
cycles: list[list[str]] = []
|
|
45
|
+
|
|
46
|
+
# ID: d0cbfb51-a865-4552-ad69-a1b3953ff36d
|
|
47
|
+
def dfs(node: str, path: list[str]):
|
|
48
|
+
visited.add(node)
|
|
49
|
+
stack.add(node)
|
|
50
|
+
nxt = aliases.get(node)
|
|
51
|
+
if nxt:
|
|
52
|
+
if nxt not in visited:
|
|
53
|
+
dfs(nxt, [*path, nxt])
|
|
54
|
+
elif nxt in stack and nxt in path:
|
|
55
|
+
idx = path.index(nxt)
|
|
56
|
+
cycles.append([*path[idx:], nxt])
|
|
57
|
+
stack.remove(node)
|
|
58
|
+
|
|
59
|
+
for a in aliases:
|
|
60
|
+
if a not in visited:
|
|
61
|
+
dfs(a, [a])
|
|
62
|
+
return cycles
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# src/body/introspection/discovery/registry.py
|
|
2
|
+
|
|
3
|
+
"""Provides functionality for the registry module."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# ID: a3e2c0e1-ab3a-4384-ad7d-e65025a70789
|
|
9
|
+
class CapabilityRegistry:
|
|
10
|
+
"""
|
|
11
|
+
Holds canonical capability keys and alias mapping.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
def __init__(self, canonical: set[str], aliases: dict[str, str]):
|
|
15
|
+
self.canonical = set(canonical)
|
|
16
|
+
self.aliases = dict(aliases)
|
|
17
|
+
|
|
18
|
+
# ID: 8910cd7d-01b5-4bf4-87ff-b37733a82532
|
|
19
|
+
def resolve(self, tag: str) -> str | None:
|
|
20
|
+
if tag in self.canonical:
|
|
21
|
+
return tag
|
|
22
|
+
return self.aliases.get(tag)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# src/body/introspection/discovery/semantics.py
|
|
2
|
+
|
|
3
|
+
"""Provides functionality for the semantics module."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# ID: ad12da2d-dac6-4192-9729-9095c28db8c2
|
|
9
|
+
def _split_capability_key(key: str) -> tuple[str, str | None]:
|
|
10
|
+
"""
|
|
11
|
+
Split a capability key into (domain, namespace).
|
|
12
|
+
|
|
13
|
+
RULES (constitutional):
|
|
14
|
+
- domain is the ONLY authority boundary
|
|
15
|
+
- namespace is informational only
|
|
16
|
+
- namespace MUST NOT be used for access control, ownership, or governance
|
|
17
|
+
"""
|
|
18
|
+
if "." not in key:
|
|
19
|
+
return key, None
|
|
20
|
+
domain, namespace = key.split(".", 1)
|
|
21
|
+
return domain, namespace or None
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# src/body/introspection/discovery/sync.py
|
|
2
|
+
|
|
3
|
+
"""Refactored logic for src/features/introspection/discovery/sync.py."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
import json
|
|
8
|
+
|
|
9
|
+
from sqlalchemy import text
|
|
10
|
+
from sqlalchemy.ext.asyncio import AsyncSession
|
|
11
|
+
|
|
12
|
+
from .semantics import _split_capability_key
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# ID: 1124a2cb-cfaf-4a2f-82a7-3f4cfd171fd3
|
|
16
|
+
async def run_capability_upsert(db: AsyncSession, keys: set[str]) -> int:
|
|
17
|
+
"""Sync constitutional capabilities into DB with authority boundaries."""
|
|
18
|
+
upserted = 0
|
|
19
|
+
for key in keys:
|
|
20
|
+
domain, namespace = _split_capability_key(key)
|
|
21
|
+
title = key.replace(".", " ").replace("_", " ").title()
|
|
22
|
+
|
|
23
|
+
stmt = text(
|
|
24
|
+
"""
|
|
25
|
+
INSERT INTO core.capabilities
|
|
26
|
+
(name, domain, subdomain, title, owner, status, tags, updated_at)
|
|
27
|
+
VALUES
|
|
28
|
+
(:name, :domain, :subdomain, :title, 'constitution', 'Active', :tags, NOW())
|
|
29
|
+
ON CONFLICT (domain, name) DO UPDATE SET
|
|
30
|
+
subdomain = EXCLUDED.subdomain,
|
|
31
|
+
status = 'Active',
|
|
32
|
+
updated_at = NOW()
|
|
33
|
+
"""
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
await db.execute(
|
|
37
|
+
stmt,
|
|
38
|
+
{
|
|
39
|
+
"name": key,
|
|
40
|
+
"domain": domain,
|
|
41
|
+
"subdomain": namespace,
|
|
42
|
+
"title": title,
|
|
43
|
+
"tags": json.dumps(["constitutional"]),
|
|
44
|
+
},
|
|
45
|
+
)
|
|
46
|
+
upserted += 1
|
|
47
|
+
return upserted
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# src/body/introspection/drift_detector.py
|
|
2
|
+
"""
|
|
3
|
+
Detects drift between declared capabilities in manifests and implemented
|
|
4
|
+
capabilities in the source code.
|
|
5
|
+
|
|
6
|
+
CONSTITUTIONAL FIX:
|
|
7
|
+
- Aligned with 'governance.artifact_mutation.traceable'.
|
|
8
|
+
- Replaced direct Path writes with governed FileHandler mutations.
|
|
9
|
+
- Enforces IntentGuard and audit logging for drift reports.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
from dataclasses import asdict
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
|
|
17
|
+
from shared.infrastructure.storage.file_handler import FileHandler
|
|
18
|
+
from shared.logger import getLogger
|
|
19
|
+
from shared.models import CapabilityMeta, DriftReport
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
logger = getLogger(__name__)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# ID: 6cc5efdf-037e-4862-b13e-0a569d889a97
|
|
26
|
+
def detect_capability_drift(
|
|
27
|
+
manifest_caps: dict[str, CapabilityMeta], code_caps: dict[str, CapabilityMeta]
|
|
28
|
+
) -> DriftReport:
|
|
29
|
+
"""
|
|
30
|
+
Compares two dictionaries of capabilities and returns a drift report.
|
|
31
|
+
"""
|
|
32
|
+
manifest_keys: set[str] = set(manifest_caps.keys())
|
|
33
|
+
code_keys: set[str] = set(code_caps.keys())
|
|
34
|
+
|
|
35
|
+
missing_in_code = sorted(list(manifest_keys - code_keys))
|
|
36
|
+
undeclared_in_manifest = sorted(list(code_keys - manifest_keys))
|
|
37
|
+
|
|
38
|
+
mismatched = []
|
|
39
|
+
for key in manifest_keys.intersection(code_keys):
|
|
40
|
+
manifest_cap = manifest_caps[key]
|
|
41
|
+
code_cap = code_caps[key]
|
|
42
|
+
if manifest_cap != code_cap:
|
|
43
|
+
mismatched.append(
|
|
44
|
+
{
|
|
45
|
+
"capability": key,
|
|
46
|
+
"manifest": asdict(manifest_cap),
|
|
47
|
+
"code": asdict(code_cap),
|
|
48
|
+
}
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
return DriftReport(
|
|
52
|
+
missing_in_code=missing_in_code,
|
|
53
|
+
undeclared_in_manifest=undeclared_in_manifest,
|
|
54
|
+
mismatched_mappings=mismatched,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
# ID: db10bc9b-b4b3-41f2-8d81-b32731540d95
|
|
59
|
+
def write_report(path: Path, report: DriftReport, repo_root: Path) -> None:
|
|
60
|
+
"""
|
|
61
|
+
Writes the drift report to a JSON file via the governed FileHandler.
|
|
62
|
+
"""
|
|
63
|
+
fh = FileHandler(str(repo_root))
|
|
64
|
+
|
|
65
|
+
try:
|
|
66
|
+
# Resolve to a repo-relative string as required by the FileHandler API
|
|
67
|
+
rel_path = str(path.resolve().relative_to(repo_root.resolve())).replace(
|
|
68
|
+
"\\", "/"
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# This logs the mutation to core.action_results and enforces safety policies
|
|
72
|
+
fh.write_runtime_json(rel_path, report.to_dict())
|
|
73
|
+
|
|
74
|
+
logger.info("Drift report successfully persisted to %s", rel_path)
|
|
75
|
+
except ValueError:
|
|
76
|
+
# If the path is outside the repo, we log a warning but the Law forbids the write
|
|
77
|
+
logger.error(
|
|
78
|
+
"Security Violation: Attempted to write report to an ungoverned path: %s",
|
|
79
|
+
path,
|
|
80
|
+
)
|
|
81
|
+
raise
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# src/body/introspection/drift_service.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Drift Service - Detects divergence between the Mind (Intent) and Body (Code).
|
|
5
|
+
|
|
6
|
+
CONSTITUTIONAL FIX (V2.3):
|
|
7
|
+
- Uses IntentRepository as the SSOT for declared capabilities.
|
|
8
|
+
- Removed dependency on legacy 'from_manifest.py' crawler.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
|
|
15
|
+
from body.introspection.drift_detector import detect_capability_drift
|
|
16
|
+
from shared.infrastructure.intent.intent_repository import get_intent_repository
|
|
17
|
+
from shared.infrastructure.knowledge.knowledge_service import KnowledgeService
|
|
18
|
+
from shared.models import CapabilityMeta, DriftReport
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
# DORMANT pending #503 — symbols-drift contract redesign (ADR-057 D5 first-scope semantics).
|
|
22
|
+
# ID: 51f59218-c7f5-41ae-b2c9-87d4459e14d2
|
|
23
|
+
async def run_drift_analysis_async(root: Path) -> DriftReport:
|
|
24
|
+
"""
|
|
25
|
+
Performs drift analysis by comparing manifest rules (Mind)
|
|
26
|
+
against implemented symbols (Body).
|
|
27
|
+
"""
|
|
28
|
+
# 1. Get Declared Capabilities from the Mind (IntentRepository)
|
|
29
|
+
repo = get_intent_repository()
|
|
30
|
+
# PathResolver handles mapping 'project_manifest' to the actual file
|
|
31
|
+
manifest_data = repo.load_policy("project_manifest")
|
|
32
|
+
declared_keys = manifest_data.get("capabilities", [])
|
|
33
|
+
|
|
34
|
+
manifest_caps = {
|
|
35
|
+
k: CapabilityMeta(key=k) for k in declared_keys if isinstance(k, str)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
# 2. Get Implemented Capabilities from the Body (KnowledgeService)
|
|
39
|
+
knowledge_service = KnowledgeService(root)
|
|
40
|
+
graph = await knowledge_service.get_graph()
|
|
41
|
+
|
|
42
|
+
code_caps: dict[str, CapabilityMeta] = {}
|
|
43
|
+
for data in graph.get("symbols", {}).values():
|
|
44
|
+
key = data.get("key")
|
|
45
|
+
if key and key != "unassigned":
|
|
46
|
+
code_caps[key] = CapabilityMeta(key=key, domain=data.get("domain"))
|
|
47
|
+
|
|
48
|
+
return detect_capability_drift(manifest_caps, code_caps)
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# src/body/introspection/export_vectors.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
A utility to export all vectors and their payloads from the Qdrant database
|
|
5
|
+
to a local JSONL file for analysis, clustering, or backup.
|
|
6
|
+
|
|
7
|
+
Refactored to use the canonical FileHandler for governed report persistence.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import json
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
from typing import TYPE_CHECKING
|
|
15
|
+
|
|
16
|
+
from qdrant_client.http import models as qm
|
|
17
|
+
|
|
18
|
+
# REFACTORED: Removed direct settings import
|
|
19
|
+
from shared.exceptions import CoreError
|
|
20
|
+
from shared.logger import getLogger
|
|
21
|
+
from shared.path_resolver import PathResolver
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
if TYPE_CHECKING:
|
|
25
|
+
from shared.context import CoreContext
|
|
26
|
+
from shared.infrastructure.clients.qdrant_client import QdrantService
|
|
27
|
+
from shared.infrastructure.storage.file_handler import FileHandler
|
|
28
|
+
|
|
29
|
+
logger = getLogger(__name__)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# ID: 3196d095-9e61-4dbe-952c-dc4b7ea7c8e2
|
|
33
|
+
class VectorExportError(CoreError):
|
|
34
|
+
"""Raised when vector export cannot complete."""
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _normalize_output_path(output_path: Path, repo_root: Path) -> str:
|
|
38
|
+
"""
|
|
39
|
+
Convert the provided path to a repository-relative POSIX string.
|
|
40
|
+
|
|
41
|
+
Raises VectorExportError if the path escapes the repository boundary.
|
|
42
|
+
"""
|
|
43
|
+
try:
|
|
44
|
+
if output_path.is_absolute():
|
|
45
|
+
rel_path = output_path.relative_to(repo_root)
|
|
46
|
+
else:
|
|
47
|
+
rel_path = output_path
|
|
48
|
+
return str(rel_path).replace("\\", "/")
|
|
49
|
+
except ValueError as exc:
|
|
50
|
+
logger.error("Output path %s must be within the repository root.", output_path)
|
|
51
|
+
raise VectorExportError(
|
|
52
|
+
"Output path must be within the repository root.", exit_code=1
|
|
53
|
+
) from exc
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
async def _async_export(
|
|
57
|
+
qdrant_service: QdrantService,
|
|
58
|
+
file_handler: FileHandler,
|
|
59
|
+
output_path: Path,
|
|
60
|
+
repo_root: Path,
|
|
61
|
+
):
|
|
62
|
+
"""
|
|
63
|
+
The core async logic for exporting vectors.
|
|
64
|
+
Mutations are routed through the governed FileHandler.
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
# 1. Path Normalization
|
|
68
|
+
# Convert absolute or relative path to a repo-relative string for the FileHandler
|
|
69
|
+
rel_path_str = _normalize_output_path(output_path, repo_root)
|
|
70
|
+
|
|
71
|
+
logger.info("Exporting all vectors to %s...", rel_path_str)
|
|
72
|
+
|
|
73
|
+
try:
|
|
74
|
+
# 2. Data Retrieval
|
|
75
|
+
all_vectors: list[qm.Record] = await qdrant_service.get_all_vectors()
|
|
76
|
+
if not all_vectors:
|
|
77
|
+
logger.info("No vectors found in the database to export.")
|
|
78
|
+
return
|
|
79
|
+
|
|
80
|
+
# 3. Content Preparation (JSONL format)
|
|
81
|
+
lines = []
|
|
82
|
+
for record in all_vectors:
|
|
83
|
+
vector_data = record.vector
|
|
84
|
+
if hasattr(vector_data, "tolist"):
|
|
85
|
+
vector_data = vector_data.tolist()
|
|
86
|
+
|
|
87
|
+
line_data = {
|
|
88
|
+
"id": str(record.id),
|
|
89
|
+
"payload": record.payload,
|
|
90
|
+
"vector": vector_data,
|
|
91
|
+
}
|
|
92
|
+
lines.append(json.dumps(line_data, ensure_ascii=False))
|
|
93
|
+
|
|
94
|
+
content = "\n".join(lines) + "\n"
|
|
95
|
+
|
|
96
|
+
# 4. Governed Write
|
|
97
|
+
# ensure_dir and write_runtime_text enforce IntentGuard and log the action
|
|
98
|
+
file_handler.ensure_dir(str(Path(rel_path_str).parent))
|
|
99
|
+
file_handler.write_runtime_text(rel_path_str, content)
|
|
100
|
+
|
|
101
|
+
logger.info(
|
|
102
|
+
"Successfully exported %s vectors via FileHandler.", len(all_vectors)
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
except Exception as e:
|
|
106
|
+
logger.error("Failed to export vectors: %s", e, exc_info=True)
|
|
107
|
+
raise VectorExportError("Failed to export vectors.", exit_code=1) from e
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
# ID: 9d8d50b8-b533-4169-b21f-839a06db1f46
|
|
111
|
+
async def export_vectors(
|
|
112
|
+
context: CoreContext, output: Path | str | None = None
|
|
113
|
+
) -> None:
|
|
114
|
+
"""Exports all vectors from Qdrant to a JSONL file via governed services."""
|
|
115
|
+
if output is None:
|
|
116
|
+
output = (
|
|
117
|
+
PathResolver.from_repo(context.git_service.repo_path).reports_dir
|
|
118
|
+
/ "vectors_export.jsonl"
|
|
119
|
+
)
|
|
120
|
+
output_path = Path(output)
|
|
121
|
+
if not getattr(context, "qdrant_service", None) or not getattr(
|
|
122
|
+
context, "file_handler", None
|
|
123
|
+
):
|
|
124
|
+
raise VectorExportError(
|
|
125
|
+
"CoreContext must provide qdrant_service and file_handler.", exit_code=1
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
await _async_export(
|
|
129
|
+
context.qdrant_service,
|
|
130
|
+
context.file_handler,
|
|
131
|
+
output_path,
|
|
132
|
+
context.git_service.repo_path,
|
|
133
|
+
)
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# src/body/introspection/generate_capability_docs.py
|
|
2
|
+
"""
|
|
3
|
+
Generates the canonical capability reference documentation from the database.
|
|
4
|
+
|
|
5
|
+
ARCHITECTURE: Pure feature - no standalone execution.
|
|
6
|
+
Use via: core-admin build capability-docs
|
|
7
|
+
|
|
8
|
+
CONSTITUTIONAL FIX:
|
|
9
|
+
- Aligned with 'governance.artifact_mutation.traceable'.
|
|
10
|
+
- Replaced direct Path writes with governed FileHandler mutations.
|
|
11
|
+
- Enforces IntentGuard and audit logging for documentation exports.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
|
|
18
|
+
from sqlalchemy import text
|
|
19
|
+
from sqlalchemy.ext.asyncio import AsyncSession
|
|
20
|
+
|
|
21
|
+
from shared.infrastructure.storage.file_handler import FileHandler
|
|
22
|
+
from shared.logger import getLogger
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
logger = getLogger(__name__)
|
|
26
|
+
|
|
27
|
+
# --- Configuration ---
|
|
28
|
+
# Internal logic uses repo-relative path for FileHandler compatibility
|
|
29
|
+
REL_OUTPUT_PATH = "docs/10_CAPABILITY_REFERENCE.md"
|
|
30
|
+
GITHUB_URL_BASE = "https://github.com/DariuszNewecki/CORE/blob/main/"
|
|
31
|
+
|
|
32
|
+
HEADER = """
|
|
33
|
+
# 10. Capability Reference
|
|
34
|
+
|
|
35
|
+
This document is the canonical, auto-generated reference for all capabilities recognized by the CORE constitution.
|
|
36
|
+
It is generated from the `core.knowledge_graph` database view and should not be edited manually.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
async def _fetch_capabilities(session: AsyncSession) -> list[dict]:
|
|
41
|
+
"""
|
|
42
|
+
Fetches all public capabilities from the database knowledge graph view.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
session: Injected database session
|
|
46
|
+
"""
|
|
47
|
+
logger.info("Fetching capabilities from the database...")
|
|
48
|
+
stmt = text(
|
|
49
|
+
"""
|
|
50
|
+
SELECT
|
|
51
|
+
capability,
|
|
52
|
+
intent,
|
|
53
|
+
file_path as file
|
|
54
|
+
FROM core.knowledge_graph
|
|
55
|
+
WHERE is_public = TRUE AND capability IS NOT NULL
|
|
56
|
+
ORDER BY capability;
|
|
57
|
+
"""
|
|
58
|
+
)
|
|
59
|
+
result = await session.execute(stmt)
|
|
60
|
+
return [dict(row._mapping) for row in result]
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _group_by_domain(capabilities: list[dict]) -> dict[str, list[dict]]:
|
|
64
|
+
"""Groups capabilities by their domain prefix."""
|
|
65
|
+
domains = {}
|
|
66
|
+
for cap in capabilities:
|
|
67
|
+
key = cap["capability"]
|
|
68
|
+
# Infer domain from the key
|
|
69
|
+
domain_key = ".".join(key.split(".")[:-1]) if "." in key else "general"
|
|
70
|
+
if domain_key not in domains:
|
|
71
|
+
domains[domain_key] = []
|
|
72
|
+
domains[domain_key].append(cap)
|
|
73
|
+
return domains
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
# ID: 2ea63de3-081d-40b3-9386-0d372487aabd
|
|
77
|
+
async def main(session: AsyncSession, repo_root: Path):
|
|
78
|
+
"""
|
|
79
|
+
The main entry point for the documentation generation script.
|
|
80
|
+
"""
|
|
81
|
+
try:
|
|
82
|
+
capabilities = await _fetch_capabilities(session)
|
|
83
|
+
except Exception as e:
|
|
84
|
+
logger.error("Error fetching capabilities: %s", e)
|
|
85
|
+
return
|
|
86
|
+
|
|
87
|
+
if not capabilities:
|
|
88
|
+
logger.warning(
|
|
89
|
+
"No capabilities found in the database. Documentation will be empty."
|
|
90
|
+
)
|
|
91
|
+
return
|
|
92
|
+
|
|
93
|
+
domains = _group_by_domain(capabilities)
|
|
94
|
+
|
|
95
|
+
logger.info(
|
|
96
|
+
"Generating documentation for %d capabilities across %d domains...",
|
|
97
|
+
len(capabilities),
|
|
98
|
+
len(domains),
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
md_content = [HEADER.strip(), ""]
|
|
102
|
+
|
|
103
|
+
for domain_name in sorted(domains.keys()):
|
|
104
|
+
md_content.append(f"## Domain: `{domain_name}`")
|
|
105
|
+
md_content.append("")
|
|
106
|
+
|
|
107
|
+
for cap in sorted(domains[domain_name], key=lambda x: x["capability"]):
|
|
108
|
+
md_content.append(f"- **`{cap['capability']}`**")
|
|
109
|
+
|
|
110
|
+
description = cap.get("intent") or "No description provided."
|
|
111
|
+
md_content.append(f" - **Description:** {description.strip()}")
|
|
112
|
+
|
|
113
|
+
file_path = cap.get("file")
|
|
114
|
+
line_number = 1
|
|
115
|
+
github_link = f"{GITHUB_URL_BASE}{file_path}#L{line_number}"
|
|
116
|
+
md_content.append(f" - **Source:** [{file_path}]({github_link})")
|
|
117
|
+
md_content.append("")
|
|
118
|
+
|
|
119
|
+
final_text = "\n".join(md_content)
|
|
120
|
+
|
|
121
|
+
file_handler = FileHandler(str(repo_root))
|
|
122
|
+
|
|
123
|
+
try:
|
|
124
|
+
file_handler.write_runtime_text(REL_OUTPUT_PATH, final_text)
|
|
125
|
+
logger.info(
|
|
126
|
+
"Capability reference documentation successfully written to %s via FileHandler",
|
|
127
|
+
REL_OUTPUT_PATH,
|
|
128
|
+
)
|
|
129
|
+
except Exception as e:
|
|
130
|
+
logger.error("Failed to write documentation: %s", e)
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# src/body/introspection/generate_correction_map.py
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
A utility to generate alias maps from semantic clustering results.
|
|
5
|
+
It takes the proposed domain mappings and creates a YAML file that can be used
|
|
6
|
+
by the AliasResolver to standardize capability keys.
|
|
7
|
+
|
|
8
|
+
CONSTITUTIONAL FIX:
|
|
9
|
+
- Aligned with 'governance.artifact_mutation.traceable'.
|
|
10
|
+
- Replaced direct Path writes with governed FileHandler mutations.
|
|
11
|
+
- Enforces IntentGuard and audit logging for alias map generation.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import json
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
|
|
19
|
+
import yaml
|
|
20
|
+
|
|
21
|
+
from shared.exceptions import CoreError
|
|
22
|
+
from shared.infrastructure.storage.file_handler import FileHandler
|
|
23
|
+
from shared.logger import getLogger
|
|
24
|
+
from shared.path_resolver import PathResolver
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
logger = getLogger(__name__)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# ID: 2ae2b8e5-8e07-45d9-849e-d9fc2392bc16
|
|
31
|
+
class GenerateCorrectionMapError(CoreError):
|
|
32
|
+
"""Raised when correction map generation fails."""
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# ID: 58cc1c15-5bd9-401e-9bf2-8b64d1550631
|
|
36
|
+
def generate_maps(
|
|
37
|
+
input_path: Path | str | None = None,
|
|
38
|
+
output: Path | str | None = None,
|
|
39
|
+
repo_root: Path | None = None,
|
|
40
|
+
) -> None:
|
|
41
|
+
"""
|
|
42
|
+
Generates an alias map from clustering results to a YAML file via FileHandler.
|
|
43
|
+
"""
|
|
44
|
+
if repo_root is None:
|
|
45
|
+
raise ValueError("repo_root is required")
|
|
46
|
+
path_resolver = PathResolver.from_repo(repo_root)
|
|
47
|
+
if input_path is None:
|
|
48
|
+
input_path = path_resolver.reports_dir / "proposed_domains.json"
|
|
49
|
+
if output is None:
|
|
50
|
+
output = path_resolver.reports_dir / "aliases.yaml"
|
|
51
|
+
input_path = Path(input_path)
|
|
52
|
+
output_path = Path(output)
|
|
53
|
+
|
|
54
|
+
logger.info("Generating alias map from %s...", input_path)
|
|
55
|
+
try:
|
|
56
|
+
# We assume input is readable (read operations are governed differently)
|
|
57
|
+
proposed_domains = json.loads(input_path.read_text("utf-8"))
|
|
58
|
+
except (json.JSONDecodeError, FileNotFoundError) as e:
|
|
59
|
+
logger.error("Failed to load or parse input file: %s", e)
|
|
60
|
+
raise GenerateCorrectionMapError(
|
|
61
|
+
"Failed to load or parse input file.", exit_code=1
|
|
62
|
+
) from e
|
|
63
|
+
|
|
64
|
+
alias_map = {"aliases": proposed_domains}
|
|
65
|
+
content_str = yaml.dump(alias_map, indent=2, sort_keys=True)
|
|
66
|
+
|
|
67
|
+
file_handler = FileHandler(str(repo_root))
|
|
68
|
+
|
|
69
|
+
try:
|
|
70
|
+
# Resolve to a repo-relative string for FileHandler
|
|
71
|
+
rel_output = str(
|
|
72
|
+
output_path.resolve().relative_to(repo_root.resolve())
|
|
73
|
+
).replace("\\", "/")
|
|
74
|
+
|
|
75
|
+
# Governed write: checks IntentGuard and logs the event
|
|
76
|
+
file_handler.write_runtime_text(rel_output, content_str)
|
|
77
|
+
|
|
78
|
+
logger.info(
|
|
79
|
+
"Successfully generated alias map with %s entries.", len(proposed_domains)
|
|
80
|
+
)
|
|
81
|
+
logger.info(" -> Saved to: %s via FileHandler", rel_output)
|
|
82
|
+
|
|
83
|
+
except ValueError:
|
|
84
|
+
logger.error(
|
|
85
|
+
"Security Violation: Attempted to write alias map to ungoverned path: %s",
|
|
86
|
+
output_path,
|
|
87
|
+
)
|
|
88
|
+
raise GenerateCorrectionMapError("Path boundary violation.", exit_code=1)
|
|
89
|
+
except Exception as e:
|
|
90
|
+
logger.error("Failed to persist alias map: %s", e)
|
|
91
|
+
raise GenerateCorrectionMapError(f"Persistence failure: {e}", exit_code=1)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
if __name__ == "__main__":
|
|
95
|
+
try:
|
|
96
|
+
generate_maps()
|
|
97
|
+
except GenerateCorrectionMapError as exc:
|
|
98
|
+
raise SystemExit(exc.exit_code) from exc
|