This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

*: fmt

Signed-off-by: dawn <dawn@tangled.org>

author
dawn
date (Aug 1, 2026, 2:23 AM +0300) commit 45f54a2c parent fcebfe1d change-id qztsxolr
+62 -28
+12 -2
bobbin/crates/resolver/src/legacy_upgrade.rs
··· 784 784 let owner = did("did:plc:nel"); 785 785 let key = rkey("abcabcabcabcz"); 786 786 resolver 787 - .observe(owner.clone(), key.clone(), Some(did("did:plc:scallop")), None) 787 + .observe( 788 + owner.clone(), 789 + key.clone(), 790 + Some(did("did:plc:scallop")), 791 + None, 792 + ) 788 793 .await; 789 794 let json = br#"{"$type":"sh.tangled.repo.issue","repo":"at://did:plc:nel/sh.tangled.repo/abcabcabcabcz","title":"t","createdAt":"2026-05-01T00:00:00Z"}"#; 790 795 let legacy = ··· 1036 1041 let owner = did("did:plc:nel"); 1037 1042 let key = rkey("abcabcabcabcz"); 1038 1043 resolver 1039 - .observe(owner.clone(), key.clone(), Some(did("did:plc:scallop")), None) 1044 + .observe( 1045 + owner.clone(), 1046 + key.clone(), 1047 + Some(did("did:plc:scallop")), 1048 + None, 1049 + ) 1040 1050 .await; 1041 1051 let json = br#"{"$type":"sh.tangled.feed.star","createdAt":"2026-05-01T00:00:00Z","subject":"at://did:plc:nel/sh.tangled.repo/abcabcabcabcz"}"#; 1042 1052 let legacy =
+28 -6
bobbin/crates/resolver/src/lib.rs
··· 494 494 assert!(prior.is_none(), "first observation has no prior"); 495 495 496 496 let prior = resolver 497 - .observe(did("did:plc:nel"), rkey("core"), Some(did("did:plc:clam")), None) 497 + .observe( 498 + did("did:plc:nel"), 499 + rkey("core"), 500 + Some(did("did:plc:clam")), 501 + None, 502 + ) 498 503 .await; 499 504 assert_eq!( 500 505 prior, ··· 503 508 ); 504 509 505 510 let prior = resolver 506 - .observe(did("did:plc:nel"), rkey("core"), Some(did("did:plc:clam")), None) 511 + .observe( 512 + did("did:plc:nel"), 513 + rkey("core"), 514 + Some(did("did:plc:clam")), 515 + None, 516 + ) 507 517 .await; 508 518 assert!(prior.is_none(), "re-observing the same ident is a no-op"); 509 519 } ··· 529 539 ) 530 540 .await; 531 541 resolver 532 - .observe(did("did:plc:nel"), rkey("core"), Some(did("did:plc:clam")), None) 542 + .observe( 543 + did("did:plc:nel"), 544 + rkey("core"), 545 + Some(did("did:plc:clam")), 546 + None, 547 + ) 533 548 .await; 534 549 535 550 resolver ··· 619 634 ) 620 635 .await; 621 636 let got = resolver.lookup_by_name(&did("did:plc:olaren"), "ark").await; 622 - assert_eq!(got, None, "one owner's repo name must not answer for another's"); 637 + assert_eq!( 638 + got, None, 639 + "one owner's repo name must not answer for another's" 640 + ); 623 641 } 624 642 625 643 #[tokio::test] ··· 810 828 let resolver = RepoIdResolver::detached(RuntimeHasher::default()); 811 829 let owner = did("did:plc:nel"); 812 830 let key = rkey("abcabcabcabcz"); 813 - resolver.observe(owner.clone(), key.clone(), None, None).await; 831 + resolver 832 + .observe(owner.clone(), key.clone(), None, None) 833 + .await; 814 834 resolver 815 835 .fill_provisional( 816 836 RepoIdent::new(owner.clone(), key.clone()), ··· 1150 1170 Resolution::Mapped(did("did:plc:clam")), 1151 1171 ) 1152 1172 .await; 1153 - resolver.observe(owner.clone(), key.clone(), None, None).await; 1173 + resolver 1174 + .observe(owner.clone(), key.clone(), None, None) 1175 + .await; 1154 1176 let got = resolver.resolve(&owner, &key).await; 1155 1177 assert_eq!( 1156 1178 got,
+3 -1
bobbin/crates/runtime/src/network.rs
··· 116 116 builder = builder.header(name, value); 117 117 } 118 118 let body = resp.bytes().await?.to_vec(); 119 - Ok(builder.body(body).expect("response parts came from reqwest")) 119 + Ok(builder 120 + .body(body) 121 + .expect("response parts came from reqwest")) 120 122 } 121 123 } 122 124
+3 -3
bobbin/crates/xrpc/src/feed.rs
··· 4 4 use serde::Deserialize; 5 5 6 6 use bobbin_edge_index::{EdgeItem, EdgePage, EdgeStore, PageCursor, PageLimit, PageToken, SortDir}; 7 - use bobbin_types::ids::{nsid_static, owner_did_from_aturi, EdgeKey, SubjectRef}; 7 + use bobbin_types::ids::{EdgeKey, SubjectRef, nsid_static, owner_did_from_aturi}; 8 8 use bobbin_types::sh_tangled::actor::{ProfileViewBasic, ProfileViewDetailed, ViewerState}; 9 9 use bobbin_types::sh_tangled::feed::get_timeline::{ 10 10 FollowEvent, RepoEvent, StarEvent, TimelineItem, TimelineItemEvent, ··· 12 12 use bobbin_types::sh_tangled::feed::star::{Star, StarRecord, StarSubject}; 13 13 use bobbin_types::sh_tangled::graph::follow::{Follow, FollowRecord}; 14 14 use bobbin_types::sh_tangled::repo::{self, Repo, RepoRecord, RepoViewBasic}; 15 + use jacquard_common::DefaultStr; 15 16 use jacquard_common::types::string::{AtUri, Datetime, Did, Handle, UriValue}; 16 17 use jacquard_common::xrpc::XrpcResp; 17 - use jacquard_common::DefaultStr; 18 18 use jacquard_identity::resolver::IdentityResolver; 19 19 20 20 use crate::{ 21 - fetch, json_stream, paged_tail, parse_cursor, parse_limit, AppState, XrpcError, XrpcQuery, 21 + AppState, XrpcError, XrpcQuery, fetch, json_stream, paged_tail, parse_cursor, parse_limit, 22 22 }; 23 23 24 24 const REPO_NSID: &str = "sh.tangled.repo";
+6 -6
web/src/app.css
··· 195 195 } 196 196 197 197 @utility typography-monospace-large { 198 - @apply font-mono; 199 - font-size: 1rem; 198 + @apply font-mono; 199 + font-size: 1rem; 200 200 line-height: 1.5rem; 201 201 } 202 202 203 203 @utility typography-monospace-regular { 204 - @apply font-mono; 205 - font-size: 0.875rem; 204 + @apply font-mono; 205 + font-size: 0.875rem; 206 206 line-height: 1.375rem; 207 207 } 208 208 209 209 @utility typography-monospace-small { 210 - @apply font-mono; 211 - font-size: 0.75rem; 210 + @apply font-mono; 211 + font-size: 0.75rem; 212 212 line-height: 1.25rem; 213 213 } 214 214
+1 -1
web/src/lib/api/rawdiff.ts
··· 87 87 // RFC1123Z, always utc 88 88 const formatPatchDate = (input: string): string => { 89 89 const date = new Date(input); 90 - // a missing When is go's zero time, formats to this exact string 90 + // a missing When is go's zero time, formats to this exact string 91 91 if (Number.isNaN(date.getTime())) return "Mon, 01 Jan 0001 00:00:00 +0000"; 92 92 return ( 93 93 `${WEEKDAYS[date.getUTCDay()]}, ${pad(date.getUTCDate())} ${MONTHS[date.getUTCMonth()]} ` +
+2 -2
web/src/lib/components/reaction/reactions.ts
··· 84 84 const next = exists 85 85 ? groups.map((g) => (g.kind === kind ? withViewerReaction(g, viewerHandle, rkey) : g)) 86 86 : [...groups, { kind, count: 1, users: [viewerHandle], isReacted: true, viewerRkey: rkey }]; 87 - return ORDERED_REACTION_KINDS.filter((k) => next.some((g) => g.kind === k)).map((k) => 88 - next.find((g) => g.kind === k)! 87 + return ORDERED_REACTION_KINDS.filter((k) => next.some((g) => g.kind === k)).map( 88 + (k) => next.find((g) => g.kind === k)! 89 89 ); 90 90 }
+2 -2
web/src/lib/components/repo/fileDiff.ts
··· 87 87 lastOp = op; 88 88 } 89 89 90 - // a line without a trailing newline is the patch's "\ No newline" 91 - // marker, only possible at the end of the file 90 + // a line without a trailing newline is the patch's "\ No newline" 91 + // marker, only possible at the end of the file 92 92 const last = fragment.Lines?.[fragment.Lines.length - 1]; 93 93 if (last && !last.Line.endsWith("\n")) { 94 94 if (last.Op === LineOp.Context) {
+1 -1
web/src/lib/server/repo.ts
··· 23 23 const identifier = event.params.handle ?? ""; 24 24 const name = event.params.repo ?? ""; 25 25 26 - // rejects bare words, unrelated paths must 404 instead of resolving as actors 26 + // rejects bare words, unrelated paths must 404 instead of resolving as actors 27 27 if (!identifier.startsWith("did:") && !identifier.includes(".")) { 28 28 error(404, "Not found"); 29 29 }
+3 -3
web/src/markup.css
··· 106 106 } 107 107 108 108 .markup code { 109 - @apply rounded bg-background-inset px-1 py-0.5 font-mono typography-monospace-small; 109 + @apply rounded bg-background-inset px-1 py-0.5 typography-monospace-small font-mono; 110 110 } 111 111 112 112 .markup pre { ··· 115 115 116 116 /* pre above already has the padding and background, inline code would double it */ 117 117 .markup pre code { 118 - @apply bg-transparent p-0 font-mono typography-monospace-small; 118 + @apply bg-transparent p-0 typography-monospace-small font-mono; 119 119 } 120 120 121 121 .markup kbd { 122 - @apply rounded border border-border-default bg-background-subtle px-1.5 py-0.5 font-mono typography-monospace-small; 122 + @apply rounded border border-border-default bg-background-subtle px-1.5 py-0.5 typography-monospace-small font-mono; 123 123 } 124 124 125 125 .markup hr {
+1 -1
web/src/routes/[handle]/[repo]/commit/[spec=rawCommit]/+server.ts
··· 10 10 // the rawCommit matcher already guarantees this shape 11 11 const spec = parseRawCommit(event.params.spec); 12 12 if (!spec) error(404, "Not found"); 13 - // the knot compares hashes case-sensitively, normalize like go-git does 13 + // the knot compares hashes case-sensitively, normalize like go-git does 14 14 const ref = spec.ref.toLowerCase(); 15 15 16 16 const { ctx, view } = await resolveRepoFromParams(event);