TurtleGit for Mac

View Markdown source ↗

Testing TurtleGit for Mac

scripts/test-merge-ignored.py --only aligned checks actual three-pane logical result counts and locator coordinates, footer resolution followed by one-row source/result alternatives, exact neighboring payload preservation, Undo/Redo metadata and unchanged inputs. The grouped default retains ignored-conflict, engine/save/history/color and ordinary-source workflows. Core presentation tests verify removed records, logical numbers, blank conflict slots versus serialized markers, precise post-resolution row maps, Unicode offsets, edited provenance and refusal to invent unknown or multi-copy coordinates. The current aligned case also exercises native row editing, source gaps, Save, logical line numbers and multiline Find/Undo; remaining gaps are recorded below.

scripts/test-merge-whitespace-states.py --only savepoints checks real native saved/branched same-byte edits, global cross-pane Undo/Redo, inserted-line deletion cleanup, owned option/filter Cancel/discard/failed Save, Save-left/right/both, active-filter removal and close/Quit/duplicate/late-answer guards. --only engine retains actual two-pane engine/filter/file/Save regressions. Ordinary typing no longer starts an engine request, so that fixture explicitly requests recomputation before asserting its pending-transfer gate. Core in-place tests cover cleanups, real blank records, independent pane savepoints and rebound file identity.

The grouped editor runner scripts/test-merge-whitespace-states.py now includes --only in-place: real native two-pane and combined typing/Paste, exact retained Edited/Removed rows, peer gaps without peer-byte changes, helper-free edits, Undo/Redo layout snapshots, and Save with UTF-8 BOM/CRLF while preserving Base. FileComparisonInPlaceTests covers Unicode carets, inserted/deleted rows, empty buffers and EOF gaps/endings. The retained initial-navigation fixture now expects Undo to restore its rows directly, while still refusing late caret restoration.

The grouped scripts/test-merge-ignored.py receiver also includes --only blocks for ordinary source/result block choices: captured menu targets, all four choices, single-row changes beside other additions, zero-byte removed-row anchors, repeated alternatives, Undo/Redo maps/colors/modified state and stale owner/edit/reload/Quit gates. Core MergeSourceBlockEditTests and the engine presentation tests cover Unicode offsets, mixed/final endings, omitted states, map gaps, stale text and same-byte choice history. The full grouped run retains ignored-conflict and three-pane engine/history/color workflows; it compiles the actual app objects once.

python3 scripts/test-reference-menu-targets.py --git /usr/bin/git --git build/git-runtime/Git/bin/git links the current Debug app objects once and runs owned sequential receivers for captured reference-menu commands and retained folder/comparison/tracking/rename/standalone workflows. --only permits focused failure repair. The new fixture dispatches actual AppKit menu items after moving the selection, verifies read/child/range/copy/remote targets, performs real Git tracking/rename/deletion and filtered folder deletion, and refuses stale or closed commands. It checks that HEAD, index and working bytes remain unchanged. This native-only batch does not change Core algorithms or require a full Core rerun.

Development batch cadence

Implement a complete related feature group across Core, native dialogs, Finder routing where relevant, resources and documentation before validating it. Do not run the full suite on a timer or after each file/control edit. Run one grouped set of relevant Core checks, one app build and one combined native receiver at the end of the batch. Broaden validation only for a concrete failure or unresolved cross-feature risk; use focused repairs for failures. The full suite belongs to CI and release milestones. Close every test-owned window/process after its checks, and reuse compiled native receivers when sources have not changed.

Run commands from the repository root. The checked-in macOS workflow defines the hosted CI sequence. Local success does not establish that a hosted run passed, that dialogs match TortoiseGit visually, or that the app is ready for distribution.

GitHub CI repair, 12 October 2026

Run 38199319588 reached 1,063 Core tests and reported ten failures: stale Finder catalog/empty-selection/icon assertions and a real SVN fast-forward reset parser incompatibility. The contracts now reflect the implemented command set and intentional source-icon aliases; reset uses a validated full object ID without the unnecessary --end-of-options. The focused repair passed 25 tests with system Git and four SVN tests with packaged Git. CI now checks the SVN commands with both executables. Hosted success is still pending. See the repair record.

Prepared runtime caches

CI now caches the remaining expensive pinned helper builds with exact toolchain/ source/transitive keys and unconditional validation. Valid packages are saved before app tests, so later failures do not discard dependency build work. Full Core/native/embedding checks still run. See runtime reuse.

Reusing the Debug app in native checks

The 82 runners listed in scripts/native-receiver-migrations.json link their existing Swift fixtures against one shared library made from the Debug app's built objects. Build Debug after changing app sources; the helper refuses stale or missing objects. It does not silently compile a separate app variant.

The cache includes app sources and objects, fixture sources, imported app/Core/ SMTP modules and binaries, helper implementation, architecture, compiler, SDK and compilation settings. Each fixture retains its own entry point, arguments, Git selections and assertions. Original source locations are preserved for resource lookups. Synchronous fixtures keep their own event loop; asynchronous fixtures run on the main actor with an AppKit loop. The library and receivers live in build/qa/native-receivers/linked; deleting that directory is safe.

Ordinary runner execution has a bounded owned process group, including cleanup on success, failure and timeout. Runners with existing custom process ownership retain it. This change does not remove native CI steps or establish signed UI, Finder, visual parity or App Store acceptance. Run the lightweight ownership and cache contracts with python3 scripts/test-native-receiver.py.

The migration checkpoint compiled all 82 retained fixture groups against the pre-repair Debug app, with a 1.5-second median fixture compilation time. Four existing workflow groups passed with system and prepared bundled Git. A later focused Import Patch check covers actual clipboard dispatch and its busy/Quit/ retired gates after an app repair. At that checkpoint the full Import Patch fixture failed later Save As/Undo checks; the old hosted reference-family compile also exceeded its 300-second limit. See the migration evidence.

The subsequent Review output ownership batch tracks the related native fixes: cancelable pane/unified-patch output, held format choices, stable editor/Undo lifetime, inline errors, clean saved previews and explicit continuation to another file. Its full native fixture retains normal Import Patch, actual Git mutations, line-ending, close/Quit and late-reply checks; new ownership cases also hold choices and a real generator process. The dated record separates accepted checks, repaired setup assumptions and remaining gaps. The hosted reference compilation timeout remains separate and unresolved.

Native LFS transition checkpoints

The grouped LFS/mail receiver now has a --lfs-only diagnosis mode using its same source/framework/toolchain cache. LFS sort checks wait for the native row-ID projection and selected rows; Commit's LFS-owner column width check waits for native column visibility/settings and saved width. Assertions retain their selection/checkbox/width requirements, with diagnostics on failure. The final focused receiver passed locally. The hosted line-111 failure has not been reproduced locally or confirmed repaired by a new hosted run. See the repair record.

Hosted Core checkpoint, 12 October 2026

Commit 98038f7 passed the hosted full Core suite: 1,083 tests, zero failures, one skipped, in 1,458.882 seconds, plus four packaged-Git SVN checks. The job later failed in the native LFS/mail receiver's selection assertion, so this is not a green full workflow. Later port batches need their own hosted checks. See the authoritative checkpoint.

Latest complete local Core checkpoint

On October 11, 2026, swift test completed 980 tests, zero failures, one optional MX probe skipped, in 874.897 seconds with Swift 6.3.3 and system Git 2.50.1. The process exited with status zero. This includes the generated change-set comparison helper and the existing Core integration tests. No Core sources or Core tests changed while the suite ran; simultaneous native app work is verified separately. See the checkpoint record. The later Sync Find icon/resource addition passed all three MenuIconTests; it is outside that complete-suite checkpoint. This result does not establish native UI parity, hosted CI, signed Finder or App Store acceptance. The earlier dated checkpoints below retain their original scope and limitations.

Current compatibility checkpoint

On October 10, 2026, the current compatibility changes passed a complete local swift test: 925 tests, zero failures, with one optional system-DNS probe skipped. The Apple Git 2.50.1 / Swift 6.3.3 run finished normally in 535.358 seconds. The two nested-tag tests also check the real Revision Graph reader and copied outer-tag annotation. Eleven focused tests passed with isolated Git 2.39.5 and again with packaged Git 2.55.0; 68 broader tests passed with system Git.

These changes repair nested-tag metadata using the pinned upstream show-ref --dereference CLI route, atomically publish private SMTP fixture JSON, and verify legacy rebase messages against exact raw Git state rather than a version-specific count of trailing blank lines. Production SMTP and Rebase message decoding are unchanged. See the compatibility record for source hashes, engine reproduction and remaining verification.

At source checkpoint c5dac22, unsigned Debug/Store builds and both bundle audits passed, as did native Log Find with system and packaged Git. The first native Graph run passed system Git but failed a menu invocation assertion with packaged Git. A diagnostic rerun retained all assertions and passed both engines; the initial failure's root cause is unproven. Action diagnostics remain in the receiver. Existing SwiftUI cycle warnings during hidden Log reloads also remain. Neither receiver establishes physical-input, installed Finder or signed sandbox acceptance.

The previous published macOS run for 110c364 completed its 925-test suite with five failures in the two nested-tag cases and the legacy rebase expectation. That run predates these fixes; passing local checks do not establish a passing hosted run.

For a bounded reproduction of intermittent Graph receiver failures, use:

python3 scripts/test-revision-graph-window.py \
  --git /usr/bin/git --git build/git-runtime/Git/bin/git --repeat 3

The runner compiles once and runs fresh fixtures sequentially, stopping at the first failure. --repeat accepts 1–10; the default remains one run per engine. Three runs per engine passed locally with 30 validated deletion-menu activations. This did not reproduce or explain the earlier failure. See the repeat record.

The subsequent macOS run for f9521c9 passed 925 Core tests, zero failures, with one optional skip, on the hosted older-Git/Swift toolchain. The job then failed compiling the historical item-provider receiver because its standalone build omitted Core's SMTP module. The corrected command exposes the generated Clang module map and links the C objects with libcurl; the unchanged receiver passes locally. The hosted retry for a806f22 passed both the integration-test and repaired item-provider steps in run 38084063632. Later native/packaging gates are still running; the job has not yet passed. See the build diagnosis.

References containing a commit

At source checkpoint 1769e2c738e9b078e6c377205f5124b23bd010db, the new containment reader passes three real-repository tests with system Git, isolated Git 2.39.5 and packaged Git. Six system-Git tests including menu-icon checks pass. The native receiver passes with system and packaged Git, including menu dispatch, comparison direction, filtering, all three picker routes, stale reply rejection, bare repositories and the parent Log close route. Latest unsigned Debug/Store builds and both package audits pass, with 120 original icons verified.

python3 scripts/test-commit-containing-refs.py \
  --git /usr/bin/git --git build/git-runtime/Git/bin/git

The receiver owns hidden windows, private preferences and disposable repositories, and cleans up after terminal completion. Actual native content captures were inspected in light and dark mode and included on the Pages site. Physical input, VoiceOver, installed Finder and signed sandbox acceptance remain pending. The complete local suite passed 928 tests, one skipped, zero failures in 526.670 seconds. The process exited normally; this result does not establish the new hosted CI result. See the verification record.

Log commit ordering

At source checkpoint 900aaf82550e616fa4a79bfd876e2740696f487f, three ordering tests pass with Apple Git 2.50.1, isolated Git 2.39.5 and packaged Git 2.55.0. A broader system-Git history/ordering/Revision Graph run passes 62 tests. The fixture deliberately skews author/committer dates across a merge, distinguishes at least three actual walks and compares all four choices to direct Git. Limits, path filtering, search, ranges, graph input and repository bytes are covered.

python3 scripts/test-log-ordering.py \
  --git /usr/bin/git --git build/git-runtime/Git/bin/git

The hidden native receiver passes on both engines: actual header delegate entry, four-choice draft, Cancel/OK, Return/Escape, retained selection, busy/close/Quit fences, an already-open modeless reference child and forced parent close. Actual light/dark content captures were inspected. Latest unsigned Debug/Store builds and both package audits pass. The previous full 928-test run predates the ordering change; these targeted results do not establish a full 931-test run. Physical, VoiceOver, localization, installed Finder and signed sandbox acceptance remain pending. See the ordering record.

Commit-reference completion cache follow-up

At Core checkpoint 9400d1d, four containment/completion tests pass on system, Git 2.39.5 and packaged Git. Native checkpoint dc2d8d5 passes the extended receiver on both engines: initial empty/invalid completion; real new references in containment while completion stays cached; F5 reload preserving entered text; read counters; simulated nonfatal completion failure and retry; controlled late completion replies after supersession and close. Existing menu/picker/stale commit-data/parent close routes still pass. Builds and package audits are recorded in the follow-up evidence.

These focused checks do not establish the full new 932-test suite, physical input, installed Finder, localization or signed sandbox acceptance. The Abort Merge owner audit maps nine existing controls and records missing modal comparison, separate progress, Quit and forced-close/preflight cancellation behavior; see the audit.

Previous full-suite checkpoint

At Core source checkpoint c4bd370, a fresh local swift test passed 921 tests, zero failures, with one optional DNS probe skipped, on October 10, 2026. The run used Apple Git 2.50.1 and Swift 6.3.3 and finished normally after 527.3 seconds. The initial run found two stale Finder Revision Graph expectations; they were corrected against the pinned upstream source before this complete rerun.

The native Finder receiver then exposed a real menu-order mismatch. At a88d8c2, Revision Graph follows Browse References, matching the source menu. The receiver passed all 45 implemented root-entry projections, and unsigned Debug/Store builds and both bundle audits passed. Core sources and tests were unchanged after the full-suite checkpoint. See the current integration record. The previous 866-test record remains historical.

The published macOS run for 23240f5 failed before executing tests: the hosted Swift 6.1.2 compiler timed out on two Cleanup error-description expressions. a0c630e replaces their long chained expressions with equivalent sequential string construction. All 25 focused Cleanup tests pass locally on Swift 6.3.3. The hosted retry completed with the Cleanup expressions compiling, then failed on two further Log expressions. The subsequent Log Find run confirmed those same failures in RepositoryModel.showLog and the revision-table signature. No integration tests executed in that step. See the Cleanup diagnosis.

At 8da3f2f, both Log expressions use equivalent sequential string construction. Local SwiftPM and unsigned Debug/Store builds, both bundle audits and the native Log Find receiver with system and packaged Git pass. The hosted graph runtime now uses an exact source/toolchain cache key, validates every restored package, and saves only a validated finished package. A relocated package passed locally; a modified copy was rejected by its binary digest. Hosted compiler success and cache save/hit behavior still require a new run. See the Log compiler/cache evidence. The first cache-enabled hosted run subsequently completed graph-package validation and cache saving successfully. The Cleanup/Log compiler failures were resolved; the integration step then failed compiling two DNS wire fixtures in SMTPMXTests.swift, before executing tests. At 23214de, equivalent sequential construction and explicit byte types preserve the fixtures and assertions. All five focused tests pass locally with one existing optional DNS probe skipped. Hosted acceptance of that fix still requires a new run. See the DNS fixture diagnosis.

The next hosted run at afe5691 confirms an exact graph-cache hit: the builder is skipped, the package validator passes and saving is skipped on the hit. It was building OpenSSH helpers at inspection and precedes the DNS fixture correction; complete hosted success remains unverified.

The subsequent run at 4e2bb70 resolved those compiler errors and executed 925 tests, one skipped, seven failures (two unexpected) in 741.8 seconds. Four cases failed: nested-tag reference/tag-info searches, an empty SMTP fixture readiness file and extra trailing blank lines in a legacy-encoded rebase edit message. These failures are unresolved; native and package steps after the integration gate did not run. See the observed regressions and next checks.

