Issue 1945; ADR 0547 milestone 1, subtask 6 (the vault hashes what it is handed, clause 9).
secret_own (read-only): every own secret (own///) with generation, sha256: fingerprint (same Fingerprint as secret_verify and secret_holders), made, changed, changed by; filters node, module, name prefix; at most 1000 rows with cut; never a value. For bus accounts also user, hashed, hashedAt, hashWhy, hashOwed.
The vault bcrypt-hashes each covered bus account handed to it (broker, provisioner-broker, and a process's broker-, ADR 0436 §2), once per generation, at bcrypt.DefaultCost as the controller's hashBusPassword, into its state bus-accounts keyed by user, and says account-hashed (no value, no hash). At start it hashes every held account missing a key of its generation. A refused write (the bucket not there yet) is kept as owed and tried again on the vault's existing minute pass, one summary log line per pass: no new timer (NATS-native: weighed, the pass exists; the bucket's creation is the event that is missing, issue 1790).
account_hash {user} hashes one account again by hand; logs its caller.
Manifest: state bus-accounts (history 2), emits account-hashed.
Not in this change, noted on issue 1945 (note 69): 'readable by the grants part alone' is not enforced (announce.State has only a Readable flag; only mesh-grants declares the read); adoption of hashes the vault holds no value for has no path yet; the bucket appears at the controller's next start (issue 1790); one bucket of hashes against ADR 0201 §13 wants a progressive insight on ADR 0547.
Tests: TestSecretOwnListsFingerprintsOfOwnSecretsOnly (six filters, no value, bus-account rows), TestAHandedBusAccountIsHashedOncePerGeneration (table of 10 steps, hash checked with bcrypt against the value, process account covered, rotation refused), TestNoBucketHoldsASecret (exactly one bucket of hashes allowed). In modules/mesh-vault: go test -race -count=1 ./... and go vet -tags integration ./... pass.
Folded in per playbook 07 (a follow-up goes into the unapproved pull request): the hashing commits 32b912cf and 1c55e5d4 on top of the reviewed e572937d. Companion: mesh-delivery fix/1945-vault-hashing (mesh-grants reads the hashes); each works without the other, so no delivery group.
Rules bent (rules-are-weighed): no mesh-controller.try, as the operator directed on 2026-10-25.
Issue: 1945
Reviewed-by: review-vault-hash@shanks at 1c55e5d44d
Issue 1945; ADR 0547 milestone 1, subtask 6 (the vault hashes what it is handed, clause 9).
1. `secret_own` (read-only): every own secret (own/<node>/<module>/<name>) with generation, `sha256:` fingerprint (same Fingerprint as secret_verify and secret_holders), made, changed, changed by; filters node, module, name prefix; at most 1000 rows with `cut`; never a value. For bus accounts also user, hashed, hashedAt, hashWhy, hashOwed.
2. The vault bcrypt-hashes each covered bus account handed to it (broker, provisioner-broker, and a process's broker-<id>, ADR 0436 §2), once per generation, at bcrypt.DefaultCost as the controller's hashBusPassword, into its state `bus-accounts` keyed by user, and says `account-hashed` (no value, no hash). At start it hashes every held account missing a key of its generation. A refused write (the bucket not there yet) is kept as owed and tried again on the vault's existing minute pass, one summary log line per pass: no new timer (NATS-native: weighed, the pass exists; the bucket's creation is the event that is missing, issue 1790).
3. `account_hash {user}` hashes one account again by hand; logs its caller.
4. Manifest: state `bus-accounts` (history 2), emits `account-hashed`.
Not in this change, noted on issue 1945 (note 69): 'readable by the grants part alone' is not enforced (announce.State has only a Readable flag; only mesh-grants declares the read); adoption of hashes the vault holds no value for has no path yet; the bucket appears at the controller's next start (issue 1790); one bucket of hashes against ADR 0201 §13 wants a progressive insight on ADR 0547.
Tests: TestSecretOwnListsFingerprintsOfOwnSecretsOnly (six filters, no value, bus-account rows), TestAHandedBusAccountIsHashedOncePerGeneration (table of 10 steps, hash checked with bcrypt against the value, process account covered, rotation refused), TestNoBucketHoldsASecret (exactly one bucket of hashes allowed). In modules/mesh-vault: `go test -race -count=1 ./...` and `go vet -tags integration ./...` pass.
Folded in per playbook 07 (a follow-up goes into the unapproved pull request): the hashing commits 32b912cf and 1c55e5d4 on top of the reviewed e572937d. Companion: mesh-delivery fix/1945-vault-hashing (mesh-grants reads the hashes); each works without the other, so no delivery group.
Rules bent (rules-are-weighed): no mesh-controller.try, as the operator directed on 2026-10-25.
Issue: 1945
Reviewed-by: review-vault-hash@shanks at 1c55e5d44dbb18e3271d6ae1042b22603868e49c
Deliverynovox/mesh-catalog@1c55e5d44dbb — merged since 2026-10-26T07:48:06Z
Source — source.main moved to novox/mesh-catalog@22381d7522. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
Transitions
2026-10-26 01:37 (new) → proposed (announced): novox/mesh-catalog#486's head announced
2026-10-26 01:37 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
2026-10-26 07:48 ready → merged (merged): on the trunk its modules follow: merged there
The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-catalog@1c55e5d44dbb` — **merged** since 2026-10-26T07:48:06Z
**Source** — source.main moved to novox/mesh-catalog@22381d75224f. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Transitions**
- 2026-10-26 01:37 (new) → proposed (announced): novox/mesh-catalog#486's head announced
- 2026-10-26 01:37 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
- 2026-10-26 07:48 ready → merged (merged): on the trunk its modules follow: merged there
The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
The controller still mints each covered account and hands it to the vault (ADR 0374); ADR 0547 clause 9 has the vault
write the bcrypt hash of what it holds into its own state, readable by the grants part, and say account-hashed. It
hashes on keep, at start every held account with no key of its generation, and again by hand (account_hash); a refused
write is owed and written at the next pass. secret_own says per bus account whether this generation's hash is written.
Issue: 1945
mesh/check failed: integration: meshbuildnode/cmd/mesh-build-node.TestAFixtureBundleBuiltTwiceHasOneDigest: no toolchain of this lock is installed und…
The controller hands each process account of a core or moved module with origin issued (ADR 0436 §2); the vault took
only broker and provisioner-broker, refused these and never hashed them. Owed hashes are now said once per pass, and
account_hash says who asked when it refuses too (review round 1).
Issue: 1945
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: its head e572937d97 is no longer the pull request's head, or the pull request closed. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: its head e572937d97fa is no longer the pull request's head, or the pull request closed. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-tools
changed title from Vault: secret_own reads the generation and fingerprint of every own secret it keeps, never a value (issue 1945) to Vault: read own secrets' generations, and hash each bus account it is handed for the grants part (issue 1945, ADR 0547 clause 9)2026-10-26 01:37:58 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Issue 1945; ADR 0547 milestone 1, subtask 6 (the vault hashes what it is handed, clause 9).
secret_own(read-only): every own secret (own///) with generation,sha256:fingerprint (same Fingerprint as secret_verify and secret_holders), made, changed, changed by; filters node, module, name prefix; at most 1000 rows withcut; never a value. For bus accounts also user, hashed, hashedAt, hashWhy, hashOwed.bus-accountskeyed by user, and saysaccount-hashed(no value, no hash). At start it hashes every held account missing a key of its generation. A refused write (the bucket not there yet) is kept as owed and tried again on the vault's existing minute pass, one summary log line per pass: no new timer (NATS-native: weighed, the pass exists; the bucket's creation is the event that is missing, issue 1790).account_hash {user}hashes one account again by hand; logs its caller.bus-accounts(history 2), emitsaccount-hashed.Not in this change, noted on issue 1945 (note 69): 'readable by the grants part alone' is not enforced (announce.State has only a Readable flag; only mesh-grants declares the read); adoption of hashes the vault holds no value for has no path yet; the bucket appears at the controller's next start (issue 1790); one bucket of hashes against ADR 0201 §13 wants a progressive insight on ADR 0547.
Tests: TestSecretOwnListsFingerprintsOfOwnSecretsOnly (six filters, no value, bus-account rows), TestAHandedBusAccountIsHashedOncePerGeneration (table of 10 steps, hash checked with bcrypt against the value, process account covered, rotation refused), TestNoBucketHoldsASecret (exactly one bucket of hashes allowed). In modules/mesh-vault:
go test -race -count=1 ./...andgo vet -tags integration ./...pass.Folded in per playbook 07 (a follow-up goes into the unapproved pull request): the hashing commits
32b912cfand1c55e5d4on top of the reviewede572937d. Companion: mesh-delivery fix/1945-vault-hashing (mesh-grants reads the hashes); each works without the other, so no delivery group.Rules bent (rules-are-weighed): no mesh-controller.try, as the operator directed on 2026-10-25.
Issue: 1945
Reviewed-by: review-vault-hash@shanks at
1c55e5d44dDelivery
novox/mesh-catalog@1c55e5d44dbb— merged since 2026-10-26T07:48:06ZSource — source.main moved to novox/mesh-catalog@22381d7522. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.mesh-delivery: the operator's Approve of this pull request's merge into main is ended: its head
e572937d97is no longer the pull request's head, or the pull request closed. Nothing is merged on it. The operator is asked again once the checks pass at the new head.Vault: secret_own reads the generation and fingerprint of every own secret it keeps, never a value (issue 1945)to Vault: read own secrets' generations, and hash each bus account it is handed for the grants part (issue 1945, ADR 0547 clause 9)