Skip to content

Release v1.0.0: merge dev into main - #48

Merged
Magic-Xin merged 91 commits into
mainfrom
dev
Sep 22, 2026
Merged

Magic-Xin merged 91 commits into
mainfrom
dev

Conversation

@Magic-Xin

Copy link
Copy Markdown
Owner

Summary

  • Merge the current, tested dev branch into main for v1.0.0.
  • Include the updated native release packaging, GitHub Actions workflows, dependency updates, bot fixes, and new plugin functionality.
  • Keep the dev branch after merge.

Validation

  • The five-platform dev GitHub Actions build has passed and the resulting program has been run successfully, as confirmed by the maintainer.
  • Resolved the workflow-only merge conflicts by retaining the already tested dev versions; merge commit 3db04e1 has the same tree as the prior dev tip.

Release

After merge, tag the resulting main commit as v1.0.0 to run the release workflow.

Magic-Xin added 27 commits July 16, 2026 17:25
- make startup, shutdown, config, and plugin registration explicit
- bound WebSocket concurrency and restore group member cache refresh
- centralize black-box tests under test
@Magic-Xin
Magic-Xin merged commit 7f2c315 into main Sep 22, 2026
6 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3db04e18a0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/statics.go
Comment on lines +637 to +639
s.mu.Lock()
delete(s.dirtyDates, date)
s.mu.Unlock()

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Do not clear dirtiness created during a flush

If a message updates this date after the snapshot is cloned but before this deletion, incrementMessage/addWordCounts sets dirtyDates[date] = true and this unconditional delete immediately erases that newer marker. When no later message arrives—or shutdown follows—the in-memory update is never written, so persisted statistics lose messages. Preserve a generation/version for the snapshot or only clear the flag while excluding concurrent updates.

Useful? React with 👍 / 👎.

Comment thread plugins/bili.go
return
}

err = os.WriteFile("bili_info.dat", data, 0644)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Restrict persisted Bilibili credentials to the owner

On a multi-user Unix host with the usual umask, this creates bili_info.dat as mode 0644 even though it contains session-cookie values and the refresh token from BiliLogin. Other local users can therefore read and reuse the authenticated Bilibili session; write this credential file with owner-only permissions and also correct permissions on an existing file.

Useful? React with 👍 / 👎.

Comment on lines +111 to +118
plugin.mu.Lock()
func() {
defer recoverPlugin(plugin.Name, "stop")
if err := stopper.Stop(); err != nil {
log.Printf("Stop plugin %q: %v", plugin.Name, err)
}
}()
plugin.mu.Unlock()

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Unblock plugin callbacks before locking them during shutdown

When the outbound queue is full, such as while the WebSocket is unavailable or writes are stalled, a callback can block on a bare send <- while holding plugin.mu. Canceling the worker context does not unblock that send, and Client.Run abandons the worker after its timeout; the deferred StopPlugins then waits forever here for enabled Stopper plugins such as JM or Statics, so SIGTERM never completes. Make plugin sends cancellation-aware or ensure the outbound queue is drained before acquiring this mutex.

Useful? React with 👍 / 👎.

Magic-Xin added a commit that referenced this pull request Sep 22, 2026
Fix Bilibili live parsing and address PR #48 review findings
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