Reproduce and eliminate intermittent editor flicker #14

Open
opened 2026-09-13 13:34:43 +00:00 by kayg · 11 comments
Owner

Request and current status

Refresh guards exist, but user-reported occasional flicker has no confirmed resolution.

Acceptance

Capture reproducible edit/paste/selection/scroll sequence; identify draw/invalidation cause. Verify repair with mixed lists/images and appearance changes, preserving caret/source mapping. Retain before/after evidence.

Keep open until the user-facing outcome is verified in a delivered build. Source review or a successful build alone is not completion.

## Request and current status Refresh guards exist, but user-reported occasional flicker has no confirmed resolution. ## Acceptance Capture reproducible edit/paste/selection/scroll sequence; identify draw/invalidation cause. Verify repair with mixed lists/images and appearance changes, preserving caret/source mapping. Retain before/after evidence. Keep open until the user-facing outcome is verified in a delivered build. Source review or a successful build alone is not completion.
Author
Owner

Worker/role: /root/sidebar_live_geometry_diagnosis, bounded source and runtime diagnosis for issue #14. No source ownership or edits are planned in this phase.

Current boundary: integrated Release 6ca85fd2d82428d4fe18db508535bc643f3a0ee4. Existing equal-resource refresh guards are historical source evidence only; the user-reported intermittent flicker has no reproduced sequence or verified repair.

Plan:

  1. Reuse the issue #13 exact Release, VM, corpus, window, native-input and sampling receipts so flicker diagnosis does not introduce an incomparable environment.
  2. Inspect the editor's resource refresh, TextKit layout invalidation, image presentation, selection overlay and hosted scroll-height paths to enumerate redraw triggers that can blank or rebuild visible content.
  3. On an exclusive VM lease, exercise separately recorded sequences for edit, full-selection paste, Select All, bounded Page Down scrolling, appearance change, and mixed list/image content. Use AppTrace/native draw boundaries and /usr/bin/sample stacks; screenshots/video may establish visible flicker but will not be used as performance evidence.
  4. Correlate a visible event with source-level invalidation calls and sampled stacks before proposing a repair. Preserve caret, source mapping and file bytes in every nonmutating workload; restore the disposable canonical note after mutating workloads.
  5. If the first bounded sequence does not reproduce, record the exact negative result and continue with appearance/image/resource-change axes rather than claiming the refresh guards solved it.

Immediate next action: audit current invalidation hotspots and retained runtime evidence while issue #13 waits for the same VM lease. Issue remains open.

Worker/role: `/root/sidebar_live_geometry_diagnosis`, bounded source and runtime diagnosis for issue #14. No source ownership or edits are planned in this phase. Current boundary: integrated Release `6ca85fd2d82428d4fe18db508535bc643f3a0ee4`. Existing equal-resource refresh guards are historical source evidence only; the user-reported intermittent flicker has no reproduced sequence or verified repair. Plan: 1. Reuse the issue #13 exact Release, VM, corpus, window, native-input and sampling receipts so flicker diagnosis does not introduce an incomparable environment. 2. Inspect the editor's resource refresh, TextKit layout invalidation, image presentation, selection overlay and hosted scroll-height paths to enumerate redraw triggers that can blank or rebuild visible content. 3. On an exclusive VM lease, exercise separately recorded sequences for edit, full-selection paste, Select All, bounded Page Down scrolling, appearance change, and mixed list/image content. Use AppTrace/native draw boundaries and `/usr/bin/sample` stacks; screenshots/video may establish visible flicker but will not be used as performance evidence. 4. Correlate a visible event with source-level invalidation calls and sampled stacks before proposing a repair. Preserve caret, source mapping and file bytes in every nonmutating workload; restore the disposable canonical note after mutating workloads. 5. If the first bounded sequence does not reproduce, record the exact negative result and continue with appearance/image/resource-change axes rather than claiming the refresh guards solved it. Immediate next action: audit current invalidation hotspots and retained runtime evidence while issue #13 waits for the same VM lease. Issue remains open.
Author
Owner

Worker: /root/sidebar_live_geometry_diagnosis (diagnosis), no source edits.

Current state: source audit of exact candidate 6ca85fd2d82428d4fe18db508535bc643f3a0ee4 does not support calling the historical resource-URL guard a flicker fix. The guard is present at both resource setters, so repeated NoteEditorHost.updateNSView calls with equal URLs do not refresh images or invalidate layout.

The remaining full-visible-surface redraw/reflow candidates are bounded:

  • BlockEditorView.viewDidMoveToWindow refreshes image presentation synchronously, then refreshes it again on the next main turn and unconditionally invalidates the entire TextKit document. This is a mount/reattach candidate, not yet evidence for ordinary selection flicker.
  • Each completed image load invokes onGeometryChange; the editor then invalidates the entire TextKit document and the host invalidates document-page height. This is the primary mixed-image candidate.
  • Canonical edits call refreshProjectionLayout; TextKit storage replacement invalidates changed elements, but the method also invalidates intrinsic height, layout, and display for the full NSTextView surface.
  • NoteEditorContainerView.layout invalidates the document layout on every host layout. NoteDocumentScrollView.layout then marks the page dirty and forces layoutSubtreeIfNeeded, even when width and measured content have not changed. This can amplify editor invalidation but does not itself prove a blank frame.
  • Selection alone does not call full TextKit invalidation. It recalculates formatting availability, creates/repositions the nonactivating formatting panel for nonempty selections, and updates the native handle overlay. A selection-triggered visible flash should therefore first be separated into editor text redraw versus floating-panel appearance.

Existing CALTERNAL_DOCUMENT_GEOMETRY=1 telemetry can correlate page/editor/footer frame and clip-origin changes, while CALTERNAL_PERF_TRACE=1 marks accepted edit to post-super editor draw. Neither records why editor layout was invalidated or whether a draw contained no visible fragments. If the leased VM reproduces a flash, the smallest next diagnostic patch is opt-in numeric logging at the five paths above: reason, mount generation, source revision/length, visible/dirty rects, viewport range presence, image token/job/change counts, page/editor frames, and post-super draw. It must record no note text or path and must not force a display. A source repair is premature until that record identifies the triggering path.

Runtime dependency: the exclusive VM is currently leased to another QA task and the compiler-idle window is not yet available. No user desktop was touched. Issue remains open; next action is the separately recorded edit/paste/select/scroll/appearance/mixed-image sequence on the exact staged Release after root grants the lease.

Worker: `/root/sidebar_live_geometry_diagnosis` (diagnosis), no source edits. Current state: source audit of exact candidate `6ca85fd2d82428d4fe18db508535bc643f3a0ee4` does not support calling the historical resource-URL guard a flicker fix. The guard is present at both resource setters, so repeated `NoteEditorHost.updateNSView` calls with equal URLs do not refresh images or invalidate layout. The remaining full-visible-surface redraw/reflow candidates are bounded: - `BlockEditorView.viewDidMoveToWindow` refreshes image presentation synchronously, then refreshes it again on the next main turn and unconditionally invalidates the entire TextKit document. This is a mount/reattach candidate, not yet evidence for ordinary selection flicker. - Each completed image load invokes `onGeometryChange`; the editor then invalidates the entire TextKit document and the host invalidates document-page height. This is the primary mixed-image candidate. - Canonical edits call `refreshProjectionLayout`; TextKit storage replacement invalidates changed elements, but the method also invalidates intrinsic height, layout, and display for the full `NSTextView` surface. - `NoteEditorContainerView.layout` invalidates the document layout on every host layout. `NoteDocumentScrollView.layout` then marks the page dirty and forces `layoutSubtreeIfNeeded`, even when width and measured content have not changed. This can amplify editor invalidation but does not itself prove a blank frame. - Selection alone does not call full TextKit invalidation. It recalculates formatting availability, creates/repositions the nonactivating formatting panel for nonempty selections, and updates the native handle overlay. A selection-triggered visible flash should therefore first be separated into editor text redraw versus floating-panel appearance. Existing `CALTERNAL_DOCUMENT_GEOMETRY=1` telemetry can correlate page/editor/footer frame and clip-origin changes, while `CALTERNAL_PERF_TRACE=1` marks accepted edit to post-super editor draw. Neither records why editor layout was invalidated or whether a draw contained no visible fragments. If the leased VM reproduces a flash, the smallest next diagnostic patch is opt-in numeric logging at the five paths above: reason, mount generation, source revision/length, visible/dirty rects, viewport range presence, image token/job/change counts, page/editor frames, and post-super draw. It must record no note text or path and must not force a display. A source repair is premature until that record identifies the triggering path. Runtime dependency: the exclusive VM is currently leased to another QA task and the compiler-idle window is not yet available. No user desktop was touched. Issue remains open; next action is the separately recorded edit/paste/select/scroll/appearance/mixed-image sequence on the exact staged Release after root grants the lease.
Author
Owner

