claude-code reads placements, modules and manifests through the placement and catalog clients and the seats' state names (B5e; ADR 0634 §1, §4; issue 1966)

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
This commit is contained in:
2026-11-05 15:27:33 +01:00
parent a636dc3df3
commit a609ebc8e5
4 changed files with 44 additions and 28 deletions
+15 -12
View File
@@ -16,6 +16,10 @@ import (
"encoding/json"
"errors"
"fmt"
assignerclient "git.novox.be/novox/mesh-contracts/placement/go/clients/meshmoduleassignerclient"
mesh "git.novox.be/novox/mesh-contracts/placement/go/seats/meshmoduleassigner"
catalogclient "git.novox.be/novox/mesh-delivery/contracts/go/clients/meshcatalogclient"
catalog "git.novox.be/novox/mesh-delivery/contracts/go/seats/meshcatalog"
"net"
"os"
"path/filepath"
@@ -25,7 +29,6 @@ import (
"time"
"git.novox.be/novox/mesh-sdk/go/catalogue"
"git.novox.be/novox/mesh-sdk/go/delivery"
"git.novox.be/novox/mesh-sdk/go/seatdef"
"git.novox.be/novox/mesh-sdk/go/seatlist"
)
@@ -89,9 +92,9 @@ func ReadMeshTools(p Paths) *MeshTools {
// The states read, each declared in the manifest's reads.
const (
PlacementRead = delivery.PlacementRead
ModulesRead = delivery.IndexerModule + ".modules"
ManifestsRead = delivery.IndexerModule + ".manifests"
PlacementRead = (assignerModule + "." + mesh.StatePlacement)
ModulesRead = indexerModule + "." + catalog.StateModules
ManifestsRead = indexerModule + "." + catalog.StateManifests
)
// States reads the module states the manifest declares in its reads: a state's keys, and one key's value.
@@ -108,12 +111,12 @@ type ModuleTools struct {
}
// placements is every node's placement, from the seat mesh-module-assigner's state.
func placements(st States) (map[string]delivery.Placement, error) {
func placements(st States) (map[string]mesh.Placement, error) {
keys, err := st.Keys(PlacementRead)
if err != nil {
return nil, fmt.Errorf("%s: %w", PlacementRead, err)
}
read := delivery.NewPlacementKeys()
read := assignerclient.NewKeys()
for _, k := range keys {
v, found, err := st.Get(PlacementRead, k)
if err != nil {
@@ -127,7 +130,7 @@ func placements(st States) (map[string]delivery.Placement, error) {
}
// runsOn is, by module, the nodes placement puts it on, sorted.
func runsOn(placed map[string]delivery.Placement) map[string][]string {
func runsOn(placed map[string]mesh.Placement) map[string][]string {
out := map[string][]string{}
for node, p := range placed {
for _, m := range p.Modules {
@@ -160,7 +163,7 @@ func modulesTools(st States, on map[string][]string) ([]ModuleTools, error) {
}
sort.Strings(modules)
for _, module := range modules {
key, err := delivery.ModulesKey(module)
key, err := catalogclient.ModulesKey(module)
if err != nil {
continue
}
@@ -171,11 +174,11 @@ func modulesTools(st States, on map[string][]string) ([]ModuleTools, error) {
}
continue
}
m, err := delivery.DecodeModule(raw)
m, err := catalogclient.DecodeModule(raw)
if err != nil || m.Manifest == "" {
continue
}
mkey, err := delivery.ManifestsKey(m.Manifest)
mkey, err := catalogclient.ManifestsKey(m.Manifest)
if err != nil {
continue
}
@@ -186,7 +189,7 @@ func modulesTools(st States, on map[string][]string) ([]ModuleTools, error) {
}
continue
}
kept, err := delivery.DecodeManifest(raw)
kept, err := catalogclient.DecodeManifest(raw)
if err != nil {
problems = append(problems, fmt.Errorf("the manifest of %s: %w", module, err))
continue
@@ -194,7 +197,7 @@ func modulesTools(st States, on map[string][]string) ([]ModuleTools, error) {
var man struct {
Replaces map[string][]string `json:"replaces"`
}
if json.Unmarshal([]byte(kept.JSON), &man) != nil || len(man.Replaces) == 0 {
if json.Unmarshal([]byte(kept.Manifest), &man) != nil || len(man.Replaces) == 0 {
continue
}
out = append(out, ModuleTools{Module: module, On: on[module], Replaces: man.Replaces})