Town: Iceshrimp.NET joins, and its mentions go nowhere new
Iceshrimp.NET 2026.1.2-beta runs in the pasture with AuthorizedFetch on; its driver registers through the native API and takes Mastodon tokens from its OAuth form. The pair passes 225 cells. A new Iceshrimp note reaches its author's followers only, never an account it mentions or answers, until it is edited (G-0004, peer): delivery cells now say when a server holds a post only because it was addressed. The checker credits a seeder's fetch to the object fetched, not to the reply that needed it; the seeder skips the wait for an accept whose follow was already accepted; the PrivaPub driver signs its roots in again when a run reuses saved sessions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
This commit is contained in:
1 parent
0614bdcf18
commit
02a05d7a9a
12 files changed
+240
-9
No files matched your search
@@ -48,11 +48,20 @@ class World:
|
||||
self.facts = [json.loads(line) for line in f if line.strip()]
|
||||
self.ok_steps = {f["n"] for f in self.facts if f.get("type") not in ("error", "unsupported") and "n" in f}
|
||||
self.failed = {f["n"]: f for f in self.facts if f.get("type") in ("error", "unsupported")}
|
||||
# a fact's fetched_on names the objects its server had to fetch first (a reply's parent, a quote), and an
|
||||
# interaction that arrived_by fetch made its actor's server fetch its object: both are kept per fetched object
|
||||
fetched = defaultdict(set)
|
||||
for f in self.facts:
|
||||
for platform, refs in (f.get("fetched_on") or {}).items():
|
||||
for ref in refs:
|
||||
fetched[ref].add(platform)
|
||||
if f.get("type") == "interaction" and f.get("arrived_by") == "fetch":
|
||||
fetched[f["ref"]].add(self.platform(f["actor"]))
|
||||
self.objects = {}
|
||||
for f in self.facts:
|
||||
if f.get("type") == "object":
|
||||
o = dict(self.planner.objects[f["ref"]])
|
||||
o.update(uri=f["uri"], origin=f["origin"], fetched_on=f.get("fetched_on", {}))
|
||||
o.update(uri=f["uri"], origin=f["origin"], fetched_on=sorted(fetched[f["ref"]]))
|
||||
self.objects[f["ref"]] = o
|
||||
self.deleted = {f["ref"] for f in self.facts if f.get("type") == "mutation" and f["verb"] == "delete"}
|
||||
self.edited = {f["ref"] for f in self.facts if f.get("type") == "mutation" and f["verb"] == "edit"}
|
||||
@@ -197,8 +206,10 @@ class Sweep:
|
||||
continue
|
||||
if p in want and (receives is None or kind in receives):
|
||||
fetched = p in o.get("fetched_on", {})
|
||||
self.add(f"deliver.{kind}", o["origin"], p, held, ref, "held", "held" if held else "missing", through,
|
||||
how="fetched by the seeder" if fetched else None)
|
||||
# whether a follower of the author lives on p, or only the accounts it mentions or answers
|
||||
followed = any(self.w.platform(k) == p for k in self.w.follows.get(o["author"], ()))
|
||||
how = "fetched by the seeder" if fetched else None if followed or kind in ("circle", "community") else "addressed only"
|
||||
self.add(f"deliver.{kind}", o["origin"], p, held, ref, "held", "held" if held else "missing", through, how=how)
|
||||
elif kind in ("followers", "direct", "circle", "located") and p not in want:
|
||||
self.add(f"confine.{kind}", o["origin"], p, not held, ref, "absent", "held" if held else "absent", through)
|
||||
|
||||
|
||||
Reference in new issue
Block a user