soloforge 1.2.8 → 1.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +105 -321
- package/dist/adapters/claude_code/claude_md.d.ts +5 -0
- package/dist/adapters/claude_code/claude_md.d.ts.map +1 -1
- package/dist/adapters/claude_code/claude_md.js +6 -0
- package/dist/adapters/claude_code/claude_md.js.map +1 -1
- package/dist/adapters/claude_code/hooks.d.ts +4 -0
- package/dist/adapters/claude_code/hooks.d.ts.map +1 -1
- package/dist/adapters/claude_code/hooks.js +5 -0
- package/dist/adapters/claude_code/hooks.js.map +1 -1
- package/dist/adapters/claude_code/server.d.ts.map +1 -1
- package/dist/adapters/claude_code/server.js +9 -21
- package/dist/adapters/claude_code/server.js.map +1 -1
- package/dist/adapters/claude_code/tools.d.ts +5 -0
- package/dist/adapters/claude_code/tools.d.ts.map +1 -1
- package/dist/adapters/claude_code/tools.js +619 -205
- package/dist/adapters/claude_code/tools.js.map +1 -1
- package/dist/adapters/codex/codex_config.d.ts +9 -0
- package/dist/adapters/codex/codex_config.d.ts.map +1 -1
- package/dist/adapters/codex/codex_config.js +11 -3
- package/dist/adapters/codex/codex_config.js.map +1 -1
- package/dist/adapters/codex/codex_rules.d.ts +5 -0
- package/dist/adapters/codex/codex_rules.d.ts.map +1 -1
- package/dist/adapters/codex/codex_rules.js +8 -1
- package/dist/adapters/codex/codex_rules.js.map +1 -1
- package/dist/adapters/shared/workflow_template.d.ts +5 -0
- package/dist/adapters/shared/workflow_template.d.ts.map +1 -1
- package/dist/adapters/shared/workflow_template.js +32 -79
- package/dist/adapters/shared/workflow_template.js.map +1 -1
- package/dist/adapters/trae/trae_config.d.ts +4 -0
- package/dist/adapters/trae/trae_config.d.ts.map +1 -1
- package/dist/adapters/trae/trae_config.js +5 -7
- package/dist/adapters/trae/trae_config.js.map +1 -1
- package/dist/adapters/trae/trae_rules.d.ts +5 -0
- package/dist/adapters/trae/trae_rules.d.ts.map +1 -1
- package/dist/adapters/trae/trae_rules.js +7 -1
- package/dist/adapters/trae/trae_rules.js.map +1 -1
- package/dist/bin/config_commands.d.ts +33 -0
- package/dist/bin/config_commands.d.ts.map +1 -0
- package/dist/bin/config_commands.js +222 -0
- package/dist/bin/config_commands.js.map +1 -0
- package/dist/bin/soloforge.js +609 -119
- package/dist/bin/soloforge.js.map +1 -1
- package/dist/engine/artifact_contract_registry.d.ts +138 -0
- package/dist/engine/artifact_contract_registry.d.ts.map +1 -0
- package/dist/engine/artifact_contract_registry.js +427 -0
- package/dist/engine/artifact_contract_registry.js.map +1 -0
- package/dist/engine/audit_pool.d.ts +40 -0
- package/dist/engine/audit_pool.d.ts.map +1 -1
- package/dist/engine/audit_pool.js +37 -1
- package/dist/engine/audit_pool.js.map +1 -1
- package/dist/engine/audit_sampler.d.ts +5 -0
- package/dist/engine/audit_sampler.d.ts.map +1 -1
- package/dist/engine/audit_sampler.js +6 -0
- package/dist/engine/audit_sampler.js.map +1 -1
- package/dist/engine/audit_verifier.d.ts.map +1 -1
- package/dist/engine/audit_verifier.js +5 -1
- package/dist/engine/audit_verifier.js.map +1 -1
- package/dist/engine/batch1_manifest.d.ts +61 -0
- package/dist/engine/batch1_manifest.d.ts.map +1 -0
- package/dist/engine/batch1_manifest.js +220 -0
- package/dist/engine/batch1_manifest.js.map +1 -0
- package/dist/engine/batch1_reality_gate.d.ts +40 -0
- package/dist/engine/batch1_reality_gate.d.ts.map +1 -0
- package/dist/engine/batch1_reality_gate.js +290 -0
- package/dist/engine/batch1_reality_gate.js.map +1 -0
- package/dist/engine/batch1_scenario_registry.d.ts +62 -0
- package/dist/engine/batch1_scenario_registry.d.ts.map +1 -0
- package/dist/engine/batch1_scenario_registry.js +392 -0
- package/dist/engine/batch1_scenario_registry.js.map +1 -0
- package/dist/engine/batch1_scenario_runners.d.ts +42 -0
- package/dist/engine/batch1_scenario_runners.d.ts.map +1 -0
- package/dist/engine/batch1_scenario_runners.js +292 -0
- package/dist/engine/batch1_scenario_runners.js.map +1 -0
- package/dist/engine/capability_action_advisor.d.ts +3 -0
- package/dist/engine/capability_action_advisor.d.ts.map +1 -1
- package/dist/engine/capability_action_advisor.js +10 -0
- package/dist/engine/capability_action_advisor.js.map +1 -1
- package/dist/engine/capability_registry.d.ts +21 -0
- package/dist/engine/capability_registry.d.ts.map +1 -1
- package/dist/engine/capability_registry.js +113 -0
- package/dist/engine/capability_registry.js.map +1 -1
- package/dist/engine/capability_state_store.d.ts +63 -0
- package/dist/engine/capability_state_store.d.ts.map +1 -1
- package/dist/engine/capability_state_store.js +49 -1
- package/dist/engine/capability_state_store.js.map +1 -1
- package/dist/engine/change_coordinator.d.ts.map +1 -1
- package/dist/engine/change_coordinator.js +5 -4
- package/dist/engine/change_coordinator.js.map +1 -1
- package/dist/engine/classifier.d.ts +15 -5
- package/dist/engine/classifier.d.ts.map +1 -1
- package/dist/engine/classifier.js +70 -69
- package/dist/engine/classifier.js.map +1 -1
- package/dist/engine/code_reviewer.d.ts +14 -0
- package/dist/engine/code_reviewer.d.ts.map +1 -1
- package/dist/engine/code_reviewer.js +109 -10
- package/dist/engine/code_reviewer.js.map +1 -1
- package/dist/engine/cognitive_anchor.d.ts +14 -0
- package/dist/engine/cognitive_anchor.d.ts.map +1 -1
- package/dist/engine/cognitive_anchor.js +26 -2
- package/dist/engine/cognitive_anchor.js.map +1 -1
- package/dist/engine/command_execution_contract.d.ts +226 -0
- package/dist/engine/command_execution_contract.d.ts.map +1 -0
- package/dist/engine/command_execution_contract.js +571 -0
- package/dist/engine/command_execution_contract.js.map +1 -0
- package/dist/engine/confidence_scorer.d.ts.map +1 -1
- package/dist/engine/confidence_scorer.js +1 -0
- package/dist/engine/confidence_scorer.js.map +1 -1
- package/dist/engine/config_precedence_contract.d.ts +269 -0
- package/dist/engine/config_precedence_contract.d.ts.map +1 -0
- package/dist/engine/config_precedence_contract.js +948 -0
- package/dist/engine/config_precedence_contract.js.map +1 -0
- package/dist/engine/conflict_gate.d.ts +13 -0
- package/dist/engine/conflict_gate.d.ts.map +1 -1
- package/dist/engine/conflict_gate.js +20 -2
- package/dist/engine/conflict_gate.js.map +1 -1
- package/dist/engine/consumable_asset_registry.d.ts +46 -0
- package/dist/engine/consumable_asset_registry.d.ts.map +1 -0
- package/dist/engine/consumable_asset_registry.js +758 -0
- package/dist/engine/consumable_asset_registry.js.map +1 -0
- package/dist/engine/contract_guard.d.ts +4 -0
- package/dist/engine/contract_guard.d.ts.map +1 -1
- package/dist/engine/contract_guard.js +15 -7
- package/dist/engine/contract_guard.js.map +1 -1
- package/dist/engine/convention_detector.d.ts.map +1 -1
- package/dist/engine/convention_detector.js +5 -2
- package/dist/engine/convention_detector.js.map +1 -1
- package/dist/engine/core_engineering_principles.d.ts +155 -0
- package/dist/engine/core_engineering_principles.d.ts.map +1 -0
- package/dist/engine/core_engineering_principles.js +426 -0
- package/dist/engine/core_engineering_principles.js.map +1 -0
- package/dist/engine/debt_reporter.d.ts.map +1 -1
- package/dist/engine/debt_reporter.js +3 -1
- package/dist/engine/debt_reporter.js.map +1 -1
- package/dist/engine/debt_tracker.d.ts.map +1 -1
- package/dist/engine/debt_tracker.js +9 -3
- package/dist/engine/debt_tracker.js.map +1 -1
- package/dist/engine/debugger.d.ts.map +1 -1
- package/dist/engine/debugger.js +2 -0
- package/dist/engine/debugger.js.map +1 -1
- package/dist/engine/decision_contract.d.ts +11 -2
- package/dist/engine/decision_contract.d.ts.map +1 -1
- package/dist/engine/decision_contract.js +17 -2
- package/dist/engine/decision_contract.js.map +1 -1
- package/dist/engine/delivery.d.ts +7 -0
- package/dist/engine/delivery.d.ts.map +1 -1
- package/dist/engine/delivery.js +89 -36
- package/dist/engine/delivery.js.map +1 -1
- package/dist/engine/dependency_scanner.d.ts.map +1 -1
- package/dist/engine/dependency_scanner.js +14 -9
- package/dist/engine/dependency_scanner.js.map +1 -1
- package/dist/engine/developer_sovereignty.d.ts.map +1 -1
- package/dist/engine/developer_sovereignty.js +8 -2
- package/dist/engine/developer_sovereignty.js.map +1 -1
- package/dist/engine/diff_ownership.d.ts.map +1 -1
- package/dist/engine/diff_ownership.js +8 -0
- package/dist/engine/diff_ownership.js.map +1 -1
- package/dist/engine/diff_ownership_store.d.ts +26 -10
- package/dist/engine/diff_ownership_store.d.ts.map +1 -1
- package/dist/engine/diff_ownership_store.js +47 -20
- package/dist/engine/diff_ownership_store.js.map +1 -1
- package/dist/engine/dual_layer_mechanism_registry.d.ts +66 -0
- package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -0
- package/dist/engine/dual_layer_mechanism_registry.js +1077 -0
- package/dist/engine/dual_layer_mechanism_registry.js.map +1 -0
- package/dist/engine/escape_report.d.ts +50 -0
- package/dist/engine/escape_report.d.ts.map +1 -1
- package/dist/engine/escape_report.js +38 -0
- package/dist/engine/escape_report.js.map +1 -1
- package/dist/engine/evolver.d.ts.map +1 -1
- package/dist/engine/evolver.js +12 -2
- package/dist/engine/evolver.js.map +1 -1
- package/dist/engine/exploration.d.ts.map +1 -1
- package/dist/engine/exploration.js +87 -0
- package/dist/engine/exploration.js.map +1 -1
- package/dist/engine/failure_classifier.d.ts.map +1 -1
- package/dist/engine/failure_classifier.js +8 -0
- package/dist/engine/failure_classifier.js.map +1 -1
- package/dist/engine/feasibility_checker.d.ts +8 -0
- package/dist/engine/feasibility_checker.d.ts.map +1 -1
- package/dist/engine/feasibility_checker.js +12 -0
- package/dist/engine/feasibility_checker.js.map +1 -1
- package/dist/engine/git_deps.d.ts +4 -1
- package/dist/engine/git_deps.d.ts.map +1 -1
- package/dist/engine/git_deps.js +5 -1
- package/dist/engine/git_deps.js.map +1 -1
- package/dist/engine/governance_report.d.ts +57 -1
- package/dist/engine/governance_report.d.ts.map +1 -1
- package/dist/engine/governance_report.js +91 -1
- package/dist/engine/governance_report.js.map +1 -1
- package/dist/engine/impact_analyzer.d.ts.map +1 -1
- package/dist/engine/impact_analyzer.js +5 -1
- package/dist/engine/impact_analyzer.js.map +1 -1
- package/dist/engine/implementation_roadmap_registry.d.ts +105 -0
- package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -0
- package/dist/engine/implementation_roadmap_registry.js +813 -0
- package/dist/engine/implementation_roadmap_registry.js.map +1 -0
- package/dist/engine/input_material_contract_registry.d.ts +185 -0
- package/dist/engine/input_material_contract_registry.d.ts.map +1 -0
- package/dist/engine/input_material_contract_registry.js +563 -0
- package/dist/engine/input_material_contract_registry.js.map +1 -0
- package/dist/engine/intent_expander.d.ts +8 -27
- package/dist/engine/intent_expander.d.ts.map +1 -1
- package/dist/engine/intent_expander.js +1170 -139
- package/dist/engine/intent_expander.js.map +1 -1
- package/dist/engine/intent_router.d.ts +82 -0
- package/dist/engine/intent_router.d.ts.map +1 -0
- package/dist/engine/intent_router.js +458 -0
- package/dist/engine/intent_router.js.map +1 -0
- package/dist/engine/io_controller.d.ts.map +1 -1
- package/dist/engine/io_controller.js +25 -13
- package/dist/engine/io_controller.js.map +1 -1
- package/dist/engine/java_quality_guard.d.ts.map +1 -1
- package/dist/engine/java_quality_guard.js +8 -4
- package/dist/engine/java_quality_guard.js.map +1 -1
- package/dist/engine/job_manager.d.ts +35 -0
- package/dist/engine/job_manager.d.ts.map +1 -1
- package/dist/engine/job_manager.js +53 -9
- package/dist/engine/job_manager.js.map +1 -1
- package/dist/engine/knowledge_config_loader.d.ts +12 -1
- package/dist/engine/knowledge_config_loader.d.ts.map +1 -1
- package/dist/engine/knowledge_config_loader.js +50 -10
- package/dist/engine/knowledge_config_loader.js.map +1 -1
- package/dist/engine/knowledge_injection_boundary.d.ts +56 -0
- package/dist/engine/knowledge_injection_boundary.d.ts.map +1 -0
- package/dist/engine/knowledge_injection_boundary.js +561 -0
- package/dist/engine/knowledge_injection_boundary.js.map +1 -0
- package/dist/engine/knowledge_manager.d.ts +73 -0
- package/dist/engine/knowledge_manager.d.ts.map +1 -1
- package/dist/engine/knowledge_manager.js +163 -21
- package/dist/engine/knowledge_manager.js.map +1 -1
- package/dist/engine/knowledge_sovereignty.d.ts +1 -0
- package/dist/engine/knowledge_sovereignty.d.ts.map +1 -1
- package/dist/engine/knowledge_sovereignty.js +8 -3
- package/dist/engine/knowledge_sovereignty.js.map +1 -1
- package/dist/engine/llm_gateway.d.ts +74 -3
- package/dist/engine/llm_gateway.d.ts.map +1 -1
- package/dist/engine/llm_gateway.js +75 -4
- package/dist/engine/llm_gateway.js.map +1 -1
- package/dist/engine/main_path_integration_contract.d.ts +383 -0
- package/dist/engine/main_path_integration_contract.d.ts.map +1 -0
- package/dist/engine/main_path_integration_contract.js +1581 -0
- package/dist/engine/main_path_integration_contract.js.map +1 -0
- package/dist/engine/mechanism_contract_registry.d.ts +59 -0
- package/dist/engine/mechanism_contract_registry.d.ts.map +1 -0
- package/dist/engine/mechanism_contract_registry.js +484 -0
- package/dist/engine/mechanism_contract_registry.js.map +1 -0
- package/dist/engine/migration_guard.d.ts.map +1 -1
- package/dist/engine/migration_guard.js +24 -15
- package/dist/engine/migration_guard.js.map +1 -1
- package/dist/engine/mutation_audit.d.ts +10 -0
- package/dist/engine/mutation_audit.d.ts.map +1 -1
- package/dist/engine/mutation_audit.js +19 -2
- package/dist/engine/mutation_audit.js.map +1 -1
- package/dist/engine/observability.d.ts.map +1 -1
- package/dist/engine/observability.js +17 -6
- package/dist/engine/observability.js.map +1 -1
- package/dist/engine/onboarding.d.ts.map +1 -1
- package/dist/engine/onboarding.js +20 -4
- package/dist/engine/onboarding.js.map +1 -1
- package/dist/engine/policy_drift_detector.d.ts +6 -0
- package/dist/engine/policy_drift_detector.d.ts.map +1 -1
- package/dist/engine/policy_drift_detector.js +16 -0
- package/dist/engine/policy_drift_detector.js.map +1 -1
- package/dist/engine/privacy_secret_contract.d.ts +320 -0
- package/dist/engine/privacy_secret_contract.d.ts.map +1 -0
- package/dist/engine/privacy_secret_contract.js +874 -0
- package/dist/engine/privacy_secret_contract.js.map +1 -0
- package/dist/engine/regression_matrix.d.ts +21 -8
- package/dist/engine/regression_matrix.d.ts.map +1 -1
- package/dist/engine/regression_matrix.js +37 -8
- package/dist/engine/regression_matrix.js.map +1 -1
- package/dist/engine/risk_sampler.d.ts +6 -0
- package/dist/engine/risk_sampler.d.ts.map +1 -1
- package/dist/engine/risk_sampler.js +9 -0
- package/dist/engine/risk_sampler.js.map +1 -1
- package/dist/engine/runtime_safety.d.ts.map +1 -1
- package/dist/engine/runtime_safety.js +7 -3
- package/dist/engine/runtime_safety.js.map +1 -1
- package/dist/engine/scaffolder.d.ts.map +1 -1
- package/dist/engine/scaffolder.js +7 -1
- package/dist/engine/scaffolder.js.map +1 -1
- package/dist/engine/scope_controller.d.ts.map +1 -1
- package/dist/engine/scope_controller.js +12 -1
- package/dist/engine/scope_controller.js.map +1 -1
- package/dist/engine/scope_lease.d.ts +43 -0
- package/dist/engine/scope_lease.d.ts.map +1 -1
- package/dist/engine/scope_lease.js +44 -0
- package/dist/engine/scope_lease.js.map +1 -1
- package/dist/engine/semantic_evidence.d.ts +6 -0
- package/dist/engine/semantic_evidence.d.ts.map +1 -1
- package/dist/engine/semantic_evidence.js +9 -0
- package/dist/engine/semantic_evidence.js.map +1 -1
- package/dist/engine/task_context.d.ts +36 -1
- package/dist/engine/task_context.d.ts.map +1 -1
- package/dist/engine/task_context.js +252 -13
- package/dist/engine/task_context.js.map +1 -1
- package/dist/engine/task_planner.d.ts.map +1 -1
- package/dist/engine/task_planner.js +13 -3
- package/dist/engine/task_planner.js.map +1 -1
- package/dist/engine/team_awareness.d.ts.map +1 -1
- package/dist/engine/team_awareness.js +8 -7
- package/dist/engine/team_awareness.js.map +1 -1
- package/dist/engine/template_mechanism_auditor.d.ts +93 -0
- package/dist/engine/template_mechanism_auditor.d.ts.map +1 -0
- package/dist/engine/template_mechanism_auditor.js +622 -0
- package/dist/engine/template_mechanism_auditor.js.map +1 -0
- package/dist/engine/test_generator.d.ts.map +1 -1
- package/dist/engine/test_generator.js +6 -0
- package/dist/engine/test_generator.js.map +1 -1
- package/dist/engine/test_quality.d.ts +6 -0
- package/dist/engine/test_quality.d.ts.map +1 -1
- package/dist/engine/test_quality.js +26 -10
- package/dist/engine/test_quality.js.map +1 -1
- package/dist/engine/tool_invocation_contract_registry.d.ts +136 -0
- package/dist/engine/tool_invocation_contract_registry.d.ts.map +1 -0
- package/dist/engine/tool_invocation_contract_registry.js +731 -0
- package/dist/engine/tool_invocation_contract_registry.js.map +1 -0
- package/dist/engine/traceability.d.ts +3 -0
- package/dist/engine/traceability.d.ts.map +1 -1
- package/dist/engine/traceability.js +12 -4
- package/dist/engine/traceability.js.map +1 -1
- package/dist/engine/user_feedback_contract.d.ts +162 -0
- package/dist/engine/user_feedback_contract.d.ts.map +1 -0
- package/dist/engine/user_feedback_contract.js +356 -0
- package/dist/engine/user_feedback_contract.js.map +1 -0
- package/dist/engine/verifier.d.ts +6 -1
- package/dist/engine/verifier.d.ts.map +1 -1
- package/dist/engine/verifier.js +114 -1
- package/dist/engine/verifier.js.map +1 -1
- package/dist/engine/workflow_contract_registry.d.ts +70 -0
- package/dist/engine/workflow_contract_registry.d.ts.map +1 -0
- package/dist/engine/workflow_contract_registry.js +501 -0
- package/dist/engine/workflow_contract_registry.js.map +1 -0
- package/dist/engine/workspace_resumer.d.ts.map +1 -1
- package/dist/engine/workspace_resumer.js +8 -0
- package/dist/engine/workspace_resumer.js.map +1 -1
- package/dist/engine/zero_config_init.d.ts +67 -2
- package/dist/engine/zero_config_init.d.ts.map +1 -1
- package/dist/engine/zero_config_init.js +410 -28
- package/dist/engine/zero_config_init.js.map +1 -1
- package/dist/git/operations.d.ts +101 -0
- package/dist/git/operations.d.ts.map +1 -1
- package/dist/git/operations.js +125 -9
- package/dist/git/operations.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +16 -5
- package/dist/index.js.map +1 -1
- package/dist/knowledge/conflict_detector.d.ts +6 -0
- package/dist/knowledge/conflict_detector.d.ts.map +1 -1
- package/dist/knowledge/conflict_detector.js +7 -0
- package/dist/knowledge/conflict_detector.js.map +1 -1
- package/dist/knowledge/health_checker.d.ts +16 -0
- package/dist/knowledge/health_checker.d.ts.map +1 -1
- package/dist/knowledge/health_checker.js +24 -1
- package/dist/knowledge/health_checker.js.map +1 -1
- package/dist/knowledge/index_manager.d.ts +140 -2
- package/dist/knowledge/index_manager.d.ts.map +1 -1
- package/dist/knowledge/index_manager.js +186 -26
- package/dist/knowledge/index_manager.js.map +1 -1
- package/dist/knowledge/loader.d.ts +8 -1
- package/dist/knowledge/loader.d.ts.map +1 -1
- package/dist/knowledge/loader.js +56 -2
- package/dist/knowledge/loader.js.map +1 -1
- package/dist/knowledge/writer.d.ts +49 -1
- package/dist/knowledge/writer.d.ts.map +1 -1
- package/dist/knowledge/writer.js +55 -1
- package/dist/knowledge/writer.js.map +1 -1
- package/dist/types.d.ts +255 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +29 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +7 -7
- package/templates/knowledge/checklists//344/270/273/351/223/276/350/267/257/346/216/245/345/205/245/351/252/214/346/224/266/346/270/205/345/215/225.md +16 -0
- package/templates/knowledge/checklists//345/267/245/344/275/234/346/265/201/351/252/214/346/224/266/346/270/205/345/215/225.md +17 -0
- package/templates/knowledge/checklists//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214/351/252/214/346/224/266/346/270/205/345/215/225.md +43 -0
- package/templates/knowledge/checklists//347/237/245/350/257/206/346/263/250/345/205/245/351/252/214/346/224/266/346/270/205/345/215/225.md +17 -0
- package/templates/knowledge/checklists//351/232/220/347/247/201/345/256/241/346/237/245/346/270/205/345/215/225.md +15 -0
- package/templates/knowledge/checklists//351/252/214/350/257/201/351/252/214/346/224/266/346/270/205/345/215/225.md +16 -0
- package/templates/knowledge/patterns/core//345/206/263/347/255/226/347/275/221/345/205/263.md +1 -0
- package/templates/knowledge/procedures//344/270/273/351/223/276/350/267/257/346/216/245/345/205/245/351/252/214/350/257/201/346/265/201/347/250/213.md +23 -0
- package/templates/knowledge/procedures//345/221/275/344/273/244/346/211/247/350/241/214/346/265/201/347/250/213.md +19 -0
- package/templates/knowledge/procedures//345/267/245/345/205/267/350/260/203/347/224/250/346/265/201/347/250/213.md +15 -0
- package/templates/knowledge/procedures//346/204/217/345/233/276/350/267/257/347/224/261/346/265/201/347/250/213.md +15 -0
- package/templates/knowledge/procedures//346/272/220/347/240/201/345/216/237/345/236/213/344/272/244/344/273/230/346/265/201/347/250/213.md +1 -1
- package/templates/knowledge/procedures//347/274/226/347/240/201/345/211/215/346/276/204/346/270/205/346/265/201/347/250/213.md +53 -0
- package/templates/knowledge/rules//344/272/247/347/211/251/345/245/221/347/272/246/350/247/204/345/210/231.md +21 -0
- package/templates/knowledge/rules//345/221/275/344/273/244/346/211/247/350/241/214/350/247/204/345/210/231.md +25 -0
- package/templates/knowledge/rules//345/267/245/344/275/234/346/265/201/345/245/221/347/272/246/350/247/204/345/210/231.md +20 -0
- package/templates/knowledge/rules//345/267/245/345/205/267/350/260/203/347/224/250/350/247/204/345/210/231.md +25 -0
- package/templates/knowledge/rules//346/204/217/345/233/276/350/267/257/347/224/261/350/247/204/345/210/231.md +26 -0
- package/templates/knowledge/rules//346/211/247/350/241/214/345/256/210/345/215/253/350/257/204/344/274/260/350/247/204/345/210/231.md +24 -0
- package/templates/knowledge/rules//346/225/217/346/204/237/344/277/241/346/201/257/345/244/204/347/220/206/350/247/204/345/210/231.md +20 -0
- package/templates/knowledge/rules//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214/345/216/237/345/210/231.md +125 -0
- package/templates/knowledge/rules//346/263/250/345/206/214/350/241/250/345/237/272/347/241/200/350/256/276/346/226/275/350/247/204/345/210/231.md +26 -0
- package/templates/knowledge/rules//347/224/250/346/210/267/345/217/215/351/246/210/345/245/221/347/272/246/350/247/204/345/210/231.md +22 -0
- package/templates/knowledge/rules//347/237/245/350/257/206/346/263/250/345/205/245/350/276/271/347/225/214/350/247/204/345/210/231.md +25 -0
- package/templates/knowledge/rules//350/276/223/345/205/245/346/235/220/346/226/231/345/245/221/347/272/246/350/247/204/345/210/231.md +27 -0
- package/templates/knowledge/rules//351/205/215/347/275/256/344/274/230/345/205/210/347/272/247/350/247/204/345/210/231.md +22 -0
- package/templates/knowledge/rules//351/230/262/345/255/244/345/262/233/345/256/236/347/216/260/350/247/204/345/210/231.md +24 -0
- package/templates/knowledge/rules//351/233/266/351/205/215/347/275/256/345/210/235/345/247/213/345/214/226/350/247/204/345/210/231.md +28 -0
- package/templates/knowledge/rules//351/252/214/350/257/201/345/245/221/347/272/246/350/247/204/345/210/231.md +25 -0
- package/templates/knowledge/templates/{review_summary.md → /345/256/241/346/237/245/346/221/230/350/246/201.md} +1 -1
- package/templates/config.yaml +0 -53
|
@@ -0,0 +1,813 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implementation Roadmap Contract 的落地注册表。
|
|
3
|
+
*
|
|
4
|
+
* 将 42 个追踪问题映射到 4 个实施批次(P0-P3),
|
|
5
|
+
* 提供查询、校验和跨注册表一致性检查能力。
|
|
6
|
+
*/
|
|
7
|
+
// ── 数据 ──
|
|
8
|
+
const PROBLEM_ENTRIES = [
|
|
9
|
+
// ── Pre-completed ──
|
|
10
|
+
{
|
|
11
|
+
id: "problem-1", label: "问题一",
|
|
12
|
+
title: "自动膨胀入口被 task_type 绑死,导致大量产物型/提取型/分析型语义被跳过",
|
|
13
|
+
status: "completed", priority: "pre_completed", batch_id: null,
|
|
14
|
+
completion_evidence: "4e98eb3",
|
|
15
|
+
related_mechanism_ids: ["mc-intent-router"], related_capability_ids: [],
|
|
16
|
+
owner_module: "src/engine/intent_router.ts",
|
|
17
|
+
test_files: ["tests/engine/intent_router.test.ts"],
|
|
18
|
+
memo_section: "## ",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: "problem-2", label: "问题二",
|
|
22
|
+
title: "setup.sh 是历史遗留入口,应删除避免安装心智冲突",
|
|
23
|
+
status: "completed", priority: "pre_completed", batch_id: null,
|
|
24
|
+
completion_evidence: "73286ef",
|
|
25
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
26
|
+
owner_module: null,
|
|
27
|
+
test_files: ["tests/templates/no_setup_sh.test.ts"],
|
|
28
|
+
memo_section: "## ",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: "problem-3", label: "问题三",
|
|
32
|
+
title: "verify-test-counts.mjs 是过时测试数量门禁,应删除",
|
|
33
|
+
status: "completed", priority: "pre_completed", batch_id: null,
|
|
34
|
+
completion_evidence: "f514032",
|
|
35
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
36
|
+
owner_module: null,
|
|
37
|
+
test_files: [],
|
|
38
|
+
memo_section: "## ",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: "problem-4", label: "问题四",
|
|
42
|
+
title: "SoloForge 可消费资产缺少消费覆盖矩阵",
|
|
43
|
+
status: "completed", priority: "pre_completed", batch_id: null,
|
|
44
|
+
completion_evidence: "2d71d40",
|
|
45
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
46
|
+
owner_module: "src/engine/consumable_asset_registry.ts",
|
|
47
|
+
test_files: ["tests/engine/consumable_asset_registry.test.ts"],
|
|
48
|
+
memo_section: "## ",
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: "problem-5", label: "问题五",
|
|
52
|
+
title: "机制层缺少自治理,无法系统发现机制失效、空转和状态污染",
|
|
53
|
+
status: "completed", priority: "pre_completed", batch_id: null,
|
|
54
|
+
completion_evidence: "a344c85",
|
|
55
|
+
related_mechanism_ids: ["mc-intent-router", "mc-classifier", "mc-intent-expander", "mc-knowledge-matching", "mc-knowledge-injection-boundary", "mc-task-context-lifecycle", "mc-verifier", "mc-workspace-resumer"],
|
|
56
|
+
related_capability_ids: [],
|
|
57
|
+
owner_module: "src/engine/mechanism_contract_registry.ts",
|
|
58
|
+
test_files: ["tests/engine/mechanism_contract_registry.test.ts"],
|
|
59
|
+
memo_section: "## ",
|
|
60
|
+
},
|
|
61
|
+
// ── P0 / Batch 1 ──
|
|
62
|
+
{
|
|
63
|
+
id: "problem-6", label: "问题六",
|
|
64
|
+
title: "项目配置不应默认自动落盘,必须区分运行时推断、现有项目探测和空项目蓝图",
|
|
65
|
+
status: "completed", priority: "P0", batch_id: "batch-1",
|
|
66
|
+
completion_evidence: "2707dbc",
|
|
67
|
+
related_mechanism_ids: ["mc-zero-config-init"], related_capability_ids: [],
|
|
68
|
+
owner_module: "src/engine/zero_config_init.ts",
|
|
69
|
+
test_files: ["tests/engine/zero_config_init.test.ts", "tests/engine/auto_init_cli.test.ts", "tests/engine/auto_init.test.ts"],
|
|
70
|
+
memo_section: "## ",
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: "problem-8", label: "问题八",
|
|
74
|
+
title: "知识注入边界过粗,缺少分层优先级、状态约束、注入原因和排除原因",
|
|
75
|
+
status: "completed", priority: "P0", batch_id: "batch-1",
|
|
76
|
+
completion_evidence: "d4e1731",
|
|
77
|
+
related_mechanism_ids: ["mc-knowledge-injection-boundary", "mc-knowledge-matching"],
|
|
78
|
+
related_capability_ids: ["knowledge_sovereignty"],
|
|
79
|
+
owner_module: "src/engine/knowledge_injection_boundary.ts",
|
|
80
|
+
test_files: ["tests/engine/knowledge_injection_boundary.test.ts"],
|
|
81
|
+
memo_section: "## ",
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
id: "problem-9", label: "问题九",
|
|
85
|
+
title: "机制层核心工作流停留在概念流程,缺少可执行契约、机制分工、降级边界和防退化治理",
|
|
86
|
+
status: "completed", priority: "P0", batch_id: "batch-1",
|
|
87
|
+
related_mechanism_ids: ["mc-task-context-lifecycle"],
|
|
88
|
+
related_capability_ids: ["task_context_lifecycle"],
|
|
89
|
+
owner_module: "src/engine/workflow_contract_registry.ts",
|
|
90
|
+
test_files: ["tests/engine/workflow_contract_registry.test.ts"],
|
|
91
|
+
completion_evidence: "workflow_contract_registry",
|
|
92
|
+
memo_section: "## ",
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
id: "problem-22", label: "问题二十二",
|
|
96
|
+
title: "MCP 工具 / 适配器边界缺少 Tool Invocation Contract",
|
|
97
|
+
status: "completed", priority: "P0", batch_id: "batch-1",
|
|
98
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
99
|
+
owner_module: "src/engine/tool_invocation_contract_registry.ts",
|
|
100
|
+
test_files: ["tests/engine/tool_invocation_contract_registry.test.ts"],
|
|
101
|
+
completion_evidence: "tool_invocation_contract_registry",
|
|
102
|
+
memo_section: "## ",
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
id: "problem-23", label: "问题二十三",
|
|
106
|
+
title: "外部材料摄取边界缺少 Input Material Contract",
|
|
107
|
+
status: "planned", priority: "P0", batch_id: "batch-1",
|
|
108
|
+
related_mechanism_ids: ["mc-input-material-contract"], related_capability_ids: [],
|
|
109
|
+
owner_module: "src/engine/input_material_contract_registry.ts", test_files: ["tests/engine/input_material_contract_registry.test.ts"],
|
|
110
|
+
memo_section: "## ",
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
id: "problem-24", label: "问题二十四",
|
|
114
|
+
title: "输出产物管理缺少 Artifact Contract",
|
|
115
|
+
status: "completed", priority: "P0", batch_id: "batch-1",
|
|
116
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
117
|
+
owner_module: "src/engine/artifact_contract_registry.ts", test_files: ["tests/engine/artifact_contract_registry.test.ts"],
|
|
118
|
+
completion_evidence: "artifact_contract_registry",
|
|
119
|
+
memo_section: "## ",
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
id: "problem-29", label: "问题二十九",
|
|
123
|
+
title: "用户可见反馈体验缺少 User Feedback Contract",
|
|
124
|
+
status: "completed", priority: "P0", batch_id: "batch-1",
|
|
125
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
126
|
+
owner_module: "src/engine/user_feedback_contract.ts", test_files: ["tests/engine/user_feedback_contract.test.ts"],
|
|
127
|
+
completion_evidence: "user_feedback_contract",
|
|
128
|
+
memo_section: "## ",
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
id: "problem-32", label: "问题三十二",
|
|
132
|
+
title: "权限、隐私与敏感信息边界缺少 Privacy / Secret / Data Sovereignty Contract",
|
|
133
|
+
status: "completed", priority: "P0", batch_id: "batch-1",
|
|
134
|
+
related_mechanism_ids: [], related_capability_ids: ["secret_scan", "scope_hook"],
|
|
135
|
+
owner_module: "src/engine/privacy_secret_contract.ts", test_files: ["tests/engine/privacy_secret_contract.test.ts"],
|
|
136
|
+
completion_evidence: "privacy_secret_contract",
|
|
137
|
+
memo_section: "## ",
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
id: "problem-33", label: "问题三十三",
|
|
141
|
+
title: "真实命令执行边界缺少 Command Execution Contract",
|
|
142
|
+
status: "completed", priority: "P0", batch_id: "batch-1",
|
|
143
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
144
|
+
owner_module: "src/engine/command_execution_contract.ts", test_files: ["tests/engine/command_execution_contract.test.ts"],
|
|
145
|
+
completion_evidence: "command_execution_contract",
|
|
146
|
+
memo_section: "## ",
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
id: "problem-37", label: "问题三十七",
|
|
150
|
+
title: "配置优先级与覆盖规则缺少 Configuration Precedence Contract",
|
|
151
|
+
status: "completed", priority: "P0", batch_id: "batch-1",
|
|
152
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
153
|
+
owner_module: "src/engine/config_precedence_contract.ts", test_files: ["tests/engine/config_precedence_contract.test.ts"],
|
|
154
|
+
completion_evidence: "config_precedence_contract",
|
|
155
|
+
memo_section: "## ",
|
|
156
|
+
},
|
|
157
|
+
// ── P1 / Batch 2 ──
|
|
158
|
+
{
|
|
159
|
+
id: "problem-11", label: "问题十一",
|
|
160
|
+
title: "机制层强制护栏边界过窄且缺少统一 Enforcement Contract",
|
|
161
|
+
status: "planned", priority: "P1", batch_id: "batch-2",
|
|
162
|
+
related_mechanism_ids: [], related_capability_ids: ["scope_hook", "secret_scan"],
|
|
163
|
+
owner_module: null, test_files: [],
|
|
164
|
+
memo_section: "## ",
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
id: "problem-12", label: "问题十二",
|
|
168
|
+
title: "机制层验证与交付缺少 Verification/Delivery Contract",
|
|
169
|
+
status: "planned", priority: "P1", batch_id: "batch-2",
|
|
170
|
+
related_mechanism_ids: ["mc-verifier"], related_capability_ids: ["verify_command_generation"],
|
|
171
|
+
owner_module: null, test_files: [],
|
|
172
|
+
memo_section: "## ",
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
id: "problem-13", label: "问题十三",
|
|
176
|
+
title: "机制层失败处理缺少 Failure Contract",
|
|
177
|
+
status: "planned", priority: "P1", batch_id: "batch-2",
|
|
178
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
179
|
+
owner_module: null, test_files: [],
|
|
180
|
+
memo_section: "## ",
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
id: "problem-15", label: "问题十五",
|
|
184
|
+
title: "机制族缺少 Mechanism Family Implementation Map",
|
|
185
|
+
status: "planned", priority: "P1", batch_id: "batch-2",
|
|
186
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
187
|
+
owner_module: null, test_files: [],
|
|
188
|
+
memo_section: "## ",
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
id: "problem-17", label: "问题十七",
|
|
192
|
+
title: "TaskContext 边界缺少 State Fact Contract",
|
|
193
|
+
status: "planned", priority: "P1", batch_id: "batch-2",
|
|
194
|
+
related_mechanism_ids: ["mc-task-context-lifecycle"], related_capability_ids: ["task_context_lifecycle"],
|
|
195
|
+
owner_module: null, test_files: [],
|
|
196
|
+
memo_section: "## ",
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
id: "problem-18", label: "问题十八",
|
|
200
|
+
title: "降级与容错策略过粗,缺少 Degradation Contract",
|
|
201
|
+
status: "planned", priority: "P1", batch_id: "batch-2",
|
|
202
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
203
|
+
owner_module: null, test_files: [],
|
|
204
|
+
memo_section: "## ",
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
id: "problem-20", label: "问题二十",
|
|
208
|
+
title: "契约治理内核缺少统一 Contract Registry",
|
|
209
|
+
status: "planned", priority: "P1", batch_id: "batch-2",
|
|
210
|
+
related_mechanism_ids: [], related_capability_ids: ["governance_runtime_loop"],
|
|
211
|
+
owner_module: null, test_files: [],
|
|
212
|
+
memo_section: "## ",
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
id: "problem-28", label: "问题二十八",
|
|
216
|
+
title: "多任务、并发与工作区污染缺少 Concurrency / Workspace Isolation Contract",
|
|
217
|
+
status: "planned", priority: "P1", batch_id: "batch-2",
|
|
218
|
+
related_mechanism_ids: [], related_capability_ids: ["io_lock", "scope_lease"],
|
|
219
|
+
owner_module: null, test_files: [],
|
|
220
|
+
memo_section: "## ",
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
id: "problem-34", label: "问题三十四",
|
|
224
|
+
title: "测试策略缺少 Test Strategy Contract",
|
|
225
|
+
status: "planned", priority: "P1", batch_id: "batch-2",
|
|
226
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
227
|
+
owner_module: null, test_files: [],
|
|
228
|
+
memo_section: "## ",
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
id: "problem-36", label: "问题三十六",
|
|
232
|
+
title: "错误码 / 诊断码体系缺少 Diagnostic Code Contract",
|
|
233
|
+
status: "planned", priority: "P1", batch_id: "batch-2",
|
|
234
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
235
|
+
owner_module: null, test_files: [],
|
|
236
|
+
memo_section: "## ",
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
id: "problem-38", label: "问题三十八",
|
|
240
|
+
title: "日志 / 审计 / 可观测性存储边界缺少 Observability Storage Contract",
|
|
241
|
+
status: "planned", priority: "P1", batch_id: "batch-2",
|
|
242
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
243
|
+
owner_module: null, test_files: [],
|
|
244
|
+
memo_section: "## ",
|
|
245
|
+
},
|
|
246
|
+
// ── P2 / Batch 3 ──
|
|
247
|
+
{
|
|
248
|
+
id: "problem-7", label: "问题七",
|
|
249
|
+
title: "知识生命周期缺少自治理,且 active/core、staged/draft 等概念混淆",
|
|
250
|
+
status: "planned", priority: "P2", batch_id: "batch-3",
|
|
251
|
+
related_mechanism_ids: [], related_capability_ids: ["knowledge_sovereignty"],
|
|
252
|
+
owner_module: null, test_files: [],
|
|
253
|
+
memo_section: "## ",
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
id: "problem-10", label: "问题十",
|
|
257
|
+
title: "用户项目内缺少中文语义优先机制",
|
|
258
|
+
status: "planned", priority: "P2", batch_id: "batch-3",
|
|
259
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
260
|
+
owner_module: null, test_files: [],
|
|
261
|
+
memo_section: "## ",
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
id: "problem-14", label: "问题十四",
|
|
265
|
+
title: "知识演进缺少 Evidence-based Promotion Contract",
|
|
266
|
+
status: "planned", priority: "P2", batch_id: "batch-3",
|
|
267
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
268
|
+
owner_module: null, test_files: [],
|
|
269
|
+
memo_section: "## ",
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
id: "problem-21", label: "问题二十一",
|
|
273
|
+
title: "文档维护边界缺少 Documentation Governance Contract",
|
|
274
|
+
status: "planned", priority: "P2", batch_id: "batch-3",
|
|
275
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
276
|
+
owner_module: null, test_files: [],
|
|
277
|
+
memo_section: "## ",
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
id: "problem-25", label: "问题二十五",
|
|
281
|
+
title: "模板与知识同步升级缺少 Template Sync / Migration Contract",
|
|
282
|
+
status: "planned", priority: "P2", batch_id: "batch-3",
|
|
283
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
284
|
+
owner_module: null, test_files: [],
|
|
285
|
+
memo_section: "## ",
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
id: "problem-30", label: "问题三十",
|
|
289
|
+
title: "CLI / README / 用户心智边界缺少 User Promise Contract",
|
|
290
|
+
status: "planned", priority: "P2", batch_id: "batch-3",
|
|
291
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
292
|
+
owner_module: null, test_files: [],
|
|
293
|
+
memo_section: "## ",
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
id: "problem-31", label: "问题三十一",
|
|
297
|
+
title: "适配器工作流模板缺少 Adapter Prompt Contract",
|
|
298
|
+
status: "planned", priority: "P2", batch_id: "batch-3",
|
|
299
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
300
|
+
owner_module: null, test_files: [],
|
|
301
|
+
memo_section: "## ",
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
id: "problem-35", label: "问题三十五",
|
|
305
|
+
title: "Release / 版本兼容 / 迁移策略缺少 Release Compatibility Contract",
|
|
306
|
+
status: "planned", priority: "P2", batch_id: "batch-3",
|
|
307
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
308
|
+
owner_module: null, test_files: [],
|
|
309
|
+
memo_section: "## ",
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
id: "problem-41", label: "问题四十一",
|
|
313
|
+
title: "国际化与多语言项目覆盖缺少 Language Policy Override Contract",
|
|
314
|
+
status: "planned", priority: "P2", batch_id: "batch-3",
|
|
315
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
316
|
+
owner_module: null, test_files: [],
|
|
317
|
+
memo_section: "## ",
|
|
318
|
+
},
|
|
319
|
+
// ── P3 / Batch 4 ──
|
|
320
|
+
{
|
|
321
|
+
id: "problem-16", label: "问题十六",
|
|
322
|
+
title: "自主技术选型缺少 Decision Sovereignty Contract",
|
|
323
|
+
status: "planned", priority: "P3", batch_id: "batch-4",
|
|
324
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
325
|
+
owner_module: null, test_files: [],
|
|
326
|
+
memo_section: "## ",
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
id: "problem-19", label: "问题十九",
|
|
330
|
+
title: "质量指标与监控缺少 Metric Contract 和 Action Binding",
|
|
331
|
+
status: "planned", priority: "P3", batch_id: "batch-4",
|
|
332
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
333
|
+
owner_module: null, test_files: [],
|
|
334
|
+
memo_section: "## ",
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
id: "problem-26", label: "问题二十六",
|
|
338
|
+
title: "SoloForge 缺少 Detail Discipline Contract",
|
|
339
|
+
status: "planned", priority: "P3", batch_id: "batch-4",
|
|
340
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
341
|
+
owner_module: null, test_files: [],
|
|
342
|
+
memo_section: "## ",
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
id: "problem-27", label: "问题二十七",
|
|
346
|
+
title: "SoloForge 缺少 First Principles Reasoning Contract",
|
|
347
|
+
status: "planned", priority: "P3", batch_id: "batch-4",
|
|
348
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
349
|
+
owner_module: null, test_files: [],
|
|
350
|
+
memo_section: "## ",
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
id: "problem-39", label: "问题三十九",
|
|
354
|
+
title: "插件 / 扩展机制边界缺少 Extension Contract",
|
|
355
|
+
status: "planned", priority: "P3", batch_id: "batch-4",
|
|
356
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
357
|
+
owner_module: null, test_files: [],
|
|
358
|
+
memo_section: "## ",
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
id: "problem-40", label: "问题四十",
|
|
362
|
+
title: "跨平台路径与环境兼容缺少 Platform Compatibility Contract",
|
|
363
|
+
status: "planned", priority: "P3", batch_id: "batch-4",
|
|
364
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
365
|
+
owner_module: null, test_files: [],
|
|
366
|
+
memo_section: "## ",
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
id: "problem-42", label: "问题四十二",
|
|
370
|
+
title: "落地修复优先级与分批方案缺少 Implementation Roadmap Contract",
|
|
371
|
+
status: "completed", priority: "P3", batch_id: "batch-4",
|
|
372
|
+
completion_evidence: "roadmap_registry",
|
|
373
|
+
related_mechanism_ids: [], related_capability_ids: [],
|
|
374
|
+
owner_module: "src/engine/implementation_roadmap_registry.ts",
|
|
375
|
+
test_files: ["tests/engine/implementation_roadmap_registry.test.ts"],
|
|
376
|
+
memo_section: "## ",
|
|
377
|
+
},
|
|
378
|
+
// ── : 主链路接入防孤岛 ──
|
|
379
|
+
{
|
|
380
|
+
id: "problem-44", label: "问题四十四",
|
|
381
|
+
title: "新增能力主链路接入防孤岛机制 (Main Path Integration Contract)",
|
|
382
|
+
status: "completed", priority: "P0", batch_id: "batch-1",
|
|
383
|
+
completion_evidence: "wired_into_verifier_and_task_context_and_tools",
|
|
384
|
+
related_mechanism_ids: ["mc-verifier", "mc-task-context-lifecycle"],
|
|
385
|
+
related_capability_ids: ["verify_command_generation", "task_context_lifecycle"],
|
|
386
|
+
owner_module: "src/engine/main_path_integration_contract.ts",
|
|
387
|
+
test_files: [
|
|
388
|
+
"tests/engine/main_path_integration_contract.test.ts",
|
|
389
|
+
"tests/adapters/main_path_integration_gate.test.ts",
|
|
390
|
+
],
|
|
391
|
+
memo_section: "## ",
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
id: "problem-45", label: "问题四十五",
|
|
395
|
+
title: "双-layer 机制治理完整性 — 所有机制必须双-layer enforced",
|
|
396
|
+
status: "completed", priority: "P0", batch_id: "batch-1",
|
|
397
|
+
related_mechanism_ids: ["mc-intent-router", "mc-workflow-contract", "mc-knowledge-injection-boundary", "mc-tool-invocation-contract", "mc-verifier", "mc-main-path-integration", "mc-privacy-boundary", "mc-command-execution", "mc-core-engineering-principles", "mc-delivery-gate", "mc-task-context-lifecycle", "mc-guard-evaluation", "mc-registry-infrastructure", "mc-zero-config-init", "mc-input-material-contract", "mc-user-feedback", "mc-artifact-contract", "mc-config-precedence"],
|
|
398
|
+
related_capability_ids: [],
|
|
399
|
+
owner_module: "src/engine/dual_layer_mechanism_registry.ts",
|
|
400
|
+
test_files: ["tests/engine/dual_layer_mechanism_registry.test.ts"],
|
|
401
|
+
completion_evidence: "dual_layer_all_18",
|
|
402
|
+
memo_section: "## ",
|
|
403
|
+
},
|
|
404
|
+
];
|
|
405
|
+
const IMPLEMENTATION_BATCHES = [
|
|
406
|
+
{
|
|
407
|
+
batch_id: "batch-1", priority: "P0",
|
|
408
|
+
goal: "主链路可用,不误判、不乱写",
|
|
409
|
+
included_problem_ids: ["problem-6", "problem-8", "problem-9", "problem-22", "problem-23", "problem-24", "problem-29", "problem-32", "problem-33", "problem-37", "problem-44", "problem-45"],
|
|
410
|
+
depends_on_batch_ids: [],
|
|
411
|
+
depends_on_pre_completed: ["problem-1", "problem-2", "problem-3", "problem-4", "problem-5"],
|
|
412
|
+
deliverables: [
|
|
413
|
+
"sf_expand 根据 route/execution_shape 选择 prompt",
|
|
414
|
+
"source extraction 能正确处理源码包输入",
|
|
415
|
+
"output artifact 默认写 .soloforge/output/{task_id}/",
|
|
416
|
+
"knowledge injection 生成 required/supporting/excluded report",
|
|
417
|
+
"strict controlled 工具受 next_allowed_tools 控制",
|
|
418
|
+
"基础 privacy/command guard 生效",
|
|
419
|
+
"用户反馈能区分 artifact_ready、manual_required、blocked、completed",
|
|
420
|
+
"配置解析能区分 runtime inference、confirmed config 和临时覆盖",
|
|
421
|
+
],
|
|
422
|
+
acceptance_criteria: [
|
|
423
|
+
"从源码包抓取原型说明不得 skip",
|
|
424
|
+
"只读提取任务不得改业务源码",
|
|
425
|
+
"外部 zip 不得变成 write scope",
|
|
426
|
+
"required knowledge 缺失不得伪装完整注入",
|
|
427
|
+
"artifact 不得覆盖旧产物",
|
|
428
|
+
"sf_verify 默认 plan_only",
|
|
429
|
+
"secret 不得进入 prompt",
|
|
430
|
+
"completed 不得包含 blocking/manual_required/degraded",
|
|
431
|
+
],
|
|
432
|
+
not_in_scope: [
|
|
433
|
+
"不做完整插件系统",
|
|
434
|
+
"不做全部 metrics/governance action",
|
|
435
|
+
"不重写所有知识生命周期",
|
|
436
|
+
"不更新正式设计文档为最终事实",
|
|
437
|
+
],
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
batch_id: "batch-2", priority: "P1",
|
|
441
|
+
goal: "状态、证据、失败恢复和治理底座",
|
|
442
|
+
included_problem_ids: ["problem-11", "problem-12", "problem-13", "problem-15", "problem-17", "problem-18", "problem-20", "problem-28", "problem-34", "problem-36", "problem-38"],
|
|
443
|
+
depends_on_batch_ids: ["batch-1"],
|
|
444
|
+
depends_on_pre_completed: ["problem-5"],
|
|
445
|
+
deliverables: [
|
|
446
|
+
"TaskContext 只存 facts/refs",
|
|
447
|
+
"VerificationPlan 和 VerificationEvidence 分离",
|
|
448
|
+
"GuardEvaluationReport 接入写入/交付前",
|
|
449
|
+
"FailureReport + RecoveryPolicy 接入验证失败",
|
|
450
|
+
"DegradationEvent + RecoveryGate 接入能力不可用",
|
|
451
|
+
"WorkspaceLease 接入写入/交付",
|
|
452
|
+
"DiagnosticCode registry 初版",
|
|
453
|
+
"Observability storage 分层",
|
|
454
|
+
"TestStrategyContract 接入 contract registry",
|
|
455
|
+
"Mechanism family 映射表能反映真实实现状态",
|
|
456
|
+
],
|
|
457
|
+
acceptance_criteria: [
|
|
458
|
+
"failed/blocked/requires_human 不能静默 done",
|
|
459
|
+
"delivery_readiness 不能触发 delivery execution",
|
|
460
|
+
"active write lease 冲突时 delivery blocked",
|
|
461
|
+
"blocking/critical 必须有 diagnostic code",
|
|
462
|
+
"stdout/stderr 不进 TaskContext 原文",
|
|
463
|
+
"enforced contract 无 lifecycle test 必须 fail",
|
|
464
|
+
"degradation 必须用户可见",
|
|
465
|
+
"retry budget exceeded 必须进入 FailureReport",
|
|
466
|
+
],
|
|
467
|
+
not_in_scope: [
|
|
468
|
+
"不追求全部 capability enforced",
|
|
469
|
+
"不做复杂 dashboard",
|
|
470
|
+
"不自动降级/晋级能力状态",
|
|
471
|
+
],
|
|
472
|
+
},
|
|
473
|
+
{
|
|
474
|
+
batch_id: "batch-3", priority: "P2",
|
|
475
|
+
goal: "知识、模板、文档和升级健康",
|
|
476
|
+
included_problem_ids: ["problem-7", "problem-10", "problem-14", "problem-21", "problem-25", "problem-30", "problem-31", "problem-35", "problem-41"],
|
|
477
|
+
depends_on_batch_ids: ["batch-1", "batch-2"],
|
|
478
|
+
depends_on_pre_completed: ["problem-4"],
|
|
479
|
+
deliverables: [
|
|
480
|
+
"Knowledge status + sovereignty 新模型",
|
|
481
|
+
"Evidence-based promotion gate",
|
|
482
|
+
"soloforge sync-templates dry-run/apply",
|
|
483
|
+
"soloforge sync-adapters dry-run/apply",
|
|
484
|
+
".soloforge/version.json + soloforge migrate",
|
|
485
|
+
"CLI behavior matrix",
|
|
486
|
+
"README 与 CLI contract 对齐测试",
|
|
487
|
+
"LanguagePolicyConfig 支持 zh/en/bilingual",
|
|
488
|
+
"文档 eligibility 流程",
|
|
489
|
+
],
|
|
490
|
+
acceptance_criteria: [
|
|
491
|
+
"用户修改模板不得覆盖",
|
|
492
|
+
"core knowledge 不得自动改",
|
|
493
|
+
"AI inference 不得直接 active/core",
|
|
494
|
+
"adapter prompt 不得含 forbidden claim",
|
|
495
|
+
"README 命令必须映射真实 CLI contract",
|
|
496
|
+
"migrate 默认 dry-run",
|
|
497
|
+
"未 verified 的备忘录决策不得写入正式设计文档",
|
|
498
|
+
"英文项目可配置 en_first,中文项目不被英文模板污染",
|
|
499
|
+
],
|
|
500
|
+
not_in_scope: [
|
|
501
|
+
"不自动三方合并用户模板",
|
|
502
|
+
"不让设计文档记录施工流水",
|
|
503
|
+
"不一次性翻译所有模板",
|
|
504
|
+
],
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
batch_id: "batch-4", priority: "P3",
|
|
508
|
+
goal: "扩展、平台兼容和高级治理",
|
|
509
|
+
included_problem_ids: ["problem-16", "problem-19", "problem-26", "problem-27", "problem-39", "problem-40", "problem-42"],
|
|
510
|
+
depends_on_batch_ids: ["batch-1", "batch-2", "batch-3"],
|
|
511
|
+
depends_on_pre_completed: [],
|
|
512
|
+
deliverables: [
|
|
513
|
+
"ExtensionManifest / ExtensionGrant",
|
|
514
|
+
"MetricContract + GovernanceFinding action binding",
|
|
515
|
+
"PlatformContext / NormalizedPathRef",
|
|
516
|
+
"TechnologyDecisionContract",
|
|
517
|
+
"DetailDisciplineCheck",
|
|
518
|
+
"FirstPrinciplesFrame",
|
|
519
|
+
],
|
|
520
|
+
acceptance_criteria: [
|
|
521
|
+
"第三方扩展不能自称 enforced",
|
|
522
|
+
"metrics 不得把 skipped/manual_required 算 passed",
|
|
523
|
+
"symlink 外部路径不能绕过 scope",
|
|
524
|
+
"destructive tech decision 必须 human gate",
|
|
525
|
+
"高影响机制变更必须有 fundamental_need",
|
|
526
|
+
"写入/覆盖/迁移必须有细节检查",
|
|
527
|
+
],
|
|
528
|
+
not_in_scope: [
|
|
529
|
+
"不开放不受控插件生态",
|
|
530
|
+
"不为了跨平台支持绕过安全",
|
|
531
|
+
"不把全局原则变成空泛口号",
|
|
532
|
+
],
|
|
533
|
+
},
|
|
534
|
+
];
|
|
535
|
+
// ── 克隆辅助函数 ──
|
|
536
|
+
function cloneProblemEntry(e) {
|
|
537
|
+
return {
|
|
538
|
+
...e,
|
|
539
|
+
related_mechanism_ids: [...e.related_mechanism_ids],
|
|
540
|
+
related_capability_ids: [...e.related_capability_ids],
|
|
541
|
+
test_files: [...e.test_files],
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
function cloneBatch(b) {
|
|
545
|
+
return {
|
|
546
|
+
...b,
|
|
547
|
+
included_problem_ids: [...b.included_problem_ids],
|
|
548
|
+
depends_on_batch_ids: [...b.depends_on_batch_ids],
|
|
549
|
+
depends_on_pre_completed: [...b.depends_on_pre_completed],
|
|
550
|
+
deliverables: [...b.deliverables],
|
|
551
|
+
acceptance_criteria: [...b.acceptance_criteria],
|
|
552
|
+
not_in_scope: [...b.not_in_scope],
|
|
553
|
+
};
|
|
554
|
+
}
|
|
555
|
+
// ── 查询:问题 ──
|
|
556
|
+
/**
|
|
557
|
+
* 列出所有问题条目。
|
|
558
|
+
* @returns 所有问题条目的克隆副本列表
|
|
559
|
+
*/
|
|
560
|
+
export function listAllProblems() {
|
|
561
|
+
console.error("[soloForge] 实施路线图: listAllProblems() 开始执行,共", PROBLEM_ENTRIES.length, "条");
|
|
562
|
+
return PROBLEM_ENTRIES.map(cloneProblemEntry);
|
|
563
|
+
}
|
|
564
|
+
/**
|
|
565
|
+
* 根据问题 ID 查找问题条目。
|
|
566
|
+
* @param id - 问题 ID(如 "problem-1")
|
|
567
|
+
* @returns 匹配的问题条目克隆副本,未找到则返回 undefined
|
|
568
|
+
*/
|
|
569
|
+
export function findProblemById(id) {
|
|
570
|
+
console.error("[soloForge] 实施路线图: findProblemById() id=", id);
|
|
571
|
+
const e = PROBLEM_ENTRIES.find((p) => p.id === id);
|
|
572
|
+
return e ? cloneProblemEntry(e) : undefined;
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* 根据状态列出问题条目。
|
|
576
|
+
* @param status - 问题状态(completed / in_progress / planned / not_started)
|
|
577
|
+
* @returns 符合条件的问题条目克隆副本列表
|
|
578
|
+
*/
|
|
579
|
+
export function listProblemsByStatus(status) {
|
|
580
|
+
console.error("[soloForge] 实施路线图: listProblemsByStatus() status=", status);
|
|
581
|
+
return PROBLEM_ENTRIES.filter((p) => p.status === status).map(cloneProblemEntry);
|
|
582
|
+
}
|
|
583
|
+
/**
|
|
584
|
+
* 根据批次 ID 列出问题条目。
|
|
585
|
+
* @param batchId - 批次 ID(如 "batch-1")
|
|
586
|
+
* @returns 属于该批次的问题条目克隆副本列表
|
|
587
|
+
*/
|
|
588
|
+
export function listProblemsByBatch(batchId) {
|
|
589
|
+
console.error("[soloForge] 实施路线图: listProblemsByBatch() batchId=", batchId);
|
|
590
|
+
return PROBLEM_ENTRIES.filter((p) => p.batch_id === batchId).map(cloneProblemEntry);
|
|
591
|
+
}
|
|
592
|
+
// ── 查询:批次 ──
|
|
593
|
+
/**
|
|
594
|
+
* 列出所有实施批次。
|
|
595
|
+
* @returns 所有实施批次的克隆副本列表
|
|
596
|
+
*/
|
|
597
|
+
export function listBatches() {
|
|
598
|
+
console.error("[soloForge] 实施路线图: listBatches() 开始执行,共", IMPLEMENTATION_BATCHES.length, "个批次");
|
|
599
|
+
return IMPLEMENTATION_BATCHES.map(cloneBatch);
|
|
600
|
+
}
|
|
601
|
+
/**
|
|
602
|
+
* 根据批次 ID 查找实施批次。
|
|
603
|
+
* @param id - 批次 ID(如 "batch-1")
|
|
604
|
+
* @returns 匹配的实施批次克隆副本,未找到则返回 undefined
|
|
605
|
+
*/
|
|
606
|
+
export function findBatchById(id) {
|
|
607
|
+
console.error("[soloForge] 实施路线图: findBatchById() id=", id);
|
|
608
|
+
const b = IMPLEMENTATION_BATCHES.find((b) => b.batch_id === id);
|
|
609
|
+
return b ? cloneBatch(b) : undefined;
|
|
610
|
+
}
|
|
611
|
+
/**
|
|
612
|
+
* 获取指定批次的所有依赖批次 ID(递归)。
|
|
613
|
+
* @param batchId - 批次 ID
|
|
614
|
+
* @returns 所有直接和间接依赖的批次 ID 列表
|
|
615
|
+
*/
|
|
616
|
+
export function getBatchDependencies(batchId) {
|
|
617
|
+
console.error("[soloForge] 实施路线图: getBatchDependencies() batchId=", batchId);
|
|
618
|
+
const direct = IMPLEMENTATION_BATCHES.find((b) => b.batch_id === batchId);
|
|
619
|
+
if (!direct)
|
|
620
|
+
return [];
|
|
621
|
+
const result = new Set();
|
|
622
|
+
const queue = [...direct.depends_on_batch_ids];
|
|
623
|
+
while (queue.length > 0) {
|
|
624
|
+
const next = queue.shift();
|
|
625
|
+
if (result.has(next))
|
|
626
|
+
continue;
|
|
627
|
+
result.add(next);
|
|
628
|
+
const dep = IMPLEMENTATION_BATCHES.find((b) => b.batch_id === next);
|
|
629
|
+
if (dep)
|
|
630
|
+
queue.push(...dep.depends_on_batch_ids);
|
|
631
|
+
}
|
|
632
|
+
return [...result];
|
|
633
|
+
}
|
|
634
|
+
/**
|
|
635
|
+
* 检查指定批次是否全部完成。
|
|
636
|
+
* @param batchId - 批次 ID
|
|
637
|
+
* @returns 批次中所有问题是否均已标记为 completed
|
|
638
|
+
*/
|
|
639
|
+
export function isBatchComplete(batchId) {
|
|
640
|
+
console.error("[soloForge] 实施路线图: isBatchComplete() batchId=", batchId);
|
|
641
|
+
const batch = IMPLEMENTATION_BATCHES.find((b) => b.batch_id === batchId);
|
|
642
|
+
if (!batch)
|
|
643
|
+
return false;
|
|
644
|
+
return batch.included_problem_ids.every((pid) => {
|
|
645
|
+
const p = PROBLEM_ENTRIES.find((e) => e.id === pid);
|
|
646
|
+
return p?.status === "completed";
|
|
647
|
+
});
|
|
648
|
+
}
|
|
649
|
+
// ── 汇总 ──
|
|
650
|
+
/**
|
|
651
|
+
* 获取各状态问题的数量汇总。
|
|
652
|
+
* @returns 各状态对应的问题数量映射
|
|
653
|
+
*/
|
|
654
|
+
export function getProblemStatusSummary() {
|
|
655
|
+
console.error("[soloForge] 实施路线图: getProblemStatusSummary() 开始执行");
|
|
656
|
+
const s = { completed: 0, in_progress: 0, planned: 0, not_started: 0 };
|
|
657
|
+
for (const p of PROBLEM_ENTRIES)
|
|
658
|
+
s[p.status]++;
|
|
659
|
+
return s;
|
|
660
|
+
}
|
|
661
|
+
/**
|
|
662
|
+
* 获取各优先级问题的数量汇总。
|
|
663
|
+
* @returns 各优先级对应的问题数量映射
|
|
664
|
+
*/
|
|
665
|
+
export function getProblemPrioritySummary() {
|
|
666
|
+
console.error("[soloForge] 实施路线图: getProblemPrioritySummary() 开始执行");
|
|
667
|
+
const s = { pre_completed: 0, P0: 0, P1: 0, P2: 0, P3: 0 };
|
|
668
|
+
for (const p of PROBLEM_ENTRIES)
|
|
669
|
+
s[p.priority]++;
|
|
670
|
+
return s;
|
|
671
|
+
}
|
|
672
|
+
// ── 校验 ──
|
|
673
|
+
/**
|
|
674
|
+
* 校验实施路线图的一致性和完整性。
|
|
675
|
+
* @description 检查问题/批次唯一性、已完成问题的完成证据、前置完成规范集、
|
|
676
|
+
* 批次引用完整性、双向一致性等。
|
|
677
|
+
* @param problems - 待校验的问题列表,默认使用内置数据
|
|
678
|
+
* @param batches - 待校验的批次列表,默认使用内置数据
|
|
679
|
+
* @returns 治理发现列表(hard_fail 为硬性错误,advisory 为建议项)
|
|
680
|
+
*/
|
|
681
|
+
export function validateImplementationRoadmap(problems = PROBLEM_ENTRIES, batches = IMPLEMENTATION_BATCHES) {
|
|
682
|
+
console.error("[soloForge] 实施路线图: validateImplementationRoadmap() 开始校验,问题", problems.length, "条,批次", batches.length, "个");
|
|
683
|
+
const findings = [];
|
|
684
|
+
// ── 唯一性校验 ──
|
|
685
|
+
const pIds = new Set();
|
|
686
|
+
const problemMap = new Map();
|
|
687
|
+
for (const p of problems) {
|
|
688
|
+
if (pIds.has(p.id)) {
|
|
689
|
+
findings.push({ severity: "hard_fail", subject_id: p.id, field: "id", message: `duplicate problem id: ${p.id}` });
|
|
690
|
+
}
|
|
691
|
+
pIds.add(p.id);
|
|
692
|
+
problemMap.set(p.id, p);
|
|
693
|
+
}
|
|
694
|
+
const bIds = new Set();
|
|
695
|
+
const batchMap = new Map();
|
|
696
|
+
for (const b of batches) {
|
|
697
|
+
if (bIds.has(b.batch_id)) {
|
|
698
|
+
findings.push({ severity: "hard_fail", subject_id: b.batch_id, field: "batch_id", message: `duplicate batch id: ${b.batch_id}` });
|
|
699
|
+
}
|
|
700
|
+
bIds.add(b.batch_id);
|
|
701
|
+
batchMap.set(b.batch_id, b);
|
|
702
|
+
}
|
|
703
|
+
// ── 已完成的问题必须有完成证据 ──
|
|
704
|
+
for (const p of problems) {
|
|
705
|
+
if (p.status === "completed" && !p.completion_evidence) {
|
|
706
|
+
findings.push({ severity: "hard_fail", subject_id: p.id, field: "completion_evidence", message: `completed problem without evidence: ${p.id}` });
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
// ── 前置完成规范集:problem-1..5 必须为 pre_completed / completed / batch_id=null ──
|
|
710
|
+
for (const p of problems) {
|
|
711
|
+
const n = parseInt(p.id.replace("problem-", ""), 10);
|
|
712
|
+
if (n >= 1 && n <= 5) {
|
|
713
|
+
if (p.priority !== "pre_completed") {
|
|
714
|
+
findings.push({ severity: "hard_fail", subject_id: p.id, field: "priority", message: `problem ${p.id} must be pre_completed, got ${p.priority}` });
|
|
715
|
+
}
|
|
716
|
+
if (p.status !== "completed") {
|
|
717
|
+
findings.push({ severity: "hard_fail", subject_id: p.id, field: "status", message: `problem ${p.id} must be completed, got ${p.status}` });
|
|
718
|
+
}
|
|
719
|
+
if (p.batch_id !== null) {
|
|
720
|
+
findings.push({ severity: "hard_fail", subject_id: p.id, field: "batch_id", message: `pre_completed problem ${p.id} must have batch_id=null, got ${p.batch_id}` });
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
// ── problem 6..42 必须有非空 batch_id ──
|
|
725
|
+
for (const p of problems) {
|
|
726
|
+
const n = parseInt(p.id.replace("problem-", ""), 10);
|
|
727
|
+
if (n >= 6 && n <= 42) {
|
|
728
|
+
if (!p.batch_id) {
|
|
729
|
+
findings.push({ severity: "hard_fail", subject_id: p.id, field: "batch_id", message: `problem ${p.id} (>=6) must have a non-null batch_id` });
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
// ── 批次引用检查 ──
|
|
734
|
+
for (const b of batches) {
|
|
735
|
+
for (const pid of b.included_problem_ids) {
|
|
736
|
+
if (!pIds.has(pid)) {
|
|
737
|
+
findings.push({ severity: "hard_fail", subject_id: b.batch_id, field: "included_problem_ids", message: `batch ${b.batch_id} references non-existent problem: ${pid}` });
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
for (const bid of b.depends_on_batch_ids) {
|
|
741
|
+
if (!bIds.has(bid)) {
|
|
742
|
+
findings.push({ severity: "hard_fail", subject_id: b.batch_id, field: "depends_on_batch_ids", message: `batch ${b.batch_id} depends on non-existent batch: ${bid}` });
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
// ── 根据 batch.included_problem_ids 构建问题→批次索引 ──
|
|
747
|
+
const problemToBatch = new Map();
|
|
748
|
+
for (const b of batches) {
|
|
749
|
+
for (const pid of b.included_problem_ids) {
|
|
750
|
+
const prev = problemToBatch.get(pid);
|
|
751
|
+
if (prev) {
|
|
752
|
+
findings.push({ severity: "hard_fail", subject_id: pid, field: "batch_id", message: `problem ${pid} appears in multiple batches: ${prev} and ${b.batch_id}` });
|
|
753
|
+
}
|
|
754
|
+
problemToBatch.set(pid, b.batch_id);
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
// ── 每个非前置完成的问题必须恰好属于一个批次 ──
|
|
758
|
+
for (const p of problems) {
|
|
759
|
+
if (p.priority !== "pre_completed" && !problemToBatch.has(p.id)) {
|
|
760
|
+
findings.push({ severity: "hard_fail", subject_id: p.id, field: "batch_id", message: `non-pre-completed problem ${p.id} not in any batch` });
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
// ── 前置完成的问题必须是 completed 状态 ──
|
|
764
|
+
for (const p of problems) {
|
|
765
|
+
if (p.priority === "pre_completed" && p.status !== "completed") {
|
|
766
|
+
findings.push({ severity: "hard_fail", subject_id: p.id, field: "status", message: `pre_completed problem ${p.id} has status ${p.status}, expected completed` });
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
// ── 前置完成的问题不得出现在任何 batch.included_problem_ids 中 ──
|
|
770
|
+
for (const b of batches) {
|
|
771
|
+
for (const pid of b.included_problem_ids) {
|
|
772
|
+
const p = problemMap.get(pid);
|
|
773
|
+
if (p && p.priority === "pre_completed") {
|
|
774
|
+
findings.push({ severity: "hard_fail", subject_id: pid, field: "included_problem_ids", message: `pre_completed problem ${pid} must not appear in batch ${b.batch_id}.included_problem_ids` });
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
// ── 双向一致性:ProblemEntry.batch_id ↔ batch.included_problem_ids ──
|
|
779
|
+
for (const p of problems) {
|
|
780
|
+
if (p.priority === "pre_completed" || !p.batch_id)
|
|
781
|
+
continue;
|
|
782
|
+
const batch = batchMap.get(p.batch_id);
|
|
783
|
+
if (!batch) {
|
|
784
|
+
findings.push({ severity: "hard_fail", subject_id: p.id, field: "batch_id", message: `problem ${p.id} references non-existent batch: ${p.batch_id}` });
|
|
785
|
+
continue;
|
|
786
|
+
}
|
|
787
|
+
if (!batch.included_problem_ids.includes(p.id)) {
|
|
788
|
+
findings.push({ severity: "hard_fail", subject_id: p.id, field: "batch_id", message: `problem ${p.id} has batch_id=${p.batch_id} but that batch does not include it` });
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
for (const b of batches) {
|
|
792
|
+
for (const pid of b.included_problem_ids) {
|
|
793
|
+
const p = problemMap.get(pid);
|
|
794
|
+
if (p && p.batch_id !== b.batch_id) {
|
|
795
|
+
findings.push({ severity: "hard_fail", subject_id: pid, field: "batch_id", message: `batch ${b.batch_id} includes ${pid} but problem has batch_id=${p.batch_id}` });
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
// ── 建议项:test_files 为空 ──
|
|
800
|
+
for (const p of problems) {
|
|
801
|
+
if (p.status === "completed" && p.test_files.length === 0) {
|
|
802
|
+
findings.push({ severity: "advisory", subject_id: p.id, field: "test_files", message: `completed problem ${p.id} has no test_files` });
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
// ── 建议项:批次 not_in_scope 为空 ──
|
|
806
|
+
for (const b of batches) {
|
|
807
|
+
if (b.not_in_scope.length === 0) {
|
|
808
|
+
findings.push({ severity: "advisory", subject_id: b.batch_id, field: "not_in_scope", message: `batch ${b.batch_id} has no not_in_scope` });
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
return findings;
|
|
812
|
+
}
|
|
813
|
+
//# sourceMappingURL=implementation_roadmap_registry.js.map
|