soloforge 1.4.15 → 1.5.0
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 +76 -3
- package/dist/adapters/claude_code/claude_md.d.ts +1 -1
- package/dist/adapters/claude_code/claude_md.d.ts.map +1 -1
- package/dist/adapters/claude_code/claude_md.js.map +1 -1
- package/dist/adapters/claude_code/pre_prompt_contract.d.ts +4 -59
- package/dist/adapters/claude_code/pre_prompt_contract.d.ts.map +1 -1
- package/dist/adapters/claude_code/pre_prompt_contract.js +3 -111
- package/dist/adapters/claude_code/pre_prompt_contract.js.map +1 -1
- package/dist/adapters/claude_code/server.d.ts +1 -1
- package/dist/adapters/claude_code/server.d.ts.map +1 -1
- package/dist/adapters/claude_code/server.js.map +1 -1
- package/dist/adapters/claude_code/tools.d.ts +1 -1
- package/dist/adapters/claude_code/tools.d.ts.map +1 -1
- package/dist/adapters/claude_code/tools.js +71 -47
- package/dist/adapters/claude_code/tools.js.map +1 -1
- package/dist/adapters/codex/codex_rules.d.ts +1 -1
- package/dist/adapters/codex/codex_rules.d.ts.map +1 -1
- package/dist/adapters/codex/codex_rules.js +1 -24
- package/dist/adapters/codex/codex_rules.js.map +1 -1
- package/dist/adapters/shared/workflow_template.d.ts +8 -12
- package/dist/adapters/shared/workflow_template.d.ts.map +1 -1
- package/dist/adapters/shared/workflow_template.js +16 -78
- package/dist/adapters/shared/workflow_template.js.map +1 -1
- package/dist/adapters/trae/trae_rules.d.ts +1 -1
- package/dist/adapters/trae/trae_rules.d.ts.map +1 -1
- package/dist/adapters/trae/trae_rules.js +1 -10
- package/dist/adapters/trae/trae_rules.js.map +1 -1
- package/dist/bin/soloforge.d.ts.map +1 -1
- package/dist/bin/soloforge.js +53 -100
- package/dist/bin/soloforge.js.map +1 -1
- package/dist/engine/asset_manifest.d.ts.map +1 -1
- package/dist/engine/asset_manifest.js +118 -120
- package/dist/engine/asset_manifest.js.map +1 -1
- package/dist/engine/audit_pool.js.map +1 -1
- package/dist/engine/capability_registry.js +25 -25
- package/dist/engine/capability_registry.js.map +1 -1
- package/dist/engine/capability_state_store.js.map +1 -1
- package/dist/engine/change_coordinator.d.ts +1 -1
- package/dist/engine/change_coordinator.d.ts.map +1 -1
- package/dist/engine/change_coordinator.js.map +1 -1
- package/dist/engine/classifier.d.ts +1 -1
- package/dist/engine/classifier.d.ts.map +1 -1
- package/dist/engine/classifier.js +1 -1
- package/dist/engine/classifier.js.map +1 -1
- package/dist/engine/code_reviewer.d.ts +1 -1
- package/dist/engine/code_reviewer.d.ts.map +1 -1
- package/dist/engine/code_reviewer.js +1 -1
- package/dist/engine/code_reviewer.js.map +1 -1
- package/dist/engine/confidence_scorer.d.ts +1 -1
- package/dist/engine/confidence_scorer.d.ts.map +1 -1
- package/dist/engine/config_auto_repair.js.map +1 -1
- package/dist/engine/config_precedence_contract.js.map +1 -1
- package/dist/engine/consumable_asset_registry.d.ts +1 -1
- package/dist/engine/consumable_asset_registry.d.ts.map +1 -1
- package/dist/engine/consumable_asset_registry.js +236 -126
- package/dist/engine/consumable_asset_registry.js.map +1 -1
- package/dist/engine/consumption_trace_store.d.ts +40 -6
- package/dist/engine/consumption_trace_store.d.ts.map +1 -1
- package/dist/engine/consumption_trace_store.js +90 -47
- package/dist/engine/consumption_trace_store.js.map +1 -1
- package/dist/engine/contract_guard.d.ts +1 -1
- package/dist/engine/contract_guard.d.ts.map +1 -1
- package/dist/engine/contract_guard.js +9 -8
- package/dist/engine/contract_guard.js.map +1 -1
- package/dist/engine/contract_registry.d.ts.map +1 -1
- package/dist/engine/contract_registry.js +9 -11
- package/dist/engine/contract_registry.js.map +1 -1
- package/dist/engine/control_plane_contract.d.ts.map +1 -1
- package/dist/engine/control_plane_contract.js +7 -3
- package/dist/engine/control_plane_contract.js.map +1 -1
- package/dist/engine/convention_detector.js.map +1 -1
- package/dist/engine/core_engineering_principles.d.ts +1 -1
- package/dist/engine/core_engineering_principles.d.ts.map +1 -1
- package/dist/engine/core_engineering_principles.js +6 -6
- package/dist/engine/core_engineering_principles.js.map +1 -1
- package/dist/engine/core_experience_principle.d.ts +2 -2
- package/dist/engine/core_experience_principle.d.ts.map +1 -1
- package/dist/engine/core_experience_principle.js +4 -4
- package/dist/engine/core_experience_principle.js.map +1 -1
- package/dist/engine/debt_reporter.d.ts +1 -1
- package/dist/engine/debt_reporter.d.ts.map +1 -1
- package/dist/engine/debt_tracker.d.ts +1 -1
- package/dist/engine/debt_tracker.d.ts.map +1 -1
- package/dist/engine/debt_tracker.js.map +1 -1
- package/dist/engine/debugger.d.ts +1 -1
- package/dist/engine/debugger.d.ts.map +1 -1
- package/dist/engine/delivery.d.ts +1 -1
- package/dist/engine/delivery.d.ts.map +1 -1
- package/dist/engine/delivery.js.map +1 -1
- package/dist/engine/delivery_readiness.d.ts +2 -2
- package/dist/engine/delivery_readiness.d.ts.map +1 -1
- package/dist/engine/delivery_readiness.js.map +1 -1
- package/dist/engine/dependency_scanner.d.ts +1 -1
- package/dist/engine/dependency_scanner.d.ts.map +1 -1
- package/dist/engine/design_lifecycle_contract.js +2 -2
- package/dist/engine/design_lifecycle_contract.js.map +1 -1
- package/dist/engine/developer_sovereignty.d.ts +1 -1
- package/dist/engine/developer_sovereignty.d.ts.map +1 -1
- package/dist/engine/developer_sovereignty.js.map +1 -1
- package/dist/engine/diff_ownership_store.js.map +1 -1
- package/dist/engine/dual_layer_mechanism_registry.d.ts +1 -1
- package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -1
- package/dist/engine/dual_layer_mechanism_registry.js +206 -84
- package/dist/engine/dual_layer_mechanism_registry.js.map +1 -1
- package/dist/engine/evolution_regression_gate.d.ts +2 -2
- package/dist/engine/evolution_regression_gate.js +3 -3
- package/dist/engine/evolution_regression_gate.js.map +1 -1
- package/dist/engine/evolver.d.ts +1 -1
- package/dist/engine/evolver.d.ts.map +1 -1
- package/dist/engine/evolver.js +1 -1
- package/dist/engine/evolver.js.map +1 -1
- package/dist/engine/expand_pipeline.d.ts +1 -1
- package/dist/engine/expand_pipeline.d.ts.map +1 -1
- package/dist/engine/explicit_asset_registry.d.ts.map +1 -1
- package/dist/engine/explicit_asset_registry.js +641 -268
- package/dist/engine/explicit_asset_registry.js.map +1 -1
- package/dist/engine/exploration.d.ts +1 -1
- package/dist/engine/exploration.d.ts.map +1 -1
- package/dist/engine/extension_platform_contracts.d.ts +2 -4
- package/dist/engine/extension_platform_contracts.d.ts.map +1 -1
- package/dist/engine/extension_platform_contracts.js +2 -3
- package/dist/engine/extension_platform_contracts.js.map +1 -1
- package/dist/engine/extension_scenario_registry.d.ts.map +1 -1
- package/dist/engine/extension_scenario_registry.js +5 -18
- package/dist/engine/extension_scenario_registry.js.map +1 -1
- package/dist/engine/failure_classifier.d.ts +1 -1
- package/dist/engine/failure_classifier.d.ts.map +1 -1
- package/dist/engine/feasibility_checker.d.ts +1 -1
- package/dist/engine/feasibility_checker.d.ts.map +1 -1
- package/dist/engine/foundation_scenario_registry.d.ts +3 -35
- package/dist/engine/foundation_scenario_registry.d.ts.map +1 -1
- package/dist/engine/foundation_scenario_registry.js +4 -181
- package/dist/engine/foundation_scenario_registry.js.map +1 -1
- package/dist/engine/foundation_scenario_runners.js +5 -5
- package/dist/engine/foundation_scenario_runners.js.map +1 -1
- package/dist/engine/gate_checks/checkAdapterLayerConsistency.d.ts +6 -0
- package/dist/engine/gate_checks/checkAdapterLayerConsistency.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkAdapterLayerConsistency.js +117 -0
- package/dist/engine/gate_checks/checkAdapterLayerConsistency.js.map +1 -0
- package/dist/engine/gate_checks/checkCodeObservability.d.ts +6 -0
- package/dist/engine/gate_checks/checkCodeObservability.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkCodeObservability.js +252 -0
- package/dist/engine/gate_checks/checkCodeObservability.js.map +1 -0
- package/dist/engine/gate_checks/checkCodeStyleEnforcement.d.ts +7 -0
- package/dist/engine/gate_checks/checkCodeStyleEnforcement.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkCodeStyleEnforcement.js +73 -0
- package/dist/engine/gate_checks/checkCodeStyleEnforcement.js.map +1 -0
- package/dist/engine/gate_checks/checkControlPlaneTrust.d.ts +9 -0
- package/dist/engine/gate_checks/checkControlPlaneTrust.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkControlPlaneTrust.js +111 -0
- package/dist/engine/gate_checks/checkControlPlaneTrust.js.map +1 -0
- package/dist/engine/gate_checks/checkCriticalProblemConsumption.d.ts +6 -0
- package/dist/engine/gate_checks/checkCriticalProblemConsumption.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkCriticalProblemConsumption.js +476 -0
- package/dist/engine/gate_checks/checkCriticalProblemConsumption.js.map +1 -0
- package/dist/engine/gate_checks/checkDependencyAudit.d.ts +6 -0
- package/dist/engine/gate_checks/checkDependencyAudit.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkDependencyAudit.js +40 -0
- package/dist/engine/gate_checks/checkDependencyAudit.js.map +1 -0
- package/dist/engine/gate_checks/checkDeprecatedCode.d.ts +6 -0
- package/dist/engine/gate_checks/checkDeprecatedCode.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkDeprecatedCode.js +262 -0
- package/dist/engine/gate_checks/checkDeprecatedCode.js.map +1 -0
- package/dist/engine/gate_checks/checkDiagnosticCentralization.d.ts +9 -0
- package/dist/engine/gate_checks/checkDiagnosticCentralization.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkDiagnosticCentralization.js +24 -0
- package/dist/engine/gate_checks/checkDiagnosticCentralization.js.map +1 -0
- package/dist/engine/gate_checks/checkDistFreshness.d.ts +6 -0
- package/dist/engine/gate_checks/checkDistFreshness.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkDistFreshness.js +57 -0
- package/dist/engine/gate_checks/checkDistFreshness.js.map +1 -0
- package/dist/engine/gate_checks/checkDualLayerSemantics.d.ts +6 -0
- package/dist/engine/gate_checks/checkDualLayerSemantics.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkDualLayerSemantics.js +88 -0
- package/dist/engine/gate_checks/checkDualLayerSemantics.js.map +1 -0
- package/dist/engine/gate_checks/checkImplementationContract.d.ts +6 -0
- package/dist/engine/gate_checks/checkImplementationContract.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkImplementationContract.js +90 -0
- package/dist/engine/gate_checks/checkImplementationContract.js.map +1 -0
- package/dist/engine/gate_checks/checkKnowledgeAssetSchemaP0.d.ts +6 -0
- package/dist/engine/gate_checks/checkKnowledgeAssetSchemaP0.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkKnowledgeAssetSchemaP0.js +30 -0
- package/dist/engine/gate_checks/checkKnowledgeAssetSchemaP0.js.map +1 -0
- package/dist/engine/gate_checks/checkKnowledgeLayer.d.ts +6 -0
- package/dist/engine/gate_checks/checkKnowledgeLayer.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkKnowledgeLayer.js +163 -0
- package/dist/engine/gate_checks/checkKnowledgeLayer.js.map +1 -0
- package/dist/engine/gate_checks/checkLongTermMechanization.d.ts +6 -0
- package/dist/engine/gate_checks/checkLongTermMechanization.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkLongTermMechanization.js +55 -0
- package/dist/engine/gate_checks/checkLongTermMechanization.js.map +1 -0
- package/dist/engine/gate_checks/checkMainlineConsumption.d.ts +6 -0
- package/dist/engine/gate_checks/checkMainlineConsumption.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkMainlineConsumption.js +312 -0
- package/dist/engine/gate_checks/checkMainlineConsumption.js.map +1 -0
- package/dist/engine/gate_checks/checkMechanismChain.d.ts +6 -0
- package/dist/engine/gate_checks/checkMechanismChain.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkMechanismChain.js +196 -0
- package/dist/engine/gate_checks/checkMechanismChain.js.map +1 -0
- package/dist/engine/gate_checks/checkMechanismIdentity.d.ts +6 -0
- package/dist/engine/gate_checks/checkMechanismIdentity.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkMechanismIdentity.js +125 -0
- package/dist/engine/gate_checks/checkMechanismIdentity.js.map +1 -0
- package/dist/engine/gate_checks/checkReleaseIssueDesignPath.d.ts +6 -0
- package/dist/engine/gate_checks/checkReleaseIssueDesignPath.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkReleaseIssueDesignPath.js +736 -0
- package/dist/engine/gate_checks/checkReleaseIssueDesignPath.js.map +1 -0
- package/dist/engine/gate_checks/checkStandardAssetCoverage.d.ts +6 -0
- package/dist/engine/gate_checks/checkStandardAssetCoverage.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkStandardAssetCoverage.js +34 -0
- package/dist/engine/gate_checks/checkStandardAssetCoverage.js.map +1 -0
- package/dist/engine/gate_checks/checkStateChainHealth.d.ts +6 -0
- package/dist/engine/gate_checks/checkStateChainHealth.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkStateChainHealth.js +147 -0
- package/dist/engine/gate_checks/checkStateChainHealth.js.map +1 -0
- package/dist/engine/gate_checks/checkTemplateKnowledgeHygiene.d.ts +10 -0
- package/dist/engine/gate_checks/checkTemplateKnowledgeHygiene.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkTemplateKnowledgeHygiene.js +314 -0
- package/dist/engine/gate_checks/checkTemplateKnowledgeHygiene.js.map +1 -0
- package/dist/engine/gate_checks/checkTestPollution.d.ts +6 -0
- package/dist/engine/gate_checks/checkTestPollution.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkTestPollution.js +67 -0
- package/dist/engine/gate_checks/checkTestPollution.js.map +1 -0
- package/dist/engine/gate_checks/checkWorkflowNavigation.d.ts +6 -0
- package/dist/engine/gate_checks/checkWorkflowNavigation.d.ts.map +1 -0
- package/dist/engine/gate_checks/checkWorkflowNavigation.js +168 -0
- package/dist/engine/gate_checks/checkWorkflowNavigation.js.map +1 -0
- package/dist/engine/gate_checks/helpers.d.ts +28 -0
- package/dist/engine/gate_checks/helpers.d.ts.map +1 -0
- package/dist/engine/gate_checks/helpers.js +91 -0
- package/dist/engine/gate_checks/helpers.js.map +1 -0
- package/dist/engine/gate_checks/types.d.ts +38 -0
- package/dist/engine/gate_checks/types.d.ts.map +1 -0
- package/dist/engine/gate_checks/types.js +5 -0
- package/dist/engine/gate_checks/types.js.map +1 -0
- package/dist/engine/governance_report.d.ts +1 -1
- package/dist/engine/governance_report.d.ts.map +1 -1
- package/dist/engine/helpers.d.ts +9 -0
- package/dist/engine/helpers.d.ts.map +1 -0
- package/dist/engine/helpers.js +13 -0
- package/dist/engine/helpers.js.map +1 -0
- package/dist/engine/hook_context_types.d.ts +66 -0
- package/dist/engine/hook_context_types.d.ts.map +1 -0
- package/dist/engine/hook_context_types.js +118 -0
- package/dist/engine/hook_context_types.js.map +1 -0
- package/dist/engine/impact_analyzer.d.ts +1 -1
- package/dist/engine/impact_analyzer.d.ts.map +1 -1
- package/dist/engine/impact_analyzer.js.map +1 -1
- package/dist/engine/input_material_extractor.d.ts.map +1 -1
- package/dist/engine/input_material_extractor.js +10 -9
- package/dist/engine/input_material_extractor.js.map +1 -1
- package/dist/engine/instruction_contract.d.ts +6 -0
- package/dist/engine/instruction_contract.d.ts.map +1 -1
- package/dist/engine/instruction_contract.js +2 -3
- package/dist/engine/instruction_contract.js.map +1 -1
- package/dist/engine/intent_expander.d.ts +10 -1
- package/dist/engine/intent_expander.d.ts.map +1 -1
- package/dist/engine/intent_expander.js +49 -9
- package/dist/engine/intent_expander.js.map +1 -1
- package/dist/engine/intent_router.d.ts +2 -0
- package/dist/engine/intent_router.d.ts.map +1 -1
- package/dist/engine/intent_router.js +1 -1
- package/dist/engine/intent_router.js.map +1 -1
- package/dist/engine/job_manager.js.map +1 -1
- package/dist/engine/knowledge_acceptance_registry.d.ts.map +1 -1
- package/dist/engine/knowledge_acceptance_registry.js +0 -10
- package/dist/engine/knowledge_acceptance_registry.js.map +1 -1
- package/dist/engine/knowledge_asset_consumer.d.ts +1 -1
- package/dist/engine/knowledge_asset_consumer.js +11 -11
- package/dist/engine/knowledge_asset_consumer.js.map +1 -1
- package/dist/engine/knowledge_asset_schema.d.ts +1 -1
- package/dist/engine/knowledge_asset_schema.js +1 -1
- package/dist/engine/knowledge_config_loader.d.ts.map +1 -1
- package/dist/engine/knowledge_config_loader.js +35 -4
- package/dist/engine/knowledge_config_loader.js.map +1 -1
- package/dist/engine/knowledge_injection_boundary.d.ts +1 -1
- package/dist/engine/knowledge_injection_boundary.d.ts.map +1 -1
- package/dist/engine/knowledge_injection_boundary.js +10 -4
- package/dist/engine/knowledge_injection_boundary.js.map +1 -1
- package/dist/engine/knowledge_manager.d.ts +1 -1
- package/dist/engine/knowledge_manager.d.ts.map +1 -1
- package/dist/engine/knowledge_scenario_registry.d.ts.map +1 -1
- package/dist/engine/knowledge_scenario_registry.js +0 -8
- package/dist/engine/knowledge_scenario_registry.js.map +1 -1
- package/dist/engine/knowledge_sovereignty.js.map +1 -1
- package/dist/engine/knowledge_template_contracts.d.ts +0 -1
- package/dist/engine/knowledge_template_contracts.d.ts.map +1 -1
- package/dist/engine/knowledge_template_contracts.js.map +1 -1
- package/dist/engine/legacy_type_migration.d.ts +63 -0
- package/dist/engine/legacy_type_migration.d.ts.map +1 -0
- package/dist/engine/legacy_type_migration.js +227 -0
- package/dist/engine/legacy_type_migration.js.map +1 -0
- package/dist/engine/lifecycle_knowledge_contract.d.ts +1 -1
- package/dist/engine/lifecycle_knowledge_contract.d.ts.map +1 -1
- package/dist/engine/local_docker_acceptance.js.map +1 -1
- package/dist/engine/log_governance.js +1 -1
- package/dist/engine/log_governance.js.map +1 -1
- package/dist/engine/main_path_integration_contract.js.map +1 -1
- package/dist/engine/mechanism_contract_registry.d.ts.map +1 -1
- package/dist/engine/mechanism_contract_registry.js +79 -14
- package/dist/engine/mechanism_contract_registry.js.map +1 -1
- package/dist/engine/mechanism_health_check.d.ts.map +1 -1
- package/dist/engine/mechanism_health_check.js +2 -3
- package/dist/engine/mechanism_health_check.js.map +1 -1
- package/dist/engine/migration_guard.d.ts +1 -1
- package/dist/engine/migration_guard.d.ts.map +1 -1
- package/dist/engine/mutation_audit.d.ts +1 -1
- package/dist/engine/mutation_audit.d.ts.map +1 -1
- package/dist/engine/next_action_planner.d.ts +1 -1
- package/dist/engine/next_action_planner.d.ts.map +1 -1
- package/dist/engine/next_action_planner.js +32 -36
- package/dist/engine/next_action_planner.js.map +1 -1
- package/dist/engine/observability.d.ts +1 -1
- package/dist/engine/observability.d.ts.map +1 -1
- package/dist/engine/observability.js.map +1 -1
- package/dist/engine/observed_consumption.d.ts.map +1 -1
- package/dist/engine/observed_consumption.js +5 -2
- package/dist/engine/observed_consumption.js.map +1 -1
- package/dist/engine/onboarding.d.ts +1 -1
- package/dist/engine/onboarding.d.ts.map +1 -1
- package/dist/engine/privacy_secret_contract.js +1 -1
- package/dist/engine/privacy_secret_contract.js.map +1 -1
- package/dist/engine/project_knowledge_contract.d.ts +1 -1
- package/dist/engine/project_knowledge_contract.d.ts.map +1 -1
- package/dist/engine/project_knowledge_contract.js +2 -1
- package/dist/engine/project_knowledge_contract.js.map +1 -1
- package/dist/engine/project_stage_detector.js.map +1 -1
- package/dist/engine/regression_matrix.js.map +1 -1
- package/dist/engine/release_issue_scenario_registry.d.ts +1 -3
- package/dist/engine/release_issue_scenario_registry.d.ts.map +1 -1
- package/dist/engine/release_issue_scenario_registry.js +7 -49
- package/dist/engine/release_issue_scenario_registry.js.map +1 -1
- package/dist/engine/release_readiness_gate.d.ts +25 -39
- package/dist/engine/release_readiness_gate.d.ts.map +1 -1
- package/dist/engine/release_readiness_gate.js +129 -3353
- package/dist/engine/release_readiness_gate.js.map +1 -1
- package/dist/engine/release_tool_harness.d.ts +2 -2
- package/dist/engine/release_tool_harness.d.ts.map +1 -1
- package/dist/engine/release_tool_harness.js +1 -1
- package/dist/engine/rollback_router.d.ts +35 -0
- package/dist/engine/rollback_router.d.ts.map +1 -0
- package/dist/engine/rollback_router.js +50 -0
- package/dist/engine/rollback_router.js.map +1 -0
- package/dist/engine/scaffolder.d.ts +1 -1
- package/dist/engine/scaffolder.d.ts.map +1 -1
- package/dist/engine/scope_controller.d.ts +1 -1
- package/dist/engine/scope_controller.d.ts.map +1 -1
- package/dist/engine/scope_controller.js +1 -1
- package/dist/engine/scope_controller.js.map +1 -1
- package/dist/engine/scope_resolver.d.ts +1 -1
- package/dist/engine/scope_resolver.d.ts.map +1 -1
- package/dist/engine/semantic_evidence.d.ts +1 -1
- package/dist/engine/semantic_evidence.d.ts.map +1 -1
- package/dist/engine/slice_executor.d.ts +79 -0
- package/dist/engine/slice_executor.d.ts.map +1 -0
- package/dist/engine/slice_executor.js +100 -0
- package/dist/engine/slice_executor.js.map +1 -0
- package/dist/engine/source_code_matcher.js +1 -1
- package/dist/engine/source_code_matcher.js.map +1 -1
- package/dist/engine/stage_gate_engine.d.ts +32 -0
- package/dist/engine/stage_gate_engine.d.ts.map +1 -0
- package/dist/engine/stage_gate_engine.js +105 -0
- package/dist/engine/stage_gate_engine.js.map +1 -0
- package/dist/engine/stale_current_task_detector.js.map +1 -1
- package/dist/engine/standard_asset_contract.d.ts +1 -1
- package/dist/engine/standard_asset_contract.d.ts.map +1 -1
- package/dist/engine/standard_asset_contract.js +7 -7
- package/dist/engine/standard_asset_contract.js.map +1 -1
- package/dist/engine/standard_asset_coverage.js +19 -19
- package/dist/engine/standard_asset_coverage.js.map +1 -1
- package/dist/engine/task_context.d.ts +6 -6
- package/dist/engine/task_context.d.ts.map +1 -1
- package/dist/engine/task_context.js +22 -20
- package/dist/engine/task_context.js.map +1 -1
- package/dist/engine/task_planner.d.ts +2 -2
- package/dist/engine/task_planner.d.ts.map +1 -1
- package/dist/engine/task_planner.js.map +1 -1
- package/dist/engine/task_stage_detector.d.ts +7 -1
- package/dist/engine/task_stage_detector.d.ts.map +1 -1
- package/dist/engine/task_stage_detector.js +82 -123
- package/dist/engine/task_stage_detector.js.map +1 -1
- package/dist/engine/team_awareness.d.ts +1 -1
- package/dist/engine/team_awareness.d.ts.map +1 -1
- package/dist/engine/team_awareness.js.map +1 -1
- package/dist/engine/template_asset_contract_registry.d.ts +2 -2
- package/dist/engine/template_asset_contract_registry.d.ts.map +1 -1
- package/dist/engine/template_asset_contract_registry.js +37 -10
- package/dist/engine/template_asset_contract_registry.js.map +1 -1
- package/dist/engine/template_asset_visibility.js +1 -1
- package/dist/engine/template_asset_visibility.js.map +1 -1
- package/dist/engine/template_init_sync.d.ts +29 -0
- package/dist/engine/template_init_sync.d.ts.map +1 -1
- package/dist/engine/template_init_sync.js +246 -69
- package/dist/engine/template_init_sync.js.map +1 -1
- package/dist/engine/template_manifest_io.d.ts +1 -1
- package/dist/engine/template_manifest_io.d.ts.map +1 -1
- package/dist/engine/template_manifest_io.js +13 -9
- package/dist/engine/template_manifest_io.js.map +1 -1
- package/dist/engine/template_mechanism_auditor.d.ts +1 -1
- package/dist/engine/template_mechanism_auditor.d.ts.map +1 -1
- package/dist/engine/template_mechanism_auditor.js +10 -10
- package/dist/engine/template_mechanism_auditor.js.map +1 -1
- package/dist/engine/test_generator.d.ts +1 -1
- package/dist/engine/test_generator.d.ts.map +1 -1
- package/dist/engine/test_quality.d.ts +1 -1
- package/dist/engine/test_quality.d.ts.map +1 -1
- package/dist/engine/tool_invocation_contract_registry.js +7 -7
- package/dist/engine/tool_invocation_contract_registry.js.map +1 -1
- package/dist/engine/traceability.d.ts +3 -3
- package/dist/engine/traceability.d.ts.map +1 -1
- package/dist/engine/traceability.js +1 -1
- package/dist/engine/traceability.js.map +1 -1
- package/dist/engine/user_feedback_contract.d.ts +1 -1
- package/dist/engine/user_feedback_contract.d.ts.map +1 -1
- package/dist/engine/user_feedback_contract.js +5 -5
- package/dist/engine/user_feedback_contract.js.map +1 -1
- package/dist/engine/verifier.d.ts +1 -1
- package/dist/engine/verifier.d.ts.map +1 -1
- package/dist/engine/verifier.js +1 -1
- package/dist/engine/verifier.js.map +1 -1
- package/dist/engine/workflow_contract_registry.d.ts +80 -42
- package/dist/engine/workflow_contract_registry.d.ts.map +1 -1
- package/dist/engine/workflow_contract_registry.js +341 -152
- package/dist/engine/workflow_contract_registry.js.map +1 -1
- package/dist/engine/workflow_navigation_contract.d.ts +17 -3
- package/dist/engine/workflow_navigation_contract.d.ts.map +1 -1
- package/dist/engine/workflow_navigation_contract.js +8 -16
- package/dist/engine/workflow_navigation_contract.js.map +1 -1
- package/dist/engine/workflow_rule_generator.d.ts +22 -0
- package/dist/engine/workflow_rule_generator.d.ts.map +1 -0
- package/dist/engine/workflow_rule_generator.js +83 -0
- package/dist/engine/workflow_rule_generator.js.map +1 -0
- package/dist/engine/zero_config_init.js.map +1 -1
- package/dist/knowledge/conflict_detector.d.ts +1 -1
- package/dist/knowledge/conflict_detector.d.ts.map +1 -1
- package/dist/knowledge/conflict_detector.js +2 -1
- package/dist/knowledge/conflict_detector.js.map +1 -1
- package/dist/knowledge/health_checker.d.ts +1 -1
- package/dist/knowledge/health_checker.d.ts.map +1 -1
- package/dist/knowledge/index_manager.d.ts +1 -1
- package/dist/knowledge/index_manager.d.ts.map +1 -1
- package/dist/knowledge/index_manager.js +7 -5
- package/dist/knowledge/index_manager.js.map +1 -1
- package/dist/knowledge/loader.d.ts +1 -1
- package/dist/knowledge/loader.d.ts.map +1 -1
- package/dist/knowledge/loader.js +7 -5
- package/dist/knowledge/loader.js.map +1 -1
- package/dist/knowledge/writer.d.ts +1 -1
- package/dist/knowledge/writer.d.ts.map +1 -1
- package/dist/types/analysis.d.ts +353 -0
- package/dist/types/analysis.d.ts.map +1 -0
- package/dist/types/analysis.js +2 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/types/base.d.ts +11 -0
- package/dist/types/base.d.ts.map +1 -0
- package/dist/{types.js → types/base.js} +1 -1
- package/dist/types/base.js.map +1 -0
- package/dist/types/config.d.ts +128 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/delivery.d.ts +261 -0
- package/dist/types/delivery.d.ts.map +1 -0
- package/dist/types/delivery.js +2 -0
- package/dist/types/delivery.js.map +1 -0
- package/dist/types/dual_layer.d.ts +97 -0
- package/dist/types/dual_layer.d.ts.map +1 -0
- package/dist/types/dual_layer.js +3 -0
- package/dist/types/dual_layer.js.map +1 -0
- package/dist/types/evidence.d.ts +41 -0
- package/dist/types/evidence.d.ts.map +1 -0
- package/dist/types/evidence.js +3 -0
- package/dist/types/evidence.js.map +1 -0
- package/dist/types/execution.d.ts +31 -0
- package/dist/types/execution.d.ts.map +1 -0
- package/dist/types/execution.js +3 -0
- package/dist/types/execution.js.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +13 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/knowledge.d.ts +105 -0
- package/dist/types/knowledge.d.ts.map +1 -0
- package/dist/types/knowledge.js +5 -0
- package/dist/types/knowledge.js.map +1 -0
- package/dist/types/phase.d.ts +50 -0
- package/dist/types/phase.d.ts.map +1 -0
- package/dist/types/phase.js +3 -0
- package/dist/types/phase.js.map +1 -0
- package/dist/types/pipeline.d.ts +353 -0
- package/dist/types/pipeline.d.ts.map +1 -0
- package/dist/types/pipeline.js +2 -0
- package/dist/types/pipeline.js.map +1 -0
- package/dist/types/review.d.ts +149 -0
- package/dist/types/review.d.ts.map +1 -0
- package/dist/types/review.js +2 -0
- package/dist/types/review.js.map +1 -0
- package/dist/types/task.d.ts +203 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +2 -0
- package/dist/types/task.js.map +1 -0
- package/package.json +3 -6
- package/templates/artifacts/existing-system//344/270/200/351/224/256/345/274/200/345/205/263/351/205/215/347/275/256/346/250/241/347/211/210.json +24 -0
- package/templates/artifacts/existing-system//345/216/206/345/217/262/346/225/260/346/215/256/346/270/205/346/264/227/350/204/232/346/234/254/346/250/241/347/211/210.md +44 -0
- package/templates/artifacts/existing-system//345/216/206/345/217/262/351/201/227/347/225/231/351/233/267/345/214/272/346/270/205/345/215/225/346/250/241/347/211/210.md +43 -0
- package/templates/artifacts/existing-system//345/220/221/345/220/216/345/205/274/345/256/271/346/200/247/345/220/210/350/247/204/346/212/245/345/221/212/346/250/241/347/211/210.md +36 -0
- package/templates/artifacts/existing-system//345/242/236/351/207/217/350/276/271/347/225/214/347/225/214/345/256/232/346/226/207/346/241/243/346/250/241/347/211/210.md +36 -0
- package/templates/artifacts/existing-system//346/224/271/351/200/240/345/275/261/345/223/215/350/214/203/345/233/264/350/257/204/344/274/260/346/250/241/347/211/210.md +39 -0
- package/templates/artifacts/existing-system//346/225/260/346/215/256/350/241/200/347/274/230/345/233/276/346/250/241/347/211/210.md +36 -0
- package/templates/artifacts/existing-system//346/226/260/350/200/201/351/200/273/350/276/221/346/257/224/345/257/271/346/227/245/345/277/227/346/250/241/347/211/210.md +29 -0
- package/templates/artifacts/existing-system//347/264/247/346/200/245/345/233/236/346/273/232/346/211/213/345/206/214/346/250/241/347/211/210.md +38 -0
- package/templates/artifacts/existing-system//351/232/224/347/246/273/351/200/202/351/205/215/345/231/250/346/226/271/346/241/210/346/250/241/347/211/210.md +34 -0
- package/templates/artifacts/shared/ADR/346/250/241/347/211/210.md +41 -0
- package/templates/{knowledge/acceptance_templates → artifacts/shared}/API/346/216/245/345/217/243/350/247/204/346/240/274/346/226/207/346/241/243/346/250/241/347/211/210.md +25 -0
- package/templates/artifacts/shared//344/273/243/347/240/201/345/256/241/346/237/245/346/212/245/345/221/212/346/250/241/347/211/210.md +33 -0
- package/templates/artifacts/shared//345/210/207/347/211/207/350/256/241/345/210/222/346/250/241/347/211/210.md +45 -0
- package/templates/{knowledge/acceptance_templates → artifacts/shared}//345/216/237/345/236/213/350/257/264/346/230/216/346/250/241/347/211/210.md +2 -0
- package/templates/{knowledge/acceptance_templates → artifacts/shared}//346/236/266/346/236/204/350/256/276/350/256/241/346/250/241/347/211/210.md +7 -0
- package/templates/gates/existing-system/gate-/347/216/260/346/234/211/347/263/273/347/273/237/345/210/206/346/236/220.yaml +13 -0
- package/templates/gates/existing-system/gate-/347/274/226/347/240/201/344/270/216/345/215/225/345/205/203/346/265/213/350/257/225.yaml +18 -0
- package/templates/gates/existing-system/gate-/350/257/225/350/277/220/350/241/214.yaml +21 -0
- package/templates/gates/shared/gate-/344/273/273/345/212/241/350/247/204/345/210/222.yaml +18 -0
- package/templates/gates/shared/gate-/347/274/226/347/240/201/344/270/216/345/215/225/345/205/203/346/265/213/350/257/225.yaml +14 -0
- package/templates/{knowledge/rules//346/225/217/346/204/237/344/277/241/346/201/257/346/227/245/345/277/227 → internal/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 +42 -19
- package/templates/{knowledge → internal}/rules//346/274/224/350/277/233/345/233/236/345/275/222/351/227/250/346/216/247/350/247/204/345/210/231.md +2 -0
- package/templates/{knowledge/procedures → procedures}//346/236/266/346/236/204/350/256/276/350/256/241/345/267/245/344/275/234/346/265/201.md +1 -1
- package/templates/{knowledge/procedures → procedures}//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/346/260/264/347/272/277.md +1 -1
- package/templates/{knowledge/procedures → procedures}//350/260/203/350/257/225/346/216/222/346/237/245/346/265/201/347/250/213.md +1 -1
- package/templates/{knowledge/procedures → procedures}//351/252/214/346/224/266/346/265/213/350/257/225/350/247/204/345/210/222.md +1 -1
- package/templates/rules/existing-system//345/205/274/345/256/271/346/200/247/346/243/200/346/237/245/350/247/204/345/210/231.md +33 -0
- package/templates/rules/existing-system//350/200/246/345/220/210/346/243/200/346/265/213/350/247/204/345/210/231.md +35 -0
- package/templates/rules/existing-system//350/257/225/350/277/220/350/241/214/347/206/224/346/226/255/350/247/204/345/210/231.md +39 -0
- package/templates/rules/existing-system//351/230/262/345/276/241/346/200/247/347/274/226/347/240/201/350/247/204/345/210/231.md +35 -0
- package/templates/rules/existing-system//351/233/267/345/214/272/345/217/215/346/250/241/345/274/217/346/270/205/345/215/225.md +34 -0
- package/templates/rules/new-system//350/201/224/350/260/203/350/256/276/350/256/241/347/274/272/351/231/267/345/210/244/345/256/232/350/247/204/345/210/231.md +36 -0
- package/templates/rules/shared//344/270/200/350/207/264/346/200/247/346/240/241/351/252/214/350/247/204/345/210/231.md +21 -0
- package/templates/rules/shared//350/201/224/350/260/203/351/252/214/350/257/201/346/270/205/345/215/225.md +29 -0
- package/templates/rules/shared//350/246/206/347/233/226/347/216/207/346/240/207/345/207/206.md +26 -0
- package/dist/engine/deprecated_contract.d.ts +0 -21
- package/dist/engine/deprecated_contract.d.ts.map +0 -1
- package/dist/engine/deprecated_contract.js +0 -14
- package/dist/engine/deprecated_contract.js.map +0 -1
- package/dist/engine/historical_issue_mechanization_matrix.d.ts +0 -28
- package/dist/engine/historical_issue_mechanization_matrix.d.ts.map +0 -1
- package/dist/engine/historical_issue_mechanization_matrix.js +0 -134
- package/dist/engine/historical_issue_mechanization_matrix.js.map +0 -1
- package/dist/engine/implementation_roadmap_registry.d.ts +0 -105
- package/dist/engine/implementation_roadmap_registry.d.ts.map +0 -1
- package/dist/engine/implementation_roadmap_registry.js +0 -1340
- package/dist/engine/implementation_roadmap_registry.js.map +0 -1
- package/dist/engine/mechanism_family_registry.d.ts +0 -48
- package/dist/engine/mechanism_family_registry.d.ts.map +0 -1
- package/dist/engine/mechanism_family_registry.js +0 -197
- package/dist/engine/mechanism_family_registry.js.map +0 -1
- package/dist/engine/project_knowledge_system_regression_matrix.d.ts +0 -27
- package/dist/engine/project_knowledge_system_regression_matrix.d.ts.map +0 -1
- package/dist/engine/project_knowledge_system_regression_matrix.js +0 -295
- package/dist/engine/project_knowledge_system_regression_matrix.js.map +0 -1
- package/dist/engine/release_gate.d.ts +0 -29
- package/dist/engine/release_gate.d.ts.map +0 -1
- package/dist/engine/release_gate.js +0 -675
- package/dist/engine/release_gate.js.map +0 -1
- package/dist/types.d.ts +0 -1737
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/templates/knowledge/acceptance_templates//346/216/245/345/217/243/350/256/276/350/256/241/346/250/241/347/211/210.md +0 -82
- package/templates/knowledge/procedures//346/236/266/346/236/204/350/256/276/350/256/241/346/265/201/347/250/213.md +0 -57
- package/templates/knowledge/procedures//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/347/250/213.md +0 -60
- package/templates/knowledge/procedures//347/274/272/351/231/267/344/277/256/345/244/215/346/265/201/346/260/264/347/272/277.md +0 -55
- package/templates/knowledge/procedures//351/252/214/350/257/201/350/256/241/345/210/222/346/265/201/347/250/213.md +0 -59
- 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 +0 -56
- package/templates/knowledge/rules//346/274/224/350/277/233/345/233/236/345/275/222/350/247/204/345/210/231.md +0 -51
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}/Bug/345/210/206/346/236/220/346/250/241/347/211/210.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}/OOD/350/256/276/350/256/241/346/221/230/350/246/201/346/250/241/347/211/210.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}/POC/347/273/223/350/256/272/346/250/241/347/211/210.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//344/273/243/347/240/201/346/263/250/351/207/212/344/270/216/346/227/245/345/277/227/351/252/214/346/224/266/346/250/241/346/235/277.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//345/211/215/347/253/257/351/241/265/351/235/242/351/252/214/346/224/266/346/270/205/345/215/225.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//345/220/216/347/253/257API/351/252/214/346/224/266/346/270/205/345/215/225.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//345/220/216/347/253/257/345/256/236/347/216/260/351/252/214/346/224/266/346/270/205/345/215/225.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//345/256/211/345/205/250/345/256/241/350/256/241/346/250/241/347/211/210.md" +0 -0
- /package/templates/{knowledge/templates → artifacts/shared}//345/256/241/346/237/245/346/221/230/350/246/201.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//346/200/247/350/203/275/345/210/206/346/236/220/346/250/241/347/211/210.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//346/212/200/346/234/257/351/200/211/345/236/213/351/252/214/346/224/266/346/270/205/345/215/225.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//346/216/245/345/217/243/345/257/271/346/216/245/346/226/271/346/241/210/346/250/241/347/211/210.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//346/225/205/351/232/234/345/244/215/347/233/230/346/250/241/347/211/210.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264/346/226/271/346/241/210/346/250/241/347/211/210.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264/351/252/214/346/224/266/346/270/205/345/215/225.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/346/226/207/346/241/243/346/250/241/347/211/210.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//346/265/213/350/257/225/350/256/241/345/210/222/346/250/241/347/211/210.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//350/256/276/350/256/241/344/270/200/350/207/264/346/200/247/351/252/214/346/224/266/346/212/245/345/221/212/346/250/241/347/211/210.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//350/257/246/347/273/206/350/256/276/350/256/241/346/250/241/347/211/210.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//350/277/201/347/247/273/350/257/204/344/274/260/346/250/241/347/211/210.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//351/200/232/347/224/250/350/264/250/351/207/217/351/252/214/346/224/266/346/270/205/345/215/225.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//351/207/215/346/236/204/346/226/271/346/241/210/346/250/241/347/211/210.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//351/234/200/346/261/202/345/210/206/346/236/220/346/250/241/347/211/210.md" +0 -0
- /package/templates/{knowledge/acceptance_templates → artifacts/shared}//351/234/200/346/261/202/345/216/237/345/236/213/350/256/276/350/256/241/345/256/236/347/216/260/350/277/275/350/270/252/347/237/251/351/230/265/346/250/241/347/211/210.md" +0 -0
- /package/templates/{knowledge/checklists → 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" +0 -0
- /package/templates/{knowledge/checklists → checklists}//344/274/232/350/257/235/346/201/242/345/244/215.md" +0 -0
- /package/templates/{knowledge/checklists → checklists}//345/267/245/344/275/234/346/265/201/351/252/214/346/224/266/346/270/205/345/215/225.md" +0 -0
- /package/templates/{knowledge/checklists → 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" +0 -0
- /package/templates/{knowledge/checklists → 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" +0 -0
- /package/templates/{knowledge/checklists → checklists}//351/232/220/347/247/201/345/256/241/346/237/245/346/270/205/345/215/225.md" +0 -0
- /package/templates/{knowledge/checklists → checklists}//351/252/214/350/257/201/351/252/214/346/224/266/346/270/205/345/215/225.md" +0 -0
- /package/templates/{knowledge/domain → domain}//345/244/232/347/247/237/346/210/267.md" +0 -0
- /package/templates/{knowledge/domain → domain}//345/256/241/350/256/241/346/227/245/345/277/227.md" +0 -0
- /package/templates/{knowledge/domain → domain}//345/257/274/345/205/245/345/257/274/345/207/272/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge/domain → domain}//345/267/245/344/275/234/346/265/201/345/274/225/346/223/216.md" +0 -0
- /package/templates/{knowledge/domain → domain}//346/212/245/350/241/250/347/273/237/350/256/241.md" +0 -0
- /package/templates/{knowledge/domain → domain}//346/224/257/344/273/230/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge/domain → domain}//346/225/260/346/215/256/346/235/203/351/231/220.md" +0 -0
- /package/templates/{knowledge/domain → domain}//351/200/232/347/224/250/346/234/272/346/242/260/346/235/241/346/254/276.md" +0 -0
- /package/templates/{knowledge/domain → domain}//351/200/232/347/237/245/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}/Diff/345/275/222/345/261/236/350/277/275/350/270/252.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}/Java/350/264/250/351/207/217/351/227/250/347/246/201.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}/LLM/351/242/204/347/256/227/347/275/221/345/205/263.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//344/273/273/345/212/241/344/270/212/344/270/213/346/226/207/347/224/237/345/221/275/345/221/250/346/234/237.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//344/273/273/345/212/241/347/256/241/347/220/206/345/231/250.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//344/275/234/347/224/250/345/237/237/344/270/216/345/257/206/351/222/245/346/213/246/346/210/252.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//344/275/234/347/224/250/345/237/237/347/247/237/347/272/246.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//345/206/262/347/252/201/351/227/250/347/246/201.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//345/206/263/347/255/226/347/275/221/345/205/263.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//345/217/230/345/274/202/345/256/241/350/256/241.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//345/233/236/345/275/222/347/237/251/351/230/265.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//345/267/245/344/275/234/345/214/272/344/272/222/346/226/245/351/224/201.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//345/267/245/344/275/234/345/214/272/345/224/244/351/206/222.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//345/271/266/345/217/221/351/224/201.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//345/274/200/345/217/221/350/200/205/345/256/252/346/263/225.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//346/225/217/346/204/237/344/277/241/346/201/257/346/211/253/346/217/217.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//346/262/273/347/220/206/350/277/220/350/241/214/346/227/266/345/276/252/347/216/257.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//346/265/201/345/274/217/345/277/203/350/267/263.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//347/237/245/350/257/206/344/270/273/346/235/203.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//350/257/255/344/271/211/350/257/201/346/215/256.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//350/277/220/350/241/214/345/256/211/345/205/250/345/214/205.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//351/233/266/351/205/215/347/275/256/345/210/235/345/247/213/345/214/226.md" +0 -0
- /package/templates/{knowledge/patterns/core → internal/patterns}//351/252/214/350/257/201/345/221/275/344/273/244/347/224/237/346/210/220.md" +0 -0
- /package/templates/{knowledge → internal}/rules/OOD/344/270/216SOLID/350/256/276/350/256/241/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//344/272/247/347/211/251/345/245/221/347/272/246/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//344/273/243/347/240/201/346/263/250/351/207/212/344/270/216/346/227/245/345/277/227/345/245/221/347/272/246/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//344/273/273/345/212/241/344/270/212/344/270/213/346/226/207/347/224/237/345/221/275/345/221/250/346/234/237/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/345/245/221/347/272/246/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//345/221/275/344/273/244/346/211/247/350/241/214/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//345/267/245/344/275/234/346/265/201/345/245/221/347/272/246/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//345/267/245/344/275/234/346/265/201/345/257/274/350/210/252/345/245/221/347/272/246/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//345/267/245/344/275/234/346/265/201/346/250/241/346/235/277/345/214/205/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//345/267/245/345/205/267/350/260/203/347/224/250/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//346/204/217/345/233/276/350/267/257/347/224/261/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/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" +0 -0
- /package/templates/{knowledge → internal}/rules//346/211/251/345/261/225/347/224/237/345/221/275/345/221/250/346/234/237/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//346/212/200/346/234/257/345/206/263/347/255/226/344/270/273/346/235/203/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//346/226/275/345/267/245/346/214/207/344/273/244/345/245/221/347/272/246/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//346/227/245/345/277/227/346/262/273/347/220/206/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//346/234/272/345/210/266/350/207/252/346/262/273/347/220/206/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//346/236/266/346/236/204/345/206/263/347/255/226/347/240/224/350/256/250/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//346/240/207/345/207/206/350/265/204/344/272/247/350/246/206/347/233/226/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//346/240/270/345/277/203/344/275/223/351/252/214/345/216/237/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/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" +0 -0
- /package/templates/{knowledge → internal}/rules//346/250/241/346/235/277/350/265/204/344/272/247/345/217/257/350/247/201/346/200/247/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/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" +0 -0
- /package/templates/{knowledge → internal}/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" +0 -0
- /package/templates/{knowledge → internal}/rules//347/237/245/350/257/206/346/262/273/347/220/206/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/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" +0 -0
- /package/templates/{knowledge → internal}/rules//347/237/245/350/257/206/350/265/204/344/272/247/346/262/273/347/220/206/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//347/254/254/344/270/200/346/200/247/345/216/237/347/220/206/346/216/250/347/220/206/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//347/273/206/350/212/202/347/272/252/345/276/213/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//350/204/221/346/232/264/344/270/216/346/226/271/346/241/210/346/216/242/347/264/242/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//350/256/241/345/210/222/345/211/215/347/275/256/351/227/250/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//350/256/276/350/256/241/344/272/247/347/211/251/345/214/205/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//350/257/201/346/215/256/351/251/261/345/212/250/344/270/216/345/217/215/345/271/273/350/247/211/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//350/267/250/345/271/263/345/217/260/350/267/257/345/276/204/345/256/211/345/205/250/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/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" +0 -0
- /package/templates/{knowledge → internal}/rules//351/200/232/347/224/250/345/206/263/347/255/226/347/240/224/350/256/250/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//351/205/215/347/275/256/344/274/230/345/205/210/347/272/247/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//351/205/215/347/275/256/350/220/275/347/233/230/350/276/271/347/225/214/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//351/230/262/345/255/244/345/262/233/345/256/236/347/216/260/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/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" +0 -0
- /package/templates/{knowledge → internal}/rules//351/252/214/346/224/266/346/250/241/346/235/277/350/276/223/345/207/272/345/245/221/347/272/246/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge → internal}/rules//351/252/214/350/257/201/345/245/221/347/272/246/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}/OOD/350/256/276/350/256/241/345/267/245/344/275/234/346/265/201.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}/Schema/345/217/230/346/233/264/346/265/201/346/260/264/347/272/277.md" +0 -0
- /package/templates/{knowledge/procedures → 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" +0 -0
- /package/templates/{knowledge/procedures → procedures}//344/273/243/347/240/201/351/227/250/347/246/201/346/265/201/347/250/213.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//344/273/273/345/212/241/346/213/206/350/247/243/346/265/201/347/250/213.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//345/205/250/347/224/237/345/221/275/345/221/250/346/234/237/345/267/245/344/275/234/346/265/201/345/257/274/350/210/252.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//345/212/237/350/203/275/345/274/200/345/217/221/346/265/201/347/250/213.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//345/220/216/347/253/257/346/216/245/345/217/243/345/256/236/347/216/260/345/267/245/344/275/234/346/265/201.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//345/221/275/344/273/244/346/211/247/350/241/214/346/265/201/347/250/213.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//345/256/211/345/205/250/345/212/240/345/233/272/346/265/201/346/260/264/347/272/277.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//345/267/245/345/205/267/350/260/203/347/224/250/346/265/201/347/250/213.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//346/200/247/350/203/275/346/265/201/346/260/264/347/272/277.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//346/204/217/345/233/276/350/267/257/347/224/261/346/265/201/347/250/213.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//346/216/245/345/217/243/351/233/206/346/210/220/346/265/201/346/260/264/347/272/277.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//346/225/260/346/215/256/345/272/223/350/277/201/347/247/273/346/265/201/347/250/213.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//346/234/254/345/234/260/346/265/217/350/247/210/345/231/250/351/252/214/346/224/266/345/267/245/344/275/234/346/265/201.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//346/236/266/346/236/204/345/206/263/347/255/226/347/240/224/350/256/250/345/267/245/344/275/234/346/265/201.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//346/246/202/345/277/265/351/252/214/350/257/201/346/265/201/346/260/264/347/272/277.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//346/265/213/350/257/225/344/274/230/345/205/210/347/274/226/347/240/201/345/267/245/344/275/234/346/265/201.md" +0 -0
- /package/templates/{knowledge/procedures → 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" +0 -0
- /package/templates/{knowledge/procedures → procedures}//347/216/260/346/234/211/347/263/273/347/273/237/345/267/256/350/267/235/345/210/206/346/236/220/345/267/245/344/275/234/346/265/201.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//347/237/245/350/257/206/347/273/264/346/212/244/346/265/201/346/260/264/347/272/277.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//347/274/226/347/240/201/345/211/215/346/276/204/346/270/205/346/265/201/347/250/213.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//350/207/252/344/270/273/351/200/211/345/236/213/346/265/201/347/250/213.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//350/256/276/350/256/241/344/272/247/347/211/251/347/224/237/346/210/220/344/270/216/345/244/215/351/252/214/345/267/245/344/275/234/346/265/201.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//350/257/246/347/273/206/350/256/276/350/256/241/346/265/201/347/250/213.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//350/277/201/347/247/273/346/265/201/346/260/264/347/272/277.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//351/203/250/347/275/262/345/217/221/345/270/203/346/265/201/347/250/213.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//351/207/215/346/236/204/346/265/201/346/260/264/347/272/277.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//351/233/206/346/210/220/351/252/214/350/257/201/346/265/201/347/250/213.md" +0 -0
- /package/templates/{knowledge/procedures → procedures}//351/234/200/346/261/202/346/276/204/346/270/205/346/265/201/347/250/213.md" +0 -0
- /package/templates/{knowledge/product_profiles → profiles}/b2b-internal.yaml +0 -0
- /package/templates/{knowledge/product_profiles → profiles}/b2c.yaml +0 -0
- /package/templates/{knowledge/product_profiles → profiles}/saas.yaml +0 -0
- /package/templates/{knowledge/review_rules → rules/shared}/SOLID/344/273/243/347/240/201/345/256/241/346/237/245/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge/review_rules → rules/shared}//344/272/244/344/273/230/345/256/214/345/244/207/346/200/247/345/256/241/346/237/245/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge/review → rules/shared}//344/273/243/347/240/201/345/217/257/347/273/264/346/212/244/346/200/247/344/270/216/345/217/257/350/247/202/346/265/213/346/200/247/345/256/241/346/237/245.md" +0 -0
- /package/templates/{knowledge/review_rules → rules/shared}//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/345/256/241/346/237/245/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge/review_rules → rules/shared}//345/256/211/345/205/250/345/256/241/346/237/245/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge/review_rules → rules/shared}//345/271/266/345/217/221/345/256/241/346/237/245/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge/review_rules → rules/shared}//346/200/247/350/203/275/345/256/241/346/237/245/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge/review_rules → rules/shared}//346/216/245/345/217/243/345/245/221/347/272/246/345/256/241/346/237/245/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge/review_rules → rules/shared}//346/236/266/346/236/204/345/256/241/346/237/245/350/247/204/345/210/231.md" +0 -0
- /package/templates/{knowledge/review_rules → rules/shared}//350/264/250/351/207/217/345/256/241/346/237/245/350/247/204/345/210/231.md" +0 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 门禁检查模块 — Phase 21: 模板卫生与用户项目知识消费验证。
|
|
3
|
+
*
|
|
4
|
+
* 检查脚手架模板是否包含未落地占位标记,
|
|
5
|
+
* 验证用户可见模板不泄漏内部施工语义,
|
|
6
|
+
* 验证项目知识可被消费、选中、冲突检测等。
|
|
7
|
+
*/
|
|
8
|
+
import fs from "node:fs";
|
|
9
|
+
import os from "node:os";
|
|
10
|
+
import path from "node:path";
|
|
11
|
+
import { safeReadCached } from "./helpers.js";
|
|
12
|
+
/**
|
|
13
|
+
* 读取文件并按行拆分。
|
|
14
|
+
*/
|
|
15
|
+
function safeReadLinesCached(filePath, cache) {
|
|
16
|
+
const content = safeReadCached(filePath, cache);
|
|
17
|
+
return content ? content.split("\n") : [];
|
|
18
|
+
}
|
|
19
|
+
export async function check(ctx, hardFail, info) {
|
|
20
|
+
const rootDir = ctx.rootDir;
|
|
21
|
+
const scaffoldDir = path.join(rootDir, "templates", "scaffolds");
|
|
22
|
+
const scaffoldFindings = [];
|
|
23
|
+
function scanScaffolds(dir) {
|
|
24
|
+
if (!fs.existsSync(dir))
|
|
25
|
+
return;
|
|
26
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
27
|
+
const full = path.join(dir, entry.name);
|
|
28
|
+
if (entry.isDirectory()) {
|
|
29
|
+
scanScaffolds(full);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (!entry.isFile())
|
|
33
|
+
continue;
|
|
34
|
+
const rel = path.relative(rootDir, full).replace(/\\/g, "/");
|
|
35
|
+
const lines = safeReadLinesCached(full, ctx.readCache);
|
|
36
|
+
for (let i = 0; i < lines.length; i++) {
|
|
37
|
+
if (/\b(?:TODO|FIXME|HACK|XXX)\b/.test(lines[i])) {
|
|
38
|
+
scaffoldFindings.push(`${rel}:${i + 1}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
scanScaffolds(scaffoldDir);
|
|
44
|
+
for (const finding of scaffoldFindings) {
|
|
45
|
+
hardFail("TEMPLATE_SCAFFOLD_PLACEHOLDER_LEAK", `脚手架模板仍包含未落地占位标记: ${finding}`, [finding.split(":")[0]], "template-hygiene", "历史门禁只检查模板是否注册,不检查用户生成代码是否带 TODO/FIXME", "清理脚手架占位标记并补行为测试");
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const contractMod = await import(path.join(rootDir, "dist", "engine", "template_asset_contract_registry.js"));
|
|
49
|
+
const contracts = contractMod.listTemplateAssetContracts?.() ?? [];
|
|
50
|
+
const forbidden = /\b(?:validate-batch|ReleaseFix|problem-\d+)\b/i;
|
|
51
|
+
for (const contract of contracts) {
|
|
52
|
+
if (!contract.user_visible)
|
|
53
|
+
continue;
|
|
54
|
+
if (!contract.path || !/\.(md|ya?ml|hbs|json)$/i.test(contract.path))
|
|
55
|
+
continue;
|
|
56
|
+
const abs = path.join(rootDir, contract.path);
|
|
57
|
+
const content = safeReadCached(abs, ctx.readCache);
|
|
58
|
+
if (!content || !forbidden.test(content))
|
|
59
|
+
continue;
|
|
60
|
+
hardFail("USER_VISIBLE_TEMPLATE_INTERNAL_TRACE", `用户可见模板泄漏内部施工语义: ${contract.path}`, [contract.path], "template-hygiene", "旧门禁只检查内置资产可见性,不检查用户可见模板内容是否混入内部批次/问题编号", "清理用户可见模板内部语义");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
hardFail("TEMPLATE_CONTRACT_AUDIT_FAILED", `无法执行用户可见模板内容审计: ${e.message}`, ["src/engine/template_asset_contract_registry.ts"], "template-hygiene", "模板内容卫生必须可运行审计", "修复模板合同注册表或编译产物");
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
const obs = await import(path.join(rootDir, "dist", "engine", "code_maintainability_observability_contract.js"));
|
|
68
|
+
const ordinaryApiImplementationTriggers = obs.requiresCodeObservabilityContract?.("实现业务端业务办理列表接口", "code_change") === true;
|
|
69
|
+
if (!ordinaryApiImplementationTriggers) {
|
|
70
|
+
hardFail("CODE_OBSERVABILITY_BUSINESS_API_NOT_TRIGGERED", "problem-68: 普通业务接口实现未触发代码注释与日志契约,真实项目会绕过问题六十八", ["src/engine/code_maintainability_observability_contract.ts", "src/adapters/claude_code/tools.ts"], "problem-68", "旧行为只覆盖支付/安全等关键词,未覆盖普通 Controller/API/Service 编码", "扩展触发条件并在 sf_expand 聚合返回工作包");
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
hardFail("CODE_OBSERVABILITY_TRIGGER_AUDIT_FAILED", `问题六十八触发审计执行失败: ${e.message}`, ["src/engine/code_maintainability_observability_contract.ts"], "problem-68", "触发判断必须可运行", "修复编译或导出");
|
|
75
|
+
}
|
|
76
|
+
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), "soloforge-project-knowledge-"));
|
|
77
|
+
try {
|
|
78
|
+
const goodDir = path.join(tmp, ".soloforge", "knowledge", "rules");
|
|
79
|
+
fs.mkdirSync(goodDir, { recursive: true });
|
|
80
|
+
fs.writeFileSync(path.join(goodDir, "API响应规则.md"), `---
|
|
81
|
+
id: demo-api-response-rule
|
|
82
|
+
asset_kind: hard_rule
|
|
83
|
+
routes:
|
|
84
|
+
- code_change
|
|
85
|
+
- artifact_generation
|
|
86
|
+
primary_triggers:
|
|
87
|
+
- API
|
|
88
|
+
- 接口
|
|
89
|
+
- 响应
|
|
90
|
+
tech_stack:
|
|
91
|
+
- spring
|
|
92
|
+
enforcement:
|
|
93
|
+
level: hard_rule
|
|
94
|
+
---
|
|
95
|
+
# API 响应规则
|
|
96
|
+
|
|
97
|
+
必须使用项目统一响应结构,错误码、字段表和 OpenAPI 保持一致。
|
|
98
|
+
`, "utf-8");
|
|
99
|
+
const projectKnowledge = await import(path.join(rootDir, "dist", "engine", "project_knowledge_contract.js"));
|
|
100
|
+
const lifecycleKnowledge = await import(path.join(rootDir, "dist", "engine", "lifecycle_knowledge_contract.js"));
|
|
101
|
+
const report = projectKnowledge.auditProjectKnowledge(tmp);
|
|
102
|
+
if (report.hard_fail_count !== 0 || report.injectable < 1) {
|
|
103
|
+
hardFail("PROJECT_KNOWLEDGE_RULE_NOT_CONSUMABLE", "用户项目 .soloforge/knowledge hard rule 未被识别为可消费规则", ["src/engine/project_knowledge_contract.ts"], "project-knowledge-consumption", "旧链路只同步/索引内置模板,未证明用户项目自定义规则可被承载消费", "修复项目知识合同审计与选择逻辑");
|
|
104
|
+
}
|
|
105
|
+
const selected = projectKnowledge.selectProjectKnowledgeForTaskWithReasons(report, {
|
|
106
|
+
intent: "实现业务端 API 接口统一响应",
|
|
107
|
+
route: "code_change",
|
|
108
|
+
tech_stack: ["spring"],
|
|
109
|
+
});
|
|
110
|
+
if (!selected.selected.some((decision) => decision.asset.id === "demo-api-response-rule")) {
|
|
111
|
+
hardFail("PROJECT_KNOWLEDGE_RULE_NOT_SELECTED", "用户项目自定义 hard rule 未按意图/路由/技术栈被选中", ["src/engine/project_knowledge_contract.ts"], "project-knowledge-consumption", "索引存在不等于任务会消费", "补齐 selectProjectKnowledgeForTask 行为和门禁");
|
|
112
|
+
}
|
|
113
|
+
const selection = projectKnowledge.selectProjectKnowledgeForTaskWithReasons(report, {
|
|
114
|
+
intent: "实现业务端 API 接口统一响应 PHASE-001 SLICE-001 DD-A001 AC-001",
|
|
115
|
+
route: "code_change",
|
|
116
|
+
tech_stack: ["spring"],
|
|
117
|
+
lifecycle_stage: "implementation",
|
|
118
|
+
changed_files: ["backend/web/src/main/java/com/example/web/tenant/TenantUserController.java"],
|
|
119
|
+
traceability_ids: ["PHASE-001", "SLICE-001", "DD-A001", "AC-001"],
|
|
120
|
+
});
|
|
121
|
+
const selectedDecision = selection.selected.find((decision) => decision.asset.id === "demo-api-response-rule");
|
|
122
|
+
if (!selectedDecision || !selectedDecision.reason_zh || !Array.isArray(selectedDecision.matched_signals)) {
|
|
123
|
+
hardFail("PROJECT_KNOWLEDGE_SELECTION_REASON_MISSING", "用户项目规则选择缺少 why selected / matched_signals 结构化解释", ["src/engine/project_knowledge_contract.ts", "src/engine/intent_expander.ts"], "project-knowledge-consumption", "用户不知道为什么规则被选中就无法判断必须确认和修复路径", "让项目知识选择返回 SelectionDecision 而不是裸资产");
|
|
124
|
+
}
|
|
125
|
+
const unifiedDecision = lifecycleKnowledge.evaluateLifecycleKnowledgeDecision({
|
|
126
|
+
projectPath: tmp,
|
|
127
|
+
consumer: "sf_expand",
|
|
128
|
+
intent: "实现业务端 API 接口统一响应 PHASE-001 SLICE-001 DD-A001 AC-001",
|
|
129
|
+
route: "code_change",
|
|
130
|
+
lifecycle_stage: "implementation",
|
|
131
|
+
changed_files: ["backend/web/src/main/java/com/example/web/tenant/TenantUserController.java"],
|
|
132
|
+
verified_files: ["backend/web/src/main/java/com/example/web/tenant/TenantUserController.java"],
|
|
133
|
+
traceability_ids: ["PHASE-001", "SLICE-001", "DD-A001", "AC-001"],
|
|
134
|
+
tech_stack: ["spring"],
|
|
135
|
+
generation_traces: [
|
|
136
|
+
{ tool_name: "sf_classify", status: "passed", evidence_kind: "result" },
|
|
137
|
+
{ tool_name: "sf_expand", status: "passed", evidence_kind: "result" },
|
|
138
|
+
],
|
|
139
|
+
record_trace: true,
|
|
140
|
+
});
|
|
141
|
+
if (unifiedDecision.contract_id !== "lifecycle_knowledge_contract/v1" ||
|
|
142
|
+
!unifiedDecision.knowledge_selection.selected.some((decision) => decision.asset.id === "demo-api-response-rule") ||
|
|
143
|
+
!unifiedDecision.authoritative_paths.traceability_matrix ||
|
|
144
|
+
!Array.isArray(unifiedDecision.recovery_commands)) {
|
|
145
|
+
hardFail("LIFECYCLE_KNOWLEDGE_DECISION_BUNDLE_INVALID", "统一生命周期知识决策包未同时携带权威路径、SelectionDecision、恢复命令和消费 trace", ["src/engine/lifecycle_knowledge_contract.ts", "src/engine/project_knowledge_contract.ts"], "project-knowledge-consumption", "next/expand/verify/deliver 如果不消费同一决策包,会再次产生局部口径", "修复 evaluateLifecycleKnowledgeDecision 返回结构和入口消费");
|
|
146
|
+
}
|
|
147
|
+
const expander = await import(path.join(rootDir, "dist", "engine", "intent_expander.js"));
|
|
148
|
+
const expandResult = await expander.expand({
|
|
149
|
+
intent: "实现业务端 API 接口统一响应",
|
|
150
|
+
classification: {
|
|
151
|
+
task_type: "feature",
|
|
152
|
+
risk: "low",
|
|
153
|
+
complexity: "low",
|
|
154
|
+
ambiguity: "low",
|
|
155
|
+
affected_repos: ["backend"],
|
|
156
|
+
mode: "autonomous",
|
|
157
|
+
strategy: "full_pipeline",
|
|
158
|
+
},
|
|
159
|
+
projectPath: tmp,
|
|
160
|
+
config: {
|
|
161
|
+
name: "release-gate-project-knowledge",
|
|
162
|
+
tech_stack: {
|
|
163
|
+
backend: { lang: "java", framework: "spring-boot", version: "3" },
|
|
164
|
+
frontend: { lang: "typescript", framework: "react", version: "18" },
|
|
165
|
+
},
|
|
166
|
+
product_profile: "saas",
|
|
167
|
+
repos: [{ name: "backend", path: "backend", lang: "java", framework: "spring-boot", scope: ["backend/src/"] }],
|
|
168
|
+
build_commands: {
|
|
169
|
+
backend: { build: "mvn compile", test: "mvn test", full: "mvn verify" },
|
|
170
|
+
frontend: { build: "npm run build", test: "npm test", full: "npm test" },
|
|
171
|
+
},
|
|
172
|
+
scope: { backend: ["backend/src/"], frontend: ["src/"] },
|
|
173
|
+
_projectPath: tmp,
|
|
174
|
+
},
|
|
175
|
+
knowledgeIndex: { query: () => [], markUsed: () => { } },
|
|
176
|
+
route_decision: {
|
|
177
|
+
route: "code_change",
|
|
178
|
+
execution_shape: "code_execution",
|
|
179
|
+
mutation_allowed: true,
|
|
180
|
+
input_materials: [],
|
|
181
|
+
missing_required_inputs: [],
|
|
182
|
+
scope: { read_only: false },
|
|
183
|
+
constraints: [],
|
|
184
|
+
language_policy: { primary: "zh" },
|
|
185
|
+
confidence: 0.9,
|
|
186
|
+
evidence: [],
|
|
187
|
+
rejected_routes: [],
|
|
188
|
+
conflicts: [],
|
|
189
|
+
decision_version: 1,
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
if (!expandResult.project_knowledge?.selected?.some((asset) => asset.id === "demo-api-response-rule")
|
|
193
|
+
|| !String(expandResult.prompt).includes("## 用户项目规则")
|
|
194
|
+
|| !String(expandResult.prompt).includes("选中原因")
|
|
195
|
+
|| !expandResult.project_knowledge?.selection_decisions?.some((decision) => decision.id === "demo-api-response-rule" && decision.reason_zh)) {
|
|
196
|
+
hardFail("PROJECT_KNOWLEDGE_NOT_IN_EXPAND_MAINPATH", "用户项目规则未进入 sf_expand 真实 prompt 和结构化结果", ["src/engine/intent_expander.ts", "src/engine/project_knowledge_contract.ts"], "project-knowledge-consumption", "审计/选择通过不等于 MCP 主链路会消费", "将项目规则接入 sf_expand 并补主链路测试");
|
|
197
|
+
}
|
|
198
|
+
const nextPlanner = await import(path.join(rootDir, "dist", "engine", "next_action_planner.js"));
|
|
199
|
+
const nextPlan = await nextPlanner.planNextAction(tmp);
|
|
200
|
+
if (!nextPlan.project_knowledge_context || nextPlan.project_knowledge_context.total < 1) {
|
|
201
|
+
hardFail("PROJECT_KNOWLEDGE_NOT_IN_NEXT", "soloforge next 未携带项目知识上下文,用户无法知道下一步会应用哪些项目规则", ["src/engine/next_action_planner.ts", "src/bin/soloforge.ts"], "project-knowledge-consumption", "旧导航只看阶段,不看项目规则", "将项目知识上下文接入 next JSON 和人类输出");
|
|
202
|
+
}
|
|
203
|
+
if (nextPlan.project_knowledge_context?.selected?.length
|
|
204
|
+
&& !nextPlan.project_knowledge_context.selected.some((item) => item.reason_zh && item.enforcement)) {
|
|
205
|
+
hardFail("PROJECT_KNOWLEDGE_NEXT_REASON_MISSING", "soloforge next 项目规则上下文缺少选中原因或强制级别", ["src/engine/next_action_planner.ts", "src/bin/soloforge.ts"], "project-knowledge-consumption", "next 只列规则名不能支撑用户确认哪些必须满足", "在 next 中展示 SelectionDecision 的 reason/enforcement/verification");
|
|
206
|
+
}
|
|
207
|
+
const badTmp = fs.mkdtempSync(path.join(os.tmpdir(), "soloforge-project-knowledge-bad-"));
|
|
208
|
+
try {
|
|
209
|
+
const badDir = path.join(badTmp, ".soloforge", "knowledge", "rules");
|
|
210
|
+
fs.mkdirSync(badDir, { recursive: true });
|
|
211
|
+
fs.writeFileSync(path.join(badDir, "未路由强规则.md"), `---
|
|
212
|
+
id: unrouted-hard-rule
|
|
213
|
+
asset_kind: hard_rule
|
|
214
|
+
enforcement:
|
|
215
|
+
level: hard_rule
|
|
216
|
+
---
|
|
217
|
+
# 未路由强规则
|
|
218
|
+
|
|
219
|
+
必须使用统一响应。
|
|
220
|
+
`, "utf-8");
|
|
221
|
+
const badReport = projectKnowledge.auditProjectKnowledge(badTmp);
|
|
222
|
+
if (badReport.hard_fail_count === 0) {
|
|
223
|
+
hardFail("PROJECT_KNOWLEDGE_UNROUTED_RULE_FALSE_PASS", "用户项目 hard rule 缺少 routes/primary_triggers 时错误放行", ["src/engine/project_knowledge_contract.ts"], "project-knowledge-consumption", "规则文件存在不等于可稳定消费", "对未路由 hard rule fail-closed");
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
finally {
|
|
227
|
+
fs.rmSync(badTmp, { recursive: true, force: true });
|
|
228
|
+
}
|
|
229
|
+
const conflictTmp = fs.mkdtempSync(path.join(os.tmpdir(), "soloforge-project-knowledge-conflict-"));
|
|
230
|
+
try {
|
|
231
|
+
const conflictDir = path.join(conflictTmp, ".soloforge", "knowledge", "rules");
|
|
232
|
+
fs.mkdirSync(conflictDir, { recursive: true });
|
|
233
|
+
fs.writeFileSync(path.join(conflictDir, "响应A.md"), `---
|
|
234
|
+
id: response-a
|
|
235
|
+
asset_kind: hard_rule
|
|
236
|
+
routes: [code_change]
|
|
237
|
+
primary_triggers: [API]
|
|
238
|
+
conflict_group: api_response_format
|
|
239
|
+
rule_value: ApiResponse
|
|
240
|
+
enforcement:
|
|
241
|
+
level: hard_rule
|
|
242
|
+
---
|
|
243
|
+
# 响应 A
|
|
244
|
+
|
|
245
|
+
必须使用 ApiResponse。
|
|
246
|
+
`, "utf-8");
|
|
247
|
+
fs.writeFileSync(path.join(conflictDir, "响应B.md"), `---
|
|
248
|
+
id: response-b
|
|
249
|
+
asset_kind: hard_rule
|
|
250
|
+
routes: [code_change]
|
|
251
|
+
primary_triggers: [API]
|
|
252
|
+
conflict_group: api_response_format
|
|
253
|
+
rule_value: Result
|
|
254
|
+
enforcement:
|
|
255
|
+
level: hard_rule
|
|
256
|
+
---
|
|
257
|
+
# 响应 B
|
|
258
|
+
|
|
259
|
+
必须使用 Result。
|
|
260
|
+
`, "utf-8");
|
|
261
|
+
const conflictReport = projectKnowledge.auditProjectKnowledge(conflictTmp);
|
|
262
|
+
if (!conflictReport.assets.some((asset) => asset.findings.some((finding) => finding.code === "PROJECT_KNOWLEDGE_RULE_CONFLICT"))) {
|
|
263
|
+
hardFail("PROJECT_KNOWLEDGE_CONFLICT_FALSE_PASS", "项目 API 响应等规则冲突未进入用户确认", ["src/engine/project_knowledge_contract.ts"], "project-knowledge-consumption", "旧项目知识审计只看是否可选中,不看项目规则之间互斥", "补冲突组/显式 conflicts_with 检测");
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
finally {
|
|
267
|
+
fs.rmSync(conflictTmp, { recursive: true, force: true });
|
|
268
|
+
}
|
|
269
|
+
const semanticConflictTmp = fs.mkdtempSync(path.join(os.tmpdir(), "soloforge-project-knowledge-semantic-conflict-"));
|
|
270
|
+
try {
|
|
271
|
+
const semanticDir = path.join(semanticConflictTmp, ".soloforge", "knowledge", "rules");
|
|
272
|
+
fs.mkdirSync(semanticDir, { recursive: true });
|
|
273
|
+
fs.writeFileSync(path.join(semanticDir, "响应ApiResponse.md"), `---
|
|
274
|
+
id: response-api-response
|
|
275
|
+
asset_kind: hard_rule
|
|
276
|
+
routes: [code_change]
|
|
277
|
+
primary_triggers: [API响应]
|
|
278
|
+
enforcement:
|
|
279
|
+
level: hard_rule
|
|
280
|
+
---
|
|
281
|
+
# API 响应
|
|
282
|
+
|
|
283
|
+
必须使用 ApiResponse。
|
|
284
|
+
`, "utf-8");
|
|
285
|
+
fs.writeFileSync(path.join(semanticDir, "响应Result.md"), `---
|
|
286
|
+
id: response-result
|
|
287
|
+
asset_kind: hard_rule
|
|
288
|
+
routes: [code_change]
|
|
289
|
+
primary_triggers: [接口响应]
|
|
290
|
+
enforcement:
|
|
291
|
+
level: hard_rule
|
|
292
|
+
---
|
|
293
|
+
# 接口响应
|
|
294
|
+
|
|
295
|
+
必须使用 Result。
|
|
296
|
+
`, "utf-8");
|
|
297
|
+
const semanticConflictReport = projectKnowledge.auditProjectKnowledge(semanticConflictTmp);
|
|
298
|
+
if (!semanticConflictReport.assets.some((asset) => asset.findings.some((finding) => finding.code === "PROJECT_KNOWLEDGE_RULE_CONFLICT"))) {
|
|
299
|
+
hardFail("PROJECT_KNOWLEDGE_SEMANTIC_CONFLICT_FALSE_PASS", "API 响应格式语义冲突依赖手写 conflict_group,未自动进入用户确认", ["src/engine/project_knowledge_contract.ts"], "project-knowledge-consumption", "项目规则冲突不能要求用户预先正确标注才能发现", "补 API 响应/分页/日志/DB/权限语义冲突检测");
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
finally {
|
|
303
|
+
fs.rmSync(semanticConflictTmp, { recursive: true, force: true });
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
catch (e) {
|
|
307
|
+
hardFail("PROJECT_KNOWLEDGE_AUDIT_FAILED", `用户项目知识消费行为审计执行失败: ${e.message}`, ["src/engine/project_knowledge_contract.ts"], "project-knowledge-consumption", "项目知识消费必须有可执行行为门禁", "修复项目知识合同模块和编译产物");
|
|
308
|
+
}
|
|
309
|
+
finally {
|
|
310
|
+
fs.rmSync(tmp, { recursive: true, force: true });
|
|
311
|
+
}
|
|
312
|
+
info?.(" 模板卫生与项目知识消费验证完成");
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=checkTemplateKnowledgeHygiene.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkTemplateKnowledgeHygiene.js","sourceRoot":"","sources":["../../../src/engine/gate_checks/checkTemplateKnowledgeHygiene.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 6: 测试污染初筛
|
|
3
|
+
*/
|
|
4
|
+
import type { GateContext, HardFailCallback, InfoCallback } from "./types.js";
|
|
5
|
+
export declare function check(ctx: GateContext, hardFail: HardFailCallback, info?: InfoCallback): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=checkTestPollution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkTestPollution.d.ts","sourceRoot":"","sources":["../../../src/engine/gate_checks/checkTestPollution.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG9E,wBAAsB,KAAK,CACzB,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CAwCf"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 6: 测试污染初筛
|
|
3
|
+
*/
|
|
4
|
+
import fs from "node:fs";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { safeRead } from "./helpers.js";
|
|
7
|
+
export async function check(ctx, hardFail, info) {
|
|
8
|
+
const rootDir = ctx.rootDir;
|
|
9
|
+
const categories = { product_test: [], useful_contract_test: [], batch_construction_test: [], suspicious_test_pollution: [] };
|
|
10
|
+
const usefulContractExemptions = new Set([]);
|
|
11
|
+
const testDir = path.join(rootDir, "tests");
|
|
12
|
+
function scanTestDir(dir) {
|
|
13
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
14
|
+
for (const entry of entries) {
|
|
15
|
+
const full = path.join(dir, entry.name);
|
|
16
|
+
if (entry.isDirectory()) {
|
|
17
|
+
scanTestDir(full);
|
|
18
|
+
}
|
|
19
|
+
else if (entry.isFile() && (entry.name.endsWith(".test.ts") || entry.name.endsWith(".test.js"))) {
|
|
20
|
+
const content = safeRead(full);
|
|
21
|
+
if (!content)
|
|
22
|
+
continue;
|
|
23
|
+
const rel = path.relative(rootDir, full);
|
|
24
|
+
const isScenarioMatrix = rel.includes("scenario_matrix");
|
|
25
|
+
const isBatchGateRelated = /batch\d/.test(content) && !rel.includes("scripts/");
|
|
26
|
+
const checksImplementedVerified = content.includes("implemented_verified");
|
|
27
|
+
const checksFileExists = /existsSync/.test(content) && /required.*file/i.test(content);
|
|
28
|
+
const checksScenarioSelfAttest = /fixture_status.*ready|scenario.*status.*PASS/.test(content);
|
|
29
|
+
const hasPlaceholderTest = /场景注册占位/.test(content) || /expect\s*\(\s*true\s*\)\s*\.\s*toBe\s*\(\s*true\s*\)/.test(content) || /registered\s+only/.test(content);
|
|
30
|
+
const hasTodoPlaceholder = /\bit\s*\.\s*todo\s*\(/.test(content) || /\bdescribe\s*\.\s*todo\s*\(/.test(content);
|
|
31
|
+
if (hasPlaceholderTest || hasTodoPlaceholder) {
|
|
32
|
+
categories.suspicious_test_pollution.push(rel);
|
|
33
|
+
}
|
|
34
|
+
else if (isScenarioMatrix) {
|
|
35
|
+
categories.batch_construction_test.push(rel);
|
|
36
|
+
}
|
|
37
|
+
else if (usefulContractExemptions.has(rel)) {
|
|
38
|
+
categories.useful_contract_test.push(rel);
|
|
39
|
+
}
|
|
40
|
+
else if (isBatchGateRelated && (checksImplementedVerified || checksFileExists)) {
|
|
41
|
+
categories.suspicious_test_pollution.push(rel);
|
|
42
|
+
}
|
|
43
|
+
else if (checksScenarioSelfAttest && !content.includes("真实") && !content.includes("real")) {
|
|
44
|
+
categories.suspicious_test_pollution.push(rel);
|
|
45
|
+
}
|
|
46
|
+
else if (checksFileExists && !isBatchGateRelated) {
|
|
47
|
+
categories.useful_contract_test.push(rel);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
categories.product_test.push(rel);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
scanTestDir(testDir);
|
|
56
|
+
info?.(` product_test: ${categories.product_test.length} 个`);
|
|
57
|
+
info?.(` useful_contract_test: ${categories.useful_contract_test.length} 个`);
|
|
58
|
+
info?.(` batch_construction_test: ${categories.batch_construction_test.length} 个`);
|
|
59
|
+
info?.(` suspicious_test_pollution: ${categories.suspicious_test_pollution.length} 个`);
|
|
60
|
+
for (const t of categories.suspicious_test_pollution) {
|
|
61
|
+
info?.(` [可疑] ${t}`);
|
|
62
|
+
}
|
|
63
|
+
if (categories.suspicious_test_pollution.length > 0) {
|
|
64
|
+
hardFail("SUSPICIOUS_TEST_POLLUTION", `发现 ${categories.suspicious_test_pollution.length} 个可疑测试文件: 可能只为 Batch 状态、implemented_verified、文件存在、scenario 自证而存在`, categories.suspicious_test_pollution, "测试体系", "旧 gate 把这些测试作为通过证据,但它们可能是循环自证", "删除测试污染");
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=checkTestPollution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkTestPollution.js","sourceRoot":"","sources":["../../../src/engine/gate_checks/checkTestPollution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 门禁检查模块 — Phase 16: 工作流导航契约行为验证(问题六十五)。
|
|
3
|
+
*/
|
|
4
|
+
import type { GateContext, HardFailCallback, InfoCallback } from "./types.js";
|
|
5
|
+
export declare function check(ctx: GateContext, hardFail: HardFailCallback, info?: InfoCallback): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=checkWorkflowNavigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkWorkflowNavigation.d.ts","sourceRoot":"","sources":["../../../src/engine/gate_checks/checkWorkflowNavigation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE9E,wBAAsB,KAAK,CACzB,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CAsOf"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 门禁检查模块 — Phase 16: 工作流导航契约行为验证(问题六十五)。
|
|
3
|
+
*/
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import fs from "node:fs";
|
|
6
|
+
export async function check(ctx, hardFail, info) {
|
|
7
|
+
const rootDir = ctx.rootDir;
|
|
8
|
+
const _info = info ?? (() => { });
|
|
9
|
+
// 1. 编译产物存在性
|
|
10
|
+
const navPath = path.join(rootDir, "dist", "engine", "next_action_planner.js");
|
|
11
|
+
if (!fs.existsSync(navPath)) {
|
|
12
|
+
hardFail("NAVIGATION_MODULE_MISSING", "problem-65: next_action_planner.js 未编译到 dist/", ["src/engine/next_action_planner.ts"], "problem-65", "发布门禁不检查问题-65 导航机制是否存在", "实现 next_action_planner 并编译");
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
// 2. 核心导出存在性
|
|
16
|
+
let nav;
|
|
17
|
+
try {
|
|
18
|
+
nav = await import(navPath);
|
|
19
|
+
}
|
|
20
|
+
catch (e) {
|
|
21
|
+
hardFail("NAVIGATION_IMPORT_ERROR", `problem-65: next_action_planner 导入失败: ${e.message}`, ["src/engine/next_action_planner.ts"], "problem-65", "导航模块存在但不可导入", "修复导入错误");
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (typeof nav.planNextAction !== "function") {
|
|
25
|
+
hardFail("NAVIGATION_EXPORT_MISSING", "problem-65: next_action_planner 未导出 planNextAction 函数", ["src/engine/next_action_planner.ts"], "problem-65", "导航模块缺少核心导出", "添加 planNextAction 导出");
|
|
26
|
+
}
|
|
27
|
+
if (typeof nav.computeDisallowedActions !== "function") {
|
|
28
|
+
hardFail("NAVIGATION_DISALLOWED_MISSING", "problem-65: next_action_planner 未导出 computeDisallowedActions 函数", ["src/engine/next_action_planner.ts"], "problem-65", "禁止动作规则计算函数缺失", "添加 computeDisallowedActions 导出");
|
|
29
|
+
}
|
|
30
|
+
const repairPath = path.join(rootDir, "dist", "engine", "config_auto_repair.js");
|
|
31
|
+
if (!fs.existsSync(repairPath)) {
|
|
32
|
+
hardFail("NAVIGATION_CONFIG_REPAIR_MODULE_MISSING", "problem-65: config_auto_repair.js 未编译到 dist/,机械配置问题无法自动修复", ["src/engine/config_auto_repair.ts"], "problem-65", "导航只提示配置待确认,不检查自动修复能力是否存在", "实现 config_auto_repair 并接入导航");
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
try {
|
|
36
|
+
const repairMod = await import(repairPath);
|
|
37
|
+
if (typeof repairMod.analyzeConfigRepair !== "function" || typeof repairMod.repairProjectConfig !== "function") {
|
|
38
|
+
hardFail("NAVIGATION_CONFIG_REPAIR_EXPORT_MISSING", "problem-65: config_auto_repair 必须导出 analyzeConfigRepair 和 repairProjectConfig", ["src/engine/config_auto_repair.ts"], "problem-65", "自动修复模块存在但主链路不可消费", "补齐自动修复导出函数");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
hardFail("NAVIGATION_CONFIG_REPAIR_IMPORT_ERROR", `problem-65: config_auto_repair 导入失败: ${e.message}`, ["src/engine/config_auto_repair.ts"], "problem-65", "自动修复模块存在但不可导入", "修复 config_auto_repair 导入错误");
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// 3. 行为验证: 未初始化项目应返回 uninitialized
|
|
46
|
+
const tmpDir = path.join(rootDir, ".soloforge-gate-nav-test-" + Date.now());
|
|
47
|
+
try {
|
|
48
|
+
fs.mkdirSync(tmpDir, { recursive: true });
|
|
49
|
+
const plan = await nav.planNextAction(tmpDir);
|
|
50
|
+
if (plan.project_stage !== "uninitialized") {
|
|
51
|
+
hardFail("NAVIGATION_BEHAVIOR_UNINIT", `problem-65: 未初始化项目的阶段应为 uninitialized,实际为 ${plan.project_stage}`, ["src/engine/project_stage_detector.ts"], "problem-65", "导航未正确检测未初始化项目", "修复 detectProjectStage 逻辑");
|
|
52
|
+
}
|
|
53
|
+
if (!plan.work_package || plan.work_package.action !== "初始化") {
|
|
54
|
+
hardFail("NAVIGATION_BEHAVIOR_INIT_WP", `problem-65: 未初始化项目的工作包应为 sf_init,实际为 ${plan.work_package?.action ?? "null"}`, ["src/engine/next_action_planner.ts"], "problem-65", "导航工作包未正确推荐初始化", "修复 computeWorkPackage 逻辑");
|
|
55
|
+
}
|
|
56
|
+
if (!plan.confirmation_decisions) {
|
|
57
|
+
hardFail("NAVIGATION_CONFIRMATION_TIER_MISSING", "problem-65: 导航计划缺少 confirmation_decisions 分级结构", ["src/engine/next_action_planner.ts", "src/engine/workflow_navigation_contract.ts"], "problem-65", "旧导航只输出笼统确认提示,用户不知道哪些必须确认", "补充 must_confirm/should_confirm/auto_resolvable 分级");
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const decisions = plan.confirmation_decisions;
|
|
61
|
+
if (!Array.isArray(decisions.must_confirm) || !Array.isArray(decisions.should_confirm) || !Array.isArray(decisions.auto_resolvable)) {
|
|
62
|
+
hardFail("NAVIGATION_CONFIRMATION_TIER_INVALID", "problem-65: confirmation_decisions 必须同时包含 must_confirm / should_confirm / auto_resolvable 数组", ["src/engine/workflow_navigation_contract.ts"], "problem-65", "确认项没有结构化分级", "修复 ConfirmationDecisionSummary 类型和 planNextAction 输出");
|
|
63
|
+
}
|
|
64
|
+
if ((decisions.must_confirm?.length ?? 0) !== 0) {
|
|
65
|
+
hardFail("NAVIGATION_GREENFIELD_FALSE_MUST_CONFIRM", "problem-65: 从 0 开发的未初始化项目不得要求确认既有项目事实", ["src/engine/next_action_planner.ts"], "problem-65", "空项目确认口径错误,把基线确认当成既有事实确认", "将新项目基线归类为 should_confirm,不阻塞初始化和只读规划");
|
|
66
|
+
}
|
|
67
|
+
const greenfieldHint = JSON.stringify(decisions.should_confirm ?? []);
|
|
68
|
+
if (!greenfieldHint.includes("从 0 开发时没有既有项目事实可确认")) {
|
|
69
|
+
hardFail("NAVIGATION_GREENFIELD_CONFIRMATION_EXPLANATION_MISSING", "problem-65: 新项目确认提示必须说明没有既有项目事实,只确认目标、边界、技术选择和默认口径", ["src/engine/next_action_planner.ts"], "problem-65", "用户不知道空项目如何确认", "补充新项目基线确认说明");
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
hardFail("NAVIGATION_BEHAVIOR_ERROR", `problem-65: 行为级检查执行失败: ${e.message}`, ["src/engine/next_action_planner.ts"], "problem-65", "导航机制行为检查不可执行", "修复导航机制代码");
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
try {
|
|
78
|
+
fs.rmSync(tmpDir, { recursive: true });
|
|
79
|
+
}
|
|
80
|
+
catch { }
|
|
81
|
+
}
|
|
82
|
+
// 3.1 行为验证: 机械配置问题必须归类为 auto_resolvable,不得要求用户确认业务口径
|
|
83
|
+
const repairTmpDir = path.join(rootDir, ".soloforge-gate-config-repair-" + Date.now());
|
|
84
|
+
try {
|
|
85
|
+
const sfDir = path.join(repairTmpDir, ".soloforge");
|
|
86
|
+
fs.mkdirSync(sfDir, { recursive: true });
|
|
87
|
+
fs.writeFileSync(path.join(sfDir, "config.yaml"), [
|
|
88
|
+
"schema_version: 1",
|
|
89
|
+
"name: demo-saas",
|
|
90
|
+
"tech_stack:",
|
|
91
|
+
" backend:",
|
|
92
|
+
" lang: java",
|
|
93
|
+
" framework: spring-boot",
|
|
94
|
+
" version: 3",
|
|
95
|
+
" frontend:",
|
|
96
|
+
" lang: typescript",
|
|
97
|
+
" framework: react",
|
|
98
|
+
" version: 18",
|
|
99
|
+
"product_profile: saas",
|
|
100
|
+
"repos: []",
|
|
101
|
+
"build_commands:",
|
|
102
|
+
" backend:",
|
|
103
|
+
" build: mvn -q -DskipTests package",
|
|
104
|
+
" test: mvn test",
|
|
105
|
+
" full: mvn verify",
|
|
106
|
+
" frontend:",
|
|
107
|
+
" build: npm run build",
|
|
108
|
+
" test: npm test",
|
|
109
|
+
" full: npm run build && npm test",
|
|
110
|
+
"scope:",
|
|
111
|
+
" backend: demo-saas-backend",
|
|
112
|
+
" frontend: demo-saas-frontend",
|
|
113
|
+
].join("\n"), "utf-8");
|
|
114
|
+
fs.writeFileSync(path.join(sfDir, "config.evidence.json"), JSON.stringify({
|
|
115
|
+
schema_version: 2,
|
|
116
|
+
generated_at: "2026-01-01T00:00:00.000Z",
|
|
117
|
+
fields: {
|
|
118
|
+
name: { value: "old-name", confidence: "high", confidence_source: "confirmed", evidence: ["old"] },
|
|
119
|
+
},
|
|
120
|
+
entries: [],
|
|
121
|
+
}, null, 2), "utf-8");
|
|
122
|
+
const repairPlan = await nav.planNextAction(repairTmpDir);
|
|
123
|
+
const decisions = repairPlan.confirmation_decisions;
|
|
124
|
+
const autoItems = decisions?.auto_resolvable ?? [];
|
|
125
|
+
const hasConfigRepair = autoItems.some((item) => item.id === "config-auto-repair" && item.command_hint === "soloforge config repair");
|
|
126
|
+
if (!hasConfigRepair) {
|
|
127
|
+
hardFail("NAVIGATION_CONFIG_REPAIR_NOT_RECOMMENDED", "problem-65: version/scope/evidence 这类机械配置问题必须推荐 soloforge config repair", ["src/engine/next_action_planner.ts", "src/engine/config_auto_repair.ts"], "problem-65", "旧导航把机械配置问题误当成业务确认", "将机械配置问题归入 auto_resolvable");
|
|
128
|
+
}
|
|
129
|
+
if ((decisions?.must_confirm?.length ?? 0) > 0) {
|
|
130
|
+
hardFail("NAVIGATION_CONFIG_REPAIR_FALSE_MUST_CONFIRM", "problem-65: 机械配置问题不得进入 must_confirm,不得要求用户逐字段确认", ["src/engine/next_action_planner.ts"], "problem-65", "旧导航把可自动修复项伪装成用户确认项", "保持 config repair 为 auto_resolvable");
|
|
131
|
+
}
|
|
132
|
+
const actionText = decisions?.recommended_action ?? "";
|
|
133
|
+
if (!actionText.includes("soloforge config repair")) {
|
|
134
|
+
hardFail("NAVIGATION_CONFIG_REPAIR_ACTION_MISSING", "problem-65: recommended_action 必须明确给出 soloforge config repair", ["src/engine/next_action_planner.ts"], "problem-65", "用户不知道下一步该运行哪个命令", "在 recommended_action 中输出自动修复命令");
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (e) {
|
|
138
|
+
hardFail("NAVIGATION_CONFIG_REPAIR_BEHAVIOR_ERROR", `problem-65: 配置自动修复导航行为检查失败: ${e.message}`, ["src/engine/next_action_planner.ts", "src/engine/config_auto_repair.ts"], "problem-65", "配置自动修复行为未纳入发布门禁", "修复配置自动修复导航行为");
|
|
139
|
+
}
|
|
140
|
+
finally {
|
|
141
|
+
try {
|
|
142
|
+
fs.rmSync(repairTmpDir, { recursive: true });
|
|
143
|
+
}
|
|
144
|
+
catch { }
|
|
145
|
+
}
|
|
146
|
+
// 4. 知识文件存在性
|
|
147
|
+
const rulePath = path.join(rootDir, "templates", "internal", "rules", "工作流导航契约规则.md");
|
|
148
|
+
if (!fs.existsSync(rulePath)) {
|
|
149
|
+
hardFail("NAVIGATION_RULE_MISSING", "problem-65: 缺少知识规则文件 工作流导航契约规则.md", ["templates/internal/rules/工作流导航契约规则.md"], "problem-65", "导航知识规则缺失", "创建知识规则文件");
|
|
150
|
+
}
|
|
151
|
+
const procedurePath = path.join(rootDir, "templates", "procedures", "全生命周期工作流导航.md");
|
|
152
|
+
if (!fs.existsSync(procedurePath)) {
|
|
153
|
+
hardFail("NAVIGATION_PROCEDURE_MISSING", "problem-65: 缺少知识流程文件 全生命周期工作流导航.md", ["templates/procedures/全生命周期工作流导航.md"], "problem-65", "导航知识流程缺失", "创建知识流程文件");
|
|
154
|
+
}
|
|
155
|
+
// 5. CLI 命令存在性
|
|
156
|
+
const cliDist = fs.readFileSync(path.join(rootDir, "dist", "bin", "soloforge.js"), "utf-8");
|
|
157
|
+
if (!cliDist.includes('case "next"') && !cliDist.includes("cmdNext")) {
|
|
158
|
+
hardFail("NAVIGATION_CLI_MISSING", "problem-65: CLI 缺少 next 命令入口", ["src/bin/soloforge.ts"], "problem-65", "CLI 无 next 命令", "添加 case 'next' dispatch");
|
|
159
|
+
}
|
|
160
|
+
if (!cliDist.includes('case "stage"') && !cliDist.includes("cmdStage")) {
|
|
161
|
+
hardFail("NAVIGATION_CLI_STAGE_MISSING", "problem-65: CLI 缺少 stage 命令入口", ["src/bin/soloforge.ts"], "problem-65", "CLI 无 stage 命令", "添加 case 'stage' dispatch");
|
|
162
|
+
}
|
|
163
|
+
if (!cliDist.includes('case "repair"') || !cliDist.includes("cmdConfigRepair")) {
|
|
164
|
+
hardFail("NAVIGATION_CONFIG_REPAIR_CLI_MISSING", "problem-65: CLI 缺少 config repair 命令入口", ["src/bin/soloforge.ts", "src/bin/config_commands.ts"], "problem-65", "自动修复能力存在但用户无法通过 CLI 调用", "添加 soloforge config repair");
|
|
165
|
+
}
|
|
166
|
+
_info(" problem-65 工作流导航行为验证完成");
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=checkWorkflowNavigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkWorkflowNavigation.js","sourceRoot":"","sources":["../../../src/engine/gate_checks/checkWorkflowNavigation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAGzB,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,GAAgB,EAChB,QAA0B,EAC1B,IAAmB;IAEnB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEjC,aAAa;IACb,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAC;IAC/E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,QAAQ,CAAC,2BAA2B,EAClC,+CAA+C,EAC/C,CAAC,mCAAmC,CAAC,EAAE,YAAY,EACnD,uBAAuB,EAAE,4BAA4B,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,aAAa;IACb,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,QAAQ,CAAC,yBAAyB,EAChC,yCAAyC,CAAC,CAAC,OAAO,EAAE,EACpD,CAAC,mCAAmC,CAAC,EAAE,YAAY,EACnD,aAAa,EAAE,QAAQ,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;QAC7C,QAAQ,CAAC,2BAA2B,EAClC,uDAAuD,EACvD,CAAC,mCAAmC,CAAC,EAAE,YAAY,EACnD,YAAY,EAAE,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,wBAAwB,KAAK,UAAU,EAAE,CAAC;QACvD,QAAQ,CAAC,+BAA+B,EACtC,iEAAiE,EACjE,CAAC,mCAAmC,CAAC,EAAE,YAAY,EACnD,cAAc,EAAE,gCAAgC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,uBAAuB,CAAC,CAAC;IACjF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,QAAQ,CAAC,yCAAyC,EAChD,2DAA2D,EAC3D,CAAC,kCAAkC,CAAC,EAAE,YAAY,EAClD,0BAA0B,EAAE,6BAA6B,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YAC3C,IAAI,OAAO,SAAS,CAAC,mBAAmB,KAAK,UAAU,IAAI,OAAO,SAAS,CAAC,mBAAmB,KAAK,UAAU,EAAE,CAAC;gBAC/G,QAAQ,CAAC,yCAAyC,EAChD,+EAA+E,EAC/E,CAAC,kCAAkC,CAAC,EAAE,YAAY,EAClD,kBAAkB,EAAE,YAAY,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,QAAQ,CAAC,uCAAuC,EAC9C,wCAAwC,CAAC,CAAC,OAAO,EAAE,EACnD,CAAC,kCAAkC,CAAC,EAAE,YAAY,EAClD,eAAe,EAAE,4BAA4B,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,2BAA2B,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5E,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,aAAa,KAAK,eAAe,EAAE,CAAC;YAC3C,QAAQ,CAAC,4BAA4B,EACnC,6CAA6C,IAAI,CAAC,aAAa,EAAE,EACjE,CAAC,sCAAsC,CAAC,EAAE,YAAY,EACtD,eAAe,EAAE,0BAA0B,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7D,QAAQ,CAAC,6BAA6B,EACpC,wCAAwC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,MAAM,EAAE,EAC7E,CAAC,mCAAmC,CAAC,EAAE,YAAY,EACnD,eAAe,EAAE,0BAA0B,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACjC,QAAQ,CAAC,sCAAsC,EAC7C,gDAAgD,EAChD,CAAC,mCAAmC,EAAE,4CAA4C,CAAC,EAAE,YAAY,EACjG,0BAA0B,EAAE,mDAAmD,CAAC,CAAC;QACrF,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;gBACpI,QAAQ,CAAC,sCAAsC,EAC7C,8FAA8F,EAC9F,CAAC,4CAA4C,CAAC,EAAE,YAAY,EAC5D,YAAY,EAAE,sDAAsD,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChD,QAAQ,CAAC,0CAA0C,EACjD,uCAAuC,EACvC,CAAC,mCAAmC,CAAC,EAAE,YAAY,EACnD,yBAAyB,EAAE,sCAAsC,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;YACtE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBACnD,QAAQ,CAAC,wDAAwD,EAC/D,oDAAoD,EACpD,CAAC,mCAAmC,CAAC,EAAE,YAAY,EACnD,cAAc,EAAE,aAAa,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,QAAQ,CAAC,2BAA2B,EAClC,0BAA0B,CAAC,CAAC,OAAO,EAAE,EACrC,CAAC,mCAAmC,CAAC,EAAE,YAAY,EACnD,cAAc,EAAE,UAAU,CAAC,CAAC;IAChC,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IAC1D,CAAC;IAED,qDAAqD;IACrD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gCAAgC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACvF,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACpD,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE;YAChD,mBAAmB;YACnB,iBAAiB;YACjB,aAAa;YACb,YAAY;YACZ,gBAAgB;YAChB,4BAA4B;YAC5B,gBAAgB;YAChB,aAAa;YACb,sBAAsB;YACtB,sBAAsB;YACtB,iBAAiB;YACjB,uBAAuB;YACvB,WAAW;YACX,iBAAiB;YACjB,YAAY;YACZ,uCAAuC;YACvC,oBAAoB;YACpB,sBAAsB;YACtB,aAAa;YACb,0BAA0B;YAC1B,oBAAoB;YACpB,qCAAqC;YACrC,QAAQ;YACR,8BAA8B;YAC9B,gCAAgC;SACjC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACvB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;YACxE,cAAc,EAAE,CAAC;YACjB,YAAY,EAAE,0BAA0B;YACxC,MAAM,EAAE;gBACN,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;aACnG;YACD,OAAO,EAAE,EAAE;SACZ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAEtB,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,UAAU,CAAC,sBAAsB,CAAC;QACpD,MAAM,SAAS,GAAG,SAAS,EAAE,eAAe,IAAI,EAAE,CAAC;QACnD,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,oBAAoB,IAAI,IAAI,CAAC,YAAY,KAAK,yBAAyB,CAAC,CAAC;QAC3I,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,QAAQ,CAAC,0CAA0C,EACjD,yEAAyE,EACzE,CAAC,mCAAmC,EAAE,kCAAkC,CAAC,EAAE,YAAY,EACvF,mBAAmB,EAAE,2BAA2B,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,QAAQ,CAAC,6CAA6C,EACpD,iDAAiD,EACjD,CAAC,mCAAmC,CAAC,EAAE,YAAY,EACnD,oBAAoB,EAAE,oCAAoC,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,UAAU,GAAG,SAAS,EAAE,kBAAkB,IAAI,EAAE,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;YACpD,QAAQ,CAAC,yCAAyC,EAChD,+DAA+D,EAC/D,CAAC,mCAAmC,CAAC,EAAE,YAAY,EACnD,iBAAiB,EAAE,gCAAgC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,QAAQ,CAAC,yCAAyC,EAChD,+BAA+B,CAAC,CAAC,OAAO,EAAE,EAC1C,CAAC,mCAAmC,EAAE,kCAAkC,CAAC,EAAE,YAAY,EACvF,iBAAiB,EAAE,cAAc,CAAC,CAAC;IACvC,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YAAC,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IAChE,CAAC;IAED,aAAa;IACb,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IACtF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,QAAQ,CAAC,yBAAyB,EAChC,mCAAmC,EACnC,CAAC,uCAAuC,CAAC,EAAE,YAAY,EACvD,UAAU,EAAE,UAAU,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;IACrF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,QAAQ,CAAC,8BAA8B,EACrC,oCAAoC,EACpC,CAAC,oCAAoC,CAAC,EAAE,YAAY,EACpD,UAAU,EAAE,UAAU,CAAC,CAAC;IAC5B,CAAC;IAED,eAAe;IACf,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5F,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACrE,QAAQ,CAAC,wBAAwB,EAC/B,8BAA8B,EAC9B,CAAC,sBAAsB,CAAC,EAAE,YAAY,EACtC,eAAe,EAAE,yBAAyB,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACvE,QAAQ,CAAC,8BAA8B,EACrC,+BAA+B,EAC/B,CAAC,sBAAsB,CAAC,EAAE,YAAY,EACtC,gBAAgB,EAAE,0BAA0B,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC/E,QAAQ,CAAC,sCAAsC,EAC7C,uCAAuC,EACvC,CAAC,sBAAsB,EAAE,4BAA4B,CAAC,EAAE,YAAY,EACpE,wBAAwB,EAAE,4BAA4B,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,0BAA0B,CAAC,CAAC;AACpC,CAAC"}
|