Visitar URL original
fix(host-service): stop the Linux file watcher from taking the host down, and make superset start recover by Kitenite · Pull Request #7659 · ParadevAI/Paradev · GitHub
Skip to content

fix(host-service): stop the Linux file watcher from taking the host down, and make superset start recover - #7659

Merged
Kitenite merged 3 commits into
mainfrom
host-service-watcher-segfault
Sep 19, 2026
Merged

Kitenite merged 3 commits into
mainfrom
host-service-watcher-segfault

Conversation

@Kitenite

@Kitenite Kitenite commented Sep 18, 2026 •

Copy link
Copy Markdown
Member

Summary

A customer's standalone host service (CLI 1.29.0, Linux) died with SIGSEGV inside @parcel/watcher (InotifyBackend::~InotifyBackend <- removeShared <- Backend::handleError), and superset start kept running with no worker, so systemd never restarted it.

Root cause, reproduced on Linux: parcel's inotify backend runs its own thread around poll(). Any signal landing on that thread (SIGCHLD from a git child is enough) makes poll() return EINTR. Parcel treats that as fatal and destroys the backend from inside the backend's own thread, which ends in a deadlocked event loop or a SIGSEGV. Under the same load parcel also corrupts V8 global handles. Parcel 2.6.0 has identical code, so an upgrade does not help.

