Files
mesh-catalog/modules/mesh-knowledge/cmd/mesh-knowledge/review_round.go
T

67 lines
3.0 KiB
Go

package main
// The review knows its round (novox/hq ADR 0665, issue 784). A record's round is the number of its reviews since the
// last of: it was accepted, it was first proposed, the operator declined it at round MostReviewRounds, plus one.
// Reviews belong to the version being worked (a pending version starts with none) and CountFrom marks the Decline,
// so the count is what is on the record. The question names the round and lists the earlier findings of the count;
// from round OnlyWrongFrom only a finding that makes the record wrong asks changes; at round MostReviewRounds a
// review that asks changes becomes an ask of the operator (askOperator with a round), and no review runs before the
// answer (Propose refuses a revision meanwhile).
import (
"fmt"
"strings"
)
const (
// MostReviewRounds is the round at which the operator decides.
MostReviewRounds = 5
// OnlyWrongFrom is the first round in which only a finding that makes the record wrong asks changes.
OnlyWrongFrom = 3
// MostEarlierFindings bounds the earlier findings a question lists, the latest rounds kept.
MostEarlierFindings = 6 << 10
)
// Round is the round of the next review of r.
func (r *Record) Round() int {
from := r.CountFrom
if from > len(r.Reviews) {
from = len(r.Reviews)
}
return len(r.Reviews) - from + 1
}
// roundText is what every part's question says of the round: its number, what the round allows, and the findings
// of the earlier rounds of the count.
func roundText(r *Record) string {
round := r.Round()
var b strings.Builder
fmt.Fprintf(&b, "\nThis is round %d of its review. At round %d the operator decides, so name every finding at once; "+
"a finding an earlier round named and the record answered is not named again.\n", round, MostReviewRounds)
if round >= OnlyWrongFrom {
b.WriteString("From round 3 only a finding that makes the record wrong asks changes: two of its parts contradict each other, " +
"or it contradicts a clause in force of a record it links without changing or superseding that clause, or it breaks one of the " +
"rules above, or a link the whole-set rule needs is missing. Anything else, such as wording, a further case, a nicer form or a " +
"detail its design can hold, is a remark: answer approve and give it as a finding under approve.\n")
}
var earlier []string
for i := r.CountFrom; i < len(r.Reviews) && i >= 0; i++ {
if rv := r.Reviews[i]; rv.Verdict == VerdictChanges && strings.TrimSpace(rv.Findings) != "" {
earlier = append(earlier, fmt.Sprintf("Round %d (version %d) asked changes:\n%s\n", i-r.CountFrom+1, rv.Version, rv.Findings))
}
}
size, from := 0, len(earlier)
for from > 0 && size+len(earlier[from-1]) <= MostEarlierFindings {
from--
size += len(earlier[from])
}
if from < len(earlier) {
b.WriteString("\nThe findings of the earlier rounds:\n")
if from > 0 {
fmt.Fprintf(&b, "(%d earlier round(s) are not shown: the question has no room for them.)\n", from)
}
b.WriteString(strings.Join(earlier[from:], "\n"))
}
return b.String()
}