The subsequent Log Find implementation has four focused Core tests and a native receiver, both passing with system and packaged Git. Its unsigned Debug/Store builds, package audits, inventory regression and local website generation pass. These results are separate from the last complete 921-test checkpoint above. See Log Find evidence.

The subsequent parent-position correction follows both source headers' initial zero and keeps the numeric Find index in the Log/Graph parent. Native receivers with both Git engines verify initial Graph row exclusion, successful match/ref updates, Shift selection preservation, close/reopen and reload retention, Log context-menu positioning and bounded Log search with a stale index. The Graph fixture's older first-query assumption was corrected against the pinned source. The Log reload check emitted SwiftUI AttributeGraph cycle warnings; its assertions passed, but physical rendering remains unverified. See Find position evidence.

The subsequent open-Find reference refresh maps pinned Log Refresh and CFindDlg::RefreshList: accepted Log reloads replace the reference read, preserve filter/query/index and cancel older searches/reads. Critical-sheet acknowledgment drains a queued refresh. Natural reference ordering follows native Finder collation, and the name filter now compares literal UTF-16 rather than merging canonically equivalent Unicode spellings. Native Log checks with both Git engines verify real numeric tag ordering, NFC/NFD and case-sensitive filtering, rapid reloads, an actual Log tag-deletion completion, deferred-error refresh and parent close. Both full native Graph receivers also pass with the shared implementation. The existing Log SwiftUI reload cycle warnings remain; these hidden checks do not prove physical rendering or full dialog parity. See reference refresh evidence.

Core and native receivers

Build the required helpers, run the Git integration suite, then check the native historical item provider:

python3 scripts/build-editorconfig-runtime.py
python3 scripts/build-issue-regex-runtime.py
python3 scripts/build-graph-layout-runtime.py
swift test
scripts/verify-browser-item-provider.sh

Keep these commands sequential. SwiftPM holds a lock on .build during tests; the provider script also builds in that directory. A lock-wait message means another build or test owns it, and is not evidence that the provider failed.

Revision Graph's separate history query and ordered reduction have a focused repository suite. Run it with system and packaged Git sequentially:

swift test --filter 'RevisionGraphTests|HistoryRangeTests'
TURTLEGIT_GROUP_TEST_GIT="$PWD/build/git-runtime/Git/bin/git" \
  swift test --filter 'RevisionGraphTests|HistoryRangeTests'

These checks cover graph scopes, tag hiding, merge/branch structure, terminal excluded parents, unborn/detached/bare repositories and superproject index pointers, including conflicts. They check unchanged repository bytes and do not launch native windows. See Revision Graph parity for the native window, Filter and modeless Find checks. The workflow runs their headless receiver with both system and packaged Git after both app builds:

python3 scripts/test-revision-graph-window.py \
  --git /usr/bin/git --git build/git-runtime/Git/bin/git

That receiver checks native controls, reference navigation, Find initialization, Return/Shift-Return routing and owned error-sheet cleanup. It does not establish physical mouse/keyboard, accessibility or signed sandbox acceptance.

The layout bridge's focused suite uses the built OGDF runtime and a private cancelled worker:

swift test --filter 'RevisionGraphLayoutTests|RevisionGraphTests'
python3 scripts/validate-graph-layout-runtime.py \
  build/graph-layout-runtime/GraphLayout --all-architectures
python3 scripts/test-graph-layout-cpu-baseline.py
python3 scripts/test-graph-layout-embedding.py
python3 scripts/test-graph-layout-bundles.py

The optional all-architectures command requires Rosetta on Apple Silicon. It checks actual layouts with both executable slices, not just Mach-O metadata. The Swift suite checks clipping, invalid geometry, ownership, cancellation, private file permissions and removal after the child is reaped. It launches no native app windows. See layout runtime. The bundle receiver requires completed unsigned Debug and AppStore builds. It compiles against their product modules and loads the byte-identical embedded Core framework, then locates and executes each app's own layout helper. Ad-hoc embedding checks signature/entitlement branches; signed sandbox parent execution remains separate acceptance.

Build Debug before running receivers that link its TurtleGitCore framework:

xcodebuild -quiet -project TurtleGitMac.xcodeproj -scheme TurtleGitMac \
  -configuration Debug -destination 'platform=macOS' -derivedDataPath build \
  CODE_SIGNING_ALLOWED=NO build
python3 scripts/validate-app-bundle.py build/Build/Products/Debug/TurtleGitMac.app
python3 scripts/test-worktree-dialog.py
python3 scripts/test-advanced-settings.py
python3 scripts/test-add-dialog.py
python3 scripts/test-finder-menu.py
python3 scripts/test-context-menu-settings.py

These receivers create temporary executables and repository fixtures. They use AppKit with activation prohibited and do not display app windows or enable the Finder extension. Worktree and Add perform real repository mutations in owned fixtures; Advanced Settings uses isolated defaults; Finder exercises its actual menu builder and captured routing. Worktree fixture commits explicitly disable signing so a developer's signing configuration cannot launch a signing agent. The scripts remove their temporary directories on exit.

Keep native sources unchanged while a receiver compiles or runs. Run native receivers sequentially: some larger replay fixtures use shared preferences. Do not repeatedly launch the main app to substitute for these checks. If a manual interaction test needs a window, close the owned window and app when finished and record which gestures and results were actually observed.

Git compatibility and the Store configuration

The workflow builds bundled Git, compiles a separate unsigned Store bundle in build-store, and validates it with --require-git. Follow its exact commands when reproducing those jobs; a Debug bundle audit does not cover the Store bundle. Store validation checks packaging and the bundled runtime, not signed sandbox execution or App Store acceptance. See distribution engineering.

For native replay and menu coverage, the workflow runs:

python3 scripts/build-replay-test-git.py --version 2.37.1
python3 scripts/build-replay-test-git.py --version 2.39.5
python3 scripts/check-cherry-pick-native.py \
  --git /usr/bin/git \
  --git build/replay-test-git/2.37.1/bin/git \
  --git build/replay-test-git/2.39.5/bin/git \
  --git build-store/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git

The last path requires the Store build first. --menus-only and --references-only select focused coverage and must not be reported as the full replay check. The receiver also requires the SwiftPM executable and Debug framework built above. Do not rebuild or replace those dependencies during a run.

Evidence and failures

Retain complete command output under ignored build/qa/<scope>/, including the first failure and any subsequent successful reproduction. Record the checkpoint, source hashes, Git versions, command scope and limitations in docs/qa. Check the final exit status; an output timeout while observing a live process is not a test result. Continue observing the same process rather than starting a second copy.

For GitHub failures, identify the failing workflow step and read its complete output. Reproduce that exact script with matching dependencies before changing app behavior. The native provider's compiler/output-command defect was repaired in cec56b1; the local native dialog audit and signing-fixture regression are recorded in the CI receiver record. Hosted workflow results still require separate inspection.

Model and transport checks do not replace light/dark screenshots, keyboard and mouse acceptance, VoiceOver checks, activated Finder testing, or signed sandbox tests. Track those separately in UI parity.

Pinned upstream inventory

Run python3 scripts/check-inventory-pin.py for an isolated temporary Git fixture. It verifies that dirty resource files and newer HEAD commits cannot silently change the recorded inventory, and that explicit repinning invalidates changed review decisions while preserving unchanged mappings. This runs in the macOS workflow before native builds. No upstream clone, network or app launch is needed. Actual inventory regeneration still requires the recorded commit to be present in .upstream/TortoiseGit; see the UI audit.

Saved progress action log checkpoint

The Action log guide tracks source retention and Saved Data Show/Clear parity, headless verification, covered progress windows and remaining physical/signed and wider Saved Data gaps.

Saved Data history and decisions checkpoint

The Saved Data guide maps URL/input-message history and stored decision controls to the source and documents reset scope and remaining groups. Core reset-scope tests and private native model checks are recorded in the checkpoint.

Temporary files checkpoint

The temporary-file guide maps shared private temporary storage and Saved Data's confirmed cleanup to the pinned source. Checkpoint evidence distinguishes Core/native checks from remaining physical, live-operation and signed acceptance.

Dialog geometry checkpoint

Dialog sizes and positions maps native frame persistence and Saved Data reset to the source, with Core/headless verification and physical, mode-specific and signed gaps. Evidence: checkpoint.

Log history limit checks

After the Debug build, use the compiled-source scope oracle and the hidden native scope/defaults receiver:

swift test --filter 'HistoryLimitTests|CommitHistoryTests|WorkingTreeHistoryTests'
python3 scripts/test-history-limit-oracle.py
python3 scripts/test-log-history-limits.py --git /usr/bin/git \
  --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git

The bundled executable must exist from a prior Store build. Keep that build terminal before rebuilding Debug for the receiver; do not rebuild Store until all Debug receivers are terminal. The oracle extracts the pinned GetLogCmd filter body and supplies local-midnight epochs through a portable CTime adapter. It verifies scope arithmetic and arguments, not Windows time APIs. The native receiver uses a private 205-commit repository and preference domain, an owned hidden Settings window, actual native Apply/Cancel buttons and real history reads. It checks exact repository bytes after reading and closes its window. Physical menu/sheet gestures and signed sandbox execution require separate acceptance.

Shared Log message-line checks

After the Debug build, run:

swift test --filter LogMessageLineTests
python3 scripts/test-log-message-line.py --log-blame-only --git /usr/bin/git \
  --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git

The native receiver constructs source-default, disabled and enabled models with private preferences. It inspects actual hidden Log/Blame message text and Rebase row/selection/action data from real multiline-message history and a read-only Rebase plan. Actual Subjects/Messages menu selectors also write source-formatted text to an owned private pasteboard, which is released afterwards. The system clipboard is not touched. The focused flag does not claim Rebase rendered-text acceptance. Omit it for the strict three-view check, which currently fails at Rebase text observation; the same absence is reproduced by a minimal SwiftUI Table. This full UI gate remains pending, rather than being counted as passed. Its temporary Blame source copy only appends a same-file view access function; production private table code is unchanged. No main app or replay operation runs. Owned windows, temporary fixtures and preference domains close and remove on successful exit. As with other native receivers, do not edit sources or replace linked Debug products during execution.

The focused message-line receiver also exercises real Log reloads and inspects actual attributed message cells for literal/ECMAScript match foregrounds, reference-label/full-message field gates, invalid regexes and same-identity range refresh. Build the updated IssueRegex runtime before Core/Debug checks: python3 scripts/build-issue-regex-runtime.py. Focused Core coverage is swift test --filter 'HistoryHighlightTests|IssueRegexTests|CommitHistoryTests|LogMessageLineTests'. See highlight QA; these checks do not replace the pending physical or signed acceptance gates.

Reference-label coverage adds swift test --filter 'HistoryReferenceLabelTests|HistoryHighlightTests|CommitHistoryTests|LogMessageLineTests'. The existing focused native receiver creates only a private remote/config/ref fixture (no fetch/network operation), verifies actual left/right message-cell order, shortened names/marker attachments, captured preference state and label visibility match repaint without an extra history read. It also invokes actual AppKit preference checkbox actions on the owned Dialogs page and verifies their private UserDefaults values in both directions. Private repository bytes remain unchanged after setup. See reference-label QA.

Reference-name/classification checks, including annotated tags and configured bisect terms, are recorded in reference-kind QA. Physical rendering and full dialog parity remain unverified.

Log reference badges now use native TextKit glyph drawing with source bevels, tracking shadows and annotated-tag tips. See painter QA and python3 scripts/test-log-reference-painter-oracle.py for the independent geometry/color check. It does not establish physical screenshot or full UI parity.

The focused Log receiver also checks label-context Push/Checkout callback arguments and Branches/Tags output using a private pasteboard; it performs no network push or checkout. Scope and remaining menu gaps: reference-menu QA.

Packed NFC/NFD refs, raw tracking-config bytes, leading combining marks and native same-hash label refresh are checked in reference identity QA. Config setters may normalize argv under core.precomposeunicode, so fixtures preserve distinct stored bytes explicitly. This does not verify every named Git operation.

Log express switch checkpoint: docs/qa/log-express-switch-2026-10-09.json; native menu selectors are exercised by scripts/test-log-message-line.py --log-blame-only.

Pointed Log reference presets: docs/qa/log-reference-presets-2026-10-09.json, using the focused hidden native receiver and a private real-Git non-HEAD fixture.

Log deletion: HistoryReferenceDeletionTests (Apple/bundled Git via TURTLEGIT_QA_GIT) and the focused owned native receiver; checkpoint docs/qa/log-reference-deletion-2026-10-09.json. Remote mutation tests use a private local bare repository.

Commit caret: MessageCaretPositionTests, scripts/test-message-caret-oracle.py and the extended hidden native message-font receiver; checkpoint docs/qa/commit-caret-2026-10-09.json.

Commit new-branch focus

After the unsigned Debug build, run python3 scripts/test-commit-branch-focus.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. This receiver hosts the full Commit dialog in an unordered window with activation prohibited and isolated preferences/repositories. It checks native first responder and whole-draft selection when enabling new branch, replacement typing, caret preservation on ordinary updates and draft retention/reselection after off/on. It does not prove physical toggle/tab/default-button behavior, signed execution or full dialog parity.

Commit read-only author identity

After unsigned Debug and AppStore builds, run python3 scripts/test-commit-author-field.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. The receiver hosts the full Commit dialog without ordering or activating its window. It verifies the actual read-only field/editor remains selectable and copies a Unicode configured identity to a private pasteboard, then checks enabled editing, model binding, selection retention, unchecked-identity reseeding and inherited busy lock. All repositories, preferences, pasteboards and windows are privately owned and cleaned on exit. This is not physical keyboard/IME or signed/full-dialog acceptance.

Commit asynchronous metadata transitions

After unsigned Debug and AppStore builds, run python3 scripts/test-commit-metadata.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. Actual hidden Commit dialogs read a private repository's configured identity and HEAD author/date/message, then verify date restoration when Amend is unchecked. Controlled continuation-backed loaders exercise superseded replies/errors, byte-distinct author drafts, pending Commit/native editor/date-picker gating and first-load/cached on/off/on amend messages. Supplied Replay Split control-state fixtures check identity/date preservation against old replies and automatic installation notifications, then verify later checkbox changes still refresh defaults; they are not real rebase executions. No Commit action is executed; HEAD and config remain unchanged after fixture setup. Windows, preferences, private pasteboard and fixtures are owned and cleaned on normal or throwing exit. Physical input, close/cancellation and signed/full-dialog acceptance remain unverified.

Commit Amend focus

After unsigned Debug and AppStore builds, run python3 scripts/test-commit-amend-focus.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. The receiver verifies native message first responder after both Amend transitions, ordinary focus/selection/Undo retention, Quit/error gates, one-shot consumption across editor recreation, removal and late replies to a closed real controller. An injected attached-sheet property and manual didEndSheet notification exercise deferral/retry without ordering a sheet. Error gates use editor-only hosts to avoid showing the full dialog's alert. Repositories, defaults and windows are private; HEAD/config remain unchanged after setup. Physical input, real sheet/alert presentation and signed acceptance remain unverified.

Reset modified-files preview

After unsigned Debug and AppStore builds, run python3 scripts/test-reset-modified-files.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. The receiver constructs actual Reset and Changed Files controllers without ordering windows and injects sheet presentation with parent keyboard focus released. It checks the private repository's HEAD-to-working-tree list (mixed/staged/unstaged/add/delete/Unicode paths), exclusions, retained Reset target, parent reset/apply/close/Quit and duplicate gates, configured callback delivery, close/reopen/stale/rejected/bare/busy/forced-parent cleanup. HEAD, staged tree, config and working bytes remain unchanged after fixture setup; index stat-cache bytes are not asserted. scripts/test-reset-progress.py remains the real Soft/Mixed/Hard/cancellation/retry regression. Hidden ownership checks do not prove physical sheet interaction, focus or signed App Store behavior.

