anchor.diff:  (defun get-github-repo (&optional (system (string-downcase (package-name *package*))))
     (check-type system (or string keyword))
     (with-system-path (path system)
  -    (if path
  -        (multiple-value-bind (out err status)
  -            (asdf/run-program:run-program "git config --get remote.origin.url"
  -                                          :output '(:string :stripped t)
  -                                          :error-output '(:string :stripped t)
  -                                          :ignore-error-status t)
  -          (if (zerop status)
  -              (let ((repo (ppcre:register-groups-bind (match) (":(.+).git$" out :sharedp t)
  -                            match)))
  -                (if repo
  -                    (values repo nil)
  -                    (values nil (format nil "repo not found in ~a" out))))
  -              (values nil err)))
  -        (values nil (format nil "~a system path not found" system)))))
  +    (let* ((out (run-program (format nil "cd ~a && git config --get remote.origin.url" path)))
  +           (repo (ppcre:register-groups-bind (match) (":(.+).git$" out :sharedp t)
  +                   match)))
  +      (if repo repo (error (format nil "repo not found in ~a" out))))))
  
positive.code:      (reply-chat connection (xmpp:from message)
                   (format-ideas *ideas*) (xmpp::type- message)))
      ((equal "reload")
       (let* ((repo (get-github-repo))
              (status (if repo (travis-status repo)))
              (text (if (eq status :passing)
                        (multiple-value-bind (success text) (reload)
                          (if success (git-version) text))
                        (format nil "ci status: ~a (https://travis-ci.org/~a)" status repo))))
         (reply-chat connection (xmpp:from message)
                     text (xmpp::type- message))))
      ((equal "ci")
       (let* ((repo (get-github-repo))
              (status (if repo (travis-status repo))))
         (reply-chat connection (xmpp:from message)
                     (format nil "~a" status) (xmpp::type- message))))
      ((or (optima.ppcre:ppcre "(^|\\s)300($|\\s)")
           (optima.ppcre:ppcre "(^|\\s)тристо($|\\s)")
           (optima.ppcre:ppcre "(^|\\s)триста($|\\s)"))
  
negative.code: 
  (defmacro with-system-path ((var system) &body body)
    `(let ((,var (ql:where-is-system ,system)))
       (if ,var
           (progn ,@body)
           (error (format nil "path for system \"~a\" not found" ,system)))))
  
  (defun run-program (cmd)
    (multiple-value-bind (out err status)
        (asdf/run-program:run-program
         cmd
         :output '(:string :stripped t)
         :error-output '(:string :stripped t)
         :ignore-error-status t)
      (if (zerop status)
          out
          (error (format nil "command ~s exited with status ~a: ~s" cmd status err)))))
  
  (defun git-version ()
    (with-system-path (path "lbot")
      (run-program (format nil "cd ~a && git log -1 --format='%cD (%cr)'" path))))
  
  (defun reload ()
    (with-system-path (path "lbot")
      (run-program (format nil "cd ~a && git pull" path))
      (ql:quickload "lbot")))
  
  (defparameter *connection* nil)
  
  