@neocompose/cli 0.51.1 → 0.51.2
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
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.51.2] - 2026-09-16
|
|
4
|
+
|
|
5
|
+
- Preserve aggregate arguments owned by declared constructors when materializing nested values, including `NeoCellPattern` values in stored bindings.
|
|
6
|
+
- Preserve local initializer identities when canonical source emission reorders unordered lists.
|
|
7
|
+
- Preserve texture and audio templates in script documents so tests and script evaluation can construct classes with template-backed sprite defaults.
|
|
8
|
+
- Identify a pending server derived-edge repair explicitly instead of recommending another pull to rebuild the index.
|
|
9
|
+
- Keep local tests and dialogue dry-runs available while the server's derived-edge index awaits repair. Push dry-runs still check the live server watermark.
|
|
10
|
+
|
|
3
11
|
## [0.51.1] - 2026-09-16
|
|
4
12
|
|
|
5
13
|
- Refresh compiler-only changes with ordinary `neo pull` before compiling the local workspace. Preserve authored source, local edits, custom paths, and managed binaries while adopting the current server compilation.
|
package/dist/neo.mjs
CHANGED
|
@@ -71079,15 +71079,14 @@ function ownedConstructorArgumentValues(row, ctx, readRow) {
|
|
|
71079
71079
|
}
|
|
71080
71080
|
const classId = row.classId;
|
|
71081
71081
|
if (typeof classId !== "string") return [];
|
|
71082
|
-
const
|
|
71083
|
-
|
|
71084
|
-
|
|
71085
|
-
return [];
|
|
71086
|
-
}
|
|
71087
|
-
const constructor2 = evaluatorSchemaIndex(ctx).constructorRecord(
|
|
71088
|
-
requiredConstructorId2
|
|
71089
|
-
);
|
|
71082
|
+
const constructorId = row.instanceConstructorId;
|
|
71083
|
+
if (constructorId === void 0 || constructorId === null) return [];
|
|
71084
|
+
const constructor2 = evaluatorSchemaIndex(ctx).constructorRecord(constructorId);
|
|
71090
71085
|
if (constructor2 === void 0 || constructor2.classId !== classId) return [];
|
|
71086
|
+
if (!constructor2.argumentTypes.some(
|
|
71087
|
+
(typeInfo) => typeInfo.type === 7 /* Class */ || typeInfo.type === 22 /* Interface */ || typeInfo.type === 6 /* List */ || typeInfo.type === 5 /* Dictionary */ || typeInfo.type === 21 /* Generic */
|
|
71088
|
+
))
|
|
71089
|
+
return [];
|
|
71091
71090
|
let genericEnv = /* @__PURE__ */ new Map();
|
|
71092
71091
|
try {
|
|
71093
71092
|
genericEnv = runtimeGenericEnvForValueRow(row, ctx, /* @__PURE__ */ new Set(), readRow);
|
|
@@ -88797,6 +88796,15 @@ var init_localizable_member_value_writes = __esm({
|
|
|
88797
88796
|
}
|
|
88798
88797
|
});
|
|
88799
88798
|
|
|
88799
|
+
// ../src/database/project-snapshot-derived-edge-version.ts
|
|
88800
|
+
var PROJECT_SNAPSHOT_DERIVED_EDGE_EXTRACTOR_VERSION;
|
|
88801
|
+
var init_project_snapshot_derived_edge_version = __esm({
|
|
88802
|
+
"../src/database/project-snapshot-derived-edge-version.ts"() {
|
|
88803
|
+
"use strict";
|
|
88804
|
+
PROJECT_SNAPSHOT_DERIVED_EDGE_EXTRACTOR_VERSION = 4;
|
|
88805
|
+
}
|
|
88806
|
+
});
|
|
88807
|
+
|
|
88800
88808
|
// ../src/database/project-snapshot-derived-edges.ts
|
|
88801
88809
|
function extractProjectSnapshotDerivedEdges(source) {
|
|
88802
88810
|
const edges = /* @__PURE__ */ new Map();
|
|
@@ -88955,7 +88963,7 @@ function collectDirectBodyChildIds(value) {
|
|
|
88955
88963
|
function asRecord3(value) {
|
|
88956
88964
|
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
88957
88965
|
}
|
|
88958
|
-
var
|
|
88966
|
+
var STORED_PROJECT_RECORD_ID_PATTERN;
|
|
88959
88967
|
var init_project_snapshot_derived_edges = __esm({
|
|
88960
88968
|
"../src/database/project-snapshot-derived-edges.ts"() {
|
|
88961
88969
|
"use strict";
|
|
@@ -88963,7 +88971,7 @@ var init_project_snapshot_derived_edges = __esm({
|
|
|
88963
88971
|
init_neo_script_recompile_scope();
|
|
88964
88972
|
init_member_kinds();
|
|
88965
88973
|
init_packed_value_encoding();
|
|
88966
|
-
|
|
88974
|
+
init_project_snapshot_derived_edge_version();
|
|
88967
88975
|
STORED_PROJECT_RECORD_ID_PATTERN = /^(?:system_)?[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;
|
|
88968
88976
|
}
|
|
88969
88977
|
});
|
|
@@ -115928,11 +115936,13 @@ function verifyProjectSourceCommitAgainstStateV4(args) {
|
|
|
115928
115936
|
assignments
|
|
115929
115937
|
);
|
|
115930
115938
|
const usedAssignments = /* @__PURE__ */ new Set();
|
|
115939
|
+
const positionless = positionIndependentAssignments(assignments);
|
|
115940
|
+
const rewrite = (value) => rewritePending(value, assignments, usedAssignments, positionless);
|
|
115931
115941
|
const expectedChanges = status.changes.map((change) => {
|
|
115932
|
-
const rewrittenData = change.nextData === void 0 ? void 0 :
|
|
115942
|
+
const rewrittenData = change.nextData === void 0 ? void 0 : rewrite(change.nextData);
|
|
115933
115943
|
return {
|
|
115934
115944
|
recordKind: change.recordKind,
|
|
115935
|
-
recordId:
|
|
115945
|
+
recordId: rewrite(change.recordId),
|
|
115936
115946
|
operation: change.kind,
|
|
115937
115947
|
// Source syntax does not author project ownership. The CLI stamps the
|
|
115938
115948
|
// authenticated project id on creates immediately before transport;
|
|
@@ -115944,14 +115954,12 @@ function verifyProjectSourceCommitAgainstStateV4(args) {
|
|
|
115944
115954
|
});
|
|
115945
115955
|
const expectedSeeds = [...status.authoredValueSeeds].map(
|
|
115946
115956
|
([memberId, seed]) => ({
|
|
115947
|
-
memberId:
|
|
115948
|
-
...
|
|
115957
|
+
memberId: rewrite(memberId),
|
|
115958
|
+
...rewrite(seed)
|
|
115949
115959
|
})
|
|
115950
115960
|
);
|
|
115951
|
-
const expectedInitializerMaterialization =
|
|
115952
|
-
status.localInitializerMaterialization ?? { roots: [] }
|
|
115953
|
-
assignments,
|
|
115954
|
-
usedAssignments
|
|
115961
|
+
const expectedInitializerMaterialization = rewrite(
|
|
115962
|
+
status.localInitializerMaterialization ?? { roots: [] }
|
|
115955
115963
|
);
|
|
115956
115964
|
for (const pendingId2 of assignments.keys()) {
|
|
115957
115965
|
if (!usedAssignments.has(pendingId2)) {
|
|
@@ -116116,8 +116124,27 @@ function positionIndependentAssignments(assignments) {
|
|
|
116116
116124
|
}
|
|
116117
116125
|
return resolved;
|
|
116118
116126
|
}
|
|
116119
|
-
function
|
|
116120
|
-
const
|
|
116127
|
+
function relocatedAssignment(pendingId2, assignments, byPosition) {
|
|
116128
|
+
const key = positionIndependentPendingKey(pendingId2);
|
|
116129
|
+
const relocated = key === null ? void 0 : byPosition.get(key);
|
|
116130
|
+
if (relocated !== void 0) return relocated;
|
|
116131
|
+
const virtual = pendingVirtualValueIdentity(pendingId2);
|
|
116132
|
+
if (virtual === null) return null;
|
|
116133
|
+
let relocatedRoot = virtual.instanceRootId;
|
|
116134
|
+
if (!assignments.has(relocatedRoot)) {
|
|
116135
|
+
const rootKey = positionIndependentPendingKey(relocatedRoot);
|
|
116136
|
+
if (rootKey === null) return null;
|
|
116137
|
+
const canonicalRoot = byPosition.get(rootKey);
|
|
116138
|
+
if (canonicalRoot === void 0) return null;
|
|
116139
|
+
relocatedRoot = canonicalRoot;
|
|
116140
|
+
}
|
|
116141
|
+
const relocatedVirtual = pendingVirtualValueId(
|
|
116142
|
+
relocatedRoot,
|
|
116143
|
+
virtual.sourceIdentity
|
|
116144
|
+
);
|
|
116145
|
+
return assignments.has(relocatedVirtual) ? relocatedVirtual : null;
|
|
116146
|
+
}
|
|
116147
|
+
function rewritePending(value, assignments, used, positionless) {
|
|
116121
116148
|
if (typeof value === "string") {
|
|
116122
116149
|
const exact = assignments.get(value);
|
|
116123
116150
|
if (exact !== void 0) {
|
|
@@ -116125,9 +116152,8 @@ function rewritePending(value, assignments, used, byPosition) {
|
|
|
116125
116152
|
return exact;
|
|
116126
116153
|
}
|
|
116127
116154
|
if (value.startsWith("__pending__:")) {
|
|
116128
|
-
const
|
|
116129
|
-
|
|
116130
|
-
if (relocated !== void 0) {
|
|
116155
|
+
const relocated = relocatedAssignment(value, assignments, positionless);
|
|
116156
|
+
if (relocated !== null) {
|
|
116131
116157
|
used.add(relocated);
|
|
116132
116158
|
return assignments.get(relocated);
|
|
116133
116159
|
}
|
|
@@ -116135,6 +116161,7 @@ function rewritePending(value, assignments, used, byPosition) {
|
|
|
116135
116161
|
`Verified source identity ${value} has no pending id assignment.`
|
|
116136
116162
|
);
|
|
116137
116163
|
}
|
|
116164
|
+
if (!value.includes("__pending__:")) return value;
|
|
116138
116165
|
let rewritten = value;
|
|
116139
116166
|
for (const [pendingId2, assignedId] of assignments) {
|
|
116140
116167
|
if (!rewritten.includes(pendingId2)) continue;
|
|
@@ -116452,7 +116479,6 @@ function assertServerPreparationSucceeds(args) {
|
|
|
116452
116479
|
});
|
|
116453
116480
|
if (refusal !== null) throw new ServerPreparationPreflightError(refusal);
|
|
116454
116481
|
}
|
|
116455
|
-
assertDerivedEdgeCompatibility(args.workspace);
|
|
116456
116482
|
try {
|
|
116457
116483
|
return prepareServerPreparationChanges({
|
|
116458
116484
|
...args,
|
|
@@ -116481,6 +116507,14 @@ function assertDerivedEdgeCompatibility(workspace) {
|
|
|
116481
116507
|
`Project "${workspace.config.projectId}" has no derived-edge watermark. Run \`neo pull\` and retry. If this persists, repair the project's derived edge index.`
|
|
116482
116508
|
);
|
|
116483
116509
|
}
|
|
116510
|
+
if (serverVersion === 0) {
|
|
116511
|
+
throw new DerivedEdgeCompatibilityError(
|
|
116512
|
+
"server-stale",
|
|
116513
|
+
localVersion,
|
|
116514
|
+
serverVersion,
|
|
116515
|
+
`Project "${workspace.config.projectId}" has a pending server derived-edge repair (watermark 0). Wait for repair to complete and retry. If it remains pending, inspect the server repair status and logs; \`neo pull\` cannot rebuild this index.`
|
|
116516
|
+
);
|
|
116517
|
+
}
|
|
116484
116518
|
if (serverVersion > localVersion) {
|
|
116485
116519
|
throw new DerivedEdgeCompatibilityError(
|
|
116486
116520
|
"cli-stale",
|
|
@@ -120506,7 +120540,9 @@ function structuralMemberByParameterName(context, effectiveClass) {
|
|
|
120506
120540
|
function lowerSeedChild(context, member, expression, source, path, rows, localizedTexts, containerId, environment, authoredSlice) {
|
|
120507
120541
|
const symbolId = sourceValueSymbol(context, expression);
|
|
120508
120542
|
if (symbolId !== null) return symbolId;
|
|
120509
|
-
const annotatedId = annotatedValue(
|
|
120543
|
+
const annotatedId = annotatedValue(
|
|
120544
|
+
context.localValues.resolve(expression, source).expression
|
|
120545
|
+
).id;
|
|
120510
120546
|
const valueId = annotatedId ?? context.structuralStoredIds.get(path) ?? pendingNestedValueId(source, path);
|
|
120511
120547
|
lowerSeedRow(
|
|
120512
120548
|
context,
|
|
@@ -130576,6 +130612,8 @@ function readDocumentArrays(raw) {
|
|
|
130576
130612
|
return {
|
|
130577
130613
|
project: raw.project,
|
|
130578
130614
|
projectFiles: arrayOf2("projectFiles"),
|
|
130615
|
+
textureTemplates: arrayOf2("textureTemplates"),
|
|
130616
|
+
audioClipTemplates: arrayOf2("audioClipTemplates"),
|
|
130579
130617
|
members: arrayOf2("members"),
|
|
130580
130618
|
classes: arrayOf2("classes"),
|
|
130581
130619
|
constructors: arrayOf2("constructors"),
|
|
@@ -131396,6 +131434,7 @@ async function runScript(workspace, command, options, dependencies = {}) {
|
|
|
131396
131434
|
variants: document.variants,
|
|
131397
131435
|
variantFolders: document.variantFolders,
|
|
131398
131436
|
projectFiles: document.projectFiles,
|
|
131437
|
+
textureTemplates: document.textureTemplates,
|
|
131399
131438
|
localizationConfig: document.localizationConfig,
|
|
131400
131439
|
localizedTexts: document.localizedTexts,
|
|
131401
131440
|
...runtime
|
|
@@ -134667,6 +134706,7 @@ async function prepareLocalCandidateV4(workspace, options = {}) {
|
|
|
134667
134706
|
versionId: workspace.config.versionId
|
|
134668
134707
|
});
|
|
134669
134708
|
workspace.state.derivedEdgeVersion = signal?.derivedEdgeVersion ?? null;
|
|
134709
|
+
assertDerivedEdgeCompatibility(workspace);
|
|
134670
134710
|
}
|
|
134671
134711
|
preparedLocal = await prepareLocalPushArtifactsV4(
|
|
134672
134712
|
workspace,
|
|
@@ -135006,7 +135046,8 @@ function createPendingProjectSourceIdentityV4(workspace, status, authoredValueSe
|
|
|
135006
135046
|
recordFiles: projectRecordFilesV4(
|
|
135007
135047
|
Object.values(workspace.state.records),
|
|
135008
135048
|
status.reconstructed.values()
|
|
135009
|
-
)
|
|
135049
|
+
),
|
|
135050
|
+
localValues: status.localValues
|
|
135010
135051
|
});
|
|
135011
135052
|
const files = emission.files.map((file) => {
|
|
135012
135053
|
const kind = neoProjectSourceKind(file.path, file.content);
|
|
@@ -136502,7 +136543,7 @@ var init_registry2 = __esm({
|
|
|
136502
136543
|
"schema-contract/registry.mjs"() {
|
|
136503
136544
|
"use strict";
|
|
136504
136545
|
PROJECT_SCHEMA_CONTRACT = Object.freeze({
|
|
136505
|
-
cliVersion: "0.51.
|
|
136546
|
+
cliVersion: "0.51.2",
|
|
136506
136547
|
projectFileUploadBatchSize: 32,
|
|
136507
136548
|
documentRecords: {
|
|
136508
136549
|
member: {
|
|
@@ -138099,6 +138140,7 @@ function sharedEvaluatorBase(rawDocument) {
|
|
|
138099
138140
|
variants: document.variants,
|
|
138100
138141
|
variantFolders: document.variantFolders,
|
|
138101
138142
|
projectFiles: document.projectFiles,
|
|
138143
|
+
textureTemplates: document.textureTemplates,
|
|
138102
138144
|
localizationConfig: document.localizationConfig,
|
|
138103
138145
|
localizedTexts: document.localizedTexts,
|
|
138104
138146
|
...runtime
|
|
@@ -143731,7 +143773,7 @@ There is no --keep-current: preserving current semantic state defines flatten.
|
|
|
143731
143773
|
async function main() {
|
|
143732
143774
|
const args = parseArgs(process.argv.slice(2));
|
|
143733
143775
|
if (args.command === "--version") {
|
|
143734
|
-
console.log("0.51.
|
|
143776
|
+
console.log("0.51.2");
|
|
143735
143777
|
return;
|
|
143736
143778
|
}
|
|
143737
143779
|
if (args.command === null || args.command === "help" || args.command === "--help" || args.command === "-h") {
|
package/package.json
CHANGED
|
@@ -90,7 +90,7 @@ wrappers.
|
|
|
90
90
|
The marker near the top of `SKILL.md` must exactly match the package version:
|
|
91
91
|
|
|
92
92
|
```html
|
|
93
|
-
<!-- reviewed-through-cli: 0.51.
|
|
93
|
+
<!-- reviewed-through-cli: 0.51.2 -->
|
|
94
94
|
```
|
|
95
95
|
|
|
96
96
|
The quoted version above is checked too, so this instruction cannot go stale
|