scene-capability-engine 3.4.5 → 3.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.
@@ -23,7 +23,9 @@ const SPEC_DOMAIN_POLICY_DEFAULTS = Object.freeze({
23
23
  schema_version: '1.0',
24
24
  closed_loop_research_required: true,
25
25
  coverage_validation_required: true,
26
- fail_on_gap_default: true
26
+ fail_on_gap_default: true,
27
+ problem_contract_required: true,
28
+ ontology_axes_required: ['entity', 'relation', 'business_rule', 'decision_policy', 'execution_flow']
27
29
  });
28
30
 
29
31
  const PROBLEM_EVAL_POLICY_DEFAULTS = Object.freeze({
@@ -51,7 +53,69 @@ const PROBLEM_EVAL_POLICY_DEFAULTS = Object.freeze({
51
53
  'compliance',
52
54
  'data-loss'
53
55
  ],
54
- recommendation_limit: 6
56
+ recommendation_limit: 6,
57
+ max_failed_rounds_before_debug: 2,
58
+ problem_contract_required_stages: ['plan', 'generate', 'apply', 'verify', 'release'],
59
+ problem_contract_block_stages: ['plan', 'apply', 'release'],
60
+ ontology_alignment_required_stages: ['plan', 'generate', 'apply', 'verify', 'release'],
61
+ ontology_alignment_block_stages: ['apply', 'release'],
62
+ ontology_required_axes: ['entity', 'relation', 'business_rule', 'decision_policy', 'execution_flow'],
63
+ require_ontology_evidence_binding: true,
64
+ ontology_evidence_min_bindings: 1,
65
+ convergence_required_stages: ['verify', 'release'],
66
+ convergence_block_stages: ['release'],
67
+ release_block_on_high_alerts: true,
68
+ release_require_governance_report: false
69
+ });
70
+
71
+ const PROBLEM_CLOSURE_POLICY_DEFAULTS = Object.freeze({
72
+ schema_version: '1.0',
73
+ enabled: true,
74
+ governance_report_path: '.sce/reports/interactive-governance-report.json',
75
+ verify: {
76
+ require_problem_contract: true,
77
+ require_domain_validation: true,
78
+ require_domain_coverage: true
79
+ },
80
+ release: {
81
+ require_problem_contract: true,
82
+ require_domain_validation: true,
83
+ require_domain_coverage: true,
84
+ require_verify_report: true,
85
+ require_governance_report: false,
86
+ block_on_high_governance_alerts: true
87
+ }
88
+ });
89
+
90
+ const STUDIO_INTAKE_POLICY_DEFAULTS = Object.freeze({
91
+ schema_version: '1.0',
92
+ enabled: true,
93
+ auto_create_spec: true,
94
+ force_spec_for_studio_plan: true,
95
+ prefer_existing_scene_spec: true,
96
+ related_spec_min_score: 45,
97
+ allow_new_spec_when_goal_diverges: true,
98
+ divergence_similarity_threshold: 0.2,
99
+ goal_missing_strategy: 'create_for_tracking',
100
+ question_only_patterns: [
101
+ 'how', 'what', 'why', 'when', 'where', 'which', 'can', 'could', 'should', 'would',
102
+ '是否', '怎么', '如何', '为什么', '吗', '么'
103
+ ],
104
+ change_intent_patterns: [
105
+ 'implement', 'build', 'create', 'add', 'update', 'upgrade', 'refactor', 'fix', 'stabilize',
106
+ 'optimize', 'deliver', 'release', 'bootstrap', 'repair', 'patch',
107
+ '新增', '增加', '实现', '构建', '开发', '修复', '优化', '重构', '发布', '改造', '完善', '增强'
108
+ ],
109
+ spec_id: {
110
+ prefix: 'auto',
111
+ max_goal_slug_tokens: 6
112
+ },
113
+ governance: {
114
+ auto_run_on_plan: true,
115
+ max_active_specs_per_scene: 3,
116
+ stale_days: 14,
117
+ duplicate_similarity_threshold: 0.66
118
+ }
55
119
  });
56
120
 
57
121
  const TAKEOVER_DEFAULTS = Object.freeze({
@@ -70,13 +134,55 @@ const TAKEOVER_DEFAULTS = Object.freeze({
70
134
  spec_domain_policy: {
71
135
  closed_loop_research_required: true,
72
136
  coverage_validation_required: true,
73
- fail_on_gap_default: true
137
+ fail_on_gap_default: true,
138
+ problem_contract_required: true,
139
+ ontology_axes_required: ['entity', 'relation', 'business_rule', 'decision_policy', 'execution_flow']
74
140
  },
75
141
  problem_evaluation: {
76
142
  enabled: true,
77
143
  mode: 'required',
78
144
  enforce_on_stages: ['plan', 'generate', 'apply', 'verify', 'release'],
79
- block_on_stages: ['apply', 'release']
145
+ block_on_stages: ['apply', 'release'],
146
+ problem_contract_required_stages: ['plan', 'generate', 'apply', 'verify', 'release'],
147
+ problem_contract_block_stages: ['plan', 'apply', 'release'],
148
+ ontology_alignment_required_stages: ['plan', 'generate', 'apply', 'verify', 'release'],
149
+ ontology_alignment_block_stages: ['apply', 'release'],
150
+ convergence_required_stages: ['verify', 'release'],
151
+ convergence_block_stages: ['release'],
152
+ max_failed_rounds_before_debug: 2
153
+ },
154
+ problem_closure: {
155
+ enabled: true,
156
+ governance_report_path: '.sce/reports/interactive-governance-report.json',
157
+ verify: {
158
+ require_problem_contract: true,
159
+ require_domain_validation: true,
160
+ require_domain_coverage: true
161
+ },
162
+ release: {
163
+ require_problem_contract: true,
164
+ require_domain_validation: true,
165
+ require_domain_coverage: true,
166
+ require_verify_report: true,
167
+ require_governance_report: false,
168
+ block_on_high_governance_alerts: true
169
+ }
170
+ },
171
+ studio_intake: {
172
+ enabled: true,
173
+ auto_create_spec: true,
174
+ force_spec_for_studio_plan: true,
175
+ prefer_existing_scene_spec: true,
176
+ related_spec_min_score: 45,
177
+ allow_new_spec_when_goal_diverges: true,
178
+ divergence_similarity_threshold: 0.2,
179
+ goal_missing_strategy: 'create_for_tracking',
180
+ governance: {
181
+ auto_run_on_plan: true,
182
+ max_active_specs_per_scene: 3,
183
+ stale_days: 14,
184
+ duplicate_similarity_threshold: 0.66
185
+ }
80
186
  },
81
187
  debug_policy: {
82
188
  prioritize_root_cause_fix: true,
@@ -346,6 +452,8 @@ async function applyTakeoverBaseline(projectPath = process.cwd(), options = {})
346
452
  const sessionGovernancePath = path.join(sceRoot, 'config', 'session-governance.json');
347
453
  const specDomainPolicyPath = path.join(sceRoot, 'config', 'spec-domain-policy.json');
348
454
  const problemEvalPolicyPath = path.join(sceRoot, 'config', 'problem-eval-policy.json');
455
+ const problemClosurePolicyPath = path.join(sceRoot, 'config', 'problem-closure-policy.json');
456
+ const studioIntakePolicyPath = path.join(sceRoot, 'config', 'studio-intake-policy.json');
349
457
  const reportPath = path.join(sceRoot, 'reports', 'takeover-baseline-latest.json');
350
458
 
351
459
  const existingAdoption = await _readJsonSafe(adoptionPath, fileSystem);
@@ -354,6 +462,8 @@ async function applyTakeoverBaseline(projectPath = process.cwd(), options = {})
354
462
  const existingSessionGovernance = await _readJsonSafe(sessionGovernancePath, fileSystem);
355
463
  const existingSpecDomainPolicy = await _readJsonSafe(specDomainPolicyPath, fileSystem);
356
464
  const existingProblemEvalPolicy = await _readJsonSafe(problemEvalPolicyPath, fileSystem);
465
+ const existingProblemClosurePolicy = await _readJsonSafe(problemClosurePolicyPath, fileSystem);
466
+ const existingStudioIntakePolicy = await _readJsonSafe(studioIntakePolicyPath, fileSystem);
357
467
 
358
468
  const desiredAdoption = _buildAdoptionConfig(existingAdoption, nowIso, sceVersion);
359
469
  const desiredAutoConfig = _buildAutoConfig(existingAuto);
@@ -361,6 +471,8 @@ async function applyTakeoverBaseline(projectPath = process.cwd(), options = {})
361
471
  const desiredSessionGovernance = _deepMerge(existingSessionGovernance || {}, SESSION_GOVERNANCE_DEFAULTS);
362
472
  const desiredSpecDomainPolicy = _deepMerge(existingSpecDomainPolicy || {}, SPEC_DOMAIN_POLICY_DEFAULTS);
363
473
  const desiredProblemEvalPolicy = _deepMerge(existingProblemEvalPolicy || {}, PROBLEM_EVAL_POLICY_DEFAULTS);
474
+ const desiredProblemClosurePolicy = _deepMerge(existingProblemClosurePolicy || {}, PROBLEM_CLOSURE_POLICY_DEFAULTS);
475
+ const desiredStudioIntakePolicy = _deepMerge(existingStudioIntakePolicy || {}, STUDIO_INTAKE_POLICY_DEFAULTS);
364
476
 
365
477
  const fileResults = [];
366
478
  fileResults.push(await _reconcileJsonFile(adoptionPath, desiredAdoption, {
@@ -393,6 +505,16 @@ async function applyTakeoverBaseline(projectPath = process.cwd(), options = {})
393
505
  apply,
394
506
  fileSystem
395
507
  }));
508
+ fileResults.push(await _reconcileJsonFile(problemClosurePolicyPath, desiredProblemClosurePolicy, {
509
+ projectPath,
510
+ apply,
511
+ fileSystem
512
+ }));
513
+ fileResults.push(await _reconcileJsonFile(studioIntakePolicyPath, desiredStudioIntakePolicy, {
514
+ projectPath,
515
+ apply,
516
+ fileSystem
517
+ }));
396
518
  fileResults.push(await _reconcileSteeringContract(projectPath, {
397
519
  apply,
398
520
  fileSystem
@@ -441,6 +563,8 @@ module.exports = {
441
563
  TAKEOVER_DEFAULTS,
442
564
  SESSION_GOVERNANCE_DEFAULTS,
443
565
  SPEC_DOMAIN_POLICY_DEFAULTS,
566
+ PROBLEM_CLOSURE_POLICY_DEFAULTS,
444
567
  PROBLEM_EVAL_POLICY_DEFAULTS,
568
+ STUDIO_INTAKE_POLICY_DEFAULTS,
445
569
  applyTakeoverBaseline
446
570
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scene-capability-engine",
3
- "version": "3.4.5",
3
+ "version": "3.5.0",
4
4
  "description": "SCE (Scene Capability Engine) - A CLI tool and npm package for spec-driven development with AI coding assistants.",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -0,0 +1,18 @@
1
+ {
2
+ "schema_version": "1.0",
3
+ "enabled": true,
4
+ "governance_report_path": ".sce/reports/interactive-governance-report.json",
5
+ "verify": {
6
+ "require_problem_contract": true,
7
+ "require_domain_validation": true,
8
+ "require_domain_coverage": true
9
+ },
10
+ "release": {
11
+ "require_problem_contract": true,
12
+ "require_domain_validation": true,
13
+ "require_domain_coverage": true,
14
+ "require_verify_report": true,
15
+ "require_governance_report": false,
16
+ "block_on_high_governance_alerts": true
17
+ }
18
+ }
@@ -32,5 +32,47 @@
32
32
  "compliance",
33
33
  "data-loss"
34
34
  ],
35
- "recommendation_limit": 6
35
+ "recommendation_limit": 6,
36
+ "max_failed_rounds_before_debug": 2,
37
+ "problem_contract_required_stages": [
38
+ "plan",
39
+ "generate",
40
+ "apply",
41
+ "verify",
42
+ "release"
43
+ ],
44
+ "problem_contract_block_stages": [
45
+ "plan",
46
+ "apply",
47
+ "release"
48
+ ],
49
+ "ontology_alignment_required_stages": [
50
+ "plan",
51
+ "generate",
52
+ "apply",
53
+ "verify",
54
+ "release"
55
+ ],
56
+ "ontology_alignment_block_stages": [
57
+ "apply",
58
+ "release"
59
+ ],
60
+ "ontology_required_axes": [
61
+ "entity",
62
+ "relation",
63
+ "business_rule",
64
+ "decision_policy",
65
+ "execution_flow"
66
+ ],
67
+ "require_ontology_evidence_binding": true,
68
+ "ontology_evidence_min_bindings": 1,
69
+ "convergence_required_stages": [
70
+ "verify",
71
+ "release"
72
+ ],
73
+ "convergence_block_stages": [
74
+ "release"
75
+ ],
76
+ "release_block_on_high_alerts": true,
77
+ "release_require_governance_report": false
36
78
  }
@@ -2,5 +2,13 @@
2
2
  "schema_version": "1.0",
3
3
  "closed_loop_research_required": true,
4
4
  "coverage_validation_required": true,
5
- "fail_on_gap_default": true
5
+ "fail_on_gap_default": true,
6
+ "problem_contract_required": true,
7
+ "ontology_axes_required": [
8
+ "entity",
9
+ "relation",
10
+ "business_rule",
11
+ "decision_policy",
12
+ "execution_flow"
13
+ ]
6
14
  }
@@ -0,0 +1,68 @@
1
+ {
2
+ "schema_version": "1.0",
3
+ "enabled": true,
4
+ "auto_create_spec": true,
5
+ "force_spec_for_studio_plan": true,
6
+ "prefer_existing_scene_spec": true,
7
+ "related_spec_min_score": 45,
8
+ "allow_new_spec_when_goal_diverges": true,
9
+ "divergence_similarity_threshold": 0.2,
10
+ "goal_missing_strategy": "create_for_tracking",
11
+ "question_only_patterns": [
12
+ "how",
13
+ "what",
14
+ "why",
15
+ "when",
16
+ "where",
17
+ "which",
18
+ "can",
19
+ "could",
20
+ "should",
21
+ "would",
22
+ "是否",
23
+ "怎么",
24
+ "如何",
25
+ "为什么",
26
+ "吗",
27
+ "么"
28
+ ],
29
+ "change_intent_patterns": [
30
+ "implement",
31
+ "build",
32
+ "create",
33
+ "add",
34
+ "update",
35
+ "upgrade",
36
+ "refactor",
37
+ "fix",
38
+ "stabilize",
39
+ "optimize",
40
+ "deliver",
41
+ "release",
42
+ "bootstrap",
43
+ "repair",
44
+ "patch",
45
+ "新增",
46
+ "增加",
47
+ "实现",
48
+ "构建",
49
+ "开发",
50
+ "修复",
51
+ "优化",
52
+ "重构",
53
+ "发布",
54
+ "改造",
55
+ "完善",
56
+ "增强"
57
+ ],
58
+ "spec_id": {
59
+ "prefix": "auto",
60
+ "max_goal_slug_tokens": 6
61
+ },
62
+ "governance": {
63
+ "auto_run_on_plan": true,
64
+ "max_active_specs_per_scene": 3,
65
+ "stale_days": 14,
66
+ "duplicate_similarity_threshold": 0.66
67
+ }
68
+ }
@@ -18,7 +18,94 @@
18
18
  "spec_domain_policy": {
19
19
  "closed_loop_research_required": true,
20
20
  "coverage_validation_required": true,
21
- "fail_on_gap_default": true
21
+ "fail_on_gap_default": true,
22
+ "problem_contract_required": true,
23
+ "ontology_axes_required": [
24
+ "entity",
25
+ "relation",
26
+ "business_rule",
27
+ "decision_policy",
28
+ "execution_flow"
29
+ ]
30
+ },
31
+ "problem_evaluation": {
32
+ "enabled": true,
33
+ "mode": "required",
34
+ "enforce_on_stages": [
35
+ "plan",
36
+ "generate",
37
+ "apply",
38
+ "verify",
39
+ "release"
40
+ ],
41
+ "block_on_stages": [
42
+ "apply",
43
+ "release"
44
+ ],
45
+ "problem_contract_required_stages": [
46
+ "plan",
47
+ "generate",
48
+ "apply",
49
+ "verify",
50
+ "release"
51
+ ],
52
+ "problem_contract_block_stages": [
53
+ "plan",
54
+ "apply",
55
+ "release"
56
+ ],
57
+ "ontology_alignment_required_stages": [
58
+ "plan",
59
+ "generate",
60
+ "apply",
61
+ "verify",
62
+ "release"
63
+ ],
64
+ "ontology_alignment_block_stages": [
65
+ "apply",
66
+ "release"
67
+ ],
68
+ "convergence_required_stages": [
69
+ "verify",
70
+ "release"
71
+ ],
72
+ "convergence_block_stages": [
73
+ "release"
74
+ ],
75
+ "max_failed_rounds_before_debug": 2
76
+ },
77
+ "problem_closure": {
78
+ "enabled": true,
79
+ "governance_report_path": ".sce/reports/interactive-governance-report.json",
80
+ "verify": {
81
+ "require_problem_contract": true,
82
+ "require_domain_validation": true,
83
+ "require_domain_coverage": true
84
+ },
85
+ "release": {
86
+ "require_problem_contract": true,
87
+ "require_domain_validation": true,
88
+ "require_domain_coverage": true,
89
+ "require_verify_report": true,
90
+ "require_governance_report": false,
91
+ "block_on_high_governance_alerts": true
92
+ }
93
+ },
94
+ "studio_intake": {
95
+ "enabled": true,
96
+ "auto_create_spec": true,
97
+ "force_spec_for_studio_plan": true,
98
+ "prefer_existing_scene_spec": true,
99
+ "related_spec_min_score": 45,
100
+ "allow_new_spec_when_goal_diverges": true,
101
+ "divergence_similarity_threshold": 0.2,
102
+ "goal_missing_strategy": "create_for_tracking",
103
+ "governance": {
104
+ "auto_run_on_plan": true,
105
+ "max_active_specs_per_scene": 3,
106
+ "stale_days": 14,
107
+ "duplicate_similarity_threshold": 0.66
108
+ }
22
109
  },
23
110
  "debug_policy": {
24
111
  "prioritize_root_cause_fix": true,
@@ -211,10 +211,12 @@
211
211
  - `.sce/specs/<spec>/custom/problem-domain-map.md`
212
212
  - `.sce/specs/<spec>/custom/scene-spec.md`
213
213
  - `.sce/specs/<spec>/custom/problem-domain-chain.json`
214
+ - `.sce/specs/<spec>/custom/problem-contract.json`
214
215
  2) `problem-domain-map` 必须包含:Root Problem、Mind Map、Layered Exploration Chain、Correction Loop
215
216
  3) `scene-spec` 必须包含:Scene Definition、Ontology Coverage、Decision & Execution Path、Acceptance & Gate
216
- 4) `problem-domain-chain.json` 必须包含可机读思维链:problem/ontology/hypotheses/risks/decision_execution_path/correction_loop/verification
217
- 5) 默认门禁强制校验上述结构,缺失即 `no-go`
217
+ 4) `problem-domain-chain.json` 必须包含可机读思维链:problem/ontology/hypotheses/risks/decision_execution_path/correction_loop/verification/problem_contract/ontology_evidence
218
+ 5) `problem-contract.json` 必须包含:issue_statement、expected_outcome、reproduction_steps、impact_scope、forbidden_workarounds
219
+ 6) 默认门禁强制校验上述结构,缺失即 `no-go`(`problem-closure-gate` 在 verify/release 默认启用)
218
220
 
219
221
  **目标**: 用全局问题域视角 + 场景契约约束,减少方向性错误与盲改,提升纠偏效率
220
222