I am new here so apologies if my comments seem odd...

1) If an implementation doesn't recognize a config option it should blow up immediately.  Databases not providing the guarantees one requests are scary, and not just because of the risk of typos.

2) Possibly just a documentation nit:  If 'transaction' is a handle to a currently running transaction why is the predicate called okvs-transaction?  I'd expect the type to be called okvs-transaction.

3) Why isn't okvs-transaction-begin called just okvs-transaction?  In contrast, one gets an okvs from a procedure called okvs.

4) Why isn't okvs-transaction-commit called okvs-transaction-close to match okvs-close?  If 'close' is somehow ambiguous then maybe change the name of okvs-close.

5) What happens if the user does not call okvs-close?  What must we assume should happen even if it doesn't in practice?  Total data corruption?

6) What precisely are the semantics of the hash-table returned from okvs-transaction-metadata?  Does this documentation need to refer to a particular RnRs or other SRFI?  What happens if I mutate it? :)

7) If okvs-transaction-metadata returns a hash-table why call it metadata?

8) Could okvs-debug simply be made a degenerate case of okvs-range?

9) What does it mean for the 'home' in (okvs home) to be an address?

10) What is an example of a useful 'config' going into okvs-close?

11) What is an example of a useful 'config' going into okvs-transaction-roll-back?

12) Given continuations and the like (super noob here w/ Scheme) why does one need explicit transaction begin/commit/rollback at all?  It seems like okvs-in-transaction would cover all use cases.  Especially given the everything-must-be-committed-or-rolled-back warning at okvs-transaction-begin.

13) Is start-key/start-include/end-key/end-include some best practice from elsewhere?  How far can you go in simplifying the API with a half-open interval [start, end) where end is implied to be okvs-maximum-key when omitted?

14) Is okvs-debug a very small amount of logic atop okvs-prefix where the prefix is trivial?

15) Why don't all the procedures returning an SRFI-158 generator have some common token in the name?  Some are called 'range' while okvs-prefix omits it.

16) Absent should/must/etc language around transactions, what happens during commit/rollback is underspecified.

17) What happens to an uncommitted/rollbacked transaction when okvs-close is called?

18) Why might okvs-range and the like take an offset parameter in config?  They could simply use start-key = "last seen" and set start-include of #f.

19) Thanks for reading this far.

- Rhys