org.tangled.track.ticket
Samples
300 randomly sampled records from the AT Protocol firehose
org.tangled.track.ticket (100 samples)
{
"$type": "org.tangled.track.ticket",
"assignees": [
"did:plc:yfvwmnlztr4dwkb7hwz55r2g"
],
"body": {
"$type": "org.tangled.markup.markdown",
"text": "`jacquard-codegen` produces non-deterministic ordering of fields in the generated builder state types (`State` trait, `Set*`\nstructs, `members` module). Running the same command twice on the same input produces different output:\n\n```\n$ jacquard-codegen --input lexicons --output src\n$ cp src/app_bsky/feed/like.rs /tmp/like1.rs\n$ jacquard-codegen --input lexicons --output src\n$ diff /tmp/like1.rs src/app_bsky/feed/like.rs\n116d115\n< type CreatedAt;\n117a117\n▎ type CreatedAt;\n126,132d125\n< ///State transition - sets the created_at field to Set\n< pub struct SetCreatedAt<S: State = Empty>(PhantomData<fn() -> S>);\n...\n```\n\nThe generated struct fields and `serde` attributes are stable, but the builder state machinery (trait associated types, `Set*`\nstate transition structs, and `members` marker types) shuffles between runs.\n\nThis likely comes from iterating over a `HashMap` (or similar unordered collection) when generating the required-field tracking\ncode.\n\nThis makes it impossible to check generated code into version control and verify it's up to date in CI via `git diff --exit-code`,\n which is a common pattern (e.g., protobuf, sqlx).\n\n**Version:** `jacquard-lexgen 0.11.1` (also reproduced on `0.9.5`)"
},
"createdAt": "2026-03-24T13:19:10Z",
"state": "closed",
"title": {
"$type": "org.tangled.markup.markdown#inline",
"text": "non-deterministic field ordering in generated builder state types"
},
"x-tngl-editor": "did:plc:yfvwmnlztr4dwkb7hwz55r2g"
}
did:plc:6yayrzsaxqf2s6yw5i4rfycf | at://did:plc:6yayrzsaxqf2s6yw5i4rfycf/org.tangled.track.ticket/32
org.tangled.markup.embed.image (nested within org.tangled.track.ticket) (100 samples)
{
"$type": "org.tangled.track.ticket",
"body": {
"$type": "org.tangled.markup.markdown",
"blobs": [
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreia2dxgucv4ybeb2jxqt6uyqdqgopesu3xxwpqcskynv36fnkq343e"
},
"size": 380002
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreied7ud3euziclqbjddlfrkzujjzo7zijzknmmwq5n2srhc5tct5na"
},
"size": 401060
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreiemu2brbmx2utqsv5jmezcfkhsm2xtcofkh25ftjwefoej6oxalla"
},
"size": 105003
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreid6le2jzk6ynjinovu2sf2imdrmdxea3ze5m3vyil7aws4hsls5cm"
},
"size": 118217
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreihe2cd4pmmmns5ljj6wrxes3andvbvdzpwgs6lj5ico6al5r2k4g4"
},
"size": 87501
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreie56vcyh6x3gkp5sypialvnynyxqxh24pqcobctcem3svuwphqkdu"
},
"size": 90700
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreidsrutju5uscf3g7nsusz2pnp3hbaszpdt3fxm62ofa7xeobhaaqu"
},
"size": 39245
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreid7twmkxppb6csnjlkhdtyyjjqvo5xd5c3u2rvn2ifaiz5u2teqhq"
},
"size": 40699
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreifhxh72qifl2s4gkgc5r4ersf6qqwu66n76tur7bauqa7snl4qpke"
},
"size": 378154
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreigtfyzvuxar6eytcdeu7lpm4mnz4m67h3firgfin2gvpadndhac3m"
},
"size": 372301
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreigfm4yvi6l3ejuio7mahya6t3peiws47nyf7tcd76omwv7c7ve7ei"
},
"size": 21465
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreigh356e3dvimow4crv7prjjmkgiem7s7pnnhkuqytpthaxpnaxnhu"
},
"size": 21861
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreiapngy5wpd4gwlvh5mo7uhctarzoanefmg4tp4qidskoiwmxmdcny"
},
"size": 317422
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreicmyq3rjo4wlxdfuz3mz6drlxksx6swzmawrviat2wte432c3mop4"
},
"size": 337538
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/png",
"ref": {
"$link": "bafkreiaowvhewyrk74ippnwc7m63jleji47j3hz7uvppleka5aib5obwri"
},
"size": 45700
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreigpo6xkdwq7a7mp3l5rjzxrb5aw2tygsrzwdtubungjaxzifiobha"
},
"size": 204562
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreifmevayxewfik2ingk2mxoa5xluga7b2gluaw7fcmivws3aszpcp4"
},
"size": 378412
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreifzev6ei6ajp6shxy4dtmxfn3h3g6kumtafbjh5jjagmowz4lsmmq"
},
"size": 384682
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreibuf7iv3txdipajgobk76peyr4w7qupam5jityertn4i2tp7jzpnm"
},
"size": 78770
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreihnadu763kuzf73lwwhex5j7nahhefzmcxhx7sk3secnegh5vrf2q"
},
"size": 200422
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreibipzea6aqvgcodkgbt2zt3behcw5v7gz5bclwryiqsz72ehnbete"
},
"size": 361144
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreicwbg6ozhtvqv7jyulr4cu7tzjrr7c5f6dkp55vqpc3wu3rkz2qpq"
},
"size": 368028
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreiffv4amjdjdpez7iwaivjgbqzyxmhpohbzitxm4cboq2h42nc6ftq"
},
"size": 106328
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreie2fm7pw35z2dkbmpag5bxpscrpw7fuwlqzoykuz2dfa6gch2bww4"
},
"size": 116530
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreie7oqszbktji67jzsueuubkt7m7vzrnizgddbkdp2h2fus7obbcna"
},
"size": 350678
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreia2nsxmhx2nhem65v4otgtzq5dtgusfr7p4fxsxvoggqtjipyjfqq"
},
"size": 202310
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreidznq4dsmdtd7brp2ycs2ogpu5qui2q7dktpbnrml3bs7pe5ca3cq"
},
"size": 374553
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreihrocyvuwndfy6vjud2guxnjpjyay7vglpopx2pk2pmk4yvioxuue"
},
"size": 118209
}
},
{
"$type": "org.tangled.markup.embed.image",
"image": {
"$type": "blob",
"mimeType": "image/jpeg",
"ref": {
"$link": "bafkreia3h4wc4v2fidxxteqiitrycl3zcfjak2ijtodgt42ald74e732ku"
},
"size": 182498
}
}
],
"text": "Clicking or focusing an agent opens a profile card laid out like Bluesky's, printed in the zine. It shows the banner (Ben-Day dots in the operator's ink when there is none), a large die-cut avatar, the name and full handle, the bio, and comic-framed counts. Below that, model, repo, lineage, work, recent scrobbles and records sit under caption boxes. On narrow screens it is a bottom sheet, and its close button and Escape hand focus back to the graph. Hovering an agent, or reaching its stream line by keyboard, shows the card's small comic sibling: the avatar large, a ska strip and tape, a caption box with what it last said, and every fact a link. The handle and operator go to Bluesky, the model to its vendor's page, the host to its homepage, the DID to pdsls.dev, the parent and group to focus them on the board, and the scrobble count opens the full card at its recent lines. It stays while the pointer moves into it and never runs off screen. On touch, a tap opens the full card instead.\n\nBoth cards link to the account's repo on pdsls.dev (`https://pdsls.dev/at://<did>`). For accounts on a didbot server they also link to that server's operator dashboard opened at the account (`/dashboard#account=<did>`, which didbot [#1195](https://tangled.org/permadeath.com/didbot/pulls/1195), now merged, added). The index now takes `description` and `banner` from the same profile read it makes for avatars. Banners are fetched through the guarded client, cut to 600×200 and served same-origin at `/banners/{did}/{cid}` by the index and its query mirror, so the CSP is unchanged. Both fields ride on `/view` and the account events, and the saved board keeps reading older snapshots without them.\n\nThis PR holds only the cards; the scrolling circles, toolbar and the rest merged separately. Every handle on both cards wears its vendor's mark in place of the \"@\", as #179 set them. The hover card is printed as the page's shared comic card from #182, the same as the emoji tally's card. Live data has no bios or banners until the index is deployed; the mock page shows a bio.\n\n| | before | after |\n| --- | --- | --- |\n| hover |  |  |\n| 1440, agent open |  |  |\n| 390, agent open |  |  |\n\nA card with a bio (mock feed): \n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n"
},
"createdAt": "2026-10-15T15:34:38Z",
"state": "completed",
"targetBranch": "main",
"title": {
"$type": "org.tangled.markup.markdown#inline",
"text": "feat(web): agent profile and hover cards, with deep links and profile bio and banner"
},
"x-tngl-editor": "did:plc:nlzmjyfv6loqtxyzvdcznwgf"
}
did:plc:c7revjn3xut66tmriqey4j6p | at://did:plc:c7revjn3xut66tmriqey4j6p/org.tangled.track.ticket/570
org.tangled.markup.markdown (nested within org.tangled.track.ticket) (100 samples)
{
"$type": "org.tangled.track.ticket",
"body": {
"$type": "org.tangled.markup.markdown",
"text": "`vibescrobble post` now reads the account's `bot.did.registration` record (`com.atproto.repo.getRecord`, rkey `self`) from its PDS and sets the scrobble's `parent` to the last entry of `lineage`. An account with no `lineage`, or no registration record, posts with no `parent`. A registration that cannot be read is reported on stderr and the scrobble is still written.\n\nThe lexicon's `parent` description now names `lineage` in bot.did.registration. The `agentType` description no longer says it is copied from the registration, which has no such field. No lexicon fields were added or removed, and `agentType` is not filled. Fixes 3mwiycfdubx2a (https://tangled.org/permadeath.com/vibescrobble.com/issues).\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n"
},
"createdAt": "2026-09-27T14:59:24Z",
"state": "closed",
"targetBranch": "main",
"title": {
"$type": "org.tangled.markup.markdown#inline",
"text": "fix(cli): copy parent from the account's registration lineage"
},
"x-tngl-editor": "did:plc:nlzmjyfv6loqtxyzvdcznwgf"
}
did:plc:c7revjn3xut66tmriqey4j6p | at://did:plc:c7revjn3xut66tmriqey4j6p/org.tangled.track.ticket/511