解锁L4-TOOL-DB主机运行环境
结论:已识别RIP版LinuxCNC主机运行时,Tool DB native protocol probe可通过,inventory baseline保持28/28/131/0且promotion继续锁定。
This commit is contained in:
@@ -183,6 +183,24 @@ const sdkIndexText = readFileSync(resolve(root, "runtime/sdk/src/index.js"), "ut
|
||||
const sdkReadmeText = readFileSync(resolve(root, "runtime/sdk/README.md"), "utf8");
|
||||
const sourceManifestText = readFileSync(resolve(root, "tools/source-manifest.txt"), "utf8");
|
||||
const trackerText = readFileSync(resolve(root, "../PROJECT_COMPLETION_TRACKER.md"), "utf8");
|
||||
|
||||
function parseTsvRows(text) {
|
||||
const [headerLine, ...dataLines] = text.trim().split(/\r?\n/);
|
||||
const headers = headerLine.split("\t");
|
||||
return dataLines
|
||||
.filter((line) => line.trim().length > 0)
|
||||
.map((line) => {
|
||||
const values = line.split("\t");
|
||||
return Object.fromEntries(headers.map((header, index) => [header, values[index] ?? ""]));
|
||||
});
|
||||
}
|
||||
|
||||
const promotionCandidateArtifactRows = parseTsvRows(
|
||||
readFileSync(resolve(root, "build/wasm/sim-configs-inventory/promotion-candidates.tsv"), "utf8"),
|
||||
);
|
||||
const evidenceExpansionArtifactRows = parseTsvRows(
|
||||
readFileSync(resolve(root, "build/wasm/sim-configs-inventory/evidence-expansion-candidates.tsv"), "utf8"),
|
||||
);
|
||||
const expectedPromotionFamilySummary =
|
||||
"qtdragon-on-abort: 6/6 ready; vismach-remap-sims: 1/1 ready; rose-engine-rcone-demo: 1/1 ready";
|
||||
const expectedPromotionFamilyRows = [
|
||||
@@ -204,7 +222,46 @@ const expectedPromotionCandidateArtifactSummary = {
|
||||
totalCandidateCount: 28,
|
||||
promotionAllowedCount: 0,
|
||||
hardBlockRuntimeLock: "locked (3 families)",
|
||||
hardBlockRuntimePromotionAllowedCount: 0,
|
||||
inventoryBaseline: "executed=28 passed=28 skipped=131 unexpected_fail=0",
|
||||
artifactRows: {
|
||||
promotionCandidates: 28,
|
||||
evidenceExpansion: 13,
|
||||
},
|
||||
hardBlockRuntimeFamilyRows: [],
|
||||
hardBlockRuntimeFamilyDetailRows: [],
|
||||
hardBlockRuntimeFamilySummaryRows: [
|
||||
{
|
||||
family: "L4-USER-M-PROCESS",
|
||||
candidateCount: 0,
|
||||
promotionAllowedCount: 0,
|
||||
locked: true,
|
||||
lockedPaths: [],
|
||||
firstPath: null,
|
||||
firstBlockReason: null,
|
||||
nextProof: null,
|
||||
},
|
||||
{
|
||||
family: "L4-TOOL-DB",
|
||||
candidateCount: 0,
|
||||
promotionAllowedCount: 0,
|
||||
locked: true,
|
||||
lockedPaths: [],
|
||||
firstPath: null,
|
||||
firstBlockReason: null,
|
||||
nextProof: null,
|
||||
},
|
||||
{
|
||||
family: "L4-PYTHON-REMAP",
|
||||
candidateCount: 0,
|
||||
promotionAllowedCount: 0,
|
||||
locked: true,
|
||||
lockedPaths: [],
|
||||
firstPath: null,
|
||||
firstBlockReason: null,
|
||||
nextProof: null,
|
||||
},
|
||||
],
|
||||
layers: [
|
||||
{
|
||||
id: "evidence-ready",
|
||||
@@ -224,6 +281,7 @@ const expectedPromotionCandidateArtifactSummary = {
|
||||
evidenceExpansion: {
|
||||
id: "browser-diagnostics-expansion",
|
||||
candidateCount: 13,
|
||||
artifactRowCount: 13,
|
||||
promotionAllowedCount: 0,
|
||||
baselineChanging: false,
|
||||
nextEvidence: "browser-diagnostics-binding",
|
||||
@@ -1571,6 +1629,14 @@ assert.deepEqual(
|
||||
releaseReadinessReady.promotionCandidateArtifactSummary,
|
||||
expectedPromotionCandidateArtifactSummary,
|
||||
);
|
||||
assert.equal(
|
||||
releaseReadinessReady.rows.find(({ id }) => id === "promotion-candidate-artifact-rows")?.value,
|
||||
"28",
|
||||
);
|
||||
assert.equal(
|
||||
releaseReadinessReady.rows.find(({ id }) => id === "evidence-expansion-artifact-rows")?.value,
|
||||
"13",
|
||||
);
|
||||
assert.deepEqual(
|
||||
releaseReadinessReady.virtualHalPromotionFamilyRows.map(({ id, value }) => [
|
||||
`virtual-hal-promotion-family-${id}`,
|
||||
@@ -1597,6 +1663,78 @@ assert.equal(
|
||||
createProjectReleaseReadinessSummaryViewModel(releaseReadinessReady).rows.find(({ id }) => id === "promotion-candidate-layers")?.value,
|
||||
"evidence-ready=8 inventory-ready=20",
|
||||
);
|
||||
const releaseReadinessWithCandidateArtifacts = createProjectReleaseReadinessReport({
|
||||
observedOutputs: ["project_release_gate=ok"],
|
||||
virtualHalSimConfigSourceCoverage: simConfigSourceCoverageReport,
|
||||
virtualHalSimConfigPromotionCandidates: simConfigPromotionCandidateReport,
|
||||
virtualHalSimConfigMacroLoadFixtures: simConfigMacroLoadFixtureReport,
|
||||
virtualHalMotionControllerMatrix: manifestCheckedMotionControllerMatrixReport,
|
||||
promotionCandidateRows: promotionCandidateArtifactRows,
|
||||
evidenceExpansionRows: evidenceExpansionArtifactRows,
|
||||
});
|
||||
assert.equal(releaseReadinessWithCandidateArtifacts.promotionCandidateArtifactSummary.artifactRows.promotionCandidates, 28);
|
||||
assert.equal(releaseReadinessWithCandidateArtifacts.promotionCandidateArtifactSummary.artifactRows.evidenceExpansion, 13);
|
||||
assert.equal(
|
||||
releaseReadinessWithCandidateArtifacts.promotionCandidateArtifactSummary.hardBlockRuntimeFamilyRows.length,
|
||||
19,
|
||||
);
|
||||
assert.equal(
|
||||
releaseReadinessWithCandidateArtifacts.promotionCandidateArtifactSummary.hardBlockRuntimePromotionAllowedCount,
|
||||
0,
|
||||
);
|
||||
assert.equal(
|
||||
releaseReadinessWithCandidateArtifacts.promotionCandidateArtifactSummary.hardBlockRuntimeFamilyRows
|
||||
.some((row) => row.skipKind === "L4-TOOL-DB" && row.promotionAllowed === false),
|
||||
true,
|
||||
);
|
||||
assert.deepEqual(
|
||||
releaseReadinessWithCandidateArtifacts.promotionCandidateArtifactSummary.hardBlockRuntimeFamilySummaryRows
|
||||
.map(({ family, candidateCount, promotionAllowedCount, locked }) => [
|
||||
family,
|
||||
candidateCount,
|
||||
promotionAllowedCount,
|
||||
locked,
|
||||
]),
|
||||
[
|
||||
["L4-USER-M-PROCESS", 1, 0, true],
|
||||
["L4-TOOL-DB", 1, 0, true],
|
||||
["L4-PYTHON-REMAP", 17, 0, true],
|
||||
],
|
||||
);
|
||||
assert.deepEqual(
|
||||
releaseReadinessWithCandidateArtifacts.promotionCandidateArtifactSummary.hardBlockRuntimeFamilyDetailRows
|
||||
.slice(0, 3)
|
||||
.map(({ family, path, blockReason, nextProof, promotionAllowed }) => [
|
||||
family,
|
||||
path,
|
||||
blockReason,
|
||||
nextProof,
|
||||
promotionAllowed,
|
||||
]),
|
||||
[
|
||||
[
|
||||
"L4-TOOL-DB",
|
||||
"axis/db_demo/base.ngc",
|
||||
"design_tooldata_db_protocol_boundary",
|
||||
"db_program_v2_1_handshake_getall_load_unload_or_put",
|
||||
false,
|
||||
],
|
||||
[
|
||||
"L4-PYTHON-REMAP",
|
||||
"axis/laser/raster_test.ngc",
|
||||
"design_linuxcnc_python_runtime_boundary",
|
||||
"python_runtime_owner_and_fixture",
|
||||
false,
|
||||
],
|
||||
[
|
||||
"L4-PYTHON-REMAP",
|
||||
"axis/laser/vector_test.ngc",
|
||||
"design_linuxcnc_python_runtime_boundary",
|
||||
"python_runtime_owner_and_fixture",
|
||||
false,
|
||||
],
|
||||
],
|
||||
);
|
||||
const releaseReadinessWithScreenshots = createProjectReleaseReadinessReport({
|
||||
gateResults: Object.fromEntries(createProjectReleaseGateManifest().gateIds.map((id) => [id, true])),
|
||||
virtualHalSimConfigSourceCoverage: simConfigSourceCoverageReport,
|
||||
@@ -1735,11 +1873,21 @@ assert.deepEqual(releaseReadinessArtifactValidation, {
|
||||
label: "Promotion candidate total",
|
||||
value: "28",
|
||||
},
|
||||
{
|
||||
id: "promotion-candidate-artifact-rows",
|
||||
label: "Promotion candidate artifact rows",
|
||||
value: "28",
|
||||
},
|
||||
{
|
||||
id: "evidence-expansion-candidates",
|
||||
label: "Evidence expansion candidates",
|
||||
value: "13",
|
||||
},
|
||||
{
|
||||
id: "evidence-expansion-artifact-rows",
|
||||
label: "Evidence expansion artifact rows",
|
||||
value: "13",
|
||||
},
|
||||
{
|
||||
id: "evidence-expansion-next-evidence",
|
||||
label: "Evidence expansion next evidence",
|
||||
@@ -1899,6 +2047,22 @@ assert.equal(
|
||||
).rows.find(({ id }) => id === "promotion-candidate-layers")?.value,
|
||||
"evidence-ready=8 inventory-ready=20",
|
||||
);
|
||||
assert.equal(
|
||||
createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel(
|
||||
await loadProjectReleaseReadinessArtifactUrlWorkflow({
|
||||
artifactUrl: "/project-release-readiness.json",
|
||||
diagnosticsUrl: "/browser-diagnostics.json",
|
||||
fetchRef: async (url) => ({
|
||||
ok: true,
|
||||
status: 200,
|
||||
text: async () => url === "/browser-diagnostics.json"
|
||||
? JSON.stringify(browserDiagnosticsArtifact)
|
||||
: JSON.stringify(releaseReadinessArtifact),
|
||||
}),
|
||||
}),
|
||||
).rows.find(({ id }) => id === "evidence-ready-candidate-rows")?.value,
|
||||
"8",
|
||||
);
|
||||
assert.equal(
|
||||
createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel(
|
||||
await loadProjectReleaseReadinessArtifactUrlWorkflow({
|
||||
|
||||
Reference in New Issue
Block a user