Skip to content

Commons: add post@1, the broadcast utterance - #211

Merged
cuibonobo merged 2 commits into
mainfrom
claude/issue-204-plan-8g9gd3
Aug 30, 2026
Merged

Commons: add post@1, the broadcast utterance#211
cuibonobo merged 2 commits into
mainfrom
claude/issue-204-plan-8g9gd3

Conversation

@cuibonobo

Copy link
Copy Markdown
Member

Summary

Closes #204. Adds org.haverstack/post@1 — the broadcast-speech contract that completes the fourth cell of the artifact/speech × bounded/unbounded 2×2 text-types.md already names, alongside note (kept), message (sent), and article (published).

  • docs/commons/post.md (new) — the type file: schema (text required, format, url), the no-date-field rationale (uttering is creating — same reasoning as message@1's missing date field), conventions (parentId threading in-stack, embed/location/syndicated-to cross-type labels, entityId authorship), and the scheduled-posts open question, resolved as "scheduling is the scheduler's state, not the utterance's."
  • docs/commons/README.mdpost moves out of "deliberately absent from the initial set" into the namespace list and type table as Draft (it now has a concrete intended writer: cuibonobo.com's ephemera stream).
  • docs/commons/text-types.md — the two "not yet in the commons" worked-example rows (Foursquare-style check-in, social media post) and the fourth-contract section now point at post.md.
  • docs/commons/message.md — cross-references post.md from its "Deliberately excluded" section.
  • packages/commons — new POST export, added to defineCommonsTypes's drift/read-compat test coverage.
  • .changeset/post-type.md — minor bump for @haverstack/commons.

No @haverstack/core changes needed. The ATProto RFCs (#15, #16) the issue discusses as a would-be blocker are already closed. #203 (settable createdAt for owner-side imports) stays open, but it only blocks migrating an existing dated archive into post@1 — the type itself is fully expressible today, since a post's only meaningful clock is native createdAt.

Spec

No @haverstack/core behavior change — this is a Schema Commons docs + @haverstack/commons package addition, governed by docs/commons/README.md § Governance.

Verification

pnpm run format:check && pnpm run lint && pnpm test && pnpm run build && pnpm run typecheck

All green. One packages/core test (deleteAttachment > ... beyond the first page) failed on the first run with IdGenerationOverflowError — a pre-existing, timing-dependent flake unrelated to this change (confirmed by rerunning it in isolation, and by the fact packages/core isn't touched in this PR); it passed on rerun and the full suite is green.

Notes for reviewers

  • Left text-types.md's intro ("Three commons types carry free-form text...") and title unchanged — the doc's own structure treats note/message/article as "the three contracts" and introduces post as an addition via its own "fourth contract" section, so I kept that narrative shape rather than renumbering.
  • message.md's changelog got a new "Proposed, amended" entry noting post@1 discharges the broadcast-shape forward-reference it previously carried; message@1 itself stays Proposed (no concrete writer yet) — unrelated to post's status.

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com


Generated by Claude Code

Completes the fourth cell of the artifact/speech × bounded/unbounded
2×2 that text-types.md already names: `post` as the speech/unbounded
contract, alongside note (kept), message (sent), and article
(published).

- docs/commons/post.md: new type file — schema (`text` required,
  `format`, `url`), the no-date-field rationale (uttering is
  creating, same reasoning as message@1), conventions (parentId
  threading, embed/location/syndicated-to cross-type labels,
  entityId authorship), and the scheduled-posts open question.
- docs/commons/README.md: post moves from "deliberately absent" into
  the namespace list and type table as Draft.
- docs/commons/text-types.md: the two "not yet in the commons"
  worked-example rows and the fourth-contract section now point at
  post.md.
- docs/commons/message.md: cross-references post.md from its
  "Deliberately excluded" section.
- packages/commons: POST export, added to defineCommonsTypes' test
  coverage and read-compat core checks.

No core changes needed — the ATProto RFCs (#15, #16) the issue
discusses as a would-be blocker are already closed, and the type
itself doesn't depend on #203 (settable createdAt), which only
affects importing an existing archive into this type.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011bz5a8shrGQsz5tdFB3z4i
@changeset-bot

changeset-bot Bot commented Aug 30, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 024e924

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@haverstack/commons Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

The two new post rows used markdown links ([`post`](./post.md))
instead of the plain backtick code spans every other row in the
table uses. The doc already links to post.md from the fourth-contract
section above the table, so the link wasn't needed here either.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011bz5a8shrGQsz5tdFB3z4i
@cuibonobo
cuibonobo merged commit d1f8224 into main Aug 30, 2026
5 checks passed
@cuibonobo
cuibonobo deleted the claude/issue-204-plan-8g9gd3 branch August 30, 2026 23:52
@github-actions github-actions Bot mentioned this pull request Aug 30, 2026
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.

Commons: post@1 — the broadcast utterance, with a concrete intended writer

2 participants