anchor.diff:  
   (defun sanitize (name)
     (remove-if (lambda (x) (find x "./\\")) name))
  -
  -(defun template-apply (template-name args params)
  -  (declare (ignorable template-name args params))
  -  (print (list template-name args)))
   
   (defun template-path (name)
     (merge-pathnames (format nil "templates/~A/" name)
  
positive.code:       (unless (and (eql 'defvar (first read/))
                     (string-equal  '*params* (second read/))) 
          (error "not init template ~S~%" (list read/)))
        (rest (third read/)))))
  
  (defun template-init (names)
    (let* ((name (sanitize (first names)))
  
negative.code:            while i
             collect (code-char i)) 'string)))
  
  (defun copy-file (src dest params)
    (declare (ignore params))
    (uiop:copy-file src dest))
  
  (defvar *template-function-plist*
    '(nil copy-file))
  
  (defun template-apply (template-name args info)
    (declare (ignorable template-name args info))
    ;; tbd rename/chmod/template/after-hook
    (dolist (i (getf info :files))
      (funcall (getf *template-function-plist* (getf i :method))
               (merge-pathnames (format nil "~A/~A" template-name (enc-string (getf i :name))) (template-path template-name))
               (print (ensure-directories-exist (merge-pathnames (getf i :name) *default-pathname-defaults*)))
               args)))
  
  (defun write-template (name &key
                                (path (template-path name))
                                list)
  