---
title: "ActivityPub / Fedify Compliance Report Indiekit | Field | Value |…"
date: 2026-02-20T21:22:25.846Z
author: Ricardo Mendes
url: https://rmendes.net/notes/2026/02/20/activitypub-fedify-compliance-report-indiekit/
type: notes
ai_text_level: "0"
tokens: 1786
content_signal: ai-train=yes, search=yes, ai-input=yes
---

# ActivityPub / Fedify Compliance Report Indiekit | Field | Value |…

# ActivityPub / Fedify Compliance Report Indiekit

| Field | Value |
|-------|-------|
| **Target** | `rmendes.net` (`@rick`) |
| **Date** | 2026-02-20T21:20:08Z |
| **Tests** | 22 total: 22 passed, 0 failed, 0 skipped |
| **Grade** | **A+** — Full compliance — all tests pass |
| **Fedify** | ^1.10.3 |
| **Software** | Indiekit + @rmdes/indiekit-endpoint-activitypub |

---

## Summary

| Category | Pass | Fail | Skip | Status |
|----------|------|------|------|--------|
| Discovery | 3 | 0 | 0 | ✅ |
| Actor | 3 | 0 | 0 | ✅ |
| Collections | 8 | 0 | 0 | ✅ |
| Content | 3 | 0 | 0 | ✅ |
| Inbox | 2 | 0 | 0 | ✅ |
| Federation | 2 | 0 | 0 | ✅ |
| HTTP | 1 | 0 | 0 | ✅ |

---

## Detailed Results


### Discovery

| Test | Status | Detail |
|------|--------|--------|
| WebFinger resolution | ✅ PASS | WebFinger OK: acct:rick@rmendes.net → https://rmendes.net/activitypub/users/rick |
| NodeInfo endpoint | ✅ PASS | NodeInfo OK: indiekit v1.0.0, 249 local posts, protocol: activitypub |
| NodeInfo well-known chain | ✅ PASS | NodeInfo well-known OK: Discovery chain valid, schema 2.1 |

### Actor

| Test | Status | Detail |
|------|--------|--------|
| Actor lookup (fedify) | ✅ PASS | Actor OK: Person at https://rmendes.net/activitypub/users/rick |
| Actor required fields | ✅ PASS | Actor fields OK: inbox, outbox, followers, following, liked, featured, featuredTags, publicKey, assertionMethods, sharedInbox, name, icon, published |
| Actor JSON structure | ✅ PASS | Actor JSON OK: Person with all required fields, collection links, and security keys |

### Collections

| Test | Status | Detail |
|------|--------|--------|
| Outbox collection | ✅ PASS | Outbox OK: OrderedCollection with 249 items |
| Followers collection | ✅ PASS | Followers OK: OrderedCollection with 832 items |
| Following collection | ✅ PASS | Following OK: OrderedCollection with 2563 items |
| Liked collection | ✅ PASS | Liked OK: OrderedCollection with 68 items |
| Featured (pinned) collection | ✅ PASS | Featured OK: OrderedCollection with 0 pinned items |
| Featured tags collection | ✅ PASS | Featured tags OK: Collection with 0 tags |
| Collection URI resolution | ✅ PASS | Collection URIs OK: All actor collection endpoints return valid JSON |
| Outbox traversal (first page) | ✅ PASS | Outbox traversal OK: Contains Create activities with Note objects, proper addressing |

### Content

| Test | Status | Detail |
|------|--------|--------|
| Post returns AS2 JSON | ✅ PASS | Content negotiation OK: https://rmendes.net/notes/2026/02/20/f3f0e serves AS2 JSON |
| Root URL redirects to actor | ✅ PASS | Root redirect OK: https://rmendes.net/ → https://rmendes.net/activitypub/users/rick |
| Object dispatcher (dereference) | ✅ PASS | Object dispatcher OK: Note at https://rmendes.net/notes/2026/02/20/f3f0e |

### Inbox

| Test | Status | Detail |
|------|--------|--------|
| GET inbox returns 405 | ✅ PASS | Inbox GET OK: returns 405 Method Not Allowed |
| GET shared inbox returns 405 | ✅ PASS | Shared inbox GET OK: returns 400 (rejected) |

### Federation

| Test | Status | Detail |
|------|--------|--------|
| Instance actor (Application) | ✅ PASS | Instance actor OK: Application type with hostname identifier |
| WebFinger alias resolution | ✅ PASS | WebFinger alias OK: profile URL and /@handle both resolve |

