docs: fill the empty competitor row in the landscape map - #427
Conversation
`competitive-landscape.md` recorded Ghost's own category as "governed execution / trust runtime — (no named direct competitor yet)". That was wrong, and it let the strategy treat an unexamined category as an empty one. Adds analysis of: - **Skyvern** — head-on. AGPL-3.0 (same licence as Ghost), 22.9k stars, YC-backed, reported SOC 2 Type II + HIPAA, free/$29/$149/Enterprise tiers, human-in-the-loop as an Enterprise feature, and named customers in bookkeeping and healthcare admin — two of Ghost's four stated verticals. Includes a capability matrix; Ghost wins three rows. - **The commoditisation vector** — Browser Use (SOC 2 Type II since Oct 2025) and Cloudflare Browser Run shipping HITL as a platform primitive below Ghost's layer. - **HumanLayer** — launched as approval-gate infrastructure, then left the category for coding-agent orchestration. Recorded with both the comfortable reading and the uncomfortable one. - **AI governance platforms** — adjacent above, but they are defining the buyer's vocabulary, and EU AI Act Art. 14 / NIST AI RMF demonstrable- oversight requirements point at Ghost's architecture. Consequences recorded: - The AGPL objection is parked: Skyvern is AGPL and sells to regulated enterprise buyers, so the licence is not the constraint. - Adopt-list re-ranked. It was ordered against Littlebird, a different category and buyer; SOC 2, `apiCall`/`sendEmail`, and a completing self-serve path now lead. - `product-direction.md` gains a Competitive position section; the business-model moat claim is qualified to the part that survives commoditisation. Sourcing: only the Skyvern GitHub repo was reachable; skyvern.com and the YC launch page are egress-blocked, so pricing, certifications and customer counts are marked secondary-source in the doc. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KbeBQct3tv2UfY2q5ZvqkN
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
`Dependency Audit` (security.yml) has been red on master since 2026-08-23, including the scheduled run on 85be6c1 — the base commit of this branch. Last green was 2026-08-16, which brackets the advisory's publication date. The failure predates this branch and is unrelated to its docs-only diff; this ports the fix rather than waiting on it. RUSTSEC-2026-0258 h2 0.4.15 "h2 unbounded empty DATA frames" published 2026-08-17 · fix: >= 0.4.16 denied warning chacha20 0.10.1 yanked Lockfile only, via `cargo update -p h2 -p chacha20`: chacha20 0.10.1 -> 0.10.2 h2 0.4.15 -> 0.4.19 Remaining hunks are transitive windows-sys churn; no manifest or source change. No-ops once master carries the same bump. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KbeBQct3tv2UfY2q5ZvqkN
|
| Run | Branch | Head | Result |
|---|---|---|---|
| 2026-08-30 04:27Z (schedule) | master |
85be6c15 — this PR's base |
failure |
| 2026-08-25 17:44Z (push) | master |
85be6c15 |
failure |
| 2026-08-23 01:35Z (schedule) | master |
61cecb37 |
failure |
| 2026-08-16 01:28Z (schedule) | master |
61cecb37 |
success |
The last green run predates the advisory's 2026-08-17 publication, and the scheduled run on this PR's exact base commit failed 20 minutes before the PR was opened.
Fix ported in 2f2e359 rather than waiting on it, since one exists and it is lockfile-only — cargo update -p h2 -p chacha20:
chacha20 0.10.1 -> 0.10.2 (un-yanked)
h2 0.4.15 -> 0.4.19 (>= 0.4.16, clears RUSTSEC-2026-0258)
Those are the only two package versions that move; the remaining hunks are transitive windows-sys churn. No manifest or source change. It no-ops once master carries the same bump, and it clears the same failure on master when this merges.
Consequence for this PR's CI: touching src-tauri/Cargo.lock takes it out of the rust.yml ignore set (^(cloud/|docs/|public/)|^\.github/workflows/cloud\.yml$|\.md$), so the full Check / Clippy / Test / Tauri-smoke matrix now runs on ubuntu, macOS and Windows instead of skipping. That is the intended validation for a dependency change.
What was not validated locally, and why. cargo check --all-targets cannot run in this environment: it fails in the gdk-sys build script with Package 'gdk-3.0' ... not found, before compiling any Ghost code. Installing the GTK/webkit deps that AGENTS.md lists failed too — the apt archives return 404 for libwebkit2gtk-4.1-dev, libjavascriptcoregtk-4.1-dev and their dependencies against this image's package indexes. So the compile signal for this bump is CI's, not mine. Both bumps are semver-patch within their existing minor versions and were resolved by cargo itself against the unchanged manifests.
Separately worth noting: this advisory sat red on the default branch for a week in a tree that has not been touched since 2026-08-03. Every PR opened in that window inherited a red check unrelated to its diff.
Generated by Claude Code
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Summary
docs/competitive-landscape.mdrecorded Ghost's own category as "Governed execution / trust runtime — (no named direct competitor yet)". That line was wrong, and wrong in the expensive direction: it let the strategy treat an unexamined category as an empty one, while the doc spent 120 lines analysing Littlebird — a product in a different category selling to a different buyer.This fills the row. There is a head-on competitor, and the layer below Ghost has started shipping the thing Ghost sells.
Trust & safety
Documentation only. No code, no commands, no schema.
The mutating-operation checklist does not apply — no execution path changed.
Changes
docs/competitive-landscape.md— map table rewritten, four new sections:product-direction.md. Includes a capability matrix; Ghost wins three rows, all variations of the same one.Two consequences recorded in the same doc:
apiCall/sendEmail(still inUNIMPLEMENTED_ACTION_TYPESwhile Skyvern ships HTTP and email blocks), then one self-serve path that completes, then the notification surface.docs/product-direction.md— new Competitive position section;competitive-landscape.mdadded to the authoritative docs list.docs/business-model.md— the "Trust runtime" moat bullet is qualified down to the part that survives commoditisation: a deterministic non-model gate over a typed schema, plus a tamper-evident chain.Validation
Docs-only; no Rust or cloud code touched, so the Cargo checks are not applicable and were not run. The repo has no markdown linter in CI (
.github/workflows/is cloud / deploy-website / release / rust / security).cargo fmt— N/A, no Rust changedcargo check— N/Acargo test— N/Acargo clippy— N/AUNIMPLEMENTED_ACTION_TYPES, ICP list inproduct-direction.md, AGPLLICENSE, sole-contributor history)Risks / follow-up
Sourcing is uneven and the doc says so inline. Only the Skyvern GitHub repository was reachable — licence, star count, feature list, self-hosting and integrations are quoted from it directly.
skyvern.com(pricing, SOC 2 blog) and the HumanLayer YC launch page are blocked by this environment's egress proxy, so pricing tiers, certifications, user counts and customer names come from search summaries and are marked secondary-source in the doc, following the convention the Littlebird section already uses. Re-verify before any of this reaches a pitch, a comparison page, or a roadmap commitment.Specific items to re-verify against the vendor:
Not addressed here (out of scope for this PR, still open):
apiCall/sendEmailremain unimplemented; the "APIs first, then browser" ordering in the strategy still describes intent, not shipped behaviour.Generated by Claude Code