Reset initial focus and Log picker

After unsigned Debug and AppStore builds, run python3 scripts/test-reset-picker.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. Hidden native Reset windows verify chosen-type first responder, once-only focus and bare Soft behavior. An owned full Log controller uses injected presentation that releases parent focus, and private defaults with column autosave disabled; its real table checks single selection and its real history checks typed-revision ancestry, graph and selection. Accept/cancel, stale/late callbacks, rejected presentation, duplicate/cross-route/reset/apply/close/Quit locks and ordinary/multiple Log selection are covered. No windows are ordered; no sheet is physically presented. Physical keyboard/focus/layout and signed acceptance remain unverified.

Reference browser and Reset handoff

After an unsigned Debug build, run python3 scripts/test-reference-browser.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. The hidden native receiver hosts real reference browser, Reset and owned Reflog controllers with private preferences/repositories, activation prohibited and injected presentation releasing parent focus. It checks namespace/tree selection, nine columns, single selection, logical sort, scope/text/merge filters, current branch, original context icons and canonical callbacks, annotated-tag/blob/bare command gates, Unicode references, Reset fresh-catalog handoff and input focus, draft/cancel/stale/rejected/competing-route/reset/apply/close/Quit locks and unchanged repository bytes. It does not order windows or physically present sheets and does not establish visual/keyboard/signed/full-dialog acceptance. ReferenceBrowserTests and CheckoutTests cover the Core regression with each Git engine via TURTLEGIT_QA_GIT.

Switch full reference and commit pickers

After an unsigned Debug build, run python3 scripts/test-switch-pickers.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. The hidden native receiver exercises actual Switch, reference browser and full single-selection Log controllers, namespace handoff/defaults, draft and force/Merge retention, strict actual revision first responder, typed ancestry/graph, cancel/stale/reject/competing-target/Checkout/reload/close/Quit/forced-parent locks and unchanged repository invariants. Windows remain unordered and presentation is injected with parent focus released; repositories and preferences are private. scripts/test-switch-progress.py remains the real checkout/retry/tracking/force/conflict/cancellation regression. These checks do not establish physical or signed/full-dialog parity.

Branch, Tag and Worktree full revision pickers

After an unsigned Debug build, run python3 scripts/test-creation-pickers.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. Private hidden native Branch/Tag/Worktree controllers exercise full browser and typed Log routes, graph/single selection, canonical/Unicode base handoff and strict control focus, option/draft retention, Worktree suggestions and parent locks/lifecycle. Picker read-only invariants precede real private creation at the Log-selected base. Presenters release parent focus without ordering windows or actual sheets. Use the same Git arguments with scripts/test-worktree-dialog.py for real worktree/list/scope-policy/cancellation regression; it now compiles all Mac sources in shipping Swift 5 mode. scripts/test-branch-tag-handoff.py and scripts/test-switch-pickers.py remain relevant regressions. Physical and signed/full-dialog acceptance remain unverified.

Branch-description input and browser ownership: run python3 scripts/test-reference-description.py after the Debug build, optionally with repeated --git for Apple and bundled Git. This receiver prohibits activation and uses private repositories/preferences; it does not display windows or establish physical sheet/layout or App Store acceptance. Core description coverage is in ReferenceBrowserTests and existing ReferenceCreationTests.

Inline branch rename: python3 scripts/test-reference-rename.py after Debug, optionally with repeated --git arguments. It hosts actual menu/F2/native field-editor command routes in private repositories/preferences, without displayed windows. Core ReferenceBrowserTests includes config/reflog/current HEAD, bare, invalid/collision/cancellation and packed NFC/NFD source-identity cases. No physical keyboard/focus-change/IME or signed acceptance is established.

Tracked branches: python3 scripts/test-reference-tracking.py after Debug, optionally with repeated --git arguments. The hidden receiver uses actual parent/remote-only browser controllers and private repositories/preferences; it checks canonical set/unset, fetch mapping, retained branch settings, cancel, parent/Quit/type/bare/reject/stale/forced-close gates without ordering windows. Core coverage is in ReferenceBrowserTests. No physical/signed or network tracking/fetch acceptance is claimed.

Reference-browser Switch route: python3 scripts/test-reference-switch.py after Debug, optionally with repeated --git. It checks owned native Switch presets, actual revision controls, private defaults, canonical Unicode, bare/type gates, Cancel/reject/parent/Quit locks and forced nested picker cleanup without ordered windows. Keep test-switch-progress.py and test-switch-pickers.py regressions for real checkout/progress and full chooser behavior. No physical/signed acceptance or production RepositoryModel construction is claimed by the route receiver.

The reference-browser receiver additionally checks Current Branch acceptance and close against live HEAD after loading a stale catalog, filtered-out choices, detached/unborn/bare HEAD, duplicate/refresh/close/owned-child gates, forced close before query execution and a non-remote Current Branch result from the owned tracking picker. Core tests include linked worktrees and exact Unicode HEAD spelling. This is hidden controller coverage, not physical button/sheet acceptance.

The expanded scripts/test-reference-switch.py receiver also performs real checkout through the browser-owned Switch and native progress controllers in a separate private repository. It checks captured options, all three close policies, acknowledgement/close/Quit locks, a post-action's previous branch, duplicate completion, live Current Branch after checkout and rejected progress presentation. Owned slow wrappers pause each initial catalog/branch read; forced browser close must terminate both recorded processes and leave the closed child's fields/error unchanged. Physical sheet presentation remains unverified. The subsequent forced-checkout receiver expansion below covers hidden owner/process cleanup.

test-reference-switch.py now pauses every checkout-validation command (for-each-ref, revision resolution, branch-name and branch/tag existence probes), the progress previous-branch read, Git switch and its follow-up status read. Forced browser close must terminate both recorded processes, release controllers and suppress late error/conflict/change/post callbacks. A separate forced-progress close checks pending cancellation answers, fresh retry and stale completion identity. The post-switch pause confirms cancellation retains completed HEAD changes. Nine CheckoutTests include pre-cancelled validation and checkout with unchanged repository bytes; the native paused commands cover running cancellation.

After Debug build, python3 scripts/test-reference-merge.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git checks the actual reference-browser Merge menu/icon/order, live HEAD/current/type/ bare/linked-worktree gates, exact native canonical local/remote/symbolic/tag/notes/ Unicode presets, owned close/Quit/competing/cancel/reject/forced-load cleanup and a real fast-forward merge/progress acknowledgement. Private preferences are passed through Merge hosting/history/progress; all windows remain unordered. Production RepositoryModel configuration is inspected without constructing its shared-Finder settings writer. Full source preflight, picker/physical/signed parity remain pending.

Merge forced lifetime cleanup

After a Debug build, run python3 scripts/test-merge-cleanup.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. The receiver uses hidden shipping controllers, private repositories/preferences and recorded owned process IDs. It verifies closure during metadata, validation, execution, failure inspection, dismissal and branch deletion, including late confirmation answers and frozen result state. It does not launch the main app or establish physical/signed UI acceptance. Keep the existing Merge stream and reference-browser Merge receivers as regression gates for normal completion.

Merge revision pickers

After Debug build, run python3 scripts/test-merge-pickers.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. This exercises shipping Merge controls, full reference browser and Log in hidden windows, private repositories and preferences. Its native presenter releases the parent's editor focus before disabling it. It verifies real responder state but uses no physical sheets and does not launch the main app. Run Switch and creation picker receivers after changes to the shared VersionPickerCoordinator.

Reference browser Create Branch

After Debug build, run python3 scripts/test-reference-create-branch.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. The hidden receiver checks original menu artwork, immutable hash handoff despite a moved remote, actual private branch creation and catalog refresh, ownership and recorded live process cleanup. Private preferences and fixtures are removed after the receiver. This does not establish physical/signed UI acceptance. Run ReferenceCreationTests, creation-picker and browser-Merge receiver regressions when changing the shared creation factory or context menu.

Reference browser Fetch

After Debug build, run python3 scripts/test-reference-fetch.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. The receiver uses hidden shipping controllers, private preferences and local producer/client repositories. It verifies original menu/icon/order, remote preset, real fetch and retained acknowledgement/catalog refresh, ownership/rejection, standalone Quit and recorded live metadata/transport cleanup. It checks unchanged local HEAD/index/worktree and does not launch the main app or use the network. Retain Fetch/Pull streaming, Fetch/Rebase decisions, cancellation and submodule defaults as regression gates. Physical/signed acceptance remains separate.

Pull forced lifetime cleanup

After a Debug build, run python3 scripts/test-pull-cleanup.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. The hidden shipping-controller receiver pauses initial HEAD, config, remote, branch validation, Pull transport, failure status, post-success HEAD and Reset defaults. Forced owner closure must release progress, terminate recorded live leader/helper PIDs and freeze result/callback state, including a held late Cancel answer. Both late No and Yes answers after successful completion are checked separately with automatic close enabled. A completed Pull retains its HEAD mutation. Private fixtures/preferences are removed; no main app or ordered windows are used. Keep test-fetch-pull-stream.py and test-pull-progress.py as normal-output, cancellation and recovery/post-action regressions. These checks do not establish physical sheets or signed/full-dialog acceptance.

Reference-browser deletion

After an unsigned Debug build, run python3 scripts/test-reference-delete.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. The receiver invokes actual hidden native menus, captures Yes/No confirmations and uses private repositories/preferences. It verifies original Delete icons, unmerged/tag/remote warning semantics, real local and local-remote deletion, Refresh, parent/close/Quit and late-answer gates, and forced preflight/local/Push leader-helper termination. HEAD/index/worktree remain unchanged. Core ReferenceBrowserTests additionally cover checked-out failure, bare repositories, packed canonical-equivalent refs and cancellation. Run existing browser and tracking receivers as regressions. These checks do not establish physical sheets, batch commands, real authentication or signed acceptance.

Standalone reference browser

After a Debug build run python3 scripts/test-reference-standalone.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. The private hidden receiver checks actual multi-selection table/menu actions, last-selected ../... Log direction, real Git range query, intercepted clipboard text, sorting/filter selection, tree/other double-click, empty/duplicate close and owned-child gates. Existing picker mode stays single-selection. Keep test-reference-browser.py, test-reference-delete.py and test-finder-menu.py as regressions. Finder requests and all 42 implemented source command rules are covered by Core tests. No installed main app/Finder or physical input is activated; complete standalone/batch menus remain pending.

Batch reference deletion

After a Debug build, run python3 scripts/test-reference-batch-delete.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. The private hidden receiver checks actual batch menus/icons, count and merge/remote warnings, No/Yes/Refresh, branch/tag/local-remote effects, mixed namespaces, pending confirmation/close/Quit and late answers. Paused validation/local/Push leader-helper processes must exit on forced owner closure. HEAD/index/worktree stay unchanged. ReferenceBrowserTests covers one Push per configured remote and stop-on-first local failure with earlier deletion retained. Keep single deletion and standalone range receivers as regressions; physical/signed/full menus remain unverified.

Reference comparisons

After a Debug build run python3 scripts/test-reference-comparison.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. The hidden receiver checks actual two-reference menu order and source icons, an owned Changed Files controller using canonical names, displayed-order comparisons versus last-selected Log direction, captured patch bytes after a ref moves, Shift's alternative-viewer request, duplicate/F5/close/Quit gates and recorded revision/patch process-group termination on forced browser close. Viewer launch is intercepted; no main app or external application opens. Run ReferenceBrowserTests and RevisionComparisonTests plus standalone/batch receiver regressions. Complete physical comparison/viewer/child-editor and signed acceptance remain pending.

Reference folder commands

After a Debug build run python3 scripts/test-reference-folders.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. This hidden shipping-controller receiver checks heads/tag folder menu order and original icons, empty folder clipboard interception, actual HEAD branch/tag creation with owned defaults, filtered/scoped Delete all tags No/Yes/Refresh, empty result/duplicate/F5/close/Quit and late-answer gates, rejected creation, single-picker multi-row deletion and bare tag creation. It never orders a window, constructs RepositoryModel or uses a shared clipboard. Run ReferenceBrowser, ReferenceCreation and RevisionComparison Core tests, plus standalone/batch and comparison native regressions. Standalone Copy now expects source-short names. Remote folder dialogs and physical/signed/complete creation variants remain pending.

Remote tag dialog

After a Debug build run python3 scripts/test-remote-tags.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. The hidden receiver exercises actual folder menu icons/presets and native tag list selection, tri-state state changes, captured names/remote, Abort/Delete/Refresh, owned progress, duplicate/F5/close/Quit and late confirmation gates. It records live process groups and forces closure during ls-remote, check-ref-format and Push. Progress/confirmation presentation is intercepted; no window is ordered. Run RemoteTagTests/ReferenceBrowserTests and existing folder/Fetch native regressions. Physical confirmation/default focus, all failures/timings, real authentication and signed App Store/Finder acceptance remain pending.

Remote settings backend

Run swift test --filter 'RemoteSettingsTests|PushTests|ReferenceBrowserTests' with system Git and with TURTLEGIT_QA_GIT pointing to the bundled Git executable. Private fixtures exercise raw versus alias-expanded URLs, changed-field isolation, slash names, tri-state/tag clearing, legacy key preservation, inherited-value failure after partial writes, multivalued config refusal, unrelated Push Default, own/boundary/SVN/Unicode collision checks, explicit overwrite, rename tracking/ref updates, removal and pre-cancellation. This is backend evidence only; native OpenSSH identity transport remains pending. See Manage Remotes parity.

Native Manage Remotes

After a Debug build run python3 scripts/test-remote-settings.py --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git. The hidden shipping page receiver exercises fields/options, three-state Prune, origin prefill, Save/Rename, dirty Save/Discard, overwrite No/Yes, captured Remove, Fetch-offer callback, actual Browse References ownership, native alert defaults, Close/Quit and late confirmations. Live helper/child process groups are forced closed during config reads, remote add, rename and removal. Native physical focus, all presentation/error races, OpenSSH identity and signed acceptance remain pending.

Private SSH agent primitive

Run swift test --filter SSHAgentSessionTests. Tests use macOS OpenSSH, private fixture keys and a private foreground agent. They verify two identities, literal punctuation paths, encrypted-key failure without prompting, earlier-key retention, pre-cancellation, startup failure, release/deinit cleanup and live key-loader helper/child termination during forced close. No login agent or SSH server is used. App wiring and bundled/signed OpenSSH helpers remain pending; see SSH agent parity.

Encrypted SSH key response

Run swift test --filter 'SSHAskpassTests|SSHAgentSessionTests'. Without TURTLEGIT_QA_ASKPASS, tests compile the shipping CLI in a private fixture. To exercise the actual Debug product, set that variable to the absolute path of TurtleGitMac.app/Contents/Helpers/SSHAskpass/TurtleGitSSHAskpass. After Debug building, run python3 scripts/test-ssh-passphrase.py for the hidden secure-field and one-shot OK/Cancel/forced-close checks. Bundle audits include the response CLI provenance, architecture/linkage and replay probe. Real authentication, physical UI and signed sandbox acceptance remain pending; see SSH response parity.

Native SSH identity grants

Run swift test --filter 'SSHIdentityAccessTests|RemoteSettingsTests' for private bookmark-provider and actual Git configuration tests. The existing python3 scripts/test-remote-settings.py receiver now checks the native identity selection callback, separate Windows/native paths, saved grant, PPK refusal, typed-path nonauthorization, busy/child controls and late close fences using private fixture grants. These are not displayed picker or signed sandbox tests. See native identity parity.

SSH transport preparation

Run SSH_AGENT_PID=999999 swift test --filter 'SSHTransportPreparationTests|FetchTests|PullTests|PushTests'. The sentinel is scoped to the test process; it does not modify a login agent. Six private-agent preparation tests verify actual local Git effects, callback order, agent lifetime, actor reentry, late cancellation and live process-group cleanup. They use no SSH server. See transport parity.

