// Package buildstep is what both build modules share: the runner of a long step that answers a tool call at once // and ends on its key in the module's `steps` state (novox/hq ADR 0469 ยง2; issue 1471), the toolchain guard // (issue 1473), the fetch of one commit over SSH (issue 1474), and the failure contract of a test level with the parsers // of go test -json and node --test's TAP that fill it (failure.go, issue 1901; its conformance kit is package conformance). package buildstep import ( "crypto/rand" "encoding/hex" "strconv" "time" ) var now = time.Now // NewID is a step id: the time in milliseconds in base 36 and six random hex digits, lower-case letters and // digits only, so it is one key token and differs between two steps of one node even in one millisecond. func NewID() string { var b [3]byte _, _ = rand.Read(b[:]) return strconv.FormatInt(now().UnixMilli(), 36) + hex.EncodeToString(b[:]) }