diff --git a/docs-ai/017-upstream-sync-process/upstream-ledger.md b/docs-ai/017-upstream-sync-process/upstream-ledger.md index f51ebd29..6b31ca5c 100644 --- a/docs-ai/017-upstream-sync-process/upstream-ledger.md +++ b/docs-ai/017-upstream-sync-process/upstream-ledger.md @@ -15,6 +15,19 @@ Future upstream checks should only inspect commits **after** this baseline. --- +## 2026-07-12 — Ledger corrections (docs-ai backfill audit) + +Verifying this ledger against GitHub during the docs-ai backfill (PR #558) surfaced four +bookkeeping errors, now corrected in place (marked *correction 2026-07-12* where inline): + +- 2026-05-08 "Ported to Prowl PRs": #265 and #267 were in fact **closed unmerged**. +- 2026-06-09 table: `6fab2d28` is PR #416's merge commit (not #417's — that is `761ec204`), + and `db2f39d0` belongs to PR #417, not #414. The #332 port is partial by design. +- 2026-04-20 deferred adoption of upstream #225 was never executed (status note added). +- Old Log: the snapshot cache is no longer "Pending upstream" — upstream #162 closed unmerged. + +--- + ## 2026-07-09 — Review through post-v0.10.5 ### Upstream changes reviewed @@ -84,8 +97,8 @@ architecture): | `b1b65bf7` #378 — Tolerate login-shell noise in `gh` JSON output | PR #418 (`24027a91`) | | `b1ecdf3d` #376 — Cap and coalesce terminal event streams | PR #416 (`2800fd0b`) | | `974455b1` #347 — Coalesce OSC-9 progress to cut tab-bar lag | PR #415 (`7e0c9c76`) | -| `c0c1c2ac` #332 — Per-surface `@Observable` notification dot | PR #417 (`6fab2d28`) | -| `955c1943` #329 / `be322039` #336 — Detail/menu-bar + split-tree perf (FocusedAction wrapper, drop AnyView erasure) | PR #414 (`c9f5100e`, `db2f39d0`) | +| `c0c1c2ac` #332 — Per-surface `@Observable` notification dot | PR #417 (`761ec204`) — partial: AnyView-erasure slice only; the per-surface dot mirror was deliberately skipped (fork's dot is already observed) | +| `955c1943` #329 / `be322039` #336 — Detail/menu-bar + split-tree perf (FocusedAction wrapper, drop AnyView erasure) | PR #414 (`c9f5100e`) / PR #417 (`db2f39d0`) | | `65c87e30` #371 — Focus the terminal after worktree navigation | PR #419 (`e02c76f0`) | | `fc4e4b0b` #353 — Selected command-palette row legibility | PR #420 (`3b499662`) | | `66b300d1` #313 — Persist main window position and size | (`02e13192`, PR #420) | @@ -217,8 +230,9 @@ Reviewed 25 commits on `supabitapp/supacode` from `c4e9be3b` (v0.8.1, 2026-04-19 - **Ported to Prowl PRs**: Ghostty key routing (#255), fork-aware PR repo resolution (#256), worktree history (#260), dynamic window title plus main-window quit behavior (#261), loading overlay polish (#262), sidebar animation - CPU fix (#263), Android Studio editor support (#264), sidebar right-arrow focus (#265), test workflow concurrency - (#266), and `CFBundleIconName` metadata (#267). + CPU fix (#263), Android Studio editor support (#264), sidebar right-arrow focus (#265 — *correction 2026-07-12: + closed unmerged after an LGTM review, never landed*), test workflow concurrency + (#266), and `CFBundleIconName` metadata (#267 — *correction 2026-07-12: closed unmerged; Icon Composer not adopted*). - **Reviewed and skipped**: Notifications UX (#266 upstream), inactive split dimming (#260 upstream), tab renaming (#269 upstream), and bare-repo detection (#263 upstream) were already covered, intentionally different, or not currently applicable in the fork. @@ -247,7 +261,7 @@ Reviewed 47 commits on `supabitapp/supacode` from `0150ceaf` (v0.8.0) through `c - **Tuist migration**: **Skip.** Fork sidesteps the `release-tip` archive bug by construction — `ProwlCLI` is a SwiftPM `executableTarget`, not an Xcode target, and is pre-copied into `Resources/prowl-cli/` as a folder reference. Archives already contain only `Products/Applications/supacode.app`; `/usr/local/bin/prowl` symlinks into `/Applications/Prowl.app/Contents/Resources/prowl-cli/prowl`. Migrating would force rewriting the `/release` skill, notarization flow, appcast generation, and every rebrand patch for zero functional gain. - **CLI (#227, #253, #246)**: **Skip.** Fork's `prowl` CLI targets agent scripting (`send`/`key`/`read` with stdin piping, output capture, timeout, keyboard token synthesis); upstream's CLI targets orchestration (`worktree archive/pin/delete`, `tab/surface new/split/close`, `repo`/`settings`/`socket`). The two are orthogonal, not duplicative. Future work may selectively port upstream's orchestration commands into `ProwlCLI`'s envelope-based transport, but nothing forces action today. -- **Ghostty `#225`**: **Defer to next sync of the affected files.** Upstream version is slightly cleaner — state on `GhosttyRuntime` instead of per-view (fixes multi-split-same-window ambiguity), reset on config reload, early-return in fullscreen, Bool return, debug logs. No user-visible bug in fork. When next editing `GhosttySurfaceView.swift` / `GhosttySurfaceBridge.swift` / `GhosttyRuntime.swift`, replace fork's implementation with upstream's and preserve the fork-only `chromeBackgroundColor(...)` call in `applyWindowBackgroundAppearance`. +- **Ghostty `#225`**: **Defer to next sync of the affected files.** Upstream version is slightly cleaner — state on `GhosttyRuntime` instead of per-view (fixes multi-split-same-window ambiguity), reset on config reload, early-return in fullscreen, Bool return, debug logs. No user-visible bug in fork. When next editing `GhosttySurfaceView.swift` / `GhosttySurfaceBridge.swift` / `GhosttyRuntime.swift`, replace fork's implementation with upstream's and preserve the fork-only `chromeBackgroundColor(...)` call in `applyWindowBackgroundAppearance`. *(Status 2026-07-12: never executed — those files were edited multiple times since, and the toggle state is still per-view (`isBackgroundOpaqueOverride` in `GhosttySurfaceView.swift`).)* - **Everything else**: Nothing user-facing for the fork. Re-evaluate on next review. --- @@ -321,7 +335,7 @@ The table below was the original per-commit tracking format, preserved for refer | Filter duplicate and unsupported Ghostty actions from command palette. | `512c5b3`, `c8c562f` | Fork only | | Add command finished notification for long-running terminal commands with configurable duration threshold; Canvas highlights the entire title bar for unseen notifications, tracked per-tab. | `182e165`…`d7bb4b6` | Fork only | | Mark notifications as read on key input to focused terminal surface; suppress command finished notification after recent user interaction. | `26968c1`, `2db9ae5` | Fork only | -| Add repository snapshot startup cache to skip full git scan on re-launch when worktrees haven't changed. | `7136591` | Pending upstream (#162) | +| Add repository snapshot startup cache to skip full git scan on re-launch when worktrees haven't changed. | `7136591` | Fork only (upstream #162 closed unmerged) | | Fix unicode paths in diff and untracked file output. | `1b32a26` | Fork only | | Fix settings migration to copy instead of move, preserving `~/.supacode` for upstream compatibility. | `07121b6` | Fork only | | Use Claude to generate user-facing release notes; skip generation when pre-written notes exist. | `64d0928`, `849b5cf` | Fork only | diff --git a/docs-ai/backfill-open-questions.md b/docs-ai/backfill-open-questions.md index 534ea434..f93f71ac 100644 --- a/docs-ai/backfill-open-questions.md +++ b/docs-ai/backfill-open-questions.md @@ -3,72 +3,71 @@ Aggregated follow-ups discovered while backfilling entries 001–045 by verifying PRs and historical docs against the current tree. Each entry's full list lives in its own `001-action.md` → *Open questions*; this file collects the ones worth acting on or -deciding. Living document: strike items as they get resolved. +deciding. Living document: every actionable item is tracked by a GitHub issue (or was +fixed directly); strike items as they get resolved. ## Likely bugs / risky behavior -- **`make bump-and-release` conflicts with the notarized-only release policy** - ([001](001-fork-bootstrap-and-release-pipeline/001-action.md)): the upstream-inherited - target creates a GitHub Release with no notarized artifacts, and its `release.published` - event would fire `release-homebrew-cask.yml` against a missing `Prowl.dmg`. `AGENTS.md` - still advertises it. Candidates: delete the target or make it delegate to `scripts/release.sh`. -- **Sparkle channel picker is a no-op** ([021](021-sparkle-update-ux/001-action.md)): - `SparkleUpdateDelegate.allowedChannels(for:)` returns `[]` unconditionally, yet - `UpdatesSettingsView` still shows a Stable/Tip picker wired through `setUpdateChannel`. - Remove the setting or the dead plumbing. +- ~~**`make bump-and-release` conflicts with the notarized-only release policy**~~ + ([001](001-fork-bootstrap-and-release-pipeline/001-action.md)) — **fixed: removed in + PR #577** after auditing all 68 releases (never used; `bump-version` kept for `release.sh`). +- ~~**Sparkle channel picker is a no-op**~~ ([021](021-sparkle-update-ux/001-action.md)) — + **fixed: the Stable/Tip setting and all `UpdateChannel` plumbing removed in PR #578.** - **Shortening the archived-worktree retention window deletes immediately with no confirmation** ([018](018-archived-worktrees/001-action.md)) — silent-data-loss UX gap - that issue #174's design notes had asked to guard. + that issue #174's design notes had asked to guard. → **#560** - **Line-diff timing tier never refreshes** ([037](037-line-diff-tracking/001-action.md)): `repositoryLineChangesTimings` fills only missing roots, so a repo crossing a size tier keeps its stale debounce tier until relaunch — diverges from the 2026-06-22 plan intent. + → **#561** - **Prefix-detection mismatch in branch-name suggestions** ([044](044-foundation-model-branch-names/001-action.md)): `buildPrompt` advertises any `/`-prefix found in branches but `BranchNameSanitizer.detectConventionPrefix` knows a - fixed list (no `feat/`), so slash-less model output falls back to `worktree/`. - `BranchNameSanitizer` also has no dedicated unit tests. + fixed list (no `feat/`); `BranchNameSanitizer` also has no dedicated unit tests. → **#562** - **`withExpectedGithubAccount` switch-execute-restore risk** ([039](039-gh-cli-hardening/001-action.md)): external `gh auth switch` or a crash inside - the window leaves the host pinned to the override account; undocumented in docs/. + the window leaves the host pinned to the override account; undocumented in docs/. → **#563** - **SIGTERM'd long jobs never notify** ([008](008-terminal-notifications/001-action.md)): - exit codes 130/143 are unconditionally treated as user-initiated. + exit codes 130/143 are unconditionally treated as user-initiated. → **#564** ## Dead code / drift to clean up - `SupacodePaths.originalLegacy*SettingsURL(for:)` unreferenced (repo-root legacy fallback - dropped) — [004](004-prowl-rebrand/001-action.md). + dropped) — [004](004-prowl-rebrand/001-action.md). → **#565** - `SidebarPresentation.showsListHeader(repositoryCount:)` ignores its parameter (leftover of the removed ">10 repos" rule) — [026](026-sidebar-container-refactor/001-action.md). + → **#566** - `AgentDetectionSchedule.observedAgent(now:)` ignores `now`; `idleAgentDetectionInterval` - is a misnomer post-#441 — [030](030-agent-status-detection/001-action.md). + is a misnomer post-#441 — [030](030-agent-status-detection/001-action.md). → **#567** - Stale `MaxRects-BSSF` doc comment on `arrangeCards()` in `CanvasView.swift` — - [005](005-canvas-live-sessions/001-action.md). + [005](005-canvas-live-sessions/001-action.md). → **#568** - `GHOSTTY_PROMPT_TITLE_SURFACE` carries an in-code "consider removing" note; decision - never made — [007](007-ghostty-embedding-integration/001-action.md). + never made — [007](007-ghostty-embedding-integration/001-action.md). → **#570** - Close-confirmation copy hardcodes "at least 10 seconds" next to an injectable threshold — - [035](035-protected-terminal-close/001-action.md). + [035](035-protected-terminal-close/001-action.md). → **#569** - `RepositoriesFeature+GithubIntegration.swift` re-crossed the 1,000-line ceiling that - PR #403 established — [015](015-repositories-feature-refactor/001-action.md). + PR #403 established — [015](015-repositories-feature-refactor/001-action.md). → **#571** ## Docs / ledger corrections needed - **Observability runbook drift** ([020](020-observability/runbook.md)): still documents the App-Hang machinery removed in #236/#241 (a drift warning is stamped at the top); - needs an update pass. -- **Upstream ledger corrections** ([017](017-upstream-sync-process/upstream-ledger.md)): - the 2026-05-08 "Ported" list includes #265/#267 which were closed unmerged; the - 2026-04-20 deferred adoption of upstream #225 (runtime-level background-opacity toggle) - was never executed; snapshot-cache row still says "Pending upstream (#162)" but upstream - #162 is closed unmerged; two commit attributions in the 2026-06-09 table are swapped - (`db2f39d0` belongs to #417, `6fab2d28` is #416's merge). + needs an update pass. → **#572** +- ~~**Upstream ledger corrections**~~ + ([017](017-upstream-sync-process/upstream-ledger.md)) — **fixed 2026-07-12**: see the + ledger's "Ledger corrections" entry (#265/#267 closed unmerged; #416/#417 commit + attributions; upstream #225 deferred adoption marked never-executed; snapshot-cache row + no longer "Pending upstream" — upstream #162 closed unmerged). - **CLI contract drift** ([013](013-prowl-cli/001-action.md)): `contracts/send.md` still calls `--capture` future; `contracts/read.md` lacks `--wait-stable`; no contracts exist for `tab`/`pane`/`agents` despite shipped `v1` schema ids; architecture.md's planned - JSON-Schema validation harness (M4) never landed. + JSON-Schema validation harness (M4) never landed. → **#559** (to be discussed before + any writing) - `restoreTerminalLayoutOnLaunch` still default-off "(experimental)" 3.5 months after shipping; no promote/retire decision — [014](014-terminal-layout-persistence/001-action.md). + → **#573** - Active Agents panel status-priority sorting (blocked→working→done→idle) was a #274 - follow-up, still unimplemented — [029](029-active-agents-panel/001-action.md). + follow-up, still unimplemented — [029](029-active-agents-panel/001-action.md). → **#574** ## Historical oddities (recorded, no action expected) @@ -87,6 +86,6 @@ deciding. Living document: strike items as they get resolved. - Release-shaped Makefile targets (`archive`, `install-release`) still depend on `build-ghostty-xcframework` rather than the artifact downloader (`ensure-ghostty`), so a cold machine source-builds (needs Xcode 26.3) instead of downloading — - [041](041-ghosttykit-prebuilt-artifacts/001-action.md); unclear if deliberate. + [041](041-ghosttykit-prebuilt-artifacts/001-action.md); unclear if deliberate. → **#576** - CI runs `make lint` but never `make format-lint`, so the #503 failure class can recur — - [016](016-dev-build-and-ci-workflow/001-action.md). + [016](016-dev-build-and-ci-workflow/001-action.md). → **#575**