Native SSH coordinator

After the Debug build, run python3 scripts/test-ssh-coordinator.py. Repeat --git /usr/bin/git --git build/Build/Products/AppStore/TurtleGitMac.app/Contents/Helpers/Git/bin/git for both engines. The hidden receiver uses private preferences, generated encrypted keys and owned agents. It checks prompt retry/cancellation, changed-key reload, CRLF headers, shipping Fetch/Pull/Push/browse auto-load and forced Push controller closure. It executes local Git effects; it does not prove network SSH, physical sheet interaction or signed security-scoped bookmark acceptance.

Read-only MX probe

The SMTP MX decoder/input/pre-cancel tests run with swift test --filter SMTPMXTests. The system query test is skipped unless explicitly enabled:

TURTLEGIT_MX_DNS_PROBE=1 swift test --filter SMTPMXTests
TURTLEGIT_MX_DNS_PROBE=1 python3 scripts/test-configured-smtp.py

The first command reads public MX records and checks repeated post-open query cancellation/descriptor cleanup. The second requires the current Debug frameworks; it reads the same records and submits only to its owned loopback SMTP fixture. Neither command sends mail to the queried domain or reads user credentials. Default CI does not enable the public DNS probe. Its observed results and limits are recorded in MX QA.

Commit refresh cancellation

After a Debug build, run python3 scripts/test-commit-refresh.py --git /usr/bin/git --git build/git-runtime/Git/bin/git (as one command). The hidden native receiver uses private repositories and preferences, controls a status reply that ignores cancellation, and blocks the production status query in an owned sleeping child. It checks controller-close fencing, cooperative Cancel, duplicate requests, draft confirmation, reload after declining, and exact HEAD/index/working contents. This is separate from displayed Cancel/Escape acceptance and signed sandbox testing. CommitReadCancellationTests also checks that pre-cancelled Core read APIs throw cancellation instead of treating it as missing configuration or an unborn HEAD.

Native image comparison

After a Debug build, run:

python3 scripts/test-image-comparison.py --git /usr/bin/git --git build/git-runtime/Git/bin/git

The receiver compiles current application sources into a private headless executable, uses a disposable repository and hidden native hosting windows, and checks image routing without an image filename extension, actual pane raster colors, fit/manual zoom, linked/unlinked scrolling, vertical/overlay transitions, alpha endpoints/midpoint, XOR changed/unchanged pixels and switching back to alpha. Unequal-image checks measure actual colored pixel extents for linked widths/heights/both, source stepped zoom and Original Size, including retained per-picture zoom. Input checks exercise native slider click/drag/release, knob direction, accessibility actions, Control-Shift wheel in Alpha/XOR and the real comparison window’s keyboard bridge and close retirement. It compares HEAD, raw index and file bytes before and after. Each engine runs serially; the runner removes its private executable and repository. This does not exercise physical mouse or keyboard gestures, signed Finder activation or App Store distribution.

Native image conflict selection

After a Debug build, run:

python3 scripts/test-image-conflict.py --git /usr/bin/git --git build/git-runtime/Git/bin/git

The disposable real-Git fixture contains different Mine/Base/Theirs PNG bytes under a non-image extension. The private receiver checks actual native pane pixels/order, independent fit/zoom, vertical layout, AppKit Select buttons and production Yes/No confirmation sheets. No leaves selected working bytes and unmerged stages; Yes rejects changes made while confirmation is pending, then Reload permits a fresh selection and resolution. Close/Quit fencing and final HEAD/index contents are checked. AppKit can order a sheet parent, so the receiver keeps its window transparent and offscreen, then hides the sheet and parent. All owned windows, executable and fixtures are removed. This does not establish physical gestures, VoiceOver, signed sandbox or Finder activation acceptance.

Image frame/page controls and playback

After building the Debug app and Core framework, run:

python3 scripts/test-image-frames.py --git /usr/bin/git --git build/git-runtime/Git/bin/git

The private native receiver exercises actual Previous/Next and Play/Stop buttons with unequal GIF frame counts, linked and independent navigation, wrapping, rendered frame colors, TIFF page dimensions and ICO variants without Play. It checks timer cancellation on overlay, source replacement and window close, and verifies unchanged HEAD, index and original encoded image bytes. A real multi-frame conflict exercises independent Mine controls and the actual Select and No sheet buttons: selecting at a later visible frame copies the original whole GIF and leaves unmerged stages intact; closing cancels the pane's player. Its windows stay transparent/offscreen and its temporary receiver and fixtures are removed. This does not establish physical gesture, VoiceOver, all-format or signed Finder acceptance. See frame parity.

Image transparent colors and local appearance

After the Debug build, run:

python3 scripts/test-image-colors.py --git /usr/bin/git --git build/git-runtime/Git/bin/git

The private native receiver exercises actual color wells and OK/Cancel sheet buttons, rendered transparent pixels in both comparison panes and all three conflict panes, alpha/XOR background composition, native-window D key routing, appearance reset and independence from other windows and NSApp. It checks close/Quit fencing, pending-sheet retirement, chooser survival across native view updates and retention of the selected color across source reload. Color checks use same-window native reference swatches to account for the display profile. It verifies unchanged comparison HEAD/index/image bytes and unchanged conflict index/working bytes. Owned windows remain transparent/offscreen and are closed; temporary receivers and fixtures are removed. Physical color-picker gestures, VoiceOver, high contrast and signed acceptance remain pending.

Load Images and standalone viewer inputs

After the Debug build, run:

python3 scripts/test-image-open.py --git /usr/bin/git --git build/git-runtime/Git/bin/git

The private receiver uses actual Cmd+O routing, native path fields, OK/Cancel buttons and a native file-authorization picker. It checks left-only prefill, invalid paths retaining the dialog, identical/single/empty inputs, fit/title and view-mode retention, picker cancellation before acceptance, modal close/Quit fences, and unchanged Git HEAD/index/file bytes. An injected grant provider checks standalone acceptance and retained/released lease ownership; it does not prove signed OS grant acceptance. Picker factories keep owned native windows transparent/offscreen; fixtures and receivers are removed. Physical file-selection/text-entry gestures and signed grants remain pending.

Run python3 scripts/test-commit-history.py --git /usr/bin/git --git build/git-runtime/Git/bin/git after a Debug build for the integrated Commit Recent Messages workflow. The receiver uses an actual AppKit event loop with activation prohibited, transparent private windows and the production editor, context-menu target/action, sheet, table and native Return/Escape/Delete actions. It checks Cancel, multiple selection/template replacement, prefix suppression, caret insertion/focus, Delete persistence, modal ownership and forced-parent cleanup without committing or changing working files. A final completion marker is mandatory for each Git engine. This is native programmatic acceptance, not physical-input, VoiceOver or signed sandbox acceptance.

The Commit history receiver also checks configured issue-label/template behavior, real naturally sorted duplicate IDs, no-match preservation and controlled delayed queries that ignore cancellation. It verifies rejection after issue/message/config edit-and-restore, superseding requests and parent closure. Run swift test --filter 'IssueMessageStyleTests|IssueTrackerTests|IssueRegexTests' for the matching Core checks. The native receiver uses template-based extraction; complete native ECMAScript-helper and physical issue-field acceptance remain unverified.

Commit history native fixtures now include a template with UTF-8 BOM, a malformed byte and CRLF. The receiver checks the exact loaded editor/model text and source bytes across history Cancel/replacement. CommitMessageTests covers repaired UTF-8 template/operation input, output-encoding independence, empty files, actual unreadable/missing paths and linked-worktree separation. Every malformed Windows subsequence and embedded-NUL UI behavior remain unverified.

Shared Log Find receiver

After building Debug, run:

swift test --filter 'CommitHistoryTests.testFindHistory'
TURTLEGIT_GROUP_TEST_GIT="$PWD/build/git-runtime/Git/bin/git" \
  swift test --filter 'CommitHistoryTests.testFindHistory'
python3 scripts/test-log-find.py \
  --git /usr/bin/git --git build/git-runtime/Git/bin/git

The four Core tests cover the complete field corpus, all merge parents/root and rename paths, working-tree rows, cancellation, invalid hashes, finite wrap and first-result termination before an unreadable later row. The hidden native receiver checks Command-F reuse, startup exclusion, notes/path searches, reference navigation, Shift/plain Return, critical Return recovery, Cancel and parent-close cleanup. It uses private preferences, disables saved Log geometry and column layout, displays no app windows and cleans up its owned fixtures. Physical input, installed Finder and signed sandbox acceptance remain separate.

Reference-browser Switch receiver handshake (2026-10-11)

Hosted macOS run 38124517913 failed the reference-browser Switch receiver at “Expected checkout stage not live: switch-progress”. Its assertion combined PID count/liveness, busy state and owned progress presence without recording which condition failed. The precise hosted root cause is unproven.

The two injected Git stall scripts now atomically publish their complete PID markers. A failure records parsed PIDs, liveness, busy state and actual/expected progress presence. All assertions remain. The driver links the freshly built Debug app objects instead of recompiling all app sources, runs the fixture on NSApplication's event loop and applies bounded receiver cleanup on every exit.

The unchanged lifecycle requirements passed locally with system and bundled Git, including real captured checkout, all three acknowledgement policies, forced owner/progress closure at metadata/validation/switch/post-checkout stages and late callback rejection. Both receivers were reaped. Hidden zero-size split-view layout warnings were emitted; this does not prove displayed geometry, signed acceptance or a successful hosted retry.

Sync revision Export now has actual owned options/progress checks in the same revision-list command, including captured root/tag targets, ZIP bytes and startup Cancel/forced-owner child-process cleanup. See the Export record. Both receivers are reaped; physical file-panel and signed acceptance remain open.

Git runtime deployment regression: python3 scripts/test-git-runtime-deployment.py --runtime build/git-runtime/Git. Synthetic universal/legacy/malformed/platform/high-target fixtures verify strict per-architecture rejection; actual Git/LFS slices are cross-checked against explicit otool -arch. The validator's full local Git and provenance audit passed; see the deployment record.

Export's shared native version pickers are included in the Sync revision-list fixture: actual nested reference/Log sheets, fresh-catalog tag selection, Cancel refresh, guarded competing actions, forced child closure and startup/selection read process cleanup. The two-engine run passed; the record keeps physical/signed and full-dialog acceptance separate.

Grouped native LFS, Email settings and mail checkpoint

After a Debug framework build, run python3 scripts/test-native-lfs-mail-batch.py for the combined section. It compiles all Mac receiver sources once, then runs the existing LFS, Email settings and Send Patch verification drivers in one process. The LFS responses are injected. The private SMTP server starts only after LFS and Email settings complete, with a bounded acceptance timeout and independent MIME assertions. Email uses private preferences and simulated Security calls; no live Keychain is accessed. The process, server and private fixtures are cleaned on success or failure. The individual test-lfs-locks.py and test-send-patch-dialog.py scripts remain available for focused debugging; the CI native-mail slot now uses the grouped runner.

The receivers cover standalone LFS progress ownership/duplicates/Close and the actual outside-repository Finder Send Mail composer/Cancel path. They do not establish physical Finder, signed file permissions or target-chooser gestures. See FINDER-LFS-MAIL-PARITY.md and its QA checkpoint for the exact proof scope.

The combined compiler uses whole-module -Onone mode to avoid repeated per-file whole-program type checks. It caches the executable by Mac source, receiver, Core framework, architecture, flags and Swift toolchain hashes; changed inputs rebuild it. LFS fixture author variables are isolated from the subsequent mail fixture's intentional empty-author setup. The legacy unhosted Commit reload cancellation test explicitly approves the same production confirmation used by a hosted dialog and checks it is requested once.

Development batching and native compilation reuse

Follow the implementation-first workflow in AGENTS.md: finish a related feature family before grouped validation; repeat only an affected check when a failure needs repair. There is no scheduled five-minute test cycle.

test-email-settings.py now delegates to test-native-reference-batch.py --only email-settings after a Debug build. It links the actual app objects/settings dependencies into the existing cache. CI runs Email once in this group; the LFS/mail default group no longer repeats it. Its legacy --email-only focus remains available, and --lfs-only remains available for an actual LFS failure.

After building Debug, test-native-merge-regex.py links QA to the existing app objects instead of recompiling the SwiftUI app. Its cache includes objects, app and Core modules/framework, fixtures, target/compiler and flags. The options batch and focused modes (including --patch-only) share a binary. Receivers have bounded process-group cleanup/reaping on every exit. No app assertions or receiver coverage are skipped by these caches.

Merge Find/Replace batch

After the framework build, run swift test --filter MergeFindTests and python3 scripts/test-native-merge-regex.py --find-only for this family. The native receiver is also included in the grouped LFS/mail CI receiver. It uses private two-pane files and a private three-pane Git conflict, keeps original files/index unchanged and closes all owned Find/editor windows. No installed app, public server or live Keychain is used. See Find parity.

Merge Open family

Run swift test --filter MergeOpenTests after implementation, then python3 scripts/test-native-merge-regex.py --open-only after the Debug framework build. The native receiver is included in the shared CI compilation. Checks use private source files, clipboard/preferences and injected picker replies; the standalone three-pane editor loads/saves without Git initialization. See Open parity.

The Open follow-up batch adds private native drop-pasteboard, completion and clipboard-metadata checks to the same receiver, plus Core input/output aliases, hard-link replacement, delete/recreation, Reload and permission-change fences. Run those with MergeOpenTests and --open-only after implementing the batch.

Merge Encoding and Go To

Run swift test --filter MergeFormatSelectionTests, then the shared native --options-batch after the Debug framework build. --format-only isolates the format sheet/two-pane receiver after an actual failure. The Open receiver also checks three-pane format acceptance. See format parity.

Grouped reference-family native receivers

Build Debug once, then run python3 scripts/test-native-reference-batch.py for folders, comparisons, batch/single deletion, Switch/Fetch/Create Branch/Merge routes and Merge reference/Log pickers. The driver links the existing app objects and twenty-one receiver families, including Network, Credential, Tool settings, Overlays, Email, Commit progress, SVN, issue settings/tester and external Merge lifecycle, in one compilation. It uses an explicit native AppKit run loop and caches by object files, imported modules/framework, fixtures and compiler/flags. It does not recompile the whole SwiftUI app for each case.

Receivers run serially with independent private repositories/preferences. Each has a 300-second timeout and owned process-group cleanup/reaping on every exit. Compilation also has a 300-second limit. --only batch-delete (or another case) is for an actual failure; --git remains repeatable for engine-specific checks. The older test-reference-*.py commands delegate to the same cache and retain all original fixture assertions. Batch deletion now publishes helper PID markers atomically, matching the already-repaired single-deletion fixture.

The grouped Merge options and LFS/mail receivers include merge-line-diff-native-2026-10-12.swift: saved visibility, UTF-16 hover mapping, Base/Mine ordering, independent inline/whitespace display, original EOL markers, light/dark TextKit rendering, unchanged text/selection/history/files, and exit/single-file/rebuild/retired guards. QA images are written under build/qa.

MergeUnifiedPatchTests checks applicable quoted Unicode/control-character paths, CRLF/non-UTF-8 hunk bytes, context range/default/zero, mode-only changes, add/delete, symlink targets, binary diagnostic and cancellation semantics. The grouped native Merge/LFS-mail receivers include merge-patch-native-2026-10-12.swift for actual General context Apply/Cancel and invalid values, light/dark layout, File menu ownership/icon/gates, save cancellation, saved-file export with an unsaved draft, unchanged inputs/history and retired replies.

The Merge picker fixture retains its ancestry, graph, native row-count and single selection assertions, but waits for the native table to render after the model publishes its entries. Hosted job 114802897011 failed the immediate row-count assertion. A bounded wait now reports actual model/native/graph counts on failure. test-merge-pickers.py delegates to the reference cache, and CI runs it once in that group rather than compiling a separate app-source receiver.

