Name no node in the last residuals: asus-zephyrus-g14's denylist, lab's and mosquitto's comments, mesh-issues's help texts, mesh-knowledge's decision fixture and ssh-client's forge-URL fixture (issue 1838)

This commit is contained in:
jochen
2026-10-22 22:36:34 +02:00
parent fab57411c5
commit 170fad2e93
8 changed files with 12 additions and 11 deletions
@@ -94,7 +94,8 @@ func TestTheManifestNamesNoMachineAndItsTriggersExist(t *testing.T) {
ids[r["id"].(string)] = true
}
raw, _ := os.ReadFile("../../module.json")
for _, banned := range []string{"jochen", "/home/", "/run/user/1000", "\"g14\"", "shanks"} {
// 1838/AC1: the catalogue-wide check covers a node's name now; this list keeps what it does not.
for _, banned := range []string{"jochen", "/home/", "/run/user/1000"} {
if strings.Contains(string(raw), banned) {
t.Errorf("the manifest says %q", banned)
}
+1 -1
View File
@@ -255,7 +255,7 @@ test("the lab's tools bundle names its bound credential and binding in its env",
// The next setup failure of novox/hq issue 624 (run-2026-10-13T13-15-26-634Z on node-d): npm 12 refused
// mesh-tools' locked @novox/mesh-sdk with EALLOWREMOTE. The lab named the registry by its forge setting's
// address (http://node-c.internal:20000/…), the lock file holds the address the forge writes every tarball
// URL at (https://git.novox.be/…), and npm 12 installs a locked tarball only from its configured registry.
// the forge's URL, and npm 12 installs a locked tarball only from its configured registry.
// A run names the registry by the address the registry names itself by.
import { npmRegistry } from "../tools/runs.ts";
+1 -1
View File
@@ -278,7 +278,7 @@ func checkTarget(kind, target string) (string, error) {
"the scope one of "+strings.Join(conditionScopes, ", ")+", each part of letters, digits and _=/-"
case LinkDelivery:
ok, shape = deliveryID.MatchString(t), "a delivery's id as mesh-delivery names it: the repository as owner/name, @ and twelve "+
"characters of its commit, such as novox/mesh-controller@d2e9dc61590f"
"characters of its commit, such as acme/mesh-controller@d2e9dc61590f"
default:
return "", fmt.Errorf("kind %q is not a kind of link: one of %s", kind, strings.Join(LinkKinds, ", "))
}
@@ -77,7 +77,7 @@ func TestADeliveryLinkTakesEveryIdMeshDeliveryGives(t *testing.T) {
"mesh-controller@0f853e93fa11", // no owner
"acme/mesh-controller", // no commit
"acme/mesh-controller@0f853e93fa11aa", // more than twelve characters of the commit
"Novox/Mesh-Controller@0f853e93fa11", // mesh-delivery lower-cases the repository
"Acme/Mesh-Controller@0f853e93fa11", // mesh-delivery lower-cases the repository
"acme/mesh-controller@0F853E93FA11", // a commit is lower-case hex
"acme/mesh-controller@main", // a branch, not a commit
"acme/mesh/controller@0f853e93fa11", // a repository is owner/name, no deeper
+1 -1
View File
@@ -610,7 +610,7 @@ func Tools(t *Tracker) []stdio.Tool {
Description: "Link an issue to something, or with remove, take a link away. Kinds: duplicates or relates-to " +
"another issue (its number), pull-request (such as mesh-controller#246), decision (a decision record's " +
"number, such as 0275), design (a design document's path), condition (a condition's key) and delivery " +
"(a delivery's id, such as novox/mesh-controller@d2e9dc61590f). Refused: a target not of its kind's shape, an issue that does not exist, a link it " +
"(a delivery's id, such as acme/mesh-controller@d2e9dc61590f). Refused: a target not of its kind's shape, an issue that does not exist, a link it " +
"already has.",
Input: schema([]string{"number", "kind", "target"}, map[string]any{
"number": number("the issue's number"),
@@ -160,8 +160,8 @@ either, because **delivery group** already names deliveries that share a head br
commit) or `covered` (an earlier commit of the same repository) when the walk is done, `failed` when it
fails, `stopped` when it is stopped. The walk's machine steps are recorded on each delivery it carries.
7. **The assembling state is shown.** The controller's `plans` lists the open batch first, as the operator
asked: "assembling: 13 s left (at the latest 00:31:09); grouped: novox/mesh-catalog@48bda475 (answers
553b7191), novox/mesh-controller@a6bc0931; plan not yet calculated". It says the batch on the bus as
asked: "assembling: 13 s left (at the latest 00:31:09); grouped: acme/mesh-catalog@48bda475 (answers
553b7191), acme/mesh-controller@a6bc0931; plan not yet calculated". It says the batch on the bus as
`plan-moved` with the state `assembling`, so mesh-delivery's `deliveries` and `show` say of a merged
delivery that its batch is assembling and how long is left, and of one whose batch waits that it waits
behind which walk.
+2 -2
View File
@@ -11,7 +11,7 @@
// the broker runs, over an admin connection, with no broker restart and no file the host rewrites —
// the true analog of redis's runtime ACL users. A `password_file` would have to be re-read on a
// SIGHUP the runtime cannot cleanly send across containers, and — declared as a managed file — would
// be rewritten by the host on every reconcile, wiping every provisioned user (novox/nox issue 011).
// be rewritten by the host on every reconcile, wiping every provisioned user (issue 011 of the predecessor's record).
// The one cost dynsec carries is the bootstrap file; see initBootstrapFile() and the module README.
import { randomBytes } from "node:crypto";
@@ -278,7 +278,7 @@ export class MosquittoClient {
* Write the Dynamic Security bootstrap file offline, creating the admin client the plugin loads at
* broker startup. This is a one-time seed, NOT part of the reconcile loop: run once before the
* broker first starts, against the same path the broker's `plugin_opt_config_file` names. It must
* never be a host-reconciled managed file — see novox/nox issue 011.
* never be a host-reconciled managed file — see issue 011 of the predecessor's record.
*/
async initBootstrapFile(configFile: string): Promise<void> {
// `dynsec init <file> <admin-username>` is an offline file operation — it does not connect to
@@ -98,7 +98,7 @@ var sampleBound = map[string]string{
"ssh_alias": "mesh-forge",
"ssh_port": "222",
"ssh_base": "ssh://git@node-c.internal:222/",
"https_base": "https://git.novox.be/",
"https_base": "https://git.example.org/",
}
// renderBound fills ${bound:forge-account:<key>} with the sample values, as the provisioner client does.
@@ -160,7 +160,7 @@ func TestForgeFilesRenderFromTheBoundValues(t *testing.T) {
if g["into"] != "block" {
t.Errorf("git config is %v, want a block", g["into"])
}
wantGit := "[url \"ssh://mesh-forge/\"]\n\tinsteadOf = https://git.novox.be/\n"
wantGit := "[url \"ssh://mesh-forge/\"]\n\tinsteadOf = https://git.example.org/\n"
if got := renderBound(t, templateText(t, g)); got != wantGit {
t.Errorf("git config block = %q, want %q", got, wantGit)
}