AI Initiative logoAI Initiative
Reading room / Manthan

Trust-root posture (D-006)

Trust-root posture (D-006). Covers Posture by track; Compose / OSS (internal default); Terraform / AWS managed (production roadmap); HSM (Phase 6+ / when production-triggered).

Project explanation / technical method
This is the retained source text, not a new validation of its claims. Numerical results and comparative claims require the accompanying source review before public reuse.

Read the connected case study or article →

Not explicitly stated in source · Date not established

Provenance, authorship and editorial notes

Trust-root posture (D-006)

Id

manthan-docs-trust-root-posture

Project

Manthan

Source path

manthan/docs/TRUST-ROOT-POSTURE.md

Source sha256

a1f21f04ddb7ee372ef53d7f1690d9b5455bf4f449bd7e5a62a19e21f9d9fdba

Local copy sha256

a1f21f04ddb7ee372ef53d7f1690d9b5455bf4f449bd7e5a62a19e21f9d9fdba

Repo head

3a94084024a3434cef331fecac91c2c3b43f0313

Date
Not recorded
Date basis

Original publication date not established; Git revision date retained separately.

Author

Not explicitly stated in source

Author basis

Unknown; Git committer not substituted for document author.

Last source commit

8b75d1b0157c20a0a463f0e31008ef9f73099beb

Last source commit date

2026-06-08T07:40:14Z

Document status

Project explanation / technical method

Summary

Trust-root posture (D-006). Covers Posture by track; Compose / OSS (internal default); Terraform / AWS managed (production roadmap); HSM (Phase 6+ / when production-triggered).

Topics
  • Exploration architecture and selection
  • Posture by track
  • Compose / OSS (internal default)
  • Terraform / AWS managed (production roadmap)
Theme

Exploration architecture and selection

Priority

deep

Related ids
  • manthan-readme
  • manthan-docs-architecture
  • manthan-docs-business-overview
  • manthan-docs-demo-walkthrough
  • manthan-docs-principles
  • manthan-docs-qd-measurement-direction-plan
  • manthan-docs-swarm-evolution-integration
Evidence concerns
  • Recovered source text is preserved verbatim. Assertions, comparisons, commands and results belong to its original context; they were not re-executed or externally re-verified during this corpus review.
  • Contains documented example/test custody practices; no live credentials were read or copied. Production trust posture is not certified.
Word count

861

Bytes

6300

Source relative

docs/TRUST-ROOT-POSTURE.md

Remote mirror

manthan/docs/TRUST-ROOT-POSTURE.md

Full text preserved

True

Trust-root posture (D-006)

Manthan's trust root is the operator long-term seed — the 32-byte
ed25519 seed each node uses to derive its sigil, sign the Charter / LOTS /
canary, and sign envelopes. Anything that holds (or can derive) a node's
seed can speak as that node.

This doc pins how the seed is held per deployment track. It's the answer
to the D-006 acceptance criterion in PHASE_5_HANDOFF.md.

Posture by track

Compose / OSS (internal default)

Today (v0.2 internal-research): deterministic per-node seeds.

// herald-protocol/services/testnet/src/single-node.ts
const NODE_SEEDS: Record<string, number> = {
  "genesis-alpha": 0xa1,
  "genesis-beta":  0xb2,
  "genesis-gamma": 0xc3,
};

If MANTHAN_NODE_SEED_HEX is set, that hex is used. Otherwise the seed is
new Uint8Array(32).fill(NODE_SEEDS[node_name]) — i.e., a 32-byte buffer
of 0xa1/0xb2/0xc3. Anyone with the source can derive the keys.

This is honest, not hidden. The Charter §4 of every node says the witness
is "the operator alone" and the storage posture is "AWS Secrets Manager
under operator KMS" for the AWS path; for compose, the seeds are
filesystem-derived. It's appropriate for:

blast radius can talk to,

It is not appropriate for:

Optional next step (still on the OSS track): sops-encrypted seeds.

When the deployment graduates beyond "obviously dev" but isn't yet on the
AWS managed path, the natural intermediate is:

1. Generate per-node random 32-byte hex seeds:
openssl rand -hex 32
2. Encrypt them with age or
sops under operator-held public keys
(yubikey or password-protected age identity).
3. Decrypt at deploy time into a .env.local that's gitignored, with
MANTHAN_NODE_SEED_HEX_ALPHA=<hex> etc.
4. Reference those env vars from infra/compose/.env.
5. Document the recovery procedure (where the encrypted seeds live, who
holds the unlock key, how rotation works).

This isn't wired in code today because the operator hasn't asked for it.
Adding it is ~half a day:

Terraform / AWS managed (production roadmap)

Already wired in code.

Per infra/terraform/modules/storage/main.tf:

resource "random_id" "node_seed" {
  for_each    = toset(var.node_names)
  byte_length = 32
}

resource "aws_secretsmanager_secret" "node_seed" {
  for_each   = toset(var.node_names)
  name       = "${var.name}/nodes/${each.key}/seed"
  kms_key_id = aws_kms_key.this.arn
}

resource "aws_secretsmanager_secret_version" "node_seed" {
  for_each      = toset(var.node_names)
  secret_id     = aws_secretsmanager_secret.node_seed[each.key].id
  secret_string = random_id.node_seed[each.key].hex

  lifecycle { ignore_changes = [secret_string] }
}

What this gives you on first AWS apply:

(alias/manthan-<env>) with rotation enabled.

to disk on the running task.

(operator runs aws secretsmanager update-secret) isn't reverted on
the next Terraform apply.

This is the Phase-5-acceptance posture for the AWS path. It's appropriate
for v0.3+ production; HSM is the Phase-6+ upgrade.

HSM (Phase 6+ / when production-triggered)

D-006 in the original handoff calls for HSM-signing the *bootstrap seed
list
* (the file every node fetches at startup to know who its peers are).
The same custody question applies to operator long-term seeds when real
trust claims ride on them.

When that trigger fires, the migration is:

small manthan-trust-roots.ts).

multi-year cadence).

Operator seeds themselves can stay in Secrets Manager for production —
moving them to HSM is a separate decision tied to the value of what
they're protecting. The bootstrap seed list signing is the higher-leverage
HSM target because it's the trust root for new nodes joining.

What changes when

TriggerWhat to do
Stays internal / pre-productKeep deterministic compose posture. Document it (this file). No code change.
Internal but with sensitive contentMove to sops-encrypted seeds; ~half a day of plumbing.
Production AWS applyThe Terraform path already does the right thing. No additional work.
Real external trust claimsHSM-sign the bootstrap seed list per handoff D-006. Phase 6+.

Honesty test

The Charter / LOTS for each node already declare these postures
truthfully (§4 Key-ceremony witness expectations, §4.4 HSM and
storage
). The compose path's Charter says "automated CSPRNG / no human
ceremony / sealed in Secrets Manager (AWS path) / filesystem-derived
(compose path)." Don't let that drift — if you change the posture, update
the Charter in the same commit. (See CONTRIBUTING.md tracker rule.)

fallback.

§4 — authoritative declaration per node.

Continue exploring