scene-capability-engine 3.6.60 → 3.6.62

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/CHANGELOG.md CHANGED
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [3.6.62] - 2026-03-21
11
+
12
+ ### Removed
13
+ - Removed the OpenHands-specific `sce studio events --openhands-events <path>` bridge so current SCE no longer exposes a vendor-specific event-ingestion path in the active CLI surface.
14
+
15
+ ## [3.6.61] - 2026-03-20
16
+
17
+ ### Added
18
+ - Added `sce project candidate inspect --root <path> --json` as the canonical single-root inspection contract for workspace-backed roots, local `.sce` candidates, ordinary directory candidates, and invalid roots.
19
+ - Added `sce project onboarding import --root <path> --json` as the canonical root-based onboarding entry, reusing the ordered `register/attach/hydrate/activate/scaffold` step envelope instead of inventing a second import receipt.
20
+
21
+ ### Changed
22
+ - MagicBall-facing multi-project docs, command reference, CLI examples, frontend mapping, and release-time project-contract audit now include `project candidate inspect` and `project onboarding import` alongside the existing portfolio/target/supervision contracts.
23
+ - Root-based onboarding now suppresses internal adoption progress logs in `--json` mode so adapters receive clean machine-readable envelopes.
24
+
10
25
  ## [3.6.60] - 2026-03-19
11
26
 
12
27
  ### Changed
package/README.md CHANGED
@@ -155,7 +155,7 @@ SCE is opinionated by default.
155
155
  For IDEs, AI shells, or custom frontends, the most important SCE surfaces are:
156
156
 
157
157
  - `sce studio plan|generate|apply|verify|release`
158
- - `sce studio events --openhands-events <path>`
158
+ - `sce studio events`
159
159
  - `sce task ref|show|rerun`
160
160
  - `sce timeline save|list|show|restore`
161
161
  - `sce capability inventory`
@@ -174,7 +174,7 @@ MagicBall-specific integration surfaces now also include:
174
174
  - `sce app registry status|configure|sync*`
175
175
  - `sce app runtime show|releases|install|activate|uninstall`
176
176
  - `sce app engineering preview|ownership|open|import|show|attach|hydrate|scaffold|activate`
177
- - `sce project portfolio show|target resolve|supervision show`
177
+ - `sce project portfolio show|candidate inspect|onboarding import|target resolve|supervision show`
178
178
  - `sce mode application|ontology|engineering home`
179
179
  - `sce pm requirement|tracking|planning|change|issue ... --json`
180
180
  - `sce ontology er|br|dl ... --json`
@@ -230,5 +230,5 @@ MIT. See [LICENSE](LICENSE).
230
230
 
231
231
  ---
232
232
 
233
- **Version**: 3.6.60
234
- **Last Updated**: 2026-03-19
233
+ **Version**: 3.6.62
234
+ **Last Updated**: 2026-03-21
package/README.zh.md CHANGED
@@ -160,7 +160,7 @@ SCE 默认是强治理的。
160
160
  如果你要对接 IDE、AI 助手或前端,优先关注这些接口面:
161
161
 
162
162
  - `sce studio plan|generate|apply|verify|release`
163
- - `sce studio events --openhands-events <path>`
163
+ - `sce studio events`
164
164
  - `sce task ref|show|rerun`
165
165
  - `sce timeline save|list|show|restore`
166
166
  - `sce capability inventory`
@@ -179,7 +179,7 @@ SCE 默认是强治理的。
179
179
  - `sce app registry status|configure|sync*`
180
180
  - `sce app runtime show|releases|install|activate|uninstall`
181
181
  - `sce app engineering preview|ownership|open|import|show|attach|hydrate|scaffold|activate`
182
- - `sce project portfolio show|target resolve|supervision show`
182
+ - `sce project portfolio show|candidate inspect|onboarding import|target resolve|supervision show`
183
183
  - `sce mode application|ontology|engineering home`
184
184
  - `sce pm requirement|tracking|planning|change|issue ... --json`
185
185
  - `sce ontology er|br|dl ... --json`
