Skip to content

Document the FEP-ef61 profile Fedify supports - #1198

Merged
dahlia merged 1 commit into
fedify-dev:mainfrom
dahlia:fep-ef61/profile
Sep 30, 2026
Merged

dahlia merged 1 commit into
fedify-dev:mainfrom
dahlia:fep-ef61/profile

Conversation

@dahlia

@dahlia dahlia commented Sep 30, 2026

Copy link
Copy Markdown
Member

Closes #1151.

The manual already documents each FEP-ef61 feature, but the sections are spread over about a dozen chapters, and none of them says what Fedify supports as a whole. The new Portable objects chapter (docs/manual/portable.md) brings together the supported features, the deliberate choices, and what is not supported.

Each supported feature gets a sentence or two and its key limit, such as unsecured collections being accepted only for an actor's five standard collections, and then a link to the detailed section. Linking instead of repeating keeps the details in one place, so the overview has little that can fall out of date.

The ap+ef61: canonical scheme and the map-local compound proof profile get a section of their own, since both may change in 3.0. Parsing a document rewrites ap:// to ap+ef61://, even in the cached JSON-LD, so the page says to keep received JSON rather than re-serialize it. It also says to convert compatible identifiers with fromCompatibleEf61Id() before comparing, because arePortableUrisEqual() rejects them.

Two points differ from #1151:

  • Document the FEP-ef61 profile Fedify supports #1151 gives WHATWG URL compatibility as a reason for ap+ef61:, but new URL("ap://did%3Akey%3A…") parses fine. The page only cites the FEP's warning that the scheme may change.
  • Other DID methods are not unsupported outright: a proof verifies if the document loader resolves the key. The page says Fedify lacks built-in resolution for them.

A separate chapter leaves room for the end-to-end walkthrough planned in #1150. The changelog notes amend the two existing entries on the scheme and compound proofs instead of adding a fragment, since #1150 will consolidate the FEP-ef61 entries anyway.

Also in this PR:

  • FEP-ef61 in FEDERATION.md, with a short section on the profile
  • JSDoc for formatIri() and canonicalizePortableUri() warning that their output scheme may change
  • A Portable media heading in docs/manual/vocab.md, so the hashlink text can be linked
  • A fix to docs/manual/object.md, which still said collection dispatchers were unreachable through the gateway

Fedify 2.4 implements much of FEP-ef61, but not all of it, and two of
its choices differ from the current FEP text or rest on semantics that
are not settled yet.  The manual described each feature in its own
chapter, but nowhere stated what Fedify supports as a whole.

This adds a "Portable objects" chapter to the manual that lists:

- the supported features, each linking to its detailed section;
- the deliberate choices, i.e., the ap+ef61: canonical scheme and the
  map-local compound proof profile, which Fedify keeps for 2.x but may
  change in 3.0, with advice on staying compatible;
- the parts that are not supported, such as the FEP-ae97 gateway
  endpoints, gateway discovery, synchronization across gateways, key
  rotation, built-in resolution of DID methods other than did:key, and
  gateways with paths, plus the work still planned for 2.4.

It also adds FEP-ef61 to FEDERATION.md, links the chapter from the
vocabulary and sending chapters, gives the hashlink media text in the
vocabulary chapter its own heading, fixes a stale note in the object
dispatcher chapter that said collection dispatchers were unreachable
through the gateway endpoint, notes in the JSDoc of formatIri() and
canonicalizePortableUri() that their output scheme may change in a
future major version, and mentions the profile in the changelog.

fedify-dev#1151
fedify-dev#288

Assisted-by: Claude Code:claude-opus-5-5
Assisted-by: Codex:gpt-6-astra
Assisted-by: Codex:gpt-6.1-sol
@netlify

netlify Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for fedify-json-schema canceled.

Name Link
🔨 Latest commit 89a87d9
🔍 Latest deploy log https://app.netlify.com/projects/fedify-json-schema/deploys/6abd17640b1d560008bbf9ed

@coderabbitai

coderabbitai Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: e0f3a0ba-1691-4c67-bff6-ddb62a220232

📥 Commits

Reviewing files that changed from the base of the PR and between 042b958 and 89a87d9.

📒 Files selected for processing (10)
  • CHANGES.md
  • FEDERATION.md
  • changes.d/fedify/compound-portable-proofs.md
  • changes.d/vocab-runtime/imported-unreleased.md
  • docs/.vitepress/config.mts
  • docs/manual/object.md
  • docs/manual/portable.md
  • docs/manual/send.md
  • docs/manual/vocab.md
  • packages/vocab-runtime/src/url.ts

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 3 remain after this review.


📝 Walkthrough

Walkthrough

The pull request adds a manual chapter for Fedify’s FEP-ef61 profile and updates related documentation. It describes supported portable-object behavior, ap+ef61: canonicalization, and map-local compound proofs. It does not change runtime behavior.

Changes

Portable-object profile

Layer / File(s) Summary
Supported portable-object profile
FEDERATION.md, docs/manual/portable.md, docs/manual/object.md, docs/manual/vocab.md, docs/.vitepress/config.mts, CHANGES.md
The documentation describes supported portable IDs, proof verification, gateway behavior, delivery, media, and profile limits. It adds the manual page to navigation and updates the collection-dispatcher description.
Portable URI canonicalization
docs/manual/portable.md, docs/manual/vocab.md, packages/vocab-runtime/src/url.ts, CHANGES.md, changes.d/vocab-runtime/imported-unreleased.md
The documentation describes ap+ef61: as Fedify’s canonical output, notes that both portable URI schemes are accepted and compared as equal, and recommends arePortableUrisEqual() for comparisons.
Map-local compound proofs
docs/manual/portable.md, docs/manual/send.md, changes.d/fedify/compound-portable-proofs.md, changes.d/vocab-runtime/imported-unreleased.md, CHANGES.md
The documentation describes the map-local proof profile as an interim interpretation that may change in Fedify 3.0. It also documents proof limitations and links to the portable-object guidance.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Other

Merge Risk: ⚪ Minimal · up to 89a87

This PR clarifies the existing portable-object profile without changing runtime behavior. No concrete merge-blocking risk is indicated.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: documenting Fedify’s supported FEP-ef61 profile.
Description check ✅ Passed The description is directly related to the documentation changes and explains the new portable-objects chapter, profile choices, limitations, compatibility guidance, and related updates.
Linked Issues check ✅ Passed Issue #1151 is directly linked and remains open. The PR documents the FEP-ef61 profile in docs/manual/portable.md, including supported portable IDs, did:key Ed25519 resolution, proof verification,…
Out of Scope Changes check ✅ Passed The changes stay within issue #1151. The new manual chapter and navigation entry provide the requested profile documentation. FEDERATION.md, changelog entries, related manual cross-references, and p…
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 2 files. (8 skipped: 8 …
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


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.

@dahlia
dahlia merged commit 4fe1b8c into fedify-dev:main Sep 30, 2026
19 checks passed
@dahlia
dahlia deleted the fep-ef61/profile branch September 30, 2026 14:12
@dahlia dahlia linked an issue Sep 30, 2026 that may be closed by this pull request
@codecov

codecov Bot commented Sep 30, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

Files with missing lines Coverage Δ
packages/vocab-runtime/src/url.ts 93.27% <ø> (ø)

... and 1 file 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

activitypub/compliance Specification compliance activitypub/interop Interoperability issues

Projects

No open projects

Development

Successfully merging this pull request may close these issues.

Document the FEP-ef61 profile Fedify supports

1 participant