Files
memex/notes/skill-task-integrity.org

3.9 KiB

#+TITLE - Task Integrity Skill #+AUTHOR - org-agent #+SKILL_NAME - skill-task-integrity

This skill handles automated GTD state transitions and integrity.

Trigger

Triggers only on buffer updates where the AST contains TODO states.

(defun trigger-skill-task-integrity (context)
  (let ((type (getf context :type))
        (payload (getf context :payload)))
    (and (eq type :EVENT)
         (eq (getf payload :sensor) :buffer-update))))

Neuro Prompt

System 1 asks for suggestions on the next action. It uses the Context API to provide the LLM with "peripheral vision" of the user's workload.

(defun neuro-skill-task-integrity (context)
  "Generate a System 1 prompt by gathering relevant facts from the Object Store."
  (let ((recent-wins (org-agent:context-get-recent-completed-tasks))
        (projects (org-agent:context-get-active-projects)))
    ;; We construct a rich, human-readable prompt that describes the user's
    ;; current reality, momentum, and the latest event.
    (format nil "
      You are the user's Executive Assistant managing their Org-mode GTD system.      
      CURRENT MOMENTUM (Recently DONE) - ~a
      ACTIVE PROJECTS - ~a
      
      NEW EVENT - ~a
      
      Suggest the next logical Org-mode action.
      Provide concise, high-fidelity suggestions in Lisp plist format.
      You MUST include :target :emacs in your top-level plist if you intend to execute an action.
    " recent-wins projects context)))

Symbolic Verification

System 2 enforces GTD integrity using deterministic Lisp logic compatible with org-gtd v4.0. It ensures that a task cannot be closed (resolved) if it has active dependencies or children.

(defun semantic-state-category (state)
  "Map a keyword state to its org-gtd v4.0 semantic category."
  (let ((s (string-upcase (or state ""))))
    (cond
     ((member s '("TODO" "NEXT" "WAIT") :test #'string=) :active)
     ((member s '("DONE" "CNCL" "CANCELED") :test #'string=) :resolved)
     (t :unknown))))

(defun has-active-children-p (parent-id)
  "Recursively check if a node has any children in an :active semantic state."
  (let ((parent (org-agent:lookup-object parent-id)))
    (when parent
      (cl:some (lambda (child-id)
                 (let* ((child (org-agent:lookup-object child-id))
                        (state (getf (org-agent:org-object-attributes child) :TODO-STATE)))
                   (or (eq (semantic-state-category state) :active)
                       (has-active-children-p child-id))))
               (org-agent:org-object-children parent)))))

(defun verify-skill-task-integrity (proposed-action context)
  "The System 2 gatekeeper for task consistency. 
   Ensures parent tasks cannot be closed if children are still active."
  (let* ((payload (getf proposed-action :payload))
         (action (getf payload :action))
         (target-id (getf payload :target-id))
         (props (getf payload :properties))
         (new-state (cdr (assoc :TODO-STATE props))))
    
    ;; If the proposal attempts to transition a node to a :resolved state
    (if (and (eq action :refactor-subtree)
             target-id
             (eq (semantic-state-category new-state) :resolved))
        
        ;; Verify that all hierarchical dependencies are met
        (if (has-active-children-p target-id)
            (progn
              (format t "System 2 [skill-task-integrity] - BLOCKED transition of ~a to ~a. Active children remain.~%" target-id new-state)
              nil) ; Return NIL to block the illegal state change
            proposed-action)
        
        ;; Allow all other actions (e.g., TODO -> NEXT, or simple property updates)
        proposed-action)))

Registration

Register the skill.

(defskill :skill-task-integrity
  :priority 50
  :trigger #'trigger-skill-task-integrity
  :neuro #'neuro-skill-task-integrity
  :symbolic #'verify-skill-task-integrity)