docs: add STEP-061 new-window execution handoff
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
This commit is contained in:
271
docs/40_任务/STEP-061_新窗口交接与端到端执行流程_v1.md
Normal file
271
docs/40_任务/STEP-061_新窗口交接与端到端执行流程_v1.md
Normal file
@@ -0,0 +1,271 @@
|
||||
# STEP-061 新窗口交接与端到端执行流程 v1
|
||||
|
||||
## 1. 文档目的
|
||||
|
||||
本文件用于在新的 ChatGPT 会话窗口中无缝继续 MapLibreParticleLab / 粒子系统开发。
|
||||
新窗口不得依赖旧聊天记录猜测状态;应先读取本文件,再读取仓库中的实际基线与最新 Step 记录。
|
||||
|
||||
本文件同时固定从“写 STEP-061 Codex 任务 MD”到“Codex 实现、源码审查、AAR、Win11 Maven、APK、Android 实机验收、Git 收尾”的完整协作流程。
|
||||
|
||||
## 2. 当前冻结基线
|
||||
|
||||
- Linux repo:`/mnt/sda1/MapLibreParticleLab`
|
||||
- branch:`particle/main`
|
||||
- 当前 Final HEAD / Remote HEAD:`3d34ec7628d6b429d223a9022f05a9192a0a8d4d`
|
||||
- STEP-060:`CLOSED / PASS`
|
||||
- STEP-060 最终文档:`docs/50_Step记录/STEP-060_RNTestHost与WeatherRuntime薄桥接_v3.md`
|
||||
- STEP-060F Android 最终验收:`docs/报告/STEP-060F_Android最终验收报告_v1.md`
|
||||
- 当前最后验证 AAR:`org.maplibre.gl:android-sdk-opengl:13.4.1-step060f`
|
||||
- 最后验证 AAR SHA256:`53dfcd43f3479ae43a3c0fd91c10ccbfec7cf1c84ae22ae3435c94393806da6d`
|
||||
|
||||
STEP-060 已实测:横屏、双 Metro reverse、WeatherRuntime attach、CoreOnly source/layer 真值链、WeatherColor opacity typed setter 均通过。
|
||||
无 Binary Field 时 `TIMELINE_NOT_READY` 仍是预期 fail-closed。
|
||||
## 3. 新窗口第一步必须读取
|
||||
|
||||
依次读取并以实际仓库内容为准:
|
||||
|
||||
1. `AGENTS.md`
|
||||
2. `PARTICLE_BASELINE.md`
|
||||
3. `docs/50_Step记录/STEP-060_RNTestHost与WeatherRuntime薄桥接_v3.md`
|
||||
4. `docs/报告/STEP-060F_Android最终验收报告_v1.md`
|
||||
5. `粒子开发记录.md`
|
||||
6. STEP-053 Host → MapLibre submission contract 相关任务/记录
|
||||
7. 当前与 Binary U/V / Canonical Field / Runtime Field Window 相关源码
|
||||
|
||||
若本文件中的 HEAD 已落后于远端,先以 `origin/particle/main` 的最新实际代码重新确认差异,不得用旧聊天内容覆盖新提交。
|
||||
|
||||
## 4. STEP-061 架构边界
|
||||
|
||||
STEP-061 才允许开始 Binary U/V Field Transport。
|
||||
正式数据获取、Weather Service、HTTP/provider、下载、重试、缓存、预取和业务调度属于最终宿主 React Native NavSea 的 JS/TS 层。
|
||||
MapLibre Native/C++ 不得引入 provider、network、vendor 或天气业务获取逻辑。
|
||||
|
||||
底层 field 采用 Windy-style 二维规则网格向量场:metadata + U/V payload。
|
||||
宿主通过稳定的 Host → MapLibre 接口提交已取得并规范化的数据;不得把大 field 作为 `number[]` JSON 数组或 base64 方案长期传输。
|
||||
C++ 负责接收、校验、fail-closed、ParticleFieldSnapshot、Timeline、Runtime Field Window、GPU simulation/rendering。
|
||||
WeatherColorLayer 与 RasterParticleLayer 继续分离,现有 CoreOnly 架构不得倒退。
|
||||
## 5. 固定 tmux / Codex 工作流
|
||||
|
||||
所有粒子系统 Codex 操作统一使用固定 session:`particle-codex`。
|
||||
不要为新任务创建第二个 tmux session;每个独立 Step 新建一个 window。
|
||||
|
||||
当前历史窗口:
|
||||
- `0: manual`
|
||||
- `1: step060f`
|
||||
|
||||
STEP-061 使用新 window,例如:`step061`。
|
||||
建议命令:
|
||||
|
||||
```bash
|
||||
tmux new-window -t particle-codex -n step061 -c /mnt/sda1/MapLibreParticleLab
|
||||
```
|
||||
|
||||
用户查看:
|
||||
|
||||
```bash
|
||||
ssh root@192.168.200.184
|
||||
tmux attach -t particle-codex
|
||||
```
|
||||
|
||||
只读查看:`tmux attach -r -t particle-codex`。
|
||||
ChatGPT/RDC 可用 `tmux capture-pane -pt particle-codex:step061` 读取执行状态。
|
||||
SSH 断开不影响 tmux 中的 Codex、编译或 shell 任务。
|
||||
## 6. Codex CLI 固定方式
|
||||
|
||||
当前可用 Codex:`codex-cli 0.153.4`。
|
||||
已验证启动方式:
|
||||
|
||||
```bash
|
||||
codex -C /mnt/sda1/MapLibreParticleLab \
|
||||
-m gpt-5.6-terra \
|
||||
-s workspace-write \
|
||||
-a never \
|
||||
--no-alt-screen \
|
||||
"完整阅读并执行 <STEP-061任务MD>;严格遵守任务范围。"
|
||||
```
|
||||
|
||||
默认使用 medium reasoning;需要改变模型/权限时必须先明确说明原因。
|
||||
`workspace-write` 可以改源码,但 Codex sandbox 已实测会把 `.git` 视为只读,无法可靠创建 `.git/index.lock` 或写 `FETCH_HEAD`。
|
||||
因此新固定流程是:
|
||||
|
||||
- Codex:实现源码、允许范围内的静态/精确验证、中文文档和完成报告;
|
||||
- Codex 不得伪称 commit/push;报告写 `GIT_CLOSEOUT_BY_RDC_AFTER_REVIEW`;
|
||||
- ChatGPT:读取真实 diff 并审查;
|
||||
- 审查通过后,由 ChatGPT 通过 RDC 执行精准 `git add`、commit、push;
|
||||
- 不得把历史 untracked 文件顺手加入提交。
|
||||
|
||||
除非用户明确要求,不写/跑 Jest。Android APK 编译仍由用户手工执行;AAR 编译可按本文件授权由 ChatGPT/RDC 在 tmux 中执行。
|
||||
## 7. AAR 构建固定流程
|
||||
|
||||
只有 Codex 源码完成、ChatGPT 审查通过、source commit 已 push 后,才进入 AAR。
|
||||
AAR 在 STEP 对应的同一个 tmux window 中执行,不新建第二个编译 window。
|
||||
|
||||
**JOBS 必须固定为 1。**
|
||||
|
||||
```bash
|
||||
cd /mnt/sda1/MapLibreParticleLab/platform/android
|
||||
JOBS=1 RENDERER=opengl BUILDTYPE=Release make apackage
|
||||
```
|
||||
|
||||
必须确认输出含 `--max-workers=1`,并最终 `BUILD SUCCESSFUL`。
|
||||
随后在同一 window:
|
||||
|
||||
```bash
|
||||
./gradlew :MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal --console=plain
|
||||
```
|
||||
|
||||
再比较 build output 与 Maven Local AAR:
|
||||
|
||||
```bash
|
||||
sha256sum \
|
||||
MapLibreAndroid/build/outputs/aar/MapLibreAndroid-opengl-release.aar \
|
||||
/root/.m2/repository/org/maplibre/gl/android-sdk-opengl/<VERSION>/android-sdk-opengl-<VERSION>.aar
|
||||
```
|
||||
|
||||
两个 SHA256 必须完全一致,否则停止后续 Win11 流程。
|
||||
## 8. AAR → Win11 传输固定流程
|
||||
|
||||
Linux 将新版本 AAR/POM/module 临时复制到 `/mnt/nas/pbf`,该目录对应公网根目录 `https://pbf.jpcn.ccwu.cc/`。
|
||||
只作为临时交接,Win11 验证完成后立即删除公开文件。
|
||||
|
||||
Win11 固定设备:CARBON7i。
|
||||
下载目录:`D:\React\MapLibreParticleAAR\<VERSION>\`。
|
||||
必须使用 `curl.exe -L`,并在 URL 后加每次不同的 `?v=` 防止 CDN/cache 命中旧产物,例如:
|
||||
|
||||
```powershell
|
||||
curl.exe -L --retry 5 --retry-delay 2 `
|
||||
-o "D:\React\MapLibreParticleAAR\<VERSION>\android-sdk-opengl-<VERSION>.aar" `
|
||||
"https://pbf.jpcn.ccwu.cc/android-sdk-opengl-<VERSION>.aar?v=<NEW_VALUE>"
|
||||
```
|
||||
|
||||
POM/module 同样使用新 `?v=` 下载。
|
||||
然后:
|
||||
|
||||
```powershell
|
||||
Get-FileHash "D:\React\MapLibreParticleAAR\<VERSION>\android-sdk-opengl-<VERSION>.aar" -Algorithm SHA256
|
||||
```
|
||||
|
||||
Win11 SHA256 必须与 Linux 一致。
|
||||
一致后复制三件套到:
|
||||
`C:\Users\taibe\.m2\repository\org\maplibre\gl\android-sdk-opengl\<VERSION>\`。
|
||||
再次核对 Maven Local AAR SHA256。
|
||||
## 9. Win11 源码同步与 Test Host
|
||||
|
||||
Git sparse 工作副本:
|
||||
`D:\React\MapLibreParticleLab-Win11-SYNC\integration\react-native\MapLibreParticleRNTestHost`
|
||||
|
||||
当前实际运行 Test Host:
|
||||
`D:\React\MapLibreParticleRNTestHost-Win11-STEP060-20260907`
|
||||
|
||||
固定顺序:
|
||||
|
||||
1. Win11 sparse repo `git pull --ff-only origin particle/main`;
|
||||
2. 以 Git 工作副本为来源同步本 Step 受控 Test Host 源文件到 legacy runtime 目录;
|
||||
3. 不覆盖 legacy 目录中已验证且本 Step 无关的生成环境;
|
||||
4. 若新 Step 修改 Expo plugin/nativeVersion,则同步更新当前生成 `android/build.gradle` 的对应临时版本;
|
||||
5. 保持 `app.json` landscape,并确认生成 Manifest 仍是 `android:screenOrientation="landscape"`;
|
||||
6. `05-install-and-run.ps1` 必须保留两条 reverse:`8091 -> 8091` 与 `8081 -> 8091`。
|
||||
|
||||
Metro 固定 `8091`,不要启动第二个 Metro,也不要改成 8081。
|
||||
|
||||
Win11 Gradle 基线:
|
||||
`C:\Users\taibe\.gradle\wrapper\dists\gradle-8.14.3-bin\cv11ve7ro1n3o1j4so8xd9n66\gradle-8.14.3\bin\gradle.bat`
|
||||
|
||||
依赖验收必须分别检查 Bridge 与 MLRN,两者都只能解析到当前 Step 的 `<VERSION>`。
|
||||
建议在 legacy Test Host `android` 目录执行:
|
||||
|
||||
```powershell
|
||||
$g = 'C:\Users\taibe\.gradle\wrapper\dists\gradle-8.14.3-bin\cv11ve7ro1n3o1j4so8xd9n66\gradle-8.14.3\bin\gradle.bat'
|
||||
& $g :maplibre-particle_weather-runtime-bridge:dependencyInsight --configuration debugRuntimeClasspath --dependency org.maplibre.gl:android-sdk-opengl --console=plain --no-daemon --no-watch-fs
|
||||
& $g :maplibre_maplibre-react-native:dependencyInsight --configuration debugRuntimeClasspath --dependency org.maplibre.gl:android-sdk-opengl --console=plain --no-daemon --no-watch-fs
|
||||
```
|
||||
|
||||
两条输出必须共同出现 `org.maplibre.gl:android-sdk-opengl:<VERSION>`,且均 `BUILD SUCCESSFUL`。
|
||||
|
||||
## 10. APK 编译边界
|
||||
|
||||
Android APK 编译默认仍由用户手工执行;ChatGPT/RDC 不自行触发 `assembleDebug`,除非用户在当次任务中再次明确授权。
|
||||
固定命令:
|
||||
|
||||
```powershell
|
||||
cd D:\React\MapLibreParticleRNTestHost-Win11-STEP060-20260907\android
|
||||
C:\Users\taibe\.gradle\wrapper\dists\gradle-8.14.3-bin\cv11ve7ro1n3o1j4so8xd9n66\gradle-8.14.3\bin\gradle.bat `
|
||||
:app:assembleDebug `
|
||||
--console=plain `
|
||||
--no-daemon `
|
||||
--no-watch-fs `
|
||||
-PreactNativeArchitectures=x86_64
|
||||
```
|
||||
|
||||
只有用户返回 `BUILD SUCCESSFUL` 后才进入安装和设备验收。
|
||||
## 11. Android 安装与运行时验收
|
||||
|
||||
Android 测试设备:`192.168.1.146`。
|
||||
所有 ADB 命令必须显式带:`adb -s 192.168.1.146 ...`。
|
||||
|
||||
优先使用 legacy Test Host:
|
||||
`D:\React\MapLibreParticleRNTestHost-Win11-STEP060-20260907\scripts\05-install-and-run.ps1`
|
||||
|
||||
该脚本负责:设备检查、`8091 -> 8091`、`8081 -> 8091`、install -r、force-stop、启动 `.MainActivity`。
|
||||
安装后先确认:
|
||||
|
||||
- Activity 为 `SCREEN_ORIENTATION_LANDSCAPE`;
|
||||
- Metro bundle 正常;
|
||||
- `WeatherRuntime attached`;
|
||||
- 无 `WEATHER_OBJECTS_NOT_READY`、JNI crash、SIGSEGV、FATAL EXCEPTION。
|
||||
|
||||
STEP-061 的 Binary U/V 具体验收必须由正式 STEP-061 任务 MD 明确,包括提交 payload 后的 Runtime/Field Window/Timeline 预期状态。
|
||||
原则上必须证明 binary ingress 实际进入 Native/Core,而不是只验证 JS 参数接受。
|
||||
若任务要求完整控制 UI,可使用现有 `07-enable-full-validation-ui.ps1`,测试完成后必须执行 `08-restore-baseline-ui.ps1`。
|
||||
|
||||
运行时结果应同时读取 UI result、runtime snapshot 与当前 App PID 的 logcat;不得只凭屏幕视觉判断。
|
||||
测试失败时先判断是 Host/Bridge、JNI、Core field validation、Timeline 还是 renderer,不得在 NavSea 层增加兼容逻辑掩盖上游问题。
|
||||
## 12. 临时公开文件清理
|
||||
|
||||
Win11 AAR/POM/module 下载和 SHA 验证完成后,Linux 必须删除 `/mnt/nas/pbf` 中本 Step 临时公开的三件套。
|
||||
不得把 AAR 放进 Git。
|
||||
|
||||
## 13. 每个 STEP 的完整顺序
|
||||
|
||||
新窗口必须按下列顺序推进,不跳步:
|
||||
|
||||
1. 读取本交接 MD + 实际仓库基线;
|
||||
2. 调查 STEP-061 当前源码与边界;
|
||||
3. 生成中文 STEP-061 Codex 任务 MD;
|
||||
4. 先 commit/push 任务 MD;
|
||||
5. 在 `particle-codex` 新建 `step061` window;
|
||||
6. 在该 window 启动新 Codex CLI;
|
||||
7. Codex 完成源码/文档/允许验证后退出到 shell;
|
||||
8. ChatGPT 审查真实 diff;
|
||||
9. RDC 精准 commit/push source changes;
|
||||
10. 同一 tmux window 以 `JOBS=1` 构建 AAR;
|
||||
11. Maven Local publish + Linux 双 SHA;
|
||||
12. `/mnt/nas/pbf` 临时发布;
|
||||
13. CARBON7i `curl.exe -L ?v=<new>` 下载 + SHA;
|
||||
14. Win11 Maven Local + 两条 dependencyInsight;
|
||||
15. 用户手工 APK build;
|
||||
16. ChatGPT/RDC 安装、ADB、UI/logcat 实测;
|
||||
17. 恢复 baseline validation UI;
|
||||
18. 删除 `/mnt/nas/pbf` 临时文件;
|
||||
19. 写最终 Step/验收报告/开发记录;
|
||||
20. commit/push 最终文档并核对 local/remote HEAD。
|
||||
## 14. 关键停止条件
|
||||
|
||||
出现以下任一情况必须停止后续打包/设备流程并先定位:
|
||||
|
||||
- Codex 修改越过 STEP-061 边界;
|
||||
- 引入 provider/network/vendor 逻辑到 MapLibre Native/Core;
|
||||
- 采用大规模 `number[]` JSON/base64 作为正式 binary field transport;
|
||||
- source review 未通过却直接 build AAR;
|
||||
- Linux build/Maven Local/Win11 SHA 不一致;
|
||||
- Bridge 与 MLRN dependencyInsight 解析到不同 AAR 或旧版本;
|
||||
- Android build 失败;
|
||||
- 设备出现 crash/JNI/SIGSEGV 或 field fail-open;
|
||||
- 未完成 Android hard gate 就提前把 STEP 标记 CLOSED/PASS。
|
||||
|
||||
## 15. 新窗口开始语义
|
||||
|
||||
用户在新 ChatGPT 窗口只需说明:
|
||||
“继续 MapLibreParticleLab STEP-061,先读取 `docs/40_任务/STEP-061_新窗口交接与端到端执行流程_v1.md` 并按实际仓库状态执行。”
|
||||
|
||||
新窗口收到后应直接读取此文件和仓库,不要求用户重新复述 AAR、tmux、Win11、ADB 或 STEP-060 历史。
|
||||
Reference in New Issue
Block a user