--- /dev/null
+$Id: architecture-notes,v 1.1 2007-02-20 12:10:02 mike Exp $
+
+The basic approach is this: The IRSpy::Connection is an IRSpy-specific
+subclass of ZOOM::Connection, and its only important extra
+functionality is that it maintains a queue of tasks waiting to be done
+on the connection. Only one task is active at once: the next queued
+task is executed only when the previous one ends. (When the queue of
+tasks is exhausted, that markes the end of an IRSpy test, and the next
+test is started, which will in general queue more tasks.)
+
+Tasks are objects of class ZOOM::IRSpy::Task, which has several
+subclasses for the different kinds of task -- Connect, Search,
+Retrieve. As well as the task-type-specific information such as what
+to search for, each task package also carries a set of ZOOM options
+which are applied immediately before the task is run and them
+immediately reset (so as to make the options as non-modal as
+possible). In this was, for example, a Fetch package can specify what
+preferredRecordSyntax the operation should use.
+
+So to answer your question: many tasks are queued within the Perl
+object, but only one Z39.50 operation is submitted at a time (per
+connection -- of course IRSpy multiplexes connections, but it keeps
+life as simple as possible for each connection).
+
+Hope this helps.
+