The grouped Merge options and LFS/mail receivers include merge-colors-native-2026-10-12.swift. It exercises all 17 source channels, native dropdown/default swatches and RGB custom actions, alpha exclusion, independent palette drafts, selective Restore Default, Settings Apply/Cancel, actual light/dark control bounds and shared-panel ownership/retirement. Private preferences and owned windows/panels isolate the check from the user's app. Use --colors-only only for an actual Colors failure; it shares the built-app object cache with the options batch. No new Core tests mirror these controls.

OnePaneFileComparisonTests checks ordered regions/source-row mappings, removed payload edits excluding untouched removals, original CRLF/nonterminated Unicode results, multi-match replacement and filtered case/whitespace projection. The grouped Merge/LFS-mail receivers include merge-one-pane-native-2026-10-12.swift for saved default, one actual editor, locator/navigation, removed selection, native typing/Undo/Redo, exact BOM/EOL Save with Base retained, mode Save/Cancel/Discard, combined Replace All/Tab with single Undo, and roundtrip/persistence/retired guards. --one-pane-only shares the object cache.

The Merge/LFS-mail batch includes merge-one-pane-context-native-2026-10-12.swift: actual left-role menus, hidden-opposite/model guards, source command ordering, removed Copy, private pasteboard capture across menus, real Cut/Paste/Undo, nine encoding order/action identity, readonly omission and retired clipboard/ editing guards with saved inputs unchanged. --one-pane-context-only uses the same app-object receiver cache for an actual context failure. No user clipboard or installed app is used.

MergeDefaultEncodingTests exercises the source ASCII/short-file classifier, Unicode BOMs/non-ASCII UTF-8, legacy/binary/malformed bytes, metadata-preserving adaptation, exact CP1252 save and canonical/legacy preference precedence. merge-default-encoding-native-2026-10-12.swift joins the Merge/LFS-mail batch for actual checkbox Apply/Cancel, open-versus-reload format behavior, legacy two/three-pane decoding and exact standalone output with inputs retained. --default-encoding-only shares the app-object cache for an actual failure.

merge-wrapping-native-2026-10-12.swift joins the grouped Merge/LFS-mail receiver for actual TextKit wrapping, shared source-row height geometry, resizing, scrollbar gates/persistence, unchanged text/selection/history/comparison/files, combined/three-pane reflow and retirement. --wrapping-only shares the built-app object cache for an actual wrapping failure. Native-only changes do not trigger a full Core rerun.

The reference-object group includes network-settings, using a private GIT_CONFIG_GLOBAL and XDG folder for each engine. Its native fixture covers actual Git proxy writes/scoped override preservation, private credential-store failure/retention, Settings validation/Cancel, hidden light/dark layout, captured SSH Apply after forced close and late read/cache fencing. No user global config, network or live Keychain is touched. Use --only network-settings for an actual Network failure; the complete group uses the same object/fixture/module cache.

Credential settings use the same object-linked reference receiver cache. Run python3 scripts/test-native-reference-batch.py --only credential-settings after a Debug build. Each Git executable gets private global/XDG configuration and a private repository. The receiver checks helper chains, destination-only saves, Cancel and confirmation decisions, removal, simple None, retired read/save responses and light/dark hosting. Password-manager routing is injected; no user Keychain or credential helper is launched. This is not signed or physical UI acceptance.

The Credential receiver additionally checks the shared Settings transaction's Apply/Cancel/validation, external-edit stale-snapshot refusal, and exclusive selection confirmation ownership across retirement/reactivation.

The tool-settings case checks Advanced association draft behavior, native columns/selection/Edit wiring, source-style selection after Remove, and both parent pages' shared Settings Apply/Cancel/validation with private preferences. Run python3 scripts/test-native-reference-batch.py --only tool-settings after a Debug build. It uses the existing object cache and one owned process; no actual tool app is launched. Physical sheets/gestures and signed receiving-app acceptance remain separate.

The external-merge-lifecycle case uses mock termination notifications and private Git conflicts to check caller-close/task cancellation, exactly-once observer cleanup, late completion/prompt fencing, No index preservation, exact working-file staging and stale-stage refusal. It closes owned windows and uses the same object-linked cache. Run with --only external-merge-lifecycle; add --git for each desired engine. No external app is launched or killed.

The overlay-settings case hosts all three shared Overlay pages in light/dark and exercises Settings Apply/Cancel/validation, private atomic policy publication, notification ordering, rule readback, publication failure and unsigned local-save notice behavior. Use --only overlay-settings after a Debug build. It injects a private preferences domain/publication URL/notification counter and never changes the user's App Group or activates Finder. Signed/live refresh acceptance is open.

The Email receiver additionally holds credential work while checking shared Settings busy validation and app Quit refusal, then verifies Apply and Cancel after completion. Private preferences and simulated Security APIs are retained; there is no live Keychain/mail/network or full-suite acceptance claim.

test-commit-progress.py now delegates to the object-linked group with --only commit-progress; --git arguments are forwarded. CI runs it once in the group. Its private real commit cases include conditional SVN DCommit ordering and once-only callback, plus the existing output/cancellation/owned-helper checks. Fake SVN metadata enables the menu case without submitting to an SVN server. Physical menu and scoped native SVN receiver acceptance remain separate.

Reference Comparison, Fetch and Create Branch forced-close fixtures atomically publish complete PID pairs before readiness. Their failure paths close the owner and recover/reap only private fixture helpers with bounded cleanup. The existing assertions remain. Focus actual failures with repeatable --only comparison, --only fetch and --only create-branch plus desired --git paths; this does not require recompiling app sources or running Core.

The svn-workflow case links the existing native SVN receiver and private Core SVN fixture into the app-object cache, setting its selected Git from --git. It checks Fetch/DCommit/Ignore/Rebase, retirement and owned questions/Cancel, plus captured repository/executable/lease and window reuse. Workspace startup monitoring/publication is disabled only in this private receiver. CI runs SVN once in this group; legacy LFS/mail no longer compiles or runs its fixture. No public SVN server or signed grant is exercised.

The SVN receiver now also checks its actual native progress text view: injected warning/link output, Aqua/Dark Aqua warning RGB/bold styling and successful footer color, source copy menu icons/order, private Copy/Copy All preserving selection, disabled timing footer, error completion and Retry state. It keeps the existing private workflow/lifecycle/scope assertions. Neither the general pasteboard nor a public SVN transport is used.

--only issue-regex-tester hosts the new native Bugtraq tester using the embedded Debug C++ helper, private preferences/pasteboard and no Git configuration writes. It verifies sample highlighting, actual Cut/Copy/Paste and context icons, single/two-expression matching/UTF-16 positions, invalid fallback and recovery, expression return and stale/retired provider/Quit fences. Core, physical menu entry/field focus and signed helper/grants remain separate acceptance scopes.

swift test --filter IssueTrackerSettingsTests checks scoped Issue Tracker values and the shared project-config helper regression. After a Debug build, use --only issue-tracker-settings in the object-linked group, with desired --git paths. It uses private global/XDG config, a repository and context injection; checks shared Apply/Cancel, inheritance, owned tester draft flow, icon decode and late confirmation/Quit fences. Tracker plugins and physical/signed access are not exercised.

--only issue-captures is an optional local artifact-generation case and is excluded from the default twenty-one-family CI run. It uses private configuration, drafts and helper input, displays only its owned windows and captures their compositor output in both themes. It requires existing screen-capture permission; it does not grant permissions. Review images before publishing. AppKit cacheDisplay omits SwiftUI surfaces on the current host and must not be treated as a complete screenshot. This case performs capture/settlement, not the complete behavioral checks.

--only autotext-tester exercises the packaged C++ engine through the actual native Autotext window: explicit Scan, capture-only sorted/deduplicated words, Unicode, invalid/empty expressions, source CString NUL boundary, UTF-16 content limit, editable/read-only controls, private Copy and guarded Cut/Paste, theme hosts, close/late-result fencing and Quit accounting. The related Regex Tester case covers the shared text-menu regression. swift test --filter MessageCodeSymbolsTests covers the Core matching API and pre-cancellation. No physical menu navigation, visual certification or signed sandbox acceptance is inferred from these checks.

swift test --filter ClientHooksTests verifies five Core cases including literal command parsing, source selection/configuration, all payload layouts, real cwd and commit-message mutation, private cleanup and cancelled leader reaping. After Debug is built, --only client-hooks --only commit-progress in the cached group checks shared Hook Scripts drafts and owned Configure sheets, remembered/late approval, actual Commit/Push/Rebase hook boundaries and non-wait Cancel/Quit. The existing Commit progress case verifies its unchanged cancellation/draft/ post-action behavior. Receivers use private preferences and repositories and stop owned hook work before exit. Signed grants, physical menus and full CI are separate acceptance scopes. See the 12 October QA record for initial compile and lifetime failures and the final focused passes.

Hosted LFS readiness failure and cached receiver repair

The completed macOS run at c75be61 passed Core/app checks and reached the grouped native receiver. Its 90-second pre-mail deadline expired after Merge/Patch/Daemon work and the LFS mixed-results diagnostic; SMTP was never started. The log does not prove the precise Intel stall or distinguish cumulative deadline exhaustion from event-loop handling.

test-native-lfs-mail-batch.py now links fixtures against current Debug app objects/modules, rather than recompiling all SwiftUI app sources. Its cache includes objects, both modules/framework, fixtures, architecture, compiler and flags. A C bootstrap runs NSApplication.run() with verification on the main actor. Atomic phase checkpoints identify the active family, with 120 seconds per family and a 600-second overall pre-mail cap. Early exits and timeouts report the phase/status/PID. Existing assertions and SMTP MIME checks are retained. Compiler, receiver and loopback server use owned groups with bounded cleanup/reaping.

The full grouped check passed locally, followed by an unchanged-cache --lfs-only pass. No app rebuild or Core rerun was needed for this driver/fixture change. The first fresh compile succeeded with the original synchronous wait; the subsequent compiler-group cleanup path is implemented but forced compilation timeouts were not exercised. This is not a completed hosted CI or signed LFS server/helper acceptance claim. See QA record.

The Hook Scripts receiver now also verifies a missing executable and malformed command under Abort/Continue, preservation of the original draft, pre-cancellation and retired Continue, Start abort with unchanged HEAD and disabled/closed model, actual ReCommit invoking Start anew, captured source selection paths and the documented ordinary/amend post flag. The existing Commit progress receiver remains in the related grouped check. This follow-up is native-only: one Debug build, no Core rerun. An initial ReCommit fixture lacked a checked file; its selection was corrected before the final four system/packaged-Git checks passed. Both compilations use the existing object-linked cache. All owned receivers and scripts settled.

--only utility-captures is a local capture-only case, excluded from the default CI families alongside issue-captures. It uses private sample hook configuration, preferences and pasteboard, the packaged C++ Autotext helper, and owned compositor window captures in both themes. It executes no hook script. Review the six images before publishing. Existing screen-capture permission is required and is not changed. The actual fixed Autotext content bounds are now checked by its regular native receiver. No full Core or Hook workflow rerun was performed for these presentation changes. See the capture record for the rejected narrow images and final focused pass; no visual certification is inferred.

The cached reference receiver now includes Stash Apply/Pop and replay-stash checks. After one Debug build, use python3 scripts/test-native-reference-batch.py --only stash-restore --only client-hooks --git /usr/bin/git --git build/Build/Products/Debug/TurtleGitMac.app/Contents/Helpers/Git/bin/git for this combined family. The legacy stash driver delegates to that cache. CI's default reference batch includes the same case; it no longer compiles/runs a duplicate standalone Stash restore receiver.

The LFS readiness/lifetime batch uses the existing grouped python3 scripts/test-native-lfs-mail-batch.py receiver after one Debug build. It preserves the earlier Merge/Patch/daemon phases that precede the hosted LFS failure and the private SMTP MIME assertions afterward. LFS coverage now also holds providers across forced-close queries/progress/Commit/Working Tree owners and verifies rejected late results/Pull plus once-only native restoration cleanup. No full Core rerun is required for these native-only changes.

For a failure inside LFS or before SMTP readiness, --lfs-mail-only reruns those affected phases and keeps the private SMTP/MIME checks; the default CI command still runs all preceding grouped phases. This does not relax assertions or increase their deadlines.

After a Debug build, the cached reference receiver includes --only blame-source for native source selection, pinned display bytes, private clipboard, font/theme range retention, margin persistence, synchronized scrolling, Find/Go To Line, keyboard and retired editor guards. Run against both system and packaged Git. --only blame-captures is an optional displayed capture with existing screen recording permission; it is excluded from default CI. Inspect both images before publication. No Core rerun is needed for this native-only viewer batch.

For the Lexilla batch, build the universal helper and Debug/AppStore apps once, then run swift test --filter BlameSyntaxTests and cached native reference --only blame-source --only blame-lexilla against system and packaged Git. The Core cases use the real four pinned engines across ten extension groups, Unicode/multiline ranges, source case/no-extension rules, malformed output and owned cancellation/input cleanup. Native cases verify palette, enable/disable range retention, dark transform, late retirement and Quit ownership.

The native wrapping/menu batch uses cached reference cases --only blame-source --only blame-lexilla --only blame-wrap after a Debug build. The additional --only blame-wrap-captures case is excluded from default CI and captures only test-owned windows with existing screen-recording permission. Wrapping tests cover real TextKit and table geometry, resize, preserved private clipboard/range, logical context/navigation, preference and unchanged repository bytes. No Core suite rerun is needed for these native-only changes.

The Repository Browser lifecycle family is part of the cached reference receiver (--only repository-browser). It combines real nested-folder refresh/fallback, private Copy, pinned child lookup, multi-file Continue/Cancel and duplicate guards, owned root/tree/blob/checkout process cancellation and reaping, Quit lifetime, and actual file/failure-sheet forced closure. The relevant Core group is RepositoryBrowserTests|SubmoduleComparisonTests; CI still runs the full suite.

Repository Browser's cached native group also has --only repository-browser-table and optional --only repository-browser-table-captures. The table case checks real AppKit column/menu/selection/sort dispatch, private version-6 preferences, No/Yes/late Reset ownership, captured file/folder promises after branch movement and owner closure, destination collision preservation and staging cleanup. The capture case uses only its owned window and existing screen-recording access. Promise delegate delivery does not establish physical Finder drag acceptance.

RepositoryFileEventTests checks real dispatch FSEvents plus refresh coalescing, retirement and linked Git-dir discovery. FSEvents may report /private/var while Cocoa URLs normalize the same location as /var; compare normalized URLs for exact event targets. The cached native receiver --only finder-events drives the production workspace model with a private snapshot writer and notification hook. It verifies real edits, busy/Quit release, unchanged HEAD/index, monitor retirement and shared-admin linked-worktree changes with both engines. It does not activate Finder or write App Group data, and makes no signed integration claim.

FinderCollectionTests|FinderSubmoduleScanTests|FinderRepositoryMetadataTests|FinderSubmoduleMetadataTests is the grouped collector check. New cases assert raw root/child/nested index bytes, not just staged content, and cancel nine live Git read phases after atomic PID publication. Cancellation cannot produce a partial child-failure collection. The existing cached --only finder-events native case now also creates a real registered child, edits it externally and verifies an event-published modified badge with exact child index bytes retained, using both Git engines.

FinderPublicationTests|FinderSubmoduleScanTests checks the shared store protocol, including consumed/superseded/overlapping tickets, subtree merge/removal, invalid payloads/corruption and cancellable lock waits. Cached native --only finder-publication opens two real workspace models and launches two owned finder-publication-worker receivers against a private store. Worker processes use simulated status payloads, are individually waited/reaped, and are excluded from default case enumeration. The existing --only finder-events collector checks run alongside publication with both Git engines. No user App Group data or actual Finder activation is used.

