diff --git a/routing/persona-control-authorization-signers.json b/routing/persona-control-authorization-signers.json new file mode 100644 index 0000000..41e22b5 --- /dev/null +++ b/routing/persona-control-authorization-signers.json @@ -0,0 +1,6 @@ +{ + "schema": "gh-aios.persona-control-authorization-signers/v1", + "registryId": "GH-AIOS-PERSONA-CONTROL-AUTHORIZATION-SIGNERS-001", + "state": "CURRENT", + "signers": [] +} diff --git a/routing/persona-control-authorization-signers.test.js b/routing/persona-control-authorization-signers.test.js new file mode 100644 index 0000000..b2fa8ff --- /dev/null +++ b/routing/persona-control-authorization-signers.test.js @@ -0,0 +1,27 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import path from "node:path"; +import test from "node:test"; +import { fileURLToPath } from "node:url"; + +const directory = path.dirname(fileURLToPath(import.meta.url)); +const registry = JSON.parse(fs.readFileSync(path.join(directory, "persona-control-authorization-signers.json"), "utf8")); +const anchor = JSON.parse(fs.readFileSync(path.join(directory, "public-navigation-anchor.json"), "utf8")); + +test("the persona-control authorization registry is authoritative but trusts nobody before key governance exists", () => { + assert.deepEqual(Object.keys(registry), ["schema", "registryId", "state", "signers"]); + assert.equal(registry.schema, "gh-aios.persona-control-authorization-signers/v1"); + assert.equal(registry.registryId, "GH-AIOS-PERSONA-CONTROL-AUTHORIZATION-SIGNERS-001"); + assert.equal(registry.state, "CURRENT"); + assert.deepEqual(registry.signers, []); + assert.doesNotMatch(JSON.stringify(registry), /PRIVATE KEY|password|token|secret/i); +}); + +test("the public anchor declares the exact persona-control signer registry path", () => { + assert.deepEqual(anchor.maps.persona_control_authorization_signers, { + path: "routing/persona-control-authorization-signers.json", + id: "GH-AIOS-PERSONA-CONTROL-AUTHORIZATION-SIGNERS-001", + schema: "gh-aios.persona-control-authorization-signers/v1", + state: "CURRENT_EMPTY_NO_TRUSTED_SIGNER" + }); +}); diff --git a/routing/public-navigation-anchor.json b/routing/public-navigation-anchor.json index 7e2f661..5286871 100644 --- a/routing/public-navigation-anchor.json +++ b/routing/public-navigation-anchor.json @@ -1,7 +1,7 @@ { "schema": "guanghu.public-navigation-anchor/v1", "anchor_id": "GLW-PUBLIC-NAV-ANCHOR-001", - "version": "2026-08-11.3", + "version": "2026-08-12.1", "state": "CURRENT_CANONICAL", "repository_id": "REPO-012", "branch": "main", @@ -112,6 +112,12 @@ "path": "routing/trusted-domain-manifest-signers.json", "id": "GH-AIOS-TRUSTED-DOMAIN-MANIFEST-SIGNERS-001", "version": "1.0.0" + }, + "persona_control_authorization_signers": { + "path": "routing/persona-control-authorization-signers.json", + "id": "GH-AIOS-PERSONA-CONTROL-AUTHORIZATION-SIGNERS-001", + "schema": "gh-aios.persona-control-authorization-signers/v1", + "state": "CURRENT_EMPTY_NO_TRUSTED_SIGNER" } }, "update_contract": {