@neocompose/cli 0.24.2 → 0.24.3
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,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.24.3] - 2026-08-07
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Close generic classes constructed by normal member-default evaluation from
|
|
8
|
+
the concrete member slot, so local candidate preparation no longer rejects
|
|
9
|
+
values such as `NeoAnimationSegmentFrame<int>` as open generics before
|
|
10
|
+
`neo test` can discover or execute tests.
|
|
11
|
+
- Key compiled spec artifacts by the prepared candidate document as well as
|
|
12
|
+
source, preventing stale pending class and enum IDs from leaking across
|
|
13
|
+
repeated `neo test` runs.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- Require full-project `neo test` validation in the bundled CLI development
|
|
18
|
+
guidance when evaluator or candidate-materialization behavior changes.
|
|
19
|
+
|
|
3
20
|
## [0.24.2] - 2026-08-07
|
|
4
21
|
|
|
5
22
|
### Fixed
|
package/dist/neo.mjs
CHANGED
|
@@ -60764,8 +60764,8 @@ function validateClassConstructorDescriptor(info, ctx, requireEveryRequiredField
|
|
|
60764
60764
|
`Cannot construct abstract Class '${schemaClass2.name}'.`
|
|
60765
60765
|
);
|
|
60766
60766
|
}
|
|
60767
|
-
const
|
|
60768
|
-
const classArguments2 =
|
|
60767
|
+
const genericSlot = ctx.__constructionGenericSlots?.toReversed().find((slot) => slot.classId === classId) ?? ctx.__storedConstructionReplaySlot;
|
|
60768
|
+
const classArguments2 = genericSlot?.classId === classId ? genericSlot.classArguments : void 0;
|
|
60769
60769
|
const instanceEnv = resolveInstanceEnv(
|
|
60770
60770
|
classId,
|
|
60771
60771
|
classArguments2,
|
|
@@ -61621,7 +61621,7 @@ function constructionInitEvaluator(ctx, createdValues, argumentScopes, construct
|
|
|
61621
61621
|
};
|
|
61622
61622
|
return (member, init, sourceValueId) => {
|
|
61623
61623
|
const evaluate = (argumentValues = []) => {
|
|
61624
|
-
if (
|
|
61624
|
+
if (!isMemberClassBase(member) || Object.keys(member.classArguments ?? {}).length === 0) {
|
|
61625
61625
|
return evaluateInitializerInContext(
|
|
61626
61626
|
init,
|
|
61627
61627
|
member,
|
|
@@ -61631,8 +61631,8 @@ function constructionInitEvaluator(ctx, createdValues, argumentScopes, construct
|
|
|
61631
61631
|
sourceValueId ?? null
|
|
61632
61632
|
);
|
|
61633
61633
|
}
|
|
61634
|
-
const previousSlots = ctx.
|
|
61635
|
-
ctx.
|
|
61634
|
+
const previousSlots = ctx.__constructionGenericSlots;
|
|
61635
|
+
ctx.__constructionGenericSlots = [
|
|
61636
61636
|
...previousSlots ?? [],
|
|
61637
61637
|
{
|
|
61638
61638
|
classId: member.classId,
|
|
@@ -61649,7 +61649,7 @@ function constructionInitEvaluator(ctx, createdValues, argumentScopes, construct
|
|
|
61649
61649
|
sourceValueId ?? null
|
|
61650
61650
|
);
|
|
61651
61651
|
} finally {
|
|
61652
|
-
ctx.
|
|
61652
|
+
ctx.__constructionGenericSlots = previousSlots;
|
|
61653
61653
|
}
|
|
61654
61654
|
};
|
|
61655
61655
|
if (init.compiled === void 0) {
|
|
@@ -101546,7 +101546,7 @@ var init_registry2 = __esm({
|
|
|
101546
101546
|
PROJECT_SCHEMA_CONTRACT = Object.freeze({
|
|
101547
101547
|
formatVersion: 3,
|
|
101548
101548
|
contractVersion: "3.9",
|
|
101549
|
-
cliVersion: "0.24.
|
|
101549
|
+
cliVersion: "0.24.3",
|
|
101550
101550
|
projectFileUploadBatchSize: 32,
|
|
101551
101551
|
documentRecords: {
|
|
101552
101552
|
member: {
|
|
@@ -103077,7 +103077,7 @@ function preparedHookCandidate(workspace) {
|
|
|
103077
103077
|
);
|
|
103078
103078
|
}
|
|
103079
103079
|
}
|
|
103080
|
-
function compileSpec(workspace, document, absolutePath,
|
|
103080
|
+
function compileSpec(workspace, document, absolutePath, projectCompilationHash2) {
|
|
103081
103081
|
const scriptDocument = readDocumentArrays(document);
|
|
103082
103082
|
const path = relative6(workspace.root, absolutePath).split(sep6).join("/");
|
|
103083
103083
|
const source = readFileSync17(absolutePath, "utf8");
|
|
@@ -103087,12 +103087,12 @@ function compileSpec(workspace, document, absolutePath, projectSourceHash) {
|
|
|
103087
103087
|
".neo",
|
|
103088
103088
|
"test-build",
|
|
103089
103089
|
"v1",
|
|
103090
|
-
|
|
103090
|
+
projectCompilationHash2,
|
|
103091
103091
|
`${sourceHash}.json`
|
|
103092
103092
|
);
|
|
103093
103093
|
try {
|
|
103094
103094
|
const cached = JSON.parse(readFileSync17(artifactPath, "utf8"));
|
|
103095
|
-
if (isRecord10(cached) && cached.version === 1 && cached.compilerRevision === NEOSCRIPT_COMPILER_REVISION && cached.
|
|
103095
|
+
if (isRecord10(cached) && cached.version === 1 && cached.compilerRevision === NEOSCRIPT_COMPILER_REVISION && cached.projectCompilationHash === projectCompilationHash2 && cached.sourceHash === sourceHash && isRecord10(cached.action) && typeof cached.artifactSha256 === "string" && createHash10("sha256").update(JSON.stringify(cached.action)).digest("hex") === cached.artifactSha256 && cached.action.compilerRevision === NEOSCRIPT_COMPILER_REVISION && Array.isArray(cached.action.parameters) && Array.isArray(cached.action.instructions) && isRecord10(cached.action.typeInfo)) {
|
|
103096
103096
|
return {
|
|
103097
103097
|
path,
|
|
103098
103098
|
source,
|
|
@@ -103122,7 +103122,7 @@ function compileSpec(workspace, document, absolutePath, projectSourceHash) {
|
|
|
103122
103122
|
`${JSON.stringify({
|
|
103123
103123
|
version: 1,
|
|
103124
103124
|
compilerRevision: NEOSCRIPT_COMPILER_REVISION,
|
|
103125
|
-
|
|
103125
|
+
projectCompilationHash: projectCompilationHash2,
|
|
103126
103126
|
sourceHash,
|
|
103127
103127
|
artifactSha256: createHash10("sha256").update(JSON.stringify(compiled.action)).digest("hex"),
|
|
103128
103128
|
action: compiled.action
|
|
@@ -103131,6 +103131,9 @@ function compileSpec(workspace, document, absolutePath, projectSourceHash) {
|
|
|
103131
103131
|
);
|
|
103132
103132
|
return compiled;
|
|
103133
103133
|
}
|
|
103134
|
+
function projectCompilationHash(projectSourceHash, document) {
|
|
103135
|
+
return createHash10("sha256").update(projectSourceHash).update("\0").update(JSON.stringify(document)).digest("hex");
|
|
103136
|
+
}
|
|
103134
103137
|
function selectedSpecPaths(workspace, selectors) {
|
|
103135
103138
|
const all = listProjectTestFilesV1(workspace.root);
|
|
103136
103139
|
const relativePaths = new Map(
|
|
@@ -104006,6 +104009,10 @@ async function runTest(workspace, options, dependencies = {}) {
|
|
|
104006
104009
|
}
|
|
104007
104010
|
projectFingerprint = `sha256:${candidate.sourceHash}`;
|
|
104008
104011
|
const rawDocument = documentRecord(candidate.document);
|
|
104012
|
+
const compilationHash = projectCompilationHash(
|
|
104013
|
+
candidate.sourceHash,
|
|
104014
|
+
rawDocument
|
|
104015
|
+
);
|
|
104009
104016
|
phase = "select";
|
|
104010
104017
|
let selectedPaths;
|
|
104011
104018
|
try {
|
|
@@ -104023,7 +104030,7 @@ async function runTest(workspace, options, dependencies = {}) {
|
|
|
104023
104030
|
}
|
|
104024
104031
|
phase = "compile";
|
|
104025
104032
|
specs = selectedPaths.map(
|
|
104026
|
-
(path) => compileSpec(workspace, rawDocument, path,
|
|
104033
|
+
(path) => compileSpec(workspace, rawDocument, path, compilationHash)
|
|
104027
104034
|
);
|
|
104028
104035
|
let pattern = null;
|
|
104029
104036
|
if (options.testNamePattern !== null) {
|
|
@@ -104216,10 +104223,14 @@ async function inspectNeoTestCompilation(workspace, dependencies = {}) {
|
|
|
104216
104223
|
};
|
|
104217
104224
|
}
|
|
104218
104225
|
const document = documentRecord(candidate.document);
|
|
104226
|
+
const compilationHash = projectCompilationHash(
|
|
104227
|
+
candidate.sourceHash,
|
|
104228
|
+
document
|
|
104229
|
+
);
|
|
104219
104230
|
const errors = [];
|
|
104220
104231
|
for (const path of selectedPaths) {
|
|
104221
104232
|
try {
|
|
104222
|
-
compileSpec(workspace, document, path,
|
|
104233
|
+
compileSpec(workspace, document, path, compilationHash);
|
|
104223
104234
|
} catch (error) {
|
|
104224
104235
|
errors.push({
|
|
104225
104236
|
file: relative6(workspace.root, path).split(sep6).join("/"),
|
package/package.json
CHANGED
|
@@ -82,7 +82,7 @@ wrappers.
|
|
|
82
82
|
The marker near the top of `SKILL.md` must exactly match the package version:
|
|
83
83
|
|
|
84
84
|
```html
|
|
85
|
-
<!-- reviewed-through-cli: 0.24.
|
|
85
|
+
<!-- reviewed-through-cli: 0.24.3 -->
|
|
86
86
|
```
|
|
87
87
|
|
|
88
88
|
The quoted version above is checked too, so this instruction cannot go stale
|
|
@@ -115,5 +115,7 @@ npm run doctor
|
|
|
115
115
|
|
|
116
116
|
Also run contract/corpus checks, Monaco/browser parity, VSIX packaging, and
|
|
117
117
|
interactive sample no-op verification when the corresponding implementation
|
|
118
|
-
surface changes.
|
|
119
|
-
|
|
118
|
+
surface changes. Evaluator or candidate-materialization changes also require an
|
|
119
|
+
actual `neo test` run against the affected full-project candidate; focused
|
|
120
|
+
Vitest coverage does not replace that end-to-end command. Run `npm run doctor`
|
|
121
|
+
last; do not rerun successful suites only because doctor formatted files.
|