Skip to content

Add hey bubble: list, up with schedule slots, and pop - #326

Merged
monorkin merged 6 commits into
mainfrom
bubble-commands
Aug 25, 2026
Merged

Add hey bubble: list, up with schedule slots, and pop#326
monorkin merged 6 commits into
mainfrom
bubble-commands

Conversation

@monorkin

Copy link
Copy Markdown
Collaborator

Bubble Up has been read-only from the CLI — hey box view bubblebox shows the queue, and hey move refuses the box outright. This adds the missing verbs as a hey bubble command:

hey bubble list [--limit N | --all]
hey bubble up <box-item-id>... (--now | --on <date> | --tomorrow | --weekend | --next-week)
hey bubble pop <box-item-id>...

bubble up mirrors HEY's own schedule menu. --now bubbles immediately. --on <date> schedules the morning of that day; given today's date it schedules this evening instead, the same thing "Later today" does in the web app — a custom schedule for today would otherwise land at a time already in the past. --tomorrow, --weekend and --next-week are the named slots, landing the morning of tomorrow, Saturday, and Monday. Exactly one is required, and each confirmation says in plain words when the threads will surface. bubble pop cancels a scheduled bubble-up.

bubble list shows both halves of the feature: threads that have already bubbled up, and threads scheduled to, with their scheduled time (a surprise-me schedule shows ???, as in the web app). The scheduled rows come from the Bubble Up box; the bubbled-up rows are the contiguous prefix HEY sorts to the top of the Imbox, which is the same data the web app's Bubbled Up section draws.

hey move's refusal now points here instead of a dead end.

This depends on new SDK operations (ScheduleBubbleUp/ScheduleBubbleUpFor over POST /postings/bubble_up.json) that aren't released yet — go.mod carries a local replace directive until they ship, so CI will stay red until the SDK release lands and the directive is dropped for a pinned version.

Replaces #164 — thanks to @jr-lillard for the original take on bubble-up commands, credited as co-author on the first commit here.

monorkin and others added 4 commits August 25, 2026 14:03
Bubble a thread up in the Imbox right away through the SDK's
Postings().BubbleUpNow, or cancel a bubble-up through CancelBubbleUp.
Scheduled bubble-up is refused for now; --now is required so a --on date
can join it later without changing the shape of the command.

hey move keeps refusing Bubble Up as a destination, but now points at
hey bubble up instead of a scheduled flow that never existed here.

Co-authored-by: J.R. Lillard <14372920+jr-lillard@users.noreply.github.com>
hey bubble up now takes exactly one of --now and --on. --on takes a
YYYY-MM-DD date and goes through the SDK's new Postings().ScheduleBubbleUp,
which posts HEY's custom schedule slot with the date; HEY resurfaces the
threads at its morning hour of that day. HEY accepts a past date without
complaint, so the CLI does too.

The SDK operation is new and comes from the local hey-sdk checkout via a
replace directive until it is reviewed and released.
hey bubble up now takes exactly one of --now, --on <date>, --tomorrow,
--weekend and --next-week. The named flags send HEY's tomorrow, weekend
and next_week slots, which land at its morning hour of tomorrow, the
coming Saturday and next Monday. --on with today's date sends the today
slot — the web app's Later today, HEY's evening hour (18:00) — instead
of a custom slot pointing at a morning that has already passed; the
other web slots come out identical through custom, so this is full
parity with the web menu short of surprise_me. HEY reads those hours in
UTC over JSON, and it does not refuse a timestamp already past — the
threads bubble up on the scheduler's next run — so the CLI does not
second-guess the clock either.

The SDK grew a typed slot for this: Postings().ScheduleBubbleUpFor takes
a hey.BubbleUpSlot next to the date-taking ScheduleBubbleUp, still from
the local checkout via the replace directive.
One listing for everything bubble-related: the threads that have already
bubbled up in the Imbox and the ones still scheduled, each scheduled row
showing when it resurfaces (HEY's bubble_up_schedule, ??? for a surprise).

The bubbled-up half needs no endpoint of its own: /imbox/bubbled_up serves
HTML only, but the Imbox orders bubbled-up threads first — that ordering is
what draws the web app's Bubbled Up section — so the listing reads the
Imbox's bubbled-up prefix and stops at the first row that is not. The
scheduled half is the Bubble Up box, whose rows already carry the schedule.

Styled output is two tables; --json answers honest bubbled_up and scheduled
buckets; --ids-only and --count combine them; --limit caps each bucket.
@monorkin
monorkin requested a review from a team as a code owner August 25, 2026 12:03
Copilot AI balanced review requested due to automatic review settings August 25, 2026 12:03

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@monorkin
monorkin merged commit 58a4d2a into main Aug 25, 2026
33 checks passed
@monorkin
monorkin deleted the bubble-commands branch August 25, 2026 12:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants