Skip to content

Add the ghostget.com blog with the Introducing post and reviewed articles - #381

Merged
0thernet merged 3 commits into
mainfrom
claude/seo-blog-20260924
Sep 25, 2026
Merged

0thernet merged 3 commits into
mainfrom
claude/seo-blog-20260924

Conversation

@0thernet

Copy link
Copy Markdown
Member

Summary

  • Adds /blog/ to ghostget.com with five posts, rendered at build time through the design-kit v0.17.0 static article renderer: Introducing Ghostget, Built on Ghostget (provider hub), the public claims register post, releases that prove their origin, and replayable property tests.
  • Every post shows the byline "Hraness" and the note "Drafted with AI from the source code and reviewed by Claude Opus 5.5 (claude-opus-5-5) editorial review." from its review record. Records are validated with assertArticleAdmissions in website/blog.test.ts; humanReview stays null.
  • All five records are indexable (9/12 or better with no zero), so each post enters the blog index, sitemap.xml with lastmod, the new Atom feed at /blog/feed.xml (served as application/atom+xml), llms.txt, and gets a Markdown twin. A quarantined record would render noindex and stay out of every list; the tests cover that path.
  • BlogPosting and Blog JSON-LD and the feed come from web-discovery v0.8.0. Clean URLs get the same trailing-slash redirects as the rest of the site in vercel.json.
  • Type-check fix: web-discovery v0.8.0 publishes its source as types, and its discovery.ts imports Metadata and MetadataRoute from next. Resolving the real package loads Next's global ProcessEnv and DOM augmentations into Ghostget's programs and breaks unrelated src/ files. tsconfig.json now maps next to website/next-types.d.ts, a two-type declaration used only for type checking. No runtime import changes.
  • Pastes the hraness-articles AGENTS block, registers it in verification/claims.json, regenerates docs/assurance.md, and updates the managed-block list pinned in scripts/verification-claims.test.ts.
  • Bumps @hraness/design-kit v0.15.0 to v0.17.0 and @hraness/web-discovery v0.6.0 to v0.8.0 (dev dependencies; website/ output stays dependency-free).

The site changes reach production only with the next tag Release and website-production promotion. The hub links to peopleblade.com/blog/how-peopleblade-uses-ghostget and textbutler.app/blog/how-textbutler-uses-ghostget; both PRs are open, so promote this after those pages are live.

Part of the Hraness portfolio blog program (owner decisions 2026-09-23).

Test plan

  • bun run typecheck (root and verification/), website/ and edge/ type checks
  • bun run check:effect
  • bun run website:check: theme, website type check, 109 website and edge tests, static build
  • bun test scripts/verification-claims.test.ts: 43/43 after rebasing on current main (one test needs more than the 5 s default at load average ~40 and passes with a longer timeout)
  • Required CI

Generated with Devin

@vercel

vercel Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
ghostget Ready Ready Preview Sep 25, 2026 2:46am UTC

Request Review

Comment thread website/blog.ts Fixed
0thernet and others added 3 commits September 24, 2026 22:45
…cles

Build /blog/ and five posts into the static site with the design-kit v0.17.0
article renderer: the Hraness byline, the provenance note from each post's
review record, BlogPosting and Blog JSON-LD, an Atom feed at /blog/feed.xml,
sitemap entries with lastmod, Markdown twins, and llms.txt entries. Review
records are checked with assertArticleAdmissions; a quarantined record would
render noindex and stay out of every list.

