Skip to content

Migration guide from other JavaScript ActivityPub libraries#708

Merged
dahlia merged 18 commits intofedify-dev:mainfrom
dahlia:docs/migrate
Apr 21, 2026
Merged

Migration guide from other JavaScript ActivityPub libraries#708
dahlia merged 18 commits intofedify-dev:mainfrom
dahlia:docs/migrate

Conversation

@dahlia
Copy link
Copy Markdown
Member

@dahlia dahlia commented Apr 21, 2026

Closes #690.

Read it at https://6a0da8df.fedify.pages.dev/manual/migrate.

Summary

Developers already running a federated service on another JavaScript ActivityPub library are a natural Fedify audience, but moving an existing service is non-trivial: actor keys, followed/followers collections, and queued outbound deliveries all need to survive the swap, and the mental model of each source library differs from Fedify's builder-and-dispatcher pattern.

This PR adds a single migration guide at docs/manual/migrate.md that walks through the transition from the four most likely source stacks, each with its own mental-model table, before/after code snippets, data-migration notes, common pitfalls, and a worked example:

  • #apex (activitypub-express): the Express + MongoDB middleware that powers Immers Space and Guppe Groups today. Covers key-pair carryover out of _meta.privateKey PEM blobs, followers carryover out of the streams collection, and the patched-http-signature situation that blocks Bun and complicates Deno.
  • #activity-kit (@activity-kit/*): the dormant TypeScript framework by Michael Puckett. Covers the plugin-based inbox hooks, the document-store DbAdapter interface, and the separation of the AuthAdapter and HTML page renderers out of the federation layer.
  • #hand-rolled: Darius Kazemi's express-activitypub reference and its descendants (rss-to-activitypub, bespoke bots). Covers the absent inbound signature verification, the Follow-only coverage, the hand-rolled signAndSend helper, and how to preserve the /u/:name URI scheme so existing followers keep resolving.
  • #activity-streams (activitystrea.ms): a pure vocabulary-only swap to @fedify/vocab, with side-by-side construction, serialisation, and parsing snippets.

