Hi katja,
     Thanks for the response.  A few questions and responses:
* is knob's move from flatspace to flatgui a special case, or is it representative of some trend of object classes scurrying about from directory to directory?

If it is a special case, then either it is a bug:
"I, user, do declare my intention to load flatspace/knob, a library so standard that it is installed in a path relative to Pd itself, yet so nonstandard that I cannot trust libdir/objectname"
or Pd is wildly misleading:
"I, user, do declare my intention to load library flatspace/knob as a STDLIB[see terms]"
[small print] terms: the standard library path is not responsible for items lost or stolen by the libraries residing in the standard path.

If moving objects around is general trend, well... I really hope it isn't.

* I don't path priority can solve the problem.  Pd has one big class called "objectmaker" which registers a new method for each object creator in Pd, including externals.  So when you type "some_object" in an object box, the first thing Pd is going to search are the methods of objectmaker.  And if it finds a method named "some_object" it's going to execute the function it finds in that method entry.  Thus, if "some_object" was already loaded anywhere in the running Pd instance, it's going to have a method entry in objectmaker and Pd isn't going to search any paths for a library to load.  Now you're back to gambling without prefixes.

Btw-- you can explore these methods in objectmaker from within Pd-l2ork with [nbx]--[classinfo objectmaker].  You can also see everything that's gone through class_new with [classlist(---[pdinfo].

Maybe Hans can chime in here, because I know he wanted Pd-extended to load nothing by default (not even internal Vanilla objects).  In that case there must be some plan to do canvas-environment-local objectmakers, or some other mechanism to keep various abstractions and open patches from polluting each other's namespaces.  I don't understand how that would work, and at least on the face of it this seems difficult to do.  I also don't see any work done to that end, which is why I'm advocating for libdir/objectname as it already exists.

* namespace-testabstraction works because abstractions do not get registered as methods to the objectmaker.  So on the one hand it's a simpler system because you only need to control path priority (and in your test case I _think_ the patch's path is searched first).  But those abstractions only get loaded _after_ searching for external libs in any of the available paths.  So unfortunately you're back to gambling.  (Again, introspection objects like [classinfo] and [pdinfo] are extremely handy here.)

I'll post a guide to how things get loaded in the next few days.  It turns out to be a lot more complex than I realized.

Anyway, my idea is:
1) keep libs as they are for compatibility
2) use prefixes
3) develop new libs with an eye toward usability and consistency (easier than wading through old, unmaintained libs and picking and choosing stuff)

-Jonathan