The words of a want held on a verb or a reader capability are written and read in one place, the module graph's package: the assigner writes them, the view names the edge from them. A bus-state wait is named bus state, and each module's verb edges the graph leaves out on a cycle are listed beside its waits. Claude-Session: https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
51 lines
2.0 KiB
Go
51 lines
2.0 KiB
Go
package graph
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// The words of a want held on an edge of ADR 0614 (novox/hq ADR 0614 §2, §4): no reader knows a rule number of its own for
|
|
// either yet, so the assigner holds them under the provisions' and the composition's rules, and these words are the one
|
|
// place they are written and read. The assigner writes them (VerbWaitWords, ReaderWaitWords); the delivery view names
|
|
// the edge a want waits on from them (EdgeOfWords).
|
|
|
|
const (
|
|
verbOpen = "the verb "
|
|
verbClose = " invokes is served by no running build"
|
|
readerOpen = "the node-engine of "
|
|
readerMid = " does not read "
|
|
readerTail = ", which the manifest of "
|
|
)
|
|
|
|
// VerbWaitWords are the words of a want of module on node held until a build serving verb runs healthy (ADR 0614 §2).
|
|
func VerbWaitWords(verb, module, node string) string {
|
|
return fmt.Sprintf("%s%s %s%s: its want on %s waits until a build serving it runs healthy (ADR 0614 §2)", verbOpen, verb,
|
|
module, verbClose, node)
|
|
}
|
|
|
|
// ReaderWaitWords are the words of a want of module at fp held on node until its node-engine states the reader
|
|
// capabilities missing (ADR 0614 §4).
|
|
func ReaderWaitWords(node string, missing []string, module, fp string) string {
|
|
return fmt.Sprintf("%s%s%s%s%s%s at %s needs: the want moves once that engine states it", readerOpen, node, readerMid,
|
|
strings.Join(missing, ", "), readerTail, module, fp)
|
|
}
|
|
|
|
// EdgeOfWords is the edge a held want's words name: `verb <verb>` for a verb wait, `reader capability <capabilities>` for
|
|
// a reader capability's hold, or "" for words of neither.
|
|
func EdgeOfWords(words string) string {
|
|
if rest, ok := strings.CutPrefix(words, verbOpen); ok {
|
|
if verb, _, ok := strings.Cut(rest, " "); ok && strings.Contains(rest, verbClose) {
|
|
return "verb " + verb
|
|
}
|
|
}
|
|
if rest, ok := strings.CutPrefix(words, readerOpen); ok {
|
|
if _, rest, ok := strings.Cut(rest, readerMid); ok {
|
|
if missing, _, ok := strings.Cut(rest, readerTail); ok {
|
|
return "reader capability " + missing
|
|
}
|
|
}
|
|
}
|
|
return ""
|
|
}
|