@neocompose/cli 0.26.3 → 0.26.4
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,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.26.4] - 2026-08-10
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Read an omitted nullable member on a newly constructed class as `null`
|
|
8
|
+
instead of throwing a missing-object-key error. `neo test` can now assert
|
|
9
|
+
explicit nullable defaults without requiring an otherwise-empty value row.
|
|
10
|
+
- Let local candidate validation resolve an image or audio file created in the
|
|
11
|
+
same source change. `neo doctor`, `neo test`, and push dry runs now preserve
|
|
12
|
+
the pending file identity while rehearsing the uploaded project-file row.
|
|
13
|
+
|
|
3
14
|
## [0.26.3] - 2026-08-10
|
|
4
15
|
|
|
5
16
|
### Changed
|
package/dist/neo.mjs
CHANGED
|
@@ -61908,6 +61908,7 @@ function dispatchSchemaMember(receiver, schemaKey, ctx) {
|
|
|
61908
61908
|
};
|
|
61909
61909
|
}
|
|
61910
61910
|
if (!Object.prototype.hasOwnProperty.call(receiver, schemaKey)) {
|
|
61911
|
+
if (!member.required) return { kind: "ok", value: null };
|
|
61911
61912
|
return { kind: "no-info", matchedMember: true };
|
|
61912
61913
|
}
|
|
61913
61914
|
const at = receiver[schemaKey];
|
|
@@ -83278,6 +83279,15 @@ function applyProjectVersionWriteChanges(document, changes) {
|
|
|
83278
83279
|
"constructor"
|
|
83279
83280
|
),
|
|
83280
83281
|
values: applyArrayChanges(document.values ?? [], changes, "value"),
|
|
83282
|
+
// Project-file staging finalizes pending uploads before schema
|
|
83283
|
+
// preparation. Defaults and authored instance graphs may reference a file
|
|
83284
|
+
// created by the same source transaction, so every construction pass must
|
|
83285
|
+
// see that finalized row in its post-write document.
|
|
83286
|
+
projectFiles: applyArrayChanges(
|
|
83287
|
+
document.projectFiles ?? [],
|
|
83288
|
+
changes,
|
|
83289
|
+
"project-file"
|
|
83290
|
+
),
|
|
83281
83291
|
internalRecordRelations: applyArrayChanges(
|
|
83282
83292
|
document.internalRecordRelations ?? [],
|
|
83283
83293
|
changes,
|
|
@@ -101055,7 +101065,11 @@ async function prepareLocalPushArtifactsV4(workspace, status, onPhase = () => vo
|
|
|
101055
101065
|
);
|
|
101056
101066
|
preparedChanges = assertServerPreparationSucceeds({
|
|
101057
101067
|
workspace,
|
|
101058
|
-
changes:
|
|
101068
|
+
changes: completeLocallyStagedProjectFileChanges({
|
|
101069
|
+
projectId: workspace.config.projectId,
|
|
101070
|
+
changes: transportChanges,
|
|
101071
|
+
stagedRecordIds: new Set(preparedFiles.map((file) => file.recordId))
|
|
101072
|
+
}),
|
|
101059
101073
|
authoredValueSeeds: transportSeeds,
|
|
101060
101074
|
sourceByRecord: status.reconstructed,
|
|
101061
101075
|
localInitializerMaterialization: pendingAssignment.localInitializerMaterialization,
|
|
@@ -101178,6 +101192,33 @@ async function prepareLocalCandidateV4(workspace, options = {}) {
|
|
|
101178
101192
|
preparedLocal
|
|
101179
101193
|
};
|
|
101180
101194
|
}
|
|
101195
|
+
function completeLocallyStagedProjectFileChanges(args) {
|
|
101196
|
+
return args.changes.map((change) => {
|
|
101197
|
+
if (!args.stagedRecordIds.has(change.recordId)) return change;
|
|
101198
|
+
if (change.recordKind !== "project-file") {
|
|
101199
|
+
throw new Error(
|
|
101200
|
+
`Staged project file ${change.recordId} matched a ${change.recordKind} change.`
|
|
101201
|
+
);
|
|
101202
|
+
}
|
|
101203
|
+
if (!isObjectRecord2(change.nextData)) {
|
|
101204
|
+
throw new Error(
|
|
101205
|
+
`Staged project file ${change.recordId} has no local source record.`
|
|
101206
|
+
);
|
|
101207
|
+
}
|
|
101208
|
+
const completed = {
|
|
101209
|
+
...change,
|
|
101210
|
+
nextData: {
|
|
101211
|
+
...change.nextData,
|
|
101212
|
+
id: change.recordId,
|
|
101213
|
+
projectId: args.projectId,
|
|
101214
|
+
status: "uploaded",
|
|
101215
|
+
storageKey: `local-candidate/${change.recordId}`,
|
|
101216
|
+
storageETag: "local-candidate"
|
|
101217
|
+
}
|
|
101218
|
+
};
|
|
101219
|
+
return completed;
|
|
101220
|
+
});
|
|
101221
|
+
}
|
|
101181
101222
|
function transportChangesForStatus(status) {
|
|
101182
101223
|
return status.changes.map((change) => ({
|
|
101183
101224
|
recordKind: change.recordKind,
|
|
@@ -102632,7 +102673,7 @@ var init_registry2 = __esm({
|
|
|
102632
102673
|
PROJECT_SCHEMA_CONTRACT = Object.freeze({
|
|
102633
102674
|
formatVersion: 3,
|
|
102634
102675
|
contractVersion: "3.9",
|
|
102635
|
-
cliVersion: "0.26.
|
|
102676
|
+
cliVersion: "0.26.4",
|
|
102636
102677
|
projectFileUploadBatchSize: 32,
|
|
102637
102678
|
documentRecords: {
|
|
102638
102679
|
member: {
|
|
@@ -109197,7 +109238,7 @@ There is no --keep-current: preserving current semantic state defines flatten.
|
|
|
109197
109238
|
async function main() {
|
|
109198
109239
|
const args = parseArgs(process.argv.slice(2));
|
|
109199
109240
|
if (args.command === "--version") {
|
|
109200
|
-
console.log("0.26.
|
|
109241
|
+
console.log("0.26.4");
|
|
109201
109242
|
return;
|
|
109202
109243
|
}
|
|
109203
109244
|
if (args.command === null || args.command === "help" || args.command === "--help" || args.command === "-h") {
|
package/package.json
CHANGED
|
@@ -83,7 +83,7 @@ wrappers.
|
|
|
83
83
|
The marker near the top of `SKILL.md` must exactly match the package version:
|
|
84
84
|
|
|
85
85
|
```html
|
|
86
|
-
<!-- reviewed-through-cli: 0.26.
|
|
86
|
+
<!-- reviewed-through-cli: 0.26.4 -->
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
The quoted version above is checked too, so this instruction cannot go stale
|