expo-harmony-toolkit 1.9.3 → 1.11.1
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.en.md +5 -5
- package/README.md +5 -5
- package/build/core/constants.d.ts +1 -1
- package/build/core/constants.js +1 -1
- package/build/core/report.js +27 -28
- package/build/core/template.js +5 -1
- package/build/data/publicDocs.d.ts +2 -2
- package/build/data/publicDocs.js +1 -1
- package/build/docs/render.js +8 -8
- package/docs/cli-build.md +1 -1
- package/docs/npm-release.md +5 -4
- package/docs/roadmap.md +36 -2
- package/docs/support-matrix.md +9 -7
- package/package.json +1 -1
package/README.en.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<p>
|
|
10
10
|
<a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/actions/workflows/ci.yml"><img alt="Checks" src="https://img.shields.io/badge/checks-passing-16a34a?style=flat-square&logo=githubactions&logoColor=white"></a>
|
|
11
11
|
<a href="./LICENSE"><img alt="License" src="https://img.shields.io/badge/license-MIT-0f766e?style=flat-square"></a>
|
|
12
|
-
<a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/releases"><img alt="Version" src="https://img.shields.io/badge/version-v1.
|
|
12
|
+
<a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/releases"><img alt="Version" src="https://img.shields.io/badge/version-v1.11.1-111827?style=flat-square"></a>
|
|
13
13
|
<a href="./docs/support-matrix.md"><img alt="Matrix" src="https://img.shields.io/badge/matrix-expo55--rnoh082--ui--stack-2563eb?style=flat-square"></a>
|
|
14
14
|
<img alt="Input" src="https://img.shields.io/badge/input-Managed%2FCNG%20%2B%20bare%20intake-059669?style=flat-square">
|
|
15
15
|
</p>
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
</div>
|
|
25
25
|
|
|
26
26
|
> [!IMPORTANT]
|
|
27
|
-
> `v1.
|
|
27
|
+
> `v1.11.1` is the first public `v1.11.x` release. It closes the diagnosable managed sidecar drift behavior: non-build-required drift preserves user edits and points to `sync-template --force` / `init --force`, while build-required autolinking and RNOH shim drift can be refreshed by the bundle/build gate. `v1.11.0` remains an unpublished burn-down ledger checkpoint; the public promise stays tight: `latest` only carries fully accepted `verified` capabilities, and v1.11.1 is not a verified expansion.
|
|
28
28
|
|
|
29
29
|
> [!TIP]
|
|
30
30
|
> The two validated `@react-native-oh-tpl/*` adapters in the public matrix are currently consumed via exact Git URLs and commits. For repository development and the official UI-stack sample, prefer `pnpm install --ignore-scripts` so adapter prepare hooks do not fail on private upstream resources.
|
|
@@ -48,14 +48,14 @@
|
|
|
48
48
|
<!-- GENERATED:readme-current-status:start -->
|
|
49
49
|
| Item | Status |
|
|
50
50
|
| --- | --- |
|
|
51
|
-
| Current version | `v1.
|
|
51
|
+
| Current version | `v1.11.1` |
|
|
52
52
|
| Support model | `verified + preview + experimental` |
|
|
53
53
|
| Public `verified` matrix | `expo55-rnoh082-ui-stack` |
|
|
54
|
-
| Supported input | Managed/CNG Expo projects; bare
|
|
54
|
+
| Supported input | Managed/CNG Expo projects; bare and catalog-out intake classification |
|
|
55
55
|
| `verified` JS/UI capabilities | `expo-router`, `expo-linking`, `expo-constants`, `react-native-reanimated`, `react-native-svg` |
|
|
56
56
|
| `preview` native capabilities | `expo-file-system`, `expo-image-picker`, `expo-location`, `expo-camera`, `expo-secure-store`, `expo-asset`, `expo-device`, `expo-clipboard`, `expo-haptics` |
|
|
57
57
|
| `experimental` capabilities | `expo-notifications`, `react-native-gesture-handler`, `@react-native-async-storage/async-storage`, `react-native-screens`, `react-native-safe-area-context`, `react-native-webview`, `jpush-react-native`, `expo-media-library`, `lottie-react-native`, `@shopify/react-native-skia` |
|
|
58
|
-
| Release tracks | `latest` =
|
|
58
|
+
| Release tracks | `latest` = verified commitments plus stable toolkit patches; `next` = preview fast track |
|
|
59
59
|
| Capability telemetry | `runtimeMode` + `evidence(...)` + `evidenceSource(...)` + `coverageProfile` + `nextActions` |
|
|
60
60
|
| Build path | `doctor -> init -> bundle -> build-hap` |
|
|
61
61
|
| Primary sample | `examples/official-ui-stack-sample` |
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<p>
|
|
10
10
|
<a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/actions/workflows/ci.yml"><img alt="Checks" src="https://img.shields.io/badge/checks-passing-16a34a?style=flat-square&logo=githubactions&logoColor=white"></a>
|
|
11
11
|
<a href="./LICENSE"><img alt="License" src="https://img.shields.io/badge/license-MIT-0f766e?style=flat-square"></a>
|
|
12
|
-
<a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/releases"><img alt="Version" src="https://img.shields.io/badge/version-v1.
|
|
12
|
+
<a href="https://github.com/BlackishGreen33/Expo-Harmony-Toolkit/releases"><img alt="Version" src="https://img.shields.io/badge/version-v1.11.1-111827?style=flat-square"></a>
|
|
13
13
|
<a href="./docs/support-matrix.md"><img alt="Matrix" src="https://img.shields.io/badge/matrix-expo55--rnoh082--ui--stack-2563eb?style=flat-square"></a>
|
|
14
14
|
<img alt="Input" src="https://img.shields.io/badge/input-Managed%2FCNG%20%2B%20bare%20intake-059669?style=flat-square">
|
|
15
15
|
</p>
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
</div>
|
|
25
25
|
|
|
26
26
|
> [!IMPORTANT]
|
|
27
|
-
> `v1.
|
|
27
|
+
> `v1.11.1` 是第一个公开发布的 `v1.11.x`,收口 managed sidecar drift 的可诊断行为:非 build-required drift 会保留用户改动并提示 `sync-template --force` / `init --force`,build-required autolinking 与 RNOH shim drift 可由 bundle/build gate 自动刷新。`v1.11.0` 只作为未发布的 burn-down ledger checkpoint;当前公开承诺仍然收紧为:`latest` 只承诺完整验收的 `verified` 能力,v1.11.1 不是 verified 扩容。
|
|
28
28
|
|
|
29
29
|
> [!TIP]
|
|
30
30
|
> 由于当前公开矩阵内的两套 `@react-native-oh-tpl/*` adapter 依赖以 Git URL + exact commit 形式接入,仓库开发和官方 UI-stack sample 推荐使用 `pnpm install --ignore-scripts`,避免 Git adapter 在 prepare 阶段拉取私有资源而中断安装。
|
|
@@ -48,14 +48,14 @@
|
|
|
48
48
|
<!-- GENERATED:readme-current-status:start -->
|
|
49
49
|
| 项目 | 说明 |
|
|
50
50
|
| --- | --- |
|
|
51
|
-
| 当前版本 | `v1.
|
|
51
|
+
| 当前版本 | `v1.11.1` |
|
|
52
52
|
| 支持模型 | `verified + preview + experimental` |
|
|
53
53
|
| 唯一 `verified` 公开矩阵 | `expo55-rnoh082-ui-stack` |
|
|
54
|
-
| 输入范围 | Managed/CNG Expo 项目;bare
|
|
54
|
+
| 输入范围 | Managed/CNG Expo 项目;bare 与 catalog 外项目 intake 分类 |
|
|
55
55
|
| `verified` JS/UI 能力 | `expo-router`、`expo-linking`、`expo-constants`、`react-native-reanimated`、`react-native-svg` |
|
|
56
56
|
| `preview` 原生能力 | `expo-file-system`、`expo-image-picker`、`expo-location`、`expo-camera`、`expo-secure-store`、`expo-asset`、`expo-device`、`expo-clipboard`、`expo-haptics` |
|
|
57
57
|
| `experimental` 能力 | `expo-notifications`、`react-native-gesture-handler`、`@react-native-async-storage/async-storage`、`react-native-screens`、`react-native-safe-area-context`、`react-native-webview`、`jpush-react-native`、`expo-media-library`、`lottie-react-native`、`@shopify/react-native-skia` |
|
|
58
|
-
| 发布轨 | `latest` =
|
|
58
|
+
| 发布轨 | `latest` = 已验收 verified 承诺 + 不放宽承诺的稳定工具链 patch;`next` = preview fast track |
|
|
59
59
|
| capability 遥测 | `runtimeMode` + `evidence(...)` + `evidenceSource(...)` + `coverageProfile` + `nextActions` |
|
|
60
60
|
| 构建链 | `doctor -> init -> bundle -> build-hap` |
|
|
61
61
|
| 主 sample | `examples/official-ui-stack-sample` |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare const TOOLKIT_PACKAGE_NAME = "expo-harmony-toolkit";
|
|
2
2
|
export declare const CLI_NAME = "expo-harmony";
|
|
3
|
-
export declare const TOOLKIT_VERSION = "1.
|
|
3
|
+
export declare const TOOLKIT_VERSION = "1.11.1";
|
|
4
4
|
export declare const TEMPLATE_VERSION = "rnoh-0.82.29";
|
|
5
5
|
export declare const RNOH_VERSION = "0.82.29";
|
|
6
6
|
export declare const RNOH_CLI_VERSION = "0.82.29";
|
package/build/core/constants.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DESIRED_PACKAGE_SCRIPTS = exports.HARMONY_RUNTIME_PRELUDE_RELATIVE_PATH = exports.HARMONY_ROUTER_ENTRY_FILENAME = exports.STRICT_ENV_EXIT_CODE = exports.STRICT_DOCTOR_EXIT_CODE = exports.DEFAULT_HVIGOR_PLUGIN_FILENAME = exports.PREBUILD_METADATA_FILENAME = exports.TOOLKIT_CONFIG_FILENAME = exports.BUILD_REPORT_FILENAME = exports.ENV_REPORT_FILENAME = exports.DOCTOR_REPORT_FILENAME = exports.MANIFEST_FILENAME = exports.SIGNING_LOCAL_EXAMPLE_FILENAME = exports.SIGNING_LOCAL_FILENAME = exports.GENERATED_SHIMS_DIR = exports.GENERATED_DIR = exports.SUPPORTED_EXPO_SDKS = exports.RNOH_CLI_VERSION = exports.RNOH_VERSION = exports.TEMPLATE_VERSION = exports.TOOLKIT_VERSION = exports.CLI_NAME = exports.TOOLKIT_PACKAGE_NAME = void 0;
|
|
4
4
|
exports.TOOLKIT_PACKAGE_NAME = 'expo-harmony-toolkit';
|
|
5
5
|
exports.CLI_NAME = 'expo-harmony';
|
|
6
|
-
exports.TOOLKIT_VERSION = '1.
|
|
6
|
+
exports.TOOLKIT_VERSION = '1.11.1';
|
|
7
7
|
exports.TEMPLATE_VERSION = 'rnoh-0.82.29';
|
|
8
8
|
exports.RNOH_VERSION = '0.82.29';
|
|
9
9
|
exports.RNOH_CLI_VERSION = '0.82.29';
|
package/build/core/report.js
CHANGED
|
@@ -499,51 +499,44 @@ function buildNextActions(input) {
|
|
|
499
499
|
'config.scheme.missing',
|
|
500
500
|
'config.bundle_script.mismatch',
|
|
501
501
|
].includes(issue.code));
|
|
502
|
+
const hasThirdPartyWaveA = dependencies.some((dependency) => THIRD_PARTY_WAVE_A_PACKAGE_NAMES.has(dependency.name));
|
|
503
|
+
const hasThirdPartyWaveB = dependencies.some((dependency) => THIRD_PARTY_WAVE_B_PACKAGE_NAMES.has(dependency.name));
|
|
502
504
|
if (hasBlockingIssueCode(blockingIssues, 'matrix.expo_sdk.unsupported') ||
|
|
503
505
|
hasBlockingIssueCode(blockingIssues, 'dependency.version_mismatch') ||
|
|
504
506
|
hasBlockingIssueCode(blockingIssues, 'dependency.specifier_mismatch') ||
|
|
505
507
|
hasBlockingIssueCode(blockingIssues, 'dependency.required_missing')) {
|
|
506
508
|
actions.push(`Align Expo SDK, React Native, RNOH, and validated adapter versions to ${validatedMatrices_1.DEFAULT_VALIDATED_MATRIX_ID}, then rerun \`expo-harmony doctor --project-root . --strict\`.`);
|
|
507
509
|
}
|
|
510
|
+
if (coverageProfile === 'bare') {
|
|
511
|
+
actions.push('Keep this project on the bare workflow track for now: preserve the native directories, use `expo-harmony doctor --project-root .` for classification, and only claim verified support after bare workflow support lands in the mainline capability catalog.');
|
|
512
|
+
}
|
|
513
|
+
if (hasRouterBlockingIssues) {
|
|
514
|
+
actions.push('Add the missing expo-router peers/plugin/scheme or update the Harmony bundle script to use `expo-harmony bundle`, then rerun doctor before trusting router builds.');
|
|
515
|
+
}
|
|
516
|
+
if (hasBlockingIssueCode(blockingIssues, 'config.native_identifier.missing')) {
|
|
517
|
+
actions.push('Set `android.package` or `ios.bundleIdentifier` in Expo config before expecting a strict Harmony build path.');
|
|
518
|
+
}
|
|
508
519
|
if (targetTier === 'verified' && hasPreviewCapabilities) {
|
|
509
520
|
actions.push('Use `expo-harmony doctor --project-root . --target-tier preview` to measure the current preview-capability baseline while keeping `latest` pinned to verified-only releases.');
|
|
510
521
|
}
|
|
511
522
|
if (hasPreviewCapabilities) {
|
|
512
523
|
actions.push('Keep combined sample smoke for regression coverage, but track bundle/debug/device/release evidence separately for each preview capability before promotion.');
|
|
513
524
|
}
|
|
514
|
-
switch (coverageProfile) {
|
|
515
|
-
case 'managed-core':
|
|
516
|
-
actions.push('Stay on the verified lane: rerun `expo-harmony sync-template --project-root .`, `expo-harmony bundle --project-root .`, and `expo-harmony build-hap --project-root . --mode debug` before claiming release readiness.');
|
|
517
|
-
break;
|
|
518
|
-
case 'managed-native-heavy':
|
|
519
|
-
actions.push('After every native-capability change, rerun `expo-harmony sync-template --project-root .`, `expo-harmony bundle --project-root .`, and `expo-harmony build-hap --project-root . --mode debug` to keep the managed sidecar and preview evidence aligned.');
|
|
520
|
-
break;
|
|
521
|
-
case 'bare':
|
|
522
|
-
actions.push('Keep this project on the bare workflow track for now: preserve the native directories, use `expo-harmony doctor --project-root .` for classification, and only claim verified support after bare workflow support lands in the mainline capability catalog.');
|
|
523
|
-
break;
|
|
524
|
-
case 'third-party-native-heavy':
|
|
525
|
-
if (dependencies.some((dependency) => THIRD_PARTY_WAVE_A_PACKAGE_NAMES.has(dependency.name))) {
|
|
526
|
-
actions.push('Keep Third-party Native Wave A on `doctor --target-tier experimental`: pair async-storage and screens with their Harmony adapters, keep safe-area on the toolkit shim, and close device/release evidence before any promotion.');
|
|
527
|
-
}
|
|
528
|
-
if (dependencies.some((dependency) => THIRD_PARTY_WAVE_B_PACKAGE_NAMES.has(dependency.name))) {
|
|
529
|
-
actions.push('Keep Third-party Native Wave B on `doctor --target-tier experimental`: pair ccnubox WebView, media-library, Lottie, and Skia surfaces with their Harmony adapters, keep JPush runtime evidence separate, and require debug/release simulator delivery gates before shipping.');
|
|
530
|
-
}
|
|
531
|
-
if (!dependencies.some((dependency) => THIRD_PARTY_WAVE_A_PACKAGE_NAMES.has(dependency.name)) &&
|
|
532
|
-
!dependencies.some((dependency) => THIRD_PARTY_WAVE_B_PACKAGE_NAMES.has(dependency.name))) {
|
|
533
|
-
actions.push('Isolate third-party native packages and onboard them through the mainline capability catalog one by one; start with `react-native-gesture-handler` if it is present, and treat unknown native surfaces as explicit unblockers rather than matrix drift.');
|
|
534
|
-
}
|
|
535
|
-
break;
|
|
536
|
-
}
|
|
537
|
-
if (hasRouterBlockingIssues) {
|
|
538
|
-
actions.push('Add the missing expo-router peers/plugin/scheme or update the Harmony bundle script to use `expo-harmony bundle`, then rerun doctor before trusting router builds.');
|
|
539
|
-
}
|
|
540
525
|
if (blockingIssues.some((issue) => issue.code === 'dependency.not_allowed' &&
|
|
541
526
|
(issue.subject === 'react-native-gesture-handler' ||
|
|
542
527
|
issue.subject === '@react-native-oh-tpl/react-native-gesture-handler'))) {
|
|
543
528
|
actions.push('Keep `react-native-gesture-handler` on the formal experimental slice until its Harmony adapter path closes device and release evidence.');
|
|
544
529
|
}
|
|
545
|
-
if (
|
|
546
|
-
|
|
530
|
+
if (coverageProfile === 'third-party-native-heavy') {
|
|
531
|
+
if (hasThirdPartyWaveA) {
|
|
532
|
+
actions.push('Keep Third-party Native Wave A on `doctor --target-tier experimental`: pair async-storage and screens with their Harmony adapters, keep safe-area on the toolkit shim, and close device/release evidence before any promotion.');
|
|
533
|
+
}
|
|
534
|
+
if (hasThirdPartyWaveB) {
|
|
535
|
+
actions.push('Keep Third-party Native Wave B on `doctor --target-tier experimental`: pair ccnubox WebView, media-library, Lottie, and Skia surfaces with their Harmony adapters, keep JPush runtime evidence separate, and require debug/release simulator delivery gates before shipping.');
|
|
536
|
+
}
|
|
537
|
+
if (!hasThirdPartyWaveA && !hasThirdPartyWaveB) {
|
|
538
|
+
actions.push('Isolate third-party native packages and onboard them through the mainline capability catalog one by one; start with `react-native-gesture-handler` if it is present, and treat unknown native surfaces as explicit unblockers rather than matrix drift.');
|
|
539
|
+
}
|
|
547
540
|
}
|
|
548
541
|
if (dependencies.some((dependency) => dependency.buildabilityRisk === 'native-risk')) {
|
|
549
542
|
actions.push('Inspect unknown native-looking dependencies and either replace them, gate them behind preview work, or onboard them explicitly before promising Harmony portability.');
|
|
@@ -551,6 +544,12 @@ function buildNextActions(input) {
|
|
|
551
544
|
if (dependencies.some((dependency) => dependency.buildabilityRisk === 'js-only-unknown')) {
|
|
552
545
|
actions.push('Unknown JavaScript-only packages still sit outside the public matrix; verify bundling manually, but prioritize native gaps first.');
|
|
553
546
|
}
|
|
547
|
+
if (coverageProfile === 'managed-core') {
|
|
548
|
+
actions.push('Stay on the verified lane: rerun `expo-harmony sync-template --project-root .`, `expo-harmony bundle --project-root .`, and `expo-harmony build-hap --project-root . --mode debug` before claiming release readiness.');
|
|
549
|
+
}
|
|
550
|
+
if (coverageProfile === 'managed-native-heavy') {
|
|
551
|
+
actions.push('After every native-capability change, rerun `expo-harmony sync-template --project-root .`, `expo-harmony bundle --project-root .`, and `expo-harmony build-hap --project-root . --mode debug` to keep the managed sidecar and preview evidence aligned.');
|
|
552
|
+
}
|
|
554
553
|
return dedupeStrings(actions);
|
|
555
554
|
}
|
|
556
555
|
function hasBlockingIssueCode(issues, code) {
|
package/build/core/template.js
CHANGED
|
@@ -58,6 +58,7 @@ const TEMPLATE_FILE_PATHS = [
|
|
|
58
58
|
'entry/src/main/resources/rawfile/.gitkeep',
|
|
59
59
|
];
|
|
60
60
|
const RNOH_GENERATED_TS_SHIM_RELATIVE_PATH = path_1.default.join('harmony', 'oh_modules', '@rnoh', 'react-native-openharmony', 'ts.ts');
|
|
61
|
+
const SIDECAR_DRIFT_REQUIRES_FORCE_WARNING_CODE = 'sidecar.drift.requires-force';
|
|
61
62
|
exports.BUILD_REQUIRED_MANAGED_FILE_PATHS = [
|
|
62
63
|
...autolinking_1.AUTOLINKED_FILE_PATHS,
|
|
63
64
|
RNOH_GENERATED_TS_SHIM_RELATIVE_PATH,
|
|
@@ -109,7 +110,7 @@ async function syncProjectTemplate(projectRoot, force = false, options = {}) {
|
|
|
109
110
|
const shouldForce = force || forceManagedPaths.has(file.relativePath);
|
|
110
111
|
if (!shouldForce && !managedByToolkit) {
|
|
111
112
|
result.skippedFiles.push(file.relativePath);
|
|
112
|
-
result.warnings.push(
|
|
113
|
+
result.warnings.push(renderSidecarDriftRequiresForceWarning(file.relativePath));
|
|
113
114
|
continue;
|
|
114
115
|
}
|
|
115
116
|
}
|
|
@@ -133,6 +134,9 @@ async function syncProjectTemplate(projectRoot, force = false, options = {}) {
|
|
|
133
134
|
await fs_extra_1.default.writeJson(result.manifestPath, manifest, { spaces: 2 });
|
|
134
135
|
return result;
|
|
135
136
|
}
|
|
137
|
+
function renderSidecarDriftRequiresForceWarning(relativePath) {
|
|
138
|
+
return `[${SIDECAR_DRIFT_REQUIRES_FORCE_WARNING_CODE}] Skipped managed sidecar file ${relativePath} because it drifted from the last generated version. Re-run expo-harmony sync-template --force or expo-harmony init --force to overwrite it.`;
|
|
139
|
+
}
|
|
136
140
|
async function buildManagedFiles(loadedProject, identifiers, previousToolkitConfig, doctorReport) {
|
|
137
141
|
const hasExpoRouter = (0, support_1.usesExpoRouter)(loadedProject.packageJson);
|
|
138
142
|
const doctorConfig = (0, project_1.resolveExpoHarmonyDoctorConfig)(loadedProject.expoConfig);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PUBLIC_RELEASE_TRACKS: {
|
|
2
|
-
readonly latest: "
|
|
2
|
+
readonly latest: "verified commitments plus stable toolkit patches";
|
|
3
3
|
readonly next: "preview fast track";
|
|
4
4
|
};
|
|
5
5
|
export declare const PRIMARY_SAMPLE_PATH = "examples/official-ui-stack-sample";
|
|
@@ -8,4 +8,4 @@ export declare const SUPPORTING_SAMPLE_PATHS: readonly ["examples/official-app-s
|
|
|
8
8
|
export declare const VERIFIED_JS_UI_CAPABILITY_NAMES: readonly ["expo-router", "expo-linking", "expo-constants", ...("react-native-reanimated" | "react-native-svg")[]];
|
|
9
9
|
export declare const PREVIEW_CAPABILITY_DEFINITIONS: import("..").CapabilityDefinition[];
|
|
10
10
|
export declare const EXPERIMENTAL_CAPABILITY_NAMES: readonly string[];
|
|
11
|
-
export declare const PUBLIC_CURRENT_VERSION = "1.
|
|
11
|
+
export declare const PUBLIC_CURRENT_VERSION = "1.11.1";
|
package/build/data/publicDocs.js
CHANGED
|
@@ -5,7 +5,7 @@ const constants_1 = require("../core/constants");
|
|
|
5
5
|
const capabilities_1 = require("./capabilities");
|
|
6
6
|
const uiStack_1 = require("./uiStack");
|
|
7
7
|
exports.PUBLIC_RELEASE_TRACKS = {
|
|
8
|
-
latest: '
|
|
8
|
+
latest: 'verified commitments plus stable toolkit patches',
|
|
9
9
|
next: 'preview fast track',
|
|
10
10
|
};
|
|
11
11
|
exports.PRIMARY_SAMPLE_PATH = 'examples/official-ui-stack-sample';
|
package/build/docs/render.js
CHANGED
|
@@ -32,11 +32,11 @@ function renderReadmeCurrentStatus(locale) {
|
|
|
32
32
|
const previewSampleLabel = locale === 'zh' ? 'preview sample' : 'Preview sample';
|
|
33
33
|
const supportingSamplesLabel = locale === 'zh' ? '辅助 onboarding samples' : 'Supporting onboarding samples';
|
|
34
34
|
const releaseTracksValue = locale === 'zh'
|
|
35
|
-
? `\`latest\` =
|
|
36
|
-
: `\`latest\` =
|
|
35
|
+
? `\`latest\` = 已验收 verified 承诺 + 不放宽承诺的稳定工具链 patch;\`next\` = ${publicDocs_1.PUBLIC_RELEASE_TRACKS.next}`
|
|
36
|
+
: `\`latest\` = ${publicDocs_1.PUBLIC_RELEASE_TRACKS.latest}; \`next\` = ${publicDocs_1.PUBLIC_RELEASE_TRACKS.next}`;
|
|
37
37
|
const inputValue = locale === 'zh'
|
|
38
|
-
? 'Managed/CNG Expo 项目;bare
|
|
39
|
-
: 'Managed/CNG Expo projects; bare
|
|
38
|
+
? 'Managed/CNG Expo 项目;bare 与 catalog 外项目 intake 分类'
|
|
39
|
+
: 'Managed/CNG Expo projects; bare and catalog-out intake classification';
|
|
40
40
|
const listJoiner = locale === 'zh' ? '、' : ', ';
|
|
41
41
|
return [
|
|
42
42
|
`| ${headers[0]} | ${headers[1]} |`,
|
|
@@ -241,8 +241,8 @@ function renderSupportMatrixReleaseTracks(locale) {
|
|
|
241
241
|
return locale === 'zh'
|
|
242
242
|
? [
|
|
243
243
|
'- `latest`',
|
|
244
|
-
' -
|
|
245
|
-
' - 只允许 verified sample / gate 作为发布依据',
|
|
244
|
+
' - 承接完整验收的 `verified` 能力与不放宽承诺的稳定工具链 patch',
|
|
245
|
+
' - 只允许 verified sample / gate、稳定工具链 gate 与明确 acceptance 作为发布依据',
|
|
246
246
|
'- `next`',
|
|
247
247
|
' - 承接 preview fast track',
|
|
248
248
|
' - 必须至少通过 preview sample、bundle、debug build gate',
|
|
@@ -250,8 +250,8 @@ function renderSupportMatrixReleaseTracks(locale) {
|
|
|
250
250
|
].join('\n')
|
|
251
251
|
: [
|
|
252
252
|
'- `latest`',
|
|
253
|
-
' -
|
|
254
|
-
' - only verified samples
|
|
253
|
+
' - carries fully accepted `verified` capabilities plus stable toolkit patches that do not widen the public promise',
|
|
254
|
+
' - only verified samples/gates, stable toolkit gates, and explicit acceptance records may justify a release',
|
|
255
255
|
'- `next`',
|
|
256
256
|
' - carries preview fast-track work',
|
|
257
257
|
' - must at least pass the preview sample, bundle, and debug-build gates',
|
package/docs/cli-build.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CLI 构建指南
|
|
2
2
|
|
|
3
|
-
`v1.
|
|
3
|
+
`v1.11.1` 延续 `verified + preview + experimental` 支持分层,并把 `v1.11.0` 的 sidecar drift 台账收口成第一个公开 `v1.11.x` 工具链 patch:`doctor` 继续分类任意 Expo 项目、标出 blocker 类型并给出有序下一步;`expo55-rnoh082-ui-stack` 仍是唯一 verified 矩阵。
|
|
4
4
|
|
|
5
5
|
CLI 命令集合不变:
|
|
6
6
|
|
package/docs/npm-release.md
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
`expo-harmony-toolkit` 继续公开发布到 npm,但从现在开始明确区分两条发布轨:
|
|
4
4
|
|
|
5
5
|
- `latest`
|
|
6
|
-
-
|
|
7
|
-
-
|
|
6
|
+
- 发布完整验收的 `verified` 能力,或不放宽公开承诺的稳定工具链 patch
|
|
7
|
+
- 面向正式公开承诺与稳定工具链修复
|
|
8
8
|
- `next`
|
|
9
9
|
- 承接 preview fast track
|
|
10
10
|
- 面向更快的集成反馈,不等于 verified 或 release-ready
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
|
|
22
22
|
推荐理解:
|
|
23
23
|
|
|
24
|
-
- `latest`
|
|
24
|
+
- `latest` 解决“可以公开承诺什么”,也承接不扩大承诺边界的稳定工具链 patch
|
|
25
25
|
- `next` 解决“怎样更快收敛 preview 能力”
|
|
26
26
|
|
|
27
27
|
## 发布前检查
|
|
@@ -60,6 +60,7 @@ pnpm release:check
|
|
|
60
60
|
|
|
61
61
|
- hosted CI 默认仍可通过 `EXPO_HARMONY_RELEASE_SKIP_HAP=1` 跳过真实 DevEco HAP 构建
|
|
62
62
|
- debug / release HAP gate 继续由 capability acceptance、带工具链环境的 CI 或本地验收补齐
|
|
63
|
+
- `v1.11.0` 是未发布的 burn-down ledger checkpoint;`v1.11.1` 是第一个公开 `v1.11.x`,发布到 `latest` 只代表 sidecar drift 工具链行为收口,不代表 verified/capability 边界放宽
|
|
63
64
|
- `v1.8.2` 已补一条 ccnubox release HAP 的本地签名、模拟器安装与启动记录;该记录不替代真机 device acceptance,也不把 preview capability 标为 release-ready
|
|
64
65
|
- `v1.8.3` 只刷新 RNOH runtime / CLI 到 `0.82.29`,仍不宣称 RN `0.83.x` 已进入公开 Harmony 矩阵
|
|
65
66
|
- preview capability 若在报告里显示 `device=yes`,必须同时以 `evidenceSource.device=manual-doc` 对外说明其来源,不得表述成 CI 自动设备验证
|
|
@@ -135,7 +136,7 @@ pnpm add --ignore-scripts <tarball>
|
|
|
135
136
|
|
|
136
137
|
## 发布边界
|
|
137
138
|
|
|
138
|
-
- `latest` 不承接 preview capability
|
|
139
|
+
- `latest` 不承接 preview capability 的公开承诺,但可以发布不扩大 verified 边界的稳定工具链 patch
|
|
139
140
|
- `next` 可以承接 preview fast track,但不得替代 capability promotion gate
|
|
140
141
|
- 任何声称 verified 的能力都必须具备:
|
|
141
142
|
- `bundle`
|
package/docs/roadmap.md
CHANGED
|
@@ -204,7 +204,7 @@
|
|
|
204
204
|
|
|
205
205
|
目标日期:`2026-10-31`
|
|
206
206
|
|
|
207
|
-
状态:implementation baseline complete;simulator delivery gate
|
|
207
|
+
状态:implementation baseline complete;simulator delivery gate complete on ccnubox_rn;device / release evidence carryover。
|
|
208
208
|
|
|
209
209
|
目标:扩大第三方 native 覆盖,并把 `v1.9.0` 建好的最小 regression farm 扩容成持续回归面。
|
|
210
210
|
|
|
@@ -229,6 +229,8 @@
|
|
|
229
229
|
|
|
230
230
|
目标日期:`2026-11-15`
|
|
231
231
|
|
|
232
|
+
状态:released / complete;`1.10.0` / `v1.10.0` 已发布到 `latest`。
|
|
233
|
+
|
|
232
234
|
目标:先冻结“任何 Expo 项目”入口面的产品故事,确保不存在无法分类、无法给下一步、无法明确阻断原因的项目。
|
|
233
235
|
|
|
234
236
|
- `doctor` 对任意 Expo 项目必须满足:
|
|
@@ -238,10 +240,20 @@
|
|
|
238
240
|
- roadmap / support matrix / acceptance board 与实际 catalog 保持零漂移
|
|
239
241
|
- 对外叙事从“更多项目开始进入主线”升级成“任何项目都有明确处理路径”
|
|
240
242
|
|
|
241
|
-
|
|
243
|
+
Acceptance checklist:
|
|
244
|
+
|
|
245
|
+
- 新增 `fixtures/v110-*` 覆盖 catalog managed、bare、unknown JS-only、unknown native-looking、mixed intake
|
|
246
|
+
- `nextActions[]` 固定按版本矩阵问题 -> 项目形态问题 -> native blocker -> unknown JS/native 依赖 -> build gate 排序
|
|
247
|
+
- `acceptance/v1.10.0-acceptance.md` 记录 repo-only gate 与边界
|
|
248
|
+
- 不提升任何 capability 到 `verified`
|
|
249
|
+
- 不要求真机 device evidence
|
|
250
|
+
|
|
251
|
+
### v1.11.x Final Blocker Burn-down
|
|
242
252
|
|
|
243
253
|
目标日期:`2026-11-30`
|
|
244
254
|
|
|
255
|
+
状态:`v1.11.0` 是未发布的 burn-down ledger checkpoint;`v1.11.1` 是第一个公开 `v1.11.x`,发布到 `latest`,只收口 sidecar drift 工具链行为,不提升任何 capability 到 `verified`。
|
|
256
|
+
|
|
245
257
|
目标:把还会阻止“任何 Expo 项目可靠打包”的剩余高频 blocker 清到只剩极少数明确已知例外。
|
|
246
258
|
|
|
247
259
|
- 逐项清掉剩余高频 blocker:
|
|
@@ -252,6 +264,28 @@
|
|
|
252
264
|
- 对仍无法在 `v2.0.0` 前关闭的项,必须提前明确降级策略与替代路径
|
|
253
265
|
- `v2.0.0` 不接受“先宣布完成,再慢慢补长尾”
|
|
254
266
|
|
|
267
|
+
Burn-down ledger:
|
|
268
|
+
|
|
269
|
+
- `release-evidence`:preview adapter capability 必须逐项补 per-capability release HAP runtime evidence;combined sample smoke 不能替代单项 release 验收
|
|
270
|
+
- `bare-release-gap`:bare workflow 继续保留 intake / debug baseline,只有 release HAP 与 runtime evidence 补齐后才允许宣称 release-ready
|
|
271
|
+
- `third-party-native`:Wave A / Wave B 继续停留在 `experimental`,先关闭 device / release evidence 或写明降级策略
|
|
272
|
+
- `sidecar-drift`:所有 catalog-covered managed 项目都必须能重复执行 `sync-template -> bundle -> build-hap --mode debug`,drift 必须被明确报出或被可验证修复
|
|
273
|
+
|
|
274
|
+
Sidecar drift audit:
|
|
275
|
+
|
|
276
|
+
- `detected`:非 build-required managed sidecar drift 必须输出稳定 warning code:`sidecar.drift.requires-force`
|
|
277
|
+
- `auto-refreshed build-required files`:bundle/build gate 必需的 autolinking 与 RNOH shim drift 可以自动刷新,不能误报 unresolved drift
|
|
278
|
+
- `requires --force`:其他 managed sidecar drift 默认保留用户改动,并提示 `expo-harmony sync-template --force` 或 `expo-harmony init --force`
|
|
279
|
+
- `accepted exception`:无法在 v1.11.x 关闭的真实项目 drift 必须写入 acceptance,不得扩写成 build/device/runtime pass
|
|
280
|
+
|
|
281
|
+
Acceptance checklist:
|
|
282
|
+
|
|
283
|
+
- 新增 `acceptance/v1.11.0-burn-down-ledger.md` 记录 v1.11.x 起始台账
|
|
284
|
+
- 新增 `acceptance/v1.11.1-acceptance.md` 记录第一个公开 v1.11.x release、`v1.11.0` 不发布决策与 sidecar drift 收口结果
|
|
285
|
+
- 明确本阶段不改变 `latest` / `verified` 边界
|
|
286
|
+
- 不把 debug/release HAP build pass 表述为真机 device 或 runtime pass
|
|
287
|
+
- 对每个无法在 v1.11.x 关闭的 blocker 写出降级或替代路径
|
|
288
|
+
|
|
255
289
|
### v2.0.0 Catalog-covered Expo Project Reliable Packaging
|
|
256
290
|
|
|
257
291
|
原 `Any Expo Project Reliable Packaging` 叙事保留为 intake 目标,但可靠打包承诺明确收敛到 catalog-covered 项目。
|
package/docs/support-matrix.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# v1.
|
|
1
|
+
# v1.11 支持矩阵
|
|
2
2
|
|
|
3
|
-
`v1.
|
|
3
|
+
`v1.11` 继续采用 tiered support model,并把“层级”“晋升距离”与“intake 分类”拆开表达:
|
|
4
4
|
|
|
5
5
|
- `supportTier` 表示公开承诺层级
|
|
6
6
|
- `runtimeMode` 表示当前运行时接入形态:`shim`、`adapter`、`verified`
|
|
@@ -14,7 +14,9 @@
|
|
|
14
14
|
- bare workflow 与第三方 native package 不再被描述成“收官后才考虑的另一条 extension 终局”
|
|
15
15
|
- `v2.0.0` 本身被定义成“任何 Expo 项目都能可靠打包成鸿蒙 App”的目标版本
|
|
16
16
|
- 但当前公开承诺依旧没有放宽;它们只是进入同一主线 backlog,而不是已经进入 `verified`
|
|
17
|
-
- `v1.
|
|
17
|
+
- `v1.10.0` 已冻结 Any-project Intake:任何 Expo 项目进入 `doctor` 后都应有分类、明确 blocker 类型与有序 `nextActions`
|
|
18
|
+
- `v1.11.1` 是第一个公开 `v1.11.x`,只收口 sidecar drift 的可诊断行为;`v1.11.0` 保留为未发布的 burn-down ledger checkpoint
|
|
19
|
+
- 这不是 verified 扩容;`latest` 仍只承诺完整验收的 `verified` 能力,catalog 外项目只承诺可诊断路径
|
|
18
20
|
|
|
19
21
|
`doctor --strict` 继续只代表 `verified`。
|
|
20
22
|
|
|
@@ -208,7 +210,7 @@ expo-harmony doctor --project-root /path/to/app --target-tier preview
|
|
|
208
210
|
- `runtimeMode !== verified`,表示即使已有部分证据,也仍不属于正式承诺
|
|
209
211
|
- `coverageProfile=bare`,表示当前项目已落入 bare workflow 主线规划,但不等于当前 matrix 已正式支持 bare
|
|
210
212
|
- `gapCategory=third-party-native-gap`,表示问题不应再被模糊描述成普通 matrix drift,而是主线 blocker
|
|
211
|
-
- `nextActions[]` 的顺序即 toolkit
|
|
213
|
+
- `nextActions[]` 的顺序即 toolkit 当前建议的处理顺序:版本矩阵问题 -> 项目形态问题 -> native blocker -> unknown JS/native 依赖 -> build gate
|
|
212
214
|
|
|
213
215
|
当前公开阻断 issue code 继续包括:
|
|
214
216
|
|
|
@@ -247,12 +249,12 @@ toolkit 受管的核心产物仍包括:
|
|
|
247
249
|
|
|
248
250
|
## Release Tracks
|
|
249
251
|
|
|
250
|
-
从 `v1.8` 开始,发布节奏按双轨设计;`v1.
|
|
252
|
+
从 `v1.8` 开始,发布节奏按双轨设计;`v1.11.1` 继续沿用同一规则:
|
|
251
253
|
|
|
252
254
|
<!-- GENERATED:support-matrix-release-tracks:start -->
|
|
253
255
|
- `latest`
|
|
254
|
-
-
|
|
255
|
-
- 只允许 verified sample / gate 作为发布依据
|
|
256
|
+
- 承接完整验收的 `verified` 能力与不放宽承诺的稳定工具链 patch
|
|
257
|
+
- 只允许 verified sample / gate、稳定工具链 gate 与明确 acceptance 作为发布依据
|
|
256
258
|
- `next`
|
|
257
259
|
- 承接 preview fast track
|
|
258
260
|
- 必须至少通过 preview sample、bundle、debug build gate
|