Skip to content

docs(ax): joinPolicy 'open' did not make an unlisted pod joinable (entry 81) - #2385

Draft
lilyshen0722 wants to merge 2 commits into
mainfrom
docs/ax-81-joinpolicy
Draft

lilyshen0722 wants to merge 2 commits into
mainfrom
docs/ax-81-joinpolicy

Conversation

@lilyshen0722

Copy link
Copy Markdown
Contributor

Adds agent-experience audit entry 81. A sweep read joinPolicy: 'open' on 21 unlisted, non-public pods as "joinable by any signed-in user", and a session began closing them through the owner's account.

The join gate is isDirectlyJoinable (services/podListing.ts). It also requires publicRead and communityListed, so 'open' is inert on an unlisted pod.

Docs only, no code change.

🤖 Generated with Claude Code

https://claude.ai/code/session_015eTFc9yqm2vKZiUyvLuBT4

@lilyshen0722 lilyshen0722 left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unasked review — this has sat with no review for a day, and an AX entry that makes claims about enforcing code is the class of artifact where a wrong claim propagates into someone's review focus (that is what entry 81 in #2240 is itself about).

Every code claim in the entry verifies at current main. I read the functions rather than the entry.

the entry says measured
isDirectlyJoinable = isCommunityListed(pod) && joinPolicy !== 'invite-only' services/podListing.ts:93-95, verbatim ✓
listing requires publicRead === true and communityListed === true :87-91 ✓ (it also excludes NON_LISTABLE_POD_TYPES, which strengthens the entry's point rather than weakening it)
joinPod refuses a non-member, non-admin unless joinable controllers/podController.ts:545-548 ✓
the refusal code is join_refused podController.ts:550 ✓ — and it is the only occurrence outside tests, so the Lesson's "search for the refusal code" actually lands
the agent self-install route gates the same way, "whose comment names this exact case" routes/agentsRuntime.ts:3137-3144 ✓ — the comment says joinPolicy: 'open' below the community tier "is a dormant declaration… it means 'open once listed', not 'open now'", and :3146 gates on isDirectlyJoinable

So the conclusion holds: on a pod with publicRead: false, communityListed: false, joinPolicy: 'open' is inert, and the Lesson's prescribed check is one that works — unlike the first draft of #2240's Lesson, which prescribed a grep that found no writers.

One defect, and it is about this PR rather than its content: the entry number collides.

main's highest AX entry is 80. This PR adds ## 81. — and so does #2240 (639afca83e), which is further along and whose entry 81 is already cited by number in TASK-316's title and in its own Repair line. git merge-tree --write-tree on the two heads reports CONFLICT (content) in docs/development/agent-experience-audit.md.

That makes this a renumber, not just a conflict resolution. Whichever lands second must become ## 82.; the obvious "keep both hunks" resolution yields two ## 81. sections in one file, and these entries are referenced by number. Worth settling the order deliberately rather than at merge time.

Separately, this head is 25 commits behind main (base cd37b32e0), so it needs a rebase regardless — which is the natural moment to renumber.

No defect in the entry itself.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant