Hi,

While hacking around I read the doc for org-properties-postprocess-alist and I think it doesn't align with what the implementation of org-set-property does.

The example in the docstring says:

    (("Remaining" (lambda(value)
                      (let ((clocksum (org-clock-sum-current-item))
                            (effort (org-duration-string-to-minutes
                                      (org-entry-get (point) "Effort"))))
                        (org-minutes-to-hh:mm-string (- effort clocksum))))))

But in order for this to work with the implementation I think it would need to be :

    (("Remaining" ((lambda(value)
                      (let ((clocksum (org-clock-sum-current-item))
                            (effort (org-duration-string-to-minutes
                                      (org-entry-get (point) "Effort"))))
                        (org-minutes-to-hh:mm-string (- effort clocksum)))))))

Adding extra parens around the lambda expression in the example to make it a list.  Either that or the implementation of org-set-property should change to :

$ diff org.el org.el.new
14593c14593
<        (fn (assoc property org-properties-postprocess-alist)))
---
>        (fn (cdr (assoc property org-properties-postprocess-alist))))
14596c14596
<     (when fn (setq value (funcall (cadr fn) value)))
---
>     (when fn (setq value (funcall fn value)))

What do you think?

~>Bill