code: func (c *Corpus) PermanodeAttrValue(permaNode blob.Ref,
  	attr string,
  	at time.Time,
  	signerFilter string) string {
  	pm, ok := c.permanodes[permaNode]
  	if !ok {
  		return ""
  	}
  	var signerRefs SignerRefSet
  	if signerFilter != "" {
  		signerRefs, ok = c.signerRefs[signerFilter]
  		if !ok {
  			return ""
  		}
  	}
  
  	if values, ok := pm.valuesAtSigner(at, signerFilter); ok {
  		v := values[attr]
  		if len(v) == 0 {
  			return ""
  		}
  		return v[0]
  	}
  
  	return claimPtrsAttrValue(pm.Claims, attr, at, signerRefs)
  }
docs: // PermanodeAttrValue returns a single-valued attribute or "".
  // signerFilter, if set, should be the GPG ID of a signer
  // (e.g. 2931A67C26F5ABDA).