Worker: /root/sidebar_live_geometry_diagnosis (flicker diagnosis), no source edits.

The exact 6ca85fd2d82428d4fe18db508535bc643f3a0ee4 Release completed a fresh-process full-selection plus 177,779-byte native paste and Undo sequence during the issue #13 sample. Pre-selection and post-paste native window captures establish correct visible endpoints, and source/AppTrace receipts establish that the edit and one post-super draw occurred. There was no continuous video and no invalidation-reason telemetry, so these endpoint captures cannot prove the absence or presence of an intermittent flash. They are not being counted as a flicker pass.

The CPU profile did identify the best next correlation point: after the paste mutation, the deferred caret-reveal closure entered BlockEditorView.revealInsertionPoint and TextKit viewport relocation. Together with the code-audit candidates already posted (mount double-refresh/full invalidation, image geometry completion, projection/display invalidation, and unconditional host/page relayout), the next opt-in diagnostic should record a numeric reason and generation at those invalidation/reveal paths and match it to post-super draws and existing document geometry. That is narrower than changing clipping or suppressing redraws without a reproduced flash.

Mixed-image, appearance, selection-only, and bounded scroll recordings remain required, as does a before/after repair. Issue stays open. Raw shared-run artifacts are /Users/lume/Performance/results/6ca85fd2-paste-issue13-02/; screenshots are state evidence only and are not performance evidence.

Worker: `/root/sidebar_live_geometry_diagnosis` (flicker diagnosis), no source edits. The exact `6ca85fd2d82428d4fe18db508535bc643f3a0ee4` Release completed a fresh-process full-selection plus 177,779-byte native paste and Undo sequence during the issue #13 sample. Pre-selection and post-paste native window captures establish correct visible endpoints, and source/AppTrace receipts establish that the edit and one post-super draw occurred. There was no continuous video and no invalidation-reason telemetry, so these endpoint captures cannot prove the absence or presence of an intermittent flash. They are not being counted as a flicker pass. The CPU profile did identify the best next correlation point: after the paste mutation, the deferred caret-reveal closure entered `BlockEditorView.revealInsertionPoint` and TextKit viewport relocation. Together with the code-audit candidates already posted (mount double-refresh/full invalidation, image geometry completion, projection/display invalidation, and unconditional host/page relayout), the next opt-in diagnostic should record a numeric reason and generation at those invalidation/reveal paths and match it to post-super draws and existing document geometry. That is narrower than changing clipping or suppressing redraws without a reproduced flash. Mixed-image, appearance, selection-only, and bounded scroll recordings remain required, as does a before/after repair. Issue stays open. Raw shared-run artifacts are `/Users/lume/Performance/results/6ca85fd2-paste-issue13-02/`; screenshots are state evidence only and are not performance evidence.
Author
Owner

Worker: /root/sidebar_live_geometry_diagnosis (bounded flicker follow-up).

Isolated worktree: /Users/kayg/Developer/calternal-app/.worktrees/editor-caret-relocation-perf

Branch: wave16/editor-caret-relocation-perf

Base: exact integration 37c5d40de40a2d0b279aad8d13d6f68837533c2d, clean at creation.

Current state: planning only; no source edits or runtime use. The 6ca85 paste profile did not reproduce or disprove a visible flash, but it found a concrete post-mutation double-pass candidate: the editor performs immediate caret reveal and schedules a later reconciliation; the later pass spent 55 sampled milliseconds, including 33 in TextKit viewport relocation.

Immediate next action: check the documented viewport/caret invariants and design a narrow guard around redundant relocation or projection work. A reviewer must approve the plan before implementation. Any candidate must retain distant block navigation, EOF paste/typing, source-selection mapping, image-height growth, and the previously repaired scroll-origin behavior. Issue stays open.

