docs(web): stop implying Ghost calls external APIs today - #415
Merged
Conversation
The "So is this just browser automation?" section said "where a real API
exists that is the better path, and the same controls sit on top of it
unchanged". Read in present tense that claims API execution works. It does
not.
`apiCall` and `sendEmail` parse, the classifier gates them as sensitive, and
compensate/expr handle them — but applyStep returns `{}` for both, they are
listed in UNIMPLEMENTED_ACTION_TYPES, and editable-steps.test.ts enforces that
the editor never offers them, precisely so nobody can author a step that
silently does nothing while the run reports success. The Connector model is
schema-only: "no UI or command reads these yet."
So the page now states outright that today every step runs through a browser,
names what exists (step type, connector model, sensitivity rules) and what
does not (the executor), and explains why the step is withheld from the
editor. The honest version is also the more convincing one: it is the same
reasoning that keeps the step out of the editor in the first place.
CLAUDE.md rule 10 — marketing must not promise capabilities the app cannot
support. This is that rule applied to a sentence I wrote two commits ago.
Validation: typecheck, lint, build, web test suite all pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLqLtoLgi4RDrWaYVJVGuX
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
mohabbis
marked this pull request as ready for review
August 7, 2026 16:20
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
No code change. GitHub Actions has created no workflow run for this PR, or for #414, or for #414's merge commit on master — every workflow is active and every trigger matches, so the runs are being suppressed rather than failing. This commit is a discriminator. #414 and #415 were both opened through a GitHub App installation token, and the merge was performed the same way. A push from the git credential here is a different token class (an OAuth app — it was refused `workflow` scope earlier, which GITHUB_TOKEN would not have been). If a `pull_request: synchronize` run appears from this push, the cause is token-related. If nothing appears, it is repository-level: exhausted Actions minutes or an Actions restriction, neither of which any workflow file can fix. Worth knowing because the PR currently reports mergeable_state "blocked" with no check runs in existence — a required check that was never created sits "Expected — Waiting for status" forever, which is the exact failure mode described in the header of .github/workflows/rust.yml. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VLqLtoLgi4RDrWaYVJVGuX
mohabbis
added a commit
that referenced
this pull request
Aug 7, 2026
master shipped a substantially more complete landing page and dashboard (#414, #415) while this branch had its own smaller landing-page pass in flight — same files (page.tsx, dashboard/page.tsx, globals.css). Resolved in favor of master's version everywhere they overlapped: it's more honest (built/not-built status, the "is this just browser automation" section), fixes a real dark-mode CSS bug (@theme nested inside @media doesn't survive Tailwind v4's hoisting), and renders real org data on the dashboard instead of static nav cards. Dropped the Fraunces/IBM Plex Mono font experiment from layout.tsx/globals.css along with it, since nothing references those tokens anymore and master's design intentionally stays on one font. Kept from this branch: the themed sign-out page (signout/page.tsx, auth.ts pages.signOut) and the CLAUDE.md env-var doc fix, neither of which master touched.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-up to #414, correcting a claim I introduced there.
The landing page's "So is this just browser automation?" section said:
Read in the present tense — which is how a visitor reads a homepage — that claims Ghost executes API steps. It does not. Checked against the code rather than assumed:
apiCallandsendEmailparse (schema/step.ts, under a// --- Post-MVP step types (reserved; no executor yet) ---heading)compensate.ts/expr.tshandle themapplyStepinapps/worker/src/browser/driver.tsreturns{}for both — they do nothingUNIMPLEMENTED_ACTION_TYPESand excluded fromEDITABLE_STEP_TYPES, witheditable-steps.test.tsenforcing itConnectormodel is schema-only: "no UI or command reads these yet"The reason the editor withholds the step is stated in the source and is the same reason the page shouldn't have implied the capability:
Trust & safety
Copy-only change to one public marketing section. No runtime behaviour, no route, no schema.
This is CLAUDE.md rule 10 enforcement — marketing must not promise capabilities the app cannot support — applied to a sentence added two commits earlier.
Changes
cloud/apps/web/src/app/page.tsx— the section now:apiCallstep type, the connector model, the rules that classify an API action as sensitive) and what does not (the executor);The honest version reads as more convincing than the vague one, because it is the same reasoning the codebase already applies to itself.
Validation
Cloud app; nothing in
src-tauri/changed, so no Rust check was run.pnpm typecheckpnpm lintpnpm buildpnpm testAll exit 0.
Risks / follow-up
PIPELINElist flags the unbuilt stage, but this slipped through in prose — prose is where it will slip again.apiCallexecutor does land, this section,NEXT_UP, andUNIMPLEMENTED_ACTION_TYPESall have to move together. Only the last one is currently enforced by a test.ghost-apphas not been redeployed, so production still serves the pre-fix(web): give the app a real front door instead of a sign-in wall #414 build.🤖 Generated with Claude Code
https://claude.ai/code/session_01VLqLtoLgi4RDrWaYVJVGuX
Generated by Claude Code