W1.5, W1.6 (judge): a kept data's form is from 0 and its catch-up tool the module's own

The node agent calls a restored kept data's catch-up tool from the
restore point, so the judge refuses a form below 0 and a catch-up tool
the module does not declare; a foundation part keeps its new objects in
the old section with their cap and form (ADR 0619 §2).

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ

Builds: design 47 G §295, §299
This commit is contained in:
2026-11-11 14:39:10 +01:00
parent 5d3c2c680e
commit c4a8590671
@@ -87,6 +87,12 @@ func TestBusStateIsJudgedOnce(t *testing.T) {
{"a digest of a field that is no text", manifest(strings.Replace(ledger, `{"title":{"type":"text"}}`, `{"title":{"type":"text"},"n":{"type":"integer"},"sum":{"type":"text","digest-of":"n"}}`, 1)),
[]string{"\"records\"", "field \"sum\"", "digest of \"n\"", "no text field"}},
{"a digest of a text field", manifest(strings.Replace(ledger, `{"title":{"type":"text"}}`, `{"title":{"type":"text"},"sum":{"type":"text","digest-of":"title"}}`, 1)), nil},
// W1.5 (design 47, *Its form is declared*): a form below 0 is refused where the reader reads it, in `requires` too.
{"a form below 0", manifest(`{"name":"x","storage":"key-value","template":"state","form":-1}`), []string{"its form is -1"}},
// W1.6 (ADR 0619 §2): a foundation part keeps its new objects in the old section, with their cap and form (the
// same objects in the new form it is refused: DLV-J1 in the index's verdicts test).
{"a foundation part's objects in the old section", `{"module":"mesh-delivery-assigner","version":"1","tools":["assigner_graph_again"],` +
`"objects":[{"name":"revisions","max-mib":256,"form":1,"catch-up":"assigner_graph_again"}]}`, nil},
} {
_, problems := Manifest([]byte(c.raw), nil)
switch {