soloforge 1.2.8 → 1.2.10
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.
- package/README.md +105 -321
- package/dist/adapters/claude_code/claude_md.d.ts +5 -0
- package/dist/adapters/claude_code/claude_md.d.ts.map +1 -1
- package/dist/adapters/claude_code/claude_md.js +6 -0
- package/dist/adapters/claude_code/claude_md.js.map +1 -1
- package/dist/adapters/claude_code/hooks.d.ts +4 -0
- package/dist/adapters/claude_code/hooks.d.ts.map +1 -1
- package/dist/adapters/claude_code/hooks.js +5 -0
- package/dist/adapters/claude_code/hooks.js.map +1 -1
- package/dist/adapters/claude_code/server.d.ts.map +1 -1
- package/dist/adapters/claude_code/server.js +9 -21
- package/dist/adapters/claude_code/server.js.map +1 -1
- package/dist/adapters/claude_code/tools.d.ts +5 -0
- package/dist/adapters/claude_code/tools.d.ts.map +1 -1
- package/dist/adapters/claude_code/tools.js +619 -205
- package/dist/adapters/claude_code/tools.js.map +1 -1
- package/dist/adapters/codex/codex_config.d.ts +9 -0
- package/dist/adapters/codex/codex_config.d.ts.map +1 -1
- package/dist/adapters/codex/codex_config.js +11 -3
- package/dist/adapters/codex/codex_config.js.map +1 -1
- package/dist/adapters/codex/codex_rules.d.ts +5 -0
- package/dist/adapters/codex/codex_rules.d.ts.map +1 -1
- package/dist/adapters/codex/codex_rules.js +8 -1
- package/dist/adapters/codex/codex_rules.js.map +1 -1
- package/dist/adapters/shared/workflow_template.d.ts +5 -0
- package/dist/adapters/shared/workflow_template.d.ts.map +1 -1
- package/dist/adapters/shared/workflow_template.js +32 -79
- package/dist/adapters/shared/workflow_template.js.map +1 -1
- package/dist/adapters/trae/trae_config.d.ts +4 -0
- package/dist/adapters/trae/trae_config.d.ts.map +1 -1
- package/dist/adapters/trae/trae_config.js +5 -7
- package/dist/adapters/trae/trae_config.js.map +1 -1
- package/dist/adapters/trae/trae_rules.d.ts +5 -0
- package/dist/adapters/trae/trae_rules.d.ts.map +1 -1
- package/dist/adapters/trae/trae_rules.js +7 -1
- package/dist/adapters/trae/trae_rules.js.map +1 -1
- package/dist/bin/config_commands.d.ts +33 -0
- package/dist/bin/config_commands.d.ts.map +1 -0
- package/dist/bin/config_commands.js +222 -0
- package/dist/bin/config_commands.js.map +1 -0
- package/dist/bin/soloforge.js +609 -119
- package/dist/bin/soloforge.js.map +1 -1
- package/dist/engine/artifact_contract_registry.d.ts +138 -0
- package/dist/engine/artifact_contract_registry.d.ts.map +1 -0
- package/dist/engine/artifact_contract_registry.js +427 -0
- package/dist/engine/artifact_contract_registry.js.map +1 -0
- package/dist/engine/audit_pool.d.ts +40 -0
- package/dist/engine/audit_pool.d.ts.map +1 -1
- package/dist/engine/audit_pool.js +37 -1
- package/dist/engine/audit_pool.js.map +1 -1
- package/dist/engine/audit_sampler.d.ts +5 -0
- package/dist/engine/audit_sampler.d.ts.map +1 -1
- package/dist/engine/audit_sampler.js +6 -0
- package/dist/engine/audit_sampler.js.map +1 -1
- package/dist/engine/audit_verifier.d.ts.map +1 -1
- package/dist/engine/audit_verifier.js +5 -1
- package/dist/engine/audit_verifier.js.map +1 -1
- package/dist/engine/batch1_manifest.d.ts +61 -0
- package/dist/engine/batch1_manifest.d.ts.map +1 -0
- package/dist/engine/batch1_manifest.js +220 -0
- package/dist/engine/batch1_manifest.js.map +1 -0
- package/dist/engine/batch1_reality_gate.d.ts +40 -0
- package/dist/engine/batch1_reality_gate.d.ts.map +1 -0
- package/dist/engine/batch1_reality_gate.js +290 -0
- package/dist/engine/batch1_reality_gate.js.map +1 -0
- package/dist/engine/batch1_scenario_registry.d.ts +62 -0
- package/dist/engine/batch1_scenario_registry.d.ts.map +1 -0
- package/dist/engine/batch1_scenario_registry.js +392 -0
- package/dist/engine/batch1_scenario_registry.js.map +1 -0
- package/dist/engine/batch1_scenario_runners.d.ts +42 -0
- package/dist/engine/batch1_scenario_runners.d.ts.map +1 -0
- package/dist/engine/batch1_scenario_runners.js +292 -0
- package/dist/engine/batch1_scenario_runners.js.map +1 -0
- package/dist/engine/capability_action_advisor.d.ts +3 -0
- package/dist/engine/capability_action_advisor.d.ts.map +1 -1
- package/dist/engine/capability_action_advisor.js +10 -0
- package/dist/engine/capability_action_advisor.js.map +1 -1
- package/dist/engine/capability_registry.d.ts +21 -0
- package/dist/engine/capability_registry.d.ts.map +1 -1
- package/dist/engine/capability_registry.js +113 -0
- package/dist/engine/capability_registry.js.map +1 -1
- package/dist/engine/capability_state_store.d.ts +63 -0
- package/dist/engine/capability_state_store.d.ts.map +1 -1
- package/dist/engine/capability_state_store.js +49 -1
- package/dist/engine/capability_state_store.js.map +1 -1
- package/dist/engine/change_coordinator.d.ts.map +1 -1
- package/dist/engine/change_coordinator.js +5 -4
- package/dist/engine/change_coordinator.js.map +1 -1
- package/dist/engine/classifier.d.ts +15 -5
- package/dist/engine/classifier.d.ts.map +1 -1
- package/dist/engine/classifier.js +70 -69
- package/dist/engine/classifier.js.map +1 -1
- package/dist/engine/code_reviewer.d.ts +14 -0
- package/dist/engine/code_reviewer.d.ts.map +1 -1
- package/dist/engine/code_reviewer.js +109 -10
- package/dist/engine/code_reviewer.js.map +1 -1
- package/dist/engine/cognitive_anchor.d.ts +14 -0
- package/dist/engine/cognitive_anchor.d.ts.map +1 -1
- package/dist/engine/cognitive_anchor.js +26 -2
- package/dist/engine/cognitive_anchor.js.map +1 -1
- package/dist/engine/command_execution_contract.d.ts +226 -0
- package/dist/engine/command_execution_contract.d.ts.map +1 -0
- package/dist/engine/command_execution_contract.js +571 -0
- package/dist/engine/command_execution_contract.js.map +1 -0
- package/dist/engine/confidence_scorer.d.ts.map +1 -1
- package/dist/engine/confidence_scorer.js +1 -0
- package/dist/engine/confidence_scorer.js.map +1 -1
- package/dist/engine/config_precedence_contract.d.ts +269 -0
- package/dist/engine/config_precedence_contract.d.ts.map +1 -0
- package/dist/engine/config_precedence_contract.js +948 -0
- package/dist/engine/config_precedence_contract.js.map +1 -0
- package/dist/engine/conflict_gate.d.ts +13 -0
- package/dist/engine/conflict_gate.d.ts.map +1 -1
- package/dist/engine/conflict_gate.js +20 -2
- package/dist/engine/conflict_gate.js.map +1 -1
- package/dist/engine/consumable_asset_registry.d.ts +46 -0
- package/dist/engine/consumable_asset_registry.d.ts.map +1 -0
- package/dist/engine/consumable_asset_registry.js +758 -0
- package/dist/engine/consumable_asset_registry.js.map +1 -0
- package/dist/engine/contract_guard.d.ts +4 -0
- package/dist/engine/contract_guard.d.ts.map +1 -1
- package/dist/engine/contract_guard.js +15 -7
- package/dist/engine/contract_guard.js.map +1 -1
- package/dist/engine/convention_detector.d.ts.map +1 -1
- package/dist/engine/convention_detector.js +5 -2
- package/dist/engine/convention_detector.js.map +1 -1
- package/dist/engine/core_engineering_principles.d.ts +155 -0
- package/dist/engine/core_engineering_principles.d.ts.map +1 -0
- package/dist/engine/core_engineering_principles.js +426 -0
- package/dist/engine/core_engineering_principles.js.map +1 -0
- package/dist/engine/debt_reporter.d.ts.map +1 -1
- package/dist/engine/debt_reporter.js +3 -1
- package/dist/engine/debt_reporter.js.map +1 -1
- package/dist/engine/debt_tracker.d.ts.map +1 -1
- package/dist/engine/debt_tracker.js +9 -3
- package/dist/engine/debt_tracker.js.map +1 -1
- package/dist/engine/debugger.d.ts.map +1 -1
- package/dist/engine/debugger.js +2 -0
- package/dist/engine/debugger.js.map +1 -1
- package/dist/engine/decision_contract.d.ts +11 -2
- package/dist/engine/decision_contract.d.ts.map +1 -1
- package/dist/engine/decision_contract.js +17 -2
- package/dist/engine/decision_contract.js.map +1 -1
- package/dist/engine/delivery.d.ts +7 -0
- package/dist/engine/delivery.d.ts.map +1 -1
- package/dist/engine/delivery.js +89 -36
- package/dist/engine/delivery.js.map +1 -1
- package/dist/engine/dependency_scanner.d.ts.map +1 -1
- package/dist/engine/dependency_scanner.js +14 -9
- package/dist/engine/dependency_scanner.js.map +1 -1
- package/dist/engine/developer_sovereignty.d.ts.map +1 -1
- package/dist/engine/developer_sovereignty.js +8 -2
- package/dist/engine/developer_sovereignty.js.map +1 -1
- package/dist/engine/diff_ownership.d.ts.map +1 -1
- package/dist/engine/diff_ownership.js +8 -0
- package/dist/engine/diff_ownership.js.map +1 -1
- package/dist/engine/diff_ownership_store.d.ts +26 -10
- package/dist/engine/diff_ownership_store.d.ts.map +1 -1
- package/dist/engine/diff_ownership_store.js +47 -20
- package/dist/engine/diff_ownership_store.js.map +1 -1
- package/dist/engine/dual_layer_mechanism_registry.d.ts +66 -0
- package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -0
- package/dist/engine/dual_layer_mechanism_registry.js +1077 -0
- package/dist/engine/dual_layer_mechanism_registry.js.map +1 -0
- package/dist/engine/escape_report.d.ts +50 -0
- package/dist/engine/escape_report.d.ts.map +1 -1
- package/dist/engine/escape_report.js +38 -0
- package/dist/engine/escape_report.js.map +1 -1
- package/dist/engine/evolver.d.ts.map +1 -1
- package/dist/engine/evolver.js +12 -2
- package/dist/engine/evolver.js.map +1 -1
- package/dist/engine/exploration.d.ts.map +1 -1
- package/dist/engine/exploration.js +87 -0
- package/dist/engine/exploration.js.map +1 -1
- package/dist/engine/failure_classifier.d.ts.map +1 -1
- package/dist/engine/failure_classifier.js +8 -0
- package/dist/engine/failure_classifier.js.map +1 -1
- package/dist/engine/feasibility_checker.d.ts +8 -0
- package/dist/engine/feasibility_checker.d.ts.map +1 -1
- package/dist/engine/feasibility_checker.js +12 -0
- package/dist/engine/feasibility_checker.js.map +1 -1
- package/dist/engine/git_deps.d.ts +4 -1
- package/dist/engine/git_deps.d.ts.map +1 -1
- package/dist/engine/git_deps.js +5 -1
- package/dist/engine/git_deps.js.map +1 -1
- package/dist/engine/governance_report.d.ts +57 -1
- package/dist/engine/governance_report.d.ts.map +1 -1
- package/dist/engine/governance_report.js +91 -1
- package/dist/engine/governance_report.js.map +1 -1
- package/dist/engine/impact_analyzer.d.ts.map +1 -1
- package/dist/engine/impact_analyzer.js +5 -1
- package/dist/engine/impact_analyzer.js.map +1 -1
- package/dist/engine/implementation_roadmap_registry.d.ts +105 -0
- package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -0
- package/dist/engine/implementation_roadmap_registry.js +813 -0
- package/dist/engine/implementation_roadmap_registry.js.map +1 -0
- package/dist/engine/input_material_contract_registry.d.ts +185 -0
- package/dist/engine/input_material_contract_registry.d.ts.map +1 -0
- package/dist/engine/input_material_contract_registry.js +563 -0
- package/dist/engine/input_material_contract_registry.js.map +1 -0
- package/dist/engine/intent_expander.d.ts +8 -27
- package/dist/engine/intent_expander.d.ts.map +1 -1
- package/dist/engine/intent_expander.js +1170 -139
- package/dist/engine/intent_expander.js.map +1 -1
- package/dist/engine/intent_router.d.ts +82 -0
- package/dist/engine/intent_router.d.ts.map +1 -0
- package/dist/engine/intent_router.js +458 -0
- package/dist/engine/intent_router.js.map +1 -0
- package/dist/engine/io_controller.d.ts.map +1 -1
- package/dist/engine/io_controller.js +25 -13
- package/dist/engine/io_controller.js.map +1 -1
- package/dist/engine/java_quality_guard.d.ts.map +1 -1
- package/dist/engine/java_quality_guard.js +8 -4
- package/dist/engine/java_quality_guard.js.map +1 -1
- package/dist/engine/job_manager.d.ts +35 -0
- package/dist/engine/job_manager.d.ts.map +1 -1
- package/dist/engine/job_manager.js +53 -9
- package/dist/engine/job_manager.js.map +1 -1
- package/dist/engine/knowledge_config_loader.d.ts +12 -1
- package/dist/engine/knowledge_config_loader.d.ts.map +1 -1
- package/dist/engine/knowledge_config_loader.js +50 -10
- package/dist/engine/knowledge_config_loader.js.map +1 -1
- package/dist/engine/knowledge_injection_boundary.d.ts +56 -0
- package/dist/engine/knowledge_injection_boundary.d.ts.map +1 -0
- package/dist/engine/knowledge_injection_boundary.js +561 -0
- package/dist/engine/knowledge_injection_boundary.js.map +1 -0
- package/dist/engine/knowledge_manager.d.ts +73 -0
- package/dist/engine/knowledge_manager.d.ts.map +1 -1
- package/dist/engine/knowledge_manager.js +163 -21
- package/dist/engine/knowledge_manager.js.map +1 -1
- package/dist/engine/knowledge_sovereignty.d.ts +1 -0
- package/dist/engine/knowledge_sovereignty.d.ts.map +1 -1
- package/dist/engine/knowledge_sovereignty.js +8 -3
- package/dist/engine/knowledge_sovereignty.js.map +1 -1
- package/dist/engine/llm_gateway.d.ts +74 -3
- package/dist/engine/llm_gateway.d.ts.map +1 -1
- package/dist/engine/llm_gateway.js +75 -4
- package/dist/engine/llm_gateway.js.map +1 -1
- package/dist/engine/main_path_integration_contract.d.ts +383 -0
- package/dist/engine/main_path_integration_contract.d.ts.map +1 -0
- package/dist/engine/main_path_integration_contract.js +1581 -0
- package/dist/engine/main_path_integration_contract.js.map +1 -0
- package/dist/engine/mechanism_contract_registry.d.ts +59 -0
- package/dist/engine/mechanism_contract_registry.d.ts.map +1 -0
- package/dist/engine/mechanism_contract_registry.js +484 -0
- package/dist/engine/mechanism_contract_registry.js.map +1 -0
- package/dist/engine/migration_guard.d.ts.map +1 -1
- package/dist/engine/migration_guard.js +24 -15
- package/dist/engine/migration_guard.js.map +1 -1
- package/dist/engine/mutation_audit.d.ts +10 -0
- package/dist/engine/mutation_audit.d.ts.map +1 -1
- package/dist/engine/mutation_audit.js +19 -2
- package/dist/engine/mutation_audit.js.map +1 -1
- package/dist/engine/observability.d.ts.map +1 -1
- package/dist/engine/observability.js +17 -6
- package/dist/engine/observability.js.map +1 -1
- package/dist/engine/onboarding.d.ts.map +1 -1
- package/dist/engine/onboarding.js +20 -4
- package/dist/engine/onboarding.js.map +1 -1
- package/dist/engine/policy_drift_detector.d.ts +6 -0
- package/dist/engine/policy_drift_detector.d.ts.map +1 -1
- package/dist/engine/policy_drift_detector.js +16 -0
- package/dist/engine/policy_drift_detector.js.map +1 -1
- package/dist/engine/privacy_secret_contract.d.ts +320 -0
- package/dist/engine/privacy_secret_contract.d.ts.map +1 -0
- package/dist/engine/privacy_secret_contract.js +874 -0
- package/dist/engine/privacy_secret_contract.js.map +1 -0
- package/dist/engine/regression_matrix.d.ts +21 -8
- package/dist/engine/regression_matrix.d.ts.map +1 -1
- package/dist/engine/regression_matrix.js +37 -8
- package/dist/engine/regression_matrix.js.map +1 -1
- package/dist/engine/risk_sampler.d.ts +6 -0
- package/dist/engine/risk_sampler.d.ts.map +1 -1
- package/dist/engine/risk_sampler.js +9 -0
- package/dist/engine/risk_sampler.js.map +1 -1
- package/dist/engine/runtime_safety.d.ts.map +1 -1
- package/dist/engine/runtime_safety.js +7 -3
- package/dist/engine/runtime_safety.js.map +1 -1
- package/dist/engine/scaffolder.d.ts.map +1 -1
- package/dist/engine/scaffolder.js +7 -1
- package/dist/engine/scaffolder.js.map +1 -1
- package/dist/engine/scope_controller.d.ts.map +1 -1
- package/dist/engine/scope_controller.js +12 -1
- package/dist/engine/scope_controller.js.map +1 -1
- package/dist/engine/scope_lease.d.ts +43 -0
- package/dist/engine/scope_lease.d.ts.map +1 -1
- package/dist/engine/scope_lease.js +44 -0
- package/dist/engine/scope_lease.js.map +1 -1
- package/dist/engine/semantic_evidence.d.ts +6 -0
- package/dist/engine/semantic_evidence.d.ts.map +1 -1
- package/dist/engine/semantic_evidence.js +9 -0
- package/dist/engine/semantic_evidence.js.map +1 -1
- package/dist/engine/task_context.d.ts +36 -1
- package/dist/engine/task_context.d.ts.map +1 -1
- package/dist/engine/task_context.js +252 -13
- package/dist/engine/task_context.js.map +1 -1
- package/dist/engine/task_planner.d.ts.map +1 -1
- package/dist/engine/task_planner.js +13 -3
- package/dist/engine/task_planner.js.map +1 -1
- package/dist/engine/team_awareness.d.ts.map +1 -1
- package/dist/engine/team_awareness.js +8 -7
- package/dist/engine/team_awareness.js.map +1 -1
- package/dist/engine/template_mechanism_auditor.d.ts +93 -0
- package/dist/engine/template_mechanism_auditor.d.ts.map +1 -0
- package/dist/engine/template_mechanism_auditor.js +622 -0
- package/dist/engine/template_mechanism_auditor.js.map +1 -0
- package/dist/engine/test_generator.d.ts.map +1 -1
- package/dist/engine/test_generator.js +6 -0
- package/dist/engine/test_generator.js.map +1 -1
- package/dist/engine/test_quality.d.ts +6 -0
- package/dist/engine/test_quality.d.ts.map +1 -1
- package/dist/engine/test_quality.js +26 -10
- package/dist/engine/test_quality.js.map +1 -1
- package/dist/engine/tool_invocation_contract_registry.d.ts +136 -0
- package/dist/engine/tool_invocation_contract_registry.d.ts.map +1 -0
- package/dist/engine/tool_invocation_contract_registry.js +731 -0
- package/dist/engine/tool_invocation_contract_registry.js.map +1 -0
- package/dist/engine/traceability.d.ts +3 -0
- package/dist/engine/traceability.d.ts.map +1 -1
- package/dist/engine/traceability.js +12 -4
- package/dist/engine/traceability.js.map +1 -1
- package/dist/engine/user_feedback_contract.d.ts +162 -0
- package/dist/engine/user_feedback_contract.d.ts.map +1 -0
- package/dist/engine/user_feedback_contract.js +356 -0
- package/dist/engine/user_feedback_contract.js.map +1 -0
- package/dist/engine/verifier.d.ts +6 -1
- package/dist/engine/verifier.d.ts.map +1 -1
- package/dist/engine/verifier.js +114 -1
- package/dist/engine/verifier.js.map +1 -1
- package/dist/engine/workflow_contract_registry.d.ts +70 -0
- package/dist/engine/workflow_contract_registry.d.ts.map +1 -0
- package/dist/engine/workflow_contract_registry.js +501 -0
- package/dist/engine/workflow_contract_registry.js.map +1 -0
- package/dist/engine/workspace_resumer.d.ts.map +1 -1
- package/dist/engine/workspace_resumer.js +8 -0
- package/dist/engine/workspace_resumer.js.map +1 -1
- package/dist/engine/zero_config_init.d.ts +67 -2
- package/dist/engine/zero_config_init.d.ts.map +1 -1
- package/dist/engine/zero_config_init.js +410 -28
- package/dist/engine/zero_config_init.js.map +1 -1
- package/dist/git/operations.d.ts +101 -0
- package/dist/git/operations.d.ts.map +1 -1
- package/dist/git/operations.js +125 -9
- package/dist/git/operations.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +16 -5
- package/dist/index.js.map +1 -1
- package/dist/knowledge/conflict_detector.d.ts +6 -0
- package/dist/knowledge/conflict_detector.d.ts.map +1 -1
- package/dist/knowledge/conflict_detector.js +7 -0
- package/dist/knowledge/conflict_detector.js.map +1 -1
- package/dist/knowledge/health_checker.d.ts +16 -0
- package/dist/knowledge/health_checker.d.ts.map +1 -1
- package/dist/knowledge/health_checker.js +24 -1
- package/dist/knowledge/health_checker.js.map +1 -1
- package/dist/knowledge/index_manager.d.ts +140 -2
- package/dist/knowledge/index_manager.d.ts.map +1 -1
- package/dist/knowledge/index_manager.js +186 -26
- package/dist/knowledge/index_manager.js.map +1 -1
- package/dist/knowledge/loader.d.ts +8 -1
- package/dist/knowledge/loader.d.ts.map +1 -1
- package/dist/knowledge/loader.js +56 -2
- package/dist/knowledge/loader.js.map +1 -1
- package/dist/knowledge/writer.d.ts +49 -1
- package/dist/knowledge/writer.d.ts.map +1 -1
- package/dist/knowledge/writer.js +55 -1
- package/dist/knowledge/writer.js.map +1 -1
- package/dist/types.d.ts +255 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +29 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +7 -7
- package/templates/knowledge/checklists//344/270/273/351/223/276/350/267/257/346/216/245/345/205/245/351/252/214/346/224/266/346/270/205/345/215/225.md +16 -0
- package/templates/knowledge/checklists//345/267/245/344/275/234/346/265/201/351/252/214/346/224/266/346/270/205/345/215/225.md +17 -0
- package/templates/knowledge/checklists//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214/351/252/214/346/224/266/346/270/205/345/215/225.md +43 -0
- package/templates/knowledge/checklists//347/237/245/350/257/206/346/263/250/345/205/245/351/252/214/346/224/266/346/270/205/345/215/225.md +17 -0
- package/templates/knowledge/checklists//351/232/220/347/247/201/345/256/241/346/237/245/346/270/205/345/215/225.md +15 -0
- package/templates/knowledge/checklists//351/252/214/350/257/201/351/252/214/346/224/266/346/270/205/345/215/225.md +16 -0
- package/templates/knowledge/patterns/core//345/206/263/347/255/226/347/275/221/345/205/263.md +1 -0
- package/templates/knowledge/procedures//344/270/273/351/223/276/350/267/257/346/216/245/345/205/245/351/252/214/350/257/201/346/265/201/347/250/213.md +23 -0
- package/templates/knowledge/procedures//345/221/275/344/273/244/346/211/247/350/241/214/346/265/201/347/250/213.md +19 -0
- package/templates/knowledge/procedures//345/267/245/345/205/267/350/260/203/347/224/250/346/265/201/347/250/213.md +15 -0
- package/templates/knowledge/procedures//346/204/217/345/233/276/350/267/257/347/224/261/346/265/201/347/250/213.md +15 -0
- package/templates/knowledge/procedures//346/272/220/347/240/201/345/216/237/345/236/213/344/272/244/344/273/230/346/265/201/347/250/213.md +1 -1
- package/templates/knowledge/procedures//347/274/226/347/240/201/345/211/215/346/276/204/346/270/205/346/265/201/347/250/213.md +53 -0
- package/templates/knowledge/rules//344/272/247/347/211/251/345/245/221/347/272/246/350/247/204/345/210/231.md +21 -0
- package/templates/knowledge/rules//345/221/275/344/273/244/346/211/247/350/241/214/350/247/204/345/210/231.md +25 -0
- package/templates/knowledge/rules//345/267/245/344/275/234/346/265/201/345/245/221/347/272/246/350/247/204/345/210/231.md +20 -0
- package/templates/knowledge/rules//345/267/245/345/205/267/350/260/203/347/224/250/350/247/204/345/210/231.md +25 -0
- package/templates/knowledge/rules//346/204/217/345/233/276/350/267/257/347/224/261/350/247/204/345/210/231.md +26 -0
- package/templates/knowledge/rules//346/211/247/350/241/214/345/256/210/345/215/253/350/257/204/344/274/260/350/247/204/345/210/231.md +24 -0
- package/templates/knowledge/rules//346/225/217/346/204/237/344/277/241/346/201/257/345/244/204/347/220/206/350/247/204/345/210/231.md +20 -0
- package/templates/knowledge/rules//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214/345/216/237/345/210/231.md +125 -0
- package/templates/knowledge/rules//346/263/250/345/206/214/350/241/250/345/237/272/347/241/200/350/256/276/346/226/275/350/247/204/345/210/231.md +26 -0
- package/templates/knowledge/rules//347/224/250/346/210/267/345/217/215/351/246/210/345/245/221/347/272/246/350/247/204/345/210/231.md +22 -0
- package/templates/knowledge/rules//347/237/245/350/257/206/346/263/250/345/205/245/350/276/271/347/225/214/350/247/204/345/210/231.md +25 -0
- package/templates/knowledge/rules//350/276/223/345/205/245/346/235/220/346/226/231/345/245/221/347/272/246/350/247/204/345/210/231.md +27 -0
- package/templates/knowledge/rules//351/205/215/347/275/256/344/274/230/345/205/210/347/272/247/350/247/204/345/210/231.md +22 -0
- package/templates/knowledge/rules//351/230/262/345/255/244/345/262/233/345/256/236/347/216/260/350/247/204/345/210/231.md +24 -0
- package/templates/knowledge/rules//351/233/266/351/205/215/347/275/256/345/210/235/345/247/213/345/214/226/350/247/204/345/210/231.md +28 -0
- package/templates/knowledge/rules//351/252/214/350/257/201/345/245/221/347/272/246/350/247/204/345/210/231.md +25 -0
- package/templates/knowledge/templates/{review_summary.md → /345/256/241/346/237/245/346/221/230/350/246/201.md} +1 -1
- package/templates/config.yaml +0 -53
|
@@ -0,0 +1,1077 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dual-Layer Mechanism Registry
|
|
3
|
+
*
|
|
4
|
+
* 每个机制都必须有"模板层 + 机制层"双层承载:
|
|
5
|
+
* - 模板层: 告诉 AI 应该怎么做
|
|
6
|
+
* - 机制层: 验证 AI 是否真的做到
|
|
7
|
+
*
|
|
8
|
+
* 模板层降低走偏概率;机制层负责发现、阻断、记录证据并驱动回到修复。
|
|
9
|
+
*
|
|
10
|
+
* 完成定义:
|
|
11
|
+
* Mechanism Done = template_declared + template_consumable
|
|
12
|
+
* + code_enforced + evidence_recorded + regression_guarded
|
|
13
|
+
*/
|
|
14
|
+
import fs from "node:fs";
|
|
15
|
+
import path from "node:path";
|
|
16
|
+
import { listBuiltinConsumableAssets } from "./consumable_asset_registry.js";
|
|
17
|
+
import { listMechanismContracts } from "./mechanism_contract_registry.js";
|
|
18
|
+
import { listWorkflowContracts } from "./workflow_contract_registry.js";
|
|
19
|
+
import { getAllCapabilities } from "./capability_registry.js";
|
|
20
|
+
// ── 已知注册表名称 ──
|
|
21
|
+
const KNOWN_REGISTRIES = new Set([
|
|
22
|
+
"mechanism_contract_registry",
|
|
23
|
+
"workflow_contract_registry",
|
|
24
|
+
"tool_invocation_contract_registry",
|
|
25
|
+
"consumable_asset_registry",
|
|
26
|
+
"capability_registry",
|
|
27
|
+
"implementation_roadmap_registry",
|
|
28
|
+
"artifact_contract_registry",
|
|
29
|
+
"input_material_contract_registry",
|
|
30
|
+
"main_path_integration_contract",
|
|
31
|
+
"command_execution_contract",
|
|
32
|
+
"config_precedence_contract",
|
|
33
|
+
"privacy_secret_contract",
|
|
34
|
+
"user_feedback_contract",
|
|
35
|
+
"decision_contract",
|
|
36
|
+
"dual_layer_mechanism_registry",
|
|
37
|
+
]);
|
|
38
|
+
// ── 契约到 LayerMap 的转换 ──
|
|
39
|
+
function contractToLayerMap(c) {
|
|
40
|
+
return {
|
|
41
|
+
mechanism_id: c.mechanism_id,
|
|
42
|
+
mechanism_name: c.mechanism_name,
|
|
43
|
+
owner_issue_id: c.owner_issue_id,
|
|
44
|
+
priority: c.priority,
|
|
45
|
+
template_assets: c.template_layer.assets,
|
|
46
|
+
template_consumers: c.template_layer.injected_routes,
|
|
47
|
+
code_enforcers: c.enforcement_layer.enforcers,
|
|
48
|
+
code_entrypoints: c.enforcement_layer.entrypoints,
|
|
49
|
+
registries: c.enforcement_layer.registries,
|
|
50
|
+
evidence_outputs: c.evidence_layer.outputs,
|
|
51
|
+
diagnostics: c.evidence_layer.diagnostic_codes,
|
|
52
|
+
tests: c.verification_layer.tests,
|
|
53
|
+
status: c.status,
|
|
54
|
+
layer_status: c.status,
|
|
55
|
+
injected_routes: c.template_layer.injected_routes,
|
|
56
|
+
injected_workflows: c.template_layer.injected_workflows,
|
|
57
|
+
target_hosts: c.template_layer.target_hosts,
|
|
58
|
+
language_policy: c.template_layer.language_policy,
|
|
59
|
+
state_effects: c.enforcement_layer.state_effects,
|
|
60
|
+
hard_fail_conditions: c.enforcement_layer.hard_fail_conditions,
|
|
61
|
+
degradation_behavior: c.enforcement_layer.degradation_behavior,
|
|
62
|
+
reports: c.evidence_layer.reports,
|
|
63
|
+
task_context_facts: c.evidence_layer.task_context_facts,
|
|
64
|
+
runtime_checks: c.verification_layer.runtime_checks,
|
|
65
|
+
regression_cases: c.verification_layer.regression_cases,
|
|
66
|
+
drift_checks: c.verification_layer.drift_checks,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
// ── Dual-Layer Mechanism Contracts (P0/P1/P2) ──
|
|
70
|
+
const MECHANISM_CONTRACTS = [
|
|
71
|
+
// ── 1. 意图路由 ──
|
|
72
|
+
{
|
|
73
|
+
mechanism_id: "mc-intent-router",
|
|
74
|
+
mechanism_name: "意图路由",
|
|
75
|
+
owner_issue_id: "问题九",
|
|
76
|
+
priority: "P0",
|
|
77
|
+
template_layer: {
|
|
78
|
+
required: true,
|
|
79
|
+
assets: [
|
|
80
|
+
{ path: "templates/knowledge/rules/意图路由规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
81
|
+
{ path: "templates/knowledge/procedures/意图路由流程.md", asset_kind: "pipeline_procedure", consumption_mode: "supporting" },
|
|
82
|
+
],
|
|
83
|
+
injected_routes: ["code_execution", "read_only_analysis", "single_artifact", "source_extraction", "multi_stage_plan"],
|
|
84
|
+
injected_workflows: ["code_change", "planning", "review"],
|
|
85
|
+
target_hosts: ["claude_code"],
|
|
86
|
+
language_policy: "zh_first",
|
|
87
|
+
},
|
|
88
|
+
enforcement_layer: {
|
|
89
|
+
required: true,
|
|
90
|
+
enforcers: ["src/engine/intent_router.ts"],
|
|
91
|
+
registries: ["mechanism_contract_registry"],
|
|
92
|
+
entrypoints: ["routeIntent", "selectPromptTemplate"],
|
|
93
|
+
state_effects: ["route_decision → workflow selection", "execution_shape → template selection"],
|
|
94
|
+
hard_fail_conditions: ["route 未确定就进入 expand", "route 与 execution_shape 矛盾"],
|
|
95
|
+
degradation_behavior: "route 未命中时降级为 code_execution,不阻断主链路",
|
|
96
|
+
},
|
|
97
|
+
evidence_layer: {
|
|
98
|
+
outputs: ["route_decision", "execution_shape"],
|
|
99
|
+
reports: ["WorkflowTrace"],
|
|
100
|
+
diagnostic_codes: ["route-mismatch", "degraded-route"],
|
|
101
|
+
task_context_facts: ["route", "execution_shape"],
|
|
102
|
+
},
|
|
103
|
+
verification_layer: {
|
|
104
|
+
tests: ["tests/engine/intent_router.test.ts"],
|
|
105
|
+
runtime_checks: ["route_mismatch_check"],
|
|
106
|
+
regression_cases: ["unknown_route_defaults_safely", "route_template_consistency"],
|
|
107
|
+
drift_checks: ["route_decision_matches_workflow_template"],
|
|
108
|
+
},
|
|
109
|
+
status: "dual_layer_enforced",
|
|
110
|
+
},
|
|
111
|
+
// ── 2. 工作流契约 ──
|
|
112
|
+
{
|
|
113
|
+
mechanism_id: "mc-workflow-contract",
|
|
114
|
+
mechanism_name: "工作流契约",
|
|
115
|
+
owner_issue_id: "问题九",
|
|
116
|
+
priority: "P0",
|
|
117
|
+
template_layer: {
|
|
118
|
+
required: true,
|
|
119
|
+
assets: [
|
|
120
|
+
{ path: "templates/knowledge/rules/工作流契约规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
121
|
+
{ path: "templates/knowledge/checklists/工作流验收清单.md", asset_kind: "checklist", consumption_mode: "supporting" },
|
|
122
|
+
],
|
|
123
|
+
injected_routes: ["code_execution", "multi_stage_plan", "single_artifact"],
|
|
124
|
+
injected_workflows: ["code_change", "verification", "delivery"],
|
|
125
|
+
target_hosts: ["claude_code"],
|
|
126
|
+
language_policy: "zh_first",
|
|
127
|
+
},
|
|
128
|
+
enforcement_layer: {
|
|
129
|
+
required: true,
|
|
130
|
+
enforcers: ["src/engine/workflow_contract_registry.ts"],
|
|
131
|
+
registries: ["workflow_contract_registry"],
|
|
132
|
+
entrypoints: ["resolveWorkflow", "validateWorkflowContracts"],
|
|
133
|
+
state_effects: ["workflow_id → mechanism binding", "required_mechanisms → guard check"],
|
|
134
|
+
hard_fail_conditions: ["workflow 缺失 required_mechanism", "workflow 与 route 不匹配"],
|
|
135
|
+
degradation_behavior: "workflow 未命中时降级为默认 workflow,不阻断",
|
|
136
|
+
},
|
|
137
|
+
evidence_layer: {
|
|
138
|
+
outputs: ["WorkflowTrace", "governance_findings"],
|
|
139
|
+
reports: ["WorkflowValidationReport"],
|
|
140
|
+
diagnostic_codes: ["workflow-regression", "missing-required-mechanism"],
|
|
141
|
+
task_context_facts: ["workflow_id", "mutation_allowed", "required_mechanisms"],
|
|
142
|
+
},
|
|
143
|
+
verification_layer: {
|
|
144
|
+
tests: ["tests/engine/workflow_contract_registry.test.ts"],
|
|
145
|
+
runtime_checks: ["workflow_contract_validation"],
|
|
146
|
+
regression_cases: ["all_workflows_have_required_mechanisms", "workflow_route_coverage"],
|
|
147
|
+
drift_checks: ["workflow_template_matches_route"],
|
|
148
|
+
},
|
|
149
|
+
status: "dual_layer_enforced",
|
|
150
|
+
},
|
|
151
|
+
// ── 3. 知识注入边界 ──
|
|
152
|
+
{
|
|
153
|
+
mechanism_id: "mc-knowledge-injection-boundary",
|
|
154
|
+
mechanism_name: "知识注入边界",
|
|
155
|
+
owner_issue_id: "问题八",
|
|
156
|
+
priority: "P0",
|
|
157
|
+
template_layer: {
|
|
158
|
+
required: true,
|
|
159
|
+
assets: [
|
|
160
|
+
{ path: "templates/knowledge/rules/知识注入边界规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
161
|
+
{ path: "templates/knowledge/checklists/知识注入验收清单.md", asset_kind: "checklist", consumption_mode: "supporting" },
|
|
162
|
+
],
|
|
163
|
+
injected_routes: ["code_execution", "read_only_analysis", "multi_stage_plan"],
|
|
164
|
+
injected_workflows: ["code_change", "planning"],
|
|
165
|
+
target_hosts: ["claude_code"],
|
|
166
|
+
language_policy: "zh_first",
|
|
167
|
+
},
|
|
168
|
+
enforcement_layer: {
|
|
169
|
+
required: true,
|
|
170
|
+
enforcers: ["src/engine/knowledge_injection_boundary.ts"],
|
|
171
|
+
registries: ["mechanism_contract_registry"],
|
|
172
|
+
entrypoints: ["enforceKnowledgeInjectionBoundary", "validateInjectionReport"],
|
|
173
|
+
state_effects: ["required knowledge 缺失 → blocked prompt", "injection_report → governance_findings"],
|
|
174
|
+
hard_fail_conditions: ["required knowledge 缺失且无法回退", "注入校验 hard_fail"],
|
|
175
|
+
degradation_behavior: "knowledge 未命中时降级为空注入,标记 degraded",
|
|
176
|
+
},
|
|
177
|
+
evidence_layer: {
|
|
178
|
+
outputs: ["KnowledgeInjectionReport", "missing_required_knowledge"],
|
|
179
|
+
reports: ["InjectionBoundaryReport"],
|
|
180
|
+
diagnostic_codes: ["boundary-violation", "route-template-mismatch"],
|
|
181
|
+
task_context_facts: ["injected_ids", "missing_required"],
|
|
182
|
+
},
|
|
183
|
+
verification_layer: {
|
|
184
|
+
tests: ["tests/engine/knowledge_injection_boundary.test.ts", "tests/engine/intent_expander_integration.test.ts"],
|
|
185
|
+
runtime_checks: ["injection_boundary_gate"],
|
|
186
|
+
regression_cases: ["required_knowledge_blocks_when_missing", "degraded_route_still_works"],
|
|
187
|
+
drift_checks: ["injection_report_matches_filtered_entries"],
|
|
188
|
+
},
|
|
189
|
+
status: "dual_layer_enforced",
|
|
190
|
+
},
|
|
191
|
+
// ── 4. 工具调用契约 ──
|
|
192
|
+
{
|
|
193
|
+
mechanism_id: "mc-tool-invocation-contract",
|
|
194
|
+
mechanism_name: "工具调用契约",
|
|
195
|
+
owner_issue_id: "问题二十二",
|
|
196
|
+
priority: "P0",
|
|
197
|
+
template_layer: {
|
|
198
|
+
required: true,
|
|
199
|
+
assets: [
|
|
200
|
+
{ path: "templates/knowledge/rules/工具调用规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
201
|
+
{ path: "templates/knowledge/procedures/工具调用流程.md", asset_kind: "pipeline_procedure", consumption_mode: "supporting" },
|
|
202
|
+
],
|
|
203
|
+
injected_routes: ["code_execution", "multi_stage_plan"],
|
|
204
|
+
injected_workflows: ["code_change", "verification", "delivery"],
|
|
205
|
+
target_hosts: ["claude_code"],
|
|
206
|
+
language_policy: "zh_first",
|
|
207
|
+
},
|
|
208
|
+
enforcement_layer: {
|
|
209
|
+
required: true,
|
|
210
|
+
enforcers: ["src/engine/tool_invocation_contract_registry.ts"],
|
|
211
|
+
registries: ["tool_invocation_contract_registry"],
|
|
212
|
+
entrypoints: ["validateToolInvocation"],
|
|
213
|
+
state_effects: ["forbidden tool → blocked", "strict tool → requires approval"],
|
|
214
|
+
hard_fail_conditions: ["forbidden tool transition", "strict tool without approval"],
|
|
215
|
+
degradation_behavior: "tool contract 未命中时降级为 normal,不阻断",
|
|
216
|
+
},
|
|
217
|
+
evidence_layer: {
|
|
218
|
+
outputs: ["ToolInvocationFinding", "forbidden_transition"],
|
|
219
|
+
reports: ["ToolInvocationReport"],
|
|
220
|
+
diagnostic_codes: ["forbidden-tool-transition", "strict-tool-without-approval"],
|
|
221
|
+
task_context_facts: ["next_allowed_tools", "forbidden_tools"],
|
|
222
|
+
},
|
|
223
|
+
verification_layer: {
|
|
224
|
+
tests: ["tests/engine/tool_invocation_contract_registry.test.ts"],
|
|
225
|
+
runtime_checks: ["tool_transition_gate"],
|
|
226
|
+
regression_cases: ["no_forbidden_transition_allowed", "strict_tools_require_confirm"],
|
|
227
|
+
drift_checks: ["tool_contract_matches_adapter_tools"],
|
|
228
|
+
},
|
|
229
|
+
status: "dual_layer_enforced",
|
|
230
|
+
},
|
|
231
|
+
// ── 5. 验证契约 ──
|
|
232
|
+
{
|
|
233
|
+
mechanism_id: "mc-verifier",
|
|
234
|
+
mechanism_name: "验证契约",
|
|
235
|
+
owner_issue_id: "问题十二",
|
|
236
|
+
priority: "P0",
|
|
237
|
+
template_layer: {
|
|
238
|
+
required: true,
|
|
239
|
+
assets: [
|
|
240
|
+
{ path: "templates/knowledge/rules/验证契约规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
241
|
+
{ path: "templates/knowledge/checklists/验证验收清单.md", asset_kind: "checklist", consumption_mode: "supporting" },
|
|
242
|
+
],
|
|
243
|
+
injected_routes: ["code_execution", "multi_stage_plan"],
|
|
244
|
+
injected_workflows: ["verification", "delivery"],
|
|
245
|
+
target_hosts: ["claude_code"],
|
|
246
|
+
language_policy: "zh_first",
|
|
247
|
+
},
|
|
248
|
+
enforcement_layer: {
|
|
249
|
+
required: true,
|
|
250
|
+
enforcers: ["src/engine/verifier.ts"],
|
|
251
|
+
registries: ["mechanism_contract_registry"],
|
|
252
|
+
entrypoints: ["generateVerifyCommands"],
|
|
253
|
+
state_effects: ["verify → learn", "main_path_integration_failed → retrying"],
|
|
254
|
+
hard_fail_conditions: ["build failed", "tests failed", "integration check failed"],
|
|
255
|
+
degradation_behavior: "无 build/test 命令时降级为 plan_only,不阻断",
|
|
256
|
+
},
|
|
257
|
+
evidence_layer: {
|
|
258
|
+
outputs: ["VerifyResult", "evidence"],
|
|
259
|
+
reports: ["VerificationReport", "CorePrinciplesReport"],
|
|
260
|
+
diagnostic_codes: ["verification-strategy-mismatch", "evidence-level-insufficient"],
|
|
261
|
+
task_context_facts: ["verification_result", "build_passed", "tests_passed"],
|
|
262
|
+
},
|
|
263
|
+
verification_layer: {
|
|
264
|
+
tests: ["tests/engine/verifier_phase25.test.ts"],
|
|
265
|
+
runtime_checks: ["verification_gate"],
|
|
266
|
+
regression_cases: ["verify_generates_correct_commands", "verify_handles_no_build_gracefully"],
|
|
267
|
+
drift_checks: ["verify_output_matches_acceptance"],
|
|
268
|
+
},
|
|
269
|
+
status: "dual_layer_enforced",
|
|
270
|
+
},
|
|
271
|
+
// ── 6. 主链路接入 ──
|
|
272
|
+
{
|
|
273
|
+
mechanism_id: "mc-main-path-integration",
|
|
274
|
+
mechanism_name: "主链路接入防孤岛",
|
|
275
|
+
owner_issue_id: "问题四十四",
|
|
276
|
+
priority: "P0",
|
|
277
|
+
template_layer: {
|
|
278
|
+
required: true,
|
|
279
|
+
assets: [
|
|
280
|
+
{ path: "templates/knowledge/rules/防孤岛实现规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
281
|
+
{ path: "templates/knowledge/procedures/主链路接入验证流程.md", asset_kind: "pipeline_procedure", consumption_mode: "required" },
|
|
282
|
+
{ path: "templates/knowledge/checklists/主链路接入验收清单.md", asset_kind: "checklist", consumption_mode: "supporting" },
|
|
283
|
+
],
|
|
284
|
+
injected_routes: ["code_execution", "multi_stage_plan"],
|
|
285
|
+
injected_workflows: ["verification", "delivery"],
|
|
286
|
+
target_hosts: ["claude_code"],
|
|
287
|
+
language_policy: "zh_first",
|
|
288
|
+
},
|
|
289
|
+
enforcement_layer: {
|
|
290
|
+
required: true,
|
|
291
|
+
enforcers: ["src/engine/main_path_integration_contract.ts"],
|
|
292
|
+
registries: ["main_path_integration_contract"],
|
|
293
|
+
entrypoints: ["orphanGate", "auditIntegration", "validateMainPathIntegration"],
|
|
294
|
+
state_effects: ["orphan detected → retrying", "integration_passed → done"],
|
|
295
|
+
hard_fail_conditions: ["orphan module detected", "integration test missing for non-trivial module"],
|
|
296
|
+
degradation_behavior: "integration check 不可用时降级为 advisory",
|
|
297
|
+
},
|
|
298
|
+
evidence_layer: {
|
|
299
|
+
outputs: ["IntegrationAuditReport", "IntegrationFinding", "orphan_id"],
|
|
300
|
+
reports: ["IntegrationReport"],
|
|
301
|
+
diagnostic_codes: ["orphan-module", "test-only-module", "unreachable-capability"],
|
|
302
|
+
task_context_facts: ["integration_result", "orphan_modules"],
|
|
303
|
+
},
|
|
304
|
+
verification_layer: {
|
|
305
|
+
tests: ["tests/adapters/main_path_integration_gate.test.ts"],
|
|
306
|
+
runtime_checks: ["orphan_scan", "reachability_scan"],
|
|
307
|
+
regression_cases: ["new_module_must_have_integration_test", "no_orphan_allowed"],
|
|
308
|
+
drift_checks: ["integration_coverage_matches_registry"],
|
|
309
|
+
},
|
|
310
|
+
status: "dual_layer_enforced",
|
|
311
|
+
},
|
|
312
|
+
// ── 7. 隐私边界 ──
|
|
313
|
+
{
|
|
314
|
+
mechanism_id: "mc-privacy-boundary",
|
|
315
|
+
mechanism_name: "隐私/敏感信息边界",
|
|
316
|
+
owner_issue_id: "问题三十二",
|
|
317
|
+
priority: "P1",
|
|
318
|
+
template_layer: {
|
|
319
|
+
required: true,
|
|
320
|
+
assets: [
|
|
321
|
+
{ path: "templates/knowledge/rules/敏感信息处理规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
322
|
+
{ path: "templates/knowledge/checklists/隐私审查清单.md", asset_kind: "checklist", consumption_mode: "supporting" },
|
|
323
|
+
],
|
|
324
|
+
injected_routes: ["code_execution", "source_extraction", "read_only_analysis"],
|
|
325
|
+
injected_workflows: ["code_change", "review"],
|
|
326
|
+
target_hosts: ["claude_code"],
|
|
327
|
+
language_policy: "zh_first",
|
|
328
|
+
},
|
|
329
|
+
enforcement_layer: {
|
|
330
|
+
required: true,
|
|
331
|
+
enforcers: ["src/engine/privacy_secret_contract.ts", "src/engine/scope_controller.ts"],
|
|
332
|
+
registries: ["privacy_secret_contract", "capability_registry"],
|
|
333
|
+
entrypoints: ["scanTextSensitivity", "evaluatePrivacyGate", "redactSensitiveText"],
|
|
334
|
+
state_effects: ["secret detected → read blocked", "redaction applied to prompt"],
|
|
335
|
+
hard_fail_conditions: ["secret in prompt", "PII not redacted", "forbidden source read"],
|
|
336
|
+
degradation_behavior: "privacy scanner 不可用时保守阻断",
|
|
337
|
+
},
|
|
338
|
+
evidence_layer: {
|
|
339
|
+
outputs: ["RedactionRecord", "PrivacyFinding"],
|
|
340
|
+
reports: ["PrivacyBoundaryReport"],
|
|
341
|
+
diagnostic_codes: ["secret-leak", "pii-exposure"],
|
|
342
|
+
task_context_facts: ["sensitivity_labels", "redaction_records"],
|
|
343
|
+
},
|
|
344
|
+
verification_layer: {
|
|
345
|
+
tests: ["tests/engine/privacy_secret_contract.test.ts"],
|
|
346
|
+
runtime_checks: ["secret_scan", "pii_detection"],
|
|
347
|
+
regression_cases: ["env_file_blocked", "token_redacted", ".ssh_forbidden"],
|
|
348
|
+
drift_checks: ["privacy_rules_match_code_patterns"],
|
|
349
|
+
},
|
|
350
|
+
status: "dual_layer_enforced",
|
|
351
|
+
},
|
|
352
|
+
// ── 8. 命令执行契约 ──
|
|
353
|
+
{
|
|
354
|
+
mechanism_id: "mc-command-execution",
|
|
355
|
+
mechanism_name: "命令执行契约",
|
|
356
|
+
owner_issue_id: "问题三十三",
|
|
357
|
+
priority: "P1",
|
|
358
|
+
template_layer: {
|
|
359
|
+
required: true,
|
|
360
|
+
assets: [
|
|
361
|
+
{ path: "templates/knowledge/rules/命令执行规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
362
|
+
{ path: "templates/knowledge/procedures/命令执行流程.md", asset_kind: "pipeline_procedure", consumption_mode: "supporting" },
|
|
363
|
+
],
|
|
364
|
+
injected_routes: ["code_execution"],
|
|
365
|
+
injected_workflows: ["verification"],
|
|
366
|
+
target_hosts: ["claude_code"],
|
|
367
|
+
language_policy: "zh_first",
|
|
368
|
+
},
|
|
369
|
+
enforcement_layer: {
|
|
370
|
+
required: true,
|
|
371
|
+
enforcers: ["src/engine/command_execution_contract.ts"],
|
|
372
|
+
registries: ["command_execution_contract"],
|
|
373
|
+
entrypoints: ["classifyCommand", "validateCommandExecution"],
|
|
374
|
+
state_effects: ["destructive command → must_confirm", "unclassified command → blocked"],
|
|
375
|
+
hard_fail_conditions: ["destructive command without confirmation", "unclassified command"],
|
|
376
|
+
degradation_behavior: "command classifier 不可用时降级为 advisory",
|
|
377
|
+
},
|
|
378
|
+
evidence_layer: {
|
|
379
|
+
outputs: ["CommandClassification", "CommandExecutionResult"],
|
|
380
|
+
reports: ["CommandExecutionReport"],
|
|
381
|
+
diagnostic_codes: ["destructive-command", "unclassified-command"],
|
|
382
|
+
task_context_facts: ["command_tier", "command_classification"],
|
|
383
|
+
},
|
|
384
|
+
verification_layer: {
|
|
385
|
+
tests: ["tests/engine/command_execution_contract.test.ts"],
|
|
386
|
+
runtime_checks: ["command_classification_gate"],
|
|
387
|
+
regression_cases: ["destructive_commands_blocked", "unclassified_command_rejected"],
|
|
388
|
+
drift_checks: ["command_rules_match_classifier"],
|
|
389
|
+
},
|
|
390
|
+
status: "dual_layer_enforced",
|
|
391
|
+
},
|
|
392
|
+
// ── 9. 核心工程执行原则 ──
|
|
393
|
+
{
|
|
394
|
+
mechanism_id: "mc-core-engineering-principles",
|
|
395
|
+
mechanism_name: "核心工程执行原则",
|
|
396
|
+
owner_issue_id: "问题四十六",
|
|
397
|
+
priority: "P0",
|
|
398
|
+
template_layer: {
|
|
399
|
+
required: true,
|
|
400
|
+
assets: [
|
|
401
|
+
{ path: "templates/knowledge/rules/核心工程执行原则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
402
|
+
{ path: "templates/knowledge/checklists/核心工程执行验收清单.md", asset_kind: "checklist", consumption_mode: "supporting" },
|
|
403
|
+
{ path: "templates/knowledge/procedures/编码前澄清流程.md", asset_kind: "pipeline_procedure", consumption_mode: "supporting" },
|
|
404
|
+
],
|
|
405
|
+
injected_routes: ["code_execution", "multi_stage_plan", "single_artifact"],
|
|
406
|
+
injected_workflows: ["code_change", "verification", "review"],
|
|
407
|
+
target_hosts: ["claude_code"],
|
|
408
|
+
language_policy: "zh_first",
|
|
409
|
+
},
|
|
410
|
+
enforcement_layer: {
|
|
411
|
+
required: true,
|
|
412
|
+
enforcers: ["src/engine/core_engineering_principles.ts"],
|
|
413
|
+
registries: ["mechanism_contract_registry"],
|
|
414
|
+
entrypoints: ["checkCorePrinciples", "validateAntiCircumvention"],
|
|
415
|
+
state_effects: ["principles_failed → repair_reverify", "principles_passed → advance"],
|
|
416
|
+
hard_fail_conditions: ["required principle failed at L2+", "pseudo-satisfaction detected"],
|
|
417
|
+
degradation_behavior: "principles module 不可用时降级为 advisory,不阻断",
|
|
418
|
+
},
|
|
419
|
+
evidence_layer: {
|
|
420
|
+
outputs: ["CorePrinciplesReport", "ClarificationNeed", "AssumptionRecord", "GoalDefinition"],
|
|
421
|
+
reports: ["CorePrinciplesCheckResult"],
|
|
422
|
+
diagnostic_codes: ["principle-violation", "pseudo-satisfaction", "missing-goal-definition"],
|
|
423
|
+
task_context_facts: ["core_principles_result", "task_level"],
|
|
424
|
+
},
|
|
425
|
+
verification_layer: {
|
|
426
|
+
tests: ["tests/engine/core_engineering_principles.test.ts"],
|
|
427
|
+
runtime_checks: ["principle_gate_at_verify"],
|
|
428
|
+
regression_cases: ["L2_requires_all_principles", "anti_circumvention_catches_pseudo"],
|
|
429
|
+
drift_checks: ["principle_rules_match_code_checks"],
|
|
430
|
+
},
|
|
431
|
+
status: "dual_layer_enforced",
|
|
432
|
+
},
|
|
433
|
+
// ── 10. 交付门禁(补齐) ──
|
|
434
|
+
{
|
|
435
|
+
mechanism_id: "mc-delivery-gate",
|
|
436
|
+
mechanism_name: "交付门禁",
|
|
437
|
+
owner_issue_id: "问题十二",
|
|
438
|
+
priority: "P0",
|
|
439
|
+
template_layer: {
|
|
440
|
+
required: true,
|
|
441
|
+
assets: [
|
|
442
|
+
{ path: "templates/knowledge/procedures/验证计划流程.md", asset_kind: "pipeline_procedure", consumption_mode: "required" },
|
|
443
|
+
],
|
|
444
|
+
injected_routes: ["code_execution", "multi_stage_plan"],
|
|
445
|
+
injected_workflows: ["delivery"],
|
|
446
|
+
target_hosts: ["claude_code"],
|
|
447
|
+
language_policy: "zh_first",
|
|
448
|
+
},
|
|
449
|
+
enforcement_layer: {
|
|
450
|
+
required: true,
|
|
451
|
+
enforcers: ["src/engine/delivery.ts"],
|
|
452
|
+
registries: ["mechanism_contract_registry"],
|
|
453
|
+
entrypoints: ["deliver", "generateChangelogEntry"],
|
|
454
|
+
state_effects: ["delivery_ready → deliver", "delivery_blocked → retrying"],
|
|
455
|
+
hard_fail_conditions: ["delivery without verification", "active write lease conflict"],
|
|
456
|
+
degradation_behavior: "delivery module 不可用时降级为 manual_required",
|
|
457
|
+
},
|
|
458
|
+
evidence_layer: {
|
|
459
|
+
outputs: ["DeliveryResult", "ArtifactVerificationResult"],
|
|
460
|
+
reports: ["DeliveryReadinessReport"],
|
|
461
|
+
diagnostic_codes: ["delivery-without-verify", "lease-conflict"],
|
|
462
|
+
task_context_facts: ["delivery_status", "artifact_status"],
|
|
463
|
+
},
|
|
464
|
+
verification_layer: {
|
|
465
|
+
tests: ["tests/engine/delivery.test.ts"],
|
|
466
|
+
runtime_checks: ["delivery_readiness_gate"],
|
|
467
|
+
regression_cases: ["cannot_deliver_without_verify", "lease_conflict_blocks_delivery"],
|
|
468
|
+
drift_checks: ["delivery_contract_matches_verifier_output"],
|
|
469
|
+
},
|
|
470
|
+
status: "dual_layer_enforced",
|
|
471
|
+
},
|
|
472
|
+
// ── 11. 任务上下文生命周期(补齐) ──
|
|
473
|
+
{
|
|
474
|
+
mechanism_id: "mc-task-context-lifecycle",
|
|
475
|
+
mechanism_name: "任务上下文生命周期",
|
|
476
|
+
owner_issue_id: "问题十七",
|
|
477
|
+
priority: "P1",
|
|
478
|
+
template_layer: {
|
|
479
|
+
required: false,
|
|
480
|
+
assets: [
|
|
481
|
+
{ path: "templates/knowledge/patterns/core/任务上下文生命周期.md", asset_kind: "capability_knowledge_doc", consumption_mode: "supporting" },
|
|
482
|
+
],
|
|
483
|
+
injected_routes: ["code_execution", "multi_stage_plan", "read_only_analysis"],
|
|
484
|
+
injected_workflows: ["code_change", "verification", "delivery"],
|
|
485
|
+
target_hosts: ["claude_code"],
|
|
486
|
+
language_policy: "zh_first",
|
|
487
|
+
},
|
|
488
|
+
enforcement_layer: {
|
|
489
|
+
required: true,
|
|
490
|
+
enforcers: ["src/engine/task_context.ts"],
|
|
491
|
+
registries: ["mechanism_contract_registry"],
|
|
492
|
+
entrypoints: ["create", "updateStatus", "load"],
|
|
493
|
+
state_effects: ["status transitions", "fact accumulation"],
|
|
494
|
+
hard_fail_conditions: ["invalid status transition", "stdout/stderr in TaskContext"],
|
|
495
|
+
degradation_behavior: "TaskContext 不可用时降级为无状态模式",
|
|
496
|
+
},
|
|
497
|
+
evidence_layer: {
|
|
498
|
+
outputs: ["TaskContext"],
|
|
499
|
+
reports: ["TaskContextSnapshot"],
|
|
500
|
+
diagnostic_codes: ["invalid-transition", "forbidden-field"],
|
|
501
|
+
task_context_facts: ["status", "verification_result", "injection_report"],
|
|
502
|
+
},
|
|
503
|
+
verification_layer: {
|
|
504
|
+
tests: ["tests/engine/task_context.test.ts"],
|
|
505
|
+
runtime_checks: ["status_transition_gate"],
|
|
506
|
+
regression_cases: ["no_invalid_transition", "no_stdout_in_context"],
|
|
507
|
+
drift_checks: ["context_fields_match_spec"],
|
|
508
|
+
},
|
|
509
|
+
status: "dual_layer_enforced",
|
|
510
|
+
},
|
|
511
|
+
// ── 12. 执行守卫评估(补齐) ──
|
|
512
|
+
{
|
|
513
|
+
mechanism_id: "mc-guard-evaluation",
|
|
514
|
+
mechanism_name: "执行守卫评估",
|
|
515
|
+
owner_issue_id: "问题十一",
|
|
516
|
+
priority: "P2",
|
|
517
|
+
template_layer: {
|
|
518
|
+
required: true,
|
|
519
|
+
assets: [
|
|
520
|
+
{ path: "templates/knowledge/rules/执行守卫评估规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
521
|
+
],
|
|
522
|
+
injected_routes: ["code_execution", "multi_stage_plan"],
|
|
523
|
+
injected_workflows: ["code_change", "verification"],
|
|
524
|
+
target_hosts: ["claude_code"],
|
|
525
|
+
language_policy: "zh_first",
|
|
526
|
+
},
|
|
527
|
+
enforcement_layer: {
|
|
528
|
+
required: true,
|
|
529
|
+
enforcers: ["src/engine/verifier.ts"],
|
|
530
|
+
registries: ["mechanism_contract_registry"],
|
|
531
|
+
entrypoints: ["generateVerifyCommands"],
|
|
532
|
+
state_effects: ["guard_evaluation_executed"],
|
|
533
|
+
hard_fail_conditions: ["guard_bypass"],
|
|
534
|
+
degradation_behavior: "guard 评估集成在各契约内,无独立降级",
|
|
535
|
+
},
|
|
536
|
+
evidence_layer: {
|
|
537
|
+
outputs: ["VerifyResult"],
|
|
538
|
+
reports: ["GuardEvaluationReport"],
|
|
539
|
+
diagnostic_codes: ["guard-failure"],
|
|
540
|
+
task_context_facts: ["guard_status"],
|
|
541
|
+
},
|
|
542
|
+
verification_layer: {
|
|
543
|
+
tests: ["tests/engine/verifier_phase25.test.ts"],
|
|
544
|
+
runtime_checks: ["guard_evaluation_gate"],
|
|
545
|
+
regression_cases: ["guard_blocks_execution"],
|
|
546
|
+
drift_checks: ["guard_rules_match_verifier"],
|
|
547
|
+
},
|
|
548
|
+
status: "dual_layer_enforced",
|
|
549
|
+
},
|
|
550
|
+
// ── 13. 注册表基础设施(补齐) ──
|
|
551
|
+
{
|
|
552
|
+
mechanism_id: "mc-registry-infrastructure",
|
|
553
|
+
mechanism_name: "注册表基础设施",
|
|
554
|
+
owner_issue_id: "问题五",
|
|
555
|
+
priority: "P2",
|
|
556
|
+
template_layer: {
|
|
557
|
+
required: true,
|
|
558
|
+
assets: [
|
|
559
|
+
{ path: "templates/knowledge/rules/注册表基础设施规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
560
|
+
],
|
|
561
|
+
injected_routes: ["operation"],
|
|
562
|
+
injected_workflows: ["init"],
|
|
563
|
+
target_hosts: ["claude_code"],
|
|
564
|
+
language_policy: "zh_first",
|
|
565
|
+
},
|
|
566
|
+
enforcement_layer: {
|
|
567
|
+
required: true,
|
|
568
|
+
enforcers: [
|
|
569
|
+
"src/engine/mechanism_contract_registry.ts",
|
|
570
|
+
"src/engine/consumable_asset_registry.ts",
|
|
571
|
+
],
|
|
572
|
+
registries: ["mechanism_contract_registry", "consumable_asset_registry"],
|
|
573
|
+
entrypoints: ["listMechanismContracts", "listBuiltinConsumableAssets"],
|
|
574
|
+
state_effects: ["contract registration", "asset discovery"],
|
|
575
|
+
hard_fail_conditions: ["registry entry missing lifecycle test"],
|
|
576
|
+
degradation_behavior: "registry 不可用时整体降级",
|
|
577
|
+
},
|
|
578
|
+
evidence_layer: {
|
|
579
|
+
outputs: ["MechanismContract[]", "ConsumableAssetRef[]"],
|
|
580
|
+
reports: ["RegistryHealthReport"],
|
|
581
|
+
diagnostic_codes: ["missing-lifecycle-test"],
|
|
582
|
+
task_context_facts: [],
|
|
583
|
+
},
|
|
584
|
+
verification_layer: {
|
|
585
|
+
tests: ["tests/engine/mechanism_contract_registry.test.ts", "tests/engine/consumable_asset_registry.test.ts"],
|
|
586
|
+
runtime_checks: ["registry_health_check"],
|
|
587
|
+
regression_cases: ["all_contracts_have_lifecycle_tests"],
|
|
588
|
+
drift_checks: ["registry_entries_match_code_modules"],
|
|
589
|
+
},
|
|
590
|
+
status: "dual_layer_enforced",
|
|
591
|
+
},
|
|
592
|
+
// ── 14. 零配置初始化 ──
|
|
593
|
+
{
|
|
594
|
+
mechanism_id: "mc-zero-config-init",
|
|
595
|
+
mechanism_name: "零配置初始化",
|
|
596
|
+
owner_issue_id: "问题六",
|
|
597
|
+
priority: "P1",
|
|
598
|
+
template_layer: {
|
|
599
|
+
required: true,
|
|
600
|
+
assets: [
|
|
601
|
+
{ path: "templates/knowledge/rules/零配置初始化规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
602
|
+
],
|
|
603
|
+
injected_routes: ["operation"],
|
|
604
|
+
injected_workflows: ["init"],
|
|
605
|
+
target_hosts: ["claude_code"],
|
|
606
|
+
language_policy: "zh_first",
|
|
607
|
+
},
|
|
608
|
+
enforcement_layer: {
|
|
609
|
+
required: true,
|
|
610
|
+
enforcers: ["src/engine/zero_config_init.ts"],
|
|
611
|
+
registries: ["mechanism_contract_registry"],
|
|
612
|
+
entrypoints: ["detectFingerprint", "generateConfigDraft", "validateConfigDraft"],
|
|
613
|
+
state_effects: ["config_initialized"],
|
|
614
|
+
hard_fail_conditions: ["init without config validation"],
|
|
615
|
+
degradation_behavior: "降级为手动配置",
|
|
616
|
+
},
|
|
617
|
+
evidence_layer: {
|
|
618
|
+
outputs: ["ProjectConfig"],
|
|
619
|
+
reports: ["InitReport"],
|
|
620
|
+
diagnostic_codes: ["config-missing-field"],
|
|
621
|
+
task_context_facts: ["init_status"],
|
|
622
|
+
},
|
|
623
|
+
verification_layer: {
|
|
624
|
+
tests: ["tests/engine/zero_config_init.test.ts"],
|
|
625
|
+
runtime_checks: ["init_config_valid"],
|
|
626
|
+
regression_cases: ["init_without_interactive"],
|
|
627
|
+
drift_checks: ["init_fields_match_config"],
|
|
628
|
+
},
|
|
629
|
+
status: "dual_layer_enforced",
|
|
630
|
+
},
|
|
631
|
+
// ── 15. 输入材料契约 ──
|
|
632
|
+
{
|
|
633
|
+
mechanism_id: "mc-input-material-contract",
|
|
634
|
+
mechanism_name: "输入材料契约",
|
|
635
|
+
owner_issue_id: "问题二十三",
|
|
636
|
+
priority: "P0",
|
|
637
|
+
template_layer: {
|
|
638
|
+
required: true,
|
|
639
|
+
assets: [
|
|
640
|
+
{ path: "templates/knowledge/rules/输入材料契约规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
641
|
+
],
|
|
642
|
+
injected_routes: ["code_execution", "read_only_analysis", "source_extraction"],
|
|
643
|
+
injected_workflows: ["expand", "privacy_gate"],
|
|
644
|
+
target_hosts: ["claude_code"],
|
|
645
|
+
language_policy: "zh_first",
|
|
646
|
+
},
|
|
647
|
+
enforcement_layer: {
|
|
648
|
+
required: true,
|
|
649
|
+
enforcers: ["src/engine/input_material_contract_registry.ts"],
|
|
650
|
+
registries: ["mechanism_contract_registry"],
|
|
651
|
+
entrypoints: ["canSupportStrongConclusion", "isWriteAllowed"],
|
|
652
|
+
state_effects: ["material_validated"],
|
|
653
|
+
hard_fail_conditions: ["unregistered material source"],
|
|
654
|
+
degradation_behavior: "降级为宽松模式",
|
|
655
|
+
},
|
|
656
|
+
evidence_layer: {
|
|
657
|
+
outputs: ["InputMaterialContract[]"],
|
|
658
|
+
reports: ["MaterialValidationReport"],
|
|
659
|
+
diagnostic_codes: ["unregistered-material"],
|
|
660
|
+
task_context_facts: ["material_status"],
|
|
661
|
+
},
|
|
662
|
+
verification_layer: {
|
|
663
|
+
tests: ["tests/engine/input_material_contract_registry.test.ts"],
|
|
664
|
+
runtime_checks: ["material_contract_valid"],
|
|
665
|
+
regression_cases: ["unregistered_source_blocked"],
|
|
666
|
+
drift_checks: ["material_types_match_registry"],
|
|
667
|
+
},
|
|
668
|
+
status: "dual_layer_enforced",
|
|
669
|
+
},
|
|
670
|
+
// ── 16. 用户反馈契约(/四十四) ──
|
|
671
|
+
{
|
|
672
|
+
mechanism_id: "mc-user-feedback",
|
|
673
|
+
mechanism_name: "用户反馈契约",
|
|
674
|
+
owner_issue_id: "问题二十九",
|
|
675
|
+
priority: "P1",
|
|
676
|
+
template_layer: {
|
|
677
|
+
required: true,
|
|
678
|
+
assets: [
|
|
679
|
+
{ path: "templates/knowledge/rules/用户反馈契约规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
680
|
+
],
|
|
681
|
+
injected_routes: ["code_execution"],
|
|
682
|
+
injected_workflows: ["verify", "deliver"],
|
|
683
|
+
target_hosts: ["claude_code"],
|
|
684
|
+
language_policy: "zh_first",
|
|
685
|
+
},
|
|
686
|
+
enforcement_layer: {
|
|
687
|
+
required: true,
|
|
688
|
+
enforcers: ["src/engine/user_feedback_contract.ts"],
|
|
689
|
+
registries: ["mechanism_contract_registry"],
|
|
690
|
+
entrypoints: ["createUserFeedbackMessage", "validateUserFeedbackContract", "getAllowedFeedbackKinds"],
|
|
691
|
+
state_effects: ["feedback_generated"],
|
|
692
|
+
hard_fail_conditions: ["forbidden wording in feedback", "verification_summary masking"],
|
|
693
|
+
degradation_behavior: "降级为简单消息",
|
|
694
|
+
},
|
|
695
|
+
evidence_layer: {
|
|
696
|
+
outputs: ["UserFeedbackMessage[]", "UserFeedbackGovernanceFinding[]"],
|
|
697
|
+
reports: ["FeedbackValidationReport"],
|
|
698
|
+
diagnostic_codes: ["forbidden-wording", "severity-mismatch"],
|
|
699
|
+
task_context_facts: ["feedback_status"],
|
|
700
|
+
},
|
|
701
|
+
verification_layer: {
|
|
702
|
+
tests: ["tests/engine/user_feedback_contract.test.ts"],
|
|
703
|
+
runtime_checks: ["feedback_contract_valid"],
|
|
704
|
+
regression_cases: ["blocked_kind_for_verify"],
|
|
705
|
+
drift_checks: ["feedback_kinds_match_tools"],
|
|
706
|
+
},
|
|
707
|
+
status: "dual_layer_enforced",
|
|
708
|
+
},
|
|
709
|
+
// ── 17. 产物契约 ──
|
|
710
|
+
{
|
|
711
|
+
mechanism_id: "mc-artifact-contract",
|
|
712
|
+
mechanism_name: "产物契约",
|
|
713
|
+
owner_issue_id: "问题二十四",
|
|
714
|
+
priority: "P1",
|
|
715
|
+
template_layer: {
|
|
716
|
+
required: true,
|
|
717
|
+
assets: [
|
|
718
|
+
{ path: "templates/knowledge/rules/产物契约规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
719
|
+
],
|
|
720
|
+
injected_routes: ["code_execution", "single_artifact"],
|
|
721
|
+
injected_workflows: ["expand", "deliver"],
|
|
722
|
+
target_hosts: ["claude_code"],
|
|
723
|
+
language_policy: "zh_first",
|
|
724
|
+
},
|
|
725
|
+
enforcement_layer: {
|
|
726
|
+
required: true,
|
|
727
|
+
enforcers: ["src/engine/artifact_contract_registry.ts"],
|
|
728
|
+
registries: ["mechanism_contract_registry"],
|
|
729
|
+
entrypoints: ["canTransition", "transitionRequiresVerification"],
|
|
730
|
+
state_effects: ["artifact_created"],
|
|
731
|
+
hard_fail_conditions: ["artifact without contract", "overwrite without policy"],
|
|
732
|
+
degradation_behavior: "降级为手动产物管理",
|
|
733
|
+
},
|
|
734
|
+
evidence_layer: {
|
|
735
|
+
outputs: ["ArtifactContract[]", "OutputArtifact"],
|
|
736
|
+
reports: ["ArtifactValidationReport"],
|
|
737
|
+
diagnostic_codes: ["missing-contract", "overwrite-violation"],
|
|
738
|
+
task_context_facts: ["artifact_status"],
|
|
739
|
+
},
|
|
740
|
+
verification_layer: {
|
|
741
|
+
tests: ["tests/engine/artifact_contract_registry.test.ts"],
|
|
742
|
+
runtime_checks: ["artifact_contract_valid"],
|
|
743
|
+
regression_cases: ["no_artifact_without_contract"],
|
|
744
|
+
drift_checks: ["artifact_types_match_registry"],
|
|
745
|
+
},
|
|
746
|
+
status: "dual_layer_enforced",
|
|
747
|
+
},
|
|
748
|
+
// ── 18. 配置优先级契约 ──
|
|
749
|
+
{
|
|
750
|
+
mechanism_id: "mc-config-precedence",
|
|
751
|
+
mechanism_name: "配置优先级契约",
|
|
752
|
+
owner_issue_id: "问题三十七",
|
|
753
|
+
priority: "P1",
|
|
754
|
+
template_layer: {
|
|
755
|
+
required: true,
|
|
756
|
+
assets: [
|
|
757
|
+
{ path: "templates/knowledge/rules/配置优先级规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
758
|
+
],
|
|
759
|
+
injected_routes: ["operation"],
|
|
760
|
+
injected_workflows: ["init", "config"],
|
|
761
|
+
target_hosts: ["claude_code"],
|
|
762
|
+
language_policy: "zh_first",
|
|
763
|
+
},
|
|
764
|
+
enforcement_layer: {
|
|
765
|
+
required: true,
|
|
766
|
+
enforcers: ["src/engine/config_precedence_contract.ts"],
|
|
767
|
+
registries: ["mechanism_contract_registry"],
|
|
768
|
+
entrypoints: ["listPrecedenceRules", "getPrecedenceRank"],
|
|
769
|
+
state_effects: ["config_resolved"],
|
|
770
|
+
hard_fail_conditions: ["invalid source override", "circular dependency"],
|
|
771
|
+
degradation_behavior: "降级为默认配置",
|
|
772
|
+
},
|
|
773
|
+
evidence_layer: {
|
|
774
|
+
outputs: ["ConfigPrecedenceResult"],
|
|
775
|
+
reports: ["PrecedenceReport"],
|
|
776
|
+
diagnostic_codes: ["invalid-override", "circular-dep"],
|
|
777
|
+
task_context_facts: ["config_source"],
|
|
778
|
+
},
|
|
779
|
+
verification_layer: {
|
|
780
|
+
tests: ["tests/engine/config_precedence_contract.test.ts"],
|
|
781
|
+
runtime_checks: ["precedence_valid"],
|
|
782
|
+
regression_cases: ["no_circular_deps"],
|
|
783
|
+
drift_checks: ["precedence_rules_match_config"],
|
|
784
|
+
},
|
|
785
|
+
status: "dual_layer_enforced",
|
|
786
|
+
},
|
|
787
|
+
];
|
|
788
|
+
// ── 查询函数 ──
|
|
789
|
+
/**
|
|
790
|
+
* 列出所有机制的层级映射。
|
|
791
|
+
* @returns 机制层级映射列表
|
|
792
|
+
*/
|
|
793
|
+
export function listMechanismLayerMaps() {
|
|
794
|
+
console.error("[soloForge] 双层机制: listMechanismLayerMaps() — 共", MECHANISM_CONTRACTS.length, "个契约");
|
|
795
|
+
return MECHANISM_CONTRACTS.map(contractToLayerMap);
|
|
796
|
+
}
|
|
797
|
+
/**
|
|
798
|
+
* 根据机制 ID 查找层级映射。
|
|
799
|
+
* @param id - 机制 ID
|
|
800
|
+
* @returns 机制层级映射,未找到时返回 undefined
|
|
801
|
+
*/
|
|
802
|
+
export function findLayerMapByMechanismId(id) {
|
|
803
|
+
console.error("[soloForge] 双层机制: findLayerMapByMechanismId() — id:", id);
|
|
804
|
+
return MECHANISM_CONTRACTS.map(contractToLayerMap).find((m) => m.mechanism_id === id);
|
|
805
|
+
}
|
|
806
|
+
/**
|
|
807
|
+
* 按优先级列出机制层级映射。
|
|
808
|
+
* @param priority - 优先级(P0/P1/P2/P3)
|
|
809
|
+
* @returns 指定优先级的机制层级映射列表
|
|
810
|
+
*/
|
|
811
|
+
export function listLayerMapsByPriority(priority) {
|
|
812
|
+
console.error("[soloForge] 双层机制: listLayerMapsByPriority() — priority:", priority);
|
|
813
|
+
return MECHANISM_CONTRACTS.map(contractToLayerMap).filter((m) => m.priority === priority);
|
|
814
|
+
}
|
|
815
|
+
/**
|
|
816
|
+
* 按状态列出机制层级映射。
|
|
817
|
+
* @param status - 双层机制状态
|
|
818
|
+
* @returns 指定状态的机制层级映射列表
|
|
819
|
+
*/
|
|
820
|
+
export function listLayerMapsByStatus(status) {
|
|
821
|
+
console.error("[soloForge] 双层机制: listLayerMapsByStatus() — status:", status);
|
|
822
|
+
return MECHANISM_CONTRACTS.map(contractToLayerMap).filter((m) => m.status === status);
|
|
823
|
+
}
|
|
824
|
+
/**
|
|
825
|
+
* 检查机制的双层完整性。
|
|
826
|
+
* 验证模板层、代码层、证据、测试和注册表是否齐全。
|
|
827
|
+
* @param map - 机制层级映射
|
|
828
|
+
* @returns 双层完整性检查结果
|
|
829
|
+
*/
|
|
830
|
+
export function checkDualLayerCompleteness(map) {
|
|
831
|
+
console.error("[soloForge] 双层机制: checkDualLayerCompleteness() — mechanism_id:", map.mechanism_id);
|
|
832
|
+
const missing = [];
|
|
833
|
+
const has_template_layer = map.template_assets.length > 0;
|
|
834
|
+
const has_code_layer = map.code_enforcers.length > 0;
|
|
835
|
+
const has_evidence = map.evidence_outputs.length > 0;
|
|
836
|
+
const has_tests = map.tests.length > 0;
|
|
837
|
+
const has_registries = map.registries.length > 0;
|
|
838
|
+
if (!has_template_layer)
|
|
839
|
+
missing.push("template_layer");
|
|
840
|
+
if (!has_code_layer)
|
|
841
|
+
missing.push("code_layer");
|
|
842
|
+
if (!has_evidence)
|
|
843
|
+
missing.push("evidence");
|
|
844
|
+
if (!has_tests)
|
|
845
|
+
missing.push("tests");
|
|
846
|
+
if (!has_registries)
|
|
847
|
+
missing.push("registries");
|
|
848
|
+
if (missing.length > 0) {
|
|
849
|
+
console.error("[soloForge] 双层机制: 完整性缺失 —", map.mechanism_id, "missing:", missing.join(", "));
|
|
850
|
+
}
|
|
851
|
+
return {
|
|
852
|
+
mechanism_id: map.mechanism_id,
|
|
853
|
+
has_template_layer,
|
|
854
|
+
has_code_layer,
|
|
855
|
+
has_evidence,
|
|
856
|
+
has_tests,
|
|
857
|
+
has_registries,
|
|
858
|
+
is_complete: missing.length === 0,
|
|
859
|
+
missing,
|
|
860
|
+
};
|
|
861
|
+
}
|
|
862
|
+
// ── 基础设施文件豁免(这些是注册表本身,不在其他注册表中追踪) ──
|
|
863
|
+
const INFRASTRUCTURE_EXCEPTIONS = new Set([
|
|
864
|
+
"src/engine/dual_layer_mechanism_registry.ts",
|
|
865
|
+
"src/engine/mechanism_contract_registry.ts",
|
|
866
|
+
"src/engine/consumable_asset_registry.ts",
|
|
867
|
+
]);
|
|
868
|
+
// ── 治理验证 ──
|
|
869
|
+
/**
|
|
870
|
+
* 验证机制层级映射的合规性。
|
|
871
|
+
* 检查 ID 唯一性、模板/代码缺口、文件存在性、入口点等。
|
|
872
|
+
* @param maps - 机制层级映射列表(默认使用所有契约)
|
|
873
|
+
* @param rootDir - 项目根目录(默认当前目录)
|
|
874
|
+
* @param options.batch1_mode - 是否启用 batch1 模式(可选)
|
|
875
|
+
* @returns 治理发现列表
|
|
876
|
+
*/
|
|
877
|
+
export function validateMechanismLayerMaps(maps = MECHANISM_CONTRACTS.map(contractToLayerMap), rootDir = process.cwd(), options) {
|
|
878
|
+
const findings = [];
|
|
879
|
+
const seenIds = new Set();
|
|
880
|
+
console.error(`[soloForge] 双层机制: 开始治理验证 — 共 ${maps.length} 个机制`);
|
|
881
|
+
// 预加载消费资产路径用于交叉验证
|
|
882
|
+
const consumablePaths = new Set(listBuiltinConsumableAssets().map((a) => a.path));
|
|
883
|
+
// 预加载已知机制 ID 用于孤立执行器检查
|
|
884
|
+
const knownMechanismIds = new Set(listMechanismContracts().map((c) => c.id));
|
|
885
|
+
const knownCapabilityIds = new Set(getAllCapabilities().map((c) => c.id));
|
|
886
|
+
for (const m of maps) {
|
|
887
|
+
// 重复 ID
|
|
888
|
+
if (seenIds.has(m.mechanism_id)) {
|
|
889
|
+
findings.push({
|
|
890
|
+
severity: "hard_fail",
|
|
891
|
+
mechanism_id: m.mechanism_id,
|
|
892
|
+
finding_type: "drift_gap",
|
|
893
|
+
message: `Duplicate mechanism_id: ${m.mechanism_id}`,
|
|
894
|
+
});
|
|
895
|
+
}
|
|
896
|
+
seenIds.add(m.mechanism_id);
|
|
897
|
+
// 模板缺口: 有代码执行器但无模板资产
|
|
898
|
+
if (m.code_enforcers.length > 0 && m.template_assets.length === 0) {
|
|
899
|
+
findings.push({
|
|
900
|
+
severity: m.status === "code_only_enforced" ? "advisory" : "hard_fail",
|
|
901
|
+
mechanism_id: m.mechanism_id,
|
|
902
|
+
finding_type: "template_gap",
|
|
903
|
+
message: `机制 ${m.mechanism_id} 有代码执行器但无模板资产 (template_gap)`,
|
|
904
|
+
});
|
|
905
|
+
}
|
|
906
|
+
// 代码缺口: 有模板资产但无代码执行器
|
|
907
|
+
if (m.template_assets.length > 0 && m.code_enforcers.length === 0) {
|
|
908
|
+
findings.push({
|
|
909
|
+
severity: "hard_fail",
|
|
910
|
+
mechanism_id: m.mechanism_id,
|
|
911
|
+
finding_type: "code_gap",
|
|
912
|
+
message: `机制 ${m.mechanism_id} 有模板资产但无代码执行器 (code_gap)`,
|
|
913
|
+
});
|
|
914
|
+
}
|
|
915
|
+
// 证据缺口
|
|
916
|
+
if (m.code_enforcers.length > 0 && m.evidence_outputs.length === 0) {
|
|
917
|
+
findings.push({
|
|
918
|
+
severity: "advisory",
|
|
919
|
+
mechanism_id: m.mechanism_id,
|
|
920
|
+
finding_type: "evidence_gap",
|
|
921
|
+
message: `机制 ${m.mechanism_id} 有代码执行器但无证据输出`,
|
|
922
|
+
});
|
|
923
|
+
}
|
|
924
|
+
// 测试缺口: 未声明测试
|
|
925
|
+
if (m.code_enforcers.length > 0 && m.tests.length === 0) {
|
|
926
|
+
findings.push({
|
|
927
|
+
severity: "hard_fail",
|
|
928
|
+
mechanism_id: m.mechanism_id,
|
|
929
|
+
finding_type: "test_gap",
|
|
930
|
+
message: `机制 ${m.mechanism_id} 有代码执行器但无测试`,
|
|
931
|
+
});
|
|
932
|
+
}
|
|
933
|
+
// 模板资产: 检查文件是否存在 + 消费资产注册表交叉验证
|
|
934
|
+
for (const ta of m.template_assets) {
|
|
935
|
+
// P0/P1/dual_layer_enforced 的资产文件必须存在
|
|
936
|
+
if (!fs.existsSync(path.join(rootDir, ta.path))) {
|
|
937
|
+
const severity = (m.priority === "P0" || m.priority === "P1" || m.status === "dual_layer_enforced")
|
|
938
|
+
? "hard_fail" : "advisory";
|
|
939
|
+
findings.push({
|
|
940
|
+
severity,
|
|
941
|
+
mechanism_id: m.mechanism_id,
|
|
942
|
+
finding_type: "asset_unconsumed",
|
|
943
|
+
message: `模板资产文件不存在: ${ta.path}${severity === "hard_fail" ? " (P0/P1/dual_layer_enforced 必须)" : ""}`,
|
|
944
|
+
});
|
|
945
|
+
}
|
|
946
|
+
// 与消费资产注册表交叉验证
|
|
947
|
+
if (!consumablePaths.has(ta.path)) {
|
|
948
|
+
findings.push({
|
|
949
|
+
severity: "hard_fail",
|
|
950
|
+
mechanism_id: m.mechanism_id,
|
|
951
|
+
finding_type: "asset_unconsumed",
|
|
952
|
+
message: `模板资产 ${ta.path} 存在但未在 Consumable Asset Registry 中注册`,
|
|
953
|
+
});
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
// 检查代码执行器文件是否存在于磁盘
|
|
957
|
+
for (const ce of m.code_enforcers) {
|
|
958
|
+
if (!fs.existsSync(path.join(rootDir, ce))) {
|
|
959
|
+
findings.push({
|
|
960
|
+
severity: "hard_fail",
|
|
961
|
+
mechanism_id: m.mechanism_id,
|
|
962
|
+
finding_type: "code_gap",
|
|
963
|
+
message: `代码执行器文件不存在: ${ce}`,
|
|
964
|
+
});
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
// 检查测试文件是否存在于磁盘 — dual_layer_enforced 为 hard_fail
|
|
968
|
+
for (const t of m.tests) {
|
|
969
|
+
if (!fs.existsSync(path.join(rootDir, t))) {
|
|
970
|
+
const severity = m.status === "dual_layer_enforced" ? "hard_fail" : "advisory";
|
|
971
|
+
findings.push({
|
|
972
|
+
severity,
|
|
973
|
+
mechanism_id: m.mechanism_id,
|
|
974
|
+
finding_type: "test_gap",
|
|
975
|
+
message: `测试文件不存在: ${t}${severity === "hard_fail" ? " (dual_layer_enforced 必须)" : ""}`,
|
|
976
|
+
});
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
// 检查代码入口点是否存在于执行器文件中
|
|
980
|
+
if (m.code_entrypoints.length > 0 && m.code_enforcers.length > 0) {
|
|
981
|
+
for (const ep of m.code_entrypoints) {
|
|
982
|
+
let found = false;
|
|
983
|
+
for (const enforcer of m.code_enforcers) {
|
|
984
|
+
const enforcerPath = path.join(rootDir, enforcer);
|
|
985
|
+
if (fs.existsSync(enforcerPath)) {
|
|
986
|
+
const content = fs.readFileSync(enforcerPath, "utf-8");
|
|
987
|
+
if (content.includes(ep) && /export\s+(function|const|async\s+function|class)\s+/.test(content.split(ep)[0].slice(-50) + "export " + ep)) {
|
|
988
|
+
found = true;
|
|
989
|
+
break;
|
|
990
|
+
}
|
|
991
|
+
// 简单检查: 仅查找导出名称
|
|
992
|
+
const exportPattern = new RegExp(`export\\s+(async\\s+)?(function|const|class|type|interface)\\s+${ep}\\b`);
|
|
993
|
+
if (exportPattern.test(content)) {
|
|
994
|
+
found = true;
|
|
995
|
+
break;
|
|
996
|
+
}
|
|
997
|
+
// 更简单: 仅检查名称是否作为导出存在
|
|
998
|
+
if (content.includes(ep)) {
|
|
999
|
+
found = true;
|
|
1000
|
+
break;
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
if (!found) {
|
|
1005
|
+
findings.push({
|
|
1006
|
+
severity: "hard_fail",
|
|
1007
|
+
mechanism_id: m.mechanism_id,
|
|
1008
|
+
finding_type: "entrypoint_not_found",
|
|
1009
|
+
message: `代码入口点 ${ep} 在所有强制层文件中未找到`,
|
|
1010
|
+
});
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
1014
|
+
// 注册表名称验证: 注册表必须是已知名称
|
|
1015
|
+
for (const reg of m.registries) {
|
|
1016
|
+
if (!KNOWN_REGISTRIES.has(reg)) {
|
|
1017
|
+
findings.push({
|
|
1018
|
+
severity: "hard_fail",
|
|
1019
|
+
mechanism_id: m.mechanism_id,
|
|
1020
|
+
finding_type: "drift_gap",
|
|
1021
|
+
message: `registry "${reg}" 不是已知 registry,机制 ${m.mechanism_id} 声明了不存在的 registry`,
|
|
1022
|
+
});
|
|
1023
|
+
}
|
|
1024
|
+
}
|
|
1025
|
+
// 孤立执行器检查: 不可达的代码执行器文件
|
|
1026
|
+
// 来自机制契约注册表、能力注册表或工作流注册表
|
|
1027
|
+
const workflowMechanismIds = new Set(listWorkflowContracts().flatMap((w) => w.required_mechanisms));
|
|
1028
|
+
for (const ce of m.code_enforcers) {
|
|
1029
|
+
const ceNorm = ce.replace(/\\/g, "/");
|
|
1030
|
+
const isKnown = knownMechanismIds.size > 0 && listMechanismContracts().some((mc) => mc.owner_module.replace(/\\/g, "/") === ceNorm);
|
|
1031
|
+
const isCapKnown = knownCapabilityIds.size > 0 && getAllCapabilities().some((cap) => cap.code_files.some((cf) => cf.replace(/\\/g, "/") === ceNorm));
|
|
1032
|
+
// 检查此机制是否被任何工作流的 required_mechanisms 引用
|
|
1033
|
+
const isWorkflowKnown = workflowMechanismIds.has(m.mechanism_id);
|
|
1034
|
+
// 如果执行器文件存在但未在任何注册表中找到,则为孤立
|
|
1035
|
+
if (fs.existsSync(path.join(rootDir, ce)) && !isKnown && !isCapKnown && !isWorkflowKnown && !INFRASTRUCTURE_EXCEPTIONS.has(ceNorm)) {
|
|
1036
|
+
const orphanSeverity = (m.priority === "P0" || m.priority === "P1" || m.status === "dual_layer_enforced")
|
|
1037
|
+
? "hard_fail" : "advisory";
|
|
1038
|
+
findings.push({
|
|
1039
|
+
severity: orphanSeverity,
|
|
1040
|
+
mechanism_id: m.mechanism_id,
|
|
1041
|
+
finding_type: "orphan_enforcer",
|
|
1042
|
+
message: `代码执行器 ${ce} 不在 Mechanism Contract Registry、Capability Registry 或 Workflow Registry 中${orphanSeverity === "hard_fail" ? " (P0/P1/dual_layer_enforced 必须)" : ""}`,
|
|
1043
|
+
});
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1046
|
+
// P0/P1 必须为 dual_layer_enforced
|
|
1047
|
+
if ((m.priority === "P0" || m.priority === "P1") && m.status !== "dual_layer_enforced") {
|
|
1048
|
+
findings.push({
|
|
1049
|
+
severity: "hard_fail",
|
|
1050
|
+
mechanism_id: m.mechanism_id,
|
|
1051
|
+
finding_type: "p0_not_dual_layer",
|
|
1052
|
+
message: `P0/P1 机制 ${m.mechanism_id} 必须为 dual_layer_enforced,当前: ${m.status}`,
|
|
1053
|
+
});
|
|
1054
|
+
}
|
|
1055
|
+
// template_only_advisory 不能有代码执行器
|
|
1056
|
+
if (m.status === "template_only_advisory" && m.code_enforcers.length > 0) {
|
|
1057
|
+
findings.push({
|
|
1058
|
+
severity: "hard_fail",
|
|
1059
|
+
mechanism_id: m.mechanism_id,
|
|
1060
|
+
finding_type: "template_mechanism_drift",
|
|
1061
|
+
message: `机制 ${m.mechanism_id} 状态为 template_only_advisory 但存在代码执行器,状态与实际不一致`,
|
|
1062
|
+
});
|
|
1063
|
+
}
|
|
1064
|
+
// code_only_enforced 必须产生 template_gap 发现
|
|
1065
|
+
if (m.status === "code_only_enforced") {
|
|
1066
|
+
findings.push({
|
|
1067
|
+
severity: "advisory",
|
|
1068
|
+
mechanism_id: m.mechanism_id,
|
|
1069
|
+
finding_type: "template_gap",
|
|
1070
|
+
message: `机制 ${m.mechanism_id} 为 code_only_enforced,必须补充模板层`,
|
|
1071
|
+
});
|
|
1072
|
+
}
|
|
1073
|
+
}
|
|
1074
|
+
console.error(`[soloForge] 双层机制: 治理验证完成 — 发现 ${findings.length} 个问题`);
|
|
1075
|
+
return findings;
|
|
1076
|
+
}
|
|
1077
|
+
//# sourceMappingURL=dual_layer_mechanism_registry.js.map
|