Allow explicit date changes while editing an existing event #1
Open
opened 2026-09-13 13:34:38 +00:00 by kayg
·
53 comments
No Branch/Tag specified
dev
wave19/desktop-test
wave19/per-space-state
wave19/first-space-integration
wave19/first-space-draft-transfer
wave19/block-editor-craft
codex/wip/root-conflict-snapshot-20260914
wave12/first-space-draft-transfer
wave14/editor-overnight-combined
wave17/editor-diagnostics-3bbb
wave16/code-block-polish
wave16/image-controls
wave16/event-title-crash-control
wave16/image-preview-dispatch-repair
wave16/event-title-lifecycle-qa
wave16/editor-list-refinements
wave17/editor-layout-correction
wave16/event-edit-date
wave16/note-title-presentation
wave16/editor-final-combined
wave18/document-chrome-repair
wave17/cross-event-drop
wave16/editor-structural-combined
wave16/editor-hover-margins
wave16/editor-caret-relocation-perf
wave16/inspector-polish
wave16/image-preview-integration
wave16/english-transcription
wave16/document-background-edge
wave16/sidebar-live-layout
wave15/image-preview-ownership-repair
wave15/editor-handle-six-dot
wave15/titlebar-public-repair
wave15/sidebar-initial-restoration
wave15/editor-formatting-tooltips
wave15/editor-drag-mounted-repair
wave15/image-preview-foundation-isolated
wave15/editor-block-drag-feedback
wave15/sidebar-attachment-layout
wave14/editor-inline-plain-fastpath
wave14/editor-rendered-paste-replacement
wave14/clipboard-awaited-shutdown
wave14/editor-selectall-toolbar-perf
fix/clipboard-body-undo-group
diagnostic/clipboard-insertion-491
wave14/sidebar-unselected-drag-v2
diagnostic/sidebar-unselected-drag-trace
diagnostic/clipboard-phase-0225
wave14/sidebar-prime-access
wave14/nested-projection-handle-test-fix
wave14/sidebar-unselected-event-drag
fix/clipboard-task-ownership-6318
fix/editor-resource-url-invalidation
codex/wip/editor-handle-render-diagnostic-20260914
fix/central9c9-clipboard-crash
codex/wip/editor-handle-diagnostic-20260914
wave14/sidebar-event-runtime-repair
wave14/nested-projection-runtime-fix
wave14/sidebar-event-test-fixtures
wave14/sidebar-attachment-overlap
integration/rendered-image-clipboard
wave14/sidebar-event-preview-integration
wave14/editor-nested-list-integrate
wave14/editor-nested-list-projection
task/rendered-image-clipboard
wave14/sidebar-paste-preview-integration
wave14/sidebar-event-day-dnd
wave14/editor-preview-next
wave14/editor-list-handle-integrated
task/native-basic-paste
wave14/editor-list-keyboard-audit
task/native-clipboard-contract
codex/wip/editor-handle-geometry-20260914
wave14/editor-block-drag
wave14/editor-drag-integrated
wave14/editor-empty-marker-map-publication
wave14/editor-empty-marker-runtime-diag
wave14/editor-empty-marker-preview
wave14/editor-empty-marker-host-repro
wave14/editor-empty-marker-probe
codex/wip/editor-hr-leaf-fix-20260914
wave14/event-attachment-drop
wave14/editor-empty-marker-paint
wave14/editor-drop-list-preview
wave14/editor-finder-drop
wave14/editor-rule-caret
wave14/editor-list-enter-next
wave14/editor-image-qa
wave14/editor-mode-commands
wave13/editor-code-performance-preview
wave14/sidebar-overlap-repair
wave13/cross-day-compile-repair
wave13/spotlight-retry
wave13/editor-chrome-runtime-repair
wave13/editor-inline-fast-path
codex/wip/detached-87aa-20260914
wave12/editor-viewport-polish
wave12/craft-code-block-polish
wave12/editor-asset-return-preview
wave12/voice-polish-preview
wave12/editor-native-return-runtime-repair
wave12/editor-asset-focus
wave12/cross-day-reviewed-integration
wave12/optional-voice-provider-finish
wave12/event-move-descriptor-compile-fix
wave12/editor-image-geometry-preview
wave12/editor-native-return-undo-repair
wave12/image-native-geometry-fixture
wave12/editor-pattern-preview
wave12/editor-bullet-continuation
wave12/editor-top-chrome
wave12/voice-composer-restart
wave12/speech-variable-buffer-repair
wave12/editor-image-preview
wave12/event-move-descriptor-scale
wave12/editor-image-geometry
wave12/afternoon-ui-preview
wave12/sidebar-hosted-bounds-repair
wave12/sidebar-overlap-live
wave12/speech-e2e-verification
wave12/mentions-polish-finish
wave12/editor-structural-range-repair
wave12/sidebar-fade-desktop-preview
wave12/sidebar-design-ledger
wave12/voice-assets-physical-fixtures
wave12/native-event-marker-polish
wave12/sidebar-fade-undo-preview
wave12/event-move-fence-corrections
wave12/sidebar-fade-boundary-repair
wave12/parent-space-entry-integration
wave12/editor-undo-group-repair
wave12/native-event-row-performance
wave12/parent-swipe-integration
wave12/metadata-noteid-test-fix
wave12/space-composer-generation-fix
wave12/voice-lifecycle-clock-fixture
wave12/sidebar-child-binding
wave12/voice-provider-pool-preview
wave12/composer-recording-preview
wave12/event-cross-day-store-corrections
wave12/voice-async-test-locks
wave12/speech-buffer-lease-fix
wave12/composer-no-top-readouts
wave12/sidebar-child-target
wave12/space-required-composer
wave12/editor-correctness-preview
wave12/voice-provider-compile-corrected
wave12/event-move-integration
wave12/voice-assets-compile-fix
wave12/parakeet-compile-fix
wave12/note-metadata-flexibility
wave12/sidebar-event-drag-drop
wave12/editor-paste-source-guard
wave12/note-asset-import-safety-causal-tests
wave12/note-asset-import-safety
wave12/editor-readonly-command-guards
wave12/voice-provider-integration
wave12/editor-format-flexibility
wave12/hosted-sidebar-ui-sdk-fix
wave12/event-cross-day-store
wave12/voice-app-wiring
wave12/voice-parakeet-assets
wave12/voice-hosted-await-fix
wave12/event-edit-date-guard
wave12/event-cross-day-app
wave12/network-client-entitlement
wave12/sidebar-row-overlap
wave12/voice-settings-surface
wave12/parakeet-capture-adapter
wave12/task-marker-normalization
wave12/voice-polish-integration
wave12/voice-capture-hardening
wave12/voice-provider-settings-plan
wave12/copied-space-editor-io
wave12/hosted-background-sendability
wave12/voice-stop-nlp
wave12/voice-fixture-roots
wave12/voice-claim-collision
wave12/sidebar-add-swipe-plan
wave12/copied-space-app-wiring-plan
wave12/voice-fence-stat-compilefix
wave12/composer-dismiss-crash-hotfix
wave12/voice-retainer-defer-fix
wave12/overnight-recovery-space-preview
wave12/background-checkpoint-compilefix
wave12/copied-space-enumeration-fix
wave12/copied-space-local-state
wave12/voice-fence-fixture-fix
wave12/voice-manifest-fd-fix
wave12/voice-recovery-publication-proof
wave12/voice-retainer-bytecount-fix
wave12/overnight-navigation-background-compilefix
wave12/navigation-work-diagnostic
wave12/overnight-navigation-background-preview
wave12/background-import-bounds
wave12/overnight-voice-lifecycle-preview
wave12/voice-frozen-claim
wave12/voice-input-seam
wave12/voice-recovery-compile-fix
wave12/voice-terminal-cleanup-plan
wave12/voice-recovery-activation-plan-current
wave12/overnight-runtime-probe-preview
wave12/overnight-sandbox-startup-preview
wave12/startup-geometry-diagnostic
wave12/voice-source-sandbox-fix
wave12/image-root-sandbox-fix
wave12/perf-scroll-zero-args
wave12/overnight-document-geometry-preview
wave12/native-document-geometry-diagnostic
wave12/overnight-draft-root-preview
wave12/voice-recovery-c-session-fence
wave12/draft-root-direct-open
wave12/hosted-single-module-linkage
wave12/overnight-voice-recovery-preview
wave12/voice-recovery-checkpoint-a-finalization
wave12/copied-space-local-state-plan
wave12/overnight-refresh-hosted-preview
wave12/incremental-refresh-bounded-load
wave12/raw-source-reconciliation-test-fix
wave12/overnight-rendering-startup-preview
wave12/draft-root-diagnostic
wave12/day-event-bulk-load
wave12/speech-asset-install-test-preview
wave12/hr-material-contrast
wave12/height-clamp-followup
wave12/voice-recovery-checkpoint-a-corrections
wave12/overnight-cstore-caret-preview
wave12/voice-recovery-checkpoint-a
wave12/editor-adjacent-caret-boundary-v3
wave12/voice-recovery-index-query-fix
wave12/editor-adjacent-caret-boundary-v2
wave12/voice-recovery-index-query
wave12/startup-collector-empty-args
wave12/editor-adjacent-caret-boundary
wave12/overnight-hr-storage-preview
wave12/hr-native-diagnostic-followup
wave12/hr-native-diagnostic
wave12/overnight-storage-settings-preview
wave12/snapshot-native-move-followup
wave12/speech-local-fallback
wave12/settings-stream-test-compilefix
wave12/snapshot-path-identity-followup
wave12/corefrontmatter-join-fastpath
wave12/speech-fallback-plan
wave12/overnight-caret-control-registry
wave12/editor-registry-compilefix
wave12/voicea-test-compilefix
wave12/overnight-caret-control-ready
wave12/voicea-enum-compilefix
wave12/voice-recovery-phaseb
wave12/overnight-caret-control
wave12/overnight-polish-storage-preview
wave12/voicea-foundation-compilefix
wave12/snapshot-path-identity
wave12/overnight-native-polish-preview
wave12/hr-rule-geometry
wave12/speech-conversion-fixture
wave12/editor-deferred-caret
wave12/overnight-hosted-lifetime-preview
wave12/marker-glyph-clipping
wave12/voice-recovery-activation
wave12/overnight-package-fixture-preview
wave12/overnight-lifetime-voice-preview
wave12/app-tests-cleanup
wave12/snapshot-physical-fixtures
wave12/event-date-title-punctuation
wave12/overnight-lifetime-voice-plan
wave12/overnight-draw-before
wave12/overnight-picker-event-preview
wave12/settings-watcher
wave12/event-date-title-fix
wave12/note-background-picker-fix
wave12/editor-lifetime
wave12/overnight-draw-preview
wave12/snapshot-attribute-compile-fix
wave12/editor-accepted-draw-trace
wave12/overnight-runtime-preview
wave12/composer-test-concurrency-fix
wave12/editor-caret-performance
wave12/overnight-snapshot-correction
wave12/settings-model-callbacks
wave12/overnight-full-preview
wave12/overnight-store-preview
wave12/rendered-bullet-fix
wave12/settings-document-fixture-fix
wave12/composer-task-pill-ui
wave12/overnight-roadmap-preview
wave12/task-tag-readouts
wave12/event-snapshot-dependency
wave12/h1-strict-preview
wave12/settings-store-await-fix
wave12/settings-store-test-fix
wave12/overnight-pill-preview
wave12/composer-pill-accent-fix
wave12/composer-pill-final
wave11/sidebar-cold-index-prime
wave12/overnight-preview
wave11/voice-draft-recovery
wave11/voice-transcription-finish
wave11/note-save-rename
wave11/task-event-preview
wave11/settings-enabled-plugin-section
wave11/pill-fade-preview
wave11/sidebar-top-fade-regression
wave11/event-sidebar-preview
wave11/composer-pill-restore
wave11/settings-plugins-portability
wave11/composer-hash-semantics
wave11/event-composer-edit
wave11/sidebar-spacing-followup
wave11/editor-performance-evidence
wave11/voice-preview
wave11/voice-stop-repair
wave11/polish-verification
wave11/plugins-settings-ui
wave11/bullet-list-regression
wave11/sidebar-insert-stability
wave11/polish-preview
wave11/document-style-repair
wave11/composer-native-readouts
wave11/mentions-disclosure-motion
wave11/sidebar-swipe-compact
wave11/legacy-helper-path-fix
wave11/persistence-integration
wave11/capsule-instant-presentation
wave11/native-link-activation
wave11/desktop-integration
wave11/link-integration
wave11/synthetic-note-names
wave11/composer-overflow-actions
wave11/legacy-root-links
wave11/note-title-punctuation
wave11/note-title-metadata
wave11/spotlight-navigation
wave11/spotlight-trace-baseline
wave11/note-name-collisions
wave11/identity-query-indexes
wave11/note-heading-title
wave11/capsule-scroll-chrome
wave11/sidebar-context-menu
wave11/spotlight-metadata
wave11/rename-link-repair
wave11/analytics-native
wave11/sidebar-scroll-restoration
wave11/sidebar-bottom-spacing
wave11/capsule-optical-alignment
wave11/markdown-link-resolution
wave11/command-results-layout
wave11/capsule-outside-dismissal
wave11/events-folder
wave11/capsule-query-retention
wave11/capsule-snap-preview
wave11/composer-controls-preview
wave11/sidebar-fade-preview
wave11/selection-lookup
wave11/note-creation-routing
wave11/sidebar-header-spacing
wave11/block-editor
wave11/space-onboarding
wave11/space-terminology
wave4/voice
wave2/search
wave4/glur-probe
wave7/cli-integration
wave12/inspector-style
wave4/document-presentation
wave2/cli
wave2/sidebar
No results found.
Labels
Clear labels
No items
No labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
kayg/calternal-macos#1
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Request and current status
New dates such as today are rejected during event editing. Implementation active; review found unreachable move routing, literal date-like title risks, and unsafe pending retry.
Acceptance
Move intentionally dated edits; preserve literal date-like titles, UUID, attachments, backlinks and CAS. Strip only new date directives. Replay pending operations with the same operation ID. Test and deliver without losing open drafts.
Keep open until the user-facing outcome is verified in a delivered build. Source review or a successful build alone is not completion.
Event edit date move status (wave16/event-edit-date)
Implemented candidate:
Reviewer findings:
Plan:
Role: reviewer (
/root/event_date_review)Worktree:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-dateBranch:
wave16/event-edit-dateState: CHANGES REQUESTED after revised-diff review
Findings, in severity order:
P1 —
App/Sources/Model/AppModelSidebarGestures.swift:511-539After the first Store
.pending, the commit path retries only once and that replay remains in the caller's cancellable task. A second.pending, cancellation, or replay error throws toComposerModel, which restores the old source edit even though the event-move journal may already own partially published source, destination, and backlink writes. This is a reachable Store outcome:VaultEventMove.resumeEventMovereturns.pendingagain for everyVaultEventMoveBatchErroratSources/CalternalStore/VaultEventMove.swift:1323-1324.Fix: after observing any
.pending, keep the sameoperationIDunder a recovery owner that cannot return a retryable stale composer edit until the Store reaches a terminal committed/conflict result. Use bounded backoff. If a persistent failure must be surfaced, preserve journal ownership and prevent the composer from retrying the old source transaction. Cover two consecutive pending results and cancellation after the first pending.P2 —
Sources/CalternalComposer/ComposerModel.swift:888-914Captured-title detection is substring-based and occurrence-insensitive, while the event parser selects only one relative date. For a stored title such as
Discuss tomorrow, editing toDiscuss tomorrow todaycan select the earlier capturedtomorrow, mark all parsed date runs as captured title text, and leave the event on its source day. A newly typed destination is therefore ignored in a realistic collision case.Fix: distinguish date occurrences originating in the baseline editable line from inserted date text, at least with occurrence-aware baseline matching, then use and remove the newly added directive. Add a collision regression.
P2 —
Tests/CalternalComposerTests/ComposerModelTests.swift:651-657The revised test replaces only
tomorrowinside a long stored title but asserts that the complete moved title becomesReview. That expectation permits destructive loss of; plan every Tuesday, C#? path\\#literal ##literal marker. The implementation should retain every non-directive part of the source title.Fix: assert preservation of all non-directive title text, add a separate clean
09:00 Review todaymove test, and addXCTAssertEqual(input.day, day)to the ordinary captured-title edit around line 622 so the original unintended-move regression is fenced.Resolved from the first review: the source-day equality guard was removed, so the cross-day branch is reachable.
git diff --checkpasses. There is still no App integration test for event-edit move publication or pending recovery.Remaining acceptance criteria:
.pending, cancellation or repeated pending results cannot restore a retryable stale source edit; the same operation identity reaches a terminal, journal-owned outcome.Review transition — remediation requested
/root/event_date_review/root/event_edit_date_repair/Users/kayg/Developer/calternal-app/.worktrees/event-edit-dateThe author has been asked to resolve the recorded pending-operation ownership blocker, occurrence-aware captured-date handling, long-title preservation, and the missing composer/App boundary regressions. The next transition will be a fresh read-only review of the complete revised diff, with findings and verification state posted here.
Revision after CHANGES REQUESTED:
Files changed: App/Sources/Model/AppModelSidebarGestures.swift, Sources/CalternalComposer/ComposerModel.swift, Tests/CalternalComposerTests/ComposerModelTests.swift.
Validation: git diff --check passes. Remote build and App/Store boundary tests remain pending reviewer approval and QA on agents@mbp.
Review transition — revised candidate remains CHANGES REQUESTED
/root/event_date_review/Users/kayg/Developer/calternal-app/.worktrees/event-edit-datewave16/event-edit-dategit diff --checkpassesResolved:
Remaining findings:
P1 —
App/Sources/Model/AppModelSidebarGestures.swift:517-552The code retries a pending journal operation three times after the initial attempt, but a fourth
.pendingstill throws a conflict while deliberately retaining the active edit envelope. That envelope identifies the pre-move source bytes. Its next send generates a new UUID; meanwhile the old UUID and potentially partially published writes remain journal-owned. The message tells the user to retry an operation that cannot safely be retried as a new edit. Detaching each call fixes parent cancellation during that call but does not fix ownership after the bounded loop.Fix: a post-pending exit must never restore a normally retryable source edit. Either keep the same operation identity durably attached and resume it on future sends, or transfer the edit to an explicit journal-owned/blocked state and clear the stale source transaction. A repeated pending result must be represented separately from an ordinary pre-publication conflict. Add two-or-more consecutive pending coverage plus cancellation after first pending.
P2 —
Sources/CalternalComposer/ComposerModel.swift:1117-1120(new directive ranges are computed at:904-915)editTitlereturns the original source whenevercurrent == baselinebefore consultingdateDirectiveRangesToRemove. Replacing a captured title wordtomorrowwith the directivenext Mondaycan yield the same parser title projection as the baseline, so the function returns the old full source title, retainingtomorrowand bypassing the new range removal. The revised test atTests/CalternalComposerTests/ComposerModelTests.swift:651-658expectsReview, which also permits loss of all other literal title content and does not match the reconstruction contract.Fix: use the
current == baselineshortcut only when there are no inserted directive ranges. For a replacement move, rebuild from edited text, strip only the new directive, and preserve; plan every Tuesday, C#? path\\#literal ##literal marker. Assert that complete surviving title.P2 —
Sources/CalternalComposer/ComposerModel.swift:888-923Phrase counts do not solve the reported collision because the event parser emits a single relative-date run. With source title
Discuss tomorrowand editDiscuss tomorrow today, parsing selects the earliertomorrow; the newly addedtodaynever reachescurrentDateRuns, socurrentDateRunsAreCapturedTitleremains true and the requested move is ignored.Fix: detect surplus date tokens against the baseline independently of the parser's one selected run, or define a deterministic explicit-date syntax and test it. Add the collision regression before claiming occurrence-aware handling.
Coverage gap — no App test exercises
commitSidebarEventEditcross-day publication, pending recovery, id-less identity minting, attachment preservation, backlink rewrite, or source/destination CAS. Adjacent sidebar drag tests do not invoke this new branch.State remains CHANGES REQUESTED. Remote build/QA should wait for these source correctness issues and boundary tests.
Revision 3:
todaycollision and preserved ordinary source-day/date-move assertions.Files: App/Sources/Model/AppModelSidebarGestures.swift, Sources/CalternalComposer/ComposerModel.swift, Tests/CalternalComposerTests/ComposerModelTests.swift.
Validation: git diff --check passes; remote build and App boundary tests remain pending.
Review transition — revision 3 fails the source gate
/root/event_date_review/Users/kayg/Developer/calternal-app/.worktrees/event-edit-datewave16/event-edit-dateP1 —
Sources/CalternalComposer/ComposerModel.swift:1071-1078newlyInsertedDatedeclaresranges: [Range<Int>]but returns a singleRange<Int>at line 1076. This is a compile-time type mismatch. The candidate has only passedgit diff --check, which cannot detect it.Fix: remove this heuristic as described below, or return an array after proving the mapping. A focused build is required before the next review transition.
P1 —
Sources/CalternalComposer/ComposerModel.swift:1054-1078The residual range is mapped into the wrong string.
residualis created by deletingsourceTitle, thenprefix.countis treated as an offset into the originalfirstLine. ForbaselineLine + " today", every character after the removed title shifts left, so the returned range points into unrelated title/tag text rather than the appended date.editTitlethen removes that unrelated range and can corrupt the stored title. If the user changed or reordered any title text, exactreplacingOccurrences(of: sourceTitle)may remove nothing, and the residual parser can reinterpret captured literal title dates as inserted directives.Fix: do not remove an arbitrary source-title substring and reuse residual offsets. For the required collision case, use a position-preserving rule. Minimal safe option: when the current text has the exact baseline editable line as a prefix, parse only the appended suffix and translate its validated parser run by the known baseline character count. Let the existing full-line parser handle non-captured primary date runs. Preserve the canonical source title for ambiguous edits instead of guessing from a lossy residual.
P1 —
App/Sources/Model/AppModelSidebarGestures.swift:526-545The core lifecycle blocker remains unchanged. Four consecutive
.pendingresults end by throwing while retaining the stale pre-move edit. A future send creates a different UUID even though the original journal still owns the transaction. Detached calls make each attempt cancellation-independent; they do not transfer ownership after the bounded loop. The displayed instruction to retry is unsafe and contradicts the source-of-truth acceptance criterion.Minimal state handoff design:
.pending, transfer ownership away from the editable source draft: clear/finish the active composer edit as a successful durable handoff, and store a session-scoped pending state containing the operation UUID and affected paths/target identity. Do not restore the old source draft.resumePendingEventMove()from a detached, session-fenced background task with bounded backoff. The Store journal is the durable source of truth; another move will resolve it through the existing coordinator..committed, refresh Store-returned paths and remap selection if the original selection intent is still current. On.conflict, surface a journal-recovery error; never recreate the old editable transaction automatically.moveEventwith a new UUID.An alternative is to add the UUID/request to the persisted edit context and make every later send replay exactly that request. Merely increasing retry count is not sufficient.
P2 —
Tests/CalternalComposerTests/ComposerModelTests.swift:652-675The tests still accept title data loss: replacing only
tomorrowin the long title assertsReview, and appendingtodayasserts the source day (collision.day == day) because the injected today equals the source day. That collision test does not prove a cross-day move and discards the same long literal suffix.Fix: use a source day different from injected today for the appended-today case. Assert the complete surviving title, including
plan every Tuesday, C#? path\\#literal ##literal marker, minus only the actual directive. Keep the ordinary-edit source-day assertion.Required App boundary test before build acceptance:
commitSidebarEventEditrather than the adjacent drag submitter.Revision 3 is not ready for the build host.
Role: task (
/root/event_date_completion)Worktree:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-dateBranch:
wave16/event-edit-dateState: implementation ownership transferred from stopped
/root/event_edit_date_repair; revision 3 remains unbuildable and is being replaced, not accepted.Plan after reading the full issue and reviewer's six-step journal handoff:
.pending, finish the source composer edit and transfer ownership to session-scoped pending state keyed by that UUID..committedor.conflict; never recreate the stale source transaction.Build/test execution remains reserved for
agents@mbpthrough the root build owner. I will request/root/event_date_reviewfor a final read-only diff review before the build transition.Review transition — completion-agent plan approved with one required adjustment
/root/event_date_review/root/event_date_completion/Users/kayg/Developer/calternal-app/.worktrees/event-edit-dateThe exact-baseline-prefix / appended-suffix date design is appropriately narrow. Parse the suffix with the canonical NLP parser, require a validated date run, and translate its character range by the exact baseline prefix length. This keeps range coordinates in the original line and supports the parser's existing relative and explicit date vocabulary without a parallel manual phrase list. Ambiguous non-prefix collisions should remain source-day/title-safe.
Required pending-recovery adjustment:
Do not base the recovery loop solely on parameterless
resumePendingEventMove(). Between recovery attempts, another Store caller can resolve the original journal and create a different pending journal; a generic resume can then return another move's receipt and drive the wrong refresh or selection remap.VaultEventMoveMember, destination snapshot/day, operation UUID, pending event IDs, session fence, and selection-intent snapshot.moveEvent(... operationID: capturedUUID)with that exact immutable request, or add a Store resume API that requires and verifies the expected operation UUID..pendingresult carries the captured UUID..pending, finish the active composer edit and return a successful durable handoff soComposerModelclears its stale source draft. Recovery continues independently with capped backoff.Testing requirements remain:
commitSidebarEventEdittest must verify stable/minted identity, children/attachments, backlink rewrite, and source/destination CAS refusal.today, preserve the complete canonical title outside the suffix directive, and prove only that directive is removed.With this adjustment, the plan addresses the prior source-gate findings. Final approval still requires review of the implemented diff and focused build/test evidence.
Role: task (
/root/event_date_completion)Worktree:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-dateBranch:
wave16/event-edit-dateState: revised implementation and focused boundary tests ready for reviewer source gate; uncommitted pending review.
Changes:
Range<Int>return. Collision handling now accepts only an exact captured editable-line prefix, parses the appended suffix with the real NLP classifier, requires one validated date run, and translates that run by the exact baseline character count.VaultEventMoveRequestand UUID. The App reserves that operation for the session and gates both event-edit entry and the installed sidebar move submitter while it is active..pending, the active composer edit is finished immediately. A cancellation-independent task replays the exact same request and operation UUID with capped exponential delay until Store returns committed/conflict or the captured session closes. Every pending and committed receipt is validated against the first pending event IDs.commitSidebarEventEdit, cancel after the first pending, hold two further pending outcomes, assert the stale edit is gone, assert both edit and drag gates, then let the real Store commit the fourth replay. The fixture verifies one UUID, source removal, destination identity, child/attachment preservation, backlink rewrite, refresh, and selection remap.Local evidence allowed by repository policy:
git diff --checkpasses. No local compilation, test, or GUI run was performed; all build/test execution remains assigned to the root build owner onagents@mbpafter reviewer acceptance.Next action:
/root/event_date_reviewreviews the complete four-file diff. Any findings will be resolved before build handoff.Review transition — four-file candidate remains CHANGES REQUESTED
/root/event_date_review/root/event_date_completion/Users/kayg/Developer/calternal-app/.worktrees/event-edit-datewave16/event-edit-dategit diff --checkpasses; no build/test execution yetResolved by this revision:
Remaining findings:
P2 —
App/Sources/Model/AppModelSidebarGestures.swift:48-72,:223,:454, andApp/Sources/Model/AppModelSidebarEventMoves.swift:118-160The registry claims to reserve an operation across several windows for one Space, but it is keyed by
ObjectIdentifier(session). Two windows can open separateVaultSessioninstances for the same vault and therefore obtain different keys. In addition, drag gating works by replacing only this AppModel'ssidebarEventMoveSubmitter; an already-started drag may have captured the previous submitter before the replacement. Either path lets another Store move interleave between pending replay attempts. The Store may resolve the composer journal, begin another move, and leave the composer recovery to replay its now-stale request; the original event is durable, but its recovery task reports conflict and loses the intended refresh/selection receipt.Fix: key the reservation by stable vault/root identity rather than session object identity, and enforce the reservation at the actual drag Store boundary (
submitSidebarEventMoveToStoreor its installed closure), not only by temporarily swapping one AppModel property. The event-edit path must be allowed to submit its own captured UUID while other edit/drag UUIDs fail with the reconciled/pending result. Add a test using two session/AppModel instances for one fixture, or an already-captured live submitter, proving no second Store request enters while recovery owns the first journal.P2 —
App/Sources/Model/AppModelSidebarGestures.swift:581-598An initial
.pendingreceipt with an unexpected operation ID or event-ID shape releases the reservation and throws beforefinishComposerEventEdit. Any.pendingmeans Store reports a journal-owned transaction; restoring a normally retryable pre-move edit is the unsafe lifecycle the handoff was designed to eliminate. Receipt mismatch is unlikely from the current Store implementation, but this branch is explicitly the receipt-validation failure path and must fail closed.Fix: transfer the composer edit out of retryable state before validating a pending receipt. Keep the vault reservation, surface a journal-recovery error, and recover/inspect the actual pending journal under an expected-operation fence. Never release ownership and recreate the source edit merely because the receipt is malformed. Add a malformed-pending-receipt seam test asserting the old edit is not retryable.
P3 —
Tests/CalternalComposerTests/ComposerModelTests.swift:650-690The long-title replacement test now correctly expects surviving text, and the appended collision uses a day distinct from the source. However both cases remain embedded in one broad test, and no assertion covers a connector form such as
on today;editTitleremoves the date run plus one whitespace character, while the event parser's date run excludes an adjacent connector. A user enteringReview on todaycan therefore storeReview onafter the move.Fix: include the parser-recognized connector in the directive-removal range, or build the moved title from the parser projection only for the newly appended suffix while retaining the captured source title. Add one focused
on todayassertion.Compile-shape review found no remaining obvious Swift type mismatch. Source approval is withheld for the two pending-ownership/gating findings above; a build cannot establish those lifecycle properties. After these are fixed, run the focused composer and App event-move tests on
agents@mbpand post exact selectors/results before QA.Role: task (
/root/event_date_completion)Worktree:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-dateBranch:
wave16/event-edit-dateState: reviewer P2/P3 remediation implemented; expanded ownership authorized by root for
AppModelSidebarEventMoveIntegration.swiftand its focused boundary test.Changes after the four-file CHANGES REQUESTED review:
VaultSessioninstances/windows for the same Space share one operation reservation..pendingnow finishes the composer edit before receipt validation in every branch. A matching UUID with malformed event IDs continues exact-request replay and adopts the first later valid single-ID receipt. A foreign UUID transfers the Space reservation to the reported journal, keeps edit/drag gating active, and performs parameterless inspection with that expected UUID; it refreshes returned paths without guessing a selection remap.onconnector plus its delimiter without normalizing unrelated title bytes. Added09:00 Review on todaycoverage expecting stored titleReview.Current local evidence:
git diff --checkpasses. No local build/tests were run under the repository's sole-build-host rule.Next action: reviewer re-reviews the exact five-file diff; build/test handoff remains blocked until source approval.
Reviewer source gate — CHANGES REQUESTED
Role:
reviewer(/root/event_date_review), read-only source review.Worktree:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-dateBranch/HEAD:
wave16/event-edit-dateat6ca85fd2d82428d4fe18db508535bc643f3a0ee4Reviewed unstaged five-file diff SHA-256:
a04b190f4ab6b4b7e49d0c2501a1292cafb99f54e36f68a0a50cc5638808cceeState:
git diff --checkpasses. Per repository policy, no local build/tests were run. Source gate remains withheld.Resolved since the preceding pass: reservation identity now spans
vaultIDplus standardized root across sessions; the captured drag submitter checks again immediately before Store; an acquired drag reservation is transient and cannot release an existing composer owner; matching pending replays the immutable request with one UUID; malformed event-ID receipts clear the retryable edit and remain on that same request; connector removal works for titled events; publication remains fenced to the captured session and selection intent.P1 — A foreign pending journal discards the requested edit
App/Sources/Model/AppModelSidebarGestures.swift:634-659and:847-916..pendingwith an operation UUID different from the edit's UUID, the App clears the composer edit at line 639, recovers only the foreign journal, then returns after refresh. The immutablemoveRequestcontaining the user's changed date/title is never submitted again. The prior event stays unchanged and the typed edit is gone.VaultEventMove.resolveExistingEventMovereturns a mismatched pending UUID only while a pre-existing journal is still pending; in that branch Store has not planned or journaled the new edit request. The currentrecoverUnexpectedPendingEventMovereceives neithermoveRequestnor its publication context, so every terminal branch necessarily drops it. This is reachable whenever another window/process left a pending move. The focused tests cover malformed event IDs with the matching UUID, but contain no foreign-UUID case.moveRequestand publication context through foreign recovery and submit that exact original UUID after the foreign journal reaches terminal state. Add an App-boundary test whose first result is.pending(foreignUUID, ...); verify the foreign journal is inspected, then the requested edit either remains retryable or commits with its original UUID, with no title/date loss.P2 — Connector stripping is bypassed for untitled source events
Sources/CalternalComposer/ComposerModel.swift:1127-1151, especially the early return at:1137; connector removal is implemented at:1198-1227.on todaycan retain the parser's residualonas the moved event title instead of keeping the canonical empty title.editTitlereturnsunescapedTitle(current)wheneversource.isEmpty, before applyingdateDirectiveRangesToRemoveandtitleDirectiveRemovalRange. The new connector test uses a titledReviewevent, so it cannot exercise this branch. This is the same residual connector path the helper was added to remove.09:00 on todayasserting the destination changes and the title remains empty.No additional compile-shape issue was apparent from source inspection. The exact-owner retry loop, cancellation handoff, CAS snapshots, block identity/children/backlink preservation, and session/selection publication fences look coherent once the foreign-operation loss is fixed.
Implementation status — restored edit user reproduction (event-date owner)
Worker/role:
/root/event_date_completion, implementationWorktree/branch:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-date,wave16/event-edit-dateState: source candidate under remediation; not built or delivered
The user's 2026-09-13 desktop preview reproduced a real boundary failure on an existing 2026-09-11 13:45 event after app relaunch: appending
todayproduced “This event edit is no longer available. Refresh the timeline and try again.” The preview did not contain this issue's current move implementation, but the symptom shows restored Composer edit state can reach App commit without a live sidebar edit envelope (or with a snapshot/context mismatch) and be rejected as stale before the same-identity move transaction begins.Current work:
09:00 on todaymust not produce titleon).No local build/test has been run: repository policy reserves all builds/tests for
agents@mbpthrough the root build owner.Implementation update — foreign journal, untitled connector, restored edit
Worker/role:
/root/event_date_completion, implementationWorktree/branch:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-date,wave16/event-edit-dateState: frozen source candidate awaiting independent re-review
Exact uncommitted diff SHA-256:
0bd395898a468d634459b6ce87078d713e89e989c7bcc1c6929a80ddca2a99a1Changes since the previous CHANGES REQUESTED review:
VaultEventMoveRequest. Recovery validates and finishes the foreign journal, transfers the stable Space reservation back to the original UUID, and then enters the existing exact-request replay loop. The user's title/date replacement is therefore submitted after the foreign terminal result instead of being dropped.09:00 on todaynow runs directive/connector removal and produces an empty title.Eventfrom the exact persisted source bytes insideComposerModelfor planning, while preserving a nil runtime-event marker on the App submission boundary.AppModelpermits send-time rebinding only for that restored marker and only after the captured bytes, revision, identity, current disk snapshot, and parsed event all match. A live target cleared by pending handoff cannot use this path.Source-only validation:
git diff --checkpasses. No local build or test was run; repository policy reserves those foragents@mbpthrough the root build owner.Next action: independent source re-review of this exact frozen diff; then root-owned remote build/focused tests if approved.
Frozen diff correction
Worker/role:
/root/event_date_completion, implementationWorktree/branch:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-date,wave16/event-edit-dateState: awaiting re-review
Correct exact uncommitted diff SHA-256:
0b31d86fd520f790ae6b75b4bf8ec2083898ac218bb0d769ca550afae031389fOne final source inspection found that merely entering the removal path was insufficient for an untitled edit: after
09:00,on, andtodaywere removed, the empty body fell through to the parsed-title fallback and could still returnon. The removal path now returns the empty title when the stored source title is empty. The existing new09:00 on todayassertion covers this exact result.git diff --checkpasses. No local build/test was run. The reviewer was notified immediately of the corrected frozen hash.Reviewer source gate — CHANGES REQUESTED
Role:
reviewer(/root/event_date_review), read-only source re-review.Worktree:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-dateBranch/HEAD:
wave16/event-edit-dateat6ca85fd2d82428d4fe18db508535bc643f3a0ee4Reviewed frozen five-file diff SHA-256:
0b31d86fd520f790ae6b75b4bf8ec2083898ac218bb0d769ca550afae031389fState: hash matches and
git diff --checkpasses. No local build/tests were run under repository policy. Source gate remains withheld for one lifecycle blocker.Resolved in this revision:
sourceEventdrafts are parsed from their bounded captured bytes for Composer planning, while the nil marker crosses the App boundary. AppModel rebinds only that nil-marker target after exact source-data, revision, identity, row, session, and current-disk equality. A normal cleared live target cannot take this path.09:00 on todaynow removes the time/date/connector body and retains an empty canonical title.P1 — Foreign conflict or session handoff still deletes an unowned edit
App/Sources/Model/AppModelSidebarGestures.swift:649-679and:867-968, especiallyfinishComposerEventEditat:653-655, foreign conflict handling at:911-916, session-close exit at:924-927, and unconditional original replay setup at:940-967..conflict, replaying the original request immediately encounters that still-present conflicted journal and returns conflict;recoverPendingComposerEventMovereleases the reservation and stops, while the user's draft is already gone. If the user switches/closes the captured session while foreign recovery is pending, lines 924-927 release the reservation and discard the only in-memory copy of the original request. In both cases the typed date/title edit is lost without ever becoming durable.VaultEventMove.swift:1318-1326), so the nextmoveEvents(originalRequest)resolves the same foreign conflict rather than planning the original request. Session switching during an unbounded pending recovery is an ordinary interaction. The new test'sresume()always returns.committedand never exercises conflict or session closure..pending, start/continue inspection of that foreign journal but throw a retryable reconciliation error so Composer retains its exact draft; gate retry through the registry until the foreign journal is terminal. After a successful foreign commit, either let the user resend or submit the still-retained original request and only clear after its matching pending/commit. If automatic handoff across session loss is required, persist the original request/draft before returning success. Add App-boundary tests for foreign.conflictand session close/switch, asserting the original edit remains recoverable and is never silently discarded.P2 — Foreign recovery unnecessarily retains AppModel for an unbounded task
App/Sources/Model/AppModelSidebarGestures.swift:882(Task { @MainActor [self, session] in).selfcapture can keep the whole window model alive after UI ownership ends.selfowns the session; deallocation cannot break the task's capture. The matching recovery path correctly uses[weak self, session].recoverPendingComposerEventMove; continue journal work from immutable request/session values and perform UI publication only whileselfstill exists. Add a lifetime/cancellation assertion if the foreign recovery remains unbounded.No other source finding blocks build once the foreign unowned-request loss is resolved.
Implementation update — foreign UUID never acknowledges the user edit
Worker/role:
/root/event_date_completion, implementationWorktree/branch:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-date,wave16/event-edit-dateState: frozen source candidate awaiting independent re-review
Exact uncommitted diff SHA-256:
099853193248cd459f84a554f6276164c0a4864d7ee0bcfbe9c513a267ccc9feThe foreign-UUID path is now deliberately simpler:
commitSidebarEventEditthrows. Composer therefore retains the exact text and edit target in its existing draft lifecycle; the foreign receipt never acknowledges or deletes the user's edit.AppModel; session close exits and releases only the runtime reservation.The reviewed restored-draft rehydration and untitled connector changes remain unchanged.
git diff --checkpasses. No local build/test was run; remote build/test remains root-owned after source approval.Reviewer source gate — APPROVED FOR REMOTE BUILD/TEST
Role:
reviewer(/root/event_date_review), independent read-only source re-review.Worktree:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-dateBranch/HEAD:
wave16/event-edit-dateat6ca85fd2d82428d4fe18db508535bc643f3a0ee4Reviewed frozen five-file diff SHA-256:
099853193248cd459f84a554f6276164c0a4864d7ee0bcfbe9c513a267ccc9feState: hash matches;
git diff --checkpasses. No local build/tests were run under repository policy.No P1/P2/P3 source findings remain in this revision.
The final foreign-journal lifecycle now observes the necessary ownership distinction:
AppModelSidebarGestures.swift:649-670validates the pending operation UUID beforefinishComposerEventEdit. A foreign UUID transfers only the runtime gate, launches foreign-only recovery, and throws, so Composer restores the user's frozen text, target, and draft.:863-934never submits the original request. Foreign commit refreshes its changed paths; foreign conflict, disappearance, and session close release only the foreign reservation and restore the live submitter when the captured session is still attached. The task captures AppModel weakly.sourceEventpath rehydrates planning from bounded captured bytes but preserves the nil marker across the App boundary. AppModel permits rebind only after exact captured/current bytes, revision, identity, row, session, and parsed-event equality; normal cleared live targets remain ineligible.on todayconnector stripping, decoded target rehydration, and canonical title retention.Swift 6 compile shape and actor boundaries are coherent by inspection: registry access remains MainActor-isolated; detached work captures Sendable immutable request/session values; UI publication returns to MainActor and is fenced to the captured session and selection intent. Approval is for the required
agents@mbpbuild and focused Composer/App tests; it is not a runtime or performance acceptance claim.Read-only build-route inventory for the upcoming event/date candidate; no compiler or GUI was started.
Tests/CalternalComposerTests/ComposerModelTests.swiftis a SwiftPM test target and runs directly onagents@mbpafter the exact-source package build. The changed event/date selector is:CalternalComposerTests.ComposerModelTests/testEventEditPreservesDateLikeTitleAndTagsUse the established command shape:
swift test --skip-build -c release --enable-xctest --disable-swift-testing --filter <selector>.App/Tests/AppModelSidebarEventMoveTests.swiftis not in SwiftPM.App/project.ymldeclares it under the hosted Xcode unit-test targetCalternalAppTests, withTEST_HOST=$(BUILT_PRODUCTS_DIR)/Calternal.app/Contents/MacOS/Calternal. Exact candidate source must therefore be generated/built onagents@mbpwith the established Debug route:xcodebuild -project Calternal.xcodeproj -scheme Calternal -configuration Debug -destination platform=macOS,arch=arm64 -derivedDataPath <isolated-derived-data> ONLY_ACTIVE_ARCH=YES ARCHS=arm64 CALTERNAL_BUILD_REVISION=<exact-sha> -only-testing:CalternalAppTests build-for-testingThe signed Debug host, embedded
CalternalAppTests.xctest, generated.xctestrun, PackageFrameworks, and Apple XCTest support closure are then staged byte-for-byte with/Users/agents/Developer/BuildOnly/hosted-app-tests-empty-marker-05e/stage-hosted-xctest-runtime.sh(current SHA-2561b581c2d16d1a8b35a48b07a448a4a3ded22ff4be85b6d56811ada652ed750eb). Actual tests run one selector per bounded VM process through the artifact's launcher, using module-dot-class/slash-method syntax:CalternalAppTests.AppModelSidebarEventMoveTests/testComposerDateMoveHandsPendingJournalOffAcrossCancellationAndReplaysOneRequestCalternalAppTests.AppModelSidebarEventMoveTests/testComposerDateMoveMintsStableIdentityForIdlessEventCalternalAppTests.AppModelSidebarEventMoveTests/testRestoredComposerDateMoveRebindsAtCommitWhenSourceIsUnchangedCalternalAppTests.AppModelSidebarEventMoveTests/testForeignPendingConflictKeepsComposerEditForUserRetryCalternalAppTests.AppModelSidebarEventMoveTests/testForeignPendingSessionCloseKeepsUnacceptedComposerEditCalternalAppTests.AppModelSidebarEventMoveTests/testMalformedPendingReceiptNeverRestoresRetryableComposerEditCalternalAppTests.AppModelSidebarEventMoveTests/testComposerDateMoveRejectsSourceAndDestinationCASChangesInvocation shape:
launch-hosted-apptests.sh -ApplePersistenceIgnoreState YES -XCTest <selector>. The Xcode build is compile/stage evidence only; each launcher result must record test count, failures, exit status, full log, exact source receipt, host/test-binary hashes, and watchdog outcome. Direct SwiftPM cannot cover these App tests, and a Release app compile is not a substitute. The event worktree is still awaiting source approval; no test or build status is claimed here.Implementation handoff — source approved
Worker/role:
/root/event_date_completion, implementationWorktree/branch:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-date,wave16/event-edit-dateState: implemented and independently source-reviewed; remote build/test pending
Commit:
eea1591e39bb4cb7055f5ec7dc873df2e695c5cdReviewed frozen diff SHA-256:
099853193248cd459f84a554f6276164c0a4864d7ee0bcfbe9c513a267ccc9feReviewer
/root/event_date_reviewposted and read back APPROVED FOR REMOTE BUILD/TEST, with no remaining P1/P2/P3 source findings.Delivered behavior:
on todayremoves the connector, including untitled events.Focused remote selectors requested:
ComposerModelTests/testEventEditPreservesDateLikeTitleAndTagsAppModelSidebarEventMoveTests/testComposerDateMoveHandsPendingJournalOffAcrossCancellationAndReplaysOneRequestAppModelSidebarEventMoveTests/testComposerDateMoveMintsStableIdentityForIdlessEventAppModelSidebarEventMoveTests/testRestoredComposerDateMoveRebindsAtCommitWhenSourceIsUnchangedAppModelSidebarEventMoveTests/testForeignPendingConflictKeepsComposerEditForUserRetryAppModelSidebarEventMoveTests/testForeignPendingSessionCloseKeepsUnacceptedComposerEditAppModelSidebarEventMoveTests/testMalformedPendingReceiptNeverRestoresRetryableComposerEditAppModelSidebarEventMoveTests/testComposerDateMoveRejectsSourceAndDestinationCASChangesLocal evidence:
git diff --checkpassed before commit; worktree is clean. No local build/test was run, per the repository's sole-build-owner policy. Next action is root integration plusagents@mbpbuild/focused tests, followed by VM/user QA. Issue remains open until delivered behavior is verified.Root integration: event candidate
eea1591e(source-approved, no P1-P3) integrated asf2941e71. It addresses explicit day changes plus restored edit target rehydration, with exact current snapshot/CAS revalidation and draft preservation while a foreign pending journal owns the writer.Title candidate136a130f (source-approved, no P1-P3) applied as one clean cumulative concern commit on the integration branch. It visually presents an eligible plain first line as H1 and promotes only actual title edits through canonical undo/save/rename, without per-keystroke full-note projection construction. Root inspected changed paths and integration is clean.
Next: sole agents@mbp build owner runs documented Composer/parser package selectors and builds hosted App tests; VM executes actual event-recovery and title-session selectors before desktop delivery. Source approval is not test/runtime acceptance. Current desktop remains37c without these changes; event/title issues remain open.
Sole build worker
/root/build_pipeline_recoverfroze clean central.worktrees/editor-overnight-combinedat exact27bdc009c4ab3f783077cb389bae01a6a55d5cfc, tree99d98a5cf4f101476bc744780760a87b7acf8696. It includes reviewed event integrationf2941e71from approvedeea1591e; no newer unreviewed event/layout/performance code is present.The serialized
agents@mbproute is starting: exact archive/manifest export, SwiftPM Release compile andCalternalComposerTests.ComposerModelTests/testEventEditPreservesDateLikeTitleAndTags, then a separate hostedCalternalAppTestsDebug build/stage containing the seven documented event selectors. Hosted compilation will be reported separately from actual VM selector results. Release packaging follows the compile gates for eventual preview. This is build start only; no runtime/user acceptance is claimed.Exact central
27bdc009c4ab3f783077cb389bae01a6a55d5cfcexport verified at tree99d98a5cf4f101476bc744780760a87b7acf8696, 262 inputs; source archive SHA-2565c410ad1cfab373963163fefadda2f63c7c266df1623cf238bb834bab064a77b, manifest SHA-256046d28e33135cf153ee0a578abced2edc67ea3722e9c0835c654e22c652c1c23.The SwiftPM Release compile failed before the Composer selector could execute because of two errors in the integrated title scanner (
MarkdownBlockDocument.swift:181, reported on capturedcursorandns). This is an independent title compile blocker; no event test failure is established. HostedCalternalAppTestscompilation and all seven actual event selectors remain not started, and no Release or GUI ran. Full log:/Users/agents/Developer/BuildOnly/package-tests-d40/Evidence/package-tests/20260913T150428Z-central-27bdc009-event-title-42f4bed7/swift-build.log, SHA-256bdd55043b9732d6692507346dc8d4f1e8bc19b382d67ca1366b045cb7db4ea3a. The sole lane is held for an exact reviewed repair; keep #1 open.The bounded title-repair window elapsed without a reviewed correction, so the sole build lane is switching to the already reviewed event-only parent
f2941e717f1dc5ad8108e851964da2de127873d4, tree58a55b598d7cc631b4d9238c082ea5330eecf274, to avoid blocking the user's event-date delivery.Exact fallback export is ready with 262 verified inputs: source archive SHA-256
f2a8c87ff0b057d09f08d68897c94b5d1c6a87b1700f86f777567b6dbda4d0c3, manifest SHA-25637cffa41deb56d62881317e0d7fb4be0dd10506da1df3de158e9436455402452. The lane will run the documented Composer selector, compile/stage hosted AppTests for all seven event selectors, and package an event-only Release. Title remains excluded from this fallback. This is build start, not runtime acceptance.Reviewed Swift 6.3 scanner repair
6079447bis integrated as26eb1552on the preview integration branch. The sole build lane is moving to that exact event-edit/title revision for package, hosted AppTests, and Release checks. Event-onlyf2941e71compiled and actually passed the Composer date-like-title selector; this is not yet desktop delivery or full acceptance. User clarified issue #4 must keep a centered reading-width limit, restore mentions width, and align visible text.26eb VM QA plan, pending the exact artifact: I will use only the registered disposable Overnight Perf QA vault and establish a fixture event with an accessible existing-edit route before mutating anything. The focused matrix is (1) an explicit newly added date directive moves an existing event while preserving UUID/title/tags/children/backlinks and stripping only that directive, (2) a literal date-like title/body control does not move, and (3) an available Undo/Redo route restores/reapplies identity and links. I will capture before/after source bytes and restore the fixture exactly. No result yet.
Root independently read exact26eb1552 build-host XCTest logs through the SSH relay. ComposerModelTests/testEventEditPreservesDateLikeTitleAndTags executed 1 test, 0 failures (test body0.013s). MarkdownBlockDocumentTests/testBoundedFirstBlockMatchesCompleteParserForTablesAtEOF executed1 test,0 failures (body0.064s). These are functional checks, not launch/scroll performance proof. Hosted app lifecycle tests and Release delivery remain pending.
26eb hosted runtime setup result: 0 selectors executed; this is a harness/bootstrap failure, not a functional assertion failure. Archive, runtime manifest and AppTests executable hashes all matched the supplied values. Each attempted selector exited 1 before XCTest emitted any test line because
launchctl asuser 501from the current SSH audit session fails withCould not switch to audit session 0x186a4: 1: Operation not permitted.I recorded per-selector launcher logs and stopped rather than treating these exits as product failures or rerunning the group under stale configuration. The VM has an active Aqua
gui/501domain, but passwordless sudo is unavailable; a supported bootstrap into that existing session is being obtained. Evidence:.agents/native-break/26eb-event-title-qa/12-hosted-stage-inventory.txt,14-hosted-run-console.txt,15-first-failure-logs.txt,16-gui-bootstrap-probe.txt.Hosted runner correction —
/root/build_pipeline_recover/hosted_runner_hang_review, reviewer/diagnostic role; root checkout, no owned implementation branch; state: exact 26eb direct invocation proven, remaining selectors pending QA.The Aqua bootstrap wrapper was the harness error.
/bin/launchctl asuser 501 ...from the unprivilegedlumeSSH audit session exits before XCTest withCould not switch to audit session ... Operation not permitted. The established hosted AppTests route does not uselaunchctl: execute the staged launcher directly from thelumeSSH session with an isolated temp directory.Exact 26eb proof:
NSUnbufferedIO=YES TMPDIR=/private/tmp/calternal-26eb-one2.pmy1gk /private/tmp/qa-26eb-hosted-20260913-083409/extract/hosted-xctest-runtime/launch-hosted-apptests.sh -ApplePersistenceIgnoreState YES -XCTest CalternalAppTests.AppModelSidebarEventMoveTests/testComposerDateMoveMintsStableIdentityForIdlessEventexited 0 after two seconds and reported 1 executed test, 0 failures. Retained evidence:.agents/native-break/26eb-event-title-qa/24-direct-bootstrap-one.txt.Next action: QA should remove
launchctl asuser, keep the direct launcher,NSUnbufferedIO=YES, one freshTMPDIRper selector, and a bounded process-group watchdog; then run and record the remaining exact selectors. This is one event-selector pass, not full issue acceptance or delivery.26eb hosted runtime result (direct signed launcher after exact archive/manifest/test-binary hash verification): 6 of 7 event selectors passed; 1 functional failure.
Passed: cancellation replay, idless stable identity, rebind-at-commit, foreign conflict retention, foreign session-close retention, and source/destination CAS rejection.
Failed selector:
testMalformedPendingReceiptNeverRestoresRetryableComposerEdit. XCTest caughtconflict("An event move is already being reconciled for this space."), so the malformed-receipt recovery path does not meet this regression’s expectation. This is an executed assertion failure, not the prior bootstrap issue.The event logs also repeatedly report SQLite
vnode unlinked while in useintegrity warnings. Full VM logs:/private/tmp/qa-26eb-direct-remaining-20260913-083824/event/; local result console/extracts:.agents/native-break/26eb-event-title-qa/27-direct-remaining-console.txtand28-real-failure-extracts.txt. Keep #1 open; no release pass.Hosted runtime triage — exact 26eb
Worker/role:
/root/event_date_completion, implementation/test triageWorktree/branch:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-date,wave16/event-edit-dateState: 6/7 focused event tests passed; one async lifecycle assertion failed; preview held
Evidence reviewed:
.agents/native-break/26eb-event-title-qa/28-real-failure-extracts.txt.agents/native-break/26eb-event-title-qa/27-direct-remaining-console.txt/private/tmp/qa-26eb-direct-remaining-20260913-083824The failing test reaches the post-pending retry before the background recovery task has processed the stub's terminal conflict and released
SidebarComposerEventMoveRegistry.MalformedComposerPendingStub.waitUntilFinished()signals inside the actor immediately before returning.conflict; the MainActor recovery still has to receive that result and release ownership. The observed error, “An event move is already being reconciled for this space,” is therefore the production gate behaving correctly during the remaining handoff interval, rather than evidence that the stale edit was restored.Planned bounded correction:
/root/event_date_review, then request the one failing hosted selector and relevant lifecycle selector on the VM.No local build/test will run; remote validation remains root-owned.
Exact central
26eb155253241603ec8f1a89e263a7a8cd496341runtime update:625d58c0a8a63648dccfec6c3dfcb9e6ccd4ead9; 262 exported inputs; source archive SHA-256ad057f137a58b5abb3f19b6806b6b98433ed27c1c3b152f0cf4c4f8b3090a820; manifest SHA-2564294b684759587ebaccfa0d1f222f4a66cd1b117c11134b213c943dd45a51ab1.CalternalComposerTests.ComposerModelTests/testEventEditPreservesDateLikeTitleAndTagsactually executed and passed (1.395s); log SHA-256d2b33422d9344c43d2fc1030f1eef01111954f8d5374d197da2a9480a4e0ab0e.CalternalAppTestsbuild-for-testing passed in 45.202s. This stage compiled/staged tests but executed none.testMalformedPendingReceiptNeverRestoresRetryableComposerEditfailed with caughtconflict("An event move is already being reconciled for this space."). The precedinglaunchctl asuserattempts were setup failures and executed zero tests; direct launcher is the supported hosted AppTests route./Users/kayg/Developer/calternal-app/.agents/build-verification/26eb-hosted-actual-20260913T083824Z/event.Exact 26eb correction candidate
Worker/role:
/root/event_date_completion, implementation/test triageWorktree/branch:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-date,wave16/event-edit-dateState: frozen test-only candidate awaiting independent source review
Base commit:
eea1591e39bb4cb7055f5ec7dc873df2e695c5cdExact uncommitted diff SHA-256:
2d77e5cc83f1b5663b44d8a115e99d56046d70e4e85c9a75fb5c949d150b1bd9Finding and correction:
MalformedComposerPendingStub.waitUntilFinished()resumes its waiter immediately before returning.conflict. The test then raced the MainActor recovery task, which had not yet executedSidebarComposerEventMoveRegistry.release. The observed production conflict gate was valid during that interval.SidebarGestureError.staleRow, so the original safety assertion is unchanged and not weakened.vnode unlinked while in usewarnings are fixture teardown misuse, not evidence of a production session leak. Each test called synchronousVaultSession.close()and immediately deleted a root that contains the support SQLite database. Source docs stateclose()starts cancellation, whileshutdown()awaits watcher/link-repair/observer tasks andVaultIndex.shutdown()closes SQLite.session.shutdown()before deleting the fixture root. This exercises the existing production lifetime boundary and removes the unsafe unlink rather than suppressing the diagnostic.Source-only evidence:
git diff --checkpasses. No local build/test was run. Next action: independent review of this exact one-file diff, followed by hosted rerun of the malformed selector plus one warning-producing neighboring selector.Test-only re-review — APPROVED FOR REMOTE RERUN
Role:
reviewer(/root/event_date_review)Worktree:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-dateBranch/base:
wave16/event-edit-date, exact base/HEADeea1591e39bb4cb7055f5ec7dc873df2e695c5cdReviewed uncommitted test-only diff SHA-256:
2d77e5cc83f1b5663b44d8a115e99d56046d70e4e85c9a75fb5c949d150b1bd9State: read-only source review complete;
git diff --check eea1591epasses. No local build/tests or GUI actions were run.No P1, P2, or P3 source findings.
The malformed-pending test now waits for the observable MainActor lifecycle boundary,
SidebarComposerEventMoveRegistry.operation(for: session) == nil, after the actor stub reports its terminal conflict and before attempting the retry. This closes the hosted 26eb race: the stub'sfinishedsignal occurs before the recovery task returns to MainActor to release the registry and restore the submitter. The subsequentstaleRowrequirement still proves production did not restore the finished non-nil-marker edit; it no longer accidentally exercises the transient registry conflict.The fixture cleanup change is compile-shaped consistently with XCTest's async teardown API and
VaultSession.shutdown() async throws. Each opened session is registered exactly once; shutdown calls the existing idempotentclose(), awaits watcher, repair, observer, and SQLite index teardown, and only then removes the fixture root/support database. The body-level explicitsession.close()session-close scenario remains valid because teardown shutdown is documented and implemented for repeated owners.Next action: commit this exact test-only diff, rerun the focused hosted tests on
agents@mbp, and retain the prior production source approval unless that rerun requires production changes.Hosted-rerun handoff — exact 26eb follow-up
Worker/role:
/root/event_date_completion, implementation/test triageWorktree/branch:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-date,wave16/event-edit-dateState: committed and independently reviewed; hosted rerun pending
Commit:
bfdb2f1e26bdc6e18ef96f58ebfa30df6a3c4487Parent feature commit:
eea1591e39bb4cb7055f5ec7dc873df2e695c5cdReviewer
/root/event_date_reviewposted/read back APPROVED FOR REMOTE RERUN, with no P1/P2/P3 findings. They verified the registry-release wait closes the stub/MainActor observation race while the stale-row assertion remains, and that async XCTest teardown correctly awaits idempotentVaultSession.shutdown()before fixture root deletion.Requested hosted proof:
CalternalAppTests.AppModelSidebarEventMoveTests/testMalformedPendingReceiptNeverRestoresRetryableComposerEditmust pass.testComposerDateMoveHandsPendingJournalOffAcrossCancellationAndReplaysOneRequestortestRestoredComposerDateMoveRebindsAtCommitWhenSourceIsUnchangedand confirm no SQLitevnode unlinked while in usewarnings remain in its log.No production source changed. Local
git diff --checkpassed before commit; worktree is clean. No local build/test was run. Issue remains open pending hosted evidence and delivered user QA.Preview decision: prepare exact26eb1552 for desktop user QA under the explicit rapid-preview exception. Release compile/signature/basic native launch passed; native plain-title edit saved/promoted/renamed without app crash. Root independently inspected the crash stack: hosted title abort occurs in XCTest async teardown, and a pre-feature rename/Undo control also aborts. This does NOT establish a full functional pass. Native Undo remains unverified (driver shortcut issue, then external-edit safeguard; safeguard was not forced). Event6/7 hosted passed; the remaining timing/fixture-cleanup test correction is source-reviewed and integratedd745, pending rerun. Desktop preview will contain event/title fixes and previously built inspector/image-selection work, not the pending5f8 editor polish. Keep all issues open except user-accepted#2; no stable/performance acceptance. Installation pending, currentdesktop37c.
Desktop preview26eb155253241603ec8f1a89e263a7a8cd496341 installed and launched at ~/Applications/Calternal.app after normal native Quit. Root verified signature, executable SHA8c37e0f228c29040fb062265c0c1acf5ec8685ea2aade2ace558127f014be649, process, expected Space, restored prior note selection, and Style inspector. No notes/settings files were edited by the installer. Previous37c bundle retained for rollback. Test focus: previously failing existing-event edit, explicit date change, first-line title visual/rename. Native title save/rename passed; native Undo remains unverified and hosted XCTest async teardown aborts (including pre-feature control) remain open; event timing-test correction awaits rerun. This preview does NOT contain pending margins/hover/codeblock/cross-eventdialog changes. No stable/performance acceptance.
Execution blocker: multiple implementation/reviewer agents stopped with Codex usage-limit errors. No further source or runtime acceptance is claimed. Desktop26eb1552 is installed and native launch/prior note verified. Central3e881860 contains next editor changes but is compile-blocked on nonisolated code painter helpers; isolated096a2725 repair is awaiting mandatory reviewer. Source-approved candidates pending combined integration: cross-event1fb74e92 (three-commit chain), imagecontrolsabb397be, chrome net27bd..a969f8ef. Event test cleanupd745 is integrated but shared XCTest async-teardown abort remains under investigation; title owner needs exact pre-feature-control PID52796 crash stack before choosing test-only fix. Layout centered760pt cap remains settled, exact alignment still pending. Preserve all active worktrees and uncommitted work; resume from these issues, do not restart or claim completion.
Work resumed at user request. Individual agent tasks must record their task name, worktree/branch, exact candidate revision, current status, next check and blockers in each relevant issue, with readback. Active dispatch: /root/block_drag_finish integrates source-approved #6
a969f8efnet, #12abb397be, #151fb74e92chain in an isolated checkout; /root/code_block_polish repairs #9 remaining actor-isolated scalar access, /root/ui_fixes_review_medium reviews; /root/title_completion and /root/event_date_completion investigate/correct awaited test fixture teardown in #5/#1. Central remains3e881860; desktop26eb1552 remains installed. No new build or acceptance yet. Prior usage blocker is historical: resumed agents are responding.Hosted XCTest teardown follow-up — implementation started
Worker/role:
/root/event_date_completion, implementationWorktree/branch:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-date,wave16/event-edit-dateBase commit:
bfdb2f1e26bdc6e18ef96f58ebfa30df6a3c4487Current exact uncommitted diff SHA-256:
0c241a51c7841bd49926a2aa875c8e10b90f736d8e2d9b707ae6a8efd67eff92State: implementation frozen for source review; no build/runtime claim
Root-cause evidence from the hosted
.ipsstack places the title-test abort in XCTest's async teardown machinery (_swift_task_dealloc_specific/XCTSwiftErrorObservation/ async teardown block disposal). Commitbfdb2f1ecorrectly added awaitedVaultSession.shutdown()but registered it with the same unsafe XCTest async teardown API.This isolated follow-up removes async teardown registration from the event-move test file. Each of its 12 session-backed tests now executes inside one non-generic,
@MainActor, Void-returningwithSessionHarnesswrapper. The wrapper:VaultSession.shutdown()within the test body;The malformed-receipt registry-release wait and stale-row assertion are unchanged. No production source changed. Static evidence:
git diff --checkpasses; noaddTeardownBlock, synchronous close/delete pair, or cleanup registration remains in this file.Next action: independent review of this exact diff, then root-owned hosted compile/rerun.
Review handoff pending — capacity blocker
Worker/role:
/root/event_date_completion, implementationWorktree/branch:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-date,wave16/event-edit-dateBase commit:
bfdb2f1e26bdc6e18ef96f58ebfa30df6a3c4487Frozen exact uncommitted diff SHA-256:
0c241a51c7841bd49926a2aa875c8e10b90f736d8e2d9b707ae6a8efd67eff92State: implementation frozen; source review pending; no build/runtime claim
The assigned reviewer
/root/event_date_reviewcould not complete this review because its task hit usage capacity. This is a review-capacity blocker, not a source finding. The one-file test-only diff remains unchanged andgit diff --checkremains clean.Root will route the same exact frozen diff to an available reviewer after the current critical integration work. No commit, build, VM run, or success claim will be made before that gate.
Reviewer:
/root/ui_fixes_review_mediumWorktree:
.worktrees/event-edit-dateParent:
bfdb2f1e26bdc6e18ef96f58ebfa30df6a3c4487Frozen diff SHA-256:
0c241a51c7841bd49926a2aa875c8e10b90f736d8e2d9b707ae6a8efd67eff92Status/verdict: SOURCE PASS — no P1–P3 findings.
The patch is test-only and replaces all 12 session-backed async XCTest teardown registrations with one
@MainActor, non-genericVoidbody harness. Test statements and assertions remain inside the same session lifetime. Each successful body now awaitsVaultSession.shutdown()before fixture deletion; a shutdown failure is surfaced and leaves the root intact. If the body throws, the harness attempts shutdown and deletes only after successful shutdown, then rethrows the original body error even when shutdown also fails, preserving the primary failure and diagnostic root. Open-session failure behavior is unchanged in substance because no registered teardown existed before session creation completed.This directly removes the known hosted-XCTest async teardown-block deallocation boundary without changing registry waits, stale-row checks, Store behavior, or production source. Counts match exactly: 12 prior cleanup registrations and 12 harness invocations.
git diff --checkpasses and the recomputed binary diff SHA-256 matches the frozen hash exactly.Validation limit: source review only; no hosted test run or framework-abort reproduction is claimed. The build/hosted test gate must confirm the XCTest abort is gone and all original assertions execute.
Reviewed in-body cleanup handoff
Worker/role:
/root/event_date_completion, implementationWorktree/branch:
/Users/kayg/Developer/calternal-app/.worktrees/event-edit-date,wave16/event-edit-dateState: committed and source-reviewed; immutable hosted build/rerun pending
Commit:
abcd17f50f7cb7c0d4f5ac72bb215a0bd36b8c1fParent test fix:
bfdb2f1e26bdc6e18ef96f58ebfa30df6a3c4487Reviewed diff SHA-256:
0c241a51c7841bd49926a2aa875c8e10b90f736d8e2d9b707ae6a8efd67eff92Replacement reviewer
/root/ui_fixes_review_mediumposted SOURCE PASS for the exact frozen diff, with no P1/P2/P3 findings. The committed content is byte-identical to that reviewed patch.This follow-up removes XCTest async teardown registration while retaining awaited
VaultSession.shutdown()and fixture deletion inside each test body's non-generic@MainActorwrapper. The malformed-receipt registry wait and stale-row assertion remain unchanged.Local static evidence: exact diff hash matched before commit,
git diff --checkpassed, and the worktree is clean. No local build or VM test ran. Root owns the immutable hosted build and rerun. Issue remains open until that evidence and delivered user QA pass.Root integrated exact source-reviewed test lifecycle fixes: title3817c269c524898647b8265ac8755a2c22d4b359 as82ff556e and eventabcd17f50f7cb7c0d4f5ac72bb215a0bd36b8c1f as3171535b. Root independently matched event binary diff SHA0c241a51. Exact3171535be7f04e038f80799074104de68c4f5015 archive and265-input manifest are now building through the existing agents@mbp sole controller. Includes source-reviewed #6/#12/#15 combined changes. /root/image_preview_qa handles preceding704b focused runtime; root handles compiler while build subagent is usage-blocked. No new desktop delivery; no new test result yet.
Isolated hosted rerun source prepared
Worker/role:
/root/title_completion, test lifecycle integration for #5/#1Worktree/branch:
/Users/kayg/Developer/calternal-app/.worktrees/event-title-lifecycle-qa,wave16/event-title-lifecycle-qaState: clean immutable test-only candidate; root-owned hosted build now running
Base:
26eb155253241603ec8f1a89e263a7a8cd496341Exact candidate:
f90751c4dae41b6a213b230659a6067ce67f1d5dTree:
3574f4fbfe75f96bfb343d28be9683894ac806c9Only the two App test files differ from base; production source diff count is zero and
git diff --checkpasses. The event test blob939e3fae4d7bb00c31b5cbd7258ad1fbee1ffa47exactly matches reviewed commitabcd17f50f7cb7c0d4f5ac72bb215a0bd36b8c1f, with prerequisitebfdb2f1e26bdc6e18ef96f58ebfa30df6a3c4487; the title test blob exactly matches reviewed3817c269c524898647b8265ac8755a2c22d4b359.Root independently confirmed the two-file diff and both blob matches, and owns the hosted build currently running on the sole
agents@mbpcompiler. This task has not run a local build, SSH compiler action, hosted test, or VM action. After compile, the required runtime gate is the combined 13 event/title selectors. Issue #1 remains open pending actual selector results and delivery.Hosted-rerun candidate parity review — exact
f90751c4dae41b6a213b230659a6067ce67f1d5d, worktree.worktrees/event-title-lifecycle-qa, base26eb155253241603ec8f1a89e263a7a8cd496341: PASS (no P1–P3 findings) for issue #1.The candidate's
App/Tests/AppModelSidebarEventMoveTests.swiftblob is byte-identical to already-reviewedabcd17f50f7cb7c0d4f5ac72bb215a0bd36b8c1f(blob939e3fae4d7bb00c31b5cbd7258ad1fbee1ffa47). Its prerequisite intermediate blob atdae60993is also byte-identical to reviewedbfdb2f1e(blobdb19bca0a336b7d25ae44ebcce7c7a92792729eb). All 12 event-move selector declarations remain present; cleanup, registry-drain waits, assertions, and lifecycle semantics are unchanged.The candidate is a direct three-commit descendant of exact base
26eb1552; only this event test and the separately reviewed title test differ. No production delta exists andgit diff --checkpasses.This is read-only source parity evidence. It does not establish hosted execution success; root's already-running controller owns that result.
Exact f907 hosted compile and QA artifact
Worker/role:
/root/title_completion, build evidence verification and runtime packaging handoff for #5/#1Source worktree/branch:
/Users/kayg/Developer/calternal-app/.worktrees/event-title-lifecycle-qa,wave16/event-title-lifecycle-qaExact revision:
f90751c4dae41b6a213b230659a6067ce67f1d5dState: hosted build-for-testing passed; compile-only, runtime pending QA
Root's existing sole
agents@mbpcontroller returnedbuildForTestingReturnCode=0,xcodegenReturnCode=0, andstatus=passedin 12.105 seconds. The result recordscompileOnly=true,testRunnerInvoked=false,testsExecuted=false, andappLaunchInvoked=false, so no event runtime pass is claimed.Evidence directory:
/Users/agents/Developer/BuildOnly/hosted-app-tests-empty-marker-05e/Evidence/hosted-app-tests/20260913T165858Z-f90751c4-hosted-e93caf0e. Verified inputs: 262. Source archive SHA-25665b12f0860e53e0ab8ee31df3d5d92ec5cd6e871d91aa3402801a9886b3e0bf2; source manifest3037540b67e210a025bcb2a7b9ffe020174ecc27becb1563d98c1f9b64a63779; result2baa7a3c37265bba724e9cb8452243e7637d4e3eda19a104de99434491e2c730; receipt688a1bd04b0f5c4346904c2086783d391218f67ff1a9f6c223db4c3bd6ad9066.The existing staging helper produced immutable
vm-hosted-xctest-runtime-f90751c4-e93caf0e.tar, SHA-256176b4b4aaab3efb55cd4cb36c6c7beceaa6ec2dcc99cbffdef9b3ed338bff2bf; runtime manifest9fe4734d75faf18ce703a249eb692f9537852d76e3618b00213f64244fdfdc38; launcher38cb044137a91266b5c2f8bb0c6721e440e5202ed0c5b892648dc531b04fd59e; app binarye85a719c035d97ba0a0da7049ce3550a9e61d2d0578b6b4f23051cb183547063; AppTests binary95223354bdd5838a06dc1a377ff185b969aa82e4e8932e50f2f802f8156045b2.QA
/root/image_preview_qareceived the exact handoff and owns the VM execution of the combined 13 event/title selectors. This task ran no VM test. Issue #1 remains open pending the seven event selector outcomes and delivery.Exact f907 VM transport published
Worker/role:
/root/title_completion, artifact transport for #5/#1Exact revision:
f90751c4dae41b6a213b230659a6067ce67f1d5dState: runtime archive is present and hash-verified on the QA VM; tests remain pending QA
VM final path:
/Users/lume/CalternalQA/f907-event-title-lifecycle/vm-hosted-xctest-runtime-f90751c4-e93caf0e.tar. VM SHA-256176b4b4aaab3efb55cd4cb36c6c7beceaa6ec2dcc99cbffdef9b3ed338bff2bfexactly matches the builder artifact; mode is 0444 and the.partialwas atomically renamed only after the full match.The authenticated rsync delta reused the immutable 26eb VM archive, matched 101,676,696 of 102,294,016 bytes, transferred 617,320 unmatched bytes, and sent 658,179 bytes. Strict host verification remained enabled after the authenticated local known-host key exactly matched the build-host scan for the VM FQDN.
QA
/root/image_preview_qaowns unpacking, manifest verification, and the combined 13 selector run. No test or GUI action was performed here. Issue #1 remains open pending the seven event selector outcomes and delivery.Hosted VM QA, exact test-only revision
f90751c4dae41b6a213b230659a6067ce67f1d5d:176b4b4aaab3efb55cd4cb36c6c7beceaa6ec2dcc99cbffdef9b3ed338bff2bf; embedded launcher/app/AppTests hashes matched the staged manifest.-ApplePersistenceIgnoreState YES; nolaunchctl; 60-second per-selector watchdog; no timeouts.AppModelSidebarEventMoveTestsselectors completed PASS, each reportingExecuted 1 test, with 0 failures.This is actual runtime evidence for the event-move lane. Full VM run:
/private/tmp/qa-f907-event-title-20260913-101514; local copied summary:.agents/native-break/f907-event-title-qa/04-vm-summary.txt.Remote preservation checkpoint — 2026-09-14
The following original-worktree candidates are now pushed and exact hashes verified on both Forgejo and GitHub. These are preserved candidates/diagnostics, not a claim of new acceptance; some may already be integrated by cherry-pick or superseded. Use the issue’s existing evidence before choosing changes to resume.
wave12/cross-day-reviewed-integration—348eea4000ccb8a3218fbd201c652d1fb89de97fwave12/event-move-descriptor-compile-fix—55fb80398f1b992f78dbce2c60d9b288cd3d9809wave12/event-move-descriptor-scale—77f2e6c0ebd57efc65691f65117b2e574a800075wave13/cross-day-compile-repair—f98ea493c925e4fcecfb4c2739bd945d143f557ewave16/event-edit-date—abcd17f50f7cb7c0d4f5ac72bb215a0bd36b8c1fwave16/event-title-lifecycle-qa—f90751c4dae41b6a213b230659a6067ce67f1d5dMaster #20 contains the resume instructions. No force push; dev remains
1d8f4adf.User report 2026-09-15 (build
bc3ace0on kayg@mbp): editing an event to another day from the sidebar still fails with "This sidebar row changed. Refresh the timeline and try again." (composer showed11:00 - 13:45 Switching from OMP to Codex #area/apps saturday). Reproduce with a real event, fix the stale-row CAS on cross-day edits.VM verification (Main, 2026-09-15, build
88a463don wave19/event-cross-day): right-click event → Edit Event → appendtomorrow→ ⌘↩ moves the event from events/20260615-dailynote.md to a newly created events/20260916-dailynote.md (frontmatter + prev/next links, block ID kept); no stale-row alert. Screenshots /tmp/vm/ecd-menu.png, /tmp/vm/ecd-after.png.Follow-ups found while verifying:
tomorrowin an event edit resolves relative to today, not the event's own day — confirm intended.