chadtmiller.com/knotless
git that lives in your Atmosphere account
Releases keep their start across levels, and a notification mutes its thread
MergedThis pull keeps a repository's release start (releases_at) when the level moves between All activity and Releases. It adds a Mute and Undo control to pull and issue notification rows. It also makes the shots stand-in answer a signed-in viewer's state, with two new signed-in views.
I found nothing that must change.
releases_at: The upsert is right. Moving to ignore or participating clears it, moving between the two release levels keepscoalesce(releases_at, at), and moving in from a level with no releases starts it at the new time. Rows from before the migration have a NULLreleases_at, and thecoalesce(s.releases, s.at)in the notification query handles them. The updated unit test fails on the old behaviour: the release at day 6 is only heard if the day 2 start is kept. The docs forserve.mdandapi.mdare updated.- Mute: Undo sends
participating, which forgets the choice. A thread the user had explicitly subscribed to before muting comes back as participating, not subscribed. That is probably acceptable, but you may want to say so. - Not run: I did not read the CI results. The e2e flow and the shots rely on them.
Since my last round there is one new commit. It makes the shots' stand-in answer putSubscription for a signed-in viewer by echoing the input with createdAt: now. now is imported in fixtures.mjs, and the handler only runs when the shots_as cookie is set, so nothing else in the shots changes. I found nothing that must change. The earlier note about Undo sending participating still stands as a note, not a blocker. The commit message says the stand-in "keeps" a choice, but it only echoes it. Nothing later reads it back, and the shots don't need it to.
Since my last round there is one new commit, plus a merge of main. It changes two test-harness details. The shots stand-in now takes the repo query parameter with new URLSearchParams(url.split('?')[1]), so it no longer builds an absolute URL. The e2e flow now reads listSubscriptions through page.evaluate(fetch), so the request goes through the browser and its gateway session. Both changes are sound and match their commit message. I found nothing that must change.
The earlier note about Undo sending participating still stands as a note, not a blocker.
Not checked: the e2e, shots, web and test checks were still running or queued when I looked. The lint, docs and lexicons checks had passed. The new e2e readback and the shots views depend on those results.
8 passed, 2 skipped
What changes
Releases keep their start. A repository watched at All activity and moved to Releases, or the other way, still hears of the releases since it first chose either. Before, any change of level restarted the choice from that moment. The
subscriptiontable gainsreleases_at, added in place since the table outlives a rebuild. Moving away to Ignore or Participating clears it.Mute from a notification. A notification of a pull or an issue has a quiet Mute beside its time. On desktop it shows when you hover the row or focus it, and on a phone it sits after the time. Muting says so on the row with an Undo. A review request has no Mute, since muting leaves review requests heard of.
Shots draw the controls. The shots' stand-in now gives a signed-in viewer's state in getRepo and getThread, as the server does, so two new signed-in views show the Watch menu and the Subscribe button:
repository-watchandissue-subscribe, both as bob.test, who opened the issue. The settings views, already signed in, now show the Watch menu as the live pages do.Why
Follow-ups to the subscriptions pull (bc49a605): a level change dropping earlier releases, no way to mute from where the noise arrives, and no shot covering the new controls.
How it was checked
The index's unit test now moves a watched repository from All activity to Releases after a release and still hears of it. An e2e flow mutes a row on the notifications page, reads the choice back through listSubscriptions, and undoes it. The rest is left to CI.
Shots-moved: repository-watch, issue-subscribe, settings, settings-branches, settings-labels, settings-access, settings-actions
Shortcomings
Existing CLI logins still need
knotless loginagain for the subscription commands, since their methods are new to the OAuth scope; the CLI already says so when it hits one.Changeset: none
🤖 Generated with Claude Code