Something went wrong. Try again.
Monorepo for Tangled tangled.org
Something went wrong. Try again.
29 kB · 381 lines
Shell
at next-dev
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382#!/bin/sh# dev bootstrap:# - create accounts (alice, bob, charlie, david)# - write verified committer email fixtures for Deliberi# - create system label definitions under SYSTEM_DID# - load records to users PDSset -eu
. /scripts/lib.sh
ALICE_DID=did:plc:igzuueb63dytyy3tpaweofuuBOB_DID=did:plc:xbserj4jfuhzkbl3mszkvvrbCHARLIE_DID=did:plc:pgkgoz6rpvmgynswviohltpxDAVID_DID=did:plc:ryxq2u2b6sadhhjflpwiefg4
USERS="alice bob charlie david"OWNER_USER="${OWNER_USER:-alice}"SYSTEM_USER="${SYSTEM_USER:-alice}"SHARED_DIR="${SHARED_DIR:-/shared}"VERIFIED_EMAILS_FILE="${SHARED_DIR}/verified-emails.jsonl"VERIFIED_EMAILS_TMP="${VERIFIED_EMAILS_FILE}.tmp"TRANQUIL_PASSWORD="${TRANQUIL_PASSWORD:-Tangled-Dev9}"
mkdir -p "$SHARED_DIR": > "$VERIFIED_EMAILS_TMP"ACCOUNTS_FILE="${SHARED_DIR}/accounts.tsv"{ seed account alice "$ALICE_DID" seed account bob "$BOB_DID" seed account charlie "$CHARLIE_DID" seed account david "$DAVID_DID"} > "$ACCOUNTS_FILE"cat "$ACCOUNTS_FILE" >&2
OWNER_DID=""SYSTEM_DID=""while IFS="$(printf '\t')" read -r u did; do [ -n "$u" ] || continue jq -cn \ --arg did "$did" \ --arg email "${u}@${PDS_HOSTNAME}" \ '{did: $did, email: $email}' >> "$VERIFIED_EMAILS_TMP" if [ "$u" = "$OWNER_USER" ]; then OWNER_DID="$did" fi if [ "$u" = "$SYSTEM_USER" ]; then SYSTEM_DID="$did" fidone < "$ACCOUNTS_FILE"
[ -n "$OWNER_DID" ] || { printf 'OWNER_USER %s not in USERS list\n' "$OWNER_USER" >&2; exit 1; }[ -n "$SYSTEM_DID" ] || { printf 'SYSTEM_USER %s not in USERS list\n' "$SYSTEM_USER" >&2; exit 1; }
mv "$VERIFIED_EMAILS_TMP" "$VERIFIED_EMAILS_FILE"printf '[emails] wrote verified committer fixtures for %s\n' "$USERS" >&2printf '%s' "$OWNER_DID" > "${SHARED_DIR}/owner-did"printf '[owner] %s → %s/owner-did\n' "$OWNER_USER" "$SHARED_DIR" >&2printf '%s' "$SYSTEM_DID" > "${SHARED_DIR}/system-did"printf '[system] %s → %s/system-did\n' "$SYSTEM_USER" "$SHARED_DIR" >&2
# tranquil-pds account helper: same shape as add-accounts.sh, but against# tranquil's own URL/hostname, password, and no invite code.ensure_tranquil_account() { username="$1" handle="${username}.${TRANQUIL_HOSTNAME}" email="${username}@${TRANQUIL_HOSTNAME}"
did=$(curl -fsS "${TRANQUIL_URL}/xrpc/com.atproto.identity.resolveHandle?handle=${handle}" \ | jq -er '.did' 2>/dev/null) || did="" if [ -n "$did" ]; then printf '[skip] %s = %s\n' "$handle" "$did" >&2 printf '%s\n' "$did" return 0 fi
result=$(curl -fsS \ -H "Content-Type: application/json" \ -d "{\"email\":\"${email}\",\"handle\":\"${handle}\",\"password\":\"${TRANQUIL_PASSWORD}\"}" \ "${TRANQUIL_URL}/xrpc/com.atproto.server.createAccount")
did=$(printf '%s\n' "$result" | jq -er '.did') printf '[create] %s = %s (password: %s)\n' "$handle" "$did" "$TRANQUIL_PASSWORD" >&2 printf '%s\n' "$did"}
# label definitions (under SYSTEM_DID)put_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.label.definition/wontfix bafyreiebo64gaznprwa5dupobn5g6jq4mnkqfpokkyrwnjr3g5c3nv5p4aput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.label.definition/good-first-issue bafyreiavrw3gzde6brpwpv4cvppbhc2oo44oir2qkua2cws5dohvacucieput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.label.definition/duplicate bafyreihfl7w6kd5furzznbfyn4latxbdcjiolgofwtutgueldhozk6l43iput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.label.definition/documentation bafyreibaquqsypbwunsq6ny2r4jelcok6emf4zf4nok3y6jt6ovmorgwluput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.label.definition/assignee bafyreicik7y5r3x3f7mheyxjnf4m5c3sbznjwqcogoyjy3mgvwv76sfzaa
# shared env values for appviewLABEL_GFI=at://${SYSTEM_DID}/sh.tangled.label.definition/good-first-issueLABEL_DEFAULTS=$LABEL_GFILABEL_DEFAULTS=$LABEL_DEFAULTS,at://${SYSTEM_DID}/sh.tangled.label.definition/assigneeLABEL_DEFAULTS=$LABEL_DEFAULTS,at://${SYSTEM_DID}/sh.tangled.label.definition/documentationLABEL_DEFAULTS=$LABEL_DEFAULTS,at://${SYSTEM_DID}/sh.tangled.label.definition/duplicateLABEL_DEFAULTS=$LABEL_DEFAULTS,at://${SYSTEM_DID}/sh.tangled.label.definition/wontfix
printf '%s' "$LABEL_GFI" > "${SHARED_DIR}/label-gfi"printf '%s' "$LABEL_DEFAULTS" > "${SHARED_DIR}/label-defaults"printf '[env] wrote label-defaults, label-gfi\n' >&2
# service definitions (under OWNER_DID)put_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.knot/knot2.tngl.boltless.dev bafyreicy6lcrx7rt5gdc2mwyhfumry5khsiiebnukhesrnazy36qeqtq7iput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.spindle/spindle.tngl.boltless.dev bafyreiaoll33yuqxs462lewsglm5dxer6lrzmwmolpplb5kklqakcjcwlq
# tranquil-pds: basic account for org/delegation testingif [ -n "${TRANQUIL_URL:-}" ]; then ensure_tranquil_account troy >/dev/nullfi
keep_commit() { kc_did=${3#at://} kc_did=${kc_did%%/*} kc_token=$(service_token "$(login "$kc_did")" sh.tangled.git.keepCommit did:web:knot2.tngl.boltless.dev)
kc_kept=$(curl -sS -w '\n%{http_code}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $kc_token" \ -d "$(jq -nc --arg repo "$1" --arg oid "$2" --arg record "$3" \ '{repo:$repo, record:$record, source:{"$type":"sh.tangled.git.keepCommit#commit", repo:$repo, oid:$oid}}')" \ "${KNOT_URL}/xrpc/sh.tangled.git.keepCommit") kc_status=$(printf '%s\n' "$kc_kept" | tail -n1) [ "$kc_status" = 200 ] || fail \ "keepCommit $2 for $3: HTTP $kc_status: $(printf '%s\n' "$kc_kept" | sed '$d')" \ ' The record cites this commit, and a commit the knot never kept is one it may gc.' printf '[keep] %s %s\n' "$2" "$3" >&2}
# create_repo OWNER_DID TAG REPO_DID CREATE_JSON# → a repo DID the knot owns outright: records and git both live on the knotcreate_repo() { seed repo-genesis "$2" "$3" >/dev/null knot_create "$1" "$3" "$4" repo-handover}
# create_account_repo OWNER_DID USER REPO_DID CREATE_JSON# → a repo DID that stays a pds account: #atproto_pds is the pds, #tangled_knot the knot.# repo.create only takes a DID pointing at the knot, so the seed lends it for the call.create_account_repo() { seed account "$2" "$3" >/dev/null knot_create "$1" "$3" "$4" repo-lend seed repo-return "$3"}
# knot_create OWNER_DID REPO_DID CREATE_JSON HANDOVERknot_create() { cr_jwt=$(login "$1") cr_attempt=1 while :; do cr_resp=$(curl -sS -w '\n%{http_code}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(service_token "$cr_jwt" sh.tangled.repo.reserveKey did:web:knot2.tngl.boltless.dev)" \ -d "{\"repoDid\":\"$2\"}" \ "${KNOT_URL}/xrpc/sh.tangled.repo.reserveKey") cr_status=$(printf '%s\n' "$cr_resp" | tail -n1) [ "$cr_status" = 503 ] && [ "$cr_attempt" -lt 30 ] || break printf '[knot] registry projection warming, retrying reserveKey (%s/30)\n' "$cr_attempt" >&2 cr_attempt=$((cr_attempt + 1)) sleep 2 done cr_body=$(printf '%s\n' "$cr_resp" | sed '$d') case "$cr_status" in 200) ;; 409) printf '[skip] repo %s: %s\n' "$2" "$cr_body" >&2 return 0 ;; *) fail "reserveKey $2: HTTP $cr_status: $cr_body" ;; esac
seed "$4" "$2" "$(printf '%s\n' "$cr_body" | jq -er '.key')"
cr_resp=$(curl -sS -w '\n%{http_code}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(service_token "$cr_jwt" org.tangled.repo.createRepo did:web:knot2.tngl.boltless.dev)" \ -d "$3" \ "${KNOT_URL}/xrpc/org.tangled.repo.createRepo") cr_status=$(printf '%s\n' "$cr_resp" | tail -n1) [ "$cr_status" = 200 ] || fail "repo.createRepo $2: HTTP $cr_status: $(printf '%s\n' "$cr_resp" | sed '$d')" printf '[knot] repo %s\n' "$2" >&2}
# --- knot2 fixtures ---
curl -fsS -o /dev/null \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(service_token "$(login did:plc:igzuueb63dytyy3tpaweofuu)" sh.tangled.knot.addMember did:web:knot2.tngl.boltless.dev)" \ -d '{"subject":"did:plc:xbserj4jfuhzkbl3mszkvvrb"}' \ "${KNOT_URL}/xrpc/sh.tangled.knot.addMember"printf '[knot2] member did:plc:xbserj4jfuhzkbl3mszkvvrb\n' >&2
create_repo did:plc:igzuueb63dytyy3tpaweofuu eab5nhp7li3ul6pnyltb4eri44 did:plc:2pt74ankjflp6tryyp7aloqe '{"name":"core","defaultBranch":"master","did":"did:plc:2pt74ankjflp6tryyp7aloqe","source":{"$type":"org.tangled.repo.defs#sourceExternal","uri":"https://knot1.tangled.sh/did:plc:ioighzh4jnrhybayw65gfbia"}}'create_repo did:plc:xbserj4jfuhzkbl3mszkvvrb u6rcitsebxtvqt2ghf2dcdvmeu did:plc:35vbwlqbtciobm5emdvgg7by '{"name":"empty-repo","defaultBranch":"master","did":"did:plc:35vbwlqbtciobm5emdvgg7by"}'create_repo did:plc:xbserj4jfuhzkbl3mszkvvrb i5jq24nrdl7bvjetvflion5f34 did:plc:5a5citbzkm5lnzxpoxbhvpae '{"name":"core-fork","defaultBranch":"master","did":"did:plc:5a5citbzkm5lnzxpoxbhvpae","source":{"$type":"org.tangled.repo.defs#sourceTangled","did":"did:plc:2pt74ankjflp6tryyp7aloqe"}}'
# --- repo fixtures ---
put_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo/core bafyreia3swut4gudvwrf5rsil4fwbpbpodgimfpc6cwteunb7jjs3flmgqput_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/sh.tangled.repo/empty-repo bafyreihbflq2u4wx5rfguqrifzcae3yzf6mv3xu5i4rysyped5xg3zu3fmput_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/sh.tangled.repo/core-fork bafyreidig2uqdayjcxqzmygs5wd2zmw4a4zgkhxoz3nsgqcbdahi5sww5m
# --- issue fixtures ---
put_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.issue/3lzg6f3aia222 bafyreic2r74d7erf73vdtmjmrrviboaszl4qiw4qbmqephx2rppzddgqiqput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.issue/3lzg6guhjy222 bafyreidtwqsnnrtllse275hpiuqam2ohd7adxqbndhdw4sarfate7cni6yput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.issue/3lzg6inolq222 bafyreigm56yy34tcteb4krkjcjcjokq4dhy53ppojggedhmuco2dy7bufmput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.issue.state/3lzg6kgvni222 bafyreigmrwrjccic6k464n22agnpbzzc3bqy4arxuyu4d2brzi3fiuyjku
# --- pull request fixtures ---
upload_blob did:plc:igzuueb63dytyy3tpaweofuu bafkreih55dk36esbto3jwbwcdkeifojpnvtk5e3bgee5jifvicumponf54 application/gzip
put_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.pull/3lzg7tkxvq222 bafyreihownu2va6k5hu64weeicrtqchqpoc4s4wp57riyfwutpiavq4fhm
keep_commit did:plc:2pt74ankjflp6tryyp7aloqe f3c356fc8da46818a8ab0c24f22ee61854fe4b5f at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.pull/3ms6rk5d6gk22keep_commit did:plc:2pt74ankjflp6tryyp7aloqe 9a925efef6a0e6dfcd2d4317b4a1eee8752928b8 at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.pull/3ms6rk5d6gk22put_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.pull/3ms6rk5d6gk22 bafyreibiyipy4pt2hwayqvsfkdsabtkt5sdwswyhgce5jt353m5ftnqa7q
# a stale PR: sv-fe has moved on, so this base is no longer an ancestor of itkeep_commit did:plc:2pt74ankjflp6tryyp7aloqe a30e171f6297ac08777ce78bfea3fc9de27be8be at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.pull/3ms6rk5d6gk33keep_commit did:plc:2pt74ankjflp6tryyp7aloqe 7a486c07f881800c5dd5eec98dfb5fb10d96bddc at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.pull/3ms6rk5d6gk33put_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.pull/3ms6rk5d6gk33 bafyreidrrgnjp2rvallhvclrz6c3626znofcdzki32rqpwxoniokntflqe
# a long-running PR: four versions, each rebased onto a target that kept movingkeep_commit did:plc:2pt74ankjflp6tryyp7aloqe 912ecc1546e8a3698d7d68a9120ddc78fbf934d9 at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.pull/3mszlqgjlzsdnkeep_commit did:plc:2pt74ankjflp6tryyp7aloqe 0e96abbc399191e105951f0fc3338b7936451ca5 at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.pull/3mszlqgjlzsdnkeep_commit did:plc:2pt74ankjflp6tryyp7aloqe 8aec7d7c0e1eedf7dbbbe89f6d4f6048e8eb4eef at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.pull/3mszlqgjlzsdnkeep_commit did:plc:2pt74ankjflp6tryyp7aloqe 778fe6786af294b13c74ee45973cf6a8791dd0bb at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.pull/3mszlqgjlzsdnkeep_commit did:plc:2pt74ankjflp6tryyp7aloqe 928e8aca42bbbb8514cd666a780ac12f340fff96 at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.pull/3mszlqgjlzsdnkeep_commit did:plc:2pt74ankjflp6tryyp7aloqe a30623cbe5ea1e0e945cc94d8e9529320fe25577 at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.pull/3mszlqgjlzsdnkeep_commit did:plc:2pt74ankjflp6tryyp7aloqe 244eca1ec71c6c236118634ca3a6194a39f42246 at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.pull/3mszlqgjlzsdnkeep_commit did:plc:2pt74ankjflp6tryyp7aloqe 5d79aca95ea16e4f5e46bb3e5e00e7775252ba8e at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.pull/3mszlqgjlzsdnput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.repo.pull/3mszlqgjlzsdn bafyreifcpins77qs5cnfhuntlp5azeg7o23mzkkb6v5zghgxw56fag6kyi
# a fork-based PRkeep_commit did:plc:5a5citbzkm5lnzxpoxbhvpae 9a925efef6a0e6dfcd2d4317b4a1eee8752928b8 at://did:plc:xbserj4jfuhzkbl3mszkvvrb/sh.tangled.repo.pull/3mwkc7fnrkp22put_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/sh.tangled.repo.pull/3mwkc7fnrkp22 bafyreihebequvrz53n4al24eugrlnottfda773ml6y6pqxhi4rmphe3vuq
# --- string fixtures ---
put_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.string/3lzg6ma4pa222 bafyreihx3o6ivwpztaatrjyvg2ht7ia4fnnd75uxosaskxfhoxyb36jufqput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.string/3lzg6nzdqy222 bafyreib2p2xozo6vyjzkugfddguiz5eilhloqt6nljpojkv6ddxvw7wrp4put_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/sh.tangled.string/3lzg6psksq222 bafyreifdo4is5p56ekvfoar2qwp33uut7crvpa6giey6f2xq5b34mgkmw4
# --- comment fixtures ---
put_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/sh.tangled.feed.comment/3lzg6rlrui222 bafyreifzt4umgdji32zla3ygrgau2bkabufexs4gch7lkzkpbhed37wyxaput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.feed.comment/3lzg6teywa222 bafyreiavvwzko6g7trdtcrj2bjrbkp32elmvbm6cn653cbwimwpphg7ehyput_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/sh.tangled.feed.comment/3lzg6v67xy222 bafyreidmwf3i6zcadgoogygafg5ypnzjvy2p5lrc6bk3m6lzxp3uue2uoyput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.feed.comment/3lzg6wxgzq222 bafyreihnkoebjcdoozio4myhpamjxc6yudnrvhnl3ebvnovky5ochnrr5mput_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/sh.tangled.feed.comment/3mwkb2qu3gr22 bafyreiec3rgrrkh3pjqm364lab4aze23grwgjz5vjvhuvxb2sw5ip7ycyq
# review comments pinned to heads that later versions superseded: the embed keeps# them on their own commit while createdAt files them under the version they landed in
put_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/sh.tangled.feed.comment/3mszlqk2a4c22 bafyreicjb7nx5kufbfkjl2e2rruwjcwycucsyanmo22or746quqk3ddromput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.feed.comment/3mszlqm7b6d22 bafyreigw7o5yhualgauzbfvnl2zziu7eokml2vgwhourfbmuxml6kurefqput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.feed.comment/3mszlqp3c5e22 bafyreidzsdpsyiziwe5a5whn3i4qydofe4qqxkkkl56mmrpezrrnaki2ziput_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/sh.tangled.feed.comment/3mszlqr5d2f22 bafyreiasakgyfrwi26rh773jqrecrryu3n23ydrds7qjb46puvzty33n2i
# --- reaction fixtures ---
put_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/sh.tangled.feed.reaction/3lzg6yqo3i222 bafyreifiyyladojcg74vmjptormkfh6hudw3pya5icxij56y7mh7tvo2reput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.feed.reaction/3lzg72jv5a222 bafyreifcja6oh5wqx5qv7sxftflgafssle4hd3idmveqzvyd5nekzidk7aput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.feed.reaction/3lzg74d46y222 bafyreihp4ize3beva55bp5m3hk5v6x4zc7mexh5xv3xpjlepnjczfd6d3eput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.feed.reaction/3lzg764daq222 bafyreiavt45r66ifajkqi7hweogxpxctqsv4iisomc5fvhtiirmbnigl4u
# --- follow fixtures ---
put_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.graph.follow/3lzg77vkci222 bafyreifxt4uklvj2ktzpvdvqea7don63ds2txurjfm7a32kgwe3gtcgpfiput_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.graph.follow/3lzg7borea222 bafyreibapl2wjihcrnbuciak3bmnxxb4oflcnm5qlaf4blyrpel3ekrw2iput_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/sh.tangled.graph.follow/3lzg7dhyfy222 bafyreihcsuuah67nbxyg4anbkd6vay75cll3iu7pbdsqsn243hekvmnemeput_record at://did:plc:pgkgoz6rpvmgynswviohltpx/sh.tangled.graph.follow/3lzg7fb7hq222 bafyreidwfs3somf3c7272shoyaqufgkge25umlkhux3hh734mvfbsz32ymput_record at://did:plc:ryxq2u2b6sadhhjflpwiefg4/sh.tangled.graph.follow/3lzg7h2gji222 bafyreicf3kg2po673jitncs7acx5xn55do6uea5rjcqc6rtctwksjs7tduput_record at://did:plc:ryxq2u2b6sadhhjflpwiefg4/sh.tangled.graph.follow/3lzg7itnla222 bafyreiamrcxx3thilb7527adx7l52jmxtbo4emnkygto3zwxuhz7nbhsk4
# --- vouch fixtures (subject is the rkey, not a record field) ---
put_record at://did:plc:igzuueb63dytyy3tpaweofuu/sh.tangled.graph.vouch/did:plc:xbserj4jfuhzkbl3mszkvvrb bafyreidoae6qpcdmrxfmv6uaqdvrx6g6gtqmqmgliwvfbl32zyyxedbmlaput_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/sh.tangled.graph.vouch/did:plc:pgkgoz6rpvmgynswviohltpx bafyreiblkzqcazpf7tejjy6qcoy2mjcv76plvxglp2qrvc7gfv3vun4vgyput_record at://did:plc:pgkgoz6rpvmgynswviohltpx/sh.tangled.graph.vouch/did:plc:ryxq2u2b6sadhhjflpwiefg4 bafyreibnbcgbixxodftgl7p3nuy3c4zkwuy6wwqkiu5ffapdnqib7xvay4put_record at://did:plc:ryxq2u2b6sadhhjflpwiefg4/sh.tangled.graph.vouch/did:plc:igzuueb63dytyy3tpaweofuu bafyreidehdrafmu6ulwdwvch6w72txasuej2balv536pruclzufssrmiyyput_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/sh.tangled.graph.vouch/did:plc:ryxq2u2b6sadhhjflpwiefg4 bafyreigyjjkpn4z7ixunsztkariigfkqefth5pfja2csuhrrep3uywp5t4
# === org.tangled.* fixtures ===
# knot rkeys are knot-local; core, core-fork and empty-repo are taken by the sh.tangled repos abovecreate_repo did:plc:igzuueb63dytyy3tpaweofuu mrnt3a4g3bjjzj3odx3ruuxwdq did:plc:b5yvrkvscma5lulapq4wgb3l '{"name":"org-core","defaultBranch":"master","did":"did:plc:b5yvrkvscma5lulapq4wgb3l","source":{"$type":"org.tangled.repo.defs#sourceExternal","uri":"https://knot1.tangled.sh/did:plc:ioighzh4jnrhybayw65gfbia"}}'create_repo did:plc:xbserj4jfuhzkbl3mszkvvrb dql6gpe3nhnl6cct5lij6ii6ai did:plc:ar26riy42ojkoa2d7hkqzfzr '{"name":"org-core-fork","defaultBranch":"master","did":"did:plc:ar26riy42ojkoa2d7hkqzfzr","source":{"$type":"org.tangled.repo.defs#sourceTangled","did":"did:plc:b5yvrkvscma5lulapq4wgb3l"}}'create_repo did:plc:xbserj4jfuhzkbl3mszkvvrb tee7mkhzubkuk5q25w3phbxuqe did:plc:y2lr7veruwjr3v6hb3qbnzgg '{"name":"org-empty-repo","defaultBranch":"master","did":"did:plc:y2lr7veruwjr3v6hb3qbnzgg"}'
# --- org.tangled repo fixtures ---
# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.repo.manifest/self bafyreie6djkwfaeyrpulc373tkf4hoimhfc5t2jdrmsgqkblalrcl52y7a# put_record at://did:plc:qbqdycrgcna6n7w5lskwod6y/org.tangled.repo.manifest/self bafyreic6d75ygy5fdaoonunl4v5ki6nyazawttswpas3giafc7dgd7uuza# put_record at://did:plc:77uzwanh7ixsvttf6cvkoszj/org.tangled.repo.manifest/self bafyreid3zlshhjzryrysr3egr3yutd26fsmq2kfdaibiccx7sq57qwvuty# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.git.refs/self bafyreigkwkkfyqmuwvl5zx552ivpes3epirw6dpsvzo546kc4agy7r4gtm# put_record at://did:plc:qbqdycrgcna6n7w5lskwod6y/org.tangled.git.refs/self bafyreigkwkkfyqmuwvl5zx552ivpes3epirw6dpsvzo546kc4agy7r4gtm# put_record at://did:plc:77uzwanh7ixsvttf6cvkoszj/org.tangled.git.refs/self bafyreig6c2mmv2wctety2ngvjho6rx7dbvmlrbuzfybf5ygdxxqhpjdef4# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.label.definition/wontfix bafyreihhxjm2coiw242usm6hnid3i7ius6kdkkyph7afjc7jjp2fb7bz6e# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.label.definition/good-first-issue bafyreiguf6otpa3jlctujcnvfhqt6thqx76ol5sqmanzhkiru24kdgple4# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.label.definition/duplicate bafyreie224tuyp3mrrp5cosezrcmdxgutjctoresjsv3r4pfbwvlnqyre4# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.label.definition/documentation bafyreif5mbys4b7mn4rquma3gqqnr3ldjgpspdkfqfu3feolsrftnxznneput_record at://did:plc:igzuueb63dytyy3tpaweofuu/org.tangled.repo.declaration/core bafyreigpl5grnco2z7nkadnag57vntcoc7ye2oq22fgsqirkjgwbgv6gx4put_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/org.tangled.repo.declaration/core-fork bafyreiacqdhafvv7x4aefu4zyheqhyk24dbxtlcqxowgfpz5g2wpeclkgmput_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/org.tangled.repo.declaration/empty-repo bafyreic2ngxwckzpfk7tlzxofcfagfld3dg2qslubaewelbpkoz5qsepcy
# --- org.tangled snippet fixtures ---
upload_blob did:plc:igzuueb63dytyy3tpaweofuu bafkreifqrrwn3ioqkrquhibb3csu6i3kogd76uk6ktptc7s5exim6rfu6u text/plainput_record at://did:plc:igzuueb63dytyy3tpaweofuu/org.tangled.snippet.string/3lzg6ma4pa222 bafyreiaskfifni2inl42xzbei2thp7wdxepgzeitnmv2aj7ww7sc5wq3neupload_blob did:plc:igzuueb63dytyy3tpaweofuu bafkreieify5bix4cmrj4iuxiceb6srr2boltkbbf7yizwtgwurqv42sltm text/plainput_record at://did:plc:igzuueb63dytyy3tpaweofuu/org.tangled.snippet.string/3lzg6nzdqy222 bafyreifweqc5cgslk56emxrcqisv6ctlza4mfkhxdcs5iuba3t6kfagh3yupload_blob did:plc:xbserj4jfuhzkbl3mszkvvrb bafkreiaovmar5rtz7dw35cfylzmb3htqg7kpksf76pvascxlv3s56rb7o4 text/plainput_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/org.tangled.snippet.string/3lzg6psksq222 bafyreieohwiytxwzkuczdrm35hxpdm2h2jyuffg2fatpxpo7iyxfnuk5ka
# --- org.tangled ticket fixtures (issues and PRs share one sequence) ---
# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.track.ticket/1 bafyreidbxu22o4wwg2io5yd26ju4uadsdq3ikpff2hofr5cgnah356mnhu# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.track.ticket/2 bafyreig33fgtw2h2lwz7uex4yepqgq5kez64vm56trqlhsnrup37am6r2q# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.track.ticket/3 bafyreie3gbwyh7d5ctgicimydbxyvini2xvmuux4ambboqyrv24nnuvcee# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.track.ticket/4 bafyreiedbneftlnpu47xjsqkxtncjxoe324kpklmdd4qnttvuptadfjh2y# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.track.ticket/5 bafyreidjm7iv7dstbkm5q5gt4haea6qxekd4lbu2ant2c3m5yqucqyz2wi# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.review.patch/bafyreiarut2cqseyjfwefvssd4pnbyqjtzl5n4nc5gqbgpbsdekdf3mfwu bafyreiarut2cqseyjfwefvssd4pnbyqjtzl5n4nc5gqbgpbsdekdf3mfwu# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.review.patch/bafyreicbcuncwl73zhwlwxtgqfj3o72mlgdp3ncfvvolfwce535kitqwni bafyreicbcuncwl73zhwlwxtgqfj3o72mlgdp3ncfvvolfwce535kitqwni# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.track.ticket/6 bafyreieopiuug56i4hcivpqrlgt4govlivo6iy6id3vshljqgt4awnof4u# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.review.patch/bafyreidyg53s7fyjbh63abeog2h2g7vg5g67shjkk2hukto76jo4gjgb3u bafyreidyg53s7fyjbh63abeog2h2g7vg5g67shjkk2hukto76jo4gjgb3u# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.track.ticket/7 bafyreign52t3km5rd6l2x6aulj6hixoojfmifrdjbic2coo7musy6gutla# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.review.patch/bafyreigsqm243ma2cjtfwcmulqkyvcdrrbakd5amj2vswxcoukgsl7bo3a bafyreigsqm243ma2cjtfwcmulqkyvcdrrbakd5amj2vswxcoukgsl7bo3a# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.track.ticket/8 bafyreidv3qgzq3mm53gfcxfep5ztun3tjfkhpm54odte3gjh2j6oiwko4y# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.review.patch/bafyreifhetuhjxfajktrkc5wc4a3ikmg5ytard3b6g5plli3t3p5rkbuf4 bafyreifhetuhjxfajktrkc5wc4a3ikmg5ytard3b6g5plli3t3p5rkbuf4# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.review.patch/bafyreignfuruuizasc4cinen3s7cdmdyczm6t37y6eof36aoobmeclv2tq bafyreignfuruuizasc4cinen3s7cdmdyczm6t37y6eof36aoobmeclv2tq# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.review.patch/bafyreig4rj2sbb3jjo6l2djoqzlim6a32vc7jfpa7pxub5ctv2c7eveavm bafyreig4rj2sbb3jjo6l2djoqzlim6a32vc7jfpa7pxub5ctv2c7eveavm# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.review.patch/bafyreiglruqe4czsrzewu6yy2evebgr6yv5ajgdztxoodaihsoddfn3g4u bafyreiglruqe4czsrzewu6yy2evebgr6yv5ajgdztxoodaihsoddfn3g4u
# --- org.tangled comment & reaction fixtures ---
# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.feed.comment/3lzg6rlrui222 bafyreietwvvhovqaxq2llr35tg7fslxikhjfffulmovin3q6ngfbsyqkle# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.feed.comment/3lzg6teywa222 bafyreigsfex4ezvor5tig2u2fvh7dwfxanrpu2t5a6iut2pf2h6tov5z7iput_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/org.tangled.feed.comment/3lzg6v67xy222 bafyreic35k7ygx5jg5mxqcu2x56ptgvynt4eb3g535fuf5azyfranlxok4put_record at://did:plc:igzuueb63dytyy3tpaweofuu/org.tangled.feed.comment/3lzg6wxgzq222 bafyreihkqylhqxdmt2je5qiw6kfsgov7rh4h4fdzx4xqhk5q3wosuk7gbi# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.feed.comment/3mwkb2qu3gr22 bafyreiagzsjco3xpkp7wrek4sltctxu4ub4v6dtglfjwdlyfvnjc6ulmpi# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.feed.comment/3mszlqk2a4c22 bafyreibxtmildrcsuhjvijs2kbcotijs6qhu2rsbm3rleskancgxb5mk6y# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.feed.comment/3mszlqm7b6d22 bafyreih3mcgo3rtzqxmf2inhabpmw4i4n7bev7wadlaoahfwnivogujupy# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.feed.comment/3mszlqp3c5e22 bafyreicbbu3wdenayqq4ubqflygph5msxghmuw7buyph3dbq6btlkwoi3y# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.feed.comment/3mszlqr5d2f22 bafyreic2qpppocpszrr7nlysndsvhum5x3d57wllrxbelmrhgvp6lfvnli# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.feed.reaction/3lzg6yqo3i222 bafyreibmpb4deiyux2bm2m5j7ybz2ufvgnszzgnwtd66d3qtoenla7ohma# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.feed.reaction/3lzg72jv5a222 bafyreib3rqmzxclxnqnkdwrzp7wcnndbp46g7acfhhque5i2y53ndek4rm# put_record at://did:plc:i3cuazypmjja73m3ahwrsh2z/org.tangled.feed.reaction/3lzg74d46y222 bafyreiau7g54kz5ftdos3r2kldwcjutvsvmdh7hptnx7bmwhprvoeb75fiput_record at://did:plc:igzuueb63dytyy3tpaweofuu/org.tangled.feed.reaction/3lzg764daq222 bafyreifgmnafntxfnfdx4gmhhdxqdolkwxycugm3hhppjh5d3ht4ww3umi
# --- org.tangled attestation fixtures (subject is a knot ticket strongRef) ---
put_record at://did:plc:igzuueb63dytyy3tpaweofuu/org.tangled.graph.attestation/223n7splszs22 bafyreib76tnkofhqjhrcgox4etvcptekjj7aa5d5jmpniljh3hfqe5zt24put_record at://did:plc:igzuueb63dytyy3tpaweofuu/org.tangled.graph.attestation/223n7spnnms22 bafyreichv6dkuk3fmgpcwuevdxhapoginh2snmu4vuyuwzkvjvnmfnckm4put_record at://did:plc:igzuueb63dytyy3tpaweofuu/org.tangled.graph.attestation/223n7sppi7s22 bafyreihz5nhffleuard4bunztrrxqhr3qkbvqwsscrvnukpjqedszx7tnqput_record at://did:plc:igzuueb63dytyy3tpaweofuu/org.tangled.graph.attestation/223n7sr3ghs22 bafyreiaencwsxfzy3o7uxput3prbhbkyyz7r4pf3r6ejwu6nqoj4u5ehmqput_record at://did:plc:igzuueb63dytyy3tpaweofuu/org.tangled.graph.attestation/223n7sr73ns22 bafyreifbgyq24ub4mphl3pmt4toeiq4u46fbqtdhos54dmvcuqckjqkhkqput_record at://did:plc:igzuueb63dytyy3tpaweofuu/org.tangled.graph.attestation/223n7srcqts22 bafyreif7u22hndb4el5xkgohfym2fp7oanx4cbvkjubatnxrdkpl7n62zmput_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/org.tangled.graph.attestation/223n7srelgs22 bafyreiegqxgcgfs3vlusn6cky7p7kjgl5eb3xxwye3kk6ajbtvb2lpxc5mput_record at://did:plc:igzuueb63dytyy3tpaweofuu/org.tangled.graph.attestation/223nzzsbaeu22 bafyreigtl4u36d3uy5ymeycyxy3eomtcgheevpsnd6vevshtihb65cwqwe
# --- org.tangled follow & vouch fixtures (subject is the rkey) ---
put_record at://did:plc:igzuueb63dytyy3tpaweofuu/org.tangled.graph.follow/did:plc:xbserj4jfuhzkbl3mszkvvrb bafyreifl7dsgyvu7fvkl4l5umvrrewoatpia5hgjuckybf3tfk4y5bnm3iput_record at://did:plc:igzuueb63dytyy3tpaweofuu/org.tangled.graph.follow/did:plc:pgkgoz6rpvmgynswviohltpx bafyreibzfpdma3syj27j42juei6wcmh2fpjxqp23urpivj4kp6xnccl6paput_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/org.tangled.graph.follow/did:plc:igzuueb63dytyy3tpaweofuu bafyreiec5mggcrtwhdlkpymftts44zumyz5m6qwccqrpt4gihmnu652qaeput_record at://did:plc:pgkgoz6rpvmgynswviohltpx/org.tangled.graph.follow/did:plc:igzuueb63dytyy3tpaweofuu bafyreifuy2yp7w7c6z3frzi2t7rxlvovw3cz6ivk5l2d7omuptcfje7a6iput_record at://did:plc:ryxq2u2b6sadhhjflpwiefg4/org.tangled.graph.follow/did:plc:igzuueb63dytyy3tpaweofuu bafyreicpsiuzccktcxgcp4cl6mshfgdicv45ple4hrxrrgd7b3t4masruyput_record at://did:plc:ryxq2u2b6sadhhjflpwiefg4/org.tangled.graph.follow/did:plc:xbserj4jfuhzkbl3mszkvvrb bafyreiewemtnmq2h2nugt2sbm4xavv7jqzvec6hbwqypinudwonkoukvtiput_record at://did:plc:igzuueb63dytyy3tpaweofuu/org.tangled.graph.vouch/did:plc:xbserj4jfuhzkbl3mszkvvrb bafyreifm5ul6hhiesuuhukw45gol7z3w67ktf27dlvluu2h4a6m54fx3gaput_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/org.tangled.graph.vouch/did:plc:pgkgoz6rpvmgynswviohltpx bafyreif7tywomyuzgtcawmppnrnmicfzcty5d42kjz24igyktw6ekxfhpaput_record at://did:plc:xbserj4jfuhzkbl3mszkvvrb/org.tangled.graph.vouch/did:plc:ryxq2u2b6sadhhjflpwiefg4 bafyreic7neuxz42d4373k5xdda7b66ycxnt6ct6w5gyfzb6mlozgbqxlg4put_record at://did:plc:pgkgoz6rpvmgynswviohltpx/org.tangled.graph.vouch/did:plc:ryxq2u2b6sadhhjflpwiefg4 bafyreig2c6t2yhkdxuupyhouevcgx7kbay4b4nj2og5qlpfjh6sugrdux4put_record at://did:plc:ryxq2u2b6sadhhjflpwiefg4/org.tangled.graph.vouch/did:plc:igzuueb63dytyy3tpaweofuu bafyreiemubhyfd7wu4louq2och6fomjpne7kleyfvt75s5si3px76gdcoy
printf 'done.\n' >&2