### HTTP

| Test | Status | Detail |
|------|--------|--------|
| HTTP headers compliance | ✅ PASS | HTTP headers OK: Correct content types on actor, outbox, and WebFinger |

---

## Fedify Feature Compliance Matrix

Maps implemented Fedify features against the Fedify SDK capabilities.

### Core Federation

| Feature | Fedify API | Status | Notes |
|---------|-----------|--------|-------|
| Actor Dispatcher | `setActorDispatcher()` | ✅ Implemented | Person/Service/Group/Organization via config |
| Key Pairs | `setKeyPairsDispatcher()` | ✅ Implemented | RSA-2048 + Ed25519 dual keys |
| Handle Mapping | `.mapHandle()` | ✅ Implemented | Handle + hostname (instance actor) |
| Alias Mapping | `.mapAlias()` | ✅ Implemented | Profile URL + /@handle resolution |
| Inbox Listeners | `setInboxListeners()` | ✅ Implemented | Follow, Undo, Accept, Reject, Like, Announce, Create, Update, Delete |
| Shared Inbox | Inbox URL pattern | ✅ Implemented | `/activitypub/inbox` |
| WebFinger | Automatic | ✅ Implemented | Via Fedify's built-in handler |
| NodeInfo | `setNodeInfoDispatcher()` | ✅ Implemented | Schema 2.1, dynamic version |

### Collections

| Feature | Fedify API | Status | Notes |
|---------|-----------|--------|-------|
| Outbox | `setOutboxDispatcher()` | ✅ Implemented | Paginated, Create activities |
| Followers | `setFollowersDispatcher()` | ✅ Implemented | Paginated, ordered |
| Following | `setFollowingDispatcher()` | ✅ Implemented | Paginated, ordered |
| Liked | `setLikedDispatcher()` | ✅ Implemented | Objects the actor has liked |
| Featured | `setFeaturedDispatcher()` | ✅ Implemented | Pinned posts, admin UI |
| Featured Tags | `setFeaturedTagsDispatcher()` | ✅ Implemented | Hashtag discovery, admin UI |

### Content Resolution

| Feature | Fedify API | Status | Notes |
|---------|-----------|--------|-------|
| Object Dispatcher | `setObjectDispatcher()` | ✅ Implemented | Note/Article dereferencing |
| Content Negotiation | Custom middleware | ✅ Implemented | AS2 JSON for post URLs |

### Delivery & Reliability

| Feature | Fedify API | Status | Notes |
|---------|-----------|--------|-------|
| Message Queue | `RedisMessageQueue` | ✅ Implemented | Redis-backed persistent queue |
| Parallel Queue | `ParallelMessageQueue` | ✅ Implemented | Configurable worker count (default: 5) |
| Ordering Keys | `sendActivity({ orderingKey })` | ✅ Implemented | Per-follower ordering |
| Collection Sync | `sendActivity({ syncCollection })` | ✅ Implemented | FEP-8fcf, shared inbox sync |
| Permanent Failure Handler | `setOutboxPermanentFailureHandler()` | ⏳ Deferred | Requires Fedify 2.0+ API changes |
| Context Data | `createFederation({ contextData })` | ✅ Implemented | Handle + publication URL |

### Security & Identity

| Feature | Fedify API | Status | Notes |
|---------|-----------|--------|-------|
| HTTP Signatures | Automatic (RSA) | ✅ Implemented | Via key pairs dispatcher |
| Object Integrity Proofs | Automatic (Ed25519) | ✅ Implemented | Via assertionMethods multikey |
| Instance Actor | Application type actor | ✅ Implemented | Domain-level federation actor |
| Authorized Fetch | `.authorize()` predicate | ⏳ Deferred | Removed — requires authenticated document loader to avoid 401 loops with remote servers |
| Configurable Actor Type | Constructor selection | ✅ Implemented | Person/Service/Organization/Group |

### Discovery Extensions

| Feature | Fedify API | Status | Notes |
|---------|-----------|--------|-------|
| NodeInfo Dynamic Version | `createRequire()` | ✅ Implemented | Reads from @indiekit/indiekit/package.json |
| alsoKnownAs | Actor property | ✅ Implemented | For Mastodon account migration |
| Profile Attachments | PropertyValue | ✅ Implemented | Key-value metadata fields |


---

*Generated by activitypub-tests/run-all.sh — 2026-02-20T21:20:48Z*
