委譲の構造¶
ARK に、保証を配る中央の権威は無い。あるのは受け渡される名前空間で、受け取った側が その都度、約束を引き受ける。arkhe の台帳は、その連鎖の記録である。
flowchart TD
RA["NAAN の保有者<br/><small>例: 国の研究組織</small>"]
RA -->|"/x9 を切り出す"| I1["組織 A"]
RA -->|"/y2 を切り出す"| I2["組織 B"]
RA -->|"/z1 は外部へ委譲"| EX["外部 minter"]
I1 --> C1["リポジトリ"]
I1 --> C2["一括投入バッチ"]
I2 --> C3["リポジトリ"]
連鎖を降りていくものは 2 つあり、同じものではない。
- 名前空間 — どの名前を作ってよいか
- 約束 — 作ったものについて何を保つか
到達範囲¶
主体(ログインする人も、鍵を持つシステムも)は必ず到達範囲を持つ。これは 登録の属性であって、リクエストやトークンでは広がらない。
system |
全 NAAN。名前空間を配る側の運用者 |
naan |
1 つの NAAN の配下すべて。その NAAN を預かる組織 |
manager |
1 組織ぶん。1 つの shoulder に固定することもできる |
配られた側が、配った側より広く届くことはない。 NAAN 管理者はシステム管理者を 作れないし、組織管理者は他組織の主体を作れない。
なぜ shoulder をリクエストで受け取らないか
arklet は {naan, shoulder} を本文で受けて NAAN 単位でしか認可しておらず、
設定ミスでも詐称でも他組織の名前空間に届いた。arkhe は shoulder を
主体から引く。これで越境が塞がり、同時に多数組織の振り分けも片づく。
shoulder の状態¶
一度配った名前空間は取り戻せない。だから「押さえてあるが使わせない」「もう新規は 採らない」を、削除ではなく状態として持つ必要がある。
stateDiagram-v2
[*] --> reserved: --reserve で作成
[*] --> active: 作成
reserved --> active
reserved --> delegated
active --> delegated
active --> retired
delegated --> active
delegated --> retired
retired --> [*]: 既存の ARK は解決し続ける
retired からは戻れない。引退した名前空間を再開すると、その間に外部が同じ名前を
使った可能性を否定できない。他人が既に使った名前を配り直すことは、NR がまさに
禁じていることである。
delegated には行き先(minter)が要る。採番が外で行われるなら、採番要求には
どこへ行けばよいかを返さなければならない。arkhe は 307 に行き先を添えて返し、
プロキシはしない——代理で呼ぶと、応答が失われたときに「向こうでは採番されたが
こちらは知らない ARK」が生まれる。
組織は現れ、去る¶
- 承継 — 組織が別の組織に統合される。shoulder が移り、ARK は何も変わらない。 変わるのは「今後誰が採番するか」だけ。
- 離脱 — 組織は存続するが、この基盤を離れる。新規採番は止め、解決は永久に続ける。 転送先を組織自身のリゾルバへ向け直せば、以後こちらに作業を求めずに済む。
どちらも承継と離脱で扱う。