scene-capability-engine 3.6.64 → 3.6.67

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.
Files changed (125) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +17 -6
  3. package/README.zh.md +18 -6
  4. package/bin/scene-capability-engine.js +4 -0
  5. package/docs/README.md +2 -2
  6. package/docs/command-reference.md +385 -8
  7. package/docs/document-governance.md +3 -2
  8. package/docs/integration-modes.md +62 -478
  9. package/docs/integration-philosophy.md +56 -263
  10. package/docs/magicball-cli-invocation-examples.md +1 -0
  11. package/docs/magicball-project-portfolio-contract.md +125 -4
  12. package/docs/project-management/README.md +14 -0
  13. package/docs/project-management/assurance/backup.md +3 -0
  14. package/docs/project-management/assurance/config.md +3 -0
  15. package/docs/project-management/assurance/evidence/README.md +3 -0
  16. package/docs/project-management/assurance/incidents/README.md +3 -0
  17. package/docs/project-management/assurance/logs.md +3 -0
  18. package/docs/project-management/assurance/overview.md +3 -0
  19. package/docs/project-management/assurance/recovery/README.md +3 -0
  20. package/docs/project-management/assurance/resource.md +3 -0
  21. package/docs/project-management/assurance/runbooks/README.md +3 -0
  22. package/docs/project-management/delivery/acceptance/README.md +3 -0
  23. package/docs/project-management/delivery/acceptance/evidence/README.md +3 -0
  24. package/docs/project-management/delivery/acceptance/exceptions/README.md +3 -0
  25. package/docs/project-management/delivery/acceptance/reports/README.md +3 -0
  26. package/docs/project-management/delivery/documents/changes.md +3 -0
  27. package/docs/project-management/delivery/documents/issues.md +3 -0
  28. package/docs/project-management/delivery/documents/overview.md +3 -0
  29. package/docs/project-management/delivery/documents/planning.md +3 -0
  30. package/docs/project-management/delivery/documents/requirements.md +3 -0
  31. package/docs/project-management/delivery/documents/tracking.md +3 -0
  32. package/docs/project-management/delivery/handoffs/README.md +3 -0
  33. package/docs/project-management/delivery/handoffs/evidence/README.md +3 -0
  34. package/docs/project-management/delivery/handoffs/records/README.md +3 -0
  35. package/docs/project-management/delivery/overview.md +10 -0
  36. package/docs/project-management/delivery/releases/README.md +3 -0
  37. package/docs/project-management/delivery/releases/baselines/README.md +3 -0
  38. package/docs/project-management/delivery/releases/evidence/README.md +3 -0
  39. package/docs/project-management/delivery/tables/changes.md +3 -0
  40. package/docs/project-management/delivery/tables/issues.md +3 -0
  41. package/docs/project-management/delivery/tables/planning.md +3 -0
  42. package/docs/project-management/delivery/tables/requirements.md +3 -0
  43. package/docs/project-management/delivery/tables/tracking.md +3 -0
  44. package/docs/project-management/environment/agent-discovery.md +3 -0
  45. package/docs/project-management/environment/development.md +3 -0
  46. package/docs/project-management/environment/overview.md +10 -0
  47. package/docs/project-management/environment/testing.md +3 -0
  48. package/docs/project-management/environment/version-alignment.md +3 -0
  49. package/docs/quick-start-with-ai-tools.md +68 -308
  50. package/docs/releases/README.md +3 -0
  51. package/docs/releases/v3.6.65.md +25 -0
  52. package/docs/releases/v3.6.66.md +23 -0
  53. package/docs/releases/v3.6.67.md +23 -0
  54. package/docs/steering-governance.md +64 -2
  55. package/docs/zh/README.md +2 -2
  56. package/docs/zh/releases/README.md +3 -0
  57. package/docs/zh/releases/v3.6.65.md +25 -0
  58. package/docs/zh/releases/v3.6.66.md +23 -0
  59. package/docs/zh/releases/v3.6.67.md +23 -0
  60. package/lib/commands/adopt.js +24 -0
  61. package/lib/commands/native.js +158 -0
  62. package/lib/commands/project.js +96 -0
  63. package/lib/commands/semantic.js +1459 -0
  64. package/lib/commands/session.js +74 -3
  65. package/lib/commands/spec-bootstrap.js +10 -1
  66. package/lib/commands/spec-gate.js +10 -1
  67. package/lib/commands/spec-pipeline.js +10 -1
  68. package/lib/commands/studio.js +405 -30
  69. package/lib/commands/task.js +141 -7
  70. package/lib/governance/supreme-principles.js +530 -0
  71. package/lib/problem/problem-evaluator.js +4 -0
  72. package/lib/project/candidate-inspection-service.js +24 -1
  73. package/lib/project/portfolio-projection-service.js +315 -5
  74. package/lib/project/project-channel-output.js +94 -0
  75. package/lib/project/project-channel-projection.js +181 -0
  76. package/lib/project/root-onboarding-service.js +107 -7
  77. package/lib/project/semantic-shared-source-projection.js +150 -0
  78. package/lib/project/supervision-action-model.js +277 -0
  79. package/lib/project/supervision-projection-service.js +305 -5
  80. package/lib/project/target-resolution-service.js +70 -5
  81. package/lib/project/visibility-policy.js +93 -0
  82. package/lib/runtime/multi-spec-scene-session.js +8 -1
  83. package/lib/runtime/project-channel-context-store.js +387 -0
  84. package/lib/runtime/project-channel-context.js +406 -0
  85. package/lib/runtime/scene-session-binding.js +46 -0
  86. package/lib/runtime/session-store.js +186 -0
  87. package/lib/runtime/steering-contract.js +7 -1
  88. package/lib/semantic/archive-report.js +283 -0
  89. package/lib/semantic/archive-routing.js +67 -0
  90. package/lib/semantic/backflow-report.js +245 -0
  91. package/lib/semantic/capability-contract.js +30 -0
  92. package/lib/semantic/delta-export.js +145 -0
  93. package/lib/semantic/interaction-observer.js +254 -0
  94. package/lib/semantic/kernel-loader.js +881 -0
  95. package/lib/semantic/native-runtime.js +359 -0
  96. package/lib/semantic/progress-ledger.js +433 -0
  97. package/lib/semantic/replay-evaluator.js +382 -0
  98. package/lib/semantic/shared-publication.js +592 -0
  99. package/lib/semantic/shared-source-config.js +183 -0
  100. package/lib/semantic/shared-source-connect.js +139 -0
  101. package/lib/semantic/shared-source-discovery.js +98 -0
  102. package/lib/semantic/shared-sync-export.js +413 -0
  103. package/lib/semantic/shared-sync-intake.js +592 -0
  104. package/lib/semantic/shared-sync-merge.js +547 -0
  105. package/lib/semantic/shared-sync-release.js +463 -0
  106. package/lib/semantic/supreme-intent-report.js +300 -0
  107. package/lib/state/sce-state-store.js +1360 -0
  108. package/lib/steering/context-sync-manager.js +276 -25
  109. package/lib/studio/spec-intake-governor.js +39 -3
  110. package/lib/studio/task-envelope.js +35 -2
  111. package/lib/workspace/takeover-baseline.js +342 -83
  112. package/package.json +7 -2
  113. package/scripts/agent-governance-baseline-audit.js +395 -0
  114. package/scripts/clarification-first-audit.js +9 -9
  115. package/scripts/deprecated-entry-audit.js +240 -0
  116. package/scripts/release-doc-version-audit.js +24 -0
  117. package/scripts/release-posture-report.js +262 -0
  118. package/template/.sce/README.md +62 -228
  119. package/template/.sce/config/semantic-shared-sources.json +5 -0
  120. package/template/.sce/config/supreme-principles-policy.json +105 -0
  121. package/template/.sce/config/takeover-baseline.json +7 -0
  122. package/template/.sce/steering/CORE_PRINCIPLES.md +23 -63
  123. package/template/.sce/steering/CURRENT_CONTEXT.md +4 -0
  124. package/template/.sce/steering/RULES_GUIDE.md +17 -9
  125. package/template/README.md +32 -96