Worker: `/root/sidebar_live_geometry_diagnosis` (bounded flicker follow-up). Isolated worktree: `/Users/kayg/Developer/calternal-app/.worktrees/editor-caret-relocation-perf` Branch: `wave16/editor-caret-relocation-perf` Base: exact integration `37c5d40de40a2d0b279aad8d13d6f68837533c2d`, clean at creation. Current state: planning only; no source edits or runtime use. The `6ca85` paste profile did not reproduce or disprove a visible flash, but it found a concrete post-mutation double-pass candidate: the editor performs immediate caret reveal and schedules a later reconciliation; the later pass spent 55 sampled milliseconds, including 33 in TextKit viewport relocation. Immediate next action: check the documented viewport/caret invariants and design a narrow guard around redundant relocation or projection work. A reviewer must approve the plan before implementation. Any candidate must retain distant block navigation, EOF paste/typing, source-selection mapping, image-height growth, and the previously repaired scroll-origin behavior. Issue stays open.
Author
Owner

Bounded flicker plan from the retained current-Release profile (planning only; issue remains open).

The 6ca85fd2 native paste trace shows a concrete invalidation/viewport correlation point: one accepted replacement performs a 96-sample immediate reveal, AppKit then re-enters scrollRangeToVisible for another 39-sample immediate reveal, and scheduled reconciliation work accounts for 55 samples. The profile did not visually reproduce the user's intermittent flicker, so this is a measured hotspot candidate rather than a confirmed flicker cause.

Proposed reversible candidate: coalesce only an exact same-turn pending reveal in BlockEditorView, keyed by source revision, requested display range, selected range, and reveal mode. Keep the first immediate TextKit relocation and its single deferred post-layout reconciliation. Create the token only when the first immediate reveal succeeds; consume it in the scheduled closure; allow all changed, failed, or later requests through. Do not special-case pasteboard content and do not change canonical Markdown/projection behavior.

Material risks:

  • an exact duplicate may be AppKit's recovery after partial layout rather than redundant work;
  • careless lifetime handling could suppress a legitimate Find, Accessibility, Undo, block-selection, EOF, or distant-navigation reveal;
  • the post-paste AppKit range may differ, in which case the guard should intentionally have no effect;
  • reducing relocation work may improve the measured draw path without eliminating the reported visual flash.

The candidate cannot close #14 without a reproducible visual sequence. After reviewer approval and a separately owned Release build, measure the same large-paste A/B first and verify source/caret/Undo. Then retain before/after evidence for mixed lists/images, appearance changes, selection, paste, and scrolling. A pass requires visible caret/source mapping plus absence of the reproduced flash; profile changes alone are insufficient.

Bounded flicker plan from the retained current-Release profile (planning only; issue remains open). The `6ca85fd2` native paste trace shows a concrete invalidation/viewport correlation point: one accepted replacement performs a 96-sample immediate reveal, AppKit then re-enters `scrollRangeToVisible` for another 39-sample immediate reveal, and scheduled reconciliation work accounts for 55 samples. The profile did not visually reproduce the user's intermittent flicker, so this is a measured hotspot candidate rather than a confirmed flicker cause. Proposed reversible candidate: coalesce only an exact same-turn pending reveal in `BlockEditorView`, keyed by source revision, requested display range, selected range, and reveal mode. Keep the first immediate TextKit relocation and its single deferred post-layout reconciliation. Create the token only when the first immediate reveal succeeds; consume it in the scheduled closure; allow all changed, failed, or later requests through. Do not special-case pasteboard content and do not change canonical Markdown/projection behavior. Material risks: - an exact duplicate may be AppKit's recovery after partial layout rather than redundant work; - careless lifetime handling could suppress a legitimate Find, Accessibility, Undo, block-selection, EOF, or distant-navigation reveal; - the post-paste AppKit range may differ, in which case the guard should intentionally have no effect; - reducing relocation work may improve the measured draw path without eliminating the reported visual flash. The candidate cannot close #14 without a reproducible visual sequence. After reviewer approval and a separately owned Release build, measure the same large-paste A/B first and verify source/caret/Undo. Then retain before/after evidence for mixed lists/images, appearance changes, selection, paste, and scrolling. A pass requires visible caret/source mapping plus absence of the reproduced flash; profile changes alone are insufficient.
Author
Owner