Hosted run 38318891938 at ad2f840 finished with one icon-template expectation failure among 1,149 tests. The original hook asset is grayscale at all four sizes; the expectation now includes settingsHooks and names the icon on failure. The three focused MenuIconTests passed; a new complete hosted pass remains unproven. See qa/hook-icon-ci-2026-10-13.json.

Watched-repository management reuses the private permission store and shared publication store. The native finder-watches case verifies saved-root relaunch, real event updates, moved bookmark renewal, remove/late reply fencing, scope release and owned read cancellation on shutdown with private bookmarks/cache. Its optional capture case uses an owned host for the production settings page; simulated bookmark grants and screenshots do not establish signed Finder access.

FinderServiceAuthorizationTests covers private transfer/persistent grant roles, relative/moved roots, duplicate/escaping requests, partial failure and balanced leases. Cached finder-service-grants launches a separate owned receiver using actual Foundation bookmarks and private repository reads, with scope requirements explicitly disabled in the unsigned fixture. The finder-watches group additionally checks export from settled watcher sessions. Neither proves signed IPC permission.

FinderServicePermissionStoreTests checks atomic replacement failure, receiver-only bookmark persistence, moved relative scopes, failed-entry retention and file modes. The finder-service-grants worker now installs a private receiver registry, releases initial accesses, reopens/restores it and reads real Git/files through restored accesses. Scope requirements are disabled only in that unsigned fixture.

Selected-file comparison launch ownership is checked in one reference receiver batch with --only comparison-launch --only advanced-list-consumers --only working-tree-file-menu, using system and bundled Git. The launch receiver covers captured working/historical/grouped endpoints, one question across parent groups, No/Yes/threshold equality, retained Quit ownership, late Yes after source closure, a real owned NSAlert teardown, cancellation after actual Git preparation and blob children start, and captured Commit/Working Tree/Log aggregate patches. It compares HEAD, index and working bytes before/after. Presentation callbacks replace external viewer launch; the owned sheet check proves lifecycle, not physical appearance or input. Private windows/preferences and owned child groups must be closed/reaped. The affected Core group is FileComparisonTests, RevisionComparisonTests and WorkingTreeHistoryTests; no full Core rerun is needed for this native routing batch. See comparison launch parity.

The connected inline display/navigation receiver is part of python3 scripts/test-native-merge-regex.py --options-batch. The default batch runs seventeen Merge families in one owned process. --inline-only is an available focused repair check. The resume flags are for an observed failure with unchanged already-passing app objects; they do not prove a full single-run pass. The 14 October inline record identifies all four actual executions and which families passed in each. No app/Core rebuild or rerun was performed for fixture-only corrections. Diagnostic captures were rejected for incomplete chrome and were not copied to the website. See inline parity.

Commit file-menu ownership uses one reference batch with --only commit-file-workflows --only commit-drop --only working-tree-lifecycle --only working-tree-file-menu --only submodule-handoffs against system and bundled Git. It checks captured menu/panel/name replies, source missing/rename gates, actual Export/Restore/Delete/changelist operations, cancellation after Git starts, a held subsequent refresh's busy state, retired replies and Quit ownership. It injects external app receiving/panels and touches only private inputs/preferences; physical dialogs, Trash/editor/Finder launches and signed grants are not proved. Core covers the affected Restore/Amend/Add/Delete/Export/changelist APIs, including cancelled restore/amend-unstage preserving bytes and index. See the connected workflow audit.

Historical item-provider CI still invokes scripts/verify-browser-item-provider.sh. Its Python harness builds only Core, detects native SwiftPM or Xcode-backed object layouts, caches the standalone transport receiver and reaps its owned process and helpers. Locally, --scratch-path .build/out uses the existing Core artifacts; --skip-build requires those artifacts to be current. The receiver compiles RepositoryBrowserDrag and its shared NativeFileTransfer primitives independently of the window model and checks provider-lifetime cleanup, real Progress cancellation, queued promise ownership, coordinated exclusive receiver writes/collision refusal and pinned binary file/folder content. The grouped browser table/lifecycle reference receivers separately exercise the actual UI adapters and root/folder/list promise handoffs after owner closure. None proves physical Finder drops or signed sandbox permissions. See historical transfer parity.

Distribution archives use python3 scripts/test-distribution-archive.py for identity/containment, extra-product rejection, exact per-binary universal dSYM matching and offline-only team/export settings. archive-distribution.py then exercises actual universal archive/package/symbol/inventory audits. An unsigned candidate is expected to be rejected by export-distribution.py before export; that refusal does not prove real certificate/profile export or signed runtime behavior. No installed application or Finder service is launched by archive preparation. See distribution.

Bounded reference-family compilation

CI uses scripts/test-native-reference-groups.py to invoke the existing reference driver in groups of twelve runtime cases. The case order, default exclusions, fixture paths and parent/worker dependencies come from that driver. Every default case still runs once per chosen Git executable, with the original environment, CLI, assertions, 300-second receiver limit and owned process-group cleanup. Compile-only groups also retain the old monolith's typechecking of excluded capture/helper fixtures. Helpers required by a group compile with it without being executed as extra test cases. The per-compilation limit stays 300 seconds.

Use --list to inspect the entire plan without compiling or launching anything, or --compile-only to validate/cache every group. --only CASE and repeated --git PATH retain explicit case and Git ordering. The original driver remains available for focused checks; --include CASE adds a compile dependency without running it. Group-contract checks ensure complete default execution/typecheck coverage, worker linkage and failure propagation. This addresses the oversized compile input that timed out in hosted run 38688088886; only a later hosted run can establish that its full workflow passes.

The reference cache now keys app source text as well as actual Debug objects, fixtures, app/Core/SMTP modules and binaries, the driver/shared compiler-owner implementation, compiler, SDK and fixed flags/architecture. Stale/missing app objects require a Debug rebuild. Compiler and native receiver process groups are owned and cleaned on success/failure/timeout; no test case is dropped to avoid a slow compilation. See the grouped checkpoint for exact local scope and the separate hosted result.

Source Save As target batch

After building the current Debug app, run python3 scripts/test-save-as-targets.py --git /usr/bin/git --git build/git-runtime/Git/bin/git. This owns a native receiver for Compare, Review and three-pane target binding, later Save/Reload, stale refusal and late-response cleanup. The fixture uses private files/preferences/clipboard and injected decisions; it does not certify physical sheets, signed sandbox access or full dialog parity.

Core-only rebase editor configuration

Core-only SwiftPM excludes the UI executable. The hosted job therefore builds Debug with Xcode before integration tests and sets TURTLEGIT_REBASE_EDITOR to build/Build/Products/Debug/TurtleGitMac.app/Contents/MacOS/TurtleGitMac using an absolute path. Git invokes its real headless sequence/message editor entry points; no second SwiftUI compilation or replacement editor implementation is needed. The previous c8a2cee4 hosted run failed because tests fell back to the absent .build/debug/TurtleGitMac, causing rebase/Fetch recovery failures and a later fixture crash. Local focused checks do not establish a hosted green run.

Conflict identity workflow family

After the current Debug build, run python3 scripts/test-conflict-identities.py --git /usr/bin/git --git build/git-runtime/Git/bin/git. The owned native receiver creates private merge/rebase conflicts and a real-index gitlink fixture, exercises shared captions, disabled guessing, captured Log targets, external-tool argument handoff and unchanged index/workfile snapshots. It injects the external-app launch and never starts a third-party app. Optional --captures writes light/dark native-view images into the specified folder; all owned windows and receivers close afterward. Core identity tests additionally cover ref priority, annotated tags, cherry-pick/revert, rebase metadata and saved-document propagation.

Transport presentation batch

After a current Debug build, run python3 scripts/test-transport-presentation.py --git /usr/bin/git --git build/git-runtime/Git/bin/git. The receiver owns private Git repositories/preferences and checks real Fetch/Sync arguments, submission-time capture, native static/spinning activity and bounded Unicode output. The retained Fetch/Pull live-stream receiver covers cancellation, raw diagnostics and retry with the same app objects.

Finder selection context batch

python3 scripts/test-finder-selection-context.py compiles the real extension menu source against the current Debug Core framework. It checks representative status, normalized request cardinality, mixed repository disabling, AppKit menu updates, registered submodule operations and ignored-directory boundaries. Run with the retained Finder menu receiver after one Debug build. This receiver does not activate Finder or establish signed extension acceptance.

The 2026-10-15 checkpoint passed 44 selected Core cases, one repaired Debug build, and both actual Finder-menu receivers. Initial failures and focused repairs are recorded in Finder context QA.

Compare/Merge search painting and selection commands

python3 scripts/test-merge-find-highlights.py --git /usr/bin/git --git "$PWD/build/git-runtime/Git/bin/git" links current Debug objects once and runs the connected Find family sequentially with both engines. The 2026-10-15 run passed pane-local temporary paint, independent source/result queries, actual F3/selected-text key routes and original-icon menus, Unicode Replace All, Undo/Redo, closed-owner guards and unchanged disk/index. See the record for the initial fixture assertion repair and physical/signed limitations. Core matching was unchanged.

Shared word marking and locator bands

The grouped test-merge-find-highlights.py receiver now includes marked-word selection/toggle/local/triple-click, source color layering and actual left/result/ right locator publication. The 2026-10-15 batch passed 14 selected Core cases, Debug and both system/bundled Git native groups on their first attempts. Evidence and reviewed component captures record scope and cleanup. Synthetic AppKit handler dispatch does not prove physical gesture or signed sandbox acceptance.

Native Compare/Merge toolbar batch

python3 scripts/test-merge-toolbar.py --git /usr/bin/git --git "$PWD/build/git-runtime/Git/bin/git" links current Debug objects and checks the actual toolbar/overflow/menu/Save/Undo, private layout persistence and distinct replacement controllers. The runner requires a final completion marker, in addition to process success. Optional TURTLEGIT_MERGE_TOOLBAR_CAPTURE captures owned windows after workflow checks. Three Core icon tests, final Debug compilation, both toolbar configurations and the retained Find/word groups passed; the Debug resource audit verified 309 icon resources. The record includes failed attempts, rejected incomplete exit-zero runs, repairs, reviewed captures and cleanup.

Native Rebase replay table

After a current Debug build, run the connected replay table group:

python3 scripts/test-native-reference-batch.py --only rebase-columns --only rebase-conditional --only rebase-row-drag --git /usr/bin/git --git build/git-runtime/Git/bin/git

The columns fixture uses actual AppKit text cells and retains local Vision OCR of the distinct committer email after revealing/reordering columns. It also checks private Log font and original action artwork, native occurrence selection, icon-disabled menus, consumed menu refusal, and closure fencing. The other two cases retain conditional metadata/cancellation and row movement/structural replay coverage. Receivers link current Debug objects and close their owned windows; no installed Finder or signed acceptance is implied.

Log filter control family

After building current Debug objects, run python3 scripts/test-log-filters.py --git /usr/bin/git --git build/git-runtime/Git/bin/git on one line. Optional --captures build/qa/log-native-filters records only the fixture's Log window in light/dark using the macOS compositor. The runner requires its final marker as well as exit zero. Native timers use the actual one-second delay; closed/ replaced validation uses controlled replies and private preferences.

The affected Core group is TURTLEGIT_CORE_ONLY=1 swift test --filter IssueRegexTests, including actual ECMAScript syntax and stalled-helper cleanup. The native fixture verifies source menu order, independent owner settings, clear/Return/Escape, deferred filtering, invalid-expression retention, Quit and retired callback fences, minimum geometry and unchanged HEAD/index/status.

The source scope/information continuation extends the same native Log filter receiver with a real rename, old-name/exclusion/alternative/inversion queries, hidden-file selection pruning, source information totals, Whole Project persistence/reopening/titles and Follow/busy/retired refusal. Its affected Core group is HistoryPresentationTests plus CommitHistoryTests.testPlainQueryRulesFromUpstreamFilterHelper.

Source palette and native status text

After a current Debug build, run python3 scripts/test-status-colors.py --git /usr/bin/git --git build/git-runtime/Git/bin/git on one line. It retains the independent pinned C++ source conversion oracle and links both native receivers to current app objects. Optional --captures build/qa/status-text-captures adds actual Commit/Working Tree/Log light/dark compositor pixels and custom-color Apply captures for the first engine. The fixture requires its completion marker and preserves repository files/HEAD/index/status and global color preferences. No Core logic changes are involved in the native presentation policy.

The color oracle can run from a clean checkout: when the upstream Git checkout is absent, it fetches only pinned Theme.cpp/Colors.cpp and checks Git blob IDs against the inventory before compiling. --only-oracle checks that source and settings portion; --only-text repeats only the affected text/dialog receivers. These flags were used to avoid repeating passed unrelated checks after a failure.

The rebase-columns case now uses owned-window compositor pixels on macOS 14.4+ for the exact committer-email OCR check; its Vision region is the native column/ row cell rectangle clipped to the table viewport. Set TURTLEGIT_REBASE_COLUMN_CAPTURE_DIR to retain raw diagnostic window PNGs. Older macOS retains the cached-cell fallback. This does not certify hosted success until that SDK executes the new fixture.

Shared Subversion inline engine

After the Debug build, run the connected checkpoint:

python3 scripts/test-inline-source.py
python3 scripts/test-inline-native.py

The first command verifies the Git blob identities of pinned SVNLineDiff.h/.cpp, compiles their original parser, hashes and callbacks with explicit UTF-16 Windows type adaptations, and runs seven focused Core tests. Its 1,803-pair corpus covers repeated/crossed runs, ASCII word tokens and Unicode character tokens; a separate case runs 160 comparisons concurrently. The generated reference JSON under build/qa is required by the native receiver. An ordinary Core invocation skips only that reference-file case; CI explicitly runs the source command afterward.

The second command links current Debug app objects once, reuses the prior inline family, then checks original-source repeated-token positions through the model, actual native caret stops and source/line-preview attributes in character and word modes, both directions and Aqua/Dark Aqua. It requires its completion marker and reaps its owned receiver; no unrelated editor groups or Git operations are repeated. This inline engine always uses the bundled Subversion library, regardless of the selected command-line Git. See engine scope and remaining limits and the dated evidence.

Connected image commands

After a current Debug build:

python3 scripts/test-image-command-family.py --git /usr/bin/git --git build/git-runtime/Git/bin/git

One linked receiver build contains native toolbar, existing Load Images, conflict selection and frames/playback cases. Each runs in a private fixture/process and must print the final case marker. --only toolbar (or open, conflict, frames) rechecks only an affected repair. --captures build/qa/image-command-captures captures the two actual toolbar windows in Aqua/Dark Aqua using the current-process compositor. No screenshots are accepted from an early exit. These are app-only changes, so the batch does not repeat Core tests. See source scope and actual evidence.

Darwin receiver group probes

python3 scripts/test-native-receiver.py retains actual owned-child termination and timeout/reap tests. An EPERM signal/probe is accepted as an ended group only when ps proves no matching members or only zombies; live members, unavailable, empty or malformed process tables retain the permission error. Six contracts, including the injected Darwin cases, passed locally. The record links the hosted failure; full hosted success remains pending.

Shared editable message styles

After a current Debug build, run the connected Input/style checkpoint:

TURTLEGIT_CORE_ONLY=1 swift test --filter 'IssueMessageStyleTests|IssueRegexTests'
python3 scripts/test-message-style-family.py --git /usr/bin/git --git build/git-runtime/Git/bin/git

The native runner links current app objects once and retains the prior Input, Notes-host and spelling fixtures. Its new case checks actual note/Log/Merge issue properties and native attributes, Rebase's shared editor, non-project descriptions, owning live font/style choices, raw text/selection/Undo and stale query cancellation/Quit accounting. --only styles, input, hosts, spelling or font limits an affected repair. The font case retains the existing actual Commit/Merge font, caret, accessibility and Undo checks. --captures build/qa/message-style-captures records the actual Notes window in light/dark; inspect the raw images before publishing. Each owned case/process must reach its final marker and is reaped on every exit. See scope and evidence.

Git Properties parent pages and history batches

After building Debug, run this connected checkpoint:

TURTLEGIT_CORE_ONLY=1 swift test --filter 'GitPropertiesTests|FinderSubmoduleMetadataTests'
python3 scripts/test-git-properties-family.py --git /usr/bin/git --git build/git-runtime/Git/bin/git

The runner links current app objects and uses stable receiver source paths. It combines the retained property controls/index/close fixture with live registered parent discovery, parent-first pages, selected child retention, registration removal on Refresh, page-scoped Log/Settings callbacks, flag Apply/restoration, primary-grant boundaries and forced-close discovery cancellation. Each process must reach its completion marker and is reaped. --only parents or properties limits an affected repair. CI adds the parent fixture for both engines; the retained property fixture remains in the existing reference groups.

Core fixtures retain merge-parent pruning, mode-only changes, SHA-1/SHA-256 index versions 2–4, split indexes, conflicted stages, stale/lock/cancel refusal and literal filenames. A 145-commit fixture checks three bounded object-query processes without per-commit tree queries. Missing gitlink objects and strict batch-frame validation are covered separately. Injected scopes are model checks, not signed sandbox acceptance. See parity scope and dated evidence.

Unified Diff editable document family

After a current Debug build:

python3 scripts/test-unified-document-family.py --git /usr/bin/git --git build/git-runtime/Git/bin/git

The runner links current app objects once and combines the new standalone file-document fixture with the retained partial-staging fixture. Each case uses private files/repositories/preferences and must emit a completion marker before its owned receiver is reaped. --only document or partial limits a repair. --captures build/qa/unified-document-captures captures the actual UDiff window with source Find in light/dark through ScreenCaptureKit; inspect raw originals before publishing. A capture-only fixture correction does not repeat staging or Core checks. No Core algorithm changed in this native document batch. See scope and evidence.

The UDiff family runner also includes --only handoffs. Its new case retains comparison metadata through Cancel and cancelled Save As, collapses replacement requests to the newest accepted snapshot, checks the actual UDiff Settings heading/owner locks and queued replacement, and drives the saved-file Apply Patch handoff through a real working-tree apply. Generated loaded bytes and empty file-chooser paths are checked separately. Forced closure while target selection is pending refuses a late review. See handoff evidence. The default grouped checkpoint runs document, partial and handoff cases with both engines; affected repairs may use --only handoffs. Native-only changes do not repeat Core suites.

External document tool family

After a current Debug build:

TURTLEGIT_CORE_ONLY=1 swift test --filter 'UnifiedDiffViewerTests|AlternativeEditorPreferencesTests|DiffToolPreferencesTests'
python3 scripts/test-external-document-family.py

The native receiver uses injected app launches and actual private executable helpers; it never opens a user editor app. It checks native URL default behavior, expanded title/path argv and literal filenames, raw previews, Shift inversion, failed-launch cleanup, missing simulated scope, pre-launch cancellation, held app launch/file-grant lifetime, executable group/descendant cleanup, queued Alternative Editor Quit ownership and the actual owning Arguments field. Core checks include template validation/persistence and old-preference defaults. The receiver and owned helper groups are reaped. Native scope simulation does not prove signed execution. See evidence.

First Start / General / credential ownership

python3 scripts/test-first-start-family.py --git /usr/bin/git --git build/git-runtime/Git/bin/git links the current Debug app once, then drives the real wizard against private config files and preference suites. It covers engine capture, identity submission, Don't store/Back, owned SSH and Advanced sheets, helper reload, private Finish, cached General Apply, cancelled version/config/credential reads, forced-close accepted identity writes and a deliberately failing second identity write. Owned helper processes and descendants must settle before Quit accounting clears. No real user Git configuration or completion preference is changed.

Add --captures build/qa/first-start-captures for actual User/Authentication light/dark current-process captures. Capture requires the existing macOS screen recording authorization; hosted semantic checks do not capture. This does not prove physical keyboard interactions, arbitrary SSH clients, every configuration precedence case or signed App Store sandbox access. See FIRST-START-WIZARD-PARITY.

Add native list family

python3 scripts/test-add-list-family.py --git /usr/bin/git --git build/git-runtime/Git/bin/git checks native Add table/header menus, legacy column migration, resize/reorder persistence, leading checkbox, reset acceptance/decline/forced-close, marked-row Space and selected/unselected checkbox propagation. It uses private preferences and real private Git files; copy assertions inspect strings without touching the shared pasteboard. Injected LFS responses drive the actual owned progress sheets, captured selections, successful Lock/Pull callback, failed Unlock/Force retry, review-before-refresh and cancellation/late-result retirement guards. Git index and HEAD must remain unchanged. No LFS server is contacted.

--captures build/qa/add-list-family-captures records actual inactive accessory Add windows in light/dark with optional columns shown in a wider native window. Physical gestures, authenticated transport and signed sandbox/Finder acceptance remain outside this receiver. See Add parity.

Rich Log message family

python3 scripts/test-log-message-family.py --git /usr/bin/git --git build/git-runtime/Git/bin/git links current Debug app objects once and exercises the actual Log message pane with private commits, notes and preferences. It checks issue URL callbacks, visible hash selection/scroll, selected-text/busy refusal, stale menus, font/style/hash length preferences, selection preservation, held style retirement/Quit and actual missing-hash warning suppression/closure. External browser opening is injected; shared clipboard publication and physical gestures are not driven.

Add --captures build/qa/log-message-captures for unmodified current-process light/dark captures of the inactive accessory window. The fixture adjusts native pane dividers and uses a private font so all message sections remain visible. TURTLEGIT_CORE_ONLY=1 swift test --filter 'HistoryMessagePresentationTests|IssueTrackerTests' covers source hash/trailer/DWORD/visible-prefix rules, document sections, RichEdit traits, UTF-16 issue/template positions, overlap precedence, invalid expressions, filter ranges and cancellation. See parity.

Shared editable message hotspots

python3 scripts/test-message-style-family.py --only links --only styles --only log --git /usr/bin/git --git build/git-runtime/Git/bin/git compiles fixtures against current Debug app objects once and runs private receivers sequentially. The link case uses actual Input, Notes, Description, Merge and Commit editors plus the shared Rebase editor with loaded project properties. It injects URL opening and clipboard publication, checks original menu images/private icon preferences, replaces inherited link actions, exercises selected/disabled/modal refusal and edit/restore/close retirement, and compares exact Git/note bytes. The existing styles and rich Log families remain separate cases in the same batch.

The fixture uses explicit synchronous sheet completion handlers, mirroring the controller API while allowing its async verification code to dismiss the sheet. Phase diagnostics in the private root identify stalled interactions. No browser, real tracker or shared pasteboard is used. Physical clicks/hover, all native localized menu variants and signed App Store acceptance remain open. See MESSAGE-LINK-INTERACTION-PARITY.

Repository presentation family

TURTLEGIT_CORE_ONLY=1 swift test --filter 'RepositoryPresentationTests|AdvancedSettingsTests' checks the shared title/path policy and Advanced persistence.

python3 scripts/test-repository-presentation.py --git /usr/bin/git links the existing Debug app objects once. It creates private repositories and preference suites, constructs ten real native controllers, checks scope/title updates and independent preference domains, inspects Add's native tooltip cells, resets both settings and checks that closed windows stop receiving updates. It preserves the private repository's exact HEAD/index and closes owned windows. This is a presentation check; repeating it with another Git engine is optional. Physical tooltip hover, every dialog layout and signed acceptance are separate.

Hierarchical settings lifecycle

python3 scripts/test-configuration-lifecycle.py --git /usr/bin/git --git build/git-runtime/Git/bin/git checks Git, Dialogs 3 and Issue Tracker settings using one cached native fixture compilation. It holds configuration discovery across cancellation, holds actual local writes across retirement, checks captured drafts/destinations and Quit ownership, cached Apply, late-confirmation refusal and native private hierarchy hint suppression. HEAD/index bytes stay unchanged. Authorization is injected; physical/signed folder grants are separate acceptance work. No Core rerun is needed when only this native operation layer changes.

Unified Diff document waits now include #line in failures. The hosted bundled Git timeout remains unresolved; a local affected-case pass alone does not fix it.

Bundled contextual Help

build/site-venv/bin/python scripts/build-help.py --check verifies the generated book against the selected Markdown guides and topic catalogue. Ordinary Xcode builds verify copied help files and generate Apple's local index before signing.

python3 scripts/test-help-book.py links one native receiver to current Debug app objects. It verifies all 46 topic URLs/named anchors, one-time registration dispatch, local and online fallback, real Commit/Pull window context, F1 and modifier gates, sheet inheritance/overrides, close retirement and the actual Settings Help button. Viewer registration/opening is injected. The compiled bundle must contain a nonempty search/anchor index. All owned windows close and the receiver is reaped. Physical Help Viewer/search, actual browser startup, localization and signed acceptance are separate checks. Core code is unchanged by this family.

LFS captured interactions and source progress

TURTLEGIT_CORE_ONLY=1 swift test --filter 'LFSLocksTests|MenuIconTests' checks literal/preflight/cancellation behavior, ordered file-begin callbacks, unwrapped LFS failure output and original artwork decoding.

python3 scripts/test-lfs-interaction.py --git /usr/bin/git --git build/git-runtime/Git/bin/git uses a private executable adapter and JSON lock state, never a real LFS server. A held command verifies that the file notification appears before settlement. The family checks selected/unselected checkbox propagation, captured row/column menus, selection/sort retention, stale/busy refusal, native progress rows/copy, Force target retention, per-attempt private action logs and one review refresh. The helper delegates other Git commands to the selected engine and preserves HEAD/index/config. --captures build/qa/lfs-interaction-captures records raw own- window light/dark captures on the first engine. Attached-sheet compositor padding is retained in QA images; only clean main-window captures enter the public gallery.

python3 scripts/test-lfs-locks.py --git /usr/bin/git --git build/git-runtime/Git/bin/git retains the earlier query/check/column/review/Pull/retirement family. Its two progress-title assertions now require the scoped title. Help's affected catalogue check also runs once after the new LFS chapter. Physical server/Finder/accessibility, full progress file menus and signed sandbox acceptance remain separate work.

LFS progress file interactions

The same test-lfs-interaction.py batch now also verifies source single-file menus/icons, auxiliary/multi-selection/folder gates, captured action dispatch, double-click routing, block sorting, real Command-A/Command-C, completion timing, configured history routing and real fallback Log/child LFS controllers. Application launch, chooser responses and Finder reveal are intercepted. A held chooser checks ownership and refusal after retirement. This adds no Core test run; see the dated evidence.

Native LFS lock list

The Locks dialog now owns an AppKit table directly; its checks no longer locate SwiftUI's internal table through CommitFileInteraction.Probe. The retained test-lfs-locks.py cases exercise the new coordinator's real columns and menus, header order/width/fit/reset persistence, native selection and separate focus mark, refresh viewport restoration, and its existing progress/retirement routes. test-lfs-interaction.py additionally clicks a real row checkbox, invokes native keyboard handlers and captured column menu items, checks the original watermark and private preference, and captures the actual main window in light/dark mode. See native-list evidence for build repairs, engine results and limits. Core is unchanged for this batch.

Merge conflicts hidden by comparison options

Run python3 scripts/test-merge-ignored.py --git /usr/bin/git --git "$PWD/build/git-runtime/Git/bin/git" after the connected implementation batch. One cached receiver checks real filtered three-way conflicts, source/result attributed colors, modified Find/navigation, Save cancellation and Mark resolved refusal, identical-byte Mine choices with Undo/Redo, and actual selected staging with unrelated-index/working-file preservation. The retained engine/filter and result-history families run once because their standalone Subversion behavior is independent of Git selection. --only workflow or --only retained limits a failure repair to the affected group. Private preferences and owned-window/process cleanup remain required. See dated evidence.

Whitespace state and combined-view payloads

python3 scripts/test-merge-whitespace-states.py runs the connected native whitespace/mode/color/fold/Find/export/edit/Undo/Save cases and the retained one-pane workflow in one owned receiver. It uses private standalone files and preferences; repeating it with another Git executable would not exercise another engine because these workflows use the bundled Subversion comparison runtime. Core checks cover actual plans, source leading-trim/all-whitespace policy, visibility independent of Find categories, neutral palette defaults, line numbers, raw serialization and original Mine selection offsets. See the evidence.

The same grouped whitespace-state receiver also runs docs/qa/merge-block-navigation-native-2026-10-15.swift: neutral per-state navigation, multi-row forward/backward blocks, no wrap, active-pane ownership, peer selections and Quit gating. Core MergeBlockNavigationTests pins source state grouping, filtered/conflict categories, visible rows and boundaries. These checks do not certify three-pane or wrapped screen-row navigation.

The retained case of scripts/test-merge-ignored.py also runs merge-three-pane-navigation-native-2026-10-15.swift: active source/result navigation across unequal source lengths and marker rows, peer selection, F8, native source block menus and icons, exact chosen result, mapping Undo/Redo, common-line stale-choice prevention and Quit gating. MergeNavigationMapTests and real-engine SubversionMergePresentationTests cover mapping ownership, UTF-16 offsets, replacements, boundary insertions, crossed-group invalidation and ignored conflicts. See navigation limitations.

test-merge-whitespace-states.py now includes the native independent-block receiver: empty text selection plus source boundary rectangles in both themes, peer/transfer ranges, private-pasteboard Copy, block-only Cut no-op, Paste at the caret, edit invalidation and result block/caret Undo/Redo. Retained Compare and three-pane navigation fixtures inspect MergeBlockSelecting ranges separately from insertion carets. This native-only batch does not change Core behavior.

The grouped whitespace/native editor runner now includes merge-editor-history-native-2026-10-15.swift and the retained clipboard workflow. It checks F7/automatic two-pane inline advancement, explicit inline boundaries, Paste at that caret, engine-reconciled Compare Undo/Redo caret restoration, all-pane selection clearing, disabled Copy without a selection, and Normal/changed context blocks. The previous block-selection fixture now asserts source Undo.cpp selection clearing rather than the earlier invented block restoration. Focused Core context-grouping cases pin fixed-state bidirectional expansion.

The grouped native editor runner includes --only initial, implemented by merge-initial-navigation-native-2026-10-15.swift. It verifies current-pane/peer initial blocks and inline entry carets, explicit-only transfer, later input during an actual Undo engine request, stale/fresh Go to Line answers with unchanged text, and neutral combined-state selection before an engine changed region. The shared settled helper now includes initial navigation and lays out the owned content. This batch changes native consumers only; Core algorithms are unchanged.

python3 scripts/test-browser-paths.py --git /usr/bin/git --git build/git-runtime/Git/bin/git groups byte-exact Unicode browser selection, folder-cache/tree identity, captured action bytes, refresh, working preflight and retired owner checks with the retained table and lifecycle workflows. Core RepositoryBrowserTests builds real trees containing NFC/NFD file and folder names, verifies blob reads and index-preserving Revert refusal, and checks recursive export against the actual volume's alias behavior. This is not physical Finder acceptance or a full invalid-path policy for the complete app.

The aligned case now checks the native result record renderer, typing in an individual conflict slot and removed Base row, multiline source-gap insertion, all-pane Undo/Redo and exact saved bytes. Retained navigation/colors and ordinary block workflows compare their native strings with the model's display projection; serialized result assertions remain independent. Whole-file/both-order fallback, IME, resolved-empty aliases and full large-file acceptance remain open.

