fix: harden and de-slop the merged contribution batch

Follow-ups promised on merge, plus review findings on the batch itself:

- chat: task-tool output now respects the 512KiB render cap; quick-open
  icon is visible at rest on coarse pointers and reachable by keyboard
  (row keydown no longer swallows inner-button Enter/Space); composer
  inline-code decoration drops the metric-shifting padding; a btw fork
  send carries only the boundary instruction, never the promotion notice
- sync: cascade revert/unrevert aborts busy descendants, busy state is
  read from every child store at the moment of use; rule 9 documents
  redo clearing all descendant revert markers
- electron: renderer recovery keeps memory-eviction (a valid
  render-process-gone reason) and both windows share one
  attachRendererRecovery helper
- vscode: process registry is a thin re-export of the web module
  (provider-env-aliases precedent) with ordered register/unregister
  writes and an awaited close
- server/cli: managed-process registry takes injectable deps (fixes the
  unreaped-orphans ReferenceError), corrupt settings errors name the
  file, getWorktrees test restores console.warn
- tests: module-mock harnesses removed (AgentsSidebar, SettingsView
  mobile focus — behaviors stay live but uncovered, accepted trade),
  QuestionMarkdown asserts rendered DOM
- i18n: German gains the debug-panel request keys, Japanese/German drop
  removed worktree keys, Ukrainian unit spacing fixed
- changelog: Copilot AI Credits entries (main + VS Code)
This commit is contained in:
Bohdan Triapitsyn
2026-08-28 02:08:09 +03:00
parent a79aff45c1
commit b8465ae133
33 changed files with 673 additions and 1205 deletions
+11 -2
View File
@@ -1779,8 +1779,6 @@ export const dict = {
'session.newWorktree.noMatchingBranches': 'Keine übereinstimmenden Branches',
'session.newWorktree.localBranches': 'Lokale Branches',
'session.newWorktree.remoteBranches': 'Remote-Branches',
'session.newWorktree.otherLocalBranches': 'Andere lokale Branches',
'session.newWorktree.otherRemoteBranches': 'Andere Remote-Branches',
'session.newWorktree.branchName': 'Branch-Name',
'session.newWorktree.branchNamePlaceholder': 'feature/mein-geil-feature',
'session.newWorktree.actions.change': 'Ändern',
@@ -2811,6 +2809,7 @@ export const dict = {
'memoryDebugPanel.title': 'Debug Panel',
'memoryDebugPanel.tabs.memory': 'Speicher',
'memoryDebugPanel.tabs.streaming': 'Streaming',
'memoryDebugPanel.tabs.requests': 'Anfragen',
'memoryDebugPanel.section.sessionsInMemory': 'Sitzungen im Speicher',
'memoryDebugPanel.section.uiStreamingMetrics': 'UI-Streaming-Metriken',
'memoryDebugPanel.section.vscodeBridgeMetrics': 'VS Code Bridge Metriken',
@@ -2848,6 +2847,16 @@ export const dict = {
'memoryDebugPanel.streaming.copy.copied': 'Streaming-Debug-JSON kopiert',
'memoryDebugPanel.streaming.copy.failed': 'Fehler beim Kopieren der JSON-Datei',
'memoryDebugPanel.streaming.copy.hint': 'Kopieren exportiert sowohl UI- als auch VS Code-Streaming-Metriken als JSON',
'memoryDebugPanel.requests.inFlight': 'Laufend',
'memoryDebugPanel.requests.peak': 'Spitze',
'memoryDebugPanel.requests.duration': 'Dauer',
'memoryDebugPanel.requests.totalRequests': 'Gesamtanfragen',
'memoryDebugPanel.requests.tracking': 'Aufzeichnung',
'memoryDebugPanel.requests.now': 'jetzt',
'memoryDebugPanel.requests.noSamples': 'Noch keine Anfragen aufgezeichnet. Lassen Sie dieses Panel geöffnet, um Fetch-Aktivität zu erfassen.',
'memoryDebugPanel.requests.chartLabel': 'Laufende Fetch-Anfragen im Zeitverlauf, Spitze {peak}',
'memoryDebugPanel.requests.windowHint': 'letzte {seconds}s',
'memoryDebugPanel.requests.percentileChartLabel': 'Perzentile des Alters laufender Anfragen (p50, p90, p99, max) im Zeitverlauf',
'memoryDebugPanel.common.idle': 'inaktiv',
'memoryDebugPanel.common.live': 'live',
'memoryDebugPanel.common.notAvailable': 'n/a',
-2
View File
@@ -1954,8 +1954,6 @@ export const dict: Record<I18nKey, string> = {
'session.newWorktree.noMatchingBranches': '一致するブランチがありません',
'session.newWorktree.localBranches': 'ローカルブランチ',
'session.newWorktree.remoteBranches': 'リモートブランチ',
'session.newWorktree.otherLocalBranches': 'その他のローカルブランチ',
'session.newWorktree.otherRemoteBranches': 'その他のリモートブランチ',
'session.newWorktree.branchName': 'ブランチ名',
'session.newWorktree.branchNamePlaceholder': 'feature/my-awesome-feature',
'session.newWorktree.actions.change': '変更',
+1 -1
View File
@@ -3022,7 +3022,7 @@ export const dict: Record<I18nKey, string> = {
"memoryDebugPanel.requests.now": "зараз",
"memoryDebugPanel.requests.noSamples": "Запитів ще немає. Тримайте цю панель відкритою, щоб фіксувати активність fetch.",
"memoryDebugPanel.requests.chartLabel": "Запити fetch у виконанні з часом, пік {peak}",
"memoryDebugPanel.requests.windowHint": "останні {seconds}s",
"memoryDebugPanel.requests.windowHint": "останні {seconds} с",
"memoryDebugPanel.requests.percentileChartLabel": "Перцентилі віку запитів у виконанні (p50, p90, p99, max) з часом",
"memoryDebugPanel.common.idle": "очікування",
"memoryDebugPanel.common.live": "live",