web-discovery v0.8.0 publishes source types that import Next's Metadata
types, and loading the real package pulls Next's global ProcessEnv and DOM
augmentations into Ghostget's programs. tsconfig.json maps "next" to a
two-type local declaration instead. Paste the hraness-articles AGENTS block
and record it in the claims register and assurance case.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
CodeQL flagged the contents-label regex as incomplete multi-character
sanitization. Drop tags with a character scan instead; the labels are
unchanged. Record the type-only "next" path in the npm publication test,
which pins tsconfig.json paths exactly.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
The url crate keeps a drive-letter segment under ".." in an https:
path where WHATWG removes it. The parse gate only excluded the literal
slash form, so a candidate such as https:user:pass@a-.co\m:/../a?q=ä
reached the comparison through the backslash normalization and failed
Required verification on seed 42458414. Record the seed in the corpus
and pin the case with a named regression test; both sides still refuse
the input on the backslash rule.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@0thernet
0thernet force-pushed the claude/seo-blog-20260924 branch from 9f38739 to 8b3686a Compare September 25, 2026 02:45
@0thernet
0thernet merged commit e1b9511 into main Sep 25, 2026
28 checks passed
@0thernet
0thernet deleted the claude/seo-blog-20260924 branch September 25, 2026 03:11
0thernet added a commit that referenced this pull request Sep 25, 2026
Applies the canonical Ghostget product-messaging record (jungle
`a9988b903`) to every mapped public surface. Copy and copy-pinned tests
only; no behavior, styling, or structural changes.

## Surfaces

- `website/build.ts`: `SITE_TITLE` → "Ghostget: Your agent calls web
actions by name and holds no password."; `SITE_DESCRIPTION` → canonical
`meta`.
- `package.json`: `description` matches `SITE_DESCRIPTION`
(build-enforced equality).
- `website/source/index.html`: `<title>`, OG/Twitter titles, hero
heading/summary, secondary action "See it work" → the getting-started
demo, "Who made it?" FAQ and maker section now carry studio attribution
(Hraness, not a personal credit), sibling cards use each product's
registry `short`, closing CTA uses the canonical tagline.
- `website/source/preview.html`: category eyebrow plus the canonical
hero heading.
- `website/public/og.png`: regenerated by the checked generator
`scripts/generate-og.tsx` from `SITE_TITLE`, not edited by hand.
- `website/source/llms.txt`: lead renders canonical `meta`; the
introduction paragraph is canonical `long`.
- `website/source/blog/introducing-ghostget.html`: the opening paragraph
carried the previous one-line description verbatim; it now uses
canonical `meta`.
- `README.md`: first paragraph is canonical `medium`; the OG badge alt
text follows the new title.
- `src/usage.ts` and `src/cli-intro.ts`: the help heading and terminal
identity line use the canonical `short`.
- `skills/ghostget/SKILL.md`: frontmatter description leads with "Use
Ghostget for named web actions".
- `website/AGENTS.md` and `verification/claims.json`: the guide's pinned
one-line-description rule now quotes the new `SITE_DESCRIPTION`, and the
claims-register digest for that rule was updated; `docs/assurance.md`
re-rendered identically (digests are not rendered).
- Copy-pinned tests: `website/site.test.ts` and `src/ghostget.test.ts`
assert the new strings.

## Superseded authored lines replaced

- `capture. archive. operate.`
- `attested captures.`
- `bounded provider operations.`
- `a fast web gateway with typed website capabilities for agents`

None remain in tracked files (`git grep` clean). Also replaced: the
prior `SITE_TITLE`/`SITE_DESCRIPTION`, the old hero heading and summary,
and personal maker attribution.

## Overlap with open work

- **#370** `design/portfolio-surfaces-20260923` (open): also edits
`index.html` hero markup, `website/AGENTS.md`,
`verification/claims.json`, `package.json`, and `README.md`. This change
edits text nodes only inside the existing hero; whichever lands second
will need a small rebase.
- **#381** `claude/seo-blog-20260924` (merged): added the blog; the
merged post's opening paragraph carried the previous description and is
updated here.
- **#352** `release/0.18.35` (open release PR): touches
`package.json`/`README.md` for the version bump; this change touches no
version fields.

## Verification

`bun run check` passes locally end to end on this head. The two native
derivation tests required the documented pinned fixture browser (`bun
run ./scripts/provision-derive-browser.ts` plus
`GHOSTGET_DERIVE_BROWSER_ROOT`, per `docs/native-fixture-browser.md`),
provisioned for the run; all 4,692 unit tests pass, plus omni,
standalone smoke, and the full verify stack (claims register,
Quint/Apalache, Lean, Rust/Python oracles). The `Required` check on this
head is authoritative for merge.

Co-authored-by: 0thernet <894119+0thernet@users.noreply.github.com>

This branch was successfully deployed

1 active deployment
Preview — 8b3686a7 Deployed Sep 25, 2026 by vercel[bot]
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.

2 participants