fix: finalize ZIP preview freshness and parity
This commit is contained in:
@@ -1,16 +1,16 @@
|
|||||||
# Native Road Compiler Contract
|
# Native Road Package Contract
|
||||||
|
|
||||||
The native-road package is maintained in the private `road-compiler` repository:
|
The native-road package is maintained in the private `road-compiler` repository:
|
||||||
|
|
||||||
`https://git.app.que01.top/que01/road-compiler`
|
`https://git.app.que01.top/que01/road-compiler`
|
||||||
|
|
||||||
This host consumes the exact git tag recorded in `package.json` and lockfile. The host owns area configuration normalization and writes `RoadCompilerInput`; the compiler owns the `native-road-package/v1` file contract and CLI. Production code must invoke the installed compiler CLI through `scripts/lib/road-compiler-cli.js`, not import compiler source files or read `packages/road-compiler`.
|
The host consumes a read-only ZIP exported by the private `road-compiler` repository. The host never installs or invokes the compiler. `nativeRoadPackage` is resolved relative to the area config, hashed, validated, and extracted into `_pipeline/native-road-import/<sha256>/` before native consumers start.
|
||||||
|
|
||||||
The completion marker is `NATIVE_ROAD_COMPILE_DONE <json>`. `build-area.js` validates the marker's count, JSON payload, area id, output path, process status, and signal before starting Blender.
|
The completion marker is `NATIVE_ROAD_COMPILE_DONE <json>`. `build-area.js` validates the marker's count, JSON payload, area id, output path, process status, and signal before starting Blender.
|
||||||
|
|
||||||
## Scope / Trigger
|
## Scope / Trigger
|
||||||
|
|
||||||
This contract applies to native-road compilation from `scripts/build-area.js`, `scripts/compile-native-roads.js`, and the road workbench fresh-compile callback.
|
This contract applies to native-road consumption from `scripts/build-area.js`, diagnostics, parity, Blender, and native preview generation.
|
||||||
|
|
||||||
## Signatures
|
## Signatures
|
||||||
|
|
||||||
|
|||||||
26
.trellis/tasks/08-26-rc-p5b-zip-import/task.json
Normal file
26
.trellis/tasks/08-26-rc-p5b-zip-import/task.json
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"id": "rc-p5b-zip-import",
|
||||||
|
"name": "rc-p5b-zip-import",
|
||||||
|
"title": "ZIP 道路包安全导入与纯消费",
|
||||||
|
"description": "让 osmWorkflow 配置、校验、解压并消费 road-compiler Web 导出的 ZIP 道路包,移除 compiler runtime 耦合。",
|
||||||
|
"status": "completed",
|
||||||
|
"dev_type": null,
|
||||||
|
"scope": null,
|
||||||
|
"package": null,
|
||||||
|
"priority": "P2",
|
||||||
|
"creator": "dingkang",
|
||||||
|
"assignee": "dingkang",
|
||||||
|
"createdAt": "2026-08-26",
|
||||||
|
"completedAt": null,
|
||||||
|
"branch": null,
|
||||||
|
"base_branch": "experiment/road-compiler-rethink",
|
||||||
|
"worktree_path": null,
|
||||||
|
"commit": null,
|
||||||
|
"pr_url": null,
|
||||||
|
"subtasks": [],
|
||||||
|
"children": [],
|
||||||
|
"parent": "08-26-rc-p5-artifact-consumption",
|
||||||
|
"relatedFiles": [],
|
||||||
|
"notes": "",
|
||||||
|
"meta": {}
|
||||||
|
}
|
||||||
@@ -486,13 +486,11 @@ function stageManifestStatus(area, configPath = null) {
|
|||||||
network: path.join(area.outputs.geojsonDir, "network.json"),
|
network: path.join(area.outputs.geojsonDir, "network.json"),
|
||||||
intersectionSurface: path.join(area.outputs.geojsonDir, "intersection_surface.geojson"),
|
intersectionSurface: path.join(area.outputs.geojsonDir, "intersection_surface.geojson"),
|
||||||
}),
|
}),
|
||||||
...(native ? { trafficSimulation: area.outputs.trafficSimulation } : {}),
|
|
||||||
previewCss: path.join(path.resolve(__dirname, ".."), "lib", "cesium-preview.css"),
|
previewCss: path.join(path.resolve(__dirname, ".."), "lib", "cesium-preview.css"),
|
||||||
previewJs: path.join(path.resolve(__dirname, ".."), "lib", "cesium-preview.js"),
|
previewJs: path.join(path.resolve(__dirname, ".."), "lib", "cesium-preview.js"),
|
||||||
},
|
},
|
||||||
outputs: compressionComplete ? {
|
outputs: compressionComplete ? {
|
||||||
vehicleRoute: native ? optionalExpectedFile(area.outputs.vehicleRoute) : area.outputs.vehicleRoute,
|
vehicleRoute: native ? optionalExpectedFile(area.outputs.vehicleRoute) : area.outputs.vehicleRoute,
|
||||||
...(native ? { trafficSimulation: area.outputs.trafficSimulation } : {}),
|
|
||||||
vehicleModel: area.outputs.vehicleModel,
|
vehicleModel: area.outputs.vehicleModel,
|
||||||
} : {
|
} : {
|
||||||
cesiumPreview: area.outputs.cesiumPreview,
|
cesiumPreview: area.outputs.cesiumPreview,
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ const crypto = require("crypto");
|
|||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
const { readAreaConfig } = require("./lib/area-config");
|
const { readAreaConfig } = require("./lib/area-config");
|
||||||
|
const { importNativeRoadPackage } = require("./lib/native-road-package");
|
||||||
|
|
||||||
const repoRoot = path.resolve(__dirname, "..");
|
const repoRoot = path.resolve(__dirname, "..");
|
||||||
|
|
||||||
@@ -77,10 +78,11 @@ function filesBelow(directory) {
|
|||||||
|
|
||||||
function snapshot(configPath) {
|
function snapshot(configPath) {
|
||||||
const area = readAreaConfig(configPath, { repoRoot });
|
const area = readAreaConfig(configPath, { repoRoot });
|
||||||
if (!fs.existsSync(area.outputs.nativeRoadDir)) throw new Error(`Native road output not found: ${area.outputs.nativeRoadDir}`);
|
const nativePackage = importNativeRoadPackage(area);
|
||||||
|
const nativeRoadDir = nativePackage.rootDir;
|
||||||
const files = {};
|
const files = {};
|
||||||
for (const file of filesBelow(area.outputs.nativeRoadDir).sort()) {
|
for (const file of filesBelow(nativeRoadDir).sort()) {
|
||||||
const relative = path.relative(area.outputs.nativeRoadDir, file).split(path.sep).join("/");
|
const relative = path.relative(nativeRoadDir, file).split(path.sep).join("/");
|
||||||
const text = fs.readFileSync(file, "utf8");
|
const text = fs.readFileSync(file, "utf8");
|
||||||
files[relative] = jsonRecord(text, Buffer.byteLength(text));
|
files[relative] = jsonRecord(text, Buffer.byteLength(text));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user