Skip to content

Commit beb1d3c

Browse files
committed
Merge tag '2.2.11' into 2.3-maintenance
Fedify 2.2.11
2 parents 0c11307 + c351c6f commit beb1d3c

17 files changed

Lines changed: 686 additions & 31 deletions

File tree

‎CHANGES.md‎

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,53 @@ Version 2.3.6
88

99
To be released.
1010

11+
### @fedify/fedify
12+
13+
- Fixed some public relay subscription requests being rejected by
14+
implementations that compare `Follow.object` as a plain URL without JSON-LD
15+
expansion. The Public collection in relay `Follow` activities is now
16+
serialized as its full ActivityStreams URI instead of a compact IRI.
17+
[[#998], [#1008] by Jiwon Kwon\]
18+
19+
[#998]: https://github.com/fedify-dev/fedify/issues/998
20+
[#1008]: https://github.com/fedify-dev/fedify/pull/1008
21+
22+
### @fedify/cli
23+
24+
- Added a permanent removal warning to the `fedify init` command for Linux
25+
and other Unix-like system users before deleting existing content in the
26+
project directory.
27+
[[#989], [#997] by Jungmin Yoon\]
28+
29+
[#989]: https://github.com/fedify-dev/fedify/issues/989
30+
[#997]: https://github.com/fedify-dev/fedify/pull/997
31+
32+
### @fedify/init
33+
34+
- Added permanent removal warning for Linux or other UNIX-like system users
35+
before delete the existing content in the project directory.
36+
[[#989], [#997] by Jungmin Yoon\]
37+
38+
### @fedify/lint
39+
40+
- Fixed `@fedify/lint` actor property requirement rules reporting false
41+
positives when an actor dispatcher returns `null` for an actor that was not
42+
found. Non-null actor returns are still checked for the configured
43+
properties. [[#974]]
44+
45+
[#974]: https://github.com/fedify-dev/fedify/issues/974
46+
47+
### @fedify/vocab-runtime
48+
49+
- Added the [Controlled Identifiers v1.0] context to the preloaded JSON-LD
50+
contexts. The default document loader now resolves
51+
<https://www.w3.org/ns/cid/v1> locally, so transient W3C outages no longer
52+
prevent otherwise valid inbound documents from being parsed or verified.
53+
[[#932]]
54+
55+
[Controlled Identifiers v1.0]: https://www.w3.org/TR/cid-1.0/
56+
[#932]: https://github.com/fedify-dev/fedify/issues/932
57+
1158

1259
Version 2.3.5
1360
-------------
@@ -754,6 +801,48 @@ Released on June 25, 2026.
754801
[#756]: https://github.com/fedify-dev/fedify/pull/756
755802
756803
804+
Version 2.2.11
805+
--------------
806+
807+
Released on August 23, 2026.
808+
809+
### @fedify/fedify
810+
811+
- Fixed some public relay subscription requests being rejected by
812+
implementations that compare `Follow.object` as a plain URL without JSON-LD
813+
expansion. The Public collection in relay `Follow` activities is now
814+
serialized as its full ActivityStreams URI instead of a compact IRI.
815+
[[#998], [#1008] by Jiwon Kwon\]
816+
817+
### @fedify/cli
818+
819+
- Added a permanent removal warning to the `fedify init` command for Linux
820+
and other Unix-like system users before deleting existing content in the
821+
project directory.
822+
[[#989], [#997] by Jungmin Yoon\]
823+
824+
### @fedify/init
825+
826+
- Added permanent removal warning for Linux or other UNIX-like system users
827+
before delete the existing content in the project directory.
828+
[[#989], [#997] by Jungmin Yoon\]
829+
830+
### @fedify/lint
831+
832+
- Fixed `@fedify/lint` actor property requirement rules reporting false
833+
positives when an actor dispatcher returns `null` for an actor that was not
834+
found. Non-null actor returns are still checked for the configured
835+
properties. [[#974]]
836+
837+
### @fedify/vocab-runtime
838+
839+
- Added the [Controlled Identifiers v1.0] context to the preloaded JSON-LD
840+
contexts. The default document loader now resolves
841+
<https://www.w3.org/ns/cid/v1> locally, so transient W3C outages no longer
842+
prevent otherwise valid inbound documents from being parsed or verified.
843+
[[#932]]
844+
845+
757846
Version 2.2.10
758847
--------------
759848
@@ -1305,6 +1394,40 @@ Released on April 28, 2026.
13051394
[#722]: https://github.com/fedify-dev/fedify/pull/722
13061395
13071396
1397+
Version 2.1.22
1398+
--------------
1399+
1400+
Released on August 23, 2026.
1401+
1402+
### @fedify/cli
1403+
1404+
- Added a permanent removal warning to the `fedify init` command for Linux
1405+
and other Unix-like system users before deleting existing content in the
1406+
project directory.
1407+
[[#989], [#997] by Jungmin Yoon\]
1408+
1409+
### @fedify/init
1410+
1411+
- Added permanent removal warning for Linux or other UNIX-like system users
1412+
before delete the existing content in the project directory.
1413+
[[#989], [#997] by Jungmin Yoon\]
1414+
1415+
### @fedify/lint
1416+
1417+
- Fixed `@fedify/lint` actor property requirement rules reporting false
1418+
positives when an actor dispatcher returns `null` for an actor that was not
1419+
found. Non-null actor returns are still checked for the configured
1420+
properties. [[#974]]
1421+
1422+
### @fedify/vocab-runtime
1423+
1424+
- Added the [Controlled Identifiers v1.0] context to the preloaded JSON-LD
1425+
contexts. The default document loader now resolves
1426+
<https://www.w3.org/ns/cid/v1> locally, so transient W3C outages no longer
1427+
prevent otherwise valid inbound documents from being parsed or verified.
1428+
[[#932]]
1429+
1430+
13081431
Version 2.1.21
13091432
--------------
13101433
@@ -2020,6 +2143,39 @@ Released on March 24, 2026.
20202143
[#599]: https://github.com/fedify-dev/fedify/pull/599
20212144
20222145
2146+
Version 2.0.26
2147+
--------------
2148+
2149+
Released on August 23, 2026.
2150+
2151+
### @fedify/cli
2152+
2153+
- Added a permanent removal warning to the `fedify init` command for Linux
2154+
and other Unix-like system users before deleting existing content in the
2155+
project directory. [[#989], [#997] by Jungmin Yoon\]
2156+
2157+
### @fedify/init
2158+
2159+
- Added permanent removal warning for Linux or other UNIX-like system users
2160+
before delete the existing content in the project directory.
2161+
[[#989], [#997] by Jungmin Yoon\]
2162+
2163+
### @fedify/lint
2164+
2165+
- Fixed `@fedify/lint` actor property requirement rules reporting false
2166+
positives when an actor dispatcher returns `null` for an actor that was not
2167+
found. Non-null actor returns are still checked for the configured
2168+
properties. [[#974]]
2169+
2170+
### @fedify/vocab-runtime
2171+
2172+
- Added the [Controlled Identifiers v1.0] context to the preloaded JSON-LD
2173+
contexts. The default document loader now resolves
2174+
<https://www.w3.org/ns/cid/v1> locally, so transient W3C outages no longer
2175+
prevent otherwise valid inbound documents from being parsed or verified.
2176+
[[#932]]
2177+
2178+
20232179
Version 2.0.25
20242180
--------------
20252181
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
links:
3+
'#989': https://github.com/fedify-dev/fedify/issues/989
4+
'#997': https://github.com/fedify-dev/fedify/pull/997
5+
---
6+
- Added a permanent removal warning to the `fedify init` command for Linux
7+
and other Unix-like system users before deleting existing content in the
8+
project directory.
9+
[[#989], [#997] by Jungmin Yoon\]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
links:
3+
'#1008': https://github.com/fedify-dev/fedify/pull/1008
4+
'#998': https://github.com/fedify-dev/fedify/issues/998
5+
---
6+
- Fixed some public relay subscription requests being rejected by
7+
implementations that compare `Follow.object` as a plain URL without JSON-LD
8+
expansion. The Public collection in relay `Follow` activities is now
9+
serialized as its full ActivityStreams URI instead of a compact IRI.
10+
[[#998], [#1008] by Jiwon Kwon\]
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
links:
3+
'#989': https://github.com/fedify-dev/fedify/issues/989
4+
'#997': https://github.com/fedify-dev/fedify/pull/997
5+
---
6+
- Added permanent removal warning for Linux or other UNIX-like system users
7+
before delete the existing content in the project directory.
8+
[[#989], [#997] by Jungmin Yoon\]
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
links:
3+
'#974': https://github.com/fedify-dev/fedify/issues/974
4+
---
5+
- Fixed `@fedify/lint` actor property requirement rules reporting false
6+
positives when an actor dispatcher returns `null` for an actor that was not
7+
found. Non-null actor returns are still checked for the configured
8+
properties. [[#974]]
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
links:
3+
'#932': https://github.com/fedify-dev/fedify/issues/932
4+
---
5+
- Added the [Controlled Identifiers v1.0] context to the preloaded JSON-LD
6+
contexts. The default document loader now resolves
7+
<https://www.w3.org/ns/cid/v1> locally, so transient W3C outages no longer
8+
prevent otherwise valid inbound documents from being parsed or verified.
9+
[[#932]]
10+
11+
[Controlled Identifiers v1.0]: https://www.w3.org/TR/cid-1.0/

‎packages/fedify/src/compat/public-audience.test.ts‎

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { test } from "@fedify/fixture";
2-
import { Create, Note, PUBLIC_COLLECTION } from "@fedify/vocab";
2+
import { Create, Follow, Note, PUBLIC_COLLECTION } from "@fedify/vocab";
33
import { getDocumentLoader, preloadedContexts } from "@fedify/vocab-runtime";
44
import { assertEquals } from "@std/assert/assert-equals";
55
import { assertNotEquals } from "@std/assert/assert-not-equals";
@@ -59,6 +59,25 @@ test("normalizePublicAudience() normalises activities serialized by @fedify/voca
5959
assertEquals(nestedObject.to, PUBLIC_URI);
6060
});
6161

62+
test("normalizePublicAudience() normalises a public relay Follow object", async () => {
63+
const activity = new Follow({
64+
id: new URL("https://example.com/activities/follow-relay"),
65+
actor: new URL("https://example.com/alice"),
66+
object: PUBLIC_COLLECTION,
67+
});
68+
const compact = await activity.toJsonLd({ format: "compact" }) as Record<
69+
string,
70+
unknown
71+
>;
72+
assertEquals(compact.object, "as:Public");
73+
74+
const normalized = await normalizePublicAudience(
75+
compact,
76+
getDocumentLoader(),
77+
) as Record<string, unknown>;
78+
assertEquals(normalized.object, PUBLIC_URI);
79+
});
80+
6281
test("normalizePublicAudience() is a no-op without the CURIE", async () => {
6382
const input = {
6483
"@context": AS_CONTEXT,

‎packages/fedify/src/compat/public-audience.ts‎

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,16 @@ function hasPublicCurieInAddressing(
5555
if (typeof value !== "object" || value == null) return false;
5656
const record = value as Record<string, unknown>;
5757
for (const key of Object.keys(record)) {
58+
// Some relay implementations compare a subscription's Follow.object as a
59+
// plain URL without expanding its Public CURIE. Keep this type-specific
60+
// instead of treating every `object` property as a public-addressing field.
61+
if (
62+
record.type === "Follow" &&
63+
key === "object" &&
64+
(record[key] === "as:Public" || record[key] === "Public")
65+
) {
66+
return true;
67+
}
5868
// `@context` holds term definitions, not addressing values; skip it so
5969
// we do not traverse potentially large inline context objects.
6070
if (key === "@context") continue;
@@ -101,9 +111,14 @@ function rewritePublicAudience(
101111
const normalized: Record<string, unknown> = Object.create(null);
102112
for (const key of Object.keys(record)) {
103113
// `@context` is never an addressing field, so skip the recursion and
104-
// keep the reference intact.
114+
// keep the reference intact. Follow.object is handled separately because
115+
// `object` is not a public-addressing field for other activity types.
105116
const rewritten = key === "@context"
106117
? record[key]
118+
: record.type === "Follow" &&
119+
key === "object" &&
120+
(record[key] === "as:Public" || record[key] === "Public")
121+
? PUBLIC_COLLECTION.href
107122
: rewritePublicAudience(record[key], key, depth + 1);
108123
if (rewritten !== record[key]) changed = true;
109124
normalized[key] = rewritten;

0 commit comments

Comments
 (0)