@neocompose/cli 0.42.0 → 0.42.1

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,18 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.42.1] - 2026-09-02
4
+
5
+ ### Fixed
6
+
7
+ - `neo status` reported a phantom parent update plus a child create for every
8
+ packed child of a row authored directly in a List or Dictionary member's
9
+ declaration default (`PlacementTiles = [ new NeoObjectPlacementTile { Cell =
10
+ new(0, 1) } ]` in a class file). The shared packed-value fold decides what
11
+ packs by walking the value graph from its roots, and that walk seeded a
12
+ declaration default only for Class members, so an entry row's children had
13
+ no placement and stayed sparse where the server had packed them. The walk now
14
+ seeds List and Dictionary declaration defaults too.
15
+
3
16
  ## [0.42.0] - 2026-09-02
4
17
 
5
18
  ### Fixed
package/dist/neo.mjs CHANGED
@@ -67138,6 +67138,21 @@ function findOwningMembersForValues(document, valueIds, additionalRoots, travers
67138
67138
  rows.push(value);
67139
67139
  }
67140
67140
  }
67141
+ let declaringClassIdByMemberId = null;
67142
+ const declaringClassEnv = (memberId) => {
67143
+ if (declaringClassIdByMemberId === null) {
67144
+ declaringClassIdByMemberId = /* @__PURE__ */ new Map();
67145
+ for (const schemaClass2 of document.classes) {
67146
+ for (const declaredId of Object.values(schemaClass2.schema)) {
67147
+ if (declaringClassIdByMemberId.has(declaredId)) continue;
67148
+ declaringClassIdByMemberId.set(declaredId, schemaClass2.id);
67149
+ }
67150
+ }
67151
+ }
67152
+ const classId = declaringClassIdByMemberId.get(memberId);
67153
+ if (classId === void 0) return envFromStamp(void 0);
67154
+ return resolveInstanceEnv(classId, void 0, document.classes);
67155
+ };
67141
67156
  const queue = [];
67142
67157
  const enqueueClassInstanceChildren = (args) => {
67143
67158
  const merged = mergeStoredInstanceSchema(
@@ -67191,18 +67206,57 @@ function findOwningMembersForValues(document, valueIds, additionalRoots, travers
67191
67206
  }
67192
67207
  const defaultValue = member.defaultValue;
67193
67208
  if (defaultValue == null) continue;
67194
- if (!isMemberClassBase(member)) continue;
67195
- if (!isRecordValue(defaultValue.value)) continue;
67196
- enqueueClassInstanceChildren({
67197
- member,
67198
- record: defaultValue.value,
67199
- effectiveClassId: defaultValue.classId ?? member.classId,
67200
- // A declaration default is never itself an override graph (D10).
67201
- insideAnimationOverrideGraph: false,
67202
- // The default graph hangs off the MEMBER record, so its children have no
67203
- // owning value row (P76: they stay physically sparse).
67204
- parentValueId: null
67205
- });
67209
+ if (isMemberClassBase(member)) {
67210
+ if (!isRecordValue(defaultValue.value)) continue;
67211
+ enqueueClassInstanceChildren({
67212
+ member,
67213
+ record: defaultValue.value,
67214
+ effectiveClassId: defaultValue.classId ?? member.classId,
67215
+ // A declaration default is never itself an override graph (D10).
67216
+ insideAnimationOverrideGraph: false,
67217
+ // The default graph hangs off the MEMBER record, so its children have
67218
+ // no owning value row (P76: they stay physically sparse).
67219
+ parentValueId: null
67220
+ });
67221
+ continue;
67222
+ }
67223
+ let entryMemberId;
67224
+ let entryValueIds;
67225
+ if (isMemberDictionaryBase(member)) {
67226
+ if (!isRecordValue(defaultValue.value)) continue;
67227
+ entryMemberId = member.entryMemberId;
67228
+ entryValueIds = Object.values(defaultValue.value);
67229
+ } else if (isMemberListBase(member)) {
67230
+ if (listKindOf(member) === 1 /* Unordered */) continue;
67231
+ if (!isStringListValue(defaultValue.value)) continue;
67232
+ entryMemberId = member.entryMemberId;
67233
+ entryValueIds = defaultValue.value;
67234
+ } else {
67235
+ continue;
67236
+ }
67237
+ const entryMemberRecord = membersById2.get(entryMemberId);
67238
+ if (entryMemberRecord === void 0) continue;
67239
+ let entryMember;
67240
+ try {
67241
+ entryMember = substituteMember(
67242
+ entryMemberRecord,
67243
+ declaringClassEnv(member.id),
67244
+ document.members
67245
+ );
67246
+ } catch {
67247
+ continue;
67248
+ }
67249
+ for (const entryValueId of entryValueIds) {
67250
+ queue.push({
67251
+ member: entryMember,
67252
+ memberRecordId: entryMemberRecord.id,
67253
+ id: entryValueId,
67254
+ // A declaration default is never itself an override graph (D10).
67255
+ insideAnimationOverrideGraph: false,
67256
+ // Reached from the MEMBER record: no owning value row.
67257
+ parentValueId: null
67258
+ });
67259
+ }
67206
67260
  }
67207
67261
  const visited = /* @__PURE__ */ new Set();
67208
67262
  for (let cursor = 0; cursor < queue.length; cursor += 1) {
@@ -124187,7 +124241,7 @@ var init_registry2 = __esm({
124187
124241
  PROJECT_SCHEMA_CONTRACT = Object.freeze({
124188
124242
  formatVersion: 4,
124189
124243
  contractVersion: "4.1",
124190
- cliVersion: "0.42.0",
124244
+ cliVersion: "0.42.1",
124191
124245
  projectFileUploadBatchSize: 32,
124192
124246
  documentRecords: {
124193
124247
  member: {
@@ -131007,7 +131061,7 @@ There is no --keep-current: preserving current semantic state defines flatten.
131007
131061
  async function main() {
131008
131062
  const args = parseArgs(process.argv.slice(2));
131009
131063
  if (args.command === "--version") {
131010
- console.log("0.42.0");
131064
+ console.log("0.42.1");
131011
131065
  return;
131012
131066
  }
131013
131067
  if (args.command === null || args.command === "help" || args.command === "--help" || args.command === "-h") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neocompose/cli",
3
- "version": "0.42.0",
3
+ "version": "0.42.1",
4
4
  "description": "Neo Compose native project-source CLI with bidirectional sync.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -9,7 +9,7 @@ description: >-
9
9
  `@neocompose/cli` or `node cli/bin/neo.mjs` in the neo-compose repository.
10
10
  ---
11
11
 
12
- <!-- reviewed-through-cli: 0.42.0 -->
12
+ <!-- reviewed-through-cli: 0.42.1 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -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.42.0 -->
86
+ <!-- reviewed-through-cli: 0.42.1 -->
87
87
  ```
88
88
 
89
89
  The quoted version above is checked too, so this instruction cannot go stale