Repository navigation
Conversation
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Comment |
|
On hold (2026-10-13), pending review. Edited 2026-10-14: first posted as "Deferred". I've proposed that Agent row changes use whole-group replacement expanded by the CLI into existing ops (comfy-cli #1004). If that is agreed, this row-level protocol is not a first-release prerequisite, and it stays a draft for a possible later fine-grained merge model. The proposal has not been agreed yet; see the architecture review. |
|
Closing. Agent row changes are moving to whole-group replacement (comfy-cli #1004), which the producer expands into existing ops, so the shared document doesn't need a row identity reader. If row-level operations come back, this can be reopened. |
ELI5
A row needs an identity that survives changes to its position. This prepares the shared-document reader to preserve and validate those identities, and prevents an ordinary row-count edit from leaving them attached to the wrong positions. Row insertion and deletion are not enabled by this PR.
Motivation
Existing DynamicGroup support addresses fields by numeric position. Atomic middle-row insertion/deletion needs stable identity before producers can safely send late edits or preserve surviving connections. This reader preparation is separated from the structural operations so the persisted manifest, schema boundary and validation can be reviewed first.
Summary
properties.dynamicGroupRows, mapping group names to ordered, distinct, nonempty producer-owned ID strings. Scope is node lifetime plus group. Do not assign IDs to untagged workflows.NodeSnapshot.dynamicGroupRows.Review and adoption
Stacked on #276 — fix: preserve DynamicGroup widget identities in documents, at
7c39f5bd8323b88bcf69d013bd13023e261a40b3.This is an unfinished row-operation feature and remains a draft. The manifest and schema boundary need maintainer/FE sign-off before adoption. No producer, agent tool or package release is enabled. Core object_info, numbered prompts and node execution contracts are unchanged.
The next stage must add operation-derived IDs, stable-ID field targets, atomic insertion/deletion, row-aware links/promotions, and admission distinct from accepted-op replay. Shared-definition writes retain the existing KA-1 guard.
Verification
npm test -- --maxWorkers=1: 1,844 passed, 2 existing skips.npm run test:exhaustive -- --maxWorkers=1: 2 passed, 2 other-tier skips.npm ci, build, typecheck, lint, purity, imports, pins, profile claims, CodeRabbit configuration, corpus verification and stateless checks: passed, serialized locally. Stateless probe: 18 passed; import graph: 27 modules, 99 dependencies.04a473c: build/purity/test and exhaustive jobs passed. CI separates the 18 stateless probes from the remaining 1,826 tests; both passed.Seven individual guard mutations, each caught by its targeted test
Each edit was applied separately and restored before the next run. The indicated failures are actual Vitest assertion output, not setup failures.
src/dynamic-group-rows.ts: removenew Set(ids).size !== ids.lengthexpected [Function] to throw an errorcount !== ids.lengthexpected [Function] to throw an errorsrc/applier.ts: disable the tagged scalar-resize guardcode: undefinedinstead ofcode: 'malformed_op'src/read.ts: replace frozensnapshot(rows, 1)withstructuredClone(rows)expected false to be truesrc/types.ts: change schema 6 back to 5expected 5 to be 6src/applier.ts: remove manifest preservation during scrubbingsrc/doc.ts: remove declared-controller membership checkexpected [Function] to throw an errorInvariants
KA-1/KA-4: semantic mutations and pre-write validation; rejection/retry/abort byte identity. KA-3/KA-13 and FC-3: portable, stateless, Yjs-only runtime. KA-6/FC-5: frozen snapshot data, no new mutation exports. KA-11: schema-6 fence and explicit old-document disposition. KA-12: supplied group metadata validates IDs/counts without replacing declared widget mapping. FC-8: reader does not invent row IDs or rewrite values from defaults. FC-10/KA-12's provisional manifest/admission extension is registered in
docs/decisions/EXCEPTIONS.md; no approved deviation is claimed.Provenance