Public: anyone can read this; the crew can change it.

Distilled posts: a wave or a milestone that landed goes out as one short post on X, read before it goes if the owner wants #1084

open deferred: behind the Later gate opened this
Held by the Later gate, set by trevato . The crew picks nothing here until it is lifted.
opened this

Pillar: P8 Story. One run, started fresh from today's main.

Outcome (what a person sees). Under Settings → Channels an admin connects an X account (the app's own, or the forge's): a client id and secret for X's OAuth 2.0 user context with the tweet.write and users.read scopes, authorized once in the browser; the tokens are sealed like a subscription's and refreshed by the forge. When a wave lands, or a watched milestone lands, the forge writes one post — the headline, one sentence of why, a link to the wave — and either posts it or holds it for the owner to read and send (Review before posting, on by default). A log on the page says what was posted, when, and the link. A private repository never posts. Nothing is posted twice.

Writing standard. The post is what a person would be happy to hear: the thing that changed and why it matters, in their words, under 240 characters, no hashtags unless the owner set them, no commit language. Draft from the wave's note, never from pulls directly.

Today. prompt_source (Instagram) is the pattern for a sealed per-repository connection with a routine; the X API v2 POST /2/tweets posts for a user-context token; refresh tokens come with the offline.access scope.

Acceptance.

  • [ ] channel table (migration appended last): repo, kind x, sealed tokens, refreshed_at, review_before_posting, last_posted_at, last_said; one X channel per repository.
  • [ ] Settings → Channels: connect (the OAuth dance with PKCE against X; the redirect lands on the forge), review toggle, the log, disconnect; admin only, like Prompts.
  • [ ] A wave landing (the waves issue) or a watched milestone landing drafts a post; with review on, it waits as a decision in the feed (Post / Not this one) and is posted on Post; with review off it posts at once.
  • [ ] A post links to the wave; the log keeps the X id and the link; a failure is a sentence on the page, never a throw; a token X no longer accepts says to connect again.
  • [ ] Nothing about a private repository is ever drafted or posted (test).
  • [ ] API: GET/POST/DELETE /api/v1/repos/:o/:n/channels, POST …/channels/:id/post (send the held draft); MCP: posts { app }.
  • [ ] docs/STORY.md gains the channel, the writing standard and what the owner must make at X.

Waits for the waves issue (the post is drafted from a wave's note).

commented

Parked by the crew: the check failed ("a migration is a file named by a sortable id (#1837) > stamped ids sort after every numbered one, and among themselves by time") and the decider saw no point in another try (pull #1889 closed). Planner: split this smaller, or rewrite what done looks like; a person can also say what to try.

commented

Parked by the crew: the preview's deploy failed and the decider saw no point in another try (pull #1920 closed).

Parked twice since a person last spoke here, so it is the planner's now. Every reason:

  1. the check failed ("a migration is a file named by a sortable id (#1837) > stamped ids sort after every numbered one, and among themselves by time") and the decider saw no point in another try (pull #1889 closed)
  2. the preview's deploy failed and the decider saw no point in another try (pull #1920 closed)

The planner splits it, replaces it with a fresh issue, or defers it; a person can also say what to try. Nothing starts here until then, and the board lists it.

commented

Deferred behind the Later gate. Pull #1889 failed the stamped-migration test and #1920's preview deploy failed. It needs X OAuth, sealed tokens and egress to X, and the owner's steward asks the crew to spend this hour on P0 waste cuts. P8 Story can wait until those land.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs