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** -- 2.51.2 From 693cc63602b6353f849acc89003893ebfb472285 Mon Sep 17 00:00:00 2001 From: onevcat Date: Sun, 12 Jul 2026 14:22:19 +0900 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20drop=20backfill-open-questions.md?= =?UTF-8?q?=20=E2=80=94=20all=20items=20now=20tracked?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every actionable finding is now a GitHub issue (#559-#576) or was fixed directly (PR #577, #578, and the ledger corrections in this branch); the historical notes remain in each entry's 001-action.md. The interim aggregation file has served its purpose. --- docs-ai/README.md | 1 - docs-ai/backfill-open-questions.md | 91 ------------------------------ 2 files changed, 92 deletions(-) delete mode 100644 docs-ai/backfill-open-questions.md diff --git a/docs-ai/README.md b/docs-ai/README.md index 4f7ce1b5..96b99f53 100644 --- a/docs-ai/README.md +++ b/docs-ai/README.md @@ -35,7 +35,6 @@ Living documents hosted here: - `013-prowl-cli/contracts/` — normative CLI contracts - `017-upstream-sync-process/upstream-ledger.md` — upstream review ledger (baseline + decisions) - `020-observability/runbook.md` — observability/diagnostics runbook -- `backfill-open-questions.md` — follow-ups discovered during the 2026-07-12 backfill Some entries also host verbatim historical attachments migrated from doc-onevcat (e.g. `023-shelf-mode/jank-investigation.md`, `017-.../batch-2026-07-06-post-v0.10.5.md`, diff --git a/docs-ai/backfill-open-questions.md b/docs-ai/backfill-open-questions.md deleted file mode 100644 index f93f71ac..00000000 --- a/docs-ai/backfill-open-questions.md +++ /dev/null @@ -1,91 +0,0 @@ -# Backfill Open Questions (2026-07-12) - -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: 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)) — **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. → **#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/`); `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/. → **#563** -- **SIGTERM'd long jobs never notify** ([008](008-terminal-notifications/001-action.md)): - 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). → **#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). → **#567** -- Stale `MaxRects-BSSF` doc comment on `arrangeCards()` in `CanvasView.swift` — - [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). → **#570** -- Close-confirmation copy hardcodes "at least 10 seconds" next to an injectable threshold — - [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). → **#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. → **#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. → **#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). → **#574** - -## Historical oddities (recorded, no action expected) - -- PR #13 shows MERGED but its merge commit is not an ancestor of main; main was apparently - reset on 2026-03-20 with no note — [006](006-startup-performance/001-action.md). -- #484 (foreground process-group detection fallback) was reverted the next day by direct - commit `5b219791`; issue #495 (OSC 133;C) is the open successor — plain non-OSC-9;4 - commands still show no running spinner — [030](030-agent-status-detection/002-detection-scheduling.md). -- The docs/ manual (commit `49235800`) and a few early fixes landed as direct commits with - no PR — [038](038-docs-agent-manual/001-action.md), [008](008-terminal-notifications/001-action.md). -- The outline used during backfill misattributed the 2026-05 UI refresh to Alex-ai-future; - GitHub shows #326/#331 by abhi21git — docs follow GitHub — [033](033-ui-refresh-2026-05/001-action.md). -- The herdr "keep 3s hold" decision (2026-06-12/13) had no in-repo record before this - backfill; it is now written down in [023](023-shelf-mode/000-plan.md) and - [030](030-agent-status-detection/000-plan.md) from the maintainer's session notes. -- 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. → **#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). → **#575**