     no-roots no-prefixes members ;
 
 : disk-vocabs-for-prefix ( prefix -- assoc )
-    [ [ vocab-roots get ] dip '[ dup _ (disk-vocab-children) ] { } map>assoc ]
+    [ [ vocab-roots get ] dip '[ dup _ (disk-vocabs) ] { } map>assoc ]
     [ unrooted-disk-vocabs [ lookup-vocab ] map! f swap 2array ]
     bi suffix ;
 

: ensure-vocab-root/prefix ( root prefix -- root prefix )
    [ ensure-vocab-root ] [ check-vocab-name ] bi* ;

: (disk-vocab-children) ( root prefix -- vocabs )
    check-vocab-name
    [ vocab-dir append-path dup exists? [ vocab-subdirs ] [ drop { } ] if ]
    [ nip [ "." append '[ _ prepend ] map! ] unless-empty ]
    [ drop '[ _ over vocab-dir? [ >vocab-link ] [ <vocab-prefix> ] if ] map! ]
    2tri ;

: disk-vocabs-recursive% ( root prefix -- )
    dupd vocab-name (disk-vocab-children) [ % ] keep
    [ disk-vocabs-recursive% ] with each ;

: (disk-vocabs-recursive) ( root prefix -- seq )
    [ ensure-vocab-root ] dip
    [ disk-vocabs-recursive% ] { } make ;

: no-rooted ( seq -- seq' ) [ find-vocab-root ] reject ;



<PRIVATE

: visible-dir? ( entry -- ? )
    { [ directory? ] [ name>> "." head? not ] } 1&& ;

: visible-dirs ( seq -- seq' )
    [ visible-dir? ] filter ;

ERROR: vocab-root-required root ;

