agile-gtd-trigger-next-sibling writes TRIGGER: next-sibling todo!(NEXT). todo! sets the sibling's state unconditionally, so:
- It revives finished work. Closing a task whose next sibling is already DONE or KILL moves that sibling back to NEXT.
- It fires on KILL. Cancelling a step advances the chain as if the step were finished. During a cleanup that kills a whole project top-down, every kill promotes the next sibling before it is killed in turn (seen 2026-09-23 in
emacs.org and homelab.org).
Fix
Promote only a sibling that is still waiting, and only on DONE:
if next-sibling todo?(TODO) then next-sibling todo!(NEXT) endif
The KILL case may need a self state check (if self todo?(DONE) …), or a decision that a kill should not advance the chain.
The functions write the property once, so existing headings keep the old form. agile-gtd-chain-task could offer to rewrite TRIGGERs it recognises.
agile-gtd-trigger-next-siblingwritesTRIGGER: next-sibling todo!(NEXT).todo!sets the sibling's state unconditionally, so:emacs.organdhomelab.org).Fix
Promote only a sibling that is still waiting, and only on DONE:
The KILL case may need a
selfstate check (if self todo?(DONE) …), or a decision that a kill should not advance the chain.The functions write the property once, so existing headings keep the old form.
agile-gtd-chain-taskcould offer to rewrite TRIGGERs it recognises.