Conversation
Repository owner
locked and limited conversation to collaborators
Oct 18, 2025
8ee06be to
a15bad5
Compare
17a0f26 to
4859497
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
If you wish to discuss any piece of this refactor, file an issue (please check if there is already one open for this topic first). This will help me to keep the discussions somewhat organized.
Preamble
I've been wanting to make big changes for a while, but I have had very little time for open source work since becoming a parent. Eventually I realized that if I gave up trying to make everything backwards-compatible, I could cut the time in half or more. Giving up backwards compatibility is not a decision I make lightly, but it is the only way I could get this done at all. I apologize to any users that have a rocky experience due to the update. I do not expect something like this to happen again, and hopefully you will find the changes worth it. I am planning to merge this mid-late November.
The goal was to get rid of unnecessary complexity, make simple things easier, and reduce the overall maintenance burden.
Big breaking changes
<Plug>style mappings.A longer note on serializability:
I tried really hard to make everything serializable at the beginning because it unlocks some cool features: session save/restore and saving/loading tasks in bundles. I found that the vast majority of the time I was using overseer for either one-off disposable tasks (e.g. grep) or simple templated tasks (e.g. make). It was extremely rare that I would both live-edit a task in any meaningful way and want to save it to disk. Two things changed: I added a new form of serialization that would handle templated tasks better, and I found bundles to not be useful. These two combined meant we could be overall a lot more relaxed about putting non-serializable data types (like functions) in components.
Smaller breaking changes
shelltemplate has been deletedrun_afterororchestrator, or to do:OverseerRun->shell-> run a command. Nowrun_afterandorchestratorcan just pass in raw task arguments instead of going through theshelltemplate, and to run a shell one-liner with Overseer there is a new:OverseerShellcommand.maketask with anargsparameter. Then other tasks could usewrap_templateto wrap it and provide a default argument (e.g.make test). The idea was that this generic task makes it easier for the user to add custom configs that can runmake <custom param>. Turns out, this is almost never done and adds a lot of complexity. So we got rid of all these unnecessary parameters.overseer.list_taskshas also been changed, and is different (simpler) from the default display sort order.overseer.<module>no longer callsrequire("overseer.<module>")make), I didn't see much use for this anymore.overseer.list_tasks. This has been refactored to be more extensible.Commands
OverseerOpen[!]OverseerCloseOverseerToggle[!]OverseerRunOverseerShell[!]OverseerTaskActionOverseerSaveBundleOverseerLoadBundleOverseerDeleteBundleOverseerRunCmdOverseerShellOverseerInfo:checkhealth overseerOverseerBuildOverseerQuickActionOverseerTaskActionOverseerClearCacheAPI methods
overseer.setupoverseer.on_setupoverseer.new_taskoverseer.toggleoverseer.openoverseer.closeoverseer.list_task_bundlesoverseer.load_task_bundleoverseer.save_task_bundleoverseer.delete_task_bundleoverseer.list_tasksoverseer.run_templaterun_taskoverseer.preload_task_cacheoverseer.clear_task_cacheoverseer.run_actionoverseer.wrap_templateoverseer.add_template_hookoverseer.remove_template_hookoverseer.register_templateoverseer.load_templateoverseer.debug_parseroverseer.register_aliasNon-breaking changes
on_output_summarizeanddisplay_durationare deprecatedvim.systemandvim.fn.jobstartvim.systemorvim.fn.jobstartas an Overseer task.