I gotta a companion script for a serviceworker and I'm trialling right now.
The script works like so:
((n, d) => {
  if (!(n.serviceWorker && (typeof Cache !== 'undefined' && Cache.prototype.addAll))) return; 
  n.serviceWorker.register('/serviceworker.js', { scope: './book/' })
    .then(function(reg) {
        if (!n.serviceWorker.controller) return;
        reg.onupdatefound = () => {
          let installingWorker = reg.installing;
          installingWorker.onstatechange = () => {
            switch (installingWorker.state) {
              case 'installed':
                if (navigator.serviceWorker.controller) {
                  updateReady(reg.waiting);
                } else {
                  // This is the initial serviceworker…
                  console.log('May be skipwaiting here?');
                }
                break;
              case 'waiting':
                updateReady(reg.waiting);
                break;
              case 'redundant':
                // Something went wrong?
                console.log('[Companion] new SW could not install…')
                break;
            }
          };
        };
    }).catch((err) => {
      //console.log('[Companion] Something went wrong…', err);
    });
    function updateReady(worker) {
        d.getElementById('swNotifier').classList.remove('hidden');
        λ('refreshServiceWorkerButton').on('click', function(event) {
          event.preventDefault();
          worker.postMessage({ 'refreshServiceWorker': true } );
        });
        λ('cancelRefresh').on('click', function(event) {
          event.preventDefault();
          d.getElementById('swNotifier').classList.add('hidden');
        });
    }
    function λ(selector) {
      let self = {};
      self.selector = selector;
      self.element = d.getElementById(self.selector);
      self.on = function(type, callback) {
        self.element['on' + type] = callback;
      };
      return self;
    }
    let refreshing;
    n.serviceWorker.addEventListener('controllerchange', function() {
      if (refreshing) return;
      window.location.reload();
      refreshing = true;
    });    
})(navigator, document);
I'm a bit overwhelmed right now by the enormity of the service workers api and unable to "see" what one would do with reg.installing returning a redundant state? 
Apologies if this seems like a dumb question but I'm new to serviceworkers.
It's kinda difficult to work out what your intent is here so I'll try and answer the question generally.
A service worker will become redundant if it fails to install or if it's superseded by a newer service worker.
What you do when this happens is up to you. What do you want to do in these cases?
Based on the definition here https://www.w3.org/TR/service-workers/#service-worker-state-attribute I am guessing just print a log in case it comes up in debugging otherwise do nothing.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With