Merge branch 'feat/47-G-judge5' into feat/47-G-join8
This commit is contained in:
@@ -5,7 +5,8 @@
|
||||
// go run . <catalogue root>
|
||||
//
|
||||
// Exits 1 on a finding. The packages that count are those the build module counts (mesh-build-node fetch.go
|
||||
// ownDependencies): the `dependencies` beyond the SDK, typescript and the @types packages.
|
||||
// ownDependencies): the `dependencies` beyond the mesh's own packages (@novox/mesh-*, the SDK among them), typescript and the
|
||||
// @types packages.
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -17,6 +18,10 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
// meshPackages is the prefix of every package the mesh itself publishes: the build module's toolchain and the mesh's registry
|
||||
// give them, as they give the SDK, so a module naming only them needs no lock (design 47 G A-56).
|
||||
const meshPackages = "@novox/mesh-"
|
||||
|
||||
// Finding is one module refused: it names Packages beyond the SDK and has no lock file.
|
||||
type Finding struct {
|
||||
Module string
|
||||
@@ -70,7 +75,7 @@ func Check(root string) ([]Finding, error) {
|
||||
}
|
||||
var names []string
|
||||
for n := range pkg.Dependencies {
|
||||
if n != "@novox/mesh-sdk" && n != "typescript" && !strings.HasPrefix(n, "@types/") {
|
||||
if !strings.HasPrefix(n, meshPackages) && n != "typescript" && !strings.HasPrefix(n, "@types/") {
|
||||
names = append(names, n)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +35,8 @@ func TestAModuleNamingOnlyTheSDKNeedsNoLock(t *testing.T) {
|
||||
root := t.TempDir()
|
||||
module(t, root, "plain", "typescript", sdkOnly, false)
|
||||
module(t, root, "none", "typescript", "", false)
|
||||
// The mesh's own packages count as the SDK does (design 47 G A-56): a contracts package needs no lock.
|
||||
module(t, root, "contracts", "typescript", `{"dependencies":{"@novox/mesh-sdk":"^0.1.1","@novox/mesh-delivery-contracts-git":"^0.1.0"}}`, false)
|
||||
got, err := Check(root)
|
||||
if err != nil || len(got) != 0 {
|
||||
t.Fatalf("%v %v", got, err)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "adwaita",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"moved": true,
|
||||
"capabilities": [
|
||||
"package-manager"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "artifact-store-tools",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"packages": {
|
||||
"git.novox.be/novox/mesh-delivery/modules/mesh-delivery-builder/builds": "0.1"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "asus-zephyrus-g14",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"moved": true,
|
||||
"templates": "templates",
|
||||
"capabilities": [
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "audit-logger",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "audit",
|
||||
"consumes": [
|
||||
"**"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "avahi",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"package-manager",
|
||||
"service-manager"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "baserow",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"container-runtime"
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "blueman",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"package-manager"
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "bluetooth",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"package-manager",
|
||||
"service-manager"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "brother",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"requires": [
|
||||
{
|
||||
"name": "s3-bucket",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "buildah",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"package-manager",
|
||||
"user-namespaces"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "ca-trust",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "catrust",
|
||||
"capabilities": [
|
||||
"service-manager"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "claude-code",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"moved": true,
|
||||
"slug": "agent",
|
||||
"capabilities": [
|
||||
@@ -25,6 +25,11 @@
|
||||
"max-age-days": 7,
|
||||
"max-mib": 16
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "findings",
|
||||
"storage": "key-value",
|
||||
"template": "state"
|
||||
}
|
||||
],
|
||||
"binds": {
|
||||
@@ -59,8 +64,7 @@
|
||||
"proposals",
|
||||
"questions",
|
||||
"memory",
|
||||
"waits",
|
||||
"findings"
|
||||
"waits"
|
||||
],
|
||||
"emits": [
|
||||
"judged"
|
||||
@@ -248,7 +252,16 @@
|
||||
"path": "${dir:state}/settings.json",
|
||||
"mode": "0600",
|
||||
"owner": "${machine:account}",
|
||||
"takes-config": ["role", "mcp_servers", "managed_settings", "instructions", "output_styles", "skills", "commands", "agents"],
|
||||
"takes-config": [
|
||||
"role",
|
||||
"mcp_servers",
|
||||
"managed_settings",
|
||||
"instructions",
|
||||
"output_styles",
|
||||
"skills",
|
||||
"commands",
|
||||
"agents"
|
||||
],
|
||||
"merge": "json",
|
||||
"template": "files/settings.json"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "claude-licence-manager",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "licmgr",
|
||||
"requires": [
|
||||
"postgres-database",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "clipmenu",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"moved": true,
|
||||
"capabilities": [
|
||||
"package-manager"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "confluence",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "confl",
|
||||
"own-secrets": {
|
||||
"token": "${dir:state}/token"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "cups",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"package-manager",
|
||||
"service-manager"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "dbus",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"package-manager",
|
||||
"service-manager"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "desk-channel",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "desk",
|
||||
"runs-as": "desk-channel",
|
||||
"claims": [
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "dev-tools",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"package-manager"
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "disk-load",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"tools": [
|
||||
"disk_load",
|
||||
"disk_top",
|
||||
|
||||
@@ -916,19 +916,34 @@ func TestTheHolderOfTheTwoImageSeats(t *testing.T) {
|
||||
// Running review F2: incoming asks the bus 8 GiB, the most the objects template allows, equal to IncomingCap
|
||||
// (said only where no binding is read); transfers keeps for good, the holder dropping an idle one by its key
|
||||
// in idle, a state of keys with their own time to live.
|
||||
// The image registry is a foundation part (design 47 G §584): its bus state is in its old sections, incoming in
|
||||
// `objects`, the others in `state`.
|
||||
var req struct {
|
||||
Requires []struct {
|
||||
Name string `json:"name"`
|
||||
Options map[string]any `json:"options"`
|
||||
} `json:"requires"`
|
||||
Objects []struct {
|
||||
Name string `json:"name"`
|
||||
MaxMiB uint64 `json:"max-mib"`
|
||||
} `json:"objects"`
|
||||
State []json.RawMessage `json:"state"`
|
||||
}
|
||||
_ = json.Unmarshal(raw, &req)
|
||||
opts := map[string]map[string]any{}
|
||||
for _, r := range req.Requires {
|
||||
opts[r.Name] = r.Options
|
||||
for _, e := range req.State {
|
||||
var o map[string]any
|
||||
if json.Unmarshal(e, &o) != nil {
|
||||
var name string
|
||||
_ = json.Unmarshal(e, &name)
|
||||
o = map[string]any{"name": name}
|
||||
}
|
||||
opts[fmt.Sprint(o["name"])] = o
|
||||
}
|
||||
if mib, _ := opts[IncomingObjects]["max-mib"].(float64); uint64(mib)<<20 != IncomingCap {
|
||||
t.Errorf("incoming asks %v MiB, IncomingCap is %d bytes: want them equal", opts[IncomingObjects]["max-mib"], uint64(IncomingCap))
|
||||
var incoming uint64
|
||||
for _, o := range req.Objects {
|
||||
if o.Name == IncomingObjects {
|
||||
incoming = o.MaxMiB
|
||||
}
|
||||
}
|
||||
if incoming<<20 != IncomingCap {
|
||||
t.Errorf("incoming asks %v MiB, IncomingCap is %d bytes: want them equal", incoming, uint64(IncomingCap))
|
||||
}
|
||||
if _, ok := opts[TransfersState]["ttl-seconds"]; ok {
|
||||
t.Errorf("transfers has a lifetime %v: the bus would drop a transfer's key and leave its parts", opts[TransfersState])
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "distribution",
|
||||
"version": "2",
|
||||
"version": "0.1",
|
||||
"provides": [
|
||||
{
|
||||
"name": "artifact-store",
|
||||
@@ -79,62 +79,6 @@
|
||||
"description": "per verb, the modules that may call it (JSON object of verb to modules; operator for the operator's session); empty is design 51's list"
|
||||
}
|
||||
},
|
||||
"requires": [
|
||||
{
|
||||
"name": "incoming",
|
||||
"storage": "object-store",
|
||||
"template": "objects",
|
||||
"options": {
|
||||
"max-mib": 8192
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "transfers",
|
||||
"storage": "key-value",
|
||||
"template": "state"
|
||||
},
|
||||
{
|
||||
"name": "idle",
|
||||
"storage": "key-value",
|
||||
"template": "state",
|
||||
"options": {
|
||||
"key-ttl": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "holds",
|
||||
"storage": "key-value",
|
||||
"template": "state"
|
||||
},
|
||||
{
|
||||
"name": "windows",
|
||||
"storage": "key-value",
|
||||
"template": "state"
|
||||
},
|
||||
{
|
||||
"name": "mirrors",
|
||||
"storage": "key-value",
|
||||
"template": "state"
|
||||
},
|
||||
{
|
||||
"name": "findings",
|
||||
"storage": "key-value",
|
||||
"template": "state"
|
||||
},
|
||||
{
|
||||
"name": "events",
|
||||
"storage": "stream",
|
||||
"template": "events",
|
||||
"options": {
|
||||
"events": [
|
||||
"old-name-closed",
|
||||
"direct-writes-closed"
|
||||
],
|
||||
"max-age-days": 7,
|
||||
"max-mib": 16
|
||||
}
|
||||
}
|
||||
],
|
||||
"capabilities": [
|
||||
"container-runtime"
|
||||
],
|
||||
@@ -290,6 +234,32 @@
|
||||
],
|
||||
"max-age-days": 7,
|
||||
"max-mib": 16
|
||||
},
|
||||
{
|
||||
"name": "distribution-events",
|
||||
"events": [
|
||||
"old-name-closed",
|
||||
"direct-writes-closed"
|
||||
],
|
||||
"max-age-days": 7,
|
||||
"max-mib": 16
|
||||
}
|
||||
],
|
||||
"objects": [
|
||||
{
|
||||
"name": "incoming",
|
||||
"max-mib": 8192
|
||||
}
|
||||
],
|
||||
"state": [
|
||||
"transfers",
|
||||
{
|
||||
"name": "idle",
|
||||
"key-ttl": true
|
||||
},
|
||||
"holds",
|
||||
"windows",
|
||||
"mirrors",
|
||||
"findings"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "dmenu",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"package-manager"
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "dnsmasq",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"upgrade": {
|
||||
"policy": "record",
|
||||
"why": "the mesh's resolver: a build that breaks it can stop a machine resolving the bus, and then neither the gate's rollback nor a push reaches it (hq ADR 0236, issue 260)"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "docker-compose",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"package-manager"
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "docker",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"package-manager",
|
||||
"service-manager",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "dunst",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"moved": true,
|
||||
"capabilities": [
|
||||
"package-manager"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "fail2ban",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"firewall"
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "feh",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"moved": true,
|
||||
"capabilities": [
|
||||
"package-manager"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "flatpak",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"package-manager"
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "fonts",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"package-manager"
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "forticlient",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"upgrade": {
|
||||
"policy": "record",
|
||||
"why": "its adapter routes the company's domains on the machine a person works on: a build that breaks it cuts the person off from work names until a person pushes the next (hq ADR 0236, ADR 0247)"
|
||||
|
||||
@@ -437,6 +437,8 @@ func TestToolsAreTheOnesTheReadmeNamesAndSayWhatTheyDo(t *testing.T) {
|
||||
Serves []string `json:"serves"`
|
||||
} `json:"claims"`
|
||||
Requires []any `json:"requires"`
|
||||
Objects []any `json:"objects"`
|
||||
State []any `json:"state"`
|
||||
Packages map[string]string `json:"packages"`
|
||||
Invokes []string `json:"invokes"`
|
||||
Build struct {
|
||||
@@ -472,10 +474,15 @@ func TestToolsAreTheOnesTheReadmeNamesAndSayWhatTheyDo(t *testing.T) {
|
||||
if len(names) != 8 || !names[packageseats.GoSeat+".publish-part"] {
|
||||
t.Errorf("the seat tools are %v", names)
|
||||
}
|
||||
req, _ := json.Marshal(m.Requires)
|
||||
for _, want := range []string{`"name":"incoming"`, `"name":"transfers"`, `"name":"idle","options":{"key-ttl":true}`} {
|
||||
// The forge module is a foundation part (design 47 G §584): incoming is in its old objects section, transfers and idle
|
||||
// (key-ttl) in its old state section.
|
||||
req, _ := json.Marshal(struct {
|
||||
Objects any `json:"objects"`
|
||||
State any `json:"state"`
|
||||
}{m.Objects, m.State})
|
||||
for _, want := range []string{`"name":"incoming"`, `"transfers"`, `"key-ttl":true,"name":"idle"`} {
|
||||
if !strings.Contains(string(req), want) {
|
||||
t.Errorf("the manifest does not require %s (%s)", want, req)
|
||||
t.Errorf("the manifest does not keep %s in its old sections (%s)", want, req)
|
||||
}
|
||||
}
|
||||
// findings is one local name in one form (novox/hq ADR 0595 §11): the old section state, which the TypeScript bundle
|
||||
|
||||
+29
-36
@@ -1,40 +1,11 @@
|
||||
{
|
||||
"module": "gitea",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"moved": true,
|
||||
"requires": [
|
||||
"postgres-database",
|
||||
"route",
|
||||
"secret",
|
||||
{
|
||||
"name": "incoming",
|
||||
"storage": "object-store",
|
||||
"template": "objects",
|
||||
"options": {
|
||||
"max-mib": 2048
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "transfers",
|
||||
"storage": "key-value",
|
||||
"template": "state"
|
||||
},
|
||||
{
|
||||
"name": "idle",
|
||||
"storage": "key-value",
|
||||
"template": "state",
|
||||
"options": {
|
||||
"key-ttl": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "failed-steps",
|
||||
"storage": "key-value",
|
||||
"template": "state",
|
||||
"options": {
|
||||
"history": 1
|
||||
}
|
||||
}
|
||||
"secret"
|
||||
],
|
||||
"contributes": {
|
||||
"postgres-database": {
|
||||
@@ -122,7 +93,7 @@
|
||||
"port": 22,
|
||||
"protocol": "tcp",
|
||||
"from": "mesh",
|
||||
"why": "git over ssh, gitea's own unmodified sshd. Published on the machine's own side at 222, the mesh's fixed public convention \u2014 not 22, which the machine's own daemon holds and a module does not take"
|
||||
"why": "git over ssh, gitea's own unmodified sshd. Published on the machine's own side at 222, the mesh's fixed public convention — not 22, which the machine's own daemon holds and a module does not take"
|
||||
},
|
||||
{
|
||||
"name": "forge-events",
|
||||
@@ -236,7 +207,7 @@
|
||||
},
|
||||
"keep-main-rules": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the module keeps main's branch protection as the mesh wants it. True: every ten minutes, and at the start, main's rule in every repository of the organisation novox is put to no push and the tools' account alone merging, and each apply of the `repositories` value narrows the main rule of the repositories it lists, requiring no status. False (the default): the module changes no existing repository's branch protection, whoever set it at the forge, but takes away a required status it finds on a rule covering main, once (ADR 0534 \u00a71); a repository listed in `repositories` that does not exist is still made, with its first protection.",
|
||||
"description": "Whether the module keeps main's branch protection as the mesh wants it. True: every ten minutes, and at the start, main's rule in every repository of the organisation novox is put to no push and the tools' account alone merging, and each apply of the `repositories` value narrows the main rule of the repositories it lists, requiring no status. False (the default): the module changes no existing repository's branch protection, whoever set it at the forge, but takes away a required status it finds on a rule covering main, once (ADR 0534 §1); a repository listed in `repositories` that does not exist is still made, with its first protection.",
|
||||
"trusted": true,
|
||||
"default": false
|
||||
},
|
||||
@@ -248,7 +219,7 @@
|
||||
},
|
||||
"main-mergers": {
|
||||
"type": "list",
|
||||
"description": "The forge logins that may merge into main beside the tools' account, on every repository of the organisation (ADR 0534 \u00a72): the operator's own, so the operator can always merge by hand at the forge. The tools' account is always on main's merge whitelist; no agent's account belongs here.",
|
||||
"description": "The forge logins that may merge into main beside the tools' account, on every repository of the organisation (ADR 0534 §2): the operator's own, so the operator can always merge by hand at the forge. The tools' account is always on main's merge whitelist; no agent's account belongs here.",
|
||||
"trusted": true,
|
||||
"default": [
|
||||
"jschoubben"
|
||||
@@ -634,7 +605,19 @@
|
||||
"bound",
|
||||
"announced",
|
||||
"findings",
|
||||
{ "name": "first-views", "history": 1 }
|
||||
{
|
||||
"name": "first-views",
|
||||
"history": 1
|
||||
},
|
||||
"transfers",
|
||||
{
|
||||
"name": "idle",
|
||||
"key-ttl": true
|
||||
},
|
||||
{
|
||||
"name": "failed-steps",
|
||||
"history": 1
|
||||
}
|
||||
],
|
||||
"reads": [
|
||||
"mesh-provisioner.plans",
|
||||
@@ -663,9 +646,19 @@
|
||||
"streams": [
|
||||
{
|
||||
"name": "gitea-findings",
|
||||
"events": ["finding-written.*", "finding-cleared.*", "findings-stated.*"],
|
||||
"events": [
|
||||
"finding-written.*",
|
||||
"finding-cleared.*",
|
||||
"findings-stated.*"
|
||||
],
|
||||
"max-age-days": 7,
|
||||
"max-mib": 16
|
||||
}
|
||||
],
|
||||
"objects": [
|
||||
{
|
||||
"name": "incoming",
|
||||
"max-mib": 2048
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "gitlab",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"own-secrets": {
|
||||
"token": "${dir:state}/token"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "gnome-keyring",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"moved": true,
|
||||
"capabilities": [
|
||||
"package-manager"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "go",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"package-manager"
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "grafana",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"emits": [
|
||||
"alert.firing"
|
||||
],
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"module": "hello-web",
|
||||
"slug": "hello",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"container-runtime"
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "home-assistant",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "hass",
|
||||
"capabilities": [
|
||||
"container-runtime"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "hostname",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"claims": [
|
||||
{
|
||||
"name": "node-hostname",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "i3",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"moved": true,
|
||||
"capabilities": [
|
||||
"package-manager"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "i3status-rust",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"moved": true,
|
||||
"capabilities": [
|
||||
"package-manager"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "icecast",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"requires": [
|
||||
"route",
|
||||
"secret"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "influxdb",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"provides": [
|
||||
{
|
||||
"name": "influxdb-api",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "invoicing",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "invoice",
|
||||
"capabilities": [
|
||||
"container-runtime"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "jira",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"own-secrets": {
|
||||
"token": "${dir:state}/token"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "kernel",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"service-manager"
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "keycloak",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"moved": true,
|
||||
"upgrade": {
|
||||
"policy": "record",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "lab",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"moved": true,
|
||||
"capabilities": [
|
||||
"container-runtime",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "lemurs",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"package-manager",
|
||||
"service-manager",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "letta",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"container-runtime"
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "local-model-consumer",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "local",
|
||||
"requires": [
|
||||
"model-access"
|
||||
|
||||
@@ -11,7 +11,7 @@ import (
|
||||
|
||||
func TestTheFilesSayWhatTheToolsCompareAgainst(t *testing.T) {
|
||||
m := manifest(t)
|
||||
if m.Module != "localization" || m.Version != "1" {
|
||||
if m.Module != "localization" || m.Version != "0.1" {
|
||||
t.Fatalf("%s %s", m.Module, m.Version)
|
||||
}
|
||||
locale := m.resource(t, "locale")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "localization",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"service-manager"
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "logrotate",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"package-manager",
|
||||
"service-manager"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mailu",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"upgrade": {
|
||||
"policy": "record",
|
||||
"why": "people's mail: any change to how its containers are declared recreates them together in one send, and the mail is down for everyone until they are up again — a person chooses the moment (hq ADR 0242, issue 295)"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "marrytts",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"container-runtime"
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "matrix",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"container-runtime"
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "memory-pressure",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"package-manager",
|
||||
"service-manager"
|
||||
|
||||
@@ -151,7 +151,11 @@ func TestManifestRequiresForgeAccountKeepsKeysAndTakesFilesFromTemplates(t *test
|
||||
// kept-builds: the builds kept for the artifact store's holder (keptbuilds.go), by the template objects (W12.5).
|
||||
kept := map[string]any{"name": "kept-builds", "storage": "object-store", "template": "objects", "options": map[string]any{"max-mib": float64(1024)}}
|
||||
detected := map[string]any{"name": "detected-steps", "storage": "key-value", "template": "state", "options": map[string]any{"history": float64(1)}}
|
||||
if want := []any{detected, kept, "forge-account", "go-toolchain", "go-package-registry", "node-tools"}; !reflect.DeepEqual(m.Requires, want) {
|
||||
// The findings are asked in requires as a part that is no foundation part asks them (design 47 G §529, A-30).
|
||||
findings := map[string]any{"name": "findings", "storage": "key-value", "template": "state"}
|
||||
findingEvents := map[string]any{"name": "finding-events", "storage": "stream", "template": "events", "options": map[string]any{
|
||||
"events": []any{"finding-written.*", "finding-cleared.*", "findings-stated.*"}, "max-age-days": float64(7), "max-mib": float64(16)}}
|
||||
if want := []any{detected, kept, "forge-account", "go-toolchain", "go-package-registry", "node-tools", findings, findingEvents}; !reflect.DeepEqual(m.Requires, want) {
|
||||
t.Errorf("requires = %v, want %v", m.Requires, want)
|
||||
}
|
||||
keeps := false
|
||||
|
||||
@@ -118,7 +118,7 @@ func TestManifestKeepsItsStatesClaimsItsBuildSeatAndDeclaresItsHealthTool(t *tes
|
||||
}
|
||||
}
|
||||
slices.Sort(states)
|
||||
if want := []string{"findings", "keys", "pauses", "steps", "toolchains"}; !slices.Equal(states, want) {
|
||||
if want := []string{"keys", "pauses", "steps", "toolchains"}; !slices.Equal(states, want) {
|
||||
t.Errorf("state = %v, want %v", states, want)
|
||||
}
|
||||
if len(m.Claims) != 1 || m.Claims[0].Name != Seat {
|
||||
@@ -194,15 +194,13 @@ func TestTheModuleInvokesTheArtifactSeatsVerbsAndWritesNoStore(t *testing.T) {
|
||||
if !slices.Contains(m.Consumes, "mesh-conditions.findings-asked") {
|
||||
t.Errorf("consumes %v lack mesh-conditions.findings-asked", m.Consumes)
|
||||
}
|
||||
found := false
|
||||
// Not a foundation part, it asks its finding stream in requires, by the template events (design 47 G §529, A-30), and
|
||||
// declares no stream of that name.
|
||||
for _, st := range m.Streams {
|
||||
if st.Name == "mesh-build-go-findings" {
|
||||
found = slices.Equal(st.Events, []string{"finding-written.*", "finding-cleared.*", "findings-stated.*"}) && st.MaxAgeDays == 7 && st.MaxMiB == 16
|
||||
t.Errorf("streams %+v still declare mesh-build-go-findings: a part outside the foundation asks finding-events in requires", m.Streams)
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
t.Errorf("streams %+v lack mesh-build-go-findings (7 days, 16 MiB)", m.Streams)
|
||||
}
|
||||
for _, r := range m.Resources {
|
||||
if r["id"] == "registry" {
|
||||
t.Errorf("the store's address is still placed: %v", r)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-build-go",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"packages": {
|
||||
"git.novox.be/novox/mesh-delivery/modules/mesh-delivery-builder/builds": "0.1",
|
||||
"git.novox.be/novox/mesh-catalog/modules/ssh-client/sshkeys": "0.1"
|
||||
@@ -15,13 +15,24 @@
|
||||
"state": [
|
||||
"toolchains",
|
||||
"keys",
|
||||
{"name": "steps", "ttl-seconds": 172800}, "pauses", "findings"
|
||||
{
|
||||
"name": "steps",
|
||||
"ttl-seconds": 172800
|
||||
},
|
||||
"pauses"
|
||||
],
|
||||
"claims": [
|
||||
{
|
||||
"name": "node-build-go",
|
||||
"scope": "node",
|
||||
"serves": ["current", "drop", "pause", "resume", "steps", "kept-artifact"]
|
||||
"serves": [
|
||||
"current",
|
||||
"drop",
|
||||
"pause",
|
||||
"resume",
|
||||
"steps",
|
||||
"kept-artifact"
|
||||
]
|
||||
}
|
||||
],
|
||||
"consumes": [
|
||||
@@ -78,22 +89,51 @@
|
||||
"streams": [
|
||||
{
|
||||
"name": "toolchains-go",
|
||||
"events": ["toolchain.**"]
|
||||
},
|
||||
{
|
||||
"name": "mesh-build-go-findings",
|
||||
"events": ["finding-written.*", "finding-cleared.*", "findings-stated.*"],
|
||||
"max-age-days": 7,
|
||||
"max-mib": 16
|
||||
"events": [
|
||||
"toolchain.**"
|
||||
]
|
||||
}
|
||||
],
|
||||
"requires": [
|
||||
{"name": "detected-steps", "storage": "key-value", "template": "state", "options": {"history": 1}},
|
||||
{"name": "kept-builds", "storage": "object-store", "template": "objects", "options": {"max-mib": 1024}},
|
||||
{
|
||||
"name": "detected-steps",
|
||||
"storage": "key-value",
|
||||
"template": "state",
|
||||
"options": {
|
||||
"history": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "kept-builds",
|
||||
"storage": "object-store",
|
||||
"template": "objects",
|
||||
"options": {
|
||||
"max-mib": 1024
|
||||
}
|
||||
},
|
||||
"forge-account",
|
||||
"go-toolchain",
|
||||
"go-package-registry",
|
||||
"node-tools"
|
||||
"node-tools",
|
||||
{
|
||||
"name": "findings",
|
||||
"storage": "key-value",
|
||||
"template": "state"
|
||||
},
|
||||
{
|
||||
"name": "finding-events",
|
||||
"storage": "stream",
|
||||
"template": "events",
|
||||
"options": {
|
||||
"events": [
|
||||
"finding-written.*",
|
||||
"finding-cleared.*",
|
||||
"findings-stated.*"
|
||||
],
|
||||
"max-age-days": 7,
|
||||
"max-mib": 16
|
||||
}
|
||||
}
|
||||
],
|
||||
"binds": {
|
||||
"go-package-registry": "${dir:state}/go-package-registry.json"
|
||||
@@ -149,7 +189,11 @@
|
||||
"path": "${dir:state}/settings.json",
|
||||
"mode": "0600",
|
||||
"owner": "mesh-build-go",
|
||||
"takes-config": ["capacity", "cores-per-step", "build-hours"],
|
||||
"takes-config": [
|
||||
"capacity",
|
||||
"cores-per-step",
|
||||
"build-hours"
|
||||
],
|
||||
"merge": "json",
|
||||
"template": "files/settings.json"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-build-image",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"packages": {
|
||||
"git.novox.be/novox/mesh-delivery/modules/mesh-delivery-builder/builds": "0.1",
|
||||
"git.novox.be/novox/mesh-catalog/modules/ssh-client/sshkeys": "0.1"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-build-node",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"packages": {
|
||||
"git.novox.be/novox/mesh-delivery/modules/mesh-delivery-builder/builds": "0.1",
|
||||
"git.novox.be/novox/mesh-catalog/modules/ssh-client/sshkeys": "0.1"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"module": "mesh-catalog",
|
||||
"slug": "catalog",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"capabilities": [
|
||||
"container-runtime"
|
||||
],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-cli",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"moved": true,
|
||||
"requires": [
|
||||
"mcp-endpoint"
|
||||
|
||||
@@ -13,6 +13,7 @@ require (
|
||||
git.novox.be/novox/mesh-contracts/health-and-repair/go/seats/meshconditions v0.0.0-00010101000000-000000000000
|
||||
git.novox.be/novox/mesh-contracts/health-and-repair/go/seats/meshhealers v0.0.0-00010101000000-000000000000
|
||||
git.novox.be/novox/mesh-contracts/health-and-repair/go/seats/meshwatchdogs v0.0.0-00010101000000-000000000000
|
||||
git.novox.be/novox/mesh-delivery/contracts/go/clients/meshcatalogclient v0.0.0-00010101000000-000000000000
|
||||
git.novox.be/novox/mesh-delivery/contracts/go/clients/meshwantsclient v0.0.0-00010101000000-000000000000
|
||||
git.novox.be/novox/mesh-delivery/contracts/go/seats/meshcatalog v0.0.0-00010101000000-000000000000
|
||||
git.novox.be/novox/mesh-delivery/contracts/go/seats/meshwants v0.0.0-00010101000000-000000000000
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-conditions",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"runs-as": "mesh-conditions",
|
||||
"claims": [
|
||||
{
|
||||
@@ -58,7 +58,8 @@
|
||||
"type": "number",
|
||||
"description": "How long an observer has to state its findings after an ask, in seconds, before the keeper raises findings-unstated for it: 300 is five minutes.",
|
||||
"minimum": 1,
|
||||
"default": 300
|
||||
"default": 300,
|
||||
"runtime": true
|
||||
},
|
||||
"owner-handover-seconds": {
|
||||
"type": "number",
|
||||
@@ -70,7 +71,8 @@
|
||||
"type": "number",
|
||||
"description": "How long a first view may stay unanswered, in seconds, before the keeper raises view-waits for it: 300 is five minutes.",
|
||||
"minimum": 1,
|
||||
"default": 300
|
||||
"default": 300,
|
||||
"runtime": true
|
||||
}
|
||||
},
|
||||
"own-secrets": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-config",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"packages": {
|
||||
"git.novox.be/novox/mesh-delivery/modules/mesh-delivery-builder/builds": "0.1"
|
||||
},
|
||||
|
||||
@@ -20,9 +20,9 @@ import (
|
||||
// Module is the gate's module name, the observer of its findings.
|
||||
const Module = "mesh-delivery-gate"
|
||||
|
||||
// The scope and the kind of the finding a carried approval nobody uses is (design 47 §592).
|
||||
// The scope and the kind of the finding a carried approval nobody uses is (design 47 §592, A-42: the scope the mesh already uses for the delivery's findings).
|
||||
const (
|
||||
FindingScope = "gate"
|
||||
FindingScope = "delivery"
|
||||
ApprovalCarriedOpen = "approval-carried-open"
|
||||
)
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ func TestTheGatesApprovalCarriedOpenIsWrittenThroughItsHeldWriterAndClearedByThe
|
||||
t.Fatalf("held %+v", held)
|
||||
}
|
||||
for _, f := range held {
|
||||
if f.Kind != ApprovalCarriedOpen || f.Scope != FindingScope || f.Observer != Module || !strings.Contains(f.Summary, head[:12]) {
|
||||
if f.Kind != ApprovalCarriedOpen || f.Scope != "delivery" || f.Observer != Module || !strings.Contains(f.Summary, head[:12]) {
|
||||
t.Fatalf("finding %+v", f)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-delivery-gate",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "gate",
|
||||
"claims": [
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-files",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"claims": [
|
||||
{
|
||||
"name": "node-files",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-hand-acts",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"runs-as": "mesh-hand-acts",
|
||||
"claims": [
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-healers",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"runs-as": "mesh-healers",
|
||||
"claims": [
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-issues",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "issues",
|
||||
"seats": [
|
||||
{
|
||||
|
||||
@@ -79,7 +79,7 @@ func TestItDeclaresAndHoldsTheKnowledgeBaseSeatOnceForTheMesh(t *testing.T) {
|
||||
t.Fatalf("requires %s, contributes %v, state %v", m.Requires, m.Contributes, m.State)
|
||||
}
|
||||
// It asks the operator on the router, hears the router's word, and hears the judge's answers.
|
||||
if !reflect.DeepEqual(m.Uses, []string{"operator-channel"}) || !reflect.DeepEqual(m.Consumes, append([]string{"claude-code.judged"}, overviewConsumes()...)) {
|
||||
if !reflect.DeepEqual(m.Uses, []string{"operator-channel"}) || !reflect.DeepEqual(m.Consumes, append(append([]string{"claude-code.judged"}, overviewConsumes()...), "mesh-conditions.findings-asked")) {
|
||||
t.Fatalf("uses %v, consumes %v", m.Uses, m.Consumes)
|
||||
}
|
||||
if !reflect.DeepEqual(m.Invokes, []string{"seat:issue-tracker.reserve", "claude-code.claude_code_judge", "records.records_status",
|
||||
@@ -232,7 +232,7 @@ func TestItAsksForItsBusStateInTheTypedForm(t *testing.T) {
|
||||
names = append(names, e.Name)
|
||||
byName[e.Name] = e
|
||||
}
|
||||
if !reflect.DeepEqual(names, []string{"records", "drafts", "asked", "findings", "sent", "reviews"}) {
|
||||
if !reflect.DeepEqual(names, []string{"records", "drafts", "asked", "findings", "sent", "reviews", "finding-events"}) {
|
||||
t.Fatalf("bus state %v", names)
|
||||
}
|
||||
rec := byName["records"]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-knowledge",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "knowledge",
|
||||
"requires": [
|
||||
"postgres-database",
|
||||
@@ -78,7 +78,11 @@
|
||||
{"name": "asked", "storage": "key-value", "template": "state"},
|
||||
{"name": "findings", "storage": "key-value", "template": "state"},
|
||||
{"name": "sent", "storage": "key-value", "template": "state"},
|
||||
{"name": "reviews", "storage": "stream", "configuration": {"when-full": "refuse", "max-mib": 512, "max-age-days": "none", "grant": "readers", "events": ["part-reviewed"]}}
|
||||
{"name": "reviews", "storage": "stream", "configuration": {"when-full": "refuse", "max-mib": 512, "max-age-days": "none", "grant": "readers", "events": ["part-reviewed"]}},
|
||||
{
|
||||
"name": "finding-events", "storage": "stream", "template": "events",
|
||||
"options": {"events": ["finding-written.*", "finding-cleared.*", "findings-stated.*"], "max-age-days": 7, "max-mib": 16}
|
||||
}
|
||||
],
|
||||
"contributes": {
|
||||
"postgres-database": {
|
||||
@@ -217,7 +221,8 @@
|
||||
"mesh-delivery-gate.transition",
|
||||
"mesh-delivery-gate.merged",
|
||||
"messenger.offered",
|
||||
"messenger.closed"
|
||||
"messenger.closed",
|
||||
"mesh-conditions.findings-asked"
|
||||
],
|
||||
"uses": [
|
||||
"operator-channel"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-mail-notifier",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"runs-as": "mesh-mail-notifier",
|
||||
"claims": [
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-mail-reader",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"runs-as": "mesh-mail-reader",
|
||||
"claims": [
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-mail-web",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "mail-web",
|
||||
"runs-as": "mesh-mail-web",
|
||||
"claims": [
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-mail",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "mail",
|
||||
"seats": [
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-provisioner-client",
|
||||
"version": "2",
|
||||
"version": "0.1",
|
||||
"claims": [
|
||||
{
|
||||
"name": "node-provisioner",
|
||||
|
||||
@@ -327,7 +327,7 @@ func TestTheManifestDeclaresWhatTheCodeKeeps(t *testing.T) {
|
||||
t.Errorf("the claim: %+v", m.Claims)
|
||||
}
|
||||
// needs stays declared this release so its first start can empty it (ADR 0570 clause 1).
|
||||
if want := []string{Registry, Needs, Applied, Collect, ProvisionsState, PlansState, RefusedState, "findings"}; !slices.Equal(m.State, want) {
|
||||
if want := []string{Registry, Needs, Applied, Collect, ProvisionsState, PlansState, RefusedState}; !slices.Equal(m.State, want) {
|
||||
t.Errorf("the state is %v, want %v", m.State, want)
|
||||
}
|
||||
// Every state and act has its tool (ADR 0570 Consequences): the verb reads the clients' states, the holder's tools
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-provisioner",
|
||||
"version": "2",
|
||||
"version": "0.1",
|
||||
"packages": {
|
||||
"git.novox.be/novox/mesh-delivery/modules/mesh-delivery-builder/builds": "0.1"
|
||||
},
|
||||
@@ -59,8 +59,7 @@
|
||||
"collect",
|
||||
"provisions",
|
||||
"plans",
|
||||
"refused",
|
||||
"findings"
|
||||
"refused"
|
||||
],
|
||||
"core-credentials": true,
|
||||
"own-secrets": {
|
||||
@@ -121,6 +120,11 @@
|
||||
"max-age-days": 7,
|
||||
"max-mib": 16
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "findings",
|
||||
"storage": "key-value",
|
||||
"template": "state"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-reads",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"runs-as": "mesh-reads",
|
||||
"claims": [
|
||||
{
|
||||
|
||||
@@ -68,8 +68,9 @@ func TestTheManifestSaysWhatTheCodeDoes(t *testing.T) {
|
||||
if !slices.Equal(m.Reads, Reads) {
|
||||
t.Errorf("reads %v, want what the probes read, %v", m.Reads, Reads)
|
||||
}
|
||||
if !slices.Equal(m.Consume, Consumes) {
|
||||
t.Errorf("consumes %v, want the views families the probes follow, %v", m.Consume, Consumes)
|
||||
// And the keeper's ask, which a part keeping findings hears (design 47 G §387).
|
||||
if want := append(slices.Clone(Consumes), "mesh-conditions.findings-asked"); !slices.Equal(m.Consume, want) {
|
||||
t.Errorf("consumes %v, want the views families the probes follow and the keeper's ask, %v", m.Consume, want)
|
||||
}
|
||||
for _, view := range []string{assignerModule + ".views." + placing.StateAssignments, assignerModule + ".views." + placing.StateSeatHolders} {
|
||||
if !slices.Contains(m.Consume, view) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-self-check",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"packages": {
|
||||
"git.novox.be/novox/mesh-catalog/modules/restic/backupgood": "0.1",
|
||||
"git.novox.be/novox/mesh-catalog/modules/disk-load/diskreadings": "0.1"
|
||||
@@ -37,10 +37,10 @@
|
||||
"mesh-delivery-assigner.views.assignments",
|
||||
"mesh-delivery-assigner.views.seat-holders",
|
||||
"mesh-delivery-indexer.views.modules",
|
||||
"mesh-delivery-indexer.views.manifests"
|
||||
"mesh-delivery-indexer.views.manifests",
|
||||
"mesh-conditions.findings-asked"
|
||||
],
|
||||
"state": [
|
||||
"findings",
|
||||
"verdict",
|
||||
{
|
||||
"name": "verdicts",
|
||||
@@ -94,5 +94,26 @@
|
||||
],
|
||||
"runtime": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"requires": [
|
||||
{
|
||||
"name": "findings",
|
||||
"storage": "key-value",
|
||||
"template": "state"
|
||||
},
|
||||
{
|
||||
"name": "finding-events",
|
||||
"storage": "stream",
|
||||
"template": "events",
|
||||
"options": {
|
||||
"events": [
|
||||
"finding-written.*",
|
||||
"finding-cleared.*",
|
||||
"findings-stated.*"
|
||||
],
|
||||
"max-age-days": 7,
|
||||
"max-mib": 16
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-vault",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"packages": {
|
||||
"git.novox.be/novox/mesh-delivery/modules/mesh-grants/grantsstate": "0.1"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mesh-watcher",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "watch",
|
||||
"consumes": [
|
||||
"mesh-self-check.checked",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "messenger",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "msgr",
|
||||
"runs-as": "messenger",
|
||||
"seats": [
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "minio",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"upgrade": {
|
||||
"policy": "record",
|
||||
"why": "holds the photos themselves (irreplaceable, kept by photos) for its consumers: a person takes each build, after a backup (hq ADR 0236)"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "model-usage",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "usage",
|
||||
"capabilities": [
|
||||
"container-runtime"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mongodb",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"upgrade": {
|
||||
"policy": "record",
|
||||
"why": "a provider whose restart drops every consumer on its machine, and which holds the photos' albums (irreplaceable, kept by photos): a person takes each build, after a backup (hq ADR 0236)"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mosquitto",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"slug": "mosq",
|
||||
"provides": [
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mounts",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"packages": {
|
||||
"git.novox.be/novox/mesh-catalog/modules/disk-load/diskreadings": "0.1"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"module": "mssql",
|
||||
"version": "1",
|
||||
"version": "0.1",
|
||||
"upgrade": {
|
||||
"policy": "record",
|
||||
"why": "a provider whose restart drops every consumer on its machine, and whose new version may upgrade its databases in place: a person takes each build, after a backup (hq ADR 0236)"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user