Reviewer required narrower scope before implementation. The trace identifies native super.paste as the only proven duplicate caller, so a global reveal coalescer would expose unrelated Find, Accessibility, Undo, selection, and navigation paths without evidence.

Amended candidate: create a one-shot exact marker only for the synchronous duration of native super.paste. Arm it only after the canonical replacement's immediate non-local reveal has scheduled its retained post-layout reconciliation. Key it by revision, target range, selected range, attached window, and enclosing scroll view. The first paste-time AppKit scrollRangeToVisible consumes the marker and is skipped only on an exact match; all mismatches and failures run normally, and defer clears the scope. Preserve the original immediate reveal and one asynchronous reconciliation, with the latter fenced to the same window and scroll view.

This may remove one redundant TextKit relocation/layout pair, but it remains only a flicker correlation candidate. A focused shared-scroll native-paste caret/source/Undo test and exact Release A/B come first. Issue #14 still requires a reproduced continuous visual flash and mixed list/image plus appearance evidence before any repair or closure claim.

Reviewer required narrower scope before implementation. The trace identifies native `super.paste` as the only proven duplicate caller, so a global reveal coalescer would expose unrelated Find, Accessibility, Undo, selection, and navigation paths without evidence. Amended candidate: create a one-shot exact marker only for the synchronous duration of native `super.paste`. Arm it only after the canonical replacement's immediate non-local reveal has scheduled its retained post-layout reconciliation. Key it by revision, target range, selected range, attached window, and enclosing scroll view. The first paste-time AppKit `scrollRangeToVisible` consumes the marker and is skipped only on an exact match; all mismatches and failures run normally, and `defer` clears the scope. Preserve the original immediate reveal and one asynchronous reconciliation, with the latter fenced to the same window and scroll view. This may remove one redundant TextKit relocation/layout pair, but it remains only a flicker correlation candidate. A focused shared-scroll native-paste caret/source/Undo test and exact Release A/B come first. Issue #14 still requires a reproduced continuous visual flash and mixed list/image plus appearance evidence before any repair or closure claim.
Author
Owner

Narrow source candidate 51628eb9 is ready for build-owner validation on wave16/editor-caret-relocation-perf, parent exact 37c5d40. git diff --check passed; no local compile or runtime was performed.

The implementation coalesces only an exact AppKit follow-up while synchronous native super.paste is active, retaining the canonical immediate reveal and one host-fenced deferred reconciliation. All custom paste, failed, changed, later, Find, Accessibility, Undo, selection, and navigation requests keep their existing paths. A focused shared-scroll native-paste regression asserts exact source, result selection, visible distant/EOF caret, and Undo.

Independent implementation review: PASS, no P1/P2/P3 findings. Build-host tests and exact Release A/B are pending. This remains a measured relocation/layout hotspot candidate, not a verified flicker repair. #14 stays open until a continuous visual sequence reproduces the reported flash and before/after mixed list/image and appearance evidence shows it eliminated.

Narrow source candidate `51628eb9` is ready for build-owner validation on `wave16/editor-caret-relocation-perf`, parent exact `37c5d40`. `git diff --check` passed; no local compile or runtime was performed. The implementation coalesces only an exact AppKit follow-up while synchronous native `super.paste` is active, retaining the canonical immediate reveal and one host-fenced deferred reconciliation. All custom paste, failed, changed, later, Find, Accessibility, Undo, selection, and navigation requests keep their existing paths. A focused shared-scroll native-paste regression asserts exact source, result selection, visible distant/EOF caret, and Undo. Independent implementation review: **PASS**, no P1/P2/P3 findings. Build-host tests and exact Release A/B are pending. This remains a measured relocation/layout hotspot candidate, not a verified flicker repair. #14 stays open until a continuous visual sequence reproduces the reported flash and before/after mixed list/image and appearance evidence shows it eliminated.
Author
Owner

Combined integration candidate — worker /root/block_drag_finish

