MOJALAND / 04
Left Unbuilt
Proposed once. Never built.
You have an idea for Bluesky or something near it. Someone has almost certainly already said it. The record is still there. It just never got built.
This is a list of those. It is the inverse of the field guide, which counted 51 services that do exist. The candidates were pulled from discourse.atprotocol.community.
Two ways to read it. Top to bottom tells you how things fall over here. The spec rows under each entry are for people who might build one; skip them.
1
Who decides
One thing first.
On an ordinary social network, the company decides what gets built. You can file a request; they decide. Here, the decider is whoever did it.
A lexicon, the schema that fixes the shape of a record, can be written and published by anyone. So can a feed. So can a labeler. No permission is involved.
So when something is missing, the reason is not that a company declined. It is that nobody did it.
2
Not seeds, not soil
There is no shortage of ideas. Filtering for proposals stalled three months or more still leaves 52. The environment is not hostile either: anyone can build, nobody needs permission.
What is missing is the second person.
A record format written by one person is that person's private notation. It becomes a shared format when a second person reads it in the same shape. The threshold is two.
Everything that shipped cleared it.
So this document is not trying to hand out ideas. It is recruiting second people.
Being first is heavy: you design it, build it, and then have to convince someone. Being second is light. The design is already written and the first person is still waiting.
The n=2 threshold holds strictly only for the record layer. A feed works with one author; a labeler needs subscribers rather than implementers. Most of the 52 are record-layer proposals, which is why the claim stands, but it does not generalise to all four layers.
3
There turned out to be four ways to die
Reading 52 stalled threads, the striking thing is not the variety of the ideas. It is how few ways there are to fail.
1Nobody read it. Sinks with zero replies. It was not rejected.
2It was praised, and that was the end. The most common, and the hardest to see. Agreement takes the place of adoption.
3It drifted into a question of where it belongs. "That is not what this mechanism is for" — and then the thread is about the other mechanism, and never comes back.
4A second person arrived and there was no path to join. It gets as far as "I would love to help," and stops. What two people do after agreeing is not defined anywhere.
One example of each follows. The large line is the substance; the rows beneath it are for builders.
TYPE 1
Nobody read it
A playlist several people make
A few people build one playlist together, it stays legible who added what, and it stays everyone's property.
- layer
- record
- today
- Music listening is logged per person by Rocksky. There is no shape for several people building one ordering.
- the gap
- A shared list that preserves each participant's share of it
- what it needs
- A way to point at tracks, plus write access for participants. The heavy part is not technical. It is deciding whose PDS holds the list.
- effect
- The opposite of a playlist handed down by a platform. It stays in the hands of the people who made it.
- how it stalled
- Posted 2026-02-20. Zero replies, 90 views. Neither opposed nor supported.
TYPE 2
It was praised, and that was the end
Pronouns you carry yourself
Your pronouns live on your side rather than inside one app. Change apps, or watch a service close, and they do not go with it.
- layer
- record
- today
- Bluesky has a pronoun field, but the value sits inside the Bluesky profile record
- the gap
- An independent record in your own repository, readable from any app
- what it needs
- One small lexicon. The implementation is already written and public.
- effect
- Ownership does not move, so nothing takes it down with it
- how it stalled
- Published 2026-02-17. The next day a reply arrived saying it was great and made total sense, and that is where it ends. Not rejected. Not adopted.
The reason the author built it points at a second problem. They wrote: a labeler disappeared last week, and a lot of people lost that feature with it.
When the person who made a thing stops, the thing goes with them. The same exposure exists in Japanese. #青空ごはん部, a food-posting tag, cleared 200 posts in a single day last August. It is one person's tag with one person's feed hanging off it.
TYPE 3
It drifted into a question of where it belongs
Labels that point forward, not away
The mechanism that exists to say "careful" could also say "there is more this way."
- layer
- label
- today
- Labelers are used almost entirely for warnings, hiding and age gates. No implementation uses them affirmatively.
- the gap
- A slot on a label for a destination. You can assert "this post is about X" and there is nowhere to go from there.
- what it needs
- An optional action on the label definition, and a button in the label detail on the AppView side. The labeler-side change is small. The heavy part is that nothing is visible until an AppView supports it.
- effect
- The same mechanism inverts. The layer that hides becomes the layer that guides.
- how it stalled
- Proposed 2026-05-02. On 07-01 a reply said this is not what labelers are for, the AT Intents proposal is closer, and it stopped there. Not a rejection. The thread moved to where it belongs and never came back.
TYPE 4
A second person arrived and there was no path to join
A shared shape for comics
Read in any app and the next chapter comes from the same place. What standard.site did for blogs, for comics.
- layer
- record
- today
- Apps for vertical-scroll comics are being built. Series, chapter and publication are shaped differently by each of them.
- the gap
- A common shape for series and chapters
- what it needs
- Nothing technically hard. The heavy part is who sets the table.
- effect
- Readers get a choice of app; artists publish once and appear in all of them
- how it stalled
- Proposed 2026-05-04. Three days later another developer replied that they would love to be part of it and had a similar spec already. That is where it stops. There is no next step for two people who have agreed.
This one proves the argument. The second person does arrive. There is just no path to join.
OUTSIDE THE INVENTORY
Not yet said by anyone
The three below are not on discourse. Nighthaven thought of them. All three are CC0. No permission, no notice, no credit. Take them.
Hand over a feed CC0
The person who started a club leaves, and the ordering everybody subscribed to keeps running.
- layer
- feed
- today
#青空ごはん部 cleared 200 posts in one day; #青空旅行部 runs 54 a week. Neither is a platform feature. One person picked a tag and hung a feed off their own account. The tag belongs to nobody, so it cannot die. The ordering can.
- the gap
- A way to move a feed's stewardship to someone else at the same address
- what it needs
- A feed's URI is bound to its owner's account. Change owners and the address changes, and everyone who had subscribed is disconnected. That is the heavy part. It needs a shape that moves the steward while holding the address.
- effect
- A place someone made outlives them, without asking every subscriber to re-add it
- how it stalled
- Never proposed. The problem has only been written down inside an observation piece.
Choose your own front door CC0
Someone arriving for the first time starts from what you want to show them, not from your latest post.
- layer
- record
- today
- A profile opens on the newest post. Bluesky has a pinned post, but it is one item and it lives inside the Bluesky profile. It does not reach other apps.
- the gap
- A handful of your own best work, pointed at across apps. A Bluesky post, a blog entry, a repository, a photograph.
- what it needs
- A small record holding a few URIs. The lightest build in this document. The weight is all on the reading side: one person publishing it changes nothing until an app reads it.
- effect
- Good work stops being buried by chronology. Your output, scattered across the 51 services in the field guide, becomes reachable from one place.
This one is a demonstration of the argument itself. One person publishing it produces nothing. It works when a second person reads it. The build is an evening. All of the difficulty sits on the second person's side.
A face that only moves up CC0
Your avatar's expression shifts with how you have been writing that day.
- layer
- record (profile image)
- today
- An avatar is something you change by hand, and then it sits there
- the gap
- Swap the blob and put the record. Which means it shows up in every client, the official app included. It asks nothing of the reader.
- what it needs
- Draw the expressions in advance and the inference is rounding to ten steps. Almost no computation.
- effect
- Even forgotten about, the day's tone shows on the image you look at most. Avatars are public, so others see the same thing.
- how it stalled
- Never proposed
One design condition. Move it up, never down. An avatar is public. A face that sinks on a bad day announces that day to everyone. Being public is what makes the asymmetry necessary.
TERMS
Words used here
- record
- One item of data that accumulates on your side: a post, a setting
- lexicon
- The schema that fixes a record's shape. Anyone can write and publish one
- feed
- An ordering of posts. Anyone can build one; readers choose which to use
- label / labeler
- The layer that annotates posts. Also chosen by the reader
METHOD
Limits
The 52 are my filter. Not a survey. What I excluded (meeting notices, logos, infrastructure threads) moves the result.
Discord and GitHub were not read. Only discourse, because it can be fetched mechanically, cited, and checked by a reader. A lot of proposals presumably die in Discord instead.
"Not built" is the weakest judgement here. A thread can be stalled and the thing built elsewhere. If you know of one, tell me.
Figures are as of 3 September 2026
WHERE TO GO
If you want to be the second
Suppose you decide to. Here is what to open next.
1 — Check that it does not already exist. Anyone can define a record shape, so the same use case often already has a name. ufos.microcosm.blue lists collection names actually present on the network. If a name comes back, someone has already written it. That is your first person.
2 — Find the stalled tables. lexicon-community is where proposals live: 63 topics. labelers-moderation has 7. The thinness of a category is the size of the opening.
3 — Sit down at one. lexicon.community is where shapes get agreed, with the drafts in a GitHub repository and a monthly call. I said above that there is no path to join. This is the one exception, and it exists.
4 — Check the mechanics. atproto.com's guide. A schema is one JSON file published under a domain you control.
The minimum act of a second person is not an implementation. It is one line in a stalled thread saying you will use the same shape. That alone converts private notation into a shared format. Five of the seven entries here are waiting for exactly that line.
CLOSING
Being the second
This document contains nothing but other people's ideas, save three. Even those sit on the same shelf as the rest.
I am not asking anyone to be first. That is too heavy. Second is light: the design exists and its author is still waiting. "We will use the same shape" is the whole of it.
This connects to what the earlier pieces argued. This sky can only win by addition, never by asking anyone to switch. Being the second person is the smallest possible form of that.