Over the last few days the important change has not only been more working code. It has been an advance in the model.
We had already established that NCIP2 is a strong standard protocol substrate for direct consortial borrowing. The barrier is not the shape of the protocol so much as the partial implementations that exist in real library systems. Many systems support a small part of NCIP. Few support the full set of services needed for a brokered direct-borrowing lifecycle.
The key move is to use ORS-Appliance as a local adapter in front of an ILS. ORS-Appliance can talk to an ILS through that system’s native API, then expose a fuller NCIP-facing surface to DCB. In effect, it becomes a prosthetic NCIP implementation for each ILS we integrate.
That gives us a cleaner long-term architecture. DCB can focus on orchestration and coordination. The complex host-system adapters can move out of DCB core and into ORS-Appliance host-system bindings such as Sierra, Polaris, or other local systems.
The same model also lets ORS-Appliance run as a Fallback Host where there is no attached host system at all. Staff can operate the lifecycle directly in ORS-Appliance, so participation is not blocked by adapter availability.
Why This Matters
By adopting NCIP this way, adapter writing becomes more open and modular. An adapter author does not have to change DCB orchestration code to participate. They need to bind a host system to the ORS-Appliance host-system API and project the relevant NCIP behaviour.
This is also why the Fallback Host path matters. It is not a toy path. It is the manual implementation of the same model: a host system with human-mediated actions instead of automated native API calls.
Securing NCIP Calls
The local stack now treats protocol calls as service-to-service traffic, not anonymous callbacks.
DCB and ORS-Appliance use local JWT-backed machine identities in the QA topology. ZITADEL issues short-lived tokens, and each service validates the caller before accepting protocol-facing work. That lets NCIP remain the domain protocol while authentication and tenancy stay explicit in the surrounding platform.
The design intent is simple:
- NCIP carries the resource-sharing message.
- JWTs prove which local service is allowed to send that message.
- tenant and agency identifiers still scope the request inside the protocol payload.
Service Registry
DCB and ORS-Appliance now have the NCIP service registry shape needed for consortial interlending, including pickup-anywhere.
The important part is that this is not hardcoded for one path. The registry can describe participants, agencies, service endpoints, supported NCIP roles, and host-system bindings. That makes the model extensible as more host systems are attached and as the pickup-anywhere variant is pulled into the smoke path.
Current Smoke Evidence
Use screenshots as evidence, not decoration.
The screenshots below are from a fresh clean-stack run on 5 July 2026. The lifecycle screenshots use the DCB Admin audit tab because it shows the sequence of state changes more clearly than the current ORS-Appliance request detail screens.
1. Harvesting And Clustering
DCB starts from aggregated metadata. ORS-Appliance exposes tenant catalogue records; DCB harvests them, clusters them, and keeps the source records inspectable.

DCB Admin showing freshly harvested bib records after ORS-Appliance catalogue ingest.

DCB Admin showing the clustered record for A Philosophy of Software Design, 2nd Edition.

DCB Admin showing live item availability collected dynamically from ORS-Appliance: two Hogwarts copies with distinct barcodes.
2. Patron Search And Request Creation
This checkpoint uses the controlled smoke path for request placement. The request is for Rincewind at Unseen University, routed to Hogwarts for item HOG-FHS-POSD-0001.

DCB Admin audit log after request creation and supplier placement.
3. Request At Supplier
DCB places an NCIP RequestItem at the supplier. ORS-Appliance receives it and exposes the supplier-side work.
The smoke path now proves an important real-world edge: DCB requests item HOG-FHS-POSD-0001, but the supplier can confirm that it is sending alternate barcode HOG-FHS-POSD-0002.

Supplier confirmation is projected back into DCB, then DCB places the borrower-side AcceptItem work.
4. Accept At Borrower
After supplier confirmation, DCB sends NCIP AcceptItem to the borrowing ORS-Appliance tenant. The borrower creates the virtual item/request using NCIP bibliographic data and the supplied barcode.
5. Circulation Lifecycle
The useful shift is that the demo no longer stops at supplier confirmation. The smoke path now drives the borrower-side circulation steps through to return transit.
The ORS-Appliance generic request screens still need better lifecycle projection. For this post the DCB audit log is the clearer view of the working protocol sequence.
Supplier Ships

Supplier shipment moves the broker request to PICKUP_TRANSIT.
Borrower Receives And Shelves

Borrower-side receipt moves the request to RECEIVED_AT_PICKUP.

Borrower-side check-in moves the request to READY_FOR_PICKUP.
Patron Loan

Borrower-side checkout moves the request to LOANED.
Return Transit

Borrower-side return shipment moves the request to RETURN_TRANSIT.
Not Supplied

A separate clean request proves the NOT_SUPPLIED branch: the supplier declines and DCB projects the supplier request as missing.
Supplier return receipt is now modelled in the backend. The next publication checkpoint should add the clean-stack screenshot proving DCB moves from RETURN_TRANSIT through completion/finalisation after supplier receipt.
Protocol Story
The protocol shape is now:
DCB
-> NCIP RequestItem
-> ORS-Appliance supplier
-> NCIP ItemRequested or CancelRequestItem
-> DCB supplier projection
-> NCIP AcceptItem
-> ORS-Appliance borrower
-> NCIP ItemShipped / ItemReceived / ItemCheckedIn / ItemCheckedOut
-> DCB borrower projection
-> NCIP ItemShipped return
-> DCB return transit
-> NCIP ItemShipped return-expected
-> ORS-Appliance supplier
-> NCIP ItemCheckedIn supplier return receipt
-> DCB completion/finalisation
The discipline here is important. NCIP inbound code should create lifecycle evidence. DCB workflow code remains responsible for interpreting that evidence in the current request state.
What Remains
The standard two-party path now runs much further than it did at the start of this checkpoint. The remaining visible work is:
- improve ORS-Appliance request detail so it exposes host lifecycle, citation, barcode, and available actions clearly;
- extend the smoke from
RETURN_TRANSITthrough supplier return receipt to DCB finalisation; - add the separate next-supplier smoke path for instance-level requests;
- model pickup-anywhere as its own three-party flow, not as the default case;
- keep moving host-system adapter logic out of DCB and into ORS-Appliance bindings.
The larger direction is now clearer. DCB should be the broker and state coordinator. ORS-Appliance should be the host-system boundary: automated when an adapter exists, staff-mediated when Fallback Host is the only practical route, and NCIP-shaped in either case.