Skip to content

feat: add packages changelog in website - #1546

Open
f15u wants to merge 70 commits into
mainfrom
add-changelog
Open

f15u wants to merge 70 commits into
mainfrom
add-changelog

Conversation

@f15u

@f15u f15u commented Sep 12, 2026

Copy link
Copy Markdown
Member

Type

  • Refactor
  • Feature
  • Bug Fix
  • Optimization
  • Documentation Update

Description

Related

  • Related Issue #
  • Closes #

@github-actions

github-actions Bot commented Sep 12, 2026 •

Copy link
Copy Markdown

Cloudflare Preview

URL: https://effectwebsite-websiteworker-pr-1546-l3lnpx2isrlraogh.matechs.workers.dev

Built from commit 5de1449.


This comment updates automatically with each deployment.

@f15u
f15u force-pushed the add-changelog branch 3 times, most recently from 70fa69b to 0e1f80f Compare September 18, 2026 00:51
@f15u
f15u marked this pull request as ready for review September 24, 2026 06:51
f15u added 5 commits October 7, 2026 17:14
Preview stores carry an expiresAfter TTL and Mixedbread answers
retrieveStore with 422 "Store with name ... has expired" instead of
404. Only NotFoundError was caught, so alchemy plan crashed in diff,
read, reconcile, and delete paths.

Add isExpired/isGone helpers and use them for all retrieve/delete
fallbacks so an expired store is recreated like a missing one.
…reate

Preview stores combined a fixed per-PR name with a 7-day idle TTL, but
Mixedbread rejects every operation on expired records (422) while the
name stays reserved (409 on create) with no API purge path. Any PR idle
over 7 days broke all its future preview deploys unrecoverably.

Drop expiresAfter from preview stores; the preview workflow already
destroys the stack on PR close, which deletes the store.

Harden the provider for the transition and for races:
- treat expired-store 422s as gone on every retrieve/delete path,
- after conflict-delete, wait for the name to free before recreating
  and fail with a clear message if it stays reserved,
- retry copy without tags when the key is scope-restricted (403)
  instead of falling back to an empty store.
A scope-restricted key answers 403 "Missing the read scope for this
store" where an admin key would 404, so a purged store is
indistinguishable from an out-of-scope one. Treat that narrow 403 as
gone on retrieve/delete paths; if the name is actually taken, create
still 409s and the conflict path reports it.
IMax153 and others added 24 commits October 7, 2026 13:11
The verifier resolved every API link to `<path>/index.html`, so links to
`changelog.xml` threw ENOTDIR and crashed the step. When no page exists,
accept the link if it points at a file, and treat ENOTDIR as missing.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A run that copied a store but failed before saving state left the store
under its name while state still pointed at an older, deleted store.
The next run tried to copy again, hit a 409, logged a misleading
fallback to an empty store, and only recovered through createStore's
conflict handler.

Look the store up by name when the stored id is gone, and resolve a 409
on copy the same way as one on create.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A scope-restricted key can be allowed to write a store's fields but not
its tags. Retry the update without tags instead of failing the deploy,
and fail with a key-scope message when that is denied too.
Make the version the main item and mute the label and date. Replace the bare
link with a full-width menu row with hover and focus fill.
Add a muted Latest badge tone and a latest flag on the version nav.
Changesets lists only patch notes for a stable release cut after a
pre-release series, so effect@4.0.0 had no Major Changes heading. Flag any
stable X.0.0 release that has earlier history.
Render changelog headings with the docs rehypeHeadingIds and
rehypeHeadingLinks plugins instead of a duplicated copy. Replace
ChangelogBadge with ApiBadge, and label the sidebar breaking dot.
# Conflicts:
#	packages/alchemy-mixedbread/src/VectorStore.ts
Search asked Mixedbread for 20 results across every version and source,
then hid the ones outside the selected version or chip. About a third of
the slots went to hidden v3 pages, and a chip such as in:changelog could
only hide results already fetched.

The selected version and result group now narrow the search itself. A
chip or View all runs one search for that group. Chips lose their counts,
which came from the mixed list. The other version is searched only when
the selected one returns nothing.
Posts about one docs version carry version: v3 or v4 in their frontmatter.
Search hides a post from the other version and keeps unmarked posts in
both. Release posts, v4 recaps, Module of the Week and This Week in Effect
issues from 2026-02-18 on are v4. Earlier issues, Effect 2 and 3 releases,
Schema releases, the 3.20 security update, effect-ai and from-react-to-effect
are v3.
# Conflicts:
#	apps/web/astro.config.ts
#	apps/web/src/content.config.ts
…red notes

Each changelog chunk starts with the package, version and release date.
Packages released in lockstep repeat the same notes, so search lists one
hit per set of notes and names the other packages. A changelog-only search
asks for 40 results to keep enough distinct releases after the collapse.
Also marks This Week in Effect 141 and Module of the Week 6 as v4.
Nonsense queries scored under 0.08 and real ones above 0.4, so results
under 0.1 are dropped and the empty state shows. The other-version lookup
on empty results is gone. A single chip with no results shows the empty
state too.
Docs and blog were uploaded as Markdown files that Mixedbread split itself.
For 74 of 426 files it did not read the frontmatter, so those pages had no
search metadata: the dialog dropped their chunks and the version filter
excluded them. 38% of docs and blog hits were frontmatter or section-list
chunks, and Module of the Week posts were never indexed.

Each page is now uploaded as chunks split at h2 and h3, with the page
title, breadcrumbs and anchors as chunk metadata. Every chunk starts with
the page title and context. A page overview chunk replaces the frontmatter
chunk. The version filter uses file metadata, and the Mixedbread CLI sync
is gone. Files from the old upload are deleted after the new ones are in.
A full upload of 100 files at once hit the write limit, and the client gave
up after 2 retries. Uploads and deletes now run 20 at a time, and the client
retries a 429 up to 8 times, waiting the time the API asks for.

This branch has not been deployed

No deployments
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