From 0d07efd395b2cc684f8f6ac90480e4f4b2293d8e Mon Sep 17 00:00:00 2001 From: jochen Date: Tue, 13 Oct 2026 17:30:04 +0200 Subject: [PATCH] The glance's cut says only what the note holds there: whole beside the whole details, else in the note (ADR 0347) --- cmd/mesh-controller/proposals.go | 13 ++++++++++--- cmd/mesh-controller/proposals_test.go | 13 ++++++++++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/cmd/mesh-controller/proposals.go b/cmd/mesh-controller/proposals.go index 53ea34f4..318feb16 100644 --- a/cmd/mesh-controller/proposals.go +++ b/cmd/mesh-controller/proposals.go @@ -283,6 +283,13 @@ func (p settingsProposal) change(machines []string, exact bool) ([]string, []str for i, l := range lines { all[i] = l.text } + // What the note holds of a value: whole where the glance is the whole one (shown only where the sender is + // proven, with the whole details beside it), under the content rule elsewhere — so the marker says no more than + // the note it points to (the review of ADR 0347). + inNote := "in the note" + if exact { + inNote = "whole in the note" + } var out []string for i, l := range lines { if len(lines) > asks.MostPoints && i == asks.MostPoints-1 { @@ -290,13 +297,13 @@ func (p settingsProposal) change(machines []string, exact bool) ([]string, []str for _, r := range lines[i:] { rest = append(rest, r.key) } - out = append(out, fmt.Sprintf("and %d more, each whole in the note: %s", len(rest), strings.Join(rest, ", "))) + out = append(out, fmt.Sprintf("and %d more, each %s: %s", len(rest), inNote, strings.Join(rest, ", "))) break } out = append(out, l.text) } - // A point too long for a glance is cut, and says so: its whole value is the note's. - const cut = "… (cut: whole in the note)" + // A point too long for a glance is cut, and says so: its value is the note's. + cut := "… (cut: " + inNote + ")" for i, l := range out { if r := []rune(l); len(r) > asks.PointLength { out[i] = string(r[:asks.PointLength-len([]rune(cut))]) + cut diff --git a/cmd/mesh-controller/proposals_test.go b/cmd/mesh-controller/proposals_test.go index 4fc03063..2ef2fde5 100644 --- a/cmd/mesh-controller/proposals_test.go +++ b/cmd/mesh-controller/proposals_test.go @@ -273,7 +273,7 @@ func TestAProposalShowsItsValuesWholeOnlyWhereTheSenderIsProvenAndNeverASecret(t if _, err := r3.pr.propose(context.Background(), proposeInput{module: "notes", node: "laptop", values: five}); err != nil { t.Fatal(err) } - if q3 := r3.askSent(t); !strings.HasSuffix(q3.Explanation, "\n+ a: 1\n+ b: 2\nand 3 more, each whole in the note: c, d, e") || asks.Glance(q3.Explanation) != nil || + if q3 := r3.askSent(t); !strings.HasSuffix(q3.Explanation, "\n+ a: 1\n+ b: 2\nand 3 more, each in the note: c, d, e") || asks.Glance(q3.Explanation) != nil || !strings.Contains(q3.Details, "settings proposals") { t.Errorf("five keys:\n%s", q3.Explanation) } @@ -885,7 +885,10 @@ func TestEveryKeyAndItsWholeValueReachTheOperator(t *testing.T) { t.Errorf("the operator never reads %s whole:\n%s", k, visible) } } - if asks.Glance(q.Explanation) != nil || !strings.HasSuffix(q.Explanation, "\nand 3 more, each whole in the note: c, d, shares") { + // The masked glance points to a note that holds the values masked, and says no more; the whole glance, shown only + // beside the whole details, says they are whole there. + if asks.Glance(q.Explanation) != nil || !strings.HasSuffix(q.Explanation, "\nand 3 more, each in the note: c, d, shares") || + strings.Contains(q.Explanation, "whole in the note") || !strings.HasSuffix(q.Whole, "\nand 3 more, each whole in the note: c, d, shares") { t.Errorf("the glance:\n%s", q.Explanation) } for k := range values { @@ -908,7 +911,11 @@ func TestEveryKeyAndItsWholeValueReachTheOperator(t *testing.T) { t.Fatal(err) } q2 := r2.askSent(t) - if !strings.HasSuffix(q2.Whole, "… (cut: whole in the note)") || !strings.Contains(q2.WholeDetails, "+ shares: "+value) || asks.Glance(q2.Whole) != nil { + // The cut point is 160 characters, its marker inside the bound. + if last := q2.Whole[strings.LastIndex(q2.Whole, "\n")+1:]; len([]rune(last)) != asks.PointLength { + t.Errorf("the cut point is %d characters, not %d: %q", len([]rune(last)), asks.PointLength, last) + } + if !strings.HasSuffix(q2.Whole, "… (cut: whole in the note)") || !strings.HasSuffix(q2.Explanation, "‹path›") && !strings.HasSuffix(q2.Explanation, "… (cut: in the note)") || !strings.Contains(q2.WholeDetails, "+ shares: "+value) || asks.Glance(q2.Whole) != nil { t.Errorf("the cut is not said, or the note lacks the whole:\n%s\n--\n%s", q2.Whole, q2.WholeDetails) } }