Skip to content

chore: retire phantom capability surfaces and dead settings screens - #3110

Open
benjaminshafii wants to merge 1 commit into
devfrom
chore/retire-phantom-capability-surfaces
Open

chore: retire phantom capability surfaces and dead settings screens#3110
benjaminshafii wants to merge 1 commit into
devfrom
chore/retire-phantom-capability-surfaces

Conversation

@benjaminshafii

Copy link
Copy Markdown
Member

Problem

The app advertises capabilities and screens that do not exist. During an enterprise walkthrough this cost real credibility — we were asked about a feature the agent still claims to have, and pointed at settings screens that silently redirect.

Verified phantoms:

  1. help.capabilities advertises "Automations — Schedule recurring tasks and background agents" (control-provider.tsx:814). The scheduler was deleted in 53e0e1d11; there is no scheduler, cron, job table, job route, or automations UI anywhere in the tree. We were advertising it to the agent.
  2. skills-view.tsx (508 lines: view/edit/create/import/reveal) is imported by nothing — superseded by the unified inventory in 820d00ad3.
  3. cloud-marketplaces-view.tsx (989 lines) is referenced only by its own test and one stale doc line.
  4. SettingsTab declares skills and cloud-marketplaces with labels, icons and descriptions, but neither is in any nav array and neither has a render case — the type was lying.
  5. background-agents-screen.tsx promised scheduling with "Coming soon" while containing none, reachable by URL only.

Change

Delete the dead code, remove the phantom capability, and make the copy honest. -2026 / +5 lines.

Orphaned store methods removed after per-symbol proof of zero callers: saveSkill, importLocalSkill, installSkillCreator, revealSkillsFolder (+ the skill-creator.md template only that path consumed, + their i18n keys across all 10 locales). readSkill and uninstallSkill were keptmcp-view.tsx uses them.

Deliberately kept: the legacy /settings/skills and /settings/cloud-marketplaces redirects (real deep-link back-compat), and the background-agents page itself (it lists real workers and mints connect tokens) — only its misleading "Coming soon" framing was removed.

Also corrected two docs click-paths that pointed at removed sub-tabs (get-started.mdx, team-templates.mdx), and the agent-facing skills path in openwork-capabilities-knowledge.ts.

Verification

pnpm typecheck                            clean
pnpm --filter @openwork/app test          420 pass, 0 fail
pnpm --filter @openwork-ee/den-web build   succeeded

Final rg sweep for every deleted symbol/file returns empty. No behavior changes beyond removing false advertising.

@vercel

vercel Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
openwork-app Ready Ready Preview, Comment Jul 25, 2026 1:01pm
openwork-den Ready Ready Preview, Comment Jul 25, 2026 1:01pm
openwork-den-worker-proxy Ready Ready Preview, Comment Jul 25, 2026 1:01pm
openwork-diagnostics Ready Ready Preview, Comment Jul 25, 2026 1:01pm
openwork-landing Ready Ready Preview, Comment, Open in v0 Jul 25, 2026 1:01pm

@mintlify

mintlify Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
differentai 🟢 Ready View Preview Jul 25, 2026, 1:01 PM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@mintlify

mintlify Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
differentai 🟡 Building Jul 25, 2026, 1:01 PM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@benjaminshafii

Copy link
Copy Markdown
Member Author

Validation: real app, isolated Linux sandbox, matched A/B

All nine branches of this series were merged into one integration branch (f91884c3) and driven as a real user through CDP in a fresh Daytona sandbox. Baseline dev was run in a separate, identically-provisioned fresh sandbox with the same model (GPT-4o mini) so the comparison is apples-to-apples.

core-flow step clean dev (2fda6070) this series (f91884c3)
App boots to a usable session surface ✅ 105ms ✅ 94ms
User creates a fresh task in the workspace ✅ 674ms ✅ 662ms
User writes a message and runs it (real inference) ✅ 2768ms ✅ 111405ms
User closes and reopens; the session survives ❌ not persisted ❌ not persisted

Step 4 fails identically on clean dev (Session ses_… was not listed after reopen (not persisted)), so it is pre-existing on dev and not introduced here. Against the canonical core flow this series is inert, which is exactly the claim for a cleanup/wiring series.

Validated frames: core-flow-01-booted.png, core-flow-02-session-created.png, core-flow-03-task-response.png — including the assertion "Visible text does not include 'Something went wrong'".

A real regression this caught, in this series

Booting the real app initially failed with:

TypeError: Unknown file extension ".ts" for packages/types/src/skill-markdown.ts
→ "OpenWork server did not finish starting. Please restart OpenWork."

@openwork/types is a source-only package — every exports entry resolves to raw ./src/*.ts. apps/server is built with plain tsc (no bundling), so a runtime import there survives into emitted JS and Node cannot load it. Only the bun build-bundled files under src/opencode-plugins/ may import it.

pnpm typecheck and both bun suites passed straight through this, because bun loads .ts natively and Vite bundles for the renderer. Only booting the real product surfaced it. It is fixed in #3112, and that PR adds an automated guard that fails if any non-bundled apps/server file imports @openwork/types, plus a plain-node import proof of the built output.

Static verification on the merged result

pnpm typecheck                                        clean
pnpm --filter @openwork/app test                      435 pass,  0 fail
pnpm --filter openwork-server test                    526 pass,  0 fail
pnpm --filter @openwork-ee/den-web test                73 pass,  0 fail
pnpm --filter @openwork-ee/den-web build              succeeded
den-api desktop-policy suites (real MySQL)              9 pass,  0 fail

Honest gaps

  • No per-PR fraimz flow was authored; this is the canonical core-flow inertness proof plus the matched baseline, which is the right standard for a series that is mostly wiring, deletion, and policy gating.
  • The cloud prompt-card behavior in feat(desktop-policies): let organization prompts launch a named skill #3115 is covered by unit + real-DB API tests, not by a driven cloud fraimz — that needs the Den stack and a seeded org.
  • Local macOS pnpm dev could not be used: every worktree shares one userData dir, so app.requestSingleInstanceLock() makes any second instance quit before creating a window (CDP stays up, so it looks like a hang). Worth a separate DX fix.

@benjaminshafii

Copy link
Copy Markdown
Member Author

Correction to my validation note above

In the "Honest gaps" section I wrote that local macOS pnpm dev could not be used because all worktrees share one userData dir, so app.requestSingleInstanceLock() makes any second instance quit before creating a window.

That diagnosis was wrong. I tested it properly afterwards and disproved it:

  • With the lock successfully acquired (verified: the boot banner printed and no contention message appeared), the instance still produced 0 CDP page targets.
  • With an isolated profile and OPENWORK_ELECTRON_USE_MOCK_KEYCHAIN=1, still 0 page targets.
  • From the unmodified main checkout on dev with an isolated profile, still 0 page targets.

So dev Electron currently opens no window on this macOS host regardless of profile, keychain, or worktree. It is pre-existing, unrelated to this series, and I have not root-caused it. The same commits do open a window in a clean Linux sandbox, which is where the validation above was run — so the core-flow evidence in this comment stands unchanged.

The shared-profile collision is nonetheless real (two worktrees genuinely cannot both hold the lock, and the loser lingers with an open CDP port and no log line). That is fixed separately in #3124, which adds OPENWORK_DEV_PROFILE and makes lock contention explain itself and exit.

Flagging it because the original wording would have sent a reviewer chasing the wrong cause.

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