Skip to content

feat: simple-git.napi.rs website (landing + docs + Cloudflare deploy)#146

Merged
Brooooooklyn merged 55 commits into
mainfrom
feat/website
Jul 6, 2026
Merged

feat: simple-git.napi.rs website (landing + docs + Cloudflare deploy)#146
Brooooooklyn merged 55 commits into
mainfrom
feat/website

Conversation

@Brooooooklyn

@Brooooooklyn Brooooooklyn commented Jul 6, 2026

Copy link
Copy Markdown
Owner

What

Adds a marketing + docs website for @napi-rs/simple-gitsimple-git.napi.rs — modeled on image.napi.rs. Built as a self-contained website/ Yarn workspace; the library is untouched (only change to root package.json is the workspaces field).

website/  →  void (VoidZero SSR) · Vite 8 · React 19 · Tailwind v4 · Shiki
  /           Hero → Benchmark → Doc-site showcase → Features → API tabs → Platforms → CTA
  /docs       Getting Started
  /docs/api   Full API Reference (hand-authored, grounded in index.d.ts)
deploy    .github/workflows/CI.yml (deploy job) → Void/Cloudflare (project simple-git)

Highlights

  • Landing page — 8 sections. Leads with the flagship use case (fast "Last updated on" dates for doc-site generators) and the benchmark story (git CLI 1.9 s vs 65 ms, 1000× getFileLatestModifiedDate, ~29×). Content is grounded in the README / index.d.ts / package.json — code samples are byte-verbatim from the README; the 15 prebuilt platform triples and Node >= 10 come from package.json.
  • Docs — a Getting Started page (install · platforms · 60-second example · doc-site "last updated" · async & AbortSignal · typed errors · resource cleanup) inside a two-column sidebar shell.
  • Full API Reference (/docs/api) — a hand-authored, comprehensive reference (~3,000 lines, 257 members): the whole Repository class, all 24 other object/handle classes, the 13 option/result interfaces, all 18 enums (with the GitErrorCode meanings table), the 3 standalone functions, and error handling. Every signature is verbatim from index.d.ts and every claim is grounded in its JSDoc / the README — built task-by-task with a per-task codex grounding gate (which caught, among others, an invented tree-to-tree diff, a bogus reflog side-effect, and a broken findRemote error example that had also shipped in Getting Started).
  • Design — dark, teal-on-slate theme (its own accent in the napi.rs family), 3 self-hosted variable fonts, Shiki highlighting via the JavaScript regex engine (workerd-safe — no runtime WASM).
  • No-JS safe — all content renders with JavaScript disabled; only enhancements (count-up, bar animation, reveal, tabs, install switcher) are JS-gated.
  • No playground / WASM / COOP-COEP / analytics — simple-git has no browser build, so none of image.napi.rs's cross-origin-isolation plumbing is carried over.

SEO & discovery

From a multi-agent SEO audit (6 dimensions, adversarially verified), all landed in this PR:

  • Full OG / Twitter meta + a generated og.png (1200×630, via scripts/gen-og.mjs), theme-color, apple-touch-icon.
  • Canonical + og:url on both routes; route-invariant tags in void.json, per-route tags in each *.server.ts head.
  • JSON-LDSoftwareApplication + WebSite (schema.org) in the root layout, matched to package.json / LICENSE.
  • robots.txt + sitemap.xml; prerender=true on both routes (static HTML, no per-request Shiki).
  • a11y + CWV — skip link, focus-visible rings, nav labels, new-tab cues; hero LCP no longer reveal-gated; font-display: optional.