@@ -1,6 +1,7 @@
1
1
  const chalk = require('chalk');
2
2
  const { SessionStore } = require('../runtime/session-store');
3
3
  const { captureTimelineCheckpoint } = require('../runtime/project-timeline');
4
+ const { buildProjectChannelOutput } = require('../project/project-channel-output');
4
5
 
5
6
  function registerSessionCommands(program) {
6
7
  const session = program
@@ -13,6 +14,11 @@ function registerSessionCommands(program) {
13
14
  .option('--tool <tool>', 'Target tool (codex|claude|cursor|generic)', 'generic')
14
15
  .option('--agent-version <version>', 'Target agent version for compatibility tracking')
15
16
  .option('--id <id>', 'Custom session id')
17
+ .option('--project-id <projectId>', 'Bind session to a project-local collaboration context')
18
+ .option('--channel <channelId>', 'Bind session to a collaboration channel')
19
+ .option('--scene <sceneId>', 'Channel-local active scene override')
20
+ .option('--spec <specId>', 'Channel-local active spec override')
21
+ .option('--doc <docId>', 'Channel-local active doc override')
16
22
  .option('--json', 'Output as JSON')
17
23
  .action(async (objective, options) => {
18
24
  try {
@@ -31,7 +37,8 @@ function registerSessionCommands(program) {
31
37
  objective: objective || '',
32
38
  sessionId: options.id,
33
39
  });
34
- _printSessionResult('session_start', created, options.json);
40
+ const metadata = await _maybeBindProjectChannel(store, created.session_id, options);
41
+ _printSessionResult('session_start', created, options.json, metadata);
35
42
  } catch (error) {
36
43
  _exitWithError(error, options.json);
37
44
  }
@@ -41,6 +48,11 @@ function registerSessionCommands(program) {
41
48
  .command('resume [sessionRef]')
42
49
  .description('Resume a session by id, or use latest by default')
43
50
  .option('--status <status>', 'Status to set after resume', 'active')
51
+ .option('--project-id <projectId>', 'Bind resumed session to a project-local collaboration context')
52
+ .option('--channel <channelId>', 'Bind resumed session to a collaboration channel')
53
+ .option('--scene <sceneId>', 'Channel-local active scene override')
54
+ .option('--spec <specId>', 'Channel-local active spec override')
55
+ .option('--doc <docId>', 'Channel-local active doc override')
44
56
  .option('--json', 'Output as JSON')
45
57
  .action(async (sessionRef, options) => {
46
58
  try {
@@ -57,7 +69,8 @@ function registerSessionCommands(program) {
57
69
  const resumed = await store.resumeSession(sessionRef || 'latest', {
58
70
  status: options.status,
59
71
  });
60
- _printSessionResult('session_resume', resumed, options.json);
72
+ const metadata = await _maybeBindProjectChannel(store, resumed.session_id, options);
73
+ _printSessionResult('session_resume', resumed, options.json, metadata);
61
74
  } catch (error) {
62
75
  _exitWithError(error, options.json);
63
76
  }
@@ -97,15 +110,19 @@ function registerSessionCommands(program) {
97
110
  session
98
111
  .command('show [sessionRef]')
99
112
  .description('Show a session by id, or latest by default')
113
+ .option('--project-id <projectId>', 'Also resolve the project/channel snapshot')
114
+ .option('--channel <channelId>', 'Project channel id for channel-scoped recovery')
100
115
  .option('--json', 'Output as JSON')
101
116
  .action(async (sessionRef, options) => {
102
117
  try {
103
118
  const store = new SessionStore(process.cwd());
104
119
  const current = await store.getSession(sessionRef || 'latest');
105
120
  const sceneIndex = await store.getSceneIndexDiagnostics();
121
+ const projectChannel = await _maybeResolveProjectChannel(store, options);
106
122
  _printSessionResult('session_show', current, options.json, {
107
123
  session_source: 'file',
108
- scene_index: sceneIndex
124
+ scene_index: sceneIndex,
125
+ ...projectChannel
109
126
  });
110
127
  } catch (error) {
111
128
  _exitWithError(error, options.json);
@@ -179,6 +196,9 @@ function _printSessionResult(action, session, asJson = false, metadata = {}) {
179
196
  if (metadata.scene_index && metadata.scene_index.status) {
180
197
  console.log(chalk.gray(`Scene index consistency: ${metadata.scene_index.status}`));
181
198
  }
199
+ if (metadata.project_channel && metadata.project_channel.project_id) {
200
+ console.log(chalk.gray(`Project channel: ${metadata.project_channel.project_id} / ${metadata.project_channel.channel_id || metadata.project_channel.focused_channel_id || 'n/a'}`));
201
+ }
182
202
  }
183
203
 
184
204
  function _printSessionListResult(action, sessions, asJson = false, metadata = {}) {
@@ -219,6 +239,57 @@ function _exitWithError(error, asJson = false) {
219
239
  process.exit(1);
220
240
  }
221
241
 
242
+ async function _maybeBindProjectChannel(store, sessionId, options = {}) {
243
+ const projectId = `${options.projectId || ''}`.trim();
244
+ const channelId = `${options.channel || ''}`.trim();
245
+ if (!projectId || !channelId) {
246
+ return {};
247
+ }
248
+
249
+ const bound = await store.bindSessionToProjectChannel(sessionId, {
250
+ projectId,
251
+ channelId,
252
+ activeScene: options.scene,
253
+ activeSpecId: options.spec,
254
+ activeDoc: options.doc,
255
+ focus: true,
256
+ syncCurrentContext: true
257
+ });
258
+
259
+ return {
260
+ project_channel: buildProjectChannelOutput({
261
+ projectId,
262
+ canonicalProjectId: projectId,
263
+ requestedChannelId: channelId,
264
+ storageMode: 'split',
265
+ context: bound.context,
266
+ channel: bound.channel
267
+ })
268
+ };
269
+ }
270
+
271
+ async function _maybeResolveProjectChannel(store, options = {}) {
272
+ const projectId = `${options.projectId || ''}`.trim();
273
+ if (!projectId) {
274
+ return {};
275
+ }
276
+
277
+ const resolved = await store.getProjectChannelSession(projectId, options.channel || null);
278
+ return {
279
+ project_channel: buildProjectChannelOutput({
280
+ projectId,
281
+ canonicalProjectId: projectId,
282
+ requestedChannelId: options.channel || null,
283
+ storageMode: resolved.storageMode,
284
+ contextAvailable: resolved.contextAvailable,
285
+ context: resolved.context,
286
+ channel: resolved.channel,
287
+ session: resolved.session,
288
+ resolvedChannelId: resolved.resolvedChannelId
289
+ })
290
+ };
291
+ }
292
+
222
293
  module.exports = {
223
294
  registerSessionCommands,
224
295
  };
@@ -30,6 +30,8 @@ async function runSpecBootstrap(options = {}, dependencies = {}) {
30
30
  return bindMultiSpecSceneSession({
31
31
  specTargets,
32
32
  sceneId: options.scene,
33
+ projectId: options.projectId,
34
+ collabChannel: options.collabChannel,
33
35
  commandName: 'spec-bootstrap',
34
36
  commandLabel: 'Multi-spec bootstrap',
35
37
  commandOptions: options,
@@ -75,6 +77,8 @@ async function runSpecBootstrap(options = {}, dependencies = {}) {
75
77
 
76
78
  const sceneBinding = await resolveSpecSceneBinding({
77
79
  sceneId: options.scene,
80
+ projectId: options.projectId,
81
+ collabChannel: options.collabChannel,
78
82
  allowNoScene: false
79
83
  }, {
80
84
  projectPath,
@@ -169,7 +173,10 @@ async function runSpecBootstrap(options = {}, dependencies = {}) {
169
173
  }
170
174
  : {
171
175
  bound: false
172
- }
176
+ },
177
+ ...(sceneBinding && sceneBinding.project_channel
178
+ ? { project_channel: sceneBinding.project_channel }
179
+ : {})
173
180
  };
174
181
 
175
182
  if (specSession) {
@@ -213,6 +220,8 @@ function registerSpecBootstrapCommand(program) {
213
220
  .option('--template <template-id>', 'Template hint for draft generation')
214
221
  .option('--profile <profile-id>', 'Profile for default generation strategy')
215
222
  .option('--scene <scene-id>', 'Bind this spec bootstrap as a child session of an active scene')
223
+ .option('--project-id <project-id>', 'Recover scene binding from one project-local collaboration context')
224
+ .option('--collab-channel <channel-id>', 'Recover scene binding from one collaboration channel')
216
225
  .option('--non-interactive', 'Disable prompts and use arguments/defaults only')
217
226
  .option('--dry-run', 'Preview generation result without writing files')
218
227
  .option('--json', 'Output machine-readable JSON')
@@ -32,6 +32,8 @@ async function runSpecGate(options = {}, dependencies = {}) {
32
32
  return bindMultiSpecSceneSession({
33
33
  specTargets,
34
34
  sceneId: options.scene,
35
+ projectId: options.projectId,
36
+ collabChannel: options.collabChannel,
35
37
  commandName: 'spec-gate',
36
38
  commandLabel: 'Multi-spec gate',
37
39
  commandOptions: options,
@@ -59,6 +61,8 @@ async function runSpecGate(options = {}, dependencies = {}) {
59
61
 
60
62
  const sceneBinding = await resolveSpecSceneBinding({
61
63
  sceneId: options.scene,
64
+ projectId: options.projectId,
65
+ collabChannel: options.collabChannel,
62
66
  allowNoScene: false
63
67
  }, {
64
68
  projectPath,
@@ -127,7 +131,10 @@ async function runSpecGate(options = {}, dependencies = {}) {
127
131
  scene_session_id: sceneBinding.scene_session_id,
128
132
  spec_session_id: specSession.session_id,
129
133
  binding_source: sceneBinding.source
130
- }
134
+ },
135
+ ...(sceneBinding.project_channel
136
+ ? { project_channel: sceneBinding.project_channel }
137
+ : {})
131
138
  };
132
139
  } catch (error) {
133
140
  await sessionStore.completeSpecSession({
@@ -215,6 +222,8 @@ function registerSpecGateCommand(program) {
215
222
  .option('--spec <name>', 'Single Spec identifier')
216
223
  .option('--specs <names>', 'Comma-separated Spec identifiers (multi-spec defaults to orchestrate mode)')
217
224
  .option('--scene <scene-id>', 'Bind this spec gate run as a child session of an active scene')
225
+ .option('--project-id <project-id>', 'Recover scene binding from one project-local collaboration context')
226
+ .option('--collab-channel <channel-id>', 'Recover scene binding from one collaboration channel')
218
227
  .option('--policy <path>', 'Policy JSON path')
219
228
  .option('--strict', 'Enable strict mode override')
220
229
  .option('--json', 'Output machine-readable JSON')
@@ -29,6 +29,8 @@ async function runSpecPipeline(options = {}, dependencies = {}) {
29
29
  return bindMultiSpecSceneSession({
30
30
  specTargets,
31
31
  sceneId: options.scene,
32
+ projectId: options.projectId,
33
+ collabChannel: options.collabChannel,
32
34
  commandName: 'spec-pipeline',
33
35
  commandLabel: 'Multi-spec pipeline',
34
36
  commandOptions: options,
@@ -56,6 +58,8 @@ async function runSpecPipeline(options = {}, dependencies = {}) {
56
58
 
57
59
  const sceneBinding = await resolveSpecSceneBinding({
58
60
  sceneId: options.scene,
61
+ projectId: options.projectId,
62
+ collabChannel: options.collabChannel,
59
63
  allowNoScene: false
60
64
  }, {
61
65
  projectPath,
@@ -150,7 +154,10 @@ async function runSpecPipeline(options = {}, dependencies = {}) {
150
154
  }
151
155
  : {
152
156
  bound: false
153
- }
157
+ },
158
+ ...(sceneBinding && sceneBinding.project_channel
159
+ ? { project_channel: sceneBinding.project_channel }
160
+ : {})
154
161
  };
155
162
 
156
163
  if (specSession) {
@@ -199,6 +206,8 @@ function registerSpecPipelineCommand(program) {
199
206
  .option('--spec <name>', 'Single Spec identifier')
200
207
  .option('--specs <names>', 'Comma-separated Spec identifiers (multi-spec defaults to orchestrate mode)')
201
208
  .option('--scene <scene-id>', 'Bind this spec pipeline run as a child session of an active scene')
209
+ .option('--project-id <project-id>', 'Recover scene binding from one project-local collaboration context')
210
+ .option('--collab-channel <channel-id>', 'Recover scene binding from one collaboration channel')
202
211
  .option('--from-stage <stage>', 'Start stage (requirements/design/tasks/gate)')
203
212
  .option('--to-stage <stage>', 'End stage (requirements/design/tasks/gate)')
204
213
  .option('--resume', 'Resume from latest unfinished stage state')