Changes

  • workspace-fs: FsWatcherManager now talks to a NativeWatchBackend interface. Parcel moves behind it unchanged and is loaded lazily. Linux defaults to a chokidar backend (Node's own fs.watch, events on the event loop, no watcher thread, no native state shared between subscriptions). macOS keeps parcel, whose FSEvents backend has no poll loop. Coalescing, rename reconciliation, throttling, root-deletion recovery and search-index patching are unchanged and shared.
  • host-service: WatchAttachGuard serializes attaches per root and backs off a root whose native attach failed, instead of GitWatcher re-attaching it every 30s. A failed fs:watch stream no longer leaves a dead subscription that blocks re-watching. This is a mitigation, not the fix for the crash.
  • cli: foreground superset start exits 1 when the host exits on its own, and also when it stops answering health.check (6 misses at 10s), after SIGKILLing it. A wedged host stays alive as a process, so watching for exit alone is not enough.

Testing

Real host-service built on Linux from the commit before this branch and from this branch, run for 15 minutes each against a fake cloud with 4 git workspaces, 8 websocket clients on git:watch/fs:watch, a subdirectory created and deleted in a loop, continuous edits and git.getStatus calls:

Build Runs Hung Runs logging Unable to poll: Interrupted system call fs events delivered
before 6 1 (at 186s, main thread in ~InotifyBackend) 3 of the 5 that finished (10-12 times each) 0 to 358k
guard only 1 0 1 (4 times) 180k
this branch 5 0 0 246k-442k

Also: a library-level rig produced a SIGSEGV, V8 IsInUse fatals and deadlocks with parcel, none with parcel not loaded, none with chokidar. Attach cost through the manager on Linux is on par (100k files: 6.1s vs 5.0s, less memory). workspace-fs suite on Linux with CI's bun 1.3.14: 144 pass, 2 skipped (two inotify races parcel loses, skipped only for parcel on Linux). The supervisor was checked end to end with a fake host that segfaults and one that spins forever.

Not covered: the real-service runs are arm64 only (amd64 evidence is from the library rig under emulation); no run on a customer-sized repo on real x64 hardware; the desktop app was typechecked but not built.

Follow-ups

  • The Linux parcel binaries still ship in the CLI bundle, now unused.
  • An upstream parcel fix (retry poll() on EINTR, do not destroy the backend on its own thread) would let macOS and Linux share one backend again.

Summary by CodeRabbit

  • New Features

    • Added host liveness monitoring to detect unexpected exits and unresponsive hosts, with clearer restart guidance.
    • Added cross-platform filesystem watching with improved handling for file creation, updates, deletions, ignored paths, and symlinks.
    • Added watcher retry backoff to prevent repeated failures from overwhelming the system.
  • Bug Fixes

    • Failed filesystem watches now clean up correctly and can be re-established.
    • Improved recovery when watched directories are recreated or temporarily unavailable.
    • Enhanced detection and reporting of host shutdowns and startup failures.

Summary by cubic

Fixes the Linux host-service crash where @parcel/watcher's inotify backend destroyed itself from its own poll() thread after EINTR, deadlocking or SIGSEGVing the process. Linux now watches through chokidar on fs.watch, and foreground superset start exits 1 when the host process exits or stops answering health checks so a supervisor can restart it.

What changed

  • FsWatcherManager now talks to a NativeWatchBackend; @parcel/watcher stays on macOS and is lazy-loaded so Linux never maps its native addon.
  • Watch attaches are serialized per root, and roots whose native attach fails back off exponentially instead of being retried every 30s; failed fs:watch streams are removed so clients can re-watch.
  • superset start SIGKILLs a wedged host (a stuck event loop never runs a SIGTERM handler), clears the manifest, and exits 1 after 6 consecutive missed health checks.

Not covered

  • Real-service verification ran on arm64; amd64 evidence is from an emulated library-level rig.
  • The Linux @parcel/watcher binaries remain in the CLI bundle but are unused.

Written for commit 3e3babb. Summary will update on new commits.

Review in cubic

…exit `superset start` when the host dies

The Linux host died with SIGSEGV in @parcel/watcher's
InotifyBackend::~InotifyBackend after ~30 minutes of
"inotify_add_watch on <worktree>/captures failed: No such file or directory".

That message is only ever a subscribe-time rejection: parcel crawls the tree,
then adds one inotify watch per directory, and a subdirectory deleted in
between fails the whole subscribe. Parcel 2.5.6 does not remove the watches it
had already added for that attempt, and every subscription in the process
shares one inotify backend. GitWatcher's 30s rescan re-attached the workspace
unconditionally, so a churning subdirectory produced a failed native subscribe
every 30 seconds until the shared backend faulted. Our watcher error callback
never unsubscribes, so that part of the hypothesis did not apply.

- WatchAttachGuard wraps the FsWatcherManager handed to the fs services:
  attaches for one root run one at a time, and a root whose native attach
  failed is refused without touching the native layer until an exponential
  backoff (30s doubling to 30min) elapses. Paths the manager refuses before
  reaching parcel (missing root) do not back off.
- GitWatcher skips the attach (git rev-parse + fs.watch + subscribe) for a
  root that is backing off.
- EventBus drops a failed fs:watch subscription so the client can re-watch
  instead of being stuck behind a dead entry.
- `superset start` (foreground) now exits 1 when the host process exits on
  its own, clearing its manifest. The parent is a one-shot launcher with no
  respawn state (fresh port, secret, manifest per spawn), so exiting and
  letting systemd restart it fits better than an in-process respawn loop.
…face; Linux watches through chokidar

Reproducing the host-service SIGSEGV showed the crash is inside
@parcel/watcher's inotify backend, not in how we retried attaches:

- a signal (SIGCHLD from any `git` child) landing on parcel's thread makes
  its poll() fail with EINTR; parcel treats that as fatal and destroys the
  backend from inside the backend's own thread. Reproduced on Linux as the
  customer's exact stack (~InotifyBackend <- removeShared <- handleError),
  ending in a deadlocked event loop or SIGSEGV.
- under the same load parcel also corrupts V8 global handles (fatal
  `Check failed: node->IsInUse()`), even with zero failed attaches.
- parcel 2.6.0 has identical code, and the process survives the same load
  with parcel not loaded. The previous commit's WatchAttachGuard does not
  prevent either failure.

FsWatcherManager now talks to a NativeWatchBackend (subscribe a root with an
ignore list, deliver events and errors). parcel moves behind it unchanged,
including its Linux inotify probe and the per-re-attach ignore that forces a
fresh native backend, and is loaded lazily so Linux never maps the addon.
Linux defaults to a chokidar backend: Node's own fs.watch, events delivered
by libuv on the event loop, no watcher thread and no native state shared
between subscriptions. macOS keeps parcel (FSEvents has no poll loop).

Coalescing, rename reconciliation, throttling, root-deletion recovery and
search-index patching are unchanged and shared by both backends.

Also corrects the WatchAttachGuard doc comment, which named a cause the
repro disproved.
The watcher failure reproduced on Linux also shows up as a deadlocked event
loop: the host process stays alive, so waiting on its exit never fires and a
systemd unit keeps reporting active (running) over a service that answers
nothing.

The foreground command now also polls health.check every 10s; after 6
consecutive misses it SIGKILLs the host (a wedged loop never runs a SIGTERM
handler), clears the manifest and exits 1 so the supervisor restarts it.

Verified end to end with a fake host binary: a SIGSEGV is reported as
"killed by SIGSEGV", and a host spinning in `for(;;)` is detected, killed and
confirmed gone.
@coderabbitai

coderabbitai Bot commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 03cc6fe6-f389-42c2-aab3-284be25e703d

📥 Commits

Reviewing files that changed from the base of the PR and between 2de035c and 3e3babb.

⛔ Files ignored due to path filters (1)
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing (23)
  • packages/cli/src/commands/start/command.ts
  • packages/cli/src/lib/host/liveness.test.ts
  • packages/cli/src/lib/host/liveness.ts
  • packages/cli/src/lib/host/spawn.test.ts
  • packages/cli/src/lib/host/spawn.ts
  • packages/host-service/src/events/event-bus.test.ts
  • packages/host-service/src/events/event-bus.ts
  • packages/host-service/src/events/git-watcher-failure.test.ts
  • packages/host-service/src/events/git-watcher.ts
  • packages/host-service/src/runtime/filesystem/filesystem.ts
  • packages/host-service/src/runtime/filesystem/watch-attach-guard.test.ts
  • packages/host-service/src/runtime/filesystem/watch-attach-guard.ts
  • packages/host-service/src/trpc/router/git/utils/git-status-store/git-status-store.adversarial3.test.ts
  • packages/workspace-fs/package.json
  • packages/workspace-fs/src/watch-backend/chokidar-backend.ts
  • packages/workspace-fs/src/watch-backend/ignore-matcher.ts
  • packages/workspace-fs/src/watch-backend/index.ts
  • packages/workspace-fs/src/watch-backend/parcel-backend.ts
  • packages/workspace-fs/src/watch-backend/types.ts
  • packages/workspace-fs/src/watch-backend/watch-backend.test.ts
  • packages/workspace-fs/src/watch-event-coalescing.test.ts
  • packages/workspace-fs/src/watch-event-coalescing.ts
  • packages/workspace-fs/src/watch.ts
 ____________________________________________________________________________________________________
< Don't live with broken windows. Fix bad designs, wrong decisions, and poor code when you see them. >
 ----------------------------------------------------------------------------------------------------
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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 cfd8e29 into main Sep 19, 2026
16 of 18 checks passed
@github-actions

github-actions Bot commented Sep 19, 2026 •

Copy link
Copy Markdown
Contributor

🚀 Preview Deployment

🔗 Preview Links

Service Status Link
Neon Database (Neon) ❌ Failed to create
Vercel API (Vercel) ❌ Failed to deploy
Vercel Web (Vercel) ❌ Failed to deploy
Vercel Marketing (Vercel) ❌ Failed to deploy
Vercel Admin (Vercel) ❌ Failed to deploy
Vercel Docs (Vercel) ❌ Failed to deploy

Preview updates automatically with new commits

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

This branch had an error being deployed

1 failed deployment
preview — 3e3babb0 Deployed Sep 18, 2026 by Kitenite via Deploy Database (Neon) #10078
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.

1 participant