Skip to content

fix(host-service): pin git's diff prefixes so the Changes pane can parse every patch - #7597

Merged
Kitenite merged 1 commit into
ParadevAI:mainfrom
aponcedeleonch:fix/diff-patch-default-prefixes
Sep 19, 2026
Merged

Kitenite merged 1 commit into
ParadevAI:mainfrom
aponcedeleonch:fix/diff-patch-default-prefixes

Conversation

@aponcedeleonch

@aponcedeleonch aponcedeleonch commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

What & why

Fixes #7596.

With diff.mnemonicPrefix = true (or diff.noprefix = true, or explicit diff.srcPrefix/diff.dstPrefix) in your gitconfig, every file in the Changes pane's Staged and Unstaged sections renders Unable to load diff. Against base and Commits keep working, which is what made it look category-specific.

buildDiffPatch shells out to git diff without pinning any of the prefix config, so git honours whatever the user carries. The renderer parses that patch text, and @pierre/diffs recognises a section header only in git's default shape:

// @pierre/diffs 1.3.6, dist/constants.js:18
const ALTERNATE_FILE_NAMES_GIT = /^diff --git (?:"a\/(.+?)"|a\/(.+?)) (?:"b\/(.+?)"|b\/(.+?))$/;

A header it rejects yields a section with an empty file name, so byPath.get(member.file.path) in useDiffCodeViewItems misses and the file falls through to the placeholder. Comparing two commits is the one case mnemonic prefixes coincide with a/+b/ — hence Against base and Commits surviving.

The fix pins the output-affecting config at the invocation (git -c ... diff) rather than teaching the parser everyone's settings. It goes in runDiff, the single funnel both the category diff and the untracked --no-index calls pass through, so no call site can forget it. -c rather than --default-prefix, which says the same thing in one flag but only from git 2.45 and exits non-zero as an unknown option before that; unknown config keys are ignored by every git version, so this has no version floor.

Also fixed: non-ASCII filenames, which need no unusual config at all. core.quotePath defaults to true, so git emits diff --git "a/caf\303\251.txt" "b/caf\303\251.txt". That regex matches, but captures the escaped literal, while the sidebar's status walk uses -z and reports the raw café.txt. The lookup misses and you get the same placeholder with no console error. core.quotePath=false closes it on the same line of config.

Both are one root cause — git output the parser can't join back to a path — so they're fixed together.

How I tested it

Every header form git can emit, joined to the renderer's own lookup. Ran the real buildDiffPatch against temp repos, fed the result to the real parsePatchFiles, and did the byPath.get(statusPath) lookup useDiffCodeViewItems does:

Before:

config header emitted byPath lookup
default diff --git a/tracked.txt b/tracked.txt HIT, renders
diff.mnemonicPrefix=true diff --git i/tracked.txt w/tracked.txt MISS, placeholder
diff.noprefix=true diff --git tracked.txt tracked.txt MISS, placeholder
default, café.txt diff --git "a/caf\303\251.txt" "b/caf\303\251.txt" MISS, placeholder

After:

config header emitted byPath lookup
default diff --git a/tracked.txt b/tracked.txt HIT, renders
diff.mnemonicPrefix=true diff --git a/tracked.txt b/tracked.txt HIT, renders
diff.noprefix=true diff --git a/tracked.txt b/tracked.txt HIT, renders
default, café.txt diff --git a/café.txt b/café.txt HIT, renders

Regression tests added to diff-patch.test.ts, one per knob plus the non-ASCII case, covering unstaged, staged and the untracked --no-index path. All four fail on main and pass with the change:

(fail) diff.mnemonicPrefix does not reach the unstaged or staged header
   Expected to contain: "diff --git a/tracked.txt b/tracked.txt"
   Received: "diff --git i/tracked.txt w/tracked.txt ..."
(fail) diff.noprefix does not strip the header's prefixes
(fail) diff.srcPrefix and diff.dstPrefix do not replace the header's prefixes
(fail) a non-ASCII path is reported raw, as the status walk reports it

Ran: bun run lint clean, bun run lint:fix no changes, diff-patch.test.ts 8/8 pass, and the whole @superset/host-service suite at 1992 pass / 5 fail.

All five failures are pre-existing and unrelated; I checked each rather than assuming:

  • 3 filesystem-permission tests (removeDirectoryTree x2, workspaceCleanup.destroy) fail with ENOTEMPTY on a read-only directory, i.e. local rm semantics.
  • 2 adversarial getGitStatusPartial tests. I re-ran that directory with my change stashed: it fails the same ones on baseline. Nothing imports diff-patch.ts from the status path either.
  • bun run typecheck reports 22 errors, all in packages/auth / packages/trpc (better-auth InferAPI typings), with an identical count before and after this change. My install ended up with two copies of @better-auth/core@1.6.22 under different hashes, which is what makes the plugin types nominally incompatible. Local install artifact.
  • @superset/workspace-fs failed one test in the full bun run test run and passed on re-run. Flake; this diff doesn't touch it.