scripts/test-merge-ignored.py --only copies checks both-order footer choices, continued native result choices, source gaps/states/original line numbers, resolved-empty identity, exact UTF-8 Save, partial unresolved source choices, cleanup of rows empty in all three panes, captured-command layout ownership and complete all-pane Undo/Redo. Core tests check the same record operations with unequal source lengths, mixed endings and EOF without an ending. The default merge group includes this case in its single cached fixture compilation.

scripts/test-merge-ignored.py --only format checks result whitespace/EOL native menus, preserved row states and raw conflict bytes, encoding-only and combined format Undo/Redo, the actual Encoding sheet Cancel path, pending-choice Save/reload/Quit/edit gates, late-answer ownership, immediate Save-versus-Undo/key and typing races, and exact UTF-16BE BOM output. The grouped default compiles this fixture with the retained merge cases once. Core presentation cases cover removed row formatting, ignored-conflict metadata, no-op conversion and explicit typing endings when the result contains only blank conflict records.

scripts/test-primary-live-presentation.py --git /usr/bin/git checks native Commit long destination/provider/issue layout, full branch read-only copy and resize focus, actual timer-driven Log author/committer dates and tooltips without changing rows/graph/selection, font updates, private copied-detail date settings and timer retirement. --capture-dir PATH captures the first engine's owned windows in both appearances. Subsequent engine cases run without compositor capture. No Commit or Git write action is invoked, and HEAD/index tree/status are checked unchanged.

python3 scripts/test-primary-file-menus.py --git /usr/bin/git --git PATH_TO_BUNDLED_GIT runs the connected marked-row Commit/Working Tree context commands, actual Add progress modes, captured Commit scope and partial index-flag updates, followed by the affected Working Tree file-action and scope regressions. It uses private Git fixtures/preferences and current cached Debug objects, closes owned windows and reaps each helper. No Core implementation changed in this native command batch.

python3 scripts/test-settings-color-choices.py links the six-page native color Settings workflow and retained Merge Colors regression against cached Debug app objects. Optional --capture-dir PATH records unaltered compositor frames. The workflow uses a private preference suite and SMTP fixture, no Git operations or network requests, and closes all owned windows/panels. Native-only control changes do not require rerunning the Core suite.

python3 scripts/test-settings-navigation-layout.py --git /usr/bin/git --git PATH_TO_BUNDLED_GIT checks recursive initial/rebuild/failed-page selection, caption bounds and tooltips, constrained-screen scrolling/footer reachability and retired navigation, followed by retained color controls and Settings Apply/Cancel/cache workflows. Optional --capture-dir PATH captures actual native windows; --only reruns an affected family without repeating successful families. This batch changes native layout and dispatch only; no Core suite rerun is required.

python3 scripts/test-log-integration-preparation.py --git /usr/bin/git --git PATH_TO_BUNDLED_GIT checks source Merge/Rebase target precedence with real local/tag/remote refs, moved preferred refs without fallback, native options presets and owned cancellation/selection/close/retirement/Quit behavior. It uses private repositories and preferences, preserves HEAD/index tree/status, closes owned windows and reaps helpers. This is a native-only preparation change; no Core implementation changed.

Commit, Rebase message and Fetch/Pull workflow checkpoint

scripts/test-operation-workflows.py compiles one cached receiver for the connected operation batch. It accepts repeated --git arguments and --only commit, --only rebase or --only transport for an affected repair. The default runs all three completed implementation families. Each invocation uses private repositories and preferences and hides owned native windows and children. Cleanup retires the owners and waits for actual metadata, Git and sheet-release work; process ownership is also enforced by native_receiver.py on success, failure and timeout.

Core changes in this batch are limited to Rebase message snapshots and guarded Edit amend-selection preparation. Run the relevant Rebase Core cases as one group; Commit/Fetch native-only corrections do not require another full Core run. Grouped results and any repairs are recorded in qa/operation-workflows-2026-10-18.json. Physical interaction, hosted integration, signed sandbox/Finder and full source visual parity require their own evidence.

When changing included Mac Help guides, run scripts/build-help.py after the guide edits and before building the app, then scripts/build-help.py --check before committing. The Pages workflow validates the tracked help HTML and manifest before building the website. A passing site render alone does not validate those sources.

Credential advanced editing and Merge operation checkpoint

scripts/test-credential-merge-workflows.py compiles the completed Credential and Merge families into one cached native receiver. New cases exercise masked Apply, explicit Save, helperless groups, Save/Discard/Cancel, permission/selection retirement, actual Merge identity repair and History sheets, immutable options, encoded/cleaned messages, replay refusal and SVN completion. Retained Credential source/settings and Merge History/picker/progress cases cover the affected consumers. Each case runs in a private repository and global/XDG configuration, with injected credentials/preferences and hidden native children.

Run the relevant Credential and Merge Core cases once at this implementation boundary. Repair an actual failure and repeat only its affected checks. Native process groups and actual sheet/operation counters must drain on every outcome. The grouped result, hosted Pages evidence and remaining physical/signed/full-port limits are in qa/credential-merge-workflows-2026-10-18.json.

Stash and Submodule recovery checkpoint

scripts/test-stash-submodule-workflows.py groups Stash identity repair, warning/result ownership, captured follow-ups, Submodule Add key-configuration recovery, ordered explicit Update batches and partial Sync results in one cached native receiver. Retained Save/Restore, Update progress, Sync and Submodule handoff and command-entry cases cover the affected consumers. Each case receives private repository, preferences and global/XDG configuration; native children stay hidden and owned helpers must be reaped on all outcomes.

Run the related Core group once after implementation freezes, followed by the native group with system and bundled Git. Repeat only checks affected by a real failure or subsequent change. Record actual outcomes and remaining acceptance in qa/stash-submodule-workflows-2026-10-18.json; this checkpoint does not establish whole-port or signed Finder/App Store acceptance.

Switch, Reset and Bisect operation checkpoint

scripts/test-switch-reset-bisect-workflows.py groups complete operation-family fixtures after implementation freezes. It covers captured Switch/Reset review, source completion menus and native sheet release, Reset stdout object identity, Bisect progress/continuation and partial-operation receipts, plus originating preferences through actual root Log and follow-up routes. Retained progress, revision picker and express-switch cases exercise affected consumers. Each case uses private repositories, preferences, injected permissions and hidden owners; actual child processes and sheet release must drain before teardown.

Run the related Core classes once at this boundary and the grouped native cases with system and bundled Git. Repeat only checks affected by a real failure or subsequent change. See qa/switch-reset-bisect-workflows-2026-10-18.json for actual results, fixture repairs and remaining physical/signed/full-port limits.

Windows metafile comparison family

Build the source-pinned helper with python3 scripts/build-metafile-runtime.py, then build the Debug app so its runtime kit and actual native sources agree. The focused Core group includes MetafileImageTests, ImageComparisonTests, ImageConflictTests, ImageFileComparisonTests and DiffToolViewerSelectionTests. Run python3 scripts/test-metafile-workflows.py --git /usr/bin/git --git build/git-runtime/Git/bin/git for actual decoder consumers and affected retained image workflows. The receiver cache includes source/framework/compiler inputs and stable generated source paths; cases use private repositories/preferences and hidden owned windows. --only selects affected cases after a real failure.

The corpus generator is Tests/TurtleGitCoreTests/Fixtures/Metafile/generate.py. Successful and deliberately unsupported samples are separate. A successful raster must retain expected dimensions/colors and original source bytes; an unsupported record must fail rather than return a misleading partial drawing. Physical input/compositor/font equivalence, minimum-OS and installed signed App Store acceptance remain separate from these focused checks.

Finder selected-source transfer family

After the related Finder request/menu, native destination/review and operation workflow implementation freezes, run the focused Finder source/clipboard/request and icon Core classes, then the grouped source/drop/move/copy native receiver with system and bundled Git. Captured source URLs must survive Finder/clipboard changes; no mutation occurs until an accepted operation runs. Verify actual sheet detach, late cancellation, recent-destination revalidation, captured preferences, Quit guards and original source/index outcomes in private repositories with hidden owned windows. See batch evidence.

Settings graph retirement family

After the connected native Settings implementation freezes and Debug is built, run python3 scripts/test-settings-teardown-family.py --git /usr/bin/git --git build/git-runtime/Git/bin/git. This links one cached receiver against actual app objects and runs twelve affected lifecycle/consumer cases per engine. The new teardown case checks same-stack publication, stale controls and attachments, held workers, actual hosted-page destruction, captured sheet/reply drain and shared transaction disposal. The retained Replay case is the exact workflow that aborted in the older macOS 15 hosted run. Private configuration/preferences and invisible owned windows isolate the checks; cleanup must finish on failure as well as success. Use --only for affected repairs, not a new full-suite run. This native-only repair does not require another Core suite. Local ARM execution does not establish hosted Intel/SDK acceptance or current signed deployment. See source comparison.

Metafile painting interoperability extension

Freeze the related gradient, ImageAttributes and placement implementation before building the pinned helper and embedding it in Debug. Run TURTLEGIT_CORE_ONLY=1 swift test --filter MetafileImageTests and the affected native consumer group: python3 scripts/test-metafile-workflows.py --only consumers --git /usr/bin/git --git build/git-runtime/Git/bin/git. The latter covers actual IDiff, Open/drop, unsupported-side and three-stage conflict consumers with hidden owned windows. Other retained image families need repeating only when affected.

The painting corpus includes transformed gradients, actual default image attributes, clamp and tile/flip behavior, mixed signed relative points, opaque pens and half-alpha fills. Deliberately unsupported fixtures exercise image effects, wrong types, BitmapClamp, invalid stops/wraps, excessive tile markup and insufficient radial coordinate precision. Pixel assertions normalize the actual CGImage into named sRGB bytes, avoiding NSBitmapImageRep.colorAt profile loss; thresholds remain unchanged. See actual batch evidence for failed attempts, focused repairs, final scope and remaining acceptance.

Merge activation and external-source reload family

Freeze the shared input-observation policy, both editor integrations and native Save/Save As/close/Open/Quit behavior before the checkpoint. Use the focused MergeExternalSourceTests plus affected retained comparison and three-file save Core tests, then the grouped scripts/test-merge-external-reload.py receiver. Private files/preferences and injected active-window/probe/answer seams allow hidden windows while exercising the production controller, native sheet release and actual filesystem changes. Keep existing manual Reload and standalone comparison/merge cases in the same grouped receiver where affected.

Ignore and Cancel must acknowledge only the observation, preserve drafts/Undo and never refresh a Save CAS baseline. Check source Save As rebinding, own-save acknowledgement, independent-output exclusion, Base-only three-way behavior, late probe retirement, held warning replies, actual leases and Quit accounting. A local activation fixture does not certify physical focus events, network-volume metadata or signed sandbox access. See source scope.

Blame zoom and revision tooltips

After the complete presentation batch freezes, run the relevant Core group once:

TURTLEGIT_CORE_ONLY=1 swift test --filter 'GitBlamePresentationInteractionTests|GitBlameTests|GitBlamePresentationTests'

After the Debug build, the cached native receiver groups new presentation interactions and existing wrapping/source-editor checks:

python3 scripts/test-blame-presentation-interaction.py --git /usr/bin/git --git build/git-runtime/Git/bin/git

The new case uses private repository/configuration/preferences and hidden actual AppKit controls. It checks menu/key/wheel dispatch, effective fonts, shared row and gutter metrics, wrapped logical/pixel and unwrapped horizontal anchors, UTF-16 selection, limits and configured-font persistence, per-row full-message tooltips, Reload revocation and retired guards. Every case closes owned windows and drains workers, and the runner reaps its owned receiver. A fixture correction repeats only the failed case; unchanged source/wrap cases reuse the same compiled cache. Core origin fallback covers preserved visible history and owned cancellation. Physical gestures/tooltips, VoiceOver, full current CI and signed distribution remain separate acceptance; no display captures are included by default.

Finder Worktree source and post-create handoff

After the implementation family freezes, run one focused Core group:

TURTLEGIT_CORE_ONLY=1 swift test --filter 'FinderWorktreeSourceTests|FinderWorktreeValidationTests|GitWorktreeTests|FinderShellRulesTests|FinderRepositoryMetadataTests'

After the Debug build, the cached native group uses the actual Finder menu source, the new source/destination/review case and retained Worktree family/progress/command cases:

python3 scripts/test-worktree-finder-handoff.py --git /usr/bin/git --git build/git-runtime/Git/bin/git

It uses private repository/configuration/preferences and hidden native sheets and controls. Checks cover source URL identity, duplicate/late/cancelled destination replies, owner close and Quit fences, no premature Git writes, actual OK, finished status/timing, actual creation closure before a real Update child, retained related metadata scopes, bare source and failed/held-authorization paths. Scope providers simulate policy, not signed delivery. The runner closes/reaps owned receivers; every failure retains a dated QA entry. Repeat only an actually failed case or checks affected by a production repair, reusing unchanged compilation. Physical installed Finder and current signed/App Store acceptance remain separate.

EMF+ region and pattern rendering

The October19 source comparison and recorded results extend the original metafile corpus with region trees, hatch cells and texture brushes. Reconstruct the pinned runtime after patch/license changes, then run the focused Core group:

python3 scripts/build-metafile-runtime.py
TURTLEGIT_CORE_ONLY=1 swift test --filter MetafileImageTests

After the Debug app build, use the retained grouped receiver:

python3 scripts/test-metafile-workflows.py --only consumers --only colors \
  --git /usr/bin/git --git build/git-runtime/Git/bin/git

The receiver uses private repositories/preferences, hidden windows, actual comparison/conflict consumers, original-byte checks and owned process cleanup. It does not certify physical Windows output, all native gestures, signed-parent execution or full hosted integration. The dated record preserves initial failures and only the affected rechecks; authored fixtures alone are not passing evidence.

Main Sync and Add/Resolve progress family

After implementing the connected family, run the focused Core group once:

TURTLEGIT_CORE_ONLY=1 swift test --filter 'SynchronizationCommandCompletionTests|MenuIconTests.testAllBundledUpstreamIconsDecodeAtMenuAndRetinaSizes'

After the Debug app build, run the grouped native receiver:

python3 scripts/test-inline-file-progress-family.py --git /usr/bin/git --git build/git-runtime/Git/bin/git

Five cases per engine cover the new inline Sync and Add/Resolve progress and retained Sync command, Resolve progress and Add-list behavior. Receivers use private repositories/configuration/preferences/pasteboards and hidden native windows. Command receipts cover real Git completion before metadata, failure and cancellation. Native checks cover source progress notifications, captured menus, actual-close-before-Commit ownership, cancellation questions, deferred Quit and owned process draining. New cases save content-only light/dark captures during the normal run; these do not establish physical desktop, VoiceOver or Windows visual acceptance. Repeat only failed cases or checks affected by actual repairs. Full hosted CI and signed Finder/App Store acceptance remain separate.

Hook Scripts editor, exact identities and owned decisions

Implement the connected family before the grouped checkpoint:

TURTLEGIT_CORE_ONLY=1 swift test --filter 'ClientHookIdentityTests|ClientHooksTests'

After the Debug build:

python3 scripts/test-hook-scripts-family.py --git /usr/bin/git --git build/git-runtime/Git/bin/git

Three isolated receiver cases per engine cover editor/list/Apply/Cancel and choosers, actual approval/failure sheets and owned script work, and the retained Commit/Push/Rebase/non-wait workflows. Exact Unicode scopes/commands, compatible approval records, bookmark migration, renewal/refusal and balanced leases are included. Scope providers simulate policy; they do not prove signed sandbox access. Receivers use private repositories/preferences/geometry and invisible windows, and reap owned process groups. No optional content captures are produced. Repeat only actually failed or affected cases; full hosted, physical and signed acceptance remain separate requirements.