@neocompose/cli 0.60.1 → 0.60.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,10 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.60.2] - 2026-09-29
4
+
5
+ - A List field that overrides an abstract List getter can be pushed. List overrides no longer redeclare indexes in their records.
6
+ - `@index` on a List override reports an error at the member's source location. Declare indexes on the original List member.
7
+
3
8
  ## [0.60.1] - 2026-09-28
4
9
 
5
10
  - When push checks which classes a variant reference or a class-typed default may select, it finds the class's subclasses from one parent-to-children index. Before, it rescanned every class once per level of inheritance.
package/dist/neo.mjs CHANGED
@@ -39446,12 +39446,14 @@ function memberToDocumentFields(member, baseData3) {
39446
39446
  if (member.listKind === "unordered" || isOverride) {
39447
39447
  fields.listKind = member.listKind === "unordered" ? 1 : 0;
39448
39448
  }
39449
- fields.indexes = member.indexes.map(
39450
- (index) => omitUndefined({
39451
- schemaKey: index.schemaKey,
39452
- kind: index.unique ? 1 : void 0
39453
- })
39454
- );
39449
+ if (!isOverride) {
39450
+ fields.indexes = member.indexes.map(
39451
+ (index) => omitUndefined({
39452
+ schemaKey: index.schemaKey,
39453
+ kind: index.unique ? 1 : void 0
39454
+ })
39455
+ );
39456
+ }
39455
39457
  fields.columnSettings = member.columns.map(
39456
39458
  (column) => omitUndefined({
39457
39459
  memberKey: column.memberKey,
@@ -40465,7 +40467,6 @@ var init_codecs = __esm({
40465
40467
  "minValue",
40466
40468
  "maxValue",
40467
40469
  "decimalPoints",
40468
- "indexes",
40469
40470
  "columnSettings",
40470
40471
  "schemaKeyOrder",
40471
40472
  "classArguments",
@@ -111546,7 +111547,7 @@ function lowerClass(context, declaration) {
111546
111547
  }
111547
111548
  function lowerMember(context, ownerClass, declaration, id2, owner) {
111548
111549
  const member = lowerMemberKind(context, ownerClass, declaration, id2, owner);
111549
- assertListAnnotationPlacement(ownerClass, declaration, member.kind);
111550
+ assertListAnnotationPlacement(ownerClass, declaration, member);
111550
111551
  return member;
111551
111552
  }
111552
111553
  function lowerMemberKind(context, ownerClass, declaration, id2, owner) {
@@ -112208,8 +112209,16 @@ function memberKeyArgument(value, ownerClass, declaration) {
112208
112209
  }
112209
112210
  return expression.name;
112210
112211
  }
112211
- function assertListAnnotationPlacement(ownerClass, declaration, loweredKind) {
112212
- if (loweredKind === "list") return;
112212
+ function assertListAnnotationPlacement(ownerClass, declaration, member) {
112213
+ const loweredKind = member.kind;
112214
+ if (loweredKind === "list") {
112215
+ if (member.overrideOf !== null && hasAnnotation2(declaration.annotations, "index")) {
112216
+ throw new Error(
112217
+ `@index on ${ownerClass.name}.${declaration.name} cannot be declared on an override; indexes are inherited from the declaring List.`
112218
+ );
112219
+ }
112220
+ return;
112221
+ }
112213
112222
  if (hasAnnotation2(declaration.annotations, "index")) {
112214
112223
  throw new Error(
112215
112224
  `@index on ${ownerClass.name}.${declaration.name} is only valid on a List member; this declaration lowers to a ${loweredKind} member.`
@@ -142451,7 +142460,7 @@ var init_registry2 = __esm({
142451
142460
  "schema-contract/registry.mjs"() {
142452
142461
  "use strict";
142453
142462
  PROJECT_SCHEMA_CONTRACT = Object.freeze({
142454
- cliVersion: "0.60.1",
142463
+ cliVersion: "0.60.2",
142455
142464
  projectFileUploadBatchSize: 32,
142456
142465
  documentRecords: {
142457
142466
  member: {
@@ -151103,7 +151112,7 @@ There is no --keep-current: preserving current semantic state defines flatten.
151103
151112
  async function main() {
151104
151113
  const args = parseArgs(process.argv.slice(2));
151105
151114
  if (args.command === "--version") {
151106
- console.log("0.60.1");
151115
+ console.log("0.60.2");
151107
151116
  return;
151108
151117
  }
151109
151118
  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.60.1",
3
+ "version": "0.60.2",
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.60.1 -->
12
+ <!-- reviewed-through-cli: 0.60.2 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -101,7 +101,7 @@ wrappers.
101
101
  The marker near the top of `SKILL.md` must exactly match the package version:
102
102
 
103
103
  ```html
104
- <!-- reviewed-through-cli: 0.60.1 -->
104
+ <!-- reviewed-through-cli: 0.60.2 -->
105
105
  ```
106
106
 
107
107
  The quoted version above is checked too, so this instruction cannot go stale
@@ -140,7 +140,10 @@ undeclared static member of such a class is Session.
140
140
  `@column(member: Field, width: ..., visibility: ..., pin: ..., overflow: ...)`
141
141
  are repeatable List annotations. `member:` is a bare field name on the entry
142
142
  class. An index accepts a non-localizable string or single-select enum. A column
143
- may target `__other__` for the default layout of subclass-added fields.
143
+ may target `__other__` for the default layout of subclass-added fields. Declare
144
+ indexes only on the original List member. Overrides inherit its indexes, and
145
+ `@index` on an override is a source error. A List field may override an abstract
146
+ List getter.
144
147
 
145
148
  Use `.EnumCase` only when context fixes one enum type; otherwise write
146
149
  `EnumType.Case`. Defaults and settings must be statically analyzable.