Skip to content

Commit 17358f2

Browse files
committed
Merge tag '2.3.6'
Fedify 2.3.6
2 parents f79eae3 + 25856db commit 17358f2

12 files changed

Lines changed: 646 additions & 31 deletions

File tree

‎CHANGES.md‎

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,59 @@ To be released.
396396
[#935]: https://github.com/fedify-dev/fedify/pull/935
397397

398398

399+
Version 2.3.6
400+
-------------
401+
402+
Released on August 23, 2026.
403+
404+
### @fedify/fedify
405+
406+
- Fixed some public relay subscription requests being rejected by
407+
implementations that compare `Follow.object` as a plain URL without JSON-LD
408+
expansion. The Public collection in relay `Follow` activities is now
409+
serialized as its full ActivityStreams URI instead of a compact IRI.
410+
[[#998], [#1008] by Jiwon Kwon\]
411+
412+
[#998]: https://github.com/fedify-dev/fedify/issues/998
413+
[#1008]: https://github.com/fedify-dev/fedify/pull/1008
414+
415+
### @fedify/cli
416+
417+
- Added a permanent removal warning to the `fedify init` command for Linux
418+
and other Unix-like system users before deleting existing content in the
419+
project directory.
420+
[[#989], [#997] by Jungmin Yoon\]
421+
422+
[#989]: https://github.com/fedify-dev/fedify/issues/989
423+
[#997]: https://github.com/fedify-dev/fedify/pull/997
424+
425+
### @fedify/init
426+
427+
- Added permanent removal warning for Linux or other UNIX-like system users
428+
before delete the existing content in the project directory.
429+
[[#989], [#997] by Jungmin Yoon\]
430+
431+
### @fedify/lint
432+
433+
- Fixed `@fedify/lint` actor property requirement rules reporting false
434+
positives when an actor dispatcher returns `null` for an actor that was not
435+
found. Non-null actor returns are still checked for the configured
436+
properties. [[#974]]
437+
438+
[#974]: https://github.com/fedify-dev/fedify/issues/974
439+
440+
### @fedify/vocab-runtime
441+
442+
- Added the [Controlled Identifiers v1.0] context to the preloaded JSON-LD
443+
contexts. The default document loader now resolves
444+
<https://www.w3.org/ns/cid/v1> locally, so transient W3C outages no longer
445+
prevent otherwise valid inbound documents from being parsed or verified.
446+
[[#932]]
447+
448+
[Controlled Identifiers v1.0]: https://www.w3.org/TR/cid-1.0/
449+
[#932]: https://github.com/fedify-dev/fedify/issues/932
450+
451+
399452
Version 2.3.5
400453
-------------
401454

@@ -1139,6 +1192,48 @@ Released on June 25, 2026.
11391192
[#756]: https://github.com/fedify-dev/fedify/pull/756
11401193
11411194
1195+
Version 2.2.11
1196+
--------------
1197+
1198+
Released on August 23, 2026.
1199+
1200+
### @fedify/fedify
1201+
1202+
- Fixed some public relay subscription requests being rejected by
1203+
implementations that compare `Follow.object` as a plain URL without JSON-LD
1204+
expansion. The Public collection in relay `Follow` activities is now
1205+
serialized as its full ActivityStreams URI instead of a compact IRI.
1206+
[[#998], [#1008] by Jiwon Kwon\]
1207+
1208+
### @fedify/cli
1209+
1210+
- Added a permanent removal warning to the `fedify init` command for Linux
1211+
and other Unix-like system users before deleting existing content in the
1212+
project directory.
1213+
[[#989], [#997] by Jungmin Yoon\]
1214+
1215+
### @fedify/init
1216+
1217+
- Added permanent removal warning for Linux or other UNIX-like system users
1218+
before delete the existing content in the project directory.
1219+
[[#989], [#997] by Jungmin Yoon\]
1220+
1221+
### @fedify/lint
1222+
1223+
- Fixed `@fedify/lint` actor property requirement rules reporting false
1224+
positives when an actor dispatcher returns `null` for an actor that was not
1225+
found. Non-null actor returns are still checked for the configured
1226+
properties. [[#974]]
1227+
1228+
### @fedify/vocab-runtime
1229+
1230+
- Added the [Controlled Identifiers v1.0] context to the preloaded JSON-LD
1231+
contexts. The default document loader now resolves
1232+
<https://www.w3.org/ns/cid/v1> locally, so transient W3C outages no longer
1233+
prevent otherwise valid inbound documents from being parsed or verified.
1234+
[[#932]]
1235+
1236+
11421237
Version 2.2.10
11431238
--------------
11441239
@@ -1689,6 +1784,40 @@ Released on April 28, 2026.
16891784
[#722]: https://github.com/fedify-dev/fedify/pull/722
16901785
16911786
1787+
Version 2.1.22
1788+
--------------
1789+
1790+
Released on August 23, 2026.
1791+
1792+
### @fedify/cli
1793+
1794+
- Added a permanent removal warning to the `fedify init` command for Linux
1795+
and other Unix-like system users before deleting existing content in the
1796+
project directory.
1797+
[[#989], [#997] by Jungmin Yoon\]
1798+
1799+
### @fedify/init
1800+
1801+
- Added permanent removal warning for Linux or other UNIX-like system users
1802+
before delete the existing content in the project directory.
1803+
[[#989], [#997] by Jungmin Yoon\]
1804+
1805+
### @fedify/lint
1806+
1807+
- Fixed `@fedify/lint` actor property requirement rules reporting false
1808+
positives when an actor dispatcher returns `null` for an actor that was not
1809+
found. Non-null actor returns are still checked for the configured
1810+
properties. [[#974]]
1811+
1812+
### @fedify/vocab-runtime
1813+
1814+
- Added the [Controlled Identifiers v1.0] context to the preloaded JSON-LD
1815+
contexts. The default document loader now resolves
1816+
<https://www.w3.org/ns/cid/v1> locally, so transient W3C outages no longer
1817+
prevent otherwise valid inbound documents from being parsed or verified.
1818+
[[#932]]
1819+
1820+
16921821
Version 2.1.21
16931822
--------------
16941823
@@ -2404,6 +2533,39 @@ Released on March 24, 2026.
24042533
[#599]: https://github.com/fedify-dev/fedify/pull/599
24052534
24062535
2536+
Version 2.0.26
2537+
--------------
2538+
2539+
Released on August 23, 2026.
2540+
2541+
### @fedify/cli
2542+
2543+
- Added a permanent removal warning to the `fedify init` command for Linux
2544+
and other Unix-like system users before deleting existing content in the
2545+
project directory. [[#989], [#997] by Jungmin Yoon\]
2546+
2547+
### @fedify/init
2548+
2549+
- Added permanent removal warning for Linux or other UNIX-like system users
2550+
before delete the existing content in the project directory.
2551+
[[#989], [#997] by Jungmin Yoon\]
2552+
2553+
### @fedify/lint
2554+
2555+
- Fixed `@fedify/lint` actor property requirement rules reporting false
2556+
positives when an actor dispatcher returns `null` for an actor that was not
2557+
found. Non-null actor returns are still checked for the configured
2558+
properties. [[#974]]
2559+
2560+
### @fedify/vocab-runtime
2561+
2562+
- Added the [Controlled Identifiers v1.0] context to the preloaded JSON-LD
2563+
contexts. The default document loader now resolves
2564+
<https://www.w3.org/ns/cid/v1> locally, so transient W3C outages no longer
2565+
prevent otherwise valid inbound documents from being parsed or verified.
2566+
[[#932]]
2567+
2568+
24072569
Version 2.0.25
24082570
--------------
24092571

‎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)