No screenshot, and I want to be upfront about why. I brought up the full local stack and drove the dev app over CDP, but a project registered through projects.openFromPath doesn't surface in the v2 sidebar or workspace list in a freshly seeded dev org, and "Open from folder" goes through a native dialog CDP can't drive, so I couldn't reach the Changes pane to capture before/after. That's dev-environment plumbing rather than anything about this fix, and I'd rather say so than substitute a screenshot of a synthetic harness for one of the real pane. The tables above test the same join the pane depends on, with the real patch builder and the real parser.

(Unrelated, happy to file separately if useful: ./.superset/setup.local.sh fails at "Seed dev account" on a fresh install with Cannot find package 'babel-plugin-macros'. It's an optional peer of @lingui/core, so nothing installs it, but seed-dev.ts pulls in the Lingui macro at runtime. bun add -d babel-plugin-macros unblocks it.)

Checklist

  • PR title follows conventional commits (type(scope): subject)
  • bun run lint passes; bun run typecheck has the same 22 pre-existing failures with and without this change (see above)
  • "Allow edits from maintainers" — branch PR, not a fork

Summary by cubic

Fixes the Changes pane showing "Unable to load diff" for staged and unstaged files whenever a user's gitconfig changes git's diff header format, or when a file name contains non-ASCII characters (#7596).

Bug Fixes

  • Pins diff.mnemonicPrefix, diff.noprefix, and diff.srcPrefix/diff.dstPrefix at the runDiff invocation so every patch uses the diff --git a/f b/f header shape @pierre/diffs recognizes.
  • Sets core.quotePath=false so non-ASCII paths are emitted raw, matching the -z status walk's report.
  • Uses -c config flags rather than --default-prefix, which exits non-zero on git versions before 2.45.
  • Adds regression tests for each knob and the non-ASCII case across unstaged, staged, and --no-index paths.

Written for commit 21cad3a. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • Bug Fixes
    • Improved diff display reliability when custom Git prefix settings are configured.
    • Non-ASCII file paths now appear correctly in diff headers without unwanted quoting.
    • Staged and unstaged diffs consistently use the expected file header format.

…rse every patch

The Changes pane parses patch text, and @pierre/diffs recognises a section
header only in git's default `diff --git a/f b/f` form. buildDiffPatch never
pinned the config that decides that form, so a user's own gitconfig reached
the header: diff.mnemonicPrefix names the prefixes after the sides compared
(i/+w/ unstaged, c/+i/ staged, 1/+2/ for --no-index), diff.noprefix drops
them, diff.srcPrefix/dstPrefix replace them. Any of those left every Staged
and Unstaged file on the "Unable to load diff" placeholder, while Against
base and Commits kept working because comparing two commits is the one case
mnemonic prefixes coincide with a/+b/.

core.quotePath=false closes the same defect at git's own default: quoting
escapes a non-ASCII path into "a/caf\303\251.txt", which the regex matches
but captures verbatim, so it never equals the raw path the -z status walk
reports and the renderer joins on.

Pinning at the invocation rather than teaching the parser everyone's
settings, and in runDiff, the single funnel both the category diff and the
untracked --no-index calls pass through. -c rather than --default-prefix,
which needs git 2.45 and fails as an unknown option before that; unknown
config keys are ignored by every version, so this has no floor.

Fixes ParadevAI#7596
@coderabbitai

coderabbitai Bot commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: a95d31ac-b9fb-494b-aa1c-6567b4ae93dc

📥 Commits

Reviewing files that changed from the base of the PR and between 3d1634b and 21cad3a.

📒 Files selected for processing (2)
  • packages/host-service/src/trpc/router/git/utils/diff-patch.test.ts
  • packages/host-service/src/trpc/router/git/utils/diff-patch.ts

Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.


📝 Walkthrough

Walkthrough

buildDiffPatch now forces Git to emit default a/ and b/ headers with raw paths. Tests cover staged and unstaged diffs, Git prefix settings, and non-ASCII filenames.

Changes

Git diff header normalization

Layer / File(s) Summary
Pin Git diff format and validate headers
packages/host-service/src/trpc/router/git/utils/diff-patch.ts, packages/host-service/src/trpc/router/git/utils/diff-patch.test.ts
runDiff applies fixed Git prefix and quoting settings to every diff invocation. Tests verify default headers for staged and unstaged patches and raw non-ASCII paths.

Priority: ➖ Normal

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix · Severity of issue fixed: Medium

Suggested reviewers: saddlepaddle

Merge Risk: ⚪ Minimal · up to 21cad

The change consistently normalizes Git patch headers across diff types, with no identified merge-blocking risk.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title uses conventional commit format and clearly identifies the main fix: pinning Git diff prefixes so the Changes pane can parse patches.
Description check ✅ Passed The description is complete. It explains the problem, root cause, implementation, testing, known unrelated failures, and checklist status.
Linked Issues check ✅ Passed The change satisfies the coding requirements in issue #7596. diff-patch.ts adds -c overrides for diff.mnemonicPrefix=false, diff.noprefix=false, diff.srcPrefix=a/, diff.dstPrefix=b/, and `…
Out of Scope Changes check ✅ Passed The pull request changes only the diff generation configuration and adds regression tests for issue #7596. The tests directly verify the required patch headers and path handling. No unrelated product …
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 2 files.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Kitenite
Kitenite merged commit 0f5bcab into ParadevAI:main Sep 19, 2026
13 checks passed
Kitenite added a commit that referenced this pull request Sep 23, 2026
* docs: update weekly product documentation for September 23

Source of truth: live Notion SOP https://www.notion.so/3b3b9d5bf616810dbacaca7dd2305259
Window: GitHub merged:>=2026-09-16, through this run on 2026-09-23. gh returned 103 PRs (limit 1000, avoiding the SOP example’s 50-PR truncation).
Workspace baseline: 2158895. Prior session stopped at a usage limit; the checkout was clean.

## Changes

- Pages, CLI, and MCP: public sharing, workspace menus, origin labels, pagination, first-publish opening, version previews, mobile comments, and link handling: #7570, #7658, #7726, #7472, #7532, #7718. Files: pages.mdx; cli/cli-reference.mdx; mcp-server.mdx.
- iPhone launch, requirements, setup, host states, and Pro checklist: #7703, #7686, #7697, #7661, #7642, #7494. Files: install.mdx; faq.mdx; overview.mdx; remote-access.mdx.
- Editor save conflicts and Markdown link actions: #7711, #7621. Files: editor.mdx.
- Terminal locations, copying, and ended-session recovery: #7712, #7709, #7618. Files: terminal-integration.mdx.
- Model catalog, embedded sign-in, and leaderboard history: #7741, #7740, #7651. Files: agent-integration.mdx; usage.mdx; cli/cli-reference.mdx.
- Repository picker, cloud working branches and attachments, mobile sessions, sidebar naming and ordering: #7694, #7620, #7622, #7633, #7604, #7650, #7575. Files: first-workspace.mdx; workspaces.mdx.
- Slack plugin tools and gated thread follow-ups, queuing, mute and stop controls: #7583, #7585, #7586, #7588, #7592, #7594. Files: use-with-slack.mdx.
- New CLI transcript, environment, and page deletion commands; connected-service plugins and MCP CLI migration: #7602, #7317. Files: cli/cli-reference.mdx; skills.mdx.
- Startup recovery and pre-account workspace migration: #7764, #7649. Files: troubleshooting.mdx.

Current source wins over PR descriptions: page ordering is newest-created first, search includes description, default CLI output remains a bare array, and the leaderboard automatically backfills since launch (there is no history-range picker). Slack thread commands and Mobile settings retain their availability qualifications. No assumption that every merged fix is already in the latest download.

## Deliberately skipped

- [#7765](#7765) fix(host-service): report GitHub being unreachable as unavailable, not a 500: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7756](#7756) fix(pages): restore page.list's bare-array contract for released clients: Restores compatibility for released clients; checked the current listPaginated implementation when documenting #7726.
- [#7749](#7749) fix(build): build every dist-types a filtered mobile typecheck needs: Internal build, tests, migration, developer tooling, or recovery plumbing; no new user-facing instructions.
- [#7748](#7748) feat(mobile): refresh the App Store listing and load review creds from .env: Marketing/store copy, layout, or launch assets; no separate product-doc change. The released iPhone workflow is covered by #7686 and #7703.
- [#7747](#7747) feat(mobile): ask for a rating on returning Home after real use: App Store rating timing needs no setup or reference instructions.
- [#7746](#7746) feat(mobile): start Sentry natively so launch crashes carry native context: Internal build, tests, migration, developer tooling, or recovery plumbing; no new user-facing instructions.
- [#7744](#7744) fix(email): make the welcome email unsubscribable via a Resend automation: Welcome email unsubscribe delivery is not a product workflow needing docs.
- [#7734](#7734) fix(desktop): restore locale provider test mocks: Internal build, tests, migration, developer tooling, or recovery plumbing; no new user-facing instructions.
- [#7733](#7733) fix(marketing): hide leaderboard vertical guide lines: Marketing/store copy, layout, or launch assets; no separate product-doc change. The released iPhone workflow is covered by #7686 and #7703.
- [#7732](#7732) chore(desktop): bump version to 1.30.2: Version bump only.
- [#7723](#7723) fix(desktop): preserve sidebar order and missing group members: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7717](#7717) fix(desktop): keep terminal links within URL boundaries: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7715](#7715) fix(ci): unblock CLI publishing and retry macOS installs: Internal build, tests, migration, developer tooling, or recovery plumbing; no new user-facing instructions.
- [#7714](#7714) fix(desktop): prevent tab close clicks from starting a drag: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7710](#7710) feat(marketing): add Vladimir mobile testimonial and rank quotes: Marketing/store copy, layout, or launch assets; no separate product-doc change. The released iPhone workflow is covered by #7686 and #7703.
- [#7704](#7704) feat(marketing): add App Store icon to footer: Marketing/store copy, layout, or launch assets; no separate product-doc change. The released iPhone workflow is covered by #7686 and #7703.
- [#7701](#7701) chore(desktop): bump version to 1.30.1: Version bump only.
- [#7700](#7700) fix(marketing): refine hero copy and demo details: Marketing/store copy, layout, or launch assets; no separate product-doc change. The released iPhone workflow is covered by #7686 and #7703.
- [#7698](#7698) feat(marketing): replace mobile feature cards with customer testimonials: Marketing/store copy, layout, or launch assets; no separate product-doc change. The released iPhone workflow is covered by #7686 and #7703.
- [#7696](#7696) fix: write managed configs and workspace files through symlinks: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7695](#7695) fix(marketing): isolate and scale the mobile phone demo: Marketing/store copy, layout, or launch assets; no separate product-doc change. The released iPhone workflow is covered by #7686 and #7703.
- [#7691](#7691) fix(terminal): preserve agent paste mode across host restarts: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7690](#7690) feat(marketing): showcase mobile workflows and simplify the homepage: Marketing/store copy, layout, or launch assets; no separate product-doc change. The released iPhone workflow is covered by #7686 and #7703.
- [#7689](#7689) chore(mobile): bump version to 1.1.1 for TestFlight: Version bump only.
- [#7688](#7688) fix(desktop): resolve dev Dock names across workspace path aliases: Internal build, tests, migration, developer tooling, or recovery plumbing; no new user-facing instructions.
- [#7685](#7685) docs(marketing): add September 20 weekly changelog: Marketing/store copy, layout, or launch assets; no separate product-doc change. The released iPhone workflow is covered by #7686 and #7703.
- [#7684](#7684) docs(skills): share mobile demo recording and film tooling: Internal build, tests, migration, developer tooling, or recovery plumbing; no new user-facing instructions.
- [#7683](#7683) fix(ui): truncate the page title instead of running it under the header actions: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7680](#7680) fix(host-service): treat a socket torn down mid-request as the cloud being unreachable: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7678](#7678) fix(desktop): keep markdown link and image attributes as strings so a paste can't stop the editor saving: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7676](#7676) docs(db): migration safety checklist and deploy workflow pitfalls from the 17 September outage: Internal build, tests, migration, developer tooling, or recovery plumbing; no new user-facing instructions.
- [#7675](#7675) fix(integrations): backfill existing connections into the table #7317 reads: Internal build, tests, migration, developer tooling, or recovery plumbing; no new user-facing instructions.
- [#7672](#7672) fix(ci): a failed production migration can no longer pass as a success: Internal build, tests, migration, developer tooling, or recovery plumbing; no new user-facing instructions.
- [#7671](#7671) fix(db,ci): make migration 0119 online-safe and bound production migrations: Internal build, tests, migration, developer tooling, or recovery plumbing; no new user-facing instructions.
- [#7670](#7670) fix(desktop): send text to running terminals as a bracketed paste, not raw keystrokes: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7669](#7669) feat(skills): audit page usage in the 10x skill: Existing skills page already describes the 10x audit; page-usage audit is an internal skill refinement.
- [#7668](#7668) fix(mobile): scroll-to-bottom button drives Claude Code's fullscreen view: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7666](#7666) fix(host-service): treat a gh that cannot start as no token: Internal build, tests, migration, developer tooling, or recovery plumbing; no new user-facing instructions.
- [#7665](#7665) chore(desktop): bump version to 1.30.0: Version bump only.
- [#7664](#7664) refactor(marketing): share the store badges with the mobile launch post: Marketing/store copy, layout, or launch assets; no separate product-doc change. The released iPhone workflow is covered by #7686 and #7703.
- [#7662](#7662) chore(mobile): simulator verification skill, stand-in host, and host-state flows: Internal build, tests, migration, developer tooling, or recovery plumbing; no new user-facing instructions.
- [#7659](#7659) fix(host-service): stop the Linux file watcher from taking the host down, and make superset start recover: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7655](#7655) feat(marketing): add /mobile landing page behind the mobile-launch flag: Marketing/store copy, layout, or launch assets; no separate product-doc change. The released iPhone workflow is covered by #7686 and #7703.
- [#7647](#7647) fix(agent-setup): restore Codex working status: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7644](#7644) fix(desktop): refresh commits after external changes: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7643](#7643) fix(mobile): a long press lifts the whole session tab, not its text: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7641](#7641) fix(desktop): harden renderer error boundaries and recovery: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7639](#7639) fix(desktop): keep the editor selection valid when external content replaces the document: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7638](#7638) fix(desktop): stop the file tree throwing when a lookup walks through a file: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7636](#7636) fix(host-service): classify an index its storage cannot deliver as environmental: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7615](#7615) fix(cli-framework,i18n): `bun run dev` runs the CLI instead of dying: Internal build, tests, migration, developer tooling, or recovery plumbing; no new user-facing instructions.
- [#7613](#7613) fix(host-service): a terminal in a cloud workspace knows it is in one: Internal build, tests, migration, developer tooling, or recovery plumbing; no new user-facing instructions.
- [#7611](#7611) feat(marketing): Superset Mobile launch post (hidden until launch): Marketing/store copy, layout, or launch assets; no separate product-doc change. The released iPhone workflow is covered by #7686 and #7703.
- [#7608](#7608) fix(sandbox): the release probe checks the display from inside the box: Internal build, tests, migration, developer tooling, or recovery plumbing; no new user-facing instructions.
- [#7606](#7606) fix(relay): tolerate slow connections with coordinated deadlines: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7605](#7605) fix(desktop): drop duplicate create-workspace submits while one is in flight: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7603](#7603) fix(desktop): preserve translation context for route errors: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7601](#7601) feat(mobile): let the workspace list scroll under a transparent header: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7598](#7598) fix(desktop): keep viewport emulation on a crashed browser pane from crashing the app: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7597](#7597) fix(host-service): pin git's diff prefixes so the Changes pane can parse every patch: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7593](#7593) fix(api): post the Slack agent's reply after its run budget is spent: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7587](#7587) fix(desktop): keep new sidebar group orders on the integer lane: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7582](#7582) fix(api): bound every Slack agent call by the run budget: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7581](#7581) feat(api): Slack agent foundation — shared handler, execution guard, thread window, model and output fixes: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.
- [#7573](#7573) feat(pages): publish without a workspace: Standalone publishing is already documented in pages.mdx; preserved that guidance and included its contract in the new CLI/MCP reference.
- [#7255](#7255) fix(host-service): preserve consumed Claude prompts in handoffs: Reliability or visual fix restores expected behavior; no new workflow or necessary workaround to document.

## Validation

- bun install: passed; no tracked dependency changes.
- bun run lint:fix: passed, no code fixes.
- bun run lint: passed.
- bun run --cwd apps/docs typecheck: passed.
- Vale on all 16 changed docs: zero errors and warnings. Small pre-existing prose violations in touched pages were corrected to satisfy the SOP.
- git diff --check: passed.

Only apps/docs/content/docs/ and the required append-only root TODO log are included. No push or PR.

37 PRs drove changes; 66 were deliberately skipped as separate documentation work.

* docs: correct stale claims and consolidate weekly updates

Replace outdated remote-port and privacy claims, correct the 90-day leaderboard backfill cap and link settings location, and describe credential use and comment-watch registration accurately. Consolidate iPhone requirements and troubleshooting, trim repeated Pages prose, and keep launch effort details in the CLI reference.

Remove the #7764 startup entry because it does not identify a fixed release and its upgrade instructions are too vague. This supersedes that item in the original PR audit. Validate with docs typecheck, lint:fix, lint, Vale (zero errors or warnings), and git diff --check.

* docs: trim repeated explanations across user guides

* docs: clarify iPhone cloud workspace requirements
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Changes pane can't render Staged/Unstaged diffs when git emits non-default diff prefixes (diff.mnemonicPrefix, diff.noprefix)

2 participants