Deliverables (per the issue comment that collapsed the originally proposed four pages into a single page)

  • Wrote docs/manual/migrate.md with a landing list and four per-library h2 sections (#apex, #activity-kit, #hand-rolled, #activity-streams).
  • Added a Migration entry to the Manual sidebar group in docs/.vitepress/config.mts, placed right after Integration (both topics are about onboarding Fedify into an existing codebase).
  • Cross-linked from docs/install.md (callout below the Alternative: Using @fedify/create section) and from the root README.md (the If you want to know more… list).
  • Registered ActivityKit as a proper noun in .hongdown.toml so the heading "From @activity-kit/* (ActivityKit)" survives sentence-case normalisation.

Scope notes

  • No CHANGES.md entry: docs-only change, following the project's convention.
  • The anchor for the hand-rolled section is #hand-rolled rather than #express-handrolled as the issue originally suggested, because Hongdown's sentence-case rewriter collides with the Express proper noun inside the anchor id; the shorter anchor avoids that and reads as well.
  • The sidebar label is Migration rather than a longer phrase, to match the brevity of its siblings (Integration, Deployment, etc.).
  • The activitystrea.ms section explicitly calls out that the upstream is not dormant (Evan Prodromou released v3.3.2 on 2026-04-03); the original issue description said otherwise, but the motivation for migrating is type safety and tooling alignment, not maintenance.
  • Worked examples inline the full Fedify code rather than pointing at examples/, because the rewrites are short (40 to 70 lines) and readers benefit from seeing the complete picture next to the source-library code it replaces.

Out of scope (per the issue)

  • Automated migration tooling (codemods, CLI migrators).
  • Guides for libraries outside the four listed above (@semapps/activitypub, @evanp/activitypub-bot, etc.).
  • Cross-language migration.

Verification

  • mise run fmt runs clean after every commit in the series.
  • mise docs:build succeeds; every Twoslash block in the after snippets type-checks against the real Fedify package exports.
  • Manual skim of the rendered page confirms the #apex, #activity-kit, #hand-rolled, and #activity-streams anchors resolve correctly from the landing list, the docs/install.md callout, and the README.md reference link.

dahlia added 6 commits April 21, 2026 12:00
Developers already running a federated service on another JavaScript
ActivityPub library are a natural Fedify audience, but moving an
existing service is non-trivial: actor keys, followers collections,
and in-flight deliveries all need to survive the swap.  This commit
lays down the structure for a single migration guide that will cover
the four most likely source stacks (activitypub-express, @activity-kit,
hand-rolled Express code, and activitystrea.ms); the per-library
sections will be filled in subsequent commits.

Place the page in the Manual sidebar group rather than a new top-level
group, following the revised direction in the issue.  Cross-link from
the Installation page and the root README so readers coming from
another library land on the guide before starting a fresh project.

Also register ActivityKit as a proper noun for Hongdown so the h2
heading survives sentence-case normalisation.

fedify-dev#690

Assisted-by: Claude Code:claude-opus-4-7
Cover the activitypub-express path end-to-end: why someone might leave
(forked http-signature blocking Bun and Deno, no shared inbox,
JSON-LD brittleness, in-process delivery), a mental-model table from
apex's explicit route wiring and EventEmitter pattern to Fedify's
dispatchers and inbox listeners, and five before/after snippets —
app bootstrap, actor dispatcher, key-pair continuity, inbox handler,
outbound sending, and followers collection.

Include a data-migration script that walks the apex Mongo collections
and converts each local actor's PEM private key to JWK form that
`importJwk` can consume, plus a cutover procedure that preserves actor
IRIs and public keys so remote followers do not break.  Close with a
worked Follow/Accept example that fits in ~60 lines end-to-end.

fedify-dev#690

Assisted-by: Claude Code:claude-opus-4-7
Cover @activity-kit/* end-to-end: why someone might leave (dormant
since 2023-11, document-store DbAdapter, AuthAdapter couples user
accounts to federation, no public verification helpers, page
renderers baked into the plugin config), a mapping table that walks
the four-adapter pattern to Fedify's dispatcher-and-queue model, and
four before/after snippets covering app bootstrap, actor records with
PEM keys, the Plugin `handleInboxSideEffect` hook, and outbound
`publishActivity` calls.

Include a data-migration script that stitches ActivityKit's split
storage back together (`saveString("privateKey", uid, pem)` keyed by
uid, public PEM on the actor entity) and converts both PEMs to JWK so
`importJwk` can load them.  Close with a signup + Follow/Accept
example showing that auth and HTML page rendering move out of the
federation layer and into ordinary web-framework routes.

Also shorten the sidebar label to "Migration" so the item fits
cleanly next to the other manual entries.

fedify-dev#690

Assisted-by: Claude Code:claude-opus-4-7
Cover the large population of small bots and blog-to-fediverse
bridges that descend from Darius Kazemi's express-activitypub
reference.  The move-over motivation is less about dormancy (the
reference was updated in 2025) and more about correctness: inbound
signatures are never verified, only `Follow` is handled, and the
hand-rolled `signAndSend` helper duplicates a fragile copy of the
HTTP Signatures spec.

Lift the reference's actor handler, WebFinger handler, inbox POST,
outbound signer, and account-creation route verbatim from commit
41f98af3, and pair each with the Fedify equivalent — showing that
the Fedify version is close to the same size but drops the shared-
inbox trust gap, adds `Undo(Follow)` coverage, and replaces the
hand-rolled crypto with `ctx.sendActivity`.

Present data migration as a pattern rather than a drop-in script,
since every hand-rolled schema is bespoke, and include a
better-sqlite3 example that walks the canonical `accounts` table.
Emphasise the actor URI-scheme preservation that keeps existing
remote followers working, and the need to cross-check followers that
may have been added without signature verification.

fedify-dev#690

Assisted-by: Claude Code:claude-opus-4-7
The migration guide was heavy on em dashes for parenthetical asides,
which reads as LLM-style prose and clashes with the project's usual
voice.  Rewrite every occurrence to use a comma, semicolon, colon, or
parentheses instead.  Where the em dash was carrying a real strong
pause, split the sentence or rephrase it.

No behavioural change; prose-only rewrite across the apex,
ActivityKit, and hand-rolled sections.

fedify-dev#690

Assisted-by: Claude Code:claude-opus-4-7
Cover the vocabulary-only migration from activitystrea.ms to
@fedify/vocab.  Unlike the other three source libraries this one is
actively maintained (v3.3.2, 2026-04-03 by Evan Prodromou / Social
Web Foundation), so the motivation is not dormancy but type safety,
immutability, and tooling alignment for codebases that already run on
Fedify.

Include a mental-model table mapping the fluent builder API to the
immutable class constructors, plus three side-by-side before/after
pairs: constructing a Create(Note) activity, serialising to JSON with
toJsonLd, and parsing an incoming document with Activity.fromJsonLd.
Call out the URL-instance, immutability, and Temporal.Instant
differences that trip up direct ports.

fedify-dev#690

Assisted-by: Claude Code:claude-opus-4-7
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 21, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a new comprehensive migration guide and sidebar entry, updates VitePress sidebar and docs cross-links, tweaks a config expression, and registers "ActivityKit" as a proper noun in .hongdown.toml. All changes are documentation/config-only except the TOML addition.

Changes

Cohort / File(s) Summary
Heading config
./.hongdown.toml
Added "ActivityKit" to [heading].proper_nouns so heading/title sentence-casing treats ActivityKit as a proper noun.
Docs config & nav
docs/.vitepress/config.mts
Refactored packageDenoJsonUrl construction to a multi-line new URL(...) form and inserted a Migration item into the MANUAL navigation/sidebar.
Migration guide
docs/manual/migrate.md
Added a large migration guide covering activitypub-express (apex), @activity-kit/* (ActivityKit), hand-rolled Express, and activitystrea.ms with checklists, mental-model mappings, code/data migration guidance, pitfalls, and worked examples.
Docs cross-links
docs/install.md, packages/fedify/README.md
Added a tip/callout in the installation docs linking to the migration guide and a "Migrating from other libraries" link in the package README.

Sequence Diagram(s)

(omitted — changes are documentation/config-only and do not introduce new multi-component runtime control flow)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • 2chanhaeng
  • sij411
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: adding a migration guide for developers transitioning from other JavaScript ActivityPub libraries to Fedify.
Description check ✅ Passed The description is comprehensive and directly related to the changeset, detailing the migration guide structure, four source-library sections, file modifications, and implementation decisions.
Linked Issues check ✅ Passed The PR fulfills the main objective from #690: delivering migration guides covering code rewrites and data continuity for four source libraries (apex, activity-kit, hand-rolled, activity-streams).
Out of Scope Changes check ✅ Passed All changes are scoped to the migration guide deliverables: documentation additions, config updates for sidebar navigation, and proper noun registration for casing consistency.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@issues-auto-labeler issues-auto-labeler Bot added activitypub/interop Interoperability issues component/federation Federation object related component/integration Web framework integration labels Apr 21, 2026
@dahlia dahlia requested a review from Copilot April 21, 2026 04:04
@dahlia dahlia self-assigned this Apr 21, 2026
@dahlia dahlia added type/documentation Improvements or additions to documentation and removed component/federation Federation object related component/integration Web framework integration activitypub/interop Interoperability issues labels Apr 21, 2026
@dahlia dahlia added this to the Fedify 2.2 milestone Apr 21, 2026
@dahlia
Copy link
Copy Markdown
Member Author

dahlia commented Apr 21, 2026

@codex review

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/manual/migrate.md`:
- Around line 1725-1728: The sentence claiming "`activitystrea.ms` is *not*
dormant... (v3.3.2, 2026-04-03)" should be edited to remove the hardcoded
version/date and to correct the inaccurate release claim; locate the paragraph
containing the literal `activitystrea.ms` and replace the specific version/date
text with a neutral phrase such as "continues to receive releases" (optionally
followed by a link to the official releases page) so the doc no longer asserts a
stale version or date.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: af0fbab2-2afd-4eb9-9d2f-90f460d6d8d1

📥 Commits

Reviewing files that changed from the base of the PR and between 5b82bc4 and f544558.

📒 Files selected for processing (5)
  • .hongdown.toml
  • docs/.vitepress/config.mts
  • docs/install.md
  • docs/manual/migrate.md
  • packages/fedify/README.md

Comment thread docs/manual/migrate.md
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a comprehensive migration guide (docs/manual/migrate.md) for users transitioning to Fedify from other JavaScript ActivityPub libraries, such as apex, ActivityKit, and hand-rolled Express implementations. The guide provides mental-model mappings, code examples, and data migration strategies, alongside updates to navigation and installation documentation for better discoverability. A typo was identified in a code example where the Note constructor incorrectly used the plural contents property instead of the singular content.

Comment thread docs/manual/migrate.md
@chatgpt-codex-connector
Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 🚀

ℹ️ 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".

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds a new manual page that guides developers migrating to Fedify from other JavaScript ActivityPub libraries, and wires it into the docs navigation and entry points so it’s discoverable during onboarding.

Changes:

  • Added a comprehensive migration guide at docs/manual/migrate.md covering four source stacks.
  • Linked the guide from installation docs and package README(s), and added it to the Manual sidebar.
  • Updated Hongdown proper nouns to preserve “ActivityKit” heading casing.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
packages/fedify/README.md Adds a “Migrating from other libraries” resource link to the docs site.
docs/manual/migrate.md New migration guide content, including code/data migration notes and examples.
docs/install.md Adds a TIP callout linking to the new migration guide.
docs/.vitepress/config.mts Adds “Migration” to the Manual sidebar items (and minor formatting).
.hongdown.toml Registers “ActivityKit” as a proper noun for heading normalization.

Comment thread docs/manual/migrate.md Outdated
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 21, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.
see 4 files with indirect coverage changes

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

dahlia added 2 commits April 21, 2026 13:21
The link target `./send.md#sending-to-followers` does not resolve; the
section in docs/manual/send.md is titled `"followers"`, which VitePress
slugifies to `#followers`.  Update the anchor accordingly, and change
the visible label to match the section title.

Addresses the review comments at:

  fedify-dev#708 (comment)
  fedify-dev#708 (comment)

Assisted-by: Claude Code:claude-opus-4-7
Naming a specific version and release date in prose will go stale.
The point the sentence needs to make is that the upstream continues
to publish releases, not which one was most recent when the guide
was written; rephrase accordingly.

Addresses the review comment at:

  fedify-dev#708 (comment)

Assisted-by: Claude Code:claude-opus-4-7
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/manual/migrate.md`:
- Around line 1487-1489: In the sentence containing "`The signup route does not
live inside `federation` any more;`" replace the two-word "any more" with the
single-word "anymore" so the line reads "The signup route does not live inside
`federation` anymore; it is just a normal POST handler..." to use the more
idiomatic form; update the text that references `federation` accordingly.
- Around line 511-514: Edit the sentence that currently reads "and the RSA
public key matches what those remote servers already have cached" to move the
adverb closer to the verb; change it to "and the RSA public key matches what
those remote servers have already cached" so the adverb "already" directly
modifies "have cached" for more natural flow.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 9465f18a-2aea-4450-b327-c83a7dc33dad

📥 Commits

Reviewing files that changed from the base of the PR and between f544558 and 1cd55be.

📒 Files selected for processing (1)
  • docs/manual/migrate.md

Comment thread docs/manual/migrate.md Outdated
Comment thread docs/manual/migrate.md Outdated
@dahlia dahlia requested a review from Copilot April 21, 2026 04:33
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Comment thread docs/.vitepress/config.mts
Comment thread docs/manual/migrate.md Outdated
The preceding bullet already writes it with the intercapped P
(matching the project's Hongdown proper-nouns list), but the
parenthetical on the same bullet still had the lowercase form.  Align
both occurrences.

Addresses the review comment at:

  fedify-dev#708 (comment)

Assisted-by: Claude Code:claude-opus-4-7
@dahlia dahlia requested a review from Copilot April 21, 2026 05:54
@dahlia
Copy link
Copy Markdown
Member Author

dahlia commented Apr 21, 2026

@codex review

@dahlia
Copy link
Copy Markdown
Member Author

dahlia commented Apr 21, 2026

/gemini review

@chatgpt-codex-connector
Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 👍

ℹ️ 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".

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a comprehensive migration guide for users transitioning to Fedify from other JavaScript ActivityPub libraries, such as activitypub-express, ActivityKit, and hand-rolled Express implementations. The guide is integrated into the documentation via updates to the VitePress configuration, installation instructions, and the main README. Feedback focuses on aligning the new documentation with the repository's style guide, specifically regarding heading levels and the placement of reference-style links.

Comment thread docs/manual/migrate.md
Comment thread docs/manual/migrate.md
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated no new comments.

@dahlia dahlia requested review from 2chanhaeng and sij411 April 21, 2026 05:58
@issues-auto-labeler issues-auto-labeler Bot added activitypub/interop Interoperability issues component/federation Federation object related component/integration Web framework integration labels Apr 21, 2026
@dahlia dahlia removed component/federation Federation object related component/integration Web framework integration activitypub/interop Interoperability issues labels Apr 21, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Pre-release has been published for this pull request:

Packages

Package Version JSR npm
@fedify/fedify 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/cli 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/amqp 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/astro 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/cfworkers 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/create 2.2.0-pr.708.19+4267edbb npm
@fedify/debugger 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/denokv 2.2.0-pr.708.19+4267edbb JSR
@fedify/elysia 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/express 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/fastify 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/fixture 2.2.0-pr.708.19+4267edbb JSR
@fedify/fresh 2.2.0-pr.708.19+4267edbb JSR
@fedify/h3 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/hono 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/init 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/koa 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/lint 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/mysql 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/nestjs 2.2.0-pr.708.19+4267edbb npm
@fedify/next 2.2.0-pr.708.19+4267edbb npm
@fedify/nuxt 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/postgres 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/redis 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/relay 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/solidstart 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/sqlite 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/sveltekit 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/testing 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/vocab 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/vocab-runtime 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/vocab-tools 2.2.0-pr.708.19+4267edbb JSR npm
@fedify/webfinger 2.2.0-pr.708.19+4267edbb JSR npm

Documentation

The docs for this pull request have been published:

https://6a0da8df.fedify.pages.dev

Copy link
Copy Markdown
Contributor

@2chanhaeng 2chanhaeng left a comment

Choose a reason for hiding this comment

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

LGTM and have some suggestions!

Comment thread docs/manual/migrate.md Outdated
Comment thread docs/manual/migrate.md Outdated
Comment thread docs/manual/migrate.md Outdated
Comment thread docs/manual/migrate.md
Comment thread docs/manual/migrate.md
dahlia added 3 commits April 21, 2026 19:10
The motivation prose undersold how quiet the source libraries actually
are today.  In the apex intro, note that its two named showcase
projects (Immers Space and Guppe Groups) have themselves gone quiet:
Guppe's repository is archived on GitHub and the service site now just
advertises the hosted platform, so apex is effectively a one-person
project.  In the ActivityKit "when to migrate" bullet, tighten "over
two years" to "several years" so the claim does not need yearly
revisiting as the guide ages.

Addresses the review comments at:

  fedify-dev#708 (comment)
  fedify-dev#708 (comment)

Assisted-by: Claude Code:claude-opus-4-7
The inline comment named only PostgresKvStore, which reads as if that
were the only production option.  Match the phrasing already used in
the ActivityKit section so readers see that any of the production
KvStore backends (Postgres, Redis, MySQL, SQLite, Deno KV, ...) is a
valid substitution.

Addresses the review comment at:

  fedify-dev#708 (comment)

Assisted-by: Claude Code:claude-opus-4-7
Hongdown was wrapping the cross-link onto its own line because it was
inside a trailing parenthetical, producing an awkward "see\n[*link*])"
shape.  Drop the parenthetical wrapping and use a semicolon so the
sentence reads naturally regardless of where the formatter wraps.

Addresses the review comment at:

  fedify-dev#708 (comment)

Assisted-by: Claude Code:claude-opus-4-7
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
docs/manual/migrate.md (1)

635-637: ⚠️ Potential issue | 🟠 Major

Avoid hardcoded ActivityKit version/date assertions.

Line 635–Line 637 hardcode v0.4.57/v0.4.58 and 2023-11-01. This will stale and can become incorrect over time (same class of issue previously fixed in the activitystrea.ms section). Please rephrase to a time-robust statement (e.g., “has seen little/no recent release activity”) and optionally link to the upstream releases/commits page instead of embedding exact dates/versions.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/manual/migrate.md` around lines 635 - 637, Replace the hardcoded
ActivityKit versions ("v0.4.57"/"v0.4.58") and date ("2023-11-01") in the
sentence that ends with "dormant bucket for production planning" with a
time-robust phrasing such as "has seen little or no recent release activity"
(keep the "dormant bucket for production planning" context if desired) and
optionally add a pointer to the upstream releases/commits page rather than
embedding exact versions/dates so the statement cannot become stale; search for
the literal strings "v0.4.57", "v0.4.58" or "2023-11-01" in the migrate.md
section to locate and update the sentence.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/manual/migrate.md`:
- Around line 252-266: The example declares getJwksByUsername as always
returning a JWKS object but later checks jwks == null in the
setKeyPairsDispatcher block; make the types consistent by updating
getJwksByUsername's return type to allow null (e.g., Promise<{ rsa: {
privateKey: JsonWebKey; publicKey: JsonWebKey } } | null>) and adjust the
placeholder implementation to return null when appropriate so the null-check in
setKeyPairsDispatcher remains valid; locate getJwksByUsername and the jwks usage
in setKeyPairsDispatcher to apply this change.

---

Duplicate comments:
In `@docs/manual/migrate.md`:
- Around line 635-637: Replace the hardcoded ActivityKit versions
("v0.4.57"/"v0.4.58") and date ("2023-11-01") in the sentence that ends with
"dormant bucket for production planning" with a time-robust phrasing such as
"has seen little or no recent release activity" (keep the "dormant bucket for
production planning" context if desired) and optionally add a pointer to the
upstream releases/commits page rather than embedding exact versions/dates so the
statement cannot become stale; search for the literal strings "v0.4.57",
"v0.4.58" or "2023-11-01" in the migrate.md section to locate and update the
sentence.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 7c93711a-7380-4e57-b965-6737c586d784

📥 Commits

Reviewing files that changed from the base of the PR and between 4267edb and d8862c0.

📒 Files selected for processing (1)
  • docs/manual/migrate.md

Comment thread docs/manual/migrate.md
dahlia added 2 commits April 21, 2026 19:34
Slightly less jargony framing for the same signal, matching the
in-thread suggestion.

Addresses the review comment at:

  fedify-dev#708 (comment)

Assisted-by: Claude Code:claude-opus-4-7
The hidden Twoslash boilerplate declared getJwksByUsername as always
returning a JWKS object, but the visible setKeyPairsDispatcher body
branches on `jwks == null`.  Mark the return type as `| null` so the
type annotation matches the runtime contract readers are meant to
implement (their own getJwksByUsername will naturally return null for
unknown identifiers).

Addresses the review comment at:

  fedify-dev#708 (comment)

Assisted-by: Claude Code:claude-opus-4-7
@dahlia dahlia requested a review from 2chanhaeng April 21, 2026 10:47
@dahlia dahlia merged commit 321811d into fedify-dev:main Apr 21, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type/documentation Improvements or additions to documentation

Development

Successfully merging this pull request may close these issues.

Migration guides from other JavaScript ActivityPub libraries

4 participants