Frontmatter
| title | fix(selection): support collection item ids (#5598) |
| author | neo-gpt |
| state | Merged |
| createdAt | Jun 23, 2026, 6:59 AM |
| updatedAt | Jun 24, 2026, 7:19 PM |
| closedAt | Jun 24, 2026, 7:18 PM |
| mergedAt | Jun 24, 2026, 7:18 PM |
| branches | dev ← codex/5598-selection-model-collection |
| url | https://github.com/neomjs/neo/pull/13908 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |
Merged

tobiu
CHANGES_REQUESTED reviewed on Jun 23, 2026, 9:57 AM
https://github.com/neomjs/neo/pull/13908/changes#diff-e8b6a8f5d5ee502cd9c02ef290c1494ae8cda0a8a18801ffa8cc0b4670f1603a => messes with block-formatting

neo-gpt
commented on Jun 23, 2026, 7:59 PM
Author update for the block-formatting review:
- Pushed rebased head
b8c57795d92b5b63c63fbeb3fc4bd44740e074fd. - Addressed the requested block-formatting issue by wrapping the long collection-id fallback ternary in
src/selection/Model.mjs. - No behavior change: this is formatting-only on top of the existing selection collection-id fix.
Validation on the rebased head:
npm run test-unit -- test/playwright/unit/selection/GalleryInternalId.spec.mjs test/playwright/unit/form/field/TimeFieldInternalId.spec.mjs-> 4 passed.npm run agent-preflight -- src/selection/Model.mjs src/form/field/Time.mjs test/playwright/unit/selection/GalleryInternalId.spec.mjs-> passed.git diff --check-> passed.
CI is running on the pushed head.

tobiu
CHANGES_REQUESTED reviewed on Jun 23, 2026, 9:25 PM
let me = this,
{record} = data,
multiple spots. this is not align on colon

neo-gpt
commented on Jun 24, 2026, 12:33 PM
Addressed the requested declaration-alignment cleanup on head 9fbdd3712c19abf2ebde4fcbe18452b4b9e24d91.
Change is formatting-only in src/selection/Model.mjs; no selection behavior changed.
Validation:
node --check src/selection/Model.mjs-> passednpm run test-unit -- test/playwright/unit/selection/GalleryInternalId.spec.mjs test/playwright/unit/form/field/TimeFieldInternalId.spec.mjs-> 4 passednpm run agent-preflight -- --no-fix src/selection/Model.mjs-> passedgit diff --check-> passed
CI is running on the pushed head.

tobiu
CHANGES_REQUESTED reviewed on Jun 24, 2026, 2:41 PM
our linter might not be sufficient. it is not block-formatted. the = needs to stay at the exact same char count for blocks.
-let me = this, // this was correct
+let me = this,
{record} = data,
oldValue = me.value,
{value} = record;-let me = this, // this was correct
+let me = this,
{list} = me,
id = list.getItemId(me.value);
=> there is more

neo-gpt
commented on Jun 24, 2026, 6:39 PM

tobiu
APPROVED reviewed on Jun 24, 2026, 7:18 PM
No review body provided.
Resolves #5598
Neo.selection.Modelnow normalizes incoming selection inputs through helper methods so collection-backed list items without the syntheticisRecordflag resolve to the view-owned item id for bothselect()anddeselect().TimeFieldno longer stamps that workaround onto its collection rows, and the regression coverage exercises the raw collection-item path directly.Evidence: L2 unit/static coverage satisfies the close-target behavior; L3 full-suite evidence was attempted and is blocked by unrelated AI/Memory-Core environment failures in this checkout. Residual: none for #5598.
Deltas from ticket
form.field.TimeisRecordworkaround after fixing the shared selection conversion path.Test Evidence
npm run agent-preflight -- src/selection/Model.mjs src/form/field/Time.mjs test/playwright/unit/selection/GalleryInternalId.spec.mjspassed.git diff --cached --checkpassed before commit.npm run test-unit -- test/playwright/unit/selection/GalleryInternalId.spec.mjs test/playwright/unit/form/field/TimeFieldInternalId.spec.mjspassed: 4 passed.npm run test-unit -- test/playwright/unit/selectionpassed before the TimeField workaround removal: 3 passed.npm run test-unit -- test/playwright/unit/data/TreeStoreValueBanding.spec.mjspassed: 3 passed, after isolating one unrelated full-suite failure.npm run test-unitwas attempted: 4752 passed, 5 skipped, 28 failed; the failures were outside this selection/TimeField surface and included missingGEMINI_API_KEY, Memory-Core/KB timeouts, and AI service environment failures.Post-Merge Validation
form.field.Timepicker list selection in a real app runtime.Commit
f2e6d5e394—fix(selection): support collection item ids (#5598)Authored by Euclid (GPT-5, Codex Desktop). Session db5b2ecf-db91-4b7d-9498-ccef00426a1c.
Review Response — block formatting
[ADDRESSED] Restored the declaration block alignment called out in
src/form/field/Time.mjs, includingonListItemClick()andselectCurrentListItem().[ADDRESSED] Corrected the remaining declaration-block drift in
src/selection/Model.mjsand fixedcheck-block-alignment.mjsso destructuring continuations participate in keyword-head comma-block alignment instead of being skipped mid-block.Commit:
869cbf75c1.Validation:
node buildScripts/util/check-block-alignment.mjs src/form/field/Time.mjs src/selection/Model.mjs test/playwright/unit/ai/buildScripts/util/check-block-alignment.spec.mjs test/playwright/unit/selection/GalleryInternalId.spec.mjs— passedgit diff --check— passednode --check buildScripts/util/check-block-alignment.mjs— passednode --check src/selection/Model.mjs— passednpm run test-unit -- test/playwright/unit/ai/buildScripts/util/check-block-alignment.spec.mjs test/playwright/unit/selection/GalleryInternalId.spec.mjs— 26 passednpm run test-unit -- test/playwright/unit/form/field/TimeFieldInternalId.spec.mjs— 1 passednpm run agent-preflight -- --no-fix buildScripts/util/check-block-alignment.mjs src/form/field/Time.mjs src/selection/Model.mjs test/playwright/unit/ai/buildScripts/util/check-block-alignment.spec.mjs test/playwright/unit/selection/GalleryInternalId.spec.mjs— passedCI is queued on the pushed head; re-review should wait for those checks to finish.
@neo-gptcommented on 2026-06-24T17:08:24ZReview Response — block-formatting linter hole
[ADDRESSED] The remaining
src/selection/Model.mjsregression was thetoJSON()lone-keyword declaration block:me = thishad been collapsed tome = thisbefore a block-openingitems = ... {sibling.[ADDRESSED] The linter was also wrong: it explicitly excluded block-opening values from legacy lone-keyword declaration blocks, so it could not catch this exact drift. Commit
e909b4b382removes that exclusion and pins the regression incheck-block-alignment.spec.mjs.Validation:
node --check buildScripts/util/check-block-alignment.mjs— passednode --check src/selection/Model.mjs— passednode buildScripts/util/check-block-alignment.mjs src/form/field/Time.mjs src/selection/Model.mjs test/playwright/unit/ai/buildScripts/util/check-block-alignment.spec.mjs test/playwright/unit/selection/GalleryInternalId.spec.mjs— passedgit diff --checkandgit diff --cached --check— passednpm run test-unit -- test/playwright/unit/ai/buildScripts/util/check-block-alignment.spec.mjs test/playwright/unit/selection/GalleryInternalId.spec.mjs test/playwright/unit/form/field/TimeFieldInternalId.spec.mjs— 27 passednpm run agent-preflight -- --no-fix buildScripts/util/check-block-alignment.mjs src/form/field/Time.mjs src/selection/Model.mjs test/playwright/unit/ai/buildScripts/util/check-block-alignment.spec.mjs test/playwright/unit/selection/GalleryInternalId.spec.mjs— passedCI is queued on the pushed head
e909b4b3828e642fe113f2f768f6bf8de44c6d8b.