ADR 0593 §7: the composer with its refusals leaves mesh-sdk, so mesh-sdk carries no composition rule. The catalogue functions only the node-engine's composition reaches (Resolve, Resolution's Compose, Declaration, DataItems, LeftOut, Rules and the rest, the settings, placeholder and template refusals, the rendering helpers) are copied with their tests into internal/compose/resolution; a method of a mesh-sdk shape becomes a function taking it first. The composition calls its own copies, and the captured catalogue its tests read lives here now, shared by mesh-compose's tests. Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
75 lines
4.9 KiB
Go
75 lines
4.9 KiB
Go
package resolution
|
|
|
|
import (
|
|
mcat "git.novox.be/novox/mesh-sdk/go/catalogue"
|
|
)
|
|
|
|
// deliveryRemovedInR6 is the row of a verb release 6 removed from the delivery seat.
|
|
func deliveryRemovedInR6(name string) mcat.Verb {
|
|
return mcat.Verb{Name: name, Description: "Removed in R6 (ADR 0539): refused by name, naming its replacement: " + mcat.RemovedDeliveryVerbs[name], Input: schema(nil, nil), Optional: true}
|
|
}
|
|
|
|
// deliveryVerbs are the delivery seat's tools: what reads the merges and checks, and the acts of a person and healer H2
|
|
// on a merge (ADR 0539 clause 17).
|
|
func deliveryVerbs() []mcat.Verb {
|
|
return []mcat.Verb{
|
|
{Name: "deliveries", Description: "Every delivery not final, and those that ended in the last day, one line " +
|
|
"each: its id (owner/repository@commit), its state, its group, what it waits for and since when. Narrowed " +
|
|
"by state, repository or group.",
|
|
Input: schema(map[string]string{"state": "one state, e.g. delivering or held",
|
|
"repository": "owner/repository", "group": "a group's id (its branch name)",
|
|
"all": "\"true\": the final ones of the last thirty days too"}, nil, "all")},
|
|
deliveryRemovedInR6("times"),
|
|
{Name: "show", Description: "One delivery or group whole: its delivery plan (what it builds, what each " +
|
|
"machine receives, what is not an ordinary send), every transition with when and why, the machine " +
|
|
"steps of its walk, its group and its order.",
|
|
Input: schema(map[string]string{"id": "a delivery's id, or a group's"}, []string{"id"})},
|
|
{Name: "groups", Description: "Every delivery group: its members in order, why each pair is ordered " +
|
|
"(declared, built by, version skew, engine before controller, by name), its composed check and its " +
|
|
"state, derived from its members.",
|
|
Input: schema(map[string]string{"all": "\"true\": the groups that ended too"}, nil, "all")},
|
|
deliveryRemovedInR6("what-if"),
|
|
{Name: "checks", Description: "What the mesh's checks said of a pull request's head or of one commit: each " +
|
|
"of the commit's mesh statuses (mesh/check, the one a main requires from R4e, hq's mesh/repo-check, " +
|
|
"mesh/delivery, …) with its state, " +
|
|
"description and when it was set; the merge check's full verdict as the controller said it — each " +
|
|
"layer's summary, the machine that ran it, when, its build id and its report; and whether the branch's " +
|
|
"protection would let it merge, every required status being success.",
|
|
Input: schema(map[string]string{"repository": "owner/repository",
|
|
"number": "a pull request's number: its head is read",
|
|
"commit": "a commit's sha, or the start of one, instead of a pull request"}, []string{"repository"}),
|
|
// Added after the seat's first holder shipped: optional until mesh-delivery serves it everywhere.
|
|
Optional: true},
|
|
{Name: "table", Description: "The state table every delivery runs by: each transition with its guard, " +
|
|
"each state's bound and what healer H2 may do once it has passed; and the machine steps' table.",
|
|
Input: schema(map[string]string{}, nil)},
|
|
{Name: "stalled", Description: "Every delivery held past its state's bound, with the transition the table " +
|
|
"lets healer H2 take for it, or none.",
|
|
Input: schema(map[string]string{}, nil)},
|
|
{Name: "recheck", Description: "Check a rejected or ready delivery again: it goes back to proposed and the " +
|
|
"controller is asked for its check. With why.",
|
|
Input: schema(map[string]string{"id": "the delivery's id", "why": "why, kept with the transition"},
|
|
[]string{"id", "why"})},
|
|
deliveryRemovedInR6("release"),
|
|
deliveryRemovedInR6("stop"),
|
|
{Name: "close", Description: "Healer H2's verb: take the one transition the table names for a delivery held " +
|
|
"past its bound. Refused for any other.",
|
|
Input: schema(map[string]string{"id": "the delivery's id", "why": "the condition it answers"},
|
|
[]string{"id", "why"})},
|
|
deliveryRemovedInR6("retire-history"),
|
|
{Name: "settle", Description: "Ask the operator to settle deliveries held because their merge reached the " +
|
|
"trunk without a passing check: one ask on the operator's channel for all of them, as an Approve is asked. " +
|
|
"The verb moves nothing; on the operator's answer each goes to merged, and whether it is on the machines " +
|
|
"is derived as for any merge (novox/hq ADR 0556). Refused for a delivery not held, or held for another " +
|
|
"reason, naming why.",
|
|
Input: map[string]any{"type": "object", "additionalProperties": false, "required": []string{"ids", "why"},
|
|
"properties": map[string]any{
|
|
"ids": map[string]any{"type": "array", "items": map[string]any{"type": "string"}, "minItems": 1,
|
|
"description": "the held deliveries' ids (owner/repository@commit)"},
|
|
"why": map[string]any{"type": "string", "description": "why they may be settled, shown to the operator"},
|
|
}},
|
|
// Added after the seat's release 6 holder shipped: optional until the gate serves it everywhere.
|
|
Optional: true},
|
|
}
|
|
}
|