  Today's programmers face a false choice between creating software that is
extensible and software that is correct. Specifically, dynamic languages permit
software that is richly extensible (via dynamic code loading, dynamic object
extension, and various forms of reflection), and today's programmers exploit
this flexibility to "bring their own language features" to enrich extensible
languages (e.g., by using common JavaScript libraries). Meanwhile, such
library-based language extensions generally lack enforcement of their
abstractions, leading to programming errors that are complex to avoid and
predict.
  To offer verification for this extensible world, we propose online
verification-validation (OVV), which consists of language and VM design that
enables a "phaseless" approach to program analysis, in contrast to the standard
static-dynamic phase distinction. Phaseless analysis freely interposes abstract
interpretation with concrete execution, allowing analyses to use dynamic
(concrete) information to prove universal (abstract) properties about future
execution.
  In this paper, we present a conceptual overview of OVV through a motivating
example program that uses a hypothetical database library. We present a generic
semantics for OVV, and an extension to this semantics that offers a simple
gradual type system for the database library primitives. The result of
instantiating this gradual type system in an OVV setting is a checker that can
progressively type successive continuations of the program until a continuation
is fully verified. To evaluate the proposed vision of OVV for this example, we
implement the VM semantics (in Rust), and show that this design permits
progressive typing in this manner.
