Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
d60f6e9
fix: cut websocket throughput in half by pruning activity payloads (#…
t3dotgg Jul 27, 2026
b4680cb
perf(mobile): defer work-log detail serialization (#4607)
saphid Jul 27, 2026
23ea08d
test: account for lazy thread feed details (#4628)
t3dotgg Jul 27, 2026
a78f245
feat(relay): limit managed tunnels per user (#4530)
juliusmarminge Jul 27, 2026
2b06c08
Add managed tunnel limits migration (#4635)
juliusmarminge Jul 27, 2026
f4c3943
Add background preview capture and picture-in-picture support (#4397)
juliusmarminge Jul 27, 2026
200fa82
feat(web): prompt stash — cmd+S saves the composer to a per-provider …
t3dotgg Jul 27, 2026
108e017
Upgrade Effect and Alchemy betas (#4643)
juliusmarminge Jul 27, 2026
bdf99c1
feat: allow new thread creation through project breadcrumbs (#4638)
0x4bs3nt Jul 27, 2026
7248877
fix(web): scope PR state to the thread branch (#4460)
juliusmarminge Jul 27, 2026
d2d40b6
Drop redundant Relay user indexes (#4648)
juliusmarminge Jul 27, 2026
96398e3
feat(connect): release the Cloudflare tunnel when the environment shu…
juliusmarminge Jul 27, 2026
180620e
Fix Relay Worker RuntimeContext wiring (#4653)
juliusmarminge Jul 27, 2026
da11342
Fix live sidebar resize limits and defer Alchemy runtime context (#4655)
juliusmarminge Jul 27, 2026
32843c2
fix(web): constrain branch toolbar context (#4657)
maxktz Jul 27, 2026
0e19c10
Keep MCP credentials alive across provider turns (#4659)
juliusmarminge Jul 27, 2026
f0121f3
fix: close actions dropdown when editing (#4660)
0x4bs3nt Jul 27, 2026
32af2f0
fix(preview): stabilize PiP viewport identity (#4661)
juliusmarminge Jul 27, 2026
80ead5f
Add glass styling for thread tooltips and simplify preview tab handli…
juliusmarminge Jul 27, 2026
5ba6ef7
Use tarball archiving for hosted web deploys (#4669)
juliusmarminge Jul 27, 2026
6e3b738
fix(server): bound editor discovery during config loading (#4291)
maria-rcks Jul 27, 2026
e77f42c
Prevent draft thread detail polling before shell registration (#4670)
juliusmarminge Jul 27, 2026
10bca3f
feat: add configurable source control writing settings (#4204)
maria-rcks Jul 27, 2026
eea3ea4
feat(diff-panel): show total line additions and deletions (#4674)
0x4bs3nt Jul 27, 2026
6afbed3
Clear provider update actions while updating (#4676)
juliusmarminge Jul 27, 2026
6a3df51
Fix sidebar highlighting for draft threads (#4679)
juliusmarminge Jul 27, 2026
3957a95
Use glass surfaces for web toasts (#4681)
juliusmarminge Jul 27, 2026
a2ffb12
Show origin ref in branch trigger label (#4680)
juliusmarminge Jul 27, 2026
1153afb
fix(mobile): match react version to react-native 0.85.3 vendored rend…
KrzysztofMoch Jul 27, 2026
831eb66
chore(release): prepare v0.0.29
t3-code[bot] Jul 27, 2026
a148e08
Add OTA update checks to mobile settings (#4686)
juliusmarminge Jul 27, 2026
476d69c
fix(mobile): threads load snapped to bottom on iOS (#4689)
t3dotgg Jul 28, 2026
c13a021
feat: default sidebar v2 on for nightly and dev builds (#4491)
t3dotgg Jul 28, 2026
dd5ea32
fix(web): 33 web UI fixes (#4700)
maxktz Jul 28, 2026
b0c4992
Make mobile Thread List v2 the default (#4717)
juliusmarminge Jul 28, 2026
d25b157
Fix mobile showcase workflow without Clerk (#4718)
juliusmarminge Jul 28, 2026
e00781a
Fix relay credential lookup for unlinked environments (#4692)
juliusmarminge Jul 28, 2026
9cf9fc9
Settle merged PR threads immediately (#4704)
t3dotgg Jul 28, 2026
362f127
feat(web): add maria's sidebar header artwork toggle (#4652)
maxktz Jul 28, 2026
4f584da
feat(web): add appearance settings category (#4715)
maxktz Jul 28, 2026
9ccfd9d
fix(desktop): allow updater-controlled relaunch (#4721)
0x4bs3nt Jul 28, 2026
3c50a64
fix(web): prevent diff panel scroll jumping (#4724)
0x4bs3nt Jul 28, 2026
55dd016
Link inline code file paths in chat markdown (#4726)
juliusmarminge Jul 28, 2026
f1a68ac
Fix Android showcase capture and rebuild v2 queued rows (#4730)
juliusmarminge Jul 28, 2026
887dd6e
perf(server): negotiate permessage-deflate on the websocket (#4705)
t3dotgg Jul 28, 2026
b64ae88
docs: overhaul agent guidance (#4782)
t3dotgg Jul 28, 2026
2deea7a
Prevent sidebar row labels from truncating (#4789)
juliusmarminge Jul 28, 2026
8829e2f
perf(server): gzip large thread snapshots (#4788)
t3dotgg Jul 28, 2026
f2d2fb2
fix(web): stashed prompts now survive switching providers (#4787)
t3dotgg Jul 28, 2026
38a6e3c
Fix Git ref refresh resource storms (#4727)
juliusmarminge Jul 28, 2026
5fcdefd
perf(server): trim stale context-window rows and drop dead replay RPC…
t3dotgg Jul 28, 2026
1ba3d01
fix(web): defer command palette filesystem navigation (#2109)
juliusmarminge Jul 28, 2026
2919147
fix(release): skip scripts during Vercel installs (#4796)
t3dotgg Jul 28, 2026
936593c
refactor(client): share filesystem browse navigation (#4797)
juliusmarminge Jul 28, 2026
8fe8f9a
fix(mobile): defer filesystem navigation (#4799)
juliusmarminge Jul 28, 2026
8650f05
refactor(server): use native HTTP compression streams (#4798)
juliusmarminge Jul 29, 2026
60af905
Remove Connect waitlist and add GA announcement tooling (#4691)
juliusmarminge Jul 29, 2026
1b61ce1
Fix Connect sign-in settings label (#4806)
juliusmarminge Jul 29, 2026
694f8d1
chore(release): prepare v0.0.30
t3-code[bot] Jul 29, 2026
1b4830f
fix(desktop): restore T3 Connect sign-in (#4809)
PixPMusic Jul 29, 2026
08e4932
Simplify files panel header (#4828)
juliusmarminge Jul 29, 2026
72b960f
build(desktop): reduce installed app size by ~300MB (#4824)
wukko Jul 29, 2026
c3e8fb6
Update model version from claude-opus-4-8 to claude-opus-5 (#4832)
juliusmarminge Jul 29, 2026
3137c2b
Preserve the thread shell while detail loads (#4830)
juliusmarminge Jul 29, 2026
49c0d96
Reduce idle work and disk churn with native resource diagnostics (#2679)
juliusmarminge Jul 29, 2026
d19039a
fix(server): detect repositories after initialization (#4848)
StiensWout Jul 29, 2026
faea70a
perf(server): merge separate staged/unstaged numstat calls into singl…
UtkarshUsername Jul 29, 2026
85a8986
fix(git): disable external diff for review diff previews (#4854)
ohbentos Jul 29, 2026
fc28abf
Fix editable file focus and live syntax highlighting (#3979)
jakeleventhal Jul 29, 2026
e698796
fix(web): remember the rendered-markdown choice across threads (#4853)
Sy-D Jul 29, 2026
c701a1a
Merge upstream e6987965f
maarco Jul 29, 2026
bc6eb72
fix(upstream): clear merge CI failures
maarco Jul 31, 2026
a8d3dd5
fix(ci): wire renamed oxlint plugin workspace
maarco Jul 31, 2026
48a742d
fix(relay): align renamed service keys
maarco Jul 31, 2026
cfe5981
fix(ci): remove stale desktop artifact import
maarco Jul 31, 2026
22b0685
fix(auth): preserve legacy rpc scopes
maarco Jul 31, 2026
578efbc
test(web): align fork-specific branch and backdrop cases
maarco Jul 31, 2026
ed60261
test(web): keep image compression case within timeout
maarco Jul 31, 2026
725d9df
test(brand): align repository identity fixtures
maarco Jul 31, 2026
46fa0bd
test(git): keep derived fork fixture aligned
maarco Jul 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
108 changes: 108 additions & 0 deletions .agents/skills/marcode-upstream-integration/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
---
name: marcode-upstream-integration
description: Safely plan, resolve, verify, and hand off upstream T3 Code integrations into Marcode while preserving Marcode customizations, merge metadata, and recoverable work. Use for upstream plans, conflict resolution, merge audits, integration branches, or future fork-sync automation.
---

# Marcode Upstream Integration

Use this skill with `$marcode-fork-maintenance` and `$marcode-customizations`. Add
`$marcode-skill-upkeep`, `$unified-workspace-sidebar`, `$test-t3-app`, or `$test-t3-mobile`
when the touched paths require them.

## Non-negotiable invariant

An upstream integration must preserve both:

- upstream correctness, security, protocol, dependency, and operational behavior;
- Marcode's intentional product behavior, branding, compatibility identifiers, and source-of-truth
architecture.

Never solve a conflict with a whole-file ours/theirs choice, a mass replacement, or an assumption
that every Marcode change should win.

## Protected merge state

Treat the integration checkout as a protected state machine. During an active merge:

- Never run `git stash`, `git reset`, `git restore`, `git clean`, force push, or broad checkout.
- Never use stash as a temporary baseline comparison or as a way to test whether an error is
pre-existing. Use `git show <sha>:<path>`, `git diff <sha>...HEAD`, or a separate detached
worktree created from the baseline.
- Never run a command that can implicitly clean up the checkout without checking its effect on
`MERGE_HEAD` first.
- Do not let an agent or wrapper “normalize” the tree after an audit. A clean audit means the
merge state and staged resolution remain intact.

Before and after every stateful edit, test, install, formatter, or audit command, verify:

```sh
git rev-parse --abbrev-ref HEAD
git rev-parse --verify MERGE_HEAD
git diff --name-only --diff-filter=U
git status --short
```

The `MERGE_HEAD` SHA must remain unchanged until the merge is intentionally concluded. If it
disappears, stop immediately, report the command that preceded it, and do not continue editing or
declare success. Do not apply a recovery stash without Marco's explicit approval.

## Workflow

1. Read `AGENTS.md`, `.github/upstream-sync.yml`, and the upstream-sync runbook.
2. Run the read-only upstream status/plan command and record source SHA, target SHA, merge base,
changed paths, hotspots, and conflicts.
3. Create or use `integrate/upstream-<short-sha>` from the intended Marcode target. Confirm the
target branch and worktree before merging.
4. Merge the exact upstream SHA with the repository's guarded workflow. Record `MERGE_HEAD`.
5. Resolve conflicts path by path. For each path, write down upstream intent, Marcode intent, the
smallest combined rule, and the focused verification.
6. Stage only reviewed resolutions. Do not stage unrelated dirty work or generated backups.
7. Run focused tests and typechecks. Preserve the merge sentinel before and after each check.
8. Audit conflict markers, unmerged paths, staged diffs, `.bak` artifacts, compatibility names,
hotspot coverage, and the sibling surfaces named by the customization map.
9. Keep the integration branch uncommitted or unpushed until Marco explicitly authorizes the
final commit/push. Do not push on behalf of Marco.

## Safe baseline verification

To prove a failure is pre-existing, do not touch the active integration state. Prefer:

```sh
git show <target-sha>:<path>
git diff <target-sha>...HEAD -- <path>
```

If a command must execute against the baseline checkout, use a disposable detached worktree
outside the integration worktree, run the focused check there, then remove only that exact
temporary worktree after recording its result. Never stash the integration worktree to make room.

## Conflict rules

- Preserve upstream security and correctness changes even in hotspot files.
- Preserve Marcode's floating editor, unified workspace tree, branding, and other documented
product contracts when upstream assumes a different surface.
- Keep upstream-shaped compatibility identifiers such as `@t3tools/*`, storage keys, schemes,
bundle identifiers, protocol names, and internal labels unless a deliberate migration says
otherwise.
- Add comments only where ownership or an intentional divergence is non-obvious; explain the
invariant, not the merge history.
- Remove temporary `.bak` artifacts before the audit. `*.bak` is already ignored, but ignored does
not mean acceptable residue.
- Regenerate lockfiles with the repository's package manager; do not hand-edit them.

## Completion gate

Before reporting the integration ready, provide evidence for:

- exact source, target, merge-base, branch, and `MERGE_HEAD` SHAs;
- every conflict path and the combined upstream/Marcode decision;
- zero unmerged paths and zero conflict markers;
- expected staged diff, no unexpected deletions, no `.bak` files, and `git diff --cached --check`;
- focused tests, typechecks, and relevant live client verification;
- compatibility identifiers and sibling customizations checked;
- no force push, reset, restore, stash, clean, wholesale ours/theirs choice, or direct merge into
`main` occurred;
- anything still unverified or blocked.

If the merge sentinel changed unexpectedly, the completion gate fails even if the files look
resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
display_name: "Marcode Upstream Integration"
short_description: "Safely merge upstream changes into Marcode"
default_prompt: "Use $marcode-upstream-integration to plan, resolve, verify, and hand off an upstream sync without losing Marcode behavior or merge state."
2 changes: 1 addition & 1 deletion .github/upstream-sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ schedule:

pullRequest:
draft: true
titleTemplate: "chore(upstream): sync t3code through {upstreamShortSha}"
titleTemplate: "chore(upstream): sync marcode through {upstreamShortSha}"
labels:
- upstream-sync
reviewers: []
Expand Down
14 changes: 14 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ jobs:
cache: true
run-install: true

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron

Expand All @@ -31,6 +36,9 @@ jobs:
- name: Typecheck
run: vpr typecheck

- name: Check resource monitor formatting
run: cargo fmt --manifest-path native/resource-monitor/Cargo.toml -- --check

- name: Build desktop pipeline
run: vp run build:desktop

Expand All @@ -55,6 +63,9 @@ jobs:
cache: true
run-install: true

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron

Expand All @@ -64,6 +75,9 @@ jobs:
- name: Test
run: vp run test

- name: Test resource monitor
run: cargo test --locked --manifest-path native/resource-monitor/Cargo.toml

mobile_native_static_analysis:
name: Mobile Native Static Analysis
runs-on: macos-26
Expand Down
52 changes: 52 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -326,21 +326,29 @@ jobs:
platform: mac
target: dmg
arch: arm64
rust_target: aarch64-apple-darwin
resource_key: darwin-arm64
- label: macOS x64
runner: blacksmith-12vcpu-macos-26
platform: mac
target: dmg
arch: x64
rust_target: x86_64-apple-darwin
resource_key: darwin-x64
- label: Linux x64
runner: blacksmith-32vcpu-ubuntu-2404
platform: linux
target: AppImage
arch: x64
rust_target: x86_64-unknown-linux-gnu
resource_key: linux-x64
- label: Windows x64
runner: blacksmith-32vcpu-windows-2025
platform: win
target: nsis
arch: x64
rust_target: x86_64-pc-windows-msvc
resource_key: win32-x64
# - label: Windows arm64
# runner: windows-11-arm
# platform: win
Expand All @@ -360,6 +368,11 @@ jobs:
cache: true
run-install: true

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.rust_target }}

- name: Download relay client tracing config
uses: actions/download-artifact@v8
with:
Expand Down Expand Up @@ -600,13 +613,33 @@ jobs:
# done
# fi

- name: Collect resource monitor
shell: bash
run: |
set -euo pipefail
binary_name="t3-resource-monitor"
if [[ "${{ matrix.platform }}" == "win" ]]; then
binary_name="${binary_name}.exe"
fi
source_path="native/resource-monitor/target/${{ matrix.rust_target }}/release/${binary_name}"
target_dir="resource-monitor-publish/${{ matrix.resource_key }}"
mkdir -p "$target_dir"
cp "$source_path" "$target_dir/$binary_name"

- name: Upload build artifacts
uses: actions/upload-artifact@v7
with:
name: desktop-${{ matrix.platform }}-${{ matrix.arch }}
path: release-publish/*
if-no-files-found: error

- name: Upload resource monitor
uses: actions/upload-artifact@v7
with:
name: resource-monitor-${{ matrix.resource_key }}
path: resource-monitor-publish/${{ matrix.resource_key }}/*
if-no-files-found: error

publish_cli:
name: Publish CLI to npm
needs: [preflight, relay_public_config, build]
Expand Down Expand Up @@ -661,6 +694,24 @@ jobs:
- name: Build CLI package
run: vp run --filter t3 build

- name: Download resource monitors
uses: actions/download-artifact@v8
with:
pattern: resource-monitor-*
path: ${{ runner.temp }}/resource-monitors

- name: Bundle resource monitors into CLI package
shell: bash
run: |
set -euo pipefail
for artifact_dir in "$RUNNER_TEMP"/resource-monitors/resource-monitor-*; do
resource_key="${artifact_dir##*/resource-monitor-}"
target_dir="apps/server/dist/resource-monitor/${resource_key}"
mkdir -p "$target_dir"
cp "$artifact_dir"/t3-resource-monitor* "$target_dir/"
chmod +x "$target_dir"/t3-resource-monitor 2>/dev/null || true
done

- name: Publish CLI package
run: node apps/server/scripts/cli.ts publish --tag "${{ needs.preflight.outputs.cli_dist_tag }}" --app-version "${{ needs.preflight.outputs.version }}" --verbose

Expand Down Expand Up @@ -866,6 +917,7 @@ jobs:
echo "Deploying hosted web app for $channel_name channel."
deployment_url="$(
vp dlx vercel@53.1.1 deploy \
--archive=tgz \
--prod \
--skip-domain \
--yes \
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ dist-electron/
.showcase/
apps/mobile/.showcase/
artifacts/app-store/screenshots/
native/**/target/
node_modules/
.alchemy/
*.log
Expand Down
2 changes: 1 addition & 1 deletion .macroscope/check-run-agents/effect-service-conventions.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Effect Service Conventions
model: claude-opus-4-8
model: claude-opus-5
effort: high
input: full_diff
tools:
Expand Down
2 changes: 1 addition & 1 deletion .repos/alchemy-effect/.eslintignore
Original file line number Diff line number Diff line change
@@ -1 +1 @@
alchemy/test/**
alchemy/test/**
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
49 changes: 49 additions & 0 deletions .repos/alchemy-effect/.github/pr-assets/update-screenshots.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#!/usr/bin/env bash
# Regenerate the PR screenshots from the built site and commit them if changed.
# Usage: .github/pr-assets/update-screenshots.sh [pr-number]
# Assumes website/dist is freshly built (DOCS_FAST=1 bun astro build).
set -euo pipefail

PR="${1:-721}"
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
OUT="$ROOT/.github/pr-assets/$PR"
DIST="$ROOT/website/dist"
CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
PORT=4899

[ -d "$DIST" ] || { echo "website/dist missing — build first"; exit 1; }
mkdir -p "$OUT"

python3 -m http.server "$PORT" --directory "$DIST" >/dev/null 2>&1 &
SERVER_PID=$!
trap 'kill $SERVER_PID 2>/dev/null || true' EXIT
sleep 1

shot() { # shot <file> <path> [extra chrome flags...]
local file="$1" path="$2"; shift 2
"$CHROME" --headless=new --disable-gpu --hide-scrollbars \
--window-size=1600,1000 --virtual-time-budget=6000 \
"$@" --screenshot="$OUT/$file" "http://localhost:$PORT$path" 2>/dev/null
echo "$file: $(wc -c <"$OUT/$file" | tr -d ' ') bytes"
}

shot landing.png /
shot docs-tab.png /getting-started/
shot cloudflare-hub.png /cloudflare/
shot aws-hub.png /aws/
shot planetscale-hub.png /planetscale/
shot axiom-hub.png /axiom/
shot reference.png /providers/cloudflare/workers/durableobject/
shot cloudflare-hub-dark.png /cloudflare/ --force-dark-mode --blink-settings=preferredColorScheme=2

cd "$ROOT"
if git status --porcelain -- ".github/pr-assets/$PR" | grep -q .; then
git add ".github/pr-assets/$PR"
git commit -q -m "chore(website): refresh PR screenshots

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>"
git push
echo "screenshots refreshed and pushed"
else
echo "screenshots unchanged"
fi
41 changes: 41 additions & 0 deletions .repos/alchemy-effect/.github/workflows/check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: check

# Runs the website docs validator (`bun run docs:check`) on every PR
# so broken links / missing API references fail fast before merge.

on:
pull_request:
types: [opened, reopened, synchronize]

permissions:
contents: read

env:
NODE_VERSION: "24"

jobs:
check:
runs-on: ubuntu-22-large
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
# `bun install` needs the distilled submodule (workspace member)
submodules: true

- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ env.NODE_VERSION }}

- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
with:
bun-version: latest

- uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: ~/.bun/install/cache
key: bun-${{ runner.os }}-${{ hashFiles('bun.lock') }}
restore-keys: bun-${{ runner.os }}-

- run: bun install
- run: bun tsc -b
- run: bun run docs:check
Loading
Loading