Agent-friendly (llms.txt)

  • llms.txtllmstxt.org-conformant map: H1 + summary + install/API detail, then a single link-list ## Documentation H2 (docs · full-text · README · types · npm).
  • llms-full.txt — the complete Getting Started guide as one self-contained file, kept in sync with the docs body.
  • robots.txt points crawlers at /llms.txt.
  • Content grounded against index.d.ts — including the typed-error contract (git-layer errors carry a GitErrorCode, narrowable with isGitError; an aborted *Async call rejects with napi's AbortError code === 'Cancelled', which isGitError does not match).

Testing

Check Result
tsc --noEmit clean
void:prepare + vite build OK (SSR + client)
Playwright smoke (test:e2e) 2/2 passed (real Chromium)
Library suite (ava) 156/156 passed
require('./index.js') loads (library unaffected)

Notes

  • CI in CI.yml gates the website by changed paths (a changes job using dorny/paths-filter, scoped to website/** plus the shared root package-manager files yarn.lock, package.json, .yarnrc.yml, .yarn/releases/**):
    • On pull requests — a website job runs void:prepare + vite build + the Playwright smoke (/, /docs, /docs/api), so a broken site fails the PR before merge instead of only at deploy time.
    • On push to main — the same gate additionally runs a deploy job (void deploy --project simple-git, GitHub OIDC, no long-lived secret) — live at https://simple-git.void.app (custom domain simple-git.napi.rs mapped separately), independently of the native build/test jobs (no needs on them). deploy needs: [changes, website], so the build + Playwright smoke must pass before it publishes — production is never updated ahead of the e2e gate.
    • The website has no dependency on the native .node (library imports appear only inside doc code fences), so neither job needs a Rust build. The workflow's push trigger uses a positive paths filter that re-includes website/**, so website-markdown-only changes still build/deploy.
  • website/ is excluded from the npm tarball by the existing files/.npmignore, so publishing is unaffected.
  • Design spec + implementation plans: docs/superpowers/{specs,plans}/2026-07-06-simple-git-website-*.md (same convention as prior features in this repo).
  • One deferred, non-blocking item: void 0.10.2 exposes no knob to scope assets.run_worker_first, so static assets route through the SSR Worker first — to fix at deploy or upstream, not in-repo.

Review

Built via subagent-driven development; each task and the whole branch were reviewed with codex:adversarial-review. Automated Codex bot comments were verified against the real CI run and addressed:

  • Deploy path filter missed lockfile-only website dep updates — confirmed, fixed in b7b6fd5 (root package-manager files added to the deploy paths).
  • Native CI installs the website toolchain / FreeBSD risk — verified a non-issue: this repo runs with Yarn's enableScripts: false, so no dep postinstall runs; Build FreeBSD passes and the full CI run is green (install overhead ≈ +20s). The only fix would touch native CI.yml, conflicting with the "native build untouched" constraint — not worth it.
  • Typed-error feature card overstated — the landing "Typed, catchable errors" card claimed every failure carries a GitErrorCode; scoped it to Git-layer errors + the AbortError cancellation path (561cea7), consistent with the docs / llms.txt / index.d.ts.
  • Deploy skipped for website-markdown-only pushes — after folding the deploy into CI.yml, the workflow-level paths-ignore: **/*.md would skip the run before the deploy gate; replaced with a positive paths filter that re-includes website/** (82afc64).
  • Deploy targeted a nonexistent Void projectnapi-simple-git doesn't exist; corrected to simple-git (720bec5), verified by a successful manual void deploy.
  • Website was never built in PR CI — only void deploy (push-to-main) built the site, so a PR with a broken build passed native CI and failed only at deploy; added a PR-gated website build + e2e job (58fd576).
  • Deploy not gated on the smoke testsdeploy only needs: changes, so on push-to-main it ran in parallel with the website job and could publish before Playwright finished; added website to deploy's needs (c693a25).

🤖 Generated with Claude Code

Brooooooklyn and others added 16 commits July 6, 2026 11:03
Design spec for simple-git.napi.rs — a marketing + docs site modeled on
image.napi.rs (void + Vite + React 19 + Tailwind v4 + Shiki, deployed to
Cloudflare). Landing + Getting Started, teal-on-slate theme, animated
benchmark + doc-site 'last updated' showcase (no WASM playground).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Executable task breakdown for subagent-driven-development, cloning the
image.napi.rs void site for @napi-rs/simple-git.

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

Task 1 of the marketing+docs site: add a minimal void (VoidZero) workspace
under website/ that installs, builds, and serves two placeholder routes.

- website/package.json (@napi-rs/simple-git-website), void.json, vite.config.ts,
  tsconfig.json, pages/index.tsx (<h1>), pages/docs/index.md.
- Root package.json: add "workspaces": ["website"] (rewrites yarn.lock).
- .gitignore: website build artifacts (.void/.wrangler/test-results/etc).

No theme/content, no playground, no WASM — those come in later tasks. The
native library is untouched (still require()s cleanly).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ep root .gitignore untouched)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Resolves the plan-internal contradiction Codex flagged in the Task 1 review.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…i, header/footer)

Task 2 visual foundation for the @napi-rs/simple-git site (dark-only, teal-cyan):

- app.css: Tailwind v4 @theme tokens (cool slate near-black + teal accent),
  fluid clamp() type-scale, film-grain overlay, @layer components helpers
  (.container-page/.site-header/.eyebrow/.reveal), CSS-only mobile-nav rules,
  and self-hosted @font-face for the three variable fonts.
- lib/highlight.ts: workerd-safe Shiki JS-regex-engine singleton (github-dark).
- public/favicon.svg: new git-branch mark, teal on #04211f.
- public/fonts/*.woff2: latin-subset variable fonts sourced from
  @fontsource-variable, preloaded via void.json head.link (stable paths).
- pages/layout.tsx + pages/_components/Footer.tsx: sticky blurred header with
  JetBrains-Mono wordmark + Docs/GitHub/npm nav, CSS-only mobile drawer,
  and footer (brand + tagline + links + "Built with napi-rs · MIT licensed").
  No analytics.
- tsconfig.json: include lib/.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add the content + primitives layer the landing sections (tasks 4-5) consume:

_data modules:
- samples.ts   — hero + 5 tab code samples, byte-verbatim from README.md
- benchmarks.ts — 1.9 s vs 65 ms (1000×), ~29× derived
- features.ts  — the 9 feature cards
- platforms.ts — 15 napi triples grouped by OS (cross-checked vs package.json), Node >= 10
- docSites.ts  — Nextra/Docusaurus/Starlight/Fumadocs/Rspress (name + URL + text glyph)

index.server.ts — loader pre-highlights every sample server-side (Shiki JS-regex
engine, no runtime WASM) and returns HTML as props; head (title + description).

_components — reusable UI: CodeBlock (server-rendered highlighted HTML) plus the
_-prefixed interactive islands _CopyButton, _InstallSwitcher, _CountUp, _Reveal,
_TabbedCodeBlock. Landing is a regular Void route (full hydration), so islands need
no `with { island }` — matches the reference/Task 2 convention.

No-JS safe (code + reveals visible without JS); no analytics; no WASM.
index.tsx untouched — section wiring is Task 4.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Build the first three landing sections and wire them into pages/index.tsx
(Task 4). Remaining sections land in Task 5.

- Hero: eyebrow, "Git for Node, at native speed." (accent "native"), tagline,
  Get started/GitHub/npm buttons, InstallSwitcher, heroHtml CodeBlock, and three
  CountUp stat tiles (29× / 15 / 0 — all grounded in _data + package.json).
- Benchmark: "~30× faster than shelling out"; IntersectionObserver bar animation
  (git CLI 1.9 s full bar vs simple-git 65 ms sliver, proportional to ms); big
  29× CountUp; caption from _data/benchmarks.ts (README Performance · performance.mjs).
- DocSiteShowcase: "Powers 'Last updated on' for your docs"; mock doc footer stamp
  "Last updated on Jul 6, 2026 by LongYinan"; getFilesLatestModified bulk CodeBlock
  (new docSiteSample, byte-verbatim from README, highlighted via the loader); row
  of the 5 generators from _data/docSites.ts (text-glyph monograms, no remote logos).

Shared presentational components: SectionHeader, Button, Chip (un-prefixed, no
client state). Interactive pieces reuse the Task 3 islands (_CountUp/_Reveal/
_InstallSwitcher) via the regular-route full-hydration model — no island markers.

No-JS safe: all copy, code, benchmark labels/values and generator names are in the
SSR HTML; bars render at final proportional widths and CountUp shows final values
with JS off; reveals are gated behind html.js. No WASM, no analytics, no remote images.

Verify: tsc --noEmit clean; void:prepare + vite build succeed (SSR + client);
dev SSR renders all three sections with 0 console errors; reveals fire on scroll.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…opy to spec

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

Renders '29× faster / 15 platforms / 0 dependencies' in the approved lower case
(numbers still sourced from benchSpeedup / platformCount / 0). tsc + build pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rix, CtaBand

Append the remaining four landing sections after Hero/Benchmark/DocSiteShowcase so
pages/index.tsx is complete end-to-end (Hero → Benchmark → DocSiteShowcase → Features
→ CodeSample → PlatformMatrix → CtaBand; Footer from layout).

- Features: 3×3 responsive card grid from _data/features.ts (9 cards).
- CodeSample: _TabbedCodeBlock over statusHtml/commitHtml/blameHtml/pushHtml/errorsHtml
  ([Status] [Stage & commit] [Blame] [Push] [Typed errors]); first tab visible with JS off.
- PlatformMatrix: 15 triples grouped by 6 OS from _data/platforms.ts; count + Node engine derived.
- CtaBand: centered InstallSwitcher + [Read the docs]->/docs and [GitHub] buttons.

All reuse existing shared/island components + data modules; no island markers, no
forbidden tech, no-JS safe (all content in SSR HTML). tsc/void:prepare/build clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the Task-1 placeholder with the full Getting Started content and add
a centered prose layout for the /docs route.

- docs/layout.tsx: single-column .void-md prose shell (header/footer come from
  the root layout). @void/md applies the prose theme; code is highlighted at
  build time by voidMarkdown() with Shiki's pure-JS regex engine — no runtime
  WASM, page reads fully with JS disabled.
- docs/index.md: Install (npm/yarn/pnpm/bun), 15 prebuilt triples + Node >= 10,
  60-second example, flagship getFilesLatestModified doc-site "last updated",
  async & AbortSignal, typed errors (isGitError/GitErrorCode), dispose()/free()/
  using, and Full API links to the GitHub README + npm. In-page [[toc]].

All code/API grounded in README.md and index.d.ts.

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

Full API now links GitHub README + type definitions (index.d.ts) + npm,
matching the plan/spec requirement.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…de feature cards

Task 7 of the @napi-rs/simple-git website build.

- .github/workflows/void-deploy.yml: mirror ../Image deploy workflow, only
  changing the project to napi-simple-git. Push to main on website/** changes,
  Node 24, corepack, root `yarn install --immutable`, `yarn void deploy
  --project napi-simple-git` in website/, GitHub OIDC (id-token: write).
- website/playwright.config.ts + website/e2e/smoke.spec.ts: deterministic smoke
  test over the Vite/Void SSR dev server. Asserts `/` 200 + hero H1 "Git for
  Node, at native speed." + "01 — BENCHMARK" eyebrow, and `/docs` 200 + the
  "Getting Started" heading. 2 passed.
- website/pages/_components/Features.tsx: render backtick-delimited API names in
  feature `desc` strings as styled inline <code> (split on backtick, wrap odd
  segments). No markdown lib, no data change; server-rendered and no-JS safe.

Responsive pass verified empirically (Chromium 320/360/375/414 on / and /docs):
no horizontal body scroll, wide content scrolls within its own overflow-x:auto
container, mobile drawer + tap targets work. No CSS changes needed. tsc clean;
void:prepare + build succeed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…out JS)

The API section's tabbed code block hid inactive panels with the HTML `hidden`
attribute and required JS to switch tabs, so with JavaScript disabled only the
first of five code samples was ever visible.

Emit all five panels with no `hidden` attribute and drive show/hide from app.css,
gated on the existing `html.js` class (set before first paint by the layout's
inline script, the same mechanism `.reveal` uses). Without JS the tab bar is
hidden and every panel shows stacked, each with a visible per-panel label; with
JS only the active panel (data-active) shows and clicking a tab swaps instantly,
with no flash of all five before hydration. ARIA tablist/tab/tabpanel wiring is
preserved.

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

cursor Bot commented Jul 6, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_50e3ca30-6d54-4b19-bd3f-9930b438dfbd)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ad61cd7ee0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread package.json
Comment thread .github/workflows/void-deploy.yml Outdated
Brooooooklyn and others added 8 commits July 6, 2026 15:28
Grounded in the multi-agent SEO audit findings (verified). Covers head/social meta,
canonical, JSON-LD, robots/sitemap, prerender/CWV, and a11y — all inside website/.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ts, sitemap)

Add the static asset layer the SEO/meta tags will reference:
- public/og.png (1200x630) on-brand social share card
- public/apple-touch-icon.png (180x180) + public/favicon.png (32x32) from favicon.svg
- public/robots.txt + public/sitemap.xml (/, /docs @ lastmod 2026-07-06)
- scripts/gen-og.mjs: reproducible generator using the installed Playwright
  chromium (no new dependency), fonts embedded as data URIs

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…l/og

Move route-invariant tags (charset, theme-color, og:type/site_name/image*,
twitter:card/image, apple-touch-icon + PNG favicon fallback) into the void.json
base head; add per-route canonical + og:url and benefit-copy og:title on home,
and rewrite the description const. Delete the tags that moved to base so each
renders exactly once (void appends links, overrides meta by name/property).

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

SEO Task 3: give /docs its own canonical + og:url and a right-length
description via a co-located server head, since void markdown frontmatter
silently drops head/link/og keys.

- Add website/pages/docs/index.server.ts head export:
  - re-declares title 'Getting Started' and the docs description (a server
    head REPLACES the frontmatter-derived head)
  - link canonical https://simple-git.napi.rs/docs (non-trailing-slash form)
  - meta description + og:title/og:description + og:url .../docs
- Trim description to 146 chars (was 175, clipped in SERPs) by dropping the
  trailing "Powered by libgit2 and Rust." clause; keep index.md frontmatter
  in sync. Docs body unchanged.

Void's head merge keeps every route-invariant base social tag (og:type,
og:site_name, twitter:card, og:image, theme-color, charset) and wraps the
title with the "%s | @napi-rs/simple-git" template.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
SEO Task 4: emit two schema.org JSON-LD blocks from the root layout so
both / and /docs are eligible for rich results. Fields grounded in
package.json (name, version 1.0.0, MIT, repo, npm) and the 15 napi
targets (OS list). Serialized via JSON.stringify; server-only, no client JS.

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

Both landing (/) and docs (/docs) carry no request- or time-varying data yet
were re-rendered per request (prerender=false + routing.revalidate {"*":0}),
re-running Shiki on every hit. Switch both to prerender=true so they render
once per deploy and serve from the edge cache, and drop the revalidate:0 block
that (per void's "TTL 0 is skipped" rule) would otherwise suppress prerender.
Islands (CountUp/InstallSwitcher/tabs) still hydrate client-side; no-JS render
and the /docs/ 308 redirect are unchanged.

Worker asset precedence (run_worker_first: ["/**"]) is generated by void and
NOT exposed via void.json (worker/routing are additionalProperties:false, no
assets knob); left as-is per brief, to raise upstream. See task-5 report.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…els, new-tab cues, hero LCP, font/grain)

- Skip link (first fragment child) + <main id="main-content"> (WCAG A)
- Zero-specificity :where() :focus-visible ring in app.css Base (WCAG 2.4.7)
- aria-label="Primary" on desktop + drawer navs, "Footer" on footer nav
- Centralized "opens in a new tab" sr-only cue: Button (target=_blank), layout NAV,
  Footer links, DocSiteShowcase used-by row; rel="noreferrer" kept
- Hero above-fold code column: <Reveal> -> plain <div> so LCP isn't opacity:0 JS-gated;
  dropped unused Reveal import; below-fold reveals untouched
- Removed mix-blend-mode: soft-light from body::after film grain
- font-display: swap -> optional on all three @font-face blocks (no mid-view swap => no CLS)

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

cursor Bot commented Jul 6, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_dfe040d5-2bd6-47db-bdb8-37b9f6aaccee)

@Brooooooklyn

Copy link
Copy Markdown
Owner Author

SEO pass (added to this branch)

Following a multi-agent SEO audit of the site, wired the full share/discovery layer (all inside website/, library untouched). Each change was implemented + codex:adversarial-review-gated per task, with a final whole-cycle review.

Area Change
Social image public/og.png (1200×630, brand card) + apple-touch-icon.png + favicon.png, reproducible via scripts/gen-og.mjs (Playwright, no new dep)
Head/meta og:* + Twitter card (route-invariant tags in void.json base; per-route og:title/description on home), canonical + og:url on both routes, charset, theme-color, apple-touch-icon link
/docs head new pages/docs/index.server.ts (frontmatter can't carry link/og in void) — canonical, og:url, description trimmed 175→146
Structured data server-rendered SoftwareApplication + WebSite JSON-LD on both routes
Discovery public/robots.txt (+ sitemap pointer) and public/sitemap.xml
Rendering both routes prerender = true + dropped revalidate:*=0 → static, edge-cacheable (was re-running Shiki per request)
Copy home title/description now lead with the flagship "last-updated commit date" intent; removed literal backticks from the meta description
A11y skip-to-content link + <main id>, global :focus-visible ring, aria-labeled nav landmarks, "opens in a new tab" cues on external links
CWV hero LCP no longer opacity:0-gated behind JS; removed mix-blend-mode on the film-grain overlay; font-display: optional to avoid swap-CLS on the H1

One item needs an upstream/deploy change (not in-repo actionable)

The generated dist/ssr/wrangler.json sets assets.run_worker_first: ["/**"], so every static asset (fonts, favicon, hashed assets) is routed through the SSR Worker first. void 0.10.2 exposes no assets/run_worker_first passthrough in void.json (worker/routing are additionalProperties:false), and the file is regenerated by void prepare, so it can't be fixed in-repo. Options: scope it at deploy time, or add a config passthrough upstream in void.

🤖 Generated with Claude Code

Brooooooklyn and others added 2 commits July 6, 2026 17:14
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Expose the site to LLM agents via the llmstxt.org convention:

- website/public/llms.txt — curated map (summary, docs links, grounded
  Core API surface, install commands); every API name verified against
  index.d.ts, facts (1.0.0, MIT, 15 targets, Node >= 10) per package.json.
- website/public/llms-full.txt — full Getting Started docs in one plain
  markdown fetch, derived from pages/docs/index.md (frontmatter + [[toc]]
  stripped, retitled, code blocks intact).
- website/public/robots.txt — comment pointer to /llms.txt after Sitemap.

All served at web root (dist/client). Build + Playwright e2e green;
library untouched; only website/public/ changed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Brooooooklyn and others added 7 commits July 6, 2026 20:37
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…I ref part A)

Codex grounding gate flagged prose beyond the JSDoc for three thin-doc
methods. init now states only what README ("init a git repository") +
the signature support; findTree/findCommit keep the null-if-not-found
note but tie it explicitly to their `T | null` return type (also
grounded by the README's `findTree(oid)!` / `findCommit(oid)!` usage).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Document the second half of the Repository class in website/pages/docs/api.md:
state & inspection, config/signature, remotes, branches/checkout/references,
tags, diffs, revwalk and resource cleanup. Signatures copied verbatim from
index.d.ts; prose grounded in JSDoc/signatures/README.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…claim (API ref objects)

Codex gate: (1) the TreeIter fence now shows the complete verbatim class
declaration from index.d.ts (incl. the body and next()); (2) removed the
"msg is recorded in the reflog" note on Reference.rename — true in
libgit2 but not stated in the rename JSDoc or README, so ungrounded.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Final codex nit ([low]): index.d.ts emits a blank line after the TreeIter
class opening brace; mirror it so the fenced declaration is byte-identical.

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

cursor Bot commented Jul 6, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_d3085bc0-8554-43a5-816d-af2740c0a966)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1408fe0d05

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread website/pages/docs/index.md Outdated
Comment thread website/pages/docs/api.md
Brooooooklyn and others added 4 commits July 6, 2026 21:50
…classes

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

The RevWalk entry dumped the entire class body (with all JSDoc) as one
fence AND repeated every member in its own #### section — a Task-4
over-correction. The prose one-liner already states the
`extends Iterator<string, void, void>` inheritance and each member is
documented individually, so the giant fence was pure redundancy.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Codex gate: the Diff class intro claimed deltas "between two trees, or a
tree and the working directory", but the only Diff-producing APIs are
diffTreeToWorkdir and diffTreeToWorkdirWithIndex (both tree-to-workdir);
there is no tree-to-tree diff method. Dropped the ungrounded "two trees".

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

Codex gate [low]: the options-class constructors asserted default states
(default clone/fetch/push settings, no proxy, no callbacks) that aren't
in the constructor JSDoc/README. Reduced each to "Create a new X." —
grounded in the bare constructor signature; the setters below document
configuration.

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

cursor Bot commented Jul 6, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_c21908f2-3e21-410c-bf26-f5b2a6a4b80c)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 280d48f433

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/CI.yml
Brooooooklyn and others added 2 commits July 6, 2026 22:14
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…PI ref)

Codex gate: the DiffFlags enum note said "flags on a DiffFile", but the
flags are exposed via DiffDelta.flags() (index.d.ts:349-356) and DiffFile
has no flags() accessor. Corrected the lead to DiffDelta (the rest of the
sentence already referenced DiffDelta.flags()).

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

cursor Bot commented Jul 6, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_665c34d2-e280-4286-92d4-5fcb739a5624)

Brooooooklyn and others added 2 commits July 6, 2026 22:32
…lish

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The typed-error try/catch example branched on GitErrorCode.NotFound after
calling repo.findRemote('does-not-exist'), but findRemote returns
Remote | null (index.d.ts:1091) — it never throws for a missing remote,
so the catch would not fire. Replace the call with a neutral placeholder
(matching the README's error-handling example) in the new /docs/api
Error handling section AND in the pre-existing Getting Started page +
llms-full.txt where the same broken example had shipped.

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

cursor Bot commented Jul 6, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_5e6c6e05-8a0a-4862-927c-1e96d4d27b4c)

The website's build/test:e2e were only ever exercised via `yarn void
deploy`, which is gated to push-to-main — so a PR breaking the Vite/TS/
markdown build passed native CI and only failed at deploy. Add a
`website` job (build + Playwright smoke of / , /docs, /docs/api) that
runs whenever website-affecting paths change, on PRs and pushes alike.

The `changes` gate now fires for all triggers (not just main pushes) so
it can drive the PR gate; `deploy` gains an explicit push+main guard to
stay main-only. The website has no dependency on the native .node
binary (library imports appear only inside doc code fences), so the job
needs no Rust build.

Addresses codex review finding on PR #146 (website not built in PR CI).

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

cursor Bot commented Jul 6, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_c80bd087-5b1b-4f88-b45f-234f72fab533)

The API Reference was a follow-on sub-project of the website, tracked in
its own spec/plan pair. Fold each into its website parent so there is one
spec and one plan for the whole site:

- spec: API-reference design becomes §11 of the website design spec; the
  superseded "no full API-reference" non-goal and the route list updated.
- plan: API-reference tasks become Phase 3 (7 tasks + constraints + done
  criteria) of the website plan; intro now says three phases.

Deletes the two standalone -api-reference-{design,plan}.md files. No
content lost — merged verbatim, re-leveled to fit.

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

cursor Bot commented Jul 6, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_311022d0-7dc6-40de-8cbf-24537a42bdbd)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3fbf66bce5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/CI.yml Outdated
`deploy` only had `needs: changes`, the same as the `website` job — so on
a push to main both started in parallel once change-detection finished,
and `void deploy` could publish before the Playwright smoke (/ , /docs,
/docs/api) even finished, let alone passed. A later e2e failure then left
a broken site already live.

Add `website` to deploy's `needs` so the build + smoke must succeed
first. When website changed the website job always runs (needs
satisfiable); when it didn't, deploy's existing push+main+website==true
`if` skips it regardless, so no deadlock.

Addresses codex review finding on PR #146 (deploy not gated on e2e).

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

cursor Bot commented Jul 6, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_9d8b70c2-a300-463d-9e4a-6a4acb9c86de)

@Brooooooklyn
Brooooooklyn merged commit 6881589 into main Jul 6, 2026
29 checks passed
@Brooooooklyn
Brooooooklyn deleted the feat/website branch July 6, 2026 16:57
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