Reviewed reveal-coalescing/flicker commit 51628eb92208b8e980acf0ddca91d5a328397c52 is integrated conflict-free as 8d3dd56dbb76805747783ba662b1150f366dfc0c with identical stable patch ID. Combined tip is f99ed4f28ae3b21beb87e4a99c4bf4a05acaaae8 in .worktrees/editor-structural-combined, based on exact 26eb1552.

Exact interaction review is active; no local build or GUI run. Focused flicker/cancellation coverage: testRepeatedCaretRevealKeepsWrappedInsertionsVisibleInSharedScrollPage, testNativePasteKeepsDistantCaretVisibleAndUndoesInSharedScrollPage, and testStaleCaretRevealDoesNotOverrideNewSelectionOrFocus. Runtime flicker/performance remains a separate QA gate.

Combined integration candidate — worker `/root/block_drag_finish` Reviewed reveal-coalescing/flicker commit `51628eb92208b8e980acf0ddca91d5a328397c52` is integrated conflict-free as `8d3dd56dbb76805747783ba662b1150f366dfc0c` with identical stable patch ID. Combined tip is `f99ed4f28ae3b21beb87e4a99c4bf4a05acaaae8` in `.worktrees/editor-structural-combined`, based on exact `26eb1552`. Exact interaction review is active; no local build or GUI run. Focused flicker/cancellation coverage: `testRepeatedCaretRevealKeepsWrappedInsertionsVisibleInSharedScrollPage`, `testNativePasteKeepsDistantCaretVisibleAndUndoesInSharedScrollPage`, and `testStaleCaretRevealDoesNotOverrideNewSelectionOrFocus`. Runtime flicker/performance remains a separate QA gate.
Author
Owner

Source integration review — exact combined tip 5f8dd69e029e63d5c87e68d4b5e663b63684ef52 against base 26eb155253241603ec8f1a89e263a7a8cd496341: PASS (no P1–P3 findings).

The reviewed native-paste reconciliation patch is unchanged by stable patch ID. Exact-request suppression remains limited to the active native paste and matching revision/selection/window/scroll identity; changed requests proceed normally, and deferred callbacks fail closed after selection, revision, attachment, or editability changes. The list, code-fragment, hover, image, and title additions do not broaden this suppression.

This is a source-only integration verdict. Compile and mounted runtime verification remain with the build/QA lanes.

Source integration review — exact combined tip `5f8dd69e029e63d5c87e68d4b5e663b63684ef52` against base `26eb155253241603ec8f1a89e263a7a8cd496341`: **PASS (no P1–P3 findings)**. The reviewed native-paste reconciliation patch is unchanged by stable patch ID. Exact-request suppression remains limited to the active native paste and matching revision/selection/window/scroll identity; changed requests proceed normally, and deferred callbacks fail closed after selection, revision, attachment, or editability changes. The list, code-fragment, hover, image, and title additions do not broaden this suppression. This is a source-only integration verdict. Compile and mounted runtime verification remain with the build/QA lanes.
Author
Owner

Root fast-forwarded the clean preview integration branch from26eb1552 to exact5f8dd69e after independent combined source review PASS and diff-check. Includes code-block presentation, atomic disjoint list indentation, native-paste reveal coalescing, and hover lifecycle/footer-width correction. The known roughly7pt visible text/mentions alignment gap remains for native measurement. This is a NEXT build candidate; it does not supersede the current26eb event/title build and is not installed. No runtime/performance acceptance is claimed.

Root fast-forwarded the clean preview integration branch from26eb1552 to exact5f8dd69e after independent combined source review PASS and diff-check. Includes code-block presentation, atomic disjoint list indentation, native-paste reveal coalescing, and hover lifecycle/footer-width correction. The known roughly7pt visible text/mentions alignment gap remains for native measurement. This is a NEXT build candidate; it does not supersede the current26eb event/title build and is not installed. No runtime/performance acceptance is claimed.
Author
Owner

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.

  • wave13/editor-chrome-runtime-repair — 7c049cd14fde0797452459399a6a93c772f089f0

Master #20 contains the resume instructions. No force push; dev remains 1d8f4adf.

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. - `wave13/editor-chrome-runtime-repair` — `7c049cd14fde0797452459399a6a93c772f089f0` Master #20 contains the resume instructions. No force push; dev remains 1d8f4adf.
Sign in to join this conversation.
No labels
No milestone
No project
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#14
No description provided.