@@ -235,5 +235,5 @@ MIT,见 [LICENSE](LICENSE)。
235
235
 
236
236
  ---
237
237
 
238
- **版本**:3.6.60
239
- **最后更新**:2026-03-19
238
+ **版本**:3.6.62
239
+ **最后更新**:2026-03-21
@@ -744,8 +744,6 @@ sce studio resume --job <job-id> --json
744
744
 
745
745
  # Inspect recent stage events
746
746
  sce studio events --job <job-id> --limit 50 --json
747
- # Map OpenHands raw events into the same task-stream contract
748
- sce studio events --job <job-id> --openhands-events ./openhands-events.json --json
749
747
 
750
748
  # Rollback a job after apply/release
751
749
  sce studio rollback --job <job-id> --reason "manual-check-failed" --json
@@ -779,7 +777,6 @@ Studio JSON output now includes a stable UI-oriented task stream contract (in ad
779
777
  - `task.evidence[]`: structured evidence references
780
778
  - `task.feedback_model`: human-facing task feedback (`problem`, `execution`, `diagnosis`, `evidence`, `next_step`, `mb_status`)
781
779
  - `event[]`: raw audit event stream (`studio events` also keeps legacy `events[]` for compatibility)
782
- - `studio events --openhands-events <path>` switches `source_stream=openhands` and maps OpenHands raw events to the same task contract fields.
783
780
  - hierarchical task reference lookup/rerun:
784
781
  - `sce task show --ref <SS.PP.TT> --json`
785
782
  - `sce task rerun --ref <SS.PP.TT> [--dry-run] --json`
@@ -2660,7 +2657,7 @@ Overall Health: 2 healthy, 1 unhealthy
2660
2657
 
2661
2658
  ---
2662
2659
 
2663
- ## Project Portfolio And Supervision
2660
+ ## Project Portfolio, Candidate Inspection, And Onboarding
2664
2661
 
2665
2662
  #### `sce project portfolio show`
2666
2663
 
@@ -2680,6 +2677,42 @@ sce project portfolio show [options]
2680
2677
  - Marks inaccessible or partial projects explicitly instead of dropping them
2681
2678
  - Reuses project-local session governance signals to summarize active sessions and last activity
2682
2679
 
2680
+ #### `sce project candidate inspect`
2681
+
2682
+ Inspect one local root through the canonical engine-owned project-candidate contract.
2683
+
2684
+ **Usage:**
2685
+ ```bash
2686
+ sce project candidate inspect --root <path> [options]
2687
+ ```
2688
+
2689
+ **Options:**
2690
+ - `--root <path>` - Local root directory to inspect
2691
+ - `--json` - Output the canonical `LocalProjectCandidateInspection`
2692
+
2693
+ **Behavior:**
2694
+ - Distinguishes `workspace-backed`, `local-sce-candidate`, `directory-candidate`, and `invalid`
2695
+ - Reuses deterministic project/workspace identity when the root already maps to a registered workspace
2696
+ - Returns canonical readiness, availability, and reason codes without adapter-side path heuristics
2697
+
2698
+ #### `sce project onboarding import`
2699
+
2700
+ Import one local root into the canonical project portfolio using root-based onboarding.
2701
+
2702
+ **Usage:**
2703
+ ```bash
2704
+ sce project onboarding import --root <path> [options]
2705
+ ```
2706
+
2707
+ **Options:**
2708
+ - `--root <path>` - Local root directory to import
2709
+ - `--json` - Output the canonical `ProjectOnboardingImportResult`
2710
+
2711
+ **Behavior:**
2712
+ - Accepts a local root as the primary onboarding target without app-bundle-first indirection
2713
+ - Reuses the canonical ordered step envelope (`register`, `attach`, `hydrate`, `activate`, `scaffold`)
2714
+ - Registers onboarded roots into the workspace-backed portfolio without inventing a second registry
2715
+
2683
2716
  #### `sce project target resolve`
2684
2717
 
2685
2718
  Resolve one target project for cross-project flows without mutating active workspace selection.
@@ -68,6 +68,20 @@ Done when:
68
68
  - drillback panels use `items[]` directly
69
69
  - frontend does not present `cursor` as a raw event-stream offset
70
70
 
71
+ ### Task 0.5
72
+ Preflight user-picked local roots with the canonical candidate contract, then onboard by root when needed.
73
+
74
+ Commands:
75
+ ```bash
76
+ sce project candidate inspect --root "<path>" --json
77
+ sce project onboarding import --root "<path>" --json
78
+ ```
79
+
80
+ Done when:
81
+ - frontend does not infer project validity from ad hoc `.sce` path heuristics alone
82
+ - existing local `.sce` roots are imported without rebuilding them blindly
83
+ - ordinary directories can be onboarded without pretending to be app-library items first
84
+
71
85
  ## Phase 1: App Entry And Mode Switching
72
86
 
73
87
  ### Task 1.1
@@ -24,6 +24,8 @@ Assume:
24
24
  ### 1.0 Read multi-project portfolio baseline
25
25
  ```bash
26
26
  sce project portfolio show --json
27
+ sce project candidate inspect --root "C:/workspace/customer-order-demo" --json
28
+ sce project onboarding import --root "C:/workspace/customer-order-demo" --json
27
29
  sce project target resolve --request "continue customer-order-demo" --json
28
30
  sce project supervision show --project workspace:customer-order-demo --json
29
31
  ```
@@ -65,6 +65,8 @@ Recommended shape:
65
65
  ```ts
66
66
  interface ProjectWorkspaceShellState {
67
67
  projectPortfolio: Record<string, unknown> | null
68
+ projectCandidate: Record<string, unknown> | null
69
+ projectOnboarding: Record<string, unknown> | null
68
70
  currentProjectId: string | null
69
71
  projectTarget: Record<string, unknown> | null
70
72
  projectSupervision: Record<string, unknown> | null
@@ -73,11 +75,14 @@ interface ProjectWorkspaceShellState {
73
75
 
74
76
  Owned commands:
75
77
  - `sce project portfolio show --json`
78
+ - `sce project candidate inspect --root <path> --json`
79
+ - `sce project onboarding import --root <path> --json`
76
80
  - `sce project target resolve --request <text> --current-project <project-id> --json`
77
81
  - `sce project supervision show --project <project-id> --json`
78
82
 
79
83
  Rule:
80
84
  - multi-project shell must consume engine-owned project truth directly
85
+ - manual local-root import must preflight with `candidate inspect` before any onboarding mutation
81
86
  - target resolution must be treated as preflight and must not mutate active workspace selection implicitly
82
87
 
83
88
  ### 2.2 Ontology Page State
@@ -29,7 +29,7 @@ SCE changes completed and now available for MagicBall:
29
29
  - `app registry status/configure/sync*`
30
30
  - `app runtime show/releases/install/activate/uninstall`
31
31
  - `app engineering preview/ownership/open/import/show/attach/hydrate/scaffold/activate`
32
- - `project portfolio show/target resolve/supervision show`
32
+ - `project portfolio show/candidate inspect/onboarding import/target resolve/supervision show`
33
33
  - `pm requirement/tracking/planning/change/issue` data plane
34
34
  - `ontology er/br/dl` + `ontology triad summary`
35
35
  - `ontology seed list/show/apply`
@@ -41,7 +41,7 @@ SCE changes completed and now available for MagicBall:
41
41
  2. consume `device current`, `app collection list/show/apply`, `scene workspace list/show/apply`, and `app install-state list` as the local device/install baseline
42
42
  3. consume `pm`, `ontology`, and `assurance` table payloads
43
43
  4. wire runtime install/activate/uninstall and engineering attach/hydrate/scaffold/activate actions
44
- 5. treat `project portfolio / target resolve / supervision` as the default multi-project shell truth
44
+ 5. treat `project portfolio / candidate inspect / onboarding import / target resolve / supervision` as the default multi-project shell truth
45
45
  6. use demo app: `customer-order-demo`
46
46
 
47
47
  ### Related SCE docs
@@ -6,6 +6,8 @@ Define the stable phase-1 SCE contract for MagicBall multi-project surfaces.
6
6
 
7
7
  This document covers:
8
8
  - project roster projection
9
+ - root candidate inspection
10
+ - root-based onboarding import
9
11
  - target-project preflight resolution
10
12
  - project-scoped supervision snapshot
11
13
 
@@ -22,6 +24,7 @@ Use together with:
22
24
 
23
25
  Phase-1 is read-first and engine-owned:
24
26
  - project visibility comes from registered workspaces plus the current unregistered `.sce` project when applicable
27
+ - local root inspection and onboarding reuse engine-owned identity and reason codes
25
28
  - project identity is deterministic and stable for registered workspaces
26
29
  - target resolution is preflight-only and does not mutate active workspace selection
27
30
  - supervision is a project-scoped snapshot, not a raw cross-project event stream
@@ -36,6 +39,8 @@ Phase-1 does not introduce:
36
39
 
37
40
  ```bash
38
41
  sce project portfolio show --json
42
+ sce project candidate inspect --root <path> --json
43
+ sce project onboarding import --root <path> --json
39
44
  sce project target resolve --json
40
45
  sce project supervision show --project <project-id> --json
41
46
  ```
@@ -105,6 +110,55 @@ interface ProjectPortfolioRecord {
105
110
 
106
111
  ## 2. Target Resolution
107
112
 
113
+ ## 1.5 Root Candidate Inspection And Onboarding
114
+
115
+ ### Commands
116
+
117
+ ```bash
118
+ sce project candidate inspect --root <path> --json
119
+ sce project onboarding import --root <path> --json
120
+ ```
121
+
122
+ ### Contract shape
123
+
124
+ ```ts
125
+ interface LocalProjectCandidateInspection {
126
+ inspectedAt: string
127
+ rootDir: string
128
+ kind: 'workspace-backed' | 'local-sce-candidate' | 'directory-candidate' | 'invalid'
129
+ projectId?: string
130
+ workspaceId?: string
131
+ projectName?: string
132
+ readiness: 'ready' | 'partial' | 'pending' | 'blocked' | 'unknown'
133
+ availability: 'accessible' | 'inaccessible' | 'degraded'
134
+ localCandidate: boolean
135
+ reasonCodes: string[]
136
+ }
137
+
138
+ interface ProjectOnboardingImportResult {
139
+ mode: 'import'
140
+ generated_at: string
141
+ success: boolean
142
+ preview: LocalProjectCandidateInspection
143
+ steps: Array<{
144
+ key: 'register' | 'attach' | 'hydrate' | 'activate' | 'scaffold'
145
+ status: 'done' | 'skipped' | 'pending' | 'failed'
146
+ reasonCode?: string
147
+ detail?: string
148
+ }>
149
+ }
150
+ ```
151
+
152
+ ### MagicBall rules
153
+
154
+ - Adapter-owned filesystem scanning is allowed, but every chosen root must be normalized through `candidate inspect`.
155
+ - Use `project onboarding import` when the user picks a local root directly; do not fake an app-library item just to enter onboarding.
156
+ - If `kind=workspace-backed`, reuse returned `projectId/workspaceId` directly and avoid synthesizing a second registry identity.
157
+ - If `kind=local-sce-candidate`, present it as a partial local project until onboarding import registers it.
158
+ - Render `reasonCodes` directly in CLI/IDE receipts; do not replace them with frontend-only heuristics.
159
+
160
+ ## 2. Target Resolution
161
+
108
162
  ### Command
109
163
 
110
164
  ```bash
@@ -201,10 +255,12 @@ interface ProjectSupervisionItem {
201
255
  ## 4. Recommended Multi-Project Frontend Flow
202
256
 
203
257
  1. Load `sce project portfolio show --json` when entering the multi-project shell.
204
- 2. Store `activeProjectId` and render a project switcher from `projects[]`.
205
- 3. When the user enters a cross-project free-text request, preflight with `sce project target resolve --json`.
206
- 4. After project selection or successful resolution, load `sce project supervision show --project <project-id> --json`.
207
- 5. Keep per-project tabs and page layout frontend-owned, but keep project truth engine-owned.
258
+ 2. When the user selects a local root manually, preflight it with `sce project candidate inspect --root <path> --json`.
259
+ 3. If the root is not yet portfolio-backed, import it through `sce project onboarding import --root <path> --json`.
260
+ 4. Store `activeProjectId` and render a project switcher from `projects[]`.
261
+ 5. When the user enters a cross-project free-text request, preflight with `sce project target resolve --json`.
262
+ 6. After project selection or successful resolution, load `sce project supervision show --project <project-id> --json`.
263
+ 7. Keep per-project tabs and page layout frontend-owned, but keep project truth engine-owned.
208
264
 
209
265
  ## 5. Minimal Acceptance Criteria For MagicBall
210
266
 
@@ -142,6 +142,8 @@ Use `docs/magicball-cli-invocation-examples.md` for copy-ready commands.
142
142
 
143
143
  ### Multi-project control
144
144
  - `sce project portfolio show`
145
+ - `sce project candidate inspect`
146
+ - `sce project onboarding import`
145
147
  - `sce project target resolve`
146
148
  - `sce project supervision show`
147
149
 
@@ -117,7 +117,6 @@ SCE 现在在时间线命令中增加:
117
117
  ## 4. 最小接口清单
118
118
 
119
119
  - `sce studio events --job <job-id> --json`
120
- - `sce studio events --job <job-id> --openhands-events <path> --json`
121
120
  - `sce timeline list --limit 20 --json`
122
121
  - `sce timeline show <snapshot-id> --json`
123
122
 
@@ -136,11 +136,13 @@ MagicBall can treat the current SCE integration as baseline-ready when:
136
136
 
137
137
  ### Must render
138
138
  - project switcher from `project portfolio show`
139
+ - local-root candidate receipt from `project candidate inspect`
139
140
  - current project marker
140
141
  - project health summary from `project supervision show`
141
142
  - explicit degraded / inaccessible project states
142
143
 
143
144
  ### Must behave correctly
145
+ - manual root import preflights through `project candidate inspect` before `project onboarding import`
144
146
  - cross-project free-text routing preflights through `project target resolve`
145
147
  - ambiguous resolution does not auto-select silently
146
148
  - target resolution does not implicitly switch active workspace selection
@@ -94,7 +94,7 @@ rg -n "github.com/scene-capability-engine/sce" README.md README.zh.md docs START
94
94
  Additional expectation:
95
95
 
96
96
  - `audit:magicball-engineering-contract` passes so active MagicBall entry docs stay aligned with `scene delivery`, `engineering preview/ownership`, and `open/import/scaffold` contracts.
97
- - `audit:magicball-project-contract` passes so active MagicBall entry docs stay aligned with `project portfolio`, `project target resolve`, and `project supervision show` contracts.
97
+ - `audit:magicball-project-contract` passes so active MagicBall entry docs stay aligned with `project portfolio`, `project candidate inspect`, `project onboarding import`, `project target resolve`, and `project supervision show` contracts.
98
98
 
99
99
  ---
100
100
 
@@ -9,6 +9,8 @@ This directory stores release-facing documents:
9
9
  ## Archived Versions
10
10
 
11
11
  - [Release checklist](../release-checklist.md)
12
+ - [v3.6.62 release notes](./v3.6.62.md)
13
+ - [v3.6.61 release notes](./v3.6.61.md)
12
14
  - [v3.6.60 release notes](./v3.6.60.md)
13
15
  - [v3.6.59 release notes](./v3.6.59.md)
14
16
  - [v3.6.58 release notes](./v3.6.58.md)
@@ -0,0 +1,21 @@
1
+ # v3.6.61 Release Notes
2
+
3
+ Release date: 2026-03-20
4
+
5
+ ## Highlights
6
+
7
+ - Added canonical local-root inspection through `sce project candidate inspect --root <path> --json`, so adapters can classify one chosen directory without inventing their own `.sce` heuristics.
8
+ - Added canonical root-based onboarding through `sce project onboarding import --root <path> --json`, reusing the shared onboarding step envelope and registering imported roots into the project portfolio without a second registry.
9
+ - Extended MagicBall-facing contract docs and release-time doc audit to keep `candidate inspect` and `onboarding import` aligned with `project portfolio / target resolve / supervision`.
10
+
11
+ ## Validation
12
+
13
+ - `npx jest tests/unit/commands/project.test.js --runInBand`
14
+ - `npx jest tests/unit/scripts/magicball-project-contract-audit.test.js --runInBand`
15
+ - `npx jest tests/integration/project-cli.integration.test.js --runInBand`
16
+ - `node scripts/magicball-project-contract-audit.js --fail-on-violation --json`
17
+
18
+ ## Release Notes
19
+
20
+ - Use `v3.6.61` when you need the upstream `136-00` local-project candidate inspection and root-based onboarding contract in the published SCE package.
21
+ - This release stays within the existing engine/adapter boundary: adapters still own scan policy, while SCE now owns the canonical semantics for inspecting one root and importing it by root.
@@ -0,0 +1,32 @@
1
+ # v3.6.62 Release Notes
2
+
3
+ Release date: 2026-03-21
4
+
5
+ ## Highlights
6
+
7
+ - Removed the OpenHands-specific `sce studio events --openhands-events <path>` bridge from the tracked CLI surface so SCE no longer publishes a vendor-specific event-ingestion path as a first-class runtime contract.
8
+ - Removed the corresponding OpenHands mapping test coverage and cleaned the main command reference plus README surfaces to keep shipped documentation aligned with the active product boundary.
9
+ - Kept the broader external-runtime direction vendor-neutral so future IDE embedding can focus on Codex CLI, Claude Code, and similar in-process tool endpoints without carrying a stale OpenHands-first entry point.
10
+
11
+ ## Validation
12
+
13
+ - `npx jest tests/unit/commands/studio.test.js --runInBand`
14
+ - `npm run test:release`
15
+ - `npm run audit:release-docs`
16
+ - `npm run audit:steering`
17
+ - `npm run test:skip-audit`
18
+ - `npm run test:sce-tracking`
19
+ - `npm run gate:npm-runtime-assets`
20
+ - `npm run test:brand-consistency`
21
+ - `npm run audit:clarification-first`
22
+ - `npm run audit:magicball-engineering-contract`
23
+ - `npm run audit:magicball-project-contract`
24
+ - `npm run gate:collab-governance`
25
+ - `npm run gate:errorbook-registry-health`
26
+ - `npm run gate:errorbook-release`
27
+ - `npm pack --dry-run`
28
+
29
+ ## Release Notes
30
+
31
+ - Use `v3.6.62` when you need the published SCE package to exclude the old OpenHands-specific `studio events` bridge from the active CLI and doc surface.
32
+ - This patch intentionally does not rewrite user-local draft Specs; it only cleans the tracked engine, tests, and release-facing documentation.
@@ -79,7 +79,7 @@ rg -n "github.com/scene-capability-engine/sce" README.md README.zh.md docs START
79
79
  额外预期:
80
80
 
81
81
  - `audit:magicball-engineering-contract` 通过,确保活跃的 MagicBall 入口文档与 `scene delivery`、`engineering preview/ownership`、`open/import/scaffold` 契约保持一致。
82
- - `audit:magicball-project-contract` 通过,确保活跃的 MagicBall 入口文档与 `project portfolio`、`project target resolve`、`project supervision show` 契约保持一致。
82
+ - `audit:magicball-project-contract` 通过,确保活跃的 MagicBall 入口文档与 `project portfolio`、`project candidate inspect`、`project onboarding import`、`project target resolve`、`project supervision show` 契约保持一致。
83
83
 
84
84
  ---
85
85
 
@@ -9,6 +9,8 @@
9
9
  ## 历史版本归档
10
10
 
11
11
  - [发布检查清单](../release-checklist.md)
12
+ - [v3.6.62 发布说明](./v3.6.62.md)
13
+ - [v3.6.61 发布说明](./v3.6.61.md)
12
14
  - [v3.6.60 发布说明](./v3.6.60.md)
13
15
  - [v3.6.59 发布说明](./v3.6.59.md)
14
16
  - [v3.6.58 发布说明](./v3.6.58.md)
@@ -0,0 +1,21 @@
1
+ # v3.6.61 发布说明
2
+
3
+ 发布日期:2026-03-20
4
+
5
+ ## 重点变化
6
+
7
+ - 新增 `sce project candidate inspect --root <path> --json`,把“单个本地目录候选项目检查”正式上收到 engine 契约层,适配器不再需要自造 `.sce` 目录启发式。
8
+ - 新增 `sce project onboarding import --root <path> --json`,把“按根目录导入/onboarding”正式收敛到 canonical step envelope,并把导入结果纳入项目 portfolio,而不是另造第二套 registry。
9
+ - 同步扩展了 MagicBall 多项目合同文档与发布时项目合同审计,确保 `candidate inspect / onboarding import` 与既有 `project portfolio / target resolve / supervision` 保持一致。
10
+
11
+ ## 验证
12
+
13
+ - `npx jest tests/unit/commands/project.test.js --runInBand`
14
+ - `npx jest tests/unit/scripts/magicball-project-contract-audit.test.js --runInBand`
15
+ - `npx jest tests/integration/project-cli.integration.test.js --runInBand`
16
+ - `node scripts/magicball-project-contract-audit.js --fail-on-violation --json`
17
+
18
+ ## 发布说明
19
+
20
+ - 需要上游 `136-00` 本地项目候选检查与按根目录 onboarding 契约时,请使用 `v3.6.61`。
21
+ - 该版本继续保持 engine / adapter 边界:扫描策略仍归适配器,SCE 负责“检查一个 root”和“按 root 导入”的正式语义。
@@ -0,0 +1,32 @@
1
+ # v3.6.62 发布说明
2
+
3
+ 发布日期:2026-03-21
4
+
5
+ ## 重点变化
6
+
7
+ - 从已跟踪 CLI 正式接口面移除了 OpenHands 专有的 `sce studio events --openhands-events <path>` 桥接入口,避免 SCE 继续把某个供应商专有事件摄取路径作为一等运行时契约发布。
8
+ - 同步移除了对应的 OpenHands 映射测试,并清理了主命令参考与 README 中的相关说明,保证随包发布的文档与当前正式产品边界一致。
9
+ - 外部 runtime 方向继续保持 vendor-neutral,为后续 IDE 内嵌 Codex CLI、Claude Code 等执行端预留稳定空间,而不是继续背着过时的 OpenHands-first 入口。
10
+
11
+ ## 验证
12
+
13
+ - `npx jest tests/unit/commands/studio.test.js --runInBand`
14
+ - `npm run test:release`
15
+ - `npm run audit:release-docs`
16
+ - `npm run audit:steering`
17
+ - `npm run test:skip-audit`
18
+ - `npm run test:sce-tracking`
19
+ - `npm run gate:npm-runtime-assets`
20
+ - `npm run test:brand-consistency`
21
+ - `npm run audit:clarification-first`
22
+ - `npm run audit:magicball-engineering-contract`
23
+ - `npm run audit:magicball-project-contract`
24
+ - `npm run gate:collab-governance`
25
+ - `npm run gate:errorbook-registry-health`
26
+ - `npm run gate:errorbook-release`
27
+ - `npm pack --dry-run`
28
+
29
+ ## 发布说明
30
+
31
+ - 当你需要已发布的 SCE 包不再暴露旧的 OpenHands 专有 `studio events` 桥接入口时,请使用 `v3.6.62`。
32
+ - 本次补丁刻意不去重写用户本地未纳管的草稿 spec,只清理已跟踪的 engine、测试与发布文档面。
@@ -1,5 +1,7 @@
1
1
  const chalk = require('chalk');
2
+ const { inspectProjectCandidate } = require('../project/candidate-inspection-service');
2
3
  const { buildProjectPortfolioProjection } = require('../project/portfolio-projection-service');
4
+ const { runProjectRootOnboardingImport } = require('../project/root-onboarding-service');
3
5
  const { buildProjectSupervisionProjection } = require('../project/supervision-projection-service');
4
6
  const { resolveProjectTarget } = require('../project/target-resolution-service');
5
7
 
@@ -41,6 +43,32 @@ async function runProjectSupervisionShowCommand(options = {}, dependencies = {})
41
43
  return payload;
42
44
  }
43
45
 
46
+ async function runProjectCandidateInspectCommand(options = {}, dependencies = {}) {
47
+ const payload = await inspectProjectCandidate(options, dependencies);
48
+ if (options.json) {
49
+ console.log(JSON.stringify(payload, null, 2));
50
+ } else {
51
+ console.log(chalk.blue('Project Candidate Inspection'));
52
+ console.log(` Root: ${payload.rootDir}`);
53
+ console.log(` Kind: ${payload.kind}`);
54
+ console.log(` Readiness: ${payload.readiness}`);
55
+ }
56
+ return payload;
57
+ }
58
+
59
+ async function runProjectOnboardingImportCommand(options = {}, dependencies = {}) {
60
+ const payload = await runProjectRootOnboardingImport(options, dependencies);
61
+ if (options.json) {
62
+ console.log(JSON.stringify(payload, null, 2));
63
+ } else {
64
+ console.log(chalk.blue('Project Onboarding Import'));
65
+ console.log(` Root: ${payload.preview ? payload.preview.rootDir : options.root}`);
66
+ console.log(` Success: ${payload.success ? 'yes' : 'no'}`);
67
+ console.log(` Workspace: ${payload.result && payload.result.workspaceId ? payload.result.workspaceId : 'none'}`);
68
+ }
69
+ return payload;
70
+ }
71
+
44
72
  function safeRun(handler, options = {}, context = 'project command') {
45
73
  Promise.resolve(handler(options))
46
74
  .catch((error) => {
@@ -84,6 +112,28 @@ function registerProjectCommands(program) {
84
112
  .option('--json', 'Print machine-readable JSON output')
85
113
  .action((options) => safeRun(runProjectTargetResolveCommand, options, 'project target resolve'));
86
114
 
115
+ const candidate = project
116
+ .command('candidate')
117
+ .description('Inspect one local directory as a canonical project candidate');
118
+
119
+ candidate
120
+ .command('inspect')
121
+ .description('Inspect one local root without inventing adapter-side heuristics')
122
+ .requiredOption('--root <path>', 'Local root directory to inspect')
123
+ .option('--json', 'Print machine-readable JSON output')
124
+ .action((options) => safeRun(runProjectCandidateInspectCommand, options, 'project candidate inspect'));
125
+
126
+ const onboarding = project
127
+ .command('onboarding')
128
+ .description('Import one local directory into the canonical project portfolio');
129
+
130
+ onboarding
131
+ .command('import')
132
+ .description('Run root-based onboarding without app-bundle-first indirection')
133
+ .requiredOption('--root <path>', 'Local root directory to import')
134
+ .option('--json', 'Print machine-readable JSON output')
135
+ .action((options) => safeRun(runProjectOnboardingImportCommand, options, 'project onboarding import'));
136
+
87
137
  const supervision = project
88
138
  .command('supervision')
89
139
  .description('Inspect project-scoped supervision projection');
@@ -98,6 +148,8 @@ function registerProjectCommands(program) {
98
148
  }
99
149
 
100
150
  module.exports = {
151
+ runProjectCandidateInspectCommand,
152
+ runProjectOnboardingImportCommand,
101
153
  runProjectPortfolioShowCommand,
102
154
  runProjectTargetResolveCommand,
103
155
  runProjectSupervisionShowCommand,