Merge origin/main into b7/registry: the group try and the successor validation take the group's contracts, clients and seat list (issue 1966, issue 1921)

The seat verb try gains members (ADR 0637 section 6); the try's group name and the missing-preview reason are one definition of mesh-delivery-sdk (ADR 0637 section 8).

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
This commit is contained in:
2026-11-05 20:41:41 +01:00
53 changed files with 2571 additions and 226 deletions
@@ -214,14 +214,26 @@ func DecodePreviewsByRepositoryHeadTrunkValue(raw []byte) (PreviewsByRepositoryH
return v, nil
}
// TryInput is what try takes.
type TryInput struct {
// TryInputMembersItem is a type of the contract.
type TryInputMembersItem struct {
// the full commit to try, 40 or 64 hex digits
Head string `json:"head"`
// unit or integration: only this level; both when absent
Level string `json:"level,omitempty"`
// <owner>/<name>
Repository string `json:"repository"`
// the trunk commit to merge it onto, or the trunk's branch for its head now; the trunk's head when absent
Trunk string `json:"trunk,omitempty"`
}
// TryInput is what try takes.
type TryInput struct {
// the full commit to try, 40 or 64 hex digits, for a try of one member (instead of members)
Head string `json:"head,omitempty"`
// unit or integration: only this level; both when absent
Level string `json:"level,omitempty"`
// the group: one repository at most once, each at the exact commit asked and the trunk commit it is merged onto; instead of repository and head
Members []TryInputMembersItem `json:"members,omitempty"`
// <owner>/<name>, for a try of one member (instead of members)
Repository string `json:"repository,omitempty"`
// a go test -run pattern: only those tests run, and nothing is kept
Tests string `json:"tests,omitempty"`
// the trunk commit to merge it onto, or the trunk's branch for its head now; the trunk's head when absent
@@ -8,7 +8,7 @@
"verbs": [
{
"name": "try",
"description": "Try a pushed head before its pull request is opened: the checker judges it as it judges a pull request's head, merged onto its trunk's head, its unit and integration levels through the build modules, and owes the forge nothing. Answers the try's id at once; try-read reads where it stands. A try of the same head that waits or runs is the answer to a second ask; at most 4 wait or run at once, mesh-wide.",
"description": "Try pushed heads before their pull requests are opened: the checker judges them as it judges a delivery group's pull requests, each member merged onto its trunk, its unit and integration levels through the build modules, then the members' manifests, the module graph and the composition on every placed node, and owes the forge nothing. Name the group's members (each a repository and the exact commit), or one repository and its head for a try of one member. Answers the try's id at once; try-read reads where it stands. The same members at the same commits, in any order, are the answer to a second ask while that try waits or runs; at most 4 wait or run at once, mesh-wide.",
"optional": true,
"replaces": [
"sh merge-check.sh",
@@ -17,7 +17,7 @@
"input": {
"properties": {
"head": {
"description": "the full commit to try, 40 or 64 hex digits",
"description": "the full commit to try, 40 or 64 hex digits, for a try of one member (instead of members)",
"type": "string"
},
"level": {
@@ -25,7 +25,7 @@
"type": "string"
},
"repository": {
"description": "<owner>/<name>",
"description": "<owner>/<name>, for a try of one member (instead of members)",
"type": "string"
},
"tests": {
@@ -35,12 +35,33 @@
"trunk": {
"description": "the trunk commit to merge it onto, or the trunk's branch for its head now; the trunk's head when absent",
"type": "string"
},
"members": {
"description": "the group: one repository at most once, each at the exact commit asked and the trunk commit it is merged onto; instead of repository and head",
"type": "array",
"items": {
"type": "object",
"properties": {
"repository": {
"description": "<owner>/<name>",
"type": "string"
},
"head": {
"description": "the full commit to try, 40 or 64 hex digits",
"type": "string"
},
"trunk": {
"description": "the trunk commit to merge it onto, or the trunk's branch for its head now; the trunk's head when absent",
"type": "string"
}
},
"required": [
"repository",
"head"
]
}
}
},
"required": [
"repository",
"head"
],
"type": "object"
},
"answer": {
@@ -123,14 +123,25 @@ export function parsePreviewsByRepositoryHeadTrunkKey(key: string): { repository
return { repository, head, trunk };
}
/** is what try takes. */
export interface TryInput {
export interface TryInputMembersItem {
/** the full commit to try, 40 or 64 hex digits */
"head": string;
/** unit or integration: only this level; both when absent */
"level"?: string;
/** <owner>/<name> */
"repository": string;
/** the trunk commit to merge it onto, or the trunk's branch for its head now; the trunk's head when absent */
"trunk"?: string;
}
/** is what try takes. */
export interface TryInput {
/** the full commit to try, 40 or 64 hex digits, for a try of one member (instead of members) */
"head"?: string;
/** unit or integration: only this level; both when absent */
"level"?: string;
/** the group: one repository at most once, each at the exact commit asked and the trunk commit it is merged onto; instead of repository and head */
"members"?: TryInputMembersItem[];
/** <owner>/<name>, for a try of one member (instead of members) */
"repository"?: string;
/** a go test -run pattern: only those tests run, and nothing is kept */
"tests"?: string;
/** the trunk commit to merge it onto, or the trunk's branch for its head now; the trunk's head when absent */