<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Articles on Rindrics Mumbles</title>
    <link>https://rindrics.com/articles/</link>
    <description>Articles</description>    
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Mon, 28 Sep 2026 00:00:00 +0900</lastBuildDate>
    <atom:link href="https://rindrics.com/articles/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>データ登録処理に関する技術選定: Revision IDの生成アルゴリズム</title>
      <link>https://rindrics.com/articles/tech-selection-revision-id/</link>
      <pubDate>Mon, 28 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>https://rindrics.com/articles/tech-selection-revision-id/</guid>
      <description>&lt;p&gt;data-registryによるRevision ID生成アルゴリズムにUUID v7を選択した。&lt;/p&gt;
&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;
&lt;p&gt;資源評価に利用するデータの永続化を担うdata-registryの開発をすすめている。








&lt;div class=&#34;card&#34;&gt;
  &lt;a href=&#34;https://rindrics.com/tags/data-registry/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; class=&#34;card-link&#34;&gt;
    &lt;div class=&#34;card-content&#34;&gt;
      &lt;h4 class=&#34;card-title&#34;&gt;Tag &amp;#34;data-registry&amp;#34; | rindrics.com&lt;/h4&gt;
      
      &lt;span class=&#34;card-url&#34;&gt;https://rindrics.com/tags/data-registry/&lt;/span&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;../tech-selection-idempotency-key-hash-algorithm/&#34;&gt;前回の記事&lt;/a&gt;では、冪等性キー生成に用いるハッシュアルゴリズムを選んだ。
本記事では、永続化処理が実行される際のRevision IDの生成方法について考える。&lt;/p&gt;
&lt;h2 id=&#34;要件&#34;&gt;要件&lt;/h2&gt;
&lt;p&gt;現時点で、data-registryには下記のユースケースが見つかっている:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;版の履歴閲覧: あるデータセットの変更履歴を時系列で表示したい&lt;/li&gt;
&lt;li&gt;データ登録要求の並行受信: 複数人のユーザーが複数シナリオを並列計算し、それらのクライアントからの登録要求を受信した&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上記から、Revision IDの生成は、以下の要件を満たす必要がある:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;要件&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;説明&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;要件ID&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;一意性&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;各Revisionは一意のIDを持つ&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;SR001&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;不変性&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;一度生成されたら変更されない&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;SR002&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;時系列順序付け可能性&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;同じRevision chain内で自然にソート可能&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;SR019&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;分散生成可能性&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Coordinatorなしで各プロセスから生成可能&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;SR020&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ここで、不変性（&lt;code&gt;SR002&lt;/code&gt;）については実装の責務として考慮外とし、残りの要件を満たすID生成アルゴリズムを選定する。
アルゴリズムには複数の候補が考えうるが、詳細な検討の手間を軽減するには、まず時系列順序付け可能性を根拠に選択肢を刈り込むとよさそう。&lt;/p&gt;
&lt;h2 id=&#34;候補アルゴリズム&#34;&gt;候補アルゴリズム&lt;/h2&gt;
&lt;p&gt;ID群が時系列で順序付けされるためには、IDは時刻情報を含むtimestamp-basedな手法で生成される必要がある。&lt;/p&gt;
&lt;p&gt;これに着目すると、例えば&lt;a href=&#34;https://github.com/twitter-archive/snowflake&#34;&gt;Nanoid&lt;/a&gt;やUUID v3, v4, v5, v8は検討対象から除外でき、候補としては下記が残る:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;連番&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/twitter-archive/snowflake&#34;&gt;Snowflake ID&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.rfc-editor.org/info/rfc9562/#section-5.7&#34;&gt;UUID v7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;なお、timestamp-basedな手法としてはUUID v1およびv6も含まれるが、&lt;a href=&#34;https://www.rfc-editor.org/info/rfc9562/#section-5.6:~:text=6-,UUIDv6,instead&#34;&gt;これらと比較した場合にはv7が推奨されている&lt;/a&gt;（スーパー意訳）ため検討候補から除外した。&lt;/p&gt;
&lt;h2 id=&#34;候補アルゴリズムの比較検討&#34;&gt;候補アルゴリズムの比較検討&lt;/h2&gt;
&lt;h3 id=&#34;連番-不採用&#34;&gt;連番（✘ 不採用）&lt;/h3&gt;
&lt;p&gt;その名の通り、連番の整数をIDに使う方法。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ID: 1, 2, 3, 4, ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この手法の利点はストレージのオーバーヘッドが少ないことだろう。
表現はシンプルだが、それを実現するアーキテクチャや実装は必ずしもシンプルとは限らない。
2種類の実現方法「データベースレベル」「アプリケーションレベル」それぞれについて、pros/consを整理してみる。&lt;/p&gt;
&lt;h4 id=&#34;方法a-データベースレベル&#34;&gt;方法A: データベースレベル&lt;/h4&gt;
&lt;p&gt;PostgreSQL の SERIAL/BIGSERIAL（自動採番機能）を利用する方法。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pros:
&lt;ul&gt;
&lt;li&gt;✔ 採番の責務をデータベースに持たせられる&lt;/li&gt;
&lt;li&gt;✔ ロック時間が短い&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;cons:
&lt;ul&gt;
&lt;li&gt;✘ 単一のprimary writerに依存&lt;/li&gt;
&lt;li&gt;✘ スケーラビリティ: 並行タスクが全て同じDBに集約&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;方法b-アプリケーションレベル&#34;&gt;方法B: アプリケーションレベル&lt;/h4&gt;
&lt;p&gt;採番の責務をアプリケーションで持つ構成。
この方法をとるとデータベースについては水平スケールが自由になるが、結局ほアプリケーションレベルに移ってきた採番の責務がボトルネックになる。&lt;/p&gt;
&lt;p&gt;つまり、連番形式は宿命的に「最後の値は何か」というグローバルな状態管理に依存する方法で、この状態は必ずどこかに集約されることになる。
結果として、&lt;code&gt;SR020&lt;/code&gt;（分散生成可能性）を満たさないため不採用とする。&lt;/p&gt;
&lt;h3 id=&#34;snowflake-id-不採用&#34;&gt;Snowflake ID（✘ 不採用）&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.twitter.com/engineering/en_us/a/2010/announcing-snowflake&#34;&gt;Twitter&lt;/a&gt;などの大規模分散システムで運用実績のある手法。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ID: 175638572750991360
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     ├─ timestamp(ms)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     ├─ machine id
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     └─ sequence
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;pros:
&lt;ul&gt;
&lt;li&gt;✔ 大規模分散システムでの運用実績あり&lt;/li&gt;
&lt;li&gt;✔ ストレージ効率がよい&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;cons:
&lt;ul&gt;
&lt;li&gt;✘ Machine IDの事前割り当てが必須（新規マシン追加時に管理が必要）&lt;/li&gt;
&lt;li&gt;✘ 各machineが自身のsequenceを管理する必要がある&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ストレージ効率の良さは魅力的だが、プラットフォームの潜在ユーザーの規模を考慮すると、machine IDの割り当てなどの運用オーバーヘッド増加がペイされるとは考えにくい。
data-registryにおける採用は見送ることにする。&lt;/p&gt;
&lt;h3 id=&#34;uuid-v7-採用&#34;&gt;UUID v7（✔ 採用）&lt;/h3&gt;
&lt;p&gt;UUIDの一つ。
タイムスタンプベースのフィールドを備えつつ、同タイプの先行バージョン（v1およびv6）に比べてランダム特性が向上している。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ID: 0189a5c5-a92b-7b47-b5ad-e6c3cb6c41e9
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   └─ from timestamp ─┘
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;pros:
&lt;ul&gt;
&lt;li&gt;✔ 決定的に生成できるため各ノードで独立生成可能&lt;/li&gt;
&lt;li&gt;✔ 高いB-tree局所性による高速書き込み&lt;/li&gt;
&lt;li&gt;✔ 標準性（cf: &lt;a href=&#34;https://www.rfc-editor.org/info/rfc9562/#section-5.7&#34;&gt;RFC 9562&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;✔ エコシステム充実: Clojureでも&lt;a href=&#34;https://github.com/danlentz/clj-uuid&#34;&gt;ライブラリ&lt;/a&gt;を利用可能&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;cons:
&lt;ul&gt;
&lt;li&gt;✘ タイムスタンプ衝突にはランダム&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;部分のみで対処する必要がある
&lt;ul&gt;
&lt;li&gt;TODO: ランダム部分のビット長が最悪ケースをカバーするか確認する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;短所もあるものの、これらはdata-registryのユースケースにおいては問題にならないかもしれないので、実際に試算してみる。&lt;/p&gt;
&lt;h4 id=&#34;同タイムスタンプ内における一意性違反リスク&#34;&gt;同タイムスタンプ内における一意性違反リスク&lt;/h4&gt;
&lt;p&gt;UUID v7では、同じ&lt;a href=&#34;https://www.rfc-editor.org/info/rfc9562/#section-5.7:~:text=Layout-,unix%5Fts%5Fms,5%29%2E&#34;&gt;ミリ秒&lt;/a&gt;内に複数のIDを生成する場合、一意性の保証はランダム部分（74ビット）で対処する必要がある。
この問題をキューイングなどのアーキテクチャで解決しない場合において、UUID v7のエントロピー性能がdata-registryの最悪ケースをカバーできるかを見積もる。&lt;/p&gt;
&lt;p&gt;この問題は&lt;a href=&#34;https://en.wikipedia.org/wiki/Birthday_problem&#34;&gt;誕生日問題&lt;/a&gt;と同じなので、並行プロセス数を\(n\)は、ランダム部分のビット長を\(b\)とすると、衝突確率は下式で表される:&lt;/p&gt;
$$
P(\text{1組以上が衝突}) = 1 - \frac{1}{e^{\frac{n (n - 1)}{2^{b+1}}}}
$$&lt;p&gt;いま1,000,000の並行プロセス（1,000ユーザー × 1,000シミュレーション）が同ミリ秒内にIDを生成する場合、\(n = 10^6\)、\(b = 74\)なので、衝突確率は&lt;/p&gt;
$$
\begin{aligned}
P(\text{1組以上が衝突})
  &amp;= 1 - \frac{1}{e^{\frac{10^6 (10^6 - 1)}{2^{75}}}} \\
  &amp;\approx 1 - \frac{1}{e^{\frac{10^{12}}{3.8 \times 10^{22}}}} \\
  &amp;\approx \frac{10^{12}}{3.8 \times 10^{22}} \\
  &amp;\approx2.63\times10^{-11} \\
  &amp;= 2.63\times10^{-9} \text{\%}
\end{aligned}
$$&lt;p&gt;となり、ピーク時リクエストに対してアーキテクチャによる緩衝を挟まない場合にも、UUID v7のエントロピー性能は充分な安全マージンを持つことがわかった。&lt;/p&gt;
&lt;p&gt;以上から、data-registryにおけるRevision IDの生成したアルゴリズムにはUUID v7を採用する。&lt;/p&gt;
&lt;h2 id=&#34;所感&#34;&gt;所感&lt;/h2&gt;
&lt;p&gt;本記事でも、&lt;a href=&#34;../tech-selection-idempotency-key-hash-algorithm/&#34;&gt;前回の記事&lt;/a&gt;と同様に、最悪ケースに対するキャパシティ見積もりに基づいて技術選定した。
実際には、最悪ケースに対してアーキテクチャ的な解決を挟まない場合にはID衝突以前に別の問題（スループットなど）が生じそうだが、ひとまずの物理的な猶予は把握できた。
大規模アーキテクチャにおける成功例: Snowflake IDも一応は検討したが、個人開発における運用性を考えると選べなかった。&lt;/p&gt;
&lt;p&gt;次回は、Revision IDと冪等性キーの永続化方法について考える予定。&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;疑似乱数であり、実際は決定的に生成する。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>冪等性キー生成に関する技術選定: ハッシュアルゴリズム</title>
      <link>https://rindrics.com/articles/tech-selection-idempotency-key-hash-algorithm/</link>
      <pubDate>Wed, 23 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>https://rindrics.com/articles/tech-selection-idempotency-key-hash-algorithm/</guid>
      <description>&lt;p&gt;冪等性キーの生成に利用するハッシュアルゴリズムとしてBLAKE3を選定した。&lt;/p&gt;
&lt;h2 id=&#34;はじめに&#34;&gt;はじめに&lt;/h2&gt;
&lt;p&gt;資源評価に利用するデータの永続化を担うdata-registryの開発をすすめている。








&lt;div class=&#34;card&#34;&gt;
  &lt;a href=&#34;https://rindrics.com/tags/data-registry/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; class=&#34;card-link&#34;&gt;
    &lt;div class=&#34;card-content&#34;&gt;
      &lt;h4 class=&#34;card-title&#34;&gt;Tag &amp;#34;data-registry&amp;#34; | rindrics.com&lt;/h4&gt;
      
      &lt;span class=&#34;card-url&#34;&gt;https://rindrics.com/tags/data-registry/&lt;/span&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;../designing-idempotency-by-usecase/&#34;&gt;前回の記事&lt;/a&gt;では、冪等性キーをサーバー側で生成する意思決定をした。
本記事では、その冪等性キー生成に用いるハッシュアルゴリズムを選ぶ。&lt;/p&gt;
&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;
&lt;p&gt;通常、ハッシュアルゴリズム選定における比較観点は下記の通りだ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;衝突耐性&lt;/li&gt;
&lt;li&gt;計算コスト&lt;/li&gt;
&lt;li&gt;標準性&lt;/li&gt;
&lt;li&gt;相互運用性&lt;/li&gt;
&lt;li&gt;出力サイズ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ただしこれらの観点の重みは均等ではなく、特にdata-registryの冪等性キー生成においては何よりも衝突確率の低さを重視する必要がある。&lt;/p&gt;
&lt;div class=&#34;info&#34;&gt;
&lt;strong&gt;「衝突確率の低さ」とは&lt;/strong&gt;
&lt;p&gt;攻撃による衝突ではなく、単なる確率的な衝突が起こる程度を指している。理由としては、本ケースではセキュリティ目的で利用するわけではないので、「攻撃への耐性」という観点は必要ないため。&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;これは、冪等処理において、ハッシュ衝突が起きた場合に下記の流れでデータ喪失が生じるためだ:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;先行リクエストA: hash(何らかのデータ) → hash=H
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  → Revision &amp;#34;newRev&amp;#34; が作成される → 返却
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;後続リクエストB: hash(何らかの別のデータ) → hash=H (衝突)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  → ルックアップで &amp;#34;newRev&amp;#34; を発見 → 返却
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  → クライアントは成功を受け取るが、登録依頼したデータは登録されていない（データ喪失）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このたび選定対象とした候補アルゴリズムは下記の三つ&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SHA-256&lt;/li&gt;
&lt;li&gt;SHA-512&lt;/li&gt;
&lt;li&gt;BLAKE3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上記のうち、まず衝突確率の低さが想定リクエスト数に照らして必要十分なものを選び、続いてその他の選定観点を比較して採用アルゴリズムを決める。&lt;/p&gt;
&lt;h2 id=&#34;衝突確率に着目した一次選定&#34;&gt;衝突確率に着目した一次選定&lt;/h2&gt;
&lt;p&gt;ということで、まずアルゴリズムの衝突確率がdata-registryの想定リクエスト数に照らして高すぎないかを調べてみる。
SHA-256とBLAKE3はともに出力長が256ビットで衝突確率は同じなので、まず出力長256ビットにおける衝突ペア数の期待値が想定リクエスト数のもとで1未満に収まるかを調べることで候補を絞る。
256ビットで足りなければSHA512の衝突確率の概算に進み、一方で256ビットで充分であればSHA256とBLAKE3の比較に進むということ。&lt;/p&gt;
&lt;p&gt;衝突確率は要は&lt;a href=&#34;https://en.wikipedia.org/wiki/Birthday_problem&#34;&gt;誕生日問題&lt;/a&gt;として考えることができるので、\(k\)個のリクエストから得られるハッシュ値について、衝突するペア数の期待値\(E[C]\)は、ハッシュ出力を\(b\)ビットとすると次式で近似できる。&lt;/p&gt;
$$
E[C] \approx \frac{k^2}{2^{b+1}}
$$&lt;p&gt;衝突が十分まれな範囲では、1組以上の衝突が発生する確率も次式で近似できる。&lt;/p&gt;
$$
P(\text{1組以上が衝突}) \approx \frac{k^2}{2^{b+1}}
$$&lt;p&gt;したがって、いま考える256ビットのハッシュでは、&lt;/p&gt;
$$
E[C] \approx \frac{k^2}{2^{257}}
$$&lt;p&gt;となる。&lt;/p&gt;
&lt;p&gt;選定にあたっては、衝突するペア数の期待値が1となるリクエスト数を求め、それが想定リクエスト数に対して余裕があるかを確認する。&lt;/p&gt;
&lt;p&gt;256ビットの場合、&lt;/p&gt;
$$
\frac{k^2}{2^{257}} = 1
$$&lt;p&gt;より、&lt;/p&gt;
$$
k \approx 2^{128.5} \approx 4.8 \times 10^{38}
$$&lt;p&gt;となる。&lt;/p&gt;
&lt;h3 id=&#34;利用程度に関するパラメータ&#34;&gt;利用程度に関するパラメータ&lt;/h3&gt;
&lt;p&gt;想定リクエスト数の算出に必要なパラメータを、オーダー規模で見積もる。
見積もりは悲観値で出したいので、オーダー単位で&lt;strong&gt;切り上げ&lt;/strong&gt;た値を利用する。&lt;/p&gt;
&lt;h4 id=&#34;ユーザー数&#34;&gt;ユーザー数&lt;/h4&gt;
&lt;p&gt;水産研究・教育機構の&lt;a href=&#34;https://www.fra.go.jp/shigen/fisheries_resources/index.html&#34;&gt;「水産資源に関する情報」ページ&lt;/a&gt;を見ると、本記事の執筆時点（2026年9月）において &lt;code&gt;沿岸沖合資源（192魚種）&lt;/code&gt; という記述がある（こんな多かったっけ&amp;hellip;？）。
192魚種それぞれの主担当者は、ほぼ確実に延べ人数つまり兼務があると見てよいと思うが、ここでは悲観見積もりとして一応192人の主担当者がいることにする。&lt;/p&gt;
&lt;p&gt;また資源評価プラットフォームに機能を充実させた場合、評価案査読者や、認証済みの（物好きな）一般利用者からの利用も考えられる。
合計ユーザー数をオーダー規模で見積もるにあたり、これらの利用者が808人を超えるようだと1000人のオーダーとなるが、まずそんなことはないだろう。&lt;/p&gt;
&lt;p&gt;ということで、ユーザー数は多くても数百人のオーダーに収まると考えられ、見積もり用に切り上げオーダーとしては &lt;code&gt;1000人&lt;/code&gt; を用いる。&lt;/p&gt;
&lt;h4 id=&#34;運用期間&#34;&gt;運用期間&lt;/h4&gt;
&lt;p&gt;資源評価事業は将来的にも継続するだろう。
10年未満ということはないはず。
しかし1000年はいくらなんでもやりすぎだろう。その頃にはもっと良い技術があるはず。&lt;/p&gt;
&lt;p&gt;ということでオーダーとしては &lt;code&gt;100年&lt;/code&gt;。&lt;/p&gt;
&lt;h4 id=&#34;ユーザーあたり並列計算数&#34;&gt;ユーザーあたり並列計算数&lt;/h4&gt;
&lt;p&gt;資源評価プラットフォームがいい感じに構築できるとしたら、パラメータセットの組み合わせが異なる複数シナリオをバックグラウンドで並列計算できるようにしたい。
並列計算機能が実現した場合、ユーザーごとに並列計算ジョブを持つことになる。
各ジョブに書き込み系の処理をさせるかどうかは設計次第ではあるが、ここでは悲観見積もりということでユーザーあたりの並列計算数も考慮しておく。&lt;/p&gt;
&lt;p&gt;実用的な視点に立つとは、並列計算の単位としては、名前をつけられるようなレベルの大きいシナリオだけでなく、パラメータの探索などでも利用する局面があるだろう。
そう考えると、10のオーダーの並列計算はあまり嬉しくないだろうと思う。百数十とか、数百の並列計算ができると、探索的検討がスムーズにできるはず。&lt;/p&gt;
&lt;p&gt;ということで、数百を切り上げるとオーダーとしては &lt;code&gt;1000&lt;/code&gt;。&lt;/p&gt;
&lt;h4 id=&#34;バースト利用期間&#34;&gt;バースト利用期間&lt;/h4&gt;
&lt;p&gt;悲観的に見積もるため、ここではバースト利用が資源評価の準備期間中にわたって続くと仮定する。&lt;/p&gt;
&lt;p&gt;なお事業の性質上、資源評価プラットフォームは年間通して平均的に利用されることはない。
data-registryが冪等性キーを生成する想定リクエスト数に関しては、利用はほぼ評価期間に限られるだろう。
このことから、定常利用はバーストに対して無視できる程度と思われる。&lt;/p&gt;
&lt;p&gt;ということで、バースト利用が3ヶ月間続くとし、オーダー単位で切り上げて &lt;code&gt;100日&lt;/code&gt;。&lt;/p&gt;
&lt;h4 id=&#34;リクエスト数の見積もり&#34;&gt;リクエスト数の見積もり&lt;/h4&gt;
&lt;p&gt;上記から、data-registryの冪等性キー生成リクエスト数の悲観見積もりのパラメータは下記のようになった:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ユーザー数: 1000人&lt;/li&gt;
&lt;li&gt;運用期間: 100年&lt;/li&gt;
&lt;li&gt;ユーザーあたり並列計算数: 1000&lt;/li&gt;
&lt;li&gt;バースト利用期間: 100日&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;このパラメータもとでは、衝突ペア数の期待値を1未満に保つうえで、1ユーザーが発行できる年間のリクエスト数は&lt;/p&gt;
$$
\frac{4.8 \times 10^{38}}{1000 \times 100 \times 1000 \times 100} = 4.8 \times 10^{28}
$$&lt;p&gt;となる。&lt;/p&gt;
&lt;p&gt;実際には、ユーザー数も運用期間もここまでにはならないと思われるので、並列計算数もまだ増やす余地がある。
以上から、アルゴリズムのアウトプット長は256ビットで充分と思われたため、SHA512は選択肢から外す。&lt;/p&gt;
&lt;p&gt;ということで、以下では、SHA256とBLAKE3を、残る3観点について比較する:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;del&gt;衝突耐性&lt;/del&gt; 衝突確率の低さ&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 計算コスト&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 標準性&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 相互運用性&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;del&gt;出力サイズ&lt;/del&gt;
&lt;ul&gt;
&lt;li&gt;ともに256ビットのためスキップ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;その他の観点での比較&#34;&gt;その他の観点での比較&lt;/h2&gt;
&lt;h3 id=&#34;sha256&#34;&gt;SHA256&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;計算コスト: &lt;a href=&#34;https://www.researchgate.net/figure/Comparison-of-Photo-File-Hashing-Speed-SHA-256-vs-BLAKE3_tbl3_400072664&#34;&gt;こちらのベンチマーク結果&lt;/a&gt;によると、5 MBの写真ファイルのハッシュ化の所要時間が139.10 msということで、処理速度は35.9 MB/sとする&lt;/li&gt;
&lt;li&gt;標準性: 米国国立標準技術研究所（NIST）により&lt;a href=&#34;https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf&#34;&gt;仕様化されて&lt;/a&gt;おり充分&lt;/li&gt;
&lt;li&gt;相互運用性: 実質上の業界標準なので充分&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;blake3&#34;&gt;BLAKE3&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;計算コスト: &lt;a href=&#34;https://www.researchgate.net/figure/Comparison-of-Photo-File-Hashing-Speed-SHA-256-vs-BLAKE3_tbl3_400072664&#34;&gt;こちらのベンチマーク結果&lt;/a&gt;によると、5 MBの写真ファイルのハッシュ化の所要時間が38.00 msということで、処理速度は131.6 MB/sとする&lt;/li&gt;
&lt;li&gt;標準性: &lt;a href=&#34;https://datatracker.ietf.org/doc/draft-aumasson-blake3/00/&#34;&gt;RFC準拠の仕様&lt;/a&gt;が公開されており充分&lt;/li&gt;
&lt;li&gt;相互運用性: 主要言語に対応しており、Clojureでも&lt;a href=&#34;https://downloads.bouncycastle.org/java/docs/bcprov-jdk18on-javadoc/org/bouncycastle/crypto/digests/Blake3Digest.html#&#34;&gt;Javaライブラリ&lt;/a&gt;をJava interop経由で利用可能なので充分&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;比較観点をまとめると下記のようになる:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Algorithm&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;処理速度&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;標準性&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;相互運用性&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;SHA-256&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;35.9 MB/s&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✔&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✔&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;🥇 BLAKE3&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;131.6 MB/s&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✔&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✔&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;その他、CPU負荷やメモリ効率についてもBLAKE3の優位性が報告されていた（&lt;a href=&#34;https://arxiv.org/html/2407.08284v1&#34;&gt;ref&lt;/a&gt;）。&lt;/p&gt;
&lt;p&gt;以上から、標準性・相互運用性は両アルゴリズムともに良好なため、計算コストの低さを重視してBLAKE3を採用する。&lt;/p&gt;
&lt;h2 id=&#34;所感&#34;&gt;所感&lt;/h2&gt;
&lt;p&gt;今回のケースでは、採用技術のスペックが非機能要件を大幅に上回っていたために、些細なことを大げさにやった感があるかもしれない。
しかしこれをやらないと、「キャパ的に3日と保たないシステムを作ってました」みたいな事態にもなりかねない。
仰々しくはあるが、やはり必要なのだ。&lt;/p&gt;
&lt;p&gt;次の記事では、Revision IDの生成方法について考える予定。&lt;/p&gt;
&lt;div class=&#34;info&#34;&gt;
&lt;strong&gt;2026-09-26追記&lt;/strong&gt;
&lt;p&gt;もともとは冪等性キーの生成を安定化するためのJSONのcanonicalizationについて考えようとしていたがやめた。
理由としては、フィールド順の違う同等のデータなどのように、表現に揺れがあるものが冪等処理されなかったとしても、ストレージが多少浪費されるだけで深刻な問題とはならないと判断したため。
なにか問題が起きたらそれから考える。&lt;/p&gt;
&lt;/div&gt;









&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;セキュリティ目的での利用ではないが、MD5とSHA-1については候補から除外した。理由としては、両者の衝突耐性が破られているため採用が減り、コミュニティ内でライブラリや情報の更新が途絶える懸念を回避するため&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>冪等性の設計〜等値性の判定場所をユースケース駆動で決める</title>
      <link>https://rindrics.com/articles/designing-idempotency-by-usecase/</link>
      <pubDate>Mon, 14 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>https://rindrics.com/articles/designing-idempotency-by-usecase/</guid>
      <description>&lt;p&gt;data-rigistry開発の&lt;a href=&#34;../immutable-data-registry-alloy-design/&#34;&gt;前回&lt;/a&gt;記事からだいぶ間が空いてしまったが、久しぶりに時間をとれたので冪等性について考えてみる。&lt;/p&gt;
&lt;h2 id=&#34;はじめに&#34;&gt;はじめに&lt;/h2&gt;
&lt;p&gt;資源計算に利用するデータを登録するためのサービスdata-registryを作っている。&lt;/p&gt;
&lt;p&gt;下記は前回の記事。&lt;/p&gt;








&lt;div class=&#34;card&#34;&gt;
  &lt;a href=&#34;https://rindrics.com/articles/immutable-data-registry-alloy-design/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; class=&#34;card-link&#34;&gt;
    &lt;div class=&#34;card-content&#34;&gt;
      &lt;h4 class=&#34;card-title&#34;&gt;イミュータブルなデータレジストリの設計とAlloyによる形式検証 | rindrics.com&lt;/h4&gt;
      
      &lt;span class=&#34;card-url&#34;&gt;https://rindrics.com/articles/immutable-data-registry-alloy-design/&lt;/span&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;上の記事では初期設計をやってみたのだが、反省点がいくつかあった:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要件定義が雑だった&lt;/li&gt;
&lt;li&gt;スコープを決めていなかった&lt;/li&gt;
&lt;li&gt;進め方の戦略がなかった&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;そこで本記事では、前回の反省を活かし、「取り組むスコープを決めた上で」「ユースケース駆動で要件・仕様を吟味」する「という方法で進める」ことにする。&lt;/p&gt;
&lt;p&gt;本記事で扱う問題のスコープは下記の通り:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;等値性の定義&lt;/li&gt;
&lt;li&gt;ユースケースの整理&lt;/li&gt;
&lt;li&gt;冪等性キーの生成場所と等値性の判定場所の決定&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;冪等性が必要な理由&#34;&gt;冪等性が必要な理由&lt;/h2&gt;
&lt;p&gt;冪等性が必要な本質的な理由は2つ：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;クライアント実装の簡潔性&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;再試行時に「同じリクエストを送ってもいい」という保証があれば、クライアント側で「送信完了か確認不可か」を区別する必要がない&lt;/li&gt;
&lt;li&gt;再試行戦略が単純になる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;並行処理時の安全性&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;複数プロセスが同じデータを登録する場合、競合を避けて結果の予測可能性を確保&lt;/li&gt;
&lt;li&gt;「どのRevisionが実際に採用されるのか」が明確になる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;特に、意図的な再試行ではなく、並行リクエストやネットワークエラーによる自動再試行への対策のために導入する。&lt;/p&gt;
&lt;h2 id=&#34;等値性の定義&#34;&gt;等値性の定義&lt;/h2&gt;
&lt;p&gt;サービスの冪等なふるまいを設計していくにあたり、まずはどんなときに冪等性が保証されるべきか: つまりdata-registryが扱うペイロードの等値性について考えてみる。&lt;/p&gt;
&lt;p&gt;このサービスの性質を考えれば、登録対象のデータそのものの等値性が考慮される必要があることは自明。
また、等値性を考えるうえでのヒントとして、既存のシステム要件 &lt;code&gt;SR004&lt;/code&gt; を考慮するとよい:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;SR004 新しい版は、既存の版を0個または1個参照しなければならない&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;データ登録要求の仕様は決まっていないものの、新しい版を紐づける先の &lt;code&gt;parentRevision&lt;/code&gt; の値については、少なくとも等値性に関わる情報と考えてよさそう。&lt;/p&gt;
&lt;p&gt;上記から、data-registryにおける等値性の定義は下記の通りとする:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;等値とみなすリクエスト = hash(parentRevisionId, hash(data))が同じリクエスト
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ユースケースの明確化&#34;&gt;ユースケースの明確化&lt;/h2&gt;
&lt;p&gt;ペイロードの等値性をひとまず定義できたところで、続いて冪等性に関するユースケースをまとめていく。&lt;/p&gt;
&lt;h3 id=&#34;リクエスト処理時のユースケース&#34;&gt;リクエスト処理時のユースケース&lt;/h3&gt;
&lt;p&gt;まず、data-registryのクライアント側で発生する機能的なユースケースを考えてみる。&lt;/p&gt;
&lt;h4 id=&#34;並行リクエストを冪等に処理する&#34;&gt;並行リクエストを冪等に処理する&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;概要: 複数のプロセスから並行で同一の内容のリクエストが届いた場合に呼び出される&lt;/li&gt;
&lt;li&gt;期待: リクエストが一つだけ届いた場合と同様の状態になる&lt;/li&gt;
&lt;li&gt;アクター: プロセスA、プロセスB&lt;/li&gt;
&lt;li&gt;メインフロー:
&lt;ul&gt;
&lt;li&gt;1: プロセスAが、システムにデータの登録を要求する&lt;/li&gt;
&lt;li&gt;2: プロセスBが、システムにデータの登録を要求する&lt;/li&gt;
&lt;li&gt;3: システムは、プロセスAに要求されたデータを永続化する&lt;/li&gt;
&lt;li&gt;4: システムは、永続化が成功した旨のメッセージをプロセスAに返却する&lt;/li&gt;
&lt;li&gt;5: システムは、プロセスBの要求がプロセスAと同一であることを検知する&lt;/li&gt;
&lt;li&gt;6: システムは、永続化はせずに、プロセスBに対してプロセスAと同一の内容を返却する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;ネットワークエラーによる再試行で冪等性を保証する&#34;&gt;ネットワークエラーによる再試行で冪等性を保証する&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;概要: クライアントがリクエストを送信したが、ネットワークエラーによってレスポンスが返らず、クライアント側でタイムアウト後に同じリクエストを再送する&lt;/li&gt;
&lt;li&gt;期待: リクエストが一度だけ送信された場合と同じ状態になる&lt;/li&gt;
&lt;li&gt;アクター: クライアント、システム&lt;/li&gt;
&lt;li&gt;メインフロー:
&lt;ul&gt;
&lt;li&gt;1: クライアントが、識別可能な形式でシステムにデータの登録を要求する&lt;/li&gt;
&lt;li&gt;2: システムは、リクエストを受け取り処理を開始する&lt;/li&gt;
&lt;li&gt;3: システムは、新しいRevisionを作成する&lt;/li&gt;
&lt;li&gt;4: ネットワークエラーが発生し、レスポンスがクライアントに到達しない&lt;/li&gt;
&lt;li&gt;5: クライアントがタイムアウトし、同じ内容で再度リクエストを送信する&lt;/li&gt;
&lt;li&gt;6: システムは、該当するリクエストが既に処理されていることを認識する&lt;/li&gt;
&lt;li&gt;7: システムは、既に登録済みのRevisionをクライアントに返却する（新たな登録は行わない）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;データの内容は同じだが異なる親revisionに対して登録する&#34;&gt;データの内容は同じだが異なる親Revisionに対して登録する&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;概要: データの内容は同じだが、異なる親Revisionに対して登録要求が届く&lt;/li&gt;
&lt;li&gt;期待: 各要求は異なるものとして扱われ、別のRevisionが作成される&lt;/li&gt;
&lt;li&gt;アクター: プロセスA、プロセスB&lt;/li&gt;
&lt;li&gt;メインフロー:
&lt;ul&gt;
&lt;li&gt;1: プロセスAが、親Revision-1を指定してデータを登録する&lt;/li&gt;
&lt;li&gt;2: システムは、(親Revision-1, データ) に対応するRevisionを作成する&lt;/li&gt;
&lt;li&gt;3: プロセスBが、親Revision-2を指定して同じデータを登録する&lt;/li&gt;
&lt;li&gt;4: システムは、これら2つのリクエストが異なることを認識する（親が異なるため）&lt;/li&gt;
&lt;li&gt;5: システムは、(親Revision-2, データ) に対応する別のRevisionを作成する（二重登録ではなく、論理的に異なる履歴）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;複数の言語で実装されたクライアントからのリクエストを処理する&#34;&gt;複数の言語で実装されたクライアントからのリクエストを処理する&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;概要：Go、Python、JavaScript など複数の言語でクライアントが実装される。システム全体で、同じ(親Revision, データ)に対しては同じ識別キーが割り当たる必要がある&lt;/li&gt;
&lt;li&gt;期待: 実装言語に関わらず、同じ仕様に従えば同じキーが生成される&lt;/li&gt;
&lt;li&gt;アクター：言語Aで実装されたクライアント、言語Bで実装されたクライアント、サーバー&lt;/li&gt;
&lt;li&gt;メインフロー:
&lt;ul&gt;
&lt;li&gt;1: 言語Aのクライアントが、ある仕様に基づいて識別キーを生成する&lt;/li&gt;
&lt;li&gt;2: 言語Bのクライアントが、同じ仕様に基づいて、同じ(親Revision, データ)に対して識別キーを生成する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;運用時のユースケース&#34;&gt;運用時のユースケース&lt;/h3&gt;
&lt;h4 id=&#34;識別キー計算仕様を変更する&#34;&gt;識別キー計算仕様を変更する&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;概要: 運用中にセキュリティ向上などの理由で、識別キーの計算方法（例：ハッシュアルゴリズム）を変更する&lt;/li&gt;
&lt;li&gt;期待: 全ての識別キー計算方法を更新できる&lt;/li&gt;
&lt;li&gt;前提: デプロイによるコンテナ入れ替え時の新旧クライアント混在の影響は考えない&lt;/li&gt;
&lt;li&gt;識別キーをクライアント側で生成する場合:
&lt;ul&gt;
&lt;li&gt;アクター: システム管理者、クライアントAの開発者、クライアントBの開発者&lt;/li&gt;
&lt;li&gt;メインフロー:
&lt;ul&gt;
&lt;li&gt;1: システム管理者は、クライアントAの開発者とクライアントBの開発者に対して識別キーの計算方法の更新を要求する&lt;/li&gt;
&lt;li&gt;2: クライアントAの開発者は、クライアントAの識別キー計算方法を更新する&lt;/li&gt;
&lt;li&gt;3: クライアントAの開発者は、システムに対して新しいクライアントAのデプロイを要求する&lt;/li&gt;
&lt;li&gt;4: システムは、新しいクライアントAをデプロイする&lt;/li&gt;
&lt;li&gt;5: クライアントBの開発者は、クライアントBの識別キー計算方法を更新する&lt;/li&gt;
&lt;li&gt;6: クライアントBの開発者は、システムに対して新しいクライアントAのデプロイを要求する&lt;/li&gt;
&lt;li&gt;7: システムは、新しいクライアントBをデプロイする&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;識別キーをサーバー側で生成する場合:
&lt;ul&gt;
&lt;li&gt;アクター: システム管理者、サーバー開発者&lt;/li&gt;
&lt;li&gt;メインフロー:
&lt;ul&gt;
&lt;li&gt;1: システム管理者は、サーバー開発者に対して識別キーの計算方法の更新を要求する&lt;/li&gt;
&lt;li&gt;2: サーバー開発者は、サーバー内における識別キー計算方法を更新する&lt;/li&gt;
&lt;li&gt;3: サーバー開発者は、システムに対して新しいサーバーのデプロイを要求する&lt;/li&gt;
&lt;li&gt;4: システムは、新しいサーバーをデプロイする&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;複数の識別キー計算仕様に対応する&#34;&gt;複数の識別キー計算仕様に対応する&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;概要: 運用中にセキュリティ向上などの理由で、識別キーの計算方法（例：ハッシュアルゴリズム）を変更する必要が出た場合、システムが円滑に移行できる&lt;/li&gt;
&lt;li&gt;前提: クライアントの実装言語は一つ（組み合わせ爆発回避のため）&lt;/li&gt;
&lt;li&gt;期待: 計画的な移行により、冪等性を失わずに仕様を変更できる&lt;/li&gt;
&lt;li&gt;識別キーをクライアント側で生成する場合:
&lt;ul&gt;
&lt;li&gt;サーバーメンテナンス（停止）期間を設けない場合:
&lt;ul&gt;
&lt;li&gt;前提: クライアントの識別キーの計算方法は実装済みで、デプロイ待ちの状態&lt;/li&gt;
&lt;li&gt;アクター: サーバー開発者、サーバー、クライアント開発者、エンドユーザーA、エンドユーザーB、ハッシュアルゴリズムAを使う古いクライアント、ハッシュアルゴリズムBを使う新しいクライアント、&lt;/li&gt;
&lt;li&gt;メインフロー:
&lt;ul&gt;
&lt;li&gt;1: サーバー開発者は、新旧2種類のハッシュアルゴリズムに対応するようにサーバを変更する&lt;/li&gt;
&lt;li&gt;2: サーバー開発者は、システムに対して新しいサーバーのデプロイを要求する&lt;/li&gt;
&lt;li&gt;3: システムは、新しいサーバーをデプロイする&lt;/li&gt;
&lt;li&gt;4: サーバー開発者は、クライアント開発者に識別キーの計算方法を更新したクライアントをデプロイしても良い旨を連絡する&lt;/li&gt;
&lt;li&gt;5: クライアント開発者は、システムに対して識別キーの計算方法を更新したクライアントのデプロイを要求する&lt;/li&gt;
&lt;li&gt;6: システムは、クライアントを入れ替え始める&lt;/li&gt;
&lt;li&gt;7: エンドユーザーAが、システムに対してデータの登録を要求する&lt;/li&gt;
&lt;li&gt;8: システムは、エンドユーザーAの要求を新しいクライアントに振り分ける&lt;/li&gt;
&lt;li&gt;9: 新しいクライアントは、サーバーに対してデータの登録を要求する&lt;/li&gt;
&lt;li&gt;10: サーバーは新しいクライアントからのデータを永続化し、永続化が成功した旨のメッセージを新しいクライアントに返却する&lt;/li&gt;
&lt;li&gt;11: エンドユーザーAは、データが登録されたことを確認する&lt;/li&gt;
&lt;li&gt;12: エンドユーザーBが、システムに対してエンドユーザーAと同一の内容で登録要求する&lt;/li&gt;
&lt;li&gt;13: システムは、エンドユーザーBの要求を古いクライアントに振り分ける&lt;/li&gt;
&lt;li&gt;14: 古いクライアントは、サーバーに対してデータの登録を要求する&lt;/li&gt;
&lt;li&gt;15: サーバーは、古いクライアントからの要求内容が処理済みの要求と同一と判定し、新しいクライアントに返却したものと同じメッセージを古いクライアントに返却する&lt;/li&gt;
&lt;li&gt;16: エンドユーザーBは、データが登録されたことを確認する&lt;/li&gt;
&lt;li&gt;17: システムは、クライアントの入れ替えを完了する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;サーバーメンテナンス（停止）期間を設ける場合:
&lt;ul&gt;
&lt;li&gt;アクター: サーバー開発者、クライアント開発者&lt;/li&gt;
&lt;li&gt;メインフロー:
&lt;ul&gt;
&lt;li&gt;1: サーバー開発者は、システムに対してサーバーの停止を要求する&lt;/li&gt;
&lt;li&gt;2: システムは、サーバーを停止する&lt;/li&gt;
&lt;li&gt;4: サーバー開発者は、クライアント開発者に識別キーの計算方法を更新したクライアントをデプロイしても良い旨を連絡する&lt;/li&gt;
&lt;li&gt;5: クライアント開発者は、システムに対して識別キーの計算方法を更新したクライアントのデプロイを要求する&lt;/li&gt;
&lt;li&gt;6: システムは、クライアントを入れ替え始める&lt;/li&gt;
&lt;li&gt;7: システムは、クライアントの入れ替えを完了する&lt;/li&gt;
&lt;li&gt;8: クライアント開発者は、サーバー開発者に対してクライアントのデプロイが完了した旨を連絡する&lt;/li&gt;
&lt;li&gt;9: サーバー開発者はシステムに対してサーバーの再稼働を要求する&lt;/li&gt;
&lt;li&gt;10: システムは、サーバーを再稼働させる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;識別キーをサーバー側で生成する場合:
&lt;ul&gt;
&lt;li&gt;メインフロー:
&lt;ul&gt;
&lt;li&gt;1: サーバー開発者は、サーバー内の識別キー計算方法を更新する&lt;/li&gt;
&lt;li&gt;2: サーバー開発者は、識別キーの計算方法が更新されたサーバーのデプロイをシステムに要求する&lt;/li&gt;
&lt;li&gt;3: システムは新しいサーバーをデプロイする&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;冪等性キーの生成場所と等値性の判定場所の決定&#34;&gt;冪等性キーの生成場所と等値性の判定場所の決定&lt;/h2&gt;
&lt;p&gt;上で洗い出したユースケースをもとに、冪等性キーの生成場所と等値性の判定場所について考えていく。&lt;/p&gt;
&lt;p&gt;冪等性キーの生成場所について、サーバー側・クライアント側それぞれを選択した場合のメリット・デメリットは下記の通り:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;サーバー側で生成した場合&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;pros:
&lt;ul&gt;
&lt;li&gt;冪等性キーの生成ロジックの更新などの運用タスクがサーバー側だけで完結する✓&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;cons:
&lt;ul&gt;
&lt;li&gt;実際には等値と判定されるペイロードも、クライアント側で冪等処理されずサーバーにリクエストされる✗
&lt;ul&gt;
&lt;li&gt;同値のペイロードが大量にリクエストされた場合にDoSとなりうる
&lt;ul&gt;
&lt;li&gt;緩和条件:
&lt;ul&gt;
&lt;li&gt;エンドポイントをprivateに保った場合&lt;/li&gt;
&lt;li&gt;リクエスト数が少ない場合&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;クライアント側で生成した場合&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;pros:
&lt;ul&gt;
&lt;li&gt;同値のペイロードに対する処理を、サーバーにリクエストすることなくクライアント側で完結させられる（キャッシュを保持する場合）✓&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;cons:
&lt;ul&gt;
&lt;li&gt;冪等性キーの生成ロジックやライブラリを更新する場合、クライアントの種数ぶんの更新タスクが発生する✗
&lt;ul&gt;
&lt;li&gt;クライアントの実装言語が複数ある場合、運用工数はさらに大きくなる&lt;/li&gt;
&lt;li&gt;緩和条件:
&lt;ul&gt;
&lt;li&gt;冪等性キーの生成ロジックを共通サービスから取得した場合
&lt;ul&gt;
&lt;li&gt;費用対効果が見合わない✗&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上記から、両方法にはパフォーマンス上および運用上のメリット・デメリットがあることがわかった。&lt;/p&gt;
&lt;p&gt;資源評価プラットフォームの性質を考慮すれば、そもそもリクエスト数はそれほど多くならないと考えられるため、サーバー側で生成する方法のデメリットである、リクエスト集中時のスループットの悪さはほとんど無視できると思われる。
加えて、将来的には資源計算の入力データだけでなく、出力を保存するユースケースも考えうる: つまりクライアント種が増える可能性も考えれば、サーバーで生成する方法の運用上のメリットが重要となる。
もちろん、出力を保存するサービスを専用の新サービスとして開発する構成も考えうるが、data-registryはその名前が示すように既に充分抽象化されているように思う。&lt;/p&gt;
&lt;p&gt;上記を考え併せて、現時点では、冪等性キーはサーバー側で生成する方法を選ぶことにする。&lt;/p&gt;
&lt;p&gt;冪等性キーがサーバー側で生成されるとなれば、等値性判定もサーバー側に集約するのが自然だろう。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;本記事では、前回の反省を活かして必要十分にまとめられたように思う。&lt;/p&gt;
&lt;p&gt;今回の主役であった冪等性については、過去記事の時点でシステム要件 &lt;code&gt;SR005&lt;/code&gt; として定義してあった:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;SR005: 同一の登録要求識別子を持つ登録要求に対しては同一の結果を返し、新たな版を重複して作成してはならない&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本記事で下した冪等性キーの生成や等値性判定を行う場所についての意思決定は既存の &lt;code&gt;SR005&lt;/code&gt; には反映されないものの、アーキテクチャに関する意思決定としてdata-registryのADRとした。&lt;/p&gt;
&lt;p&gt;現時点におけるdata-registry開発の進捗はこんな感じ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; API契約を書く&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; ルーティングの動作確認&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; db セットアップ&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; リポジトリ・ハンドラの実装&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; API基本設計&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Revision生成ロジックの設計
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 等値性の定義&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 冪等性キー生成場所と等値性判定の場所の決定&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 冪等処理の設計&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; データベース設計&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; リファクタリング&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; エラーハンドリングの追加&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;つづく&lt;/p&gt;
&lt;h2 id=&#34;後日追記&#34;&gt;（後日追記）&lt;/h2&gt;
&lt;p&gt;同じデータを別名で登録するユースケースを追加したので、&lt;code&gt;SR015: 同じデータを別名で登録する要求は異なる要求として扱う&lt;/code&gt; を追加した。&lt;/p&gt;
&lt;p&gt;すると、等値性の定義は下記のようになる:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;等値とみなすリクエスト = hash(parentRevisionId, name, hash(data))が同じリクエスト
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>補足記事 &#34;PfEingのアプローチで働こう&#34;</title>
      <link>https://rindrics.com/articles/supplement-platform-engineering-approach/</link>
      <pubDate>Fri, 04 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>https://rindrics.com/articles/supplement-platform-engineering-approach/</guid>
      <description>&lt;h2 id=&#34;これはなに&#34;&gt;これはなに&lt;/h2&gt;
&lt;p&gt;下記の口頭発表に対する補足記事である。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;演題: &amp;ldquo;PfEingのアプローチで働こう&amp;rdquo;&lt;/li&gt;
&lt;li&gt;イベント名: 【3-shake × enechain】SRE Tech Talk #15&lt;/li&gt;
&lt;li&gt;日時: 2026年9月4日&lt;/li&gt;
&lt;li&gt;場所: 株式会社スリーシェイク（東京, 銀座）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この記事では、時間の制約から口頭発表には含められなかった情報を補足として紹介する。&lt;/p&gt;
&lt;p&gt;発表資料はこちら:&lt;/p&gt;
&lt;div class=&#34;speakerdeck-embed&#34;&gt;
  &lt;iframe
    class=&#34;speakerdeck-iframe&#34;
    src=&#34;https://speakerdeck.com/player/1e9dfa1f9fb84c049ff2d52837afd1be&#34;
    title=&#34;PfEingのアプローチで働こう&#34;
    allowfullscreen
    allow=&#34;web-share&#34;
    loading=&#34;lazy&#34;
    style=&#34;border: 0; background: rgba(0, 0, 0, 0.1); margin: 0; padding: 0; border-radius: 6px; box-shadow: rgba(0, 0, 0, 0.2) 0 5px 40px; width: 100%; height: auto; aspect-ratio: 16 / 9;&#34;
  &gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h2 id=&#34;スライド各ページの補足&#34;&gt;スライド各ページの補足&lt;/h2&gt;
&lt;h3 id=&#34;タイトル&#34;&gt;（タイトル）&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-09-02-pfeing/1.webp&#34; width=&#34;70%&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;本発表で話したのは「PfEingアプローチ」 ではない。
これでは、私が新しい用語を考え出したことになってしまう。&lt;/p&gt;
&lt;p&gt;あくまでも「PfEing&lt;strong&gt;の&lt;/strong&gt;アプローチ」だ。&lt;/p&gt;
&lt;p&gt;「プラットフォームエンジニアリング」はスライド上では幅を取りすぎるので &amp;ldquo;PfEing&amp;rdquo; で統一した。
視覚上は短くなったが、読みは同じなので噛みそうなのは変わらない。&lt;/p&gt;
&lt;h3 id=&#34;自己紹介&#34;&gt;（自己紹介）&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-09-02-pfeing/2.webp&#34; width=&#34;70%&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;サイボウズが提供しているキントーン（kintone, Kintone）というサービスは、単一（というと語弊があるが）のアプリケーションソースコードを&lt;a href=&#34;https://blog.cybozu.io/entry/2025/04/11/112000&#34;&gt;国内向け（cybozu.com）&lt;/a&gt;・&lt;a href=&#34;https://blog.cybozu.io/entry/2019/04/24/080000&#34;&gt;国外向け（kintone.com）&lt;/a&gt;二つの基盤で動かすことでエンドユーザーに提供されている。&lt;/p&gt;
&lt;p&gt;ちなみに、キントーンのアルファベット表記は、国内向けでは小文字始まりの&lt;strong&gt;k&lt;/strong&gt;intoneなのに対し、海外向けでは&lt;strong&gt;K&lt;/strong&gt;intone。&lt;/p&gt;
&lt;p&gt;私のチームはkintone.comのプラットフォームを開発・運用しているプラットフォームチームで、社内では通称Yakumoチームと呼ばれている。&lt;/p&gt;
&lt;p&gt;10年近い歴史を持つチームなので、記事の中には古くなっているものもあるが、サイボウズのテックブログを &amp;ldquo;Yakumo&amp;rdquo; カテゴリで検索すると&lt;a href=&#34;https://blog.cybozu.io/archive/category/Yakumo&#34;&gt;技術記事がヒット&lt;/a&gt;する。&lt;/p&gt;
&lt;p&gt;名前の由来をふくむ、Yakumoチーム自体については下の記事にまとまっている。&lt;/p&gt;








&lt;div class=&#34;card&#34;&gt;
  &lt;a href=&#34;https://blog.cybozu.io/entry/2026/07/23/100000&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; class=&#34;card-link&#34;&gt;
    &lt;div class=&#34;card-content&#34;&gt;
      &lt;h4 class=&#34;card-title&#34;&gt;kintone.com プラットフォームを提供 ~ われら Yakumo にござる | blog.cybozu.io&lt;/h4&gt;
      
      &lt;span class=&#34;card-url&#34;&gt;https://blog.cybozu.io/entry/2026/07/23/100000&lt;/span&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;h3 id=&#34;やっていること&#34;&gt;「やっていること」&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-09-02-pfeing/3.webp&#34; width=&#34;70%&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;本発表はプラットフォームエンジニアリング的な働き方について述べたものだが、別のアプローチの働き方をした経験があるので前職の例と対比した。&lt;/p&gt;
&lt;p&gt;DevOpsをチーム名に冠すること自体についてはここには書ききれないので、別の機会に書こうと思う。&lt;/p&gt;
&lt;h3 id=&#34;pfeingチームの働き方&#34;&gt;「PfEingチームの働き方」&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-09-02-pfeing/4.webp&#34; width=&#34;70%&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;発表には含められなかったが、最近はプラットフォームエンジニアリングに関して、下記のテーマについて考えている:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PfEingというアプローチそれ自体&lt;/li&gt;
&lt;li&gt;プラットフォームの &amp;ldquo;&lt;a href=&#34;https://tag-app-delivery.cncf.io/whitepapers/platforms/#attributes-of-platforms:~:text=the%20database%20server.-,Optional,-and%20composable.%20Platforms&#34;&gt;optional&lt;/a&gt;&amp;rdquo; という特性と、それが満たされないときに起こること&lt;/li&gt;
&lt;li&gt;一応の運用が効果計測を目的とした計装と社内の信頼残高との関係&lt;/li&gt;
&lt;li&gt;責務境界のあるべき姿とストリームアラインドチームの負担増&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上記のうち、「PfEingというアプローチ」に関して、LTサイズに切り出せるメッセージが見つかったので本発表を作った。&lt;/p&gt;
&lt;p&gt;本スライドに示したのは、本発表が特に影響を受けた下記の記事・書籍である:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;&lt;a href=&#34;https://martinfowler.com/articles/talk-about-platforms.html&#34;&gt;What I Talk About When I Talk About Platforms&lt;/a&gt;&amp;rdquo; Bottcher (2018)&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;a href=&#34;https://cloudnativeplatforms.com/whitepapers/platforms/&#34;&gt;CNCF Platforms White Paper&lt;/a&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&lt;a href=&#34;https://chadxz.dev/platform/&#34;&gt;How Platform Engineering Works&lt;/a&gt;&amp;rdquo; McElligott (2023)&lt;/li&gt;
&lt;li&gt;『&lt;a href=&#34;https://www.oreilly.co.jp/books/9784814401413/&#34;&gt;プラットフォームエンジニアリング&lt;/a&gt;』Fournier &amp;amp; Nowland (2025) オライリー・ジャパン&lt;/li&gt;
&lt;li&gt;『&lt;a href=&#34;https://book.mynavi.jp/ec/products/detail/id=151794&#34;&gt;実践 プラットフォームエンジニアリング&lt;/a&gt;』Chankramath et al. (2026) マイナビブックス&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;損益分岐点がある&#34;&gt;「損益分岐点がある」&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-09-02-pfeing/5.webp&#34; width=&#34;70%&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;こんにち（2026年）では、「プラットフォームエンジニアリング」という言葉が定着しつつあるため、このデシジョンツリーを使うなどして「プラットフォームエンジニアリングをするかどうか」というメタ認知を持ってプラットフォームチームを立ち上げられる。
プラットフォームチームにとって（もちろん組織全体にとって）、これは本当に大きい利点だ。&lt;/p&gt;
&lt;p&gt;この言葉がなかった頃から、形を変えながら続いてきたプラットフォームチームでは、プラットフォームとして必ずしも適切とはいえない責務を抱えていることがあると思う。&lt;/p&gt;
&lt;h3 id=&#34;常に必要な自問&#34;&gt;「常に必要な自問」&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-09-02-pfeing/6.webp&#34; width=&#34;70%&#34;&gt;
&lt;/figure&gt;

&lt;blockquote&gt;
&lt;p&gt;「自分たちはPfEing&lt;strong&gt;できているか&lt;/strong&gt;？」&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;現実世界でちゃんとPfEingするのは本当に難しいので「できているか」を強調してある。&lt;/p&gt;
&lt;p&gt;プラットフォームエンジニアは、自分達の働き方について、本当に自覚的になる必要がある。
プラットフォームエンジニアの場合、他チーム&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;から見て「いい仕事」をしているように見えても、プラットフォームエンジニアリング的に誤ったアプローチで働いてしまうというケースは、いくらでも生じうる。
顧客の満足が必ずしも&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;宿命的にROIが重要&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;これには引用があるわけではなく、発表において言葉の簡潔さとパワーを得るためにこのフレーズを使った。&lt;/p&gt;
&lt;p&gt;といっても、プラットフォームエンジニアリングについて色々な情報を読んでいれば意味するところは理解いただけるのではないかと思う。&lt;/p&gt;
&lt;p&gt;関連する記述を具体的に揚げるとすれば、『プラットフォームエンジニアリング』では、プラットフォームチームは、より大きいものを管理するために自チームのサイズを大きくすることに慎重になる必要があることを指摘している（13.3「成長をコントロールすることによる複雑性の管理」）。
これは単純にROIの分母が大きくなってしまうだけではなく、働き方の質を変えるための吟味の機会を失うことも意味するからだ。&lt;/p&gt;
&lt;h3 id=&#34;pfeingのアプローチ&#34;&gt;「PfEingのアプローチ」&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-09-02-pfeing/7.webp&#34; width=&#34;70%&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;どこから取ろうがエッセンスは変わらないが、ここでは代表としてCNCFのPlatforms White Paperからの引用を示した。
このドキュメントは短いが、読むたびに新しいテーマについて考えるきっかけが得られるので、私は定期的に読むようにしている。&lt;/p&gt;
&lt;p&gt;ちなみに現時点のPlatforms White Paperは、雑にキーワード検索すると&lt;a href=&#34;https://tag-app-delivery.cncf.io/whitepapers/platforms/&#34;&gt;App Delivery TAG版の古いドキュメント&lt;/a&gt;がヒットしがち。
現行のドキュメントは&lt;a href=&#34;https://cloudnativeplatforms.com/whitepapers/platforms/&#34;&gt;cloudnativeplatforms.comのこちら&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;気を抜くとかんたんに外れうる&#34;&gt;「気を抜くとかんたんに外れうる」&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-09-02-pfeing/8.webp&#34; width=&#34;70%&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;プラットフォームエンジニアリングチームが&lt;strong&gt;どう&lt;/strong&gt;働くべきチームなのかを、組織の中で最もよく理解しているのはプラットフォームチーム自身だ。
そもそも「依頼」という言葉自体、危険な香りがする。
プラットフォームチームとしては、TicketOps的な慣習をアンラーニングし、顧客チームとの関わり方自体も組織として成熟させていく必要がある。
『チームトポロジー』の用語で言うならば、ここで言っているのは「顧客チームとの &amp;ldquo;コラボレーションモード&amp;rdquo; を &amp;ldquo;X-as-a-Service&amp;rdquo; に変えていけ」という話&lt;strong&gt;ではない&lt;/strong&gt;。
新しいケイパビリティの探索フェーズでは、コラボレーションモードが必要になる。
ここでは「依頼を受けて作る」という働き方を、雑に「コラボレーションモード」と呼んだりはするな、という意味で言っている。&lt;/p&gt;
&lt;p&gt;余談だが、参考リンク先の「Terraformスタータキット」のアンチパターンの例&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;については、もしスタータキットの&lt;strong&gt;モジュール配布だけ&lt;/strong&gt;をやっていた場合には少しマシになる&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;という理解。&lt;/p&gt;
&lt;h3 id=&#34;どうしても断れない依頼&#34;&gt;「どうしても断れない依頼」&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-09-02-pfeing/9.webp&#34; width=&#34;70%&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;このケースは、最初からプラットフォームチームとして設計されて立ち上がった、新しいプラットフォームチームでは起こりにくいのかもしれない。&lt;/p&gt;
&lt;p&gt;一方で、形を変えながら続いてきたプラットフォームチームには、このパターンはよく発生するのではないだろうか。&lt;/p&gt;
&lt;h3 id=&#34;現実世界はいろいろあるけど&#34;&gt;「&amp;hellip;現実世界はいろいろあるけど」&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-09-02-pfeing/10.webp&#34; width=&#34;70%&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;プラットフォームエンジニアリングは全体最適を追求する働き方だ。
全体最適は組織にとって善きものだが、それを推進する取組みもまた善きものと見られるかどうかは、他のタスクとの比重に因っている。
他チームに預けた信頼残高も関わってくる。&lt;/p&gt;
&lt;h2 id=&#34;謝辞&#34;&gt;謝辞&lt;/h2&gt;
&lt;p&gt;発表の機会を提供してくださったスリーシェイクさん、enechainさん、ありがとうございました。&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;「他チーム」とはもちろん、プラットフォームエンジニアリングについての解像度が低いチームのことだ。当然、他のプラットフォームチームの目はごまかせない&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;ここでいうアンチパターンとは「プラットフォームチームとしての」アンチパターンのこと。状況に応じた方法を選ぶことが重要&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;マシになるとは、プラットフォームエンジニアリング的な働き方にやや近づく、と言う意味&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>『実践 プラットフォームエンジニアリング』を読んだ</title>
      <link>https://rindrics.com/articles/book-review-effective-platform-engineering/</link>
      <pubDate>Sat, 29 Aug 2026 00:00:00 +0900</pubDate>
      
      <guid>https://rindrics.com/articles/book-review-effective-platform-engineering/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://effectiveplatformengineering.com/&#34;&gt;Effective Platform Engineering&lt;/a&gt;の邦訳版が出たので読んでみた。&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-08-25-pfe/cover.webp&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;実践 プラットフォームエンジニアリング─開発者体験を加速するセルフサービス基盤の設計と構築&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;執筆: Ajay Chankramath, Nic Cheneweth, Bryan Oliver, Sean Alvarez&lt;/li&gt;
&lt;li&gt;翻訳: 株式会社スリーシェイク（元内柊也、小池玲斗、木曽和則、下村俊貴）&lt;/li&gt;
&lt;li&gt;マイナビブックス、2026年&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;私が読んだのは&lt;a href=&#34;https://book.mynavi.jp/ec/products/detail/id=151794&#34;&gt;PDF板&lt;/a&gt;。
なお本書は会社の&lt;a href=&#34;https://cybozu.backstage.cybozu.co.jp/n/ncabe948d639c&#34;&gt;SLP（Self Learning Program）&lt;/a&gt;という仕組みを利用して購入した。&lt;/p&gt;
&lt;h2 id=&#34;どんな本か&#34;&gt;どんな本か&lt;/h2&gt;
&lt;p&gt;こんにち、プラットフォームエンジニアリングのマインドセットは言語化され、例えば &amp;ldquo;&lt;a href=&#34;https://cloudnativeplatforms.com/whitepapers/platforms/&#34;&gt;CNCF Platforms White Paper&lt;/a&gt;&amp;rdquo; などで参照可能になっている
一方で、それらを具体的にどのように実現するかについては、まだまだ情報は充分とはいえない。
本書は、コンサルタントとしてエンジニアリングプラットフォームの実装に関わり、多くの場数を踏んだ著者らによるものなのでこの &amp;ldquo;how&amp;rdquo; の部分が手厚く解説されている。
ちなみに著者陣のキャリアは、4人全員がThoughtworksあるいはBrillioにあり、これはつまりプラットフォームエンジニアリングにとって重要な要素であるスケール性を扱った経験が豊富ということを意味する。
また、特定のプラットフォームプロダクトのベンダー企業&lt;strong&gt;ではない&lt;/strong&gt;というところも、実践形式の書籍として良い点といえる。&lt;/p&gt;
&lt;p&gt;本書の他に、プラットフォームエンジニアリングに関して体系的に読める別の書籍としてはオライリージャパンの『プラットフォームエンジニアリング』&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;もあるが、本書のほうが後発なだけあって現時点におけるプラットフォームエンジニアリングの業界の標準が反映されている。
2026年時点において、プラットフォームエンジニアリングについて知りたい人がまず読むならば、あちらの本よりも本書を先に読むと良さそう。
本書で「どんな世界観をどう実装するか」を理解したあと、「それを社内（政治的制約がある環境）でどう推進するか」について『プラットフォームエンジニアリング』を読みながら考えてみるとよい。&lt;/p&gt;
&lt;p&gt;また本書はプラットフォームエンジニアリングの定義に成功指標の計測も含めており、オブザーバービリティを第一級市民として扱っているところも特徴といえる。&lt;/p&gt;
&lt;h2 id=&#34;個人的に目に止まったところ&#34;&gt;個人的に目に止まったところ&lt;/h2&gt;
&lt;h3 id=&#34;第1章-プラットフォームエンジニアリングとは何か&#34;&gt;第1章 プラットフォームエンジニアリングとは何か&lt;/h3&gt;
&lt;h4 id=&#34;プラットフォームはdevopsにとどまらないp4&#34;&gt;プラットフォームはDevOpsにとどまらない（p.4）&lt;/h4&gt;
&lt;p&gt;本節で書かれている &amp;ldquo;DevOps&amp;rdquo; の認識に同意しかねる部分がある。
コメントの分量が膨らんでしまいそうなので、別の記事で書くことにする。&lt;/p&gt;
&lt;h3 id=&#34;第2章-ソフトウェアデファインドのプロダクトとアーキテクチャ&#34;&gt;第2章 ソフトウェア・デファインドのプロダクトとアーキテクチャ&lt;/h3&gt;
&lt;h4 id=&#34;1年後にプラットフォームがどう使われるかを予測するのは不可能p44&#34;&gt;1年後にプラットフォームがどう使われるかを予測するのは不可能（p.44）&lt;/h4&gt;
&lt;p&gt;この解釈は難しいところだと思う。
本書は技術選定時にはなるべく少ない機能のものを選ぶことを推奨しているが、だからといってここの記述は「今だけを見て意思決定しろ」という意味ではないはず。
チームとして戦略的視点に基づいた動きをしていることは恐らく前提（&amp;hellip;そうだよな？）。
要はよくよく気をつけろというメッセージと理解した。&lt;/p&gt;
&lt;p&gt;それにしても「不可欠だと思われていたケイパビリティが実は不要だった」は肝に命じておきたい。
YAGNIとは昔から言われるが、ここで述べられているのは「あったら良いと思ったが不要だった」ではなく、「&lt;strong&gt;不可欠&lt;/strong&gt;だと思ったが不要だった」だから恐ろしい。
要件を考える段になってYAGNIを唱えるのではなく、戦略レベルから注意を払わないとだめということ（難しい）。&lt;/p&gt;
&lt;h4 id=&#34;ドメイン駆動プラットフォーム設計p54&#34;&gt;ドメイン駆動プラットフォーム設計（p.54）&lt;/h4&gt;
&lt;p&gt;プラットフォームエンジニアリングの文脈でDDDを強調しているのは本書の一つの特徴。
個人的には、ソフトウェア開発ど真ん中のキャリアではないながらも、DDDについては本業とは別に継続的に自己投資してきたので、これまで学んできたことが本書を読んで数年（5年くらい？）のタイムラグを経てつながった感じがある。&lt;/p&gt;
&lt;h4 id=&#34;スムーズな開発者体験を実現するインフラコスト配賦p59&#34;&gt;スムーズな開発者体験を実現するインフラコスト配賦（p.59）&lt;/h4&gt;
&lt;p&gt;ここで書かれているスムーズな開発者体験は、顧客チームにインフラのコスト配賦をできている前提。
バックオフィスとも連携がとれた組織のレベルが高い話だ。&lt;/p&gt;
&lt;h4 id=&#34;手動プロセスによる機会損失p60&#34;&gt;手動プロセスによる機会損失（p.60）&lt;/h4&gt;
&lt;p&gt;手動プロセスが機会損失につながることは誰でも知っているが、コストや効果の計測を第一級市民として扱う本書では、機会損失は言葉だけでなく実際に算出する値としての意味を持っている。
こういった広い意味でのオブザーバービリティは、短期的な顧客価値につながりづらいので推進が難しいが、裏を返せばオブザーバービリティ確保の先延ばしは、チームが「このプロダクトは（たぶん）顧客の生産性を高めた（んだと思う&amp;hellip;）」という状態で働き続けることを意味する。&lt;/p&gt;
&lt;h4 id=&#34;組織固有のケイパビリティをk8sのapi拡張でオーケストレーションするp62&#34;&gt;組織固有のケイパビリティをk8sのAPI拡張でオーケストレーションする（p.62）&lt;/h4&gt;
&lt;p&gt;自動化はソフトウェアエンジニアリング文化の空気みたいなものだが、オーケストレーション──確実に動き続ける──まで保証できるのはプラットフォームエンジニアリングならではのアプローチだと思う。&lt;/p&gt;
&lt;h3 id=&#34;第3章-計測で導くプラットフォームエンジニアリングの成功&#34;&gt;第3章 計測で導くプラットフォームエンジニアリングの成功&lt;/h3&gt;
&lt;h4 id=&#34;エンジニアリングプラットフォーム構築のデシジョンツリーp70&#34;&gt;エンジニアリングプラットフォーム構築のデシジョンツリー（p.70）&lt;/h4&gt;
&lt;p&gt;図3.2のデシジョンツリーは、プラットフォーム構築がプラスになるかどうかの境界フェーズにある組織にとってはなかなか役立ちそう。&lt;/p&gt;
&lt;h4 id=&#34;プラットフォーム価値モデリングp77&#34;&gt;プラットフォーム価値モデリング（p.77）&lt;/h4&gt;
&lt;p&gt;プラットフォームチームの取組みが組織のバリューストリームから遠ざかることについて、これまでにもアンチパターンとして認識されてきた（&lt;a href=&#34;https://cloudnativeplatforms.com/whitepapers/platforms/#:~:text=teams%2E-,Many,frustration%2E&#34;&gt;例&lt;/a&gt;）。
本書が「プラットフォーム価値モデリング」としてモデル化したことで、世のプラットフォームチームは「アンチパターンに陥らないようにする」という具体性を欠いた否定形ではなく「プラットフォーム価値モデリングする」と能動態で考えられるようになった。
これは一種のケイパビリティだと思う。&lt;/p&gt;
&lt;h4 id=&#34;パフォーマンスメトリクス--オンボーディング時間p86&#34;&gt;パフォーマンスメトリクス | オンボーディング時間（p.86）&lt;/h4&gt;
&lt;p&gt;社内プラットフォームだからといって認証をおろそかにすると、こういったオブザーバービリティ面でツケが回ってくる。&lt;/p&gt;
&lt;h4 id=&#34;エンジニアリングプラットフォームのプロダクトドメインp91&#34;&gt;エンジニアリングプラットフォームのプロダクトドメイン（p.91）&lt;/h4&gt;
&lt;p&gt;図3.8は抽象的だが、ここで表されているものは、AWS上にEKSで環境を構築しているチームならば普通に使っているリソースを、本書の基準で分類したもの。
この8つの分類は初見時にはあまりしっくりこないかもしれないが、&amp;ldquo;6.4 クラウド管理ID&amp;rdquo;（p.193）以降で登場するそれぞれの分類の解説を読めば、その合理性がだんだんわかってくる。&lt;/p&gt;
&lt;h3 id=&#34;第4章-ガバナンスコンプライアンス信頼&#34;&gt;第4章 ガバナンス・コンプライアンス・信頼&lt;/h3&gt;
&lt;h4 id=&#34;idプロバイダーソリューションp117&#34;&gt;IDプロバイダーソリューション（p.117）&lt;/h4&gt;
&lt;p&gt;チームの境界で見られがちな「依頼」という協働パターンを撲滅するヒントがある。&lt;/p&gt;
&lt;h3 id=&#34;第5章-進化するオブザーバービリティ&#34;&gt;第5章 進化するオブザーバービリティ&lt;/h3&gt;
&lt;h4 id=&#34;オブザーバービリティの8つのレンズp131&#34;&gt;オブザーバービリティの8つのレンズ（p.131）&lt;/h4&gt;
&lt;p&gt;2026年現在、「オブザーバービリティ」といえば一般にはアプリケーションのオブザーバービリティを指すと思うが、本書ではそれをエンドユーザー（社内の開発者ユーザーのこと）体験を制限するアンチパターンと言い切っている。
本書はオブザーバービリティを「エンジニアリング」カテゴリと「ビジネス」カテゴリそれぞれ4つづつの主要8軸に分類し、組織のすみずみまで可観測性がある世界観を提示している。
当然、BIツールまで含むので、恐らくすべてプラットフォームチームが担当するわけではないだろう。
もしくは、いま「データエンジニアリングチーム」と呼ばれるものもプラットフォーム組織配下のチームとして考えているのかもしれない。&lt;/p&gt;
&lt;div class=&#34;info&#34;&gt;
&lt;strong&gt;「ビジネス」カテゴリのオブザーバビリティについて&lt;/strong&gt;
&lt;p&gt;（2026/09/06追記）
&amp;gt; 当然、BIツールまで含むので、恐らくすべてプラットフォームチームが担当するわけではないだろう。&lt;/p&gt;
&lt;p&gt;ここは誤解していた。
本書が言っているのはBIツールではなく、やはりオブザーバビリティツールと思われる。
『オブザーバビリティ・エンジニアリング&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;』に、これのヒントとなる記述があった。
そちらの本の内容の繰り返しになってしまうのでここには書かないが、「20.3 &amp;quot;オブザーバビリティツールとビジネスインテリジェンスツールの使い分け&amp;quot;」のあたり。
最近のBIツールは対話的クエリ能力も向上しているので、オブザーバビリティツールとBIツールは重なる部分が広くなってきているとは思うが、そもそもの設計思想が異なることを認識し直した。&lt;/p&gt;
&lt;/div&gt;
&lt;h3 id=&#34;第6章-ソフトウェアデファインドなエンジニアリングプラットフォームの構築&#34;&gt;第6章 ソフトウェア・デファインドなエンジニアリングプラットフォームの構築&lt;/h3&gt;
&lt;h4 id=&#34;名前空間レベルのパイプラインp170&#34;&gt;名前空間レベルのパイプライン（p.170）&lt;/h4&gt;
&lt;p&gt;ここで解説されているpreviewクラスタはおもしろい。
社内顧客を抱えるチームとして、インフラのメンテを安心して当てるのに合理的な構成となっている。&lt;/p&gt;
&lt;h3 id=&#34;第7章-プラットフォームコントロールプレーンの基礎&#34;&gt;第7章 プラットフォームコントロールプレーンの基礎&lt;/h3&gt;
&lt;h4 id=&#34;クラウドアカウントのベースラインp214&#34;&gt;クラウドアカウントのベースライン（p.214）&lt;/h4&gt;
&lt;p&gt;ここに差し掛かると、本書がこの「クラウドアカウントベースライン」を、前章で解説された「クラウド管理ID」とは異なるレイヤーのリソースとして認識していることを理解できる。
本来、AWSのリソースモデルの構造としては「アカウント」の下に「IAMロール」があるわけだが、本書の認知モデルではまず「クラウド管理ID（IAMロールが含まれる）」があり、その上に「クラウドアカウントベースライン（AWSアカウントを指す）」が載っている。
もちろん、AWSのリソースモデルとは異なるこの認知モデルが常に最高なわけはないが、複数アカウントの運用そのものが業務ドメインの中心にあるプラットフォームエンジニアリングの文脈では、なるほどこの整理は合理的だ。&lt;/p&gt;
&lt;p&gt;ただ環境を動かすだけなら誰にでもできる。
きれいに運用するのが難しい。
こうやって見せてもらえれば腹落ちするのだが、この整理は自分では思いつけそうにない。
ここはなかなか勉強になった。&lt;/p&gt;
&lt;h3 id=&#34;第8章-コントロールプレーンのサービスとエクステンション&#34;&gt;第8章 コントロールプレーンのサービスとエクステンション&lt;/h3&gt;
&lt;h4 id=&#34;プラットフォームエンジニアリングとdevopsのアプローチの違いp317&#34;&gt;プラットフォームエンジニアリングとDevOpsのアプローチの違い（p.317）&lt;/h4&gt;
&lt;p&gt;「スターターキット」のプラクティスを例に、DevOpsとプラットフォームエンジニアリングの違いが解説されている。
この解像度での解説は本書ならではで、両者は全く違うことがわかる。
特にプラットフォームエンジニアリングをする立場にあるならば、きちんと理解しておく必要がある。&lt;/p&gt;
&lt;h3 id=&#34;第9章-スケールを支えるアーキテクチャの変更&#34;&gt;第9章 スケールを支えるアーキテクチャの変更&lt;/h3&gt;
&lt;h4 id=&#34;アジャイルプラクティスの導入p358&#34;&gt;アジャイルプラクティスの導入（p.358）&lt;/h4&gt;
&lt;p&gt;『プラットフォームエンジニアリング』はプラットフォームチームがアジャイルな進め方をすることにかなり注意深い態度だったが、本書はけっこうアジャイル派な印象。&lt;/p&gt;
&lt;h3 id=&#34;第10章-プラットフォームプロダクトの進化&#34;&gt;第10章 プラットフォームプロダクトの進化&lt;/h3&gt;
&lt;h4 id=&#34;内部開発者プラットフォームidpと開発者ポータルの比較p378&#34;&gt;内部開発者プラットフォーム（IDP）と開発者ポータルの比較（p.378）&lt;/h4&gt;
&lt;p&gt;名前からしてそもそも紛らわしいので、ここは多くの読者が注意深く読みそう。
解説されてみれば、両者は確かに全く異なるし、はっきり使い分ける必要がある。&lt;/p&gt;
&lt;h2 id=&#34;理解しにくかった箇所の個人的メモ&#34;&gt;理解しにくかった箇所の個人的メモ&lt;/h2&gt;
&lt;h3 id=&#34;p10&#34;&gt;p.10&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;3つの概念は互いに依存し合っています&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;ldquo;&lt;strong&gt;4&lt;/strong&gt;つの概念&amp;rdquo; だろうか。&lt;/p&gt;
&lt;p&gt;余談だが、図1.3のような循環を表す模式図は、矢印を曲線にするだけで飛躍的に理解しやすくなる。&lt;/p&gt;
&lt;h3 id=&#34;p20&#34;&gt;p.20&lt;/h3&gt;
&lt;p&gt;ハンドオフ: 仕事の受け渡しのこと&lt;/p&gt;
&lt;h3 id=&#34;p21&#34;&gt;p.21&lt;/h3&gt;
&lt;h4 id=&#34;図18&#34;&gt;図1.8&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;SAST: static application security testing&lt;/li&gt;
&lt;li&gt;DAST: dynamic application security testing&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;p29&#34;&gt;p.29&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;セキュリティステークホルダーが企業認証基準を、(1) 内部認証の単一の信頼できるソースを要求し、(2) 内部実装をOAuth 2.0 フレームワークに基づくものと定義する場合です&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;これは恐らく下記の意味だと思う。&lt;/p&gt;
&lt;p&gt;セキュリティステークホルダーが企業認証基準を下記のように定義する場合です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(1) 内部認証の単一の信頼できるソースを要求するもの&lt;/li&gt;
&lt;li&gt;(2) 内部実装をOAuth 2.0 フレームワークに基づくもの&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;p33&#34;&gt;p.33&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;成功は、独立してドメインに専念する開発チームから生まれます。各チームは自分たちのドメインに固有のアイデアを試行します。計測可能な体験と価値を生み出すためにソフトウェアを構築してテストします。そして、ソフトウェアを顧客にリリースし、質の高いユーザー体験を確保しながら結果を注視して管理します&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;これは恐らく下記の意味だと思う。&lt;/p&gt;
&lt;p&gt;成功は、独立してドメインに専念する&lt;strong&gt;アプリケーション&lt;/strong&gt;開発チームから生まれます。各チームは自分たちのドメインに固有のアイデアを試行します。計測可能な体験と価値を生み出すためにソフトウェアを構築してテストします。そして、ソフトウェアを&lt;strong&gt;社外&lt;/strong&gt;顧客にリリースし、質の高いユーザー体験を確保しながら結果を注視して管理します&lt;/p&gt;
&lt;h3 id=&#34;p80&#34;&gt;p.80&lt;/h3&gt;
&lt;p&gt;「認知負荷の増加は10%以内」はどう計測するんだろう。
p.82には「認知負荷の影響を評価する体系的な手法が存在します」とだけ書いてある。
認知心理学の分野では確立されていたりするんだろうか。&lt;/p&gt;
&lt;p&gt;ちなみに、複数のプラットフォームプロダクトが時間差でリリースされた場合、認知負荷の変化がどのプロダクトによるものなのかわからなくなりそう。
成功指標の計測を徹底している組織では、同じ認知コンテキストに影響する変更が一つづつになるよう、リリース管理するんだろうか？&lt;/p&gt;
&lt;h3 id=&#34;p89-表31-32&#34;&gt;p.89 表3.1, 3.2&lt;/h3&gt;
&lt;p&gt;これらの情報は表で表してはいけない（同じ行間を比較したくなる）。
実査には下記のように、単なるリストで表示するのが正しい。&lt;/p&gt;
&lt;p&gt;表3.1&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;計画
&lt;ul&gt;
&lt;li&gt;開発者の関与&lt;/li&gt;
&lt;li&gt;顧客フィードバックループ&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;設計&lt;/li&gt;
&lt;li&gt;コード&lt;/li&gt;
&lt;li&gt;ビルド&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;表3.2&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;テスト
&lt;ul&gt;
&lt;li&gt;テストの種類&lt;/li&gt;
&lt;li&gt;テスト自動化&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;リリース&lt;/li&gt;
&lt;li&gt;監視&lt;/li&gt;
&lt;li&gt;運用&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;p138&#34;&gt;p.138&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;5.2.1 エンドユーザーのアクセス体験&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;エンドユーザーとは、プラットフォームサービスとしてのオブザーバービリティ機能を利用する社内開発者ユーザーのこと。
個人的には「エンド」と付くと本当の末端（会社が提供しているプロダクトのユーザー）をイメージしてしまうので紛らわしく感じる。&lt;/p&gt;
&lt;h3 id=&#34;p139&#34;&gt;p.139&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;5.2.2 顧客データの自動収集&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ここの「顧客」とは社内開発者ユーザーのことだと思う。
判断根拠は、p.140に「アプリケーションチームは、自分たちのデータがどのように収集され保存されるかという内部の仕組みを気にせず済みます」とあること。
よって「&lt;strong&gt;自分たちの&lt;/strong&gt;データ」とは「自分たちが&lt;strong&gt;所有する&lt;/strong&gt;データ」の意味であって、「自分たちが&lt;strong&gt;生成した&lt;/strong&gt;データ」ではないはず。
従って、実際にはデータの中身は会社が提供しているサービスのユーザーのアクセスデータなどが含まれているはず。&lt;/p&gt;
&lt;h3 id=&#34;p186-図614&#34;&gt;p.186 図6.14&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;誤: my-orb/name of job-in-orb&lt;/li&gt;
&lt;li&gt;正: my-orb/name-of-command-in-orb&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;p193-図616&#34;&gt;p.193 図6.16&lt;/h3&gt;
&lt;p&gt;「エンジニアリングプラットフォームドメイン」が指しているのはたぶん「EPステートアカウント」配下なんだろう。
「EPステートアカウント」は「Engineering Platformステートアカウント」と思われる。
「EP非本番アカウント」と「EP本番アカウント」はプラットフォームの社内顧客が使うんだと思う。
「domain-nameアカウント」はどこかのチームが何かの用途に使っているアカウントとの関係を示しているだけで、これらの解説は恐らく本書には出て来ていない。&lt;/p&gt;
&lt;h3 id=&#34;p214&#34;&gt;p.214&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;このドメインは、同じくクラウドアカウントレベルの設定を扱う点で前のドメインと似ている&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;これは下記の意味:&lt;/p&gt;
&lt;p&gt;「この概念は、同じくクラウドアカウントレベルの設定を扱う点で、前章（6.4）で説明したクラウド管理IDと似ている」&lt;/p&gt;
&lt;h3 id=&#34;p275&#34;&gt;p.275&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;エンジニアリングプラットフォームプロダクトのリーダー層に直接属さないチームも含めて作業を分担せざるを得ない圧力もかかる&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;これは恐らく下記の意味:&lt;/p&gt;
&lt;p&gt;「直接属さないチームも含めて作業を分担せざるを得ない圧力が、エンジニアリングプラットフォームプロダクトチームのリーダー層にかかる」&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;両者の違いをもう一度見てみましょう&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;「もう一度」とあるが初出と思われる。&lt;/p&gt;
&lt;h3 id=&#34;p276&#34;&gt;p.276&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;エクステンション&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;私は「サービス」「エクステンション」という分類にあまり馴染みがなかったが、本書が示す分類基準でいえば、例えばCrossplaneは恐らく「エクステンション」に分類されるのだろう。&lt;/p&gt;
&lt;h3 id=&#34;p340-図911&#34;&gt;p.340 図9.11&lt;/h3&gt;
&lt;p&gt;図中に見慣れない黒い点があるが&amp;hellip;ストリームイベントを示している？&lt;/p&gt;
&lt;h3 id=&#34;p344-図915&#34;&gt;p.344 図9.15&lt;/h3&gt;
&lt;p&gt;2本の垂直線の太さが同じだが、恐らく左はy軸、右はリリースイベントがあったx軸上の位置を示すものと思われる。&lt;/p&gt;
&lt;h2 id=&#34;所感&#34;&gt;所感&lt;/h2&gt;
&lt;p&gt;本書を読むと、自チームでも適用 or 参考にしたくなるものが何かしら見つかるのではないかと思う。&lt;/p&gt;









&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://www.oreilly.co.jp/books/9784814401413/&#34;&gt;Camille Fournier, Ian Nowland (2025) &amp;ldquo;プラットフォームエンジニアリング―成功するプラットフォームとチームを作るガイドライン&amp;rdquo;　オライリー・ジャパン&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://www.oreilly.co.jp/books/9784814400126/&#34;&gt;Charity Majors, Liz Fong-Jones, George Miranda (2023)『オブザーバビリティ・エンジニアリング』 オライリー・ジャパン&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>プラットフォームエンジニアリング関連のカンファレンス</title>
      <link>https://rindrics.com/articles/platform-engineering-conferences/</link>
      <pubDate>Sat, 22 Aug 2026 00:00:00 +0900</pubDate>
      
      <guid>https://rindrics.com/articles/platform-engineering-conferences/</guid>
      <description>&lt;p&gt;今後開催されるプラットフォームエンジニアリング関連カンファレンスのスケジュールと過去実績の統計。&lt;/p&gt;
&lt;p&gt;内側が国内、外側が国外で開催されるカンファレンス。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;密度曲線: 開催日およびCfPの過去実績（前後7日の移動平均）&lt;/li&gt;
&lt;li&gt;点: 今後の開催日およびCfP締切。黄枠の青点はCfP未クローズの開催日&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;conferences-seasonal&#34; id=&#34;conferences-seasonal-0&#34; data-chart-data=&#34;conferences-seasonal-0-data&#34;&gt;
  &lt;div class=&#34;conferences-seasonal__chart&#34; role=&#34;group&#34; aria-label=&#34;カンファレンス開催日と CFP 受付期間の年間密度&#34;&gt;&lt;/div&gt;
  &lt;div class=&#34;conferences-seasonal__tooltip&#34; hidden&gt;&lt;/div&gt;
  &lt;div class=&#34;conferences-seasonal__legend&#34; aria-hidden=&#34;true&#34;&gt;
    &lt;span&gt;&lt;i class=&#34;conferences-seasonal__swatch conferences-seasonal__swatch--conference&#34;&gt;&lt;/i&gt;開催日&lt;/span&gt;
    &lt;span&gt;&lt;i class=&#34;conferences-seasonal__swatch conferences-seasonal__swatch--cfp&#34;&gt;&lt;/i&gt;CFP締切&lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;script type=&#34;application/json&#34; id=&#34;conferences-seasonal-0-data&#34;&gt;[{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2024-03-02&#34;,&#34;to&#34;:&#34;2024-03-02&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;jaws-days-2024&#34;,&#34;name&#34;:&#34;JAWS DAYS 2024&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;AWS&#34;,&#34;Cloud&#34;,&#34;Infrastructure&#34;],&#34;url&#34;:&#34;https://jawsdays2024.jaws-ug.jp/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2023-10-31&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2024-03-18&#34;,&#34;to&#34;:&#34;2024-03-20&#34;},&#34;country&#34;:&#34;US&#34;,&#34;id&#34;:&#34;srecon-americas-2024&#34;,&#34;name&#34;:&#34;SREcon Americas 2024&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;SRE&#34;,&#34;Reliability&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://www.usenix.org/conference/srecon24americas&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2024-03-19&#34;,&#34;to&#34;:&#34;2024-03-22&#34;},&#34;country&#34;:&#34;FR&#34;,&#34;id&#34;:&#34;kubecon-europe-2024&#34;,&#34;name&#34;:&#34;KubeCon + CloudNativeCon Europe Paris 2024&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Kubernetes&#34;,&#34;Cloud Native&#34;,&#34;Platform Engineering&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://events.linuxfoundation.org/archive/2024/kubecon-cloudnativecon-europe/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2024-02-20&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2024-04-09&#34;,&#34;to&#34;:&#34;2024-04-10&#34;},&#34;country&#34;:&#34;NL&#34;,&#34;id&#34;:&#34;grafanacon-2024-amsterdam&#34;,&#34;name&#34;:&#34;GrafanaCON Amsterdam 2024&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Grafana&#34;,&#34;Observability&#34;,&#34;Prometheus&#34;],&#34;url&#34;:&#34;https://grafana.com/events/grafanacon/2024/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2024-03-01&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2024-04-16&#34;,&#34;to&#34;:&#34;2024-04-17&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;devopsdays-tokyo-2024&#34;,&#34;name&#34;:&#34;DevOpsDays Tokyo 2024&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;DevOps&#34;,&#34;Platform Engineering&#34;],&#34;url&#34;:&#34;https://www.devopsdaystokyo.org/2024&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2024-06-08&#34;,&#34;to&#34;:&#34;2024-06-08&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;go-conference-japan-2024&#34;,&#34;name&#34;:&#34;Go Conference 2024&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Go&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://gocon.jp/2024/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2024-02-26&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2024-06-10&#34;,&#34;to&#34;:&#34;2024-06-14&#34;},&#34;country&#34;:null,&#34;id&#34;:&#34;platformcon-2024&#34;,&#34;name&#34;:&#34;PlatformCon 2024&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Platform Engineering&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://2024.platformcon.com/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2024-06-15&#34;,&#34;to&#34;:&#34;2024-06-15&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;cloudnative-days-2024-summer&#34;,&#34;name&#34;:&#34;CloudNative Days Summer 2024&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Cloud Native&#34;,&#34;Platform Engineering&#34;],&#34;url&#34;:&#34;https://cloudnativedays.jp/cnds2024&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2024-06-16&#34;,&#34;to&#34;:&#34;2024-06-16&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;jjug-ccc-2024-spring&#34;,&#34;name&#34;:&#34;JJUG CCC 2024 Spring&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Java&#34;,&#34;JVM&#34;,&#34;Spring&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://ccc2024spring.java-users.jp/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2024-06-20&#34;,&#34;to&#34;:&#34;2024-06-21&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;aws-summit-japan-2024&#34;,&#34;name&#34;:&#34;AWS Summit Japan 2024&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;AWS&#34;,&#34;Cloud&#34;,&#34;Infrastructure&#34;],&#34;url&#34;:&#34;https://aws.amazon.com/jp/blogs/news/aws-jam-report-aws-summit-japan-2024/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2024-06-22&#34;,&#34;to&#34;:&#34;2024-06-22&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;kotlin-fest-2024&#34;,&#34;name&#34;:&#34;Kotlin Fest 2024&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Kotlin&#34;,&#34;JVM&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://2024.kotlinfest.dev/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2024-06-25&#34;,&#34;to&#34;:&#34;2024-06-26&#34;},&#34;country&#34;:&#34;US&#34;,&#34;id&#34;:&#34;datadog-dash-2024-new-york&#34;,&#34;name&#34;:&#34;DASH New York 2024&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Datadog&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://dash.datadoghq.com/2024/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2024-06-25&#34;,&#34;to&#34;:&#34;2024-06-25&#34;},&#34;country&#34;:&#34;US&#34;,&#34;id&#34;:&#34;opentelemetry-community-day-2024-seattle&#34;,&#34;name&#34;:&#34;OpenTelemetry Community Day Seattle 2024&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;OpenTelemetry&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://events.linuxfoundation.org/archive/2024/open-telemetry-community-day/&#34;},{&#34;cfp&#34;:{&#34;from&#34;:&#34;2024-03-22&#34;,&#34;to&#34;:&#34;2024-04-26&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2024-07-09&#34;,&#34;to&#34;:&#34;2024-07-09&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;platform-engineering-kaigi-2024&#34;,&#34;name&#34;:&#34;Platform Engineering Kaigi 2024&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Platform Engineering&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://www.cnia.io/pek2024&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2024-07-11&#34;,&#34;to&#34;:&#34;2024-07-12&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;db-tech-showcase-2024-tokyo&#34;,&#34;name&#34;:&#34;db tech showcase 東京 2024&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Database&#34;,&#34;Data&#34;],&#34;url&#34;:&#34;https://www.db-tech-showcase.com/2024/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2024-08-03&#34;,&#34;to&#34;:&#34;2024-08-04&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;sre-next-2024&#34;,&#34;name&#34;:&#34;SRE NEXT 2024&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;SRE&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://sre-next.dev/2024/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2024-10-27&#34;,&#34;to&#34;:&#34;2024-10-27&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;jjug-ccc-2024-fall&#34;,&#34;name&#34;:&#34;JJUG CCC 2024 Fall&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Java&#34;,&#34;JVM&#34;,&#34;Spring&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://ccc2024fall.java-users.jp/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2024-06-13&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2024-10-29&#34;,&#34;to&#34;:&#34;2024-10-31&#34;},&#34;country&#34;:&#34;IE&#34;,&#34;id&#34;:&#34;srecon-emea-2024&#34;,&#34;name&#34;:&#34;SREcon EMEA 2024&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;SRE&#34;,&#34;Reliability&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://www.usenix.org/conference/srecon24emea&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2024-06-09&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2024-11-12&#34;,&#34;to&#34;:&#34;2024-11-15&#34;},&#34;country&#34;:&#34;US&#34;,&#34;id&#34;:&#34;kubecon-north-america-2024&#34;,&#34;name&#34;:&#34;KubeCon + CloudNativeCon North America 2024&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Kubernetes&#34;,&#34;Cloud Native&#34;,&#34;Platform Engineering&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://events.linuxfoundation.org/archive/2024/kubecon-cloudnativecon-north-america/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2024-11-28&#34;,&#34;to&#34;:&#34;2024-11-29&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;cloudnative-days-2024-winter&#34;,&#34;name&#34;:&#34;CloudNative Days Winter 2024&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Cloud Native&#34;,&#34;Platform Engineering&#34;],&#34;url&#34;:&#34;https://cloudnativedays.jp/cndw2024&#34;},{&#34;cfp&#34;:{&#34;from&#34;:&#34;2024-09-04&#34;,&#34;to&#34;:&#34;2024-09-30&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2025-01-26&#34;,&#34;to&#34;:&#34;2025-01-26&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;sre-kaigi-2025&#34;,&#34;name&#34;:&#34;SRE Kaigi 2025&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;SRE&#34;],&#34;url&#34;:&#34;https://2025.srekaigi.net/&#34;},{&#34;cfp&#34;:{&#34;from&#34;:&#34;2024-12-16&#34;,&#34;to&#34;:&#34;2025-01-09&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2025-03-01&#34;,&#34;to&#34;:&#34;2025-03-01&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;jaws-days-2025&#34;,&#34;name&#34;:&#34;JAWS DAYS 2025&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;AWS&#34;,&#34;Cloud&#34;,&#34;Infrastructure&#34;],&#34;url&#34;:&#34;https://jawsdays2025.jaws-ug.jp/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2025-03-18&#34;,&#34;to&#34;:&#34;2025-03-20&#34;},&#34;country&#34;:&#34;US&#34;,&#34;id&#34;:&#34;javaone-2025&#34;,&#34;name&#34;:&#34;JavaOne 2025&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Java&#34;,&#34;JVM&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://www.oracle.com/javaone/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2024-11-04&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2025-03-25&#34;,&#34;to&#34;:&#34;2025-03-27&#34;},&#34;country&#34;:&#34;US&#34;,&#34;id&#34;:&#34;srecon-americas-2025&#34;,&#34;name&#34;:&#34;SREcon Americas 2025&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;SRE&#34;,&#34;Reliability&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://www.usenix.org/conference/srecon25americas&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2024-11-24&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2025-04-01&#34;,&#34;to&#34;:&#34;2025-04-04&#34;},&#34;country&#34;:&#34;GB&#34;,&#34;id&#34;:&#34;kubecon-europe-2025&#34;,&#34;name&#34;:&#34;KubeCon + CloudNativeCon Europe London 2025&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Kubernetes&#34;,&#34;Cloud Native&#34;,&#34;Platform Engineering&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://events.linuxfoundation.org/archive/2025/kubecon-cloudnativecon-europe/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2025-03-01&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2025-04-15&#34;,&#34;to&#34;:&#34;2025-04-17&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;devopsdays-tokyo-2025&#34;,&#34;name&#34;:&#34;DevOpsDays Tokyo 2025&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;DevOps&#34;,&#34;Platform Engineering&#34;],&#34;url&#34;:&#34;https://www.devopsdaystokyo.org/2025&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2025-01-30&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2025-05-06&#34;,&#34;to&#34;:&#34;2025-05-08&#34;},&#34;country&#34;:&#34;US&#34;,&#34;id&#34;:&#34;grafanacon-2025-seattle&#34;,&#34;name&#34;:&#34;GrafanaCON Seattle 2025&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Grafana&#34;,&#34;Observability&#34;,&#34;Prometheus&#34;],&#34;url&#34;:&#34;https://grafana.com/blog/save-the-date-grafanacon-2025-is-coming-to-seattle-in-may/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2025-05-23&#34;,&#34;to&#34;:&#34;2025-05-23&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;cloudnative-days-2025-summer&#34;,&#34;name&#34;:&#34;CloudNative Days Summer 2025&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Cloud Native&#34;,&#34;Platform Engineering&#34;],&#34;url&#34;:&#34;https://cloudnativedays.jp/cnds2025&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2025-06-07&#34;,&#34;to&#34;:&#34;2025-06-07&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;jjug-ccc-2025-spring&#34;,&#34;name&#34;:&#34;JJUG CCC 2025 Spring&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Java&#34;,&#34;JVM&#34;,&#34;Spring&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://ccc2025spring.java-users.jp/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2025-06-10&#34;,&#34;to&#34;:&#34;2025-06-11&#34;},&#34;country&#34;:&#34;US&#34;,&#34;id&#34;:&#34;datadog-dash-2025-new-york&#34;,&#34;name&#34;:&#34;DASH New York 2025&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Datadog&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://dash.datadoghq.com/2025/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2025-02-02&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2025-06-16&#34;,&#34;to&#34;:&#34;2025-06-17&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;kubecon-japan-2025&#34;,&#34;name&#34;:&#34;KubeCon + CloudNativeCon Japan 2025&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Cloud Native&#34;,&#34;Platform Engineering&#34;],&#34;url&#34;:&#34;https://events.linuxfoundation.org/archive/2025/kubecon-cloudnativecon-japan/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2025-02-23&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2025-06-23&#34;,&#34;to&#34;:&#34;2025-06-27&#34;},&#34;country&#34;:null,&#34;id&#34;:&#34;platformcon-2025&#34;,&#34;name&#34;:&#34;PlatformCon 2025&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Platform Engineering&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://2025.platformcon.com/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2025-06-25&#34;,&#34;to&#34;:&#34;2025-06-26&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;aws-summit-japan-2025&#34;,&#34;name&#34;:&#34;AWS Summit Japan 2025&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;AWS&#34;,&#34;Cloud&#34;,&#34;Infrastructure&#34;],&#34;url&#34;:&#34;https://aws.amazon.com/jp/blogs/news/aws-summit-japan-2025-resilience/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2025-03-28&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2025-06-26&#34;,&#34;to&#34;:&#34;2025-06-26&#34;},&#34;country&#34;:&#34;US&#34;,&#34;id&#34;:&#34;opentelemetry-community-day-2025-denver&#34;,&#34;name&#34;:&#34;OpenTelemetry Community Day Denver 2025&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;OpenTelemetry&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://events.linuxfoundation.org/open-observability-summit-otel-community-day/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2025-07-10&#34;,&#34;to&#34;:&#34;2025-07-11&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;db-tech-showcase-2025-tokyo&#34;,&#34;name&#34;:&#34;db tech showcase 東京 2025&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Database&#34;,&#34;Data&#34;],&#34;url&#34;:&#34;https://db-tech-showcase.com/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2025-07-11&#34;,&#34;to&#34;:&#34;2025-07-12&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;sre-next-2025&#34;,&#34;name&#34;:&#34;SRE NEXT 2025&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;SRE&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://sre-next.dev/2025/&#34;},{&#34;cfp&#34;:{&#34;from&#34;:&#34;2025-01-20&#34;,&#34;to&#34;:&#34;2025-03-03&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2025-08-25&#34;,&#34;to&#34;:&#34;2025-08-28&#34;},&#34;country&#34;:&#34;US&#34;,&#34;id&#34;:&#34;gophercon-2025&#34;,&#34;name&#34;:&#34;GopherCon 2025&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Go&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://vendelux.com/app/event/gophercon-2025/03a33004-1b60-44d5-8092-1617faa3f9dd&#34;},{&#34;cfp&#34;:{&#34;from&#34;:&#34;2025-06-04&#34;,&#34;to&#34;:&#34;2025-07-02&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2025-09-18&#34;,&#34;to&#34;:&#34;2025-09-18&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;platform-engineering-kaigi-2025&#34;,&#34;name&#34;:&#34;Platform Engineering Kaigi 2025&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Platform Engineering&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://www.cnia.io/pek2025&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2025-09-27&#34;,&#34;to&#34;:&#34;2025-09-28&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;go-conference-japan-2025&#34;,&#34;name&#34;:&#34;Go Conference 2025&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Go&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://gocon.jp/2025/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2025-05-21&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2025-10-07&#34;,&#34;to&#34;:&#34;2025-10-09&#34;},&#34;country&#34;:&#34;IE&#34;,&#34;id&#34;:&#34;srecon-emea-2025&#34;,&#34;name&#34;:&#34;SREcon EMEA 2025&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;SRE&#34;,&#34;Reliability&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://www.usenix.org/conference/srecon25emea&#34;},{&#34;cfp&#34;:{&#34;from&#34;:&#34;2025-05-29&#34;,&#34;to&#34;:&#34;2025-07-07&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2025-11-01&#34;,&#34;to&#34;:&#34;2025-11-01&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;kotlin-fest-2025&#34;,&#34;name&#34;:&#34;Kotlin Fest 2025&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Kotlin&#34;,&#34;JVM&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://2025.kotlinfest.dev/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2025-05-27&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2025-11-10&#34;,&#34;to&#34;:&#34;2025-11-13&#34;},&#34;country&#34;:&#34;US&#34;,&#34;id&#34;:&#34;kubecon-north-america-2025&#34;,&#34;name&#34;:&#34;KubeCon + CloudNativeCon North America 2025&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Kubernetes&#34;,&#34;Cloud Native&#34;,&#34;Platform Engineering&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://events.linuxfoundation.org/archive/2025/kubecon-cloudnativecon-north-america/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2025-11-15&#34;,&#34;to&#34;:&#34;2025-11-15&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;jjug-ccc-2025-fall&#34;,&#34;name&#34;:&#34;JJUG CCC 2025 Fall&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Java&#34;,&#34;JVM&#34;,&#34;Spring&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://ccc2025fall.java-users.jp/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2025-11-18&#34;,&#34;to&#34;:&#34;2025-11-19&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;cloudnative-days-2025-winter&#34;,&#34;name&#34;:&#34;CloudNative Days Winter 2025&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Cloud Native&#34;,&#34;Platform Engineering&#34;],&#34;url&#34;:&#34;https://cloudnativedays.jp/cndw2025&#34;},{&#34;cfp&#34;:{&#34;from&#34;:&#34;2025-09-04&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2026-01-31&#34;,&#34;to&#34;:&#34;2026-01-31&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;sre-kaigi-2026&#34;,&#34;name&#34;:&#34;SRE Kaigi 2026&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;SRE&#34;],&#34;url&#34;:&#34;https://2026.srekaigi.net/&#34;},{&#34;cfp&#34;:{&#34;from&#34;:&#34;2025-11-20&#34;,&#34;to&#34;:&#34;2025-12-18&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2026-03-07&#34;,&#34;to&#34;:&#34;2026-03-07&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;jaws-days-2026&#34;,&#34;name&#34;:&#34;JAWS DAYS 2026&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;AWS&#34;,&#34;Cloud&#34;,&#34;Infrastructure&#34;],&#34;url&#34;:&#34;https://jawsdays2026.jaws-ug.jp/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2026-03-17&#34;,&#34;to&#34;:&#34;2026-03-19&#34;},&#34;country&#34;:&#34;US&#34;,&#34;id&#34;:&#34;javaone-2026&#34;,&#34;name&#34;:&#34;JavaOne 2026&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Java&#34;,&#34;JVM&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://www.oracle.com/javaone/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2025-10-12&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2026-03-23&#34;,&#34;to&#34;:&#34;2026-03-26&#34;},&#34;country&#34;:&#34;NL&#34;,&#34;id&#34;:&#34;kubecon-europe-2026&#34;,&#34;name&#34;:&#34;KubeCon + CloudNativeCon Europe Amsterdam 2026&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Kubernetes&#34;,&#34;Cloud Native&#34;,&#34;Platform Engineering&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://events.linuxfoundation.org/archive/2026/kubecon-cloudnativecon-europe/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2025-11-04&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2026-03-24&#34;,&#34;to&#34;:&#34;2026-03-26&#34;},&#34;country&#34;:&#34;US&#34;,&#34;id&#34;:&#34;srecon-americas-2026&#34;,&#34;name&#34;:&#34;SREcon Americas 2026&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;SRE&#34;,&#34;Reliability&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://www.usenix.org/conference/srecon26americas&#34;},{&#34;cfp&#34;:{&#34;from&#34;:&#34;2025-11-01&#34;,&#34;to&#34;:&#34;2026-03-01&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2026-04-14&#34;,&#34;to&#34;:&#34;2026-04-16&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;devopsdays-tokyo-2026&#34;,&#34;name&#34;:&#34;DevOpsDays Tokyo 2026&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;DevOps&#34;,&#34;Platform Engineering&#34;],&#34;url&#34;:&#34;https://devopsdays.org/events/2026-tokyo/welcome/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2026-01-19&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2026-04-20&#34;,&#34;to&#34;:&#34;2026-04-22&#34;},&#34;country&#34;:&#34;ES&#34;,&#34;id&#34;:&#34;grafanacon-2026-barcelona&#34;,&#34;name&#34;:&#34;GrafanaCON Barcelona 2026&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Grafana&#34;,&#34;Observability&#34;,&#34;Prometheus&#34;],&#34;url&#34;:&#34;https://grafana.com/events/grafanacon/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2026-05-14&#34;,&#34;to&#34;:&#34;2026-05-15&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;cloudnative-days-2026-nagoya&#34;,&#34;name&#34;:&#34;クラウドネイティブ会議 2026 名古屋&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Cloud Native&#34;,&#34;Platform Engineering&#34;],&#34;url&#34;:&#34;https://kaigi.cloudnativedays.jp/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2026-05-30&#34;,&#34;to&#34;:&#34;2026-05-30&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;jjug-ccc-2026-spring&#34;,&#34;name&#34;:&#34;JJUG CCC 2026 Spring&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Java&#34;,&#34;JVM&#34;,&#34;Spring&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://ccc2026spring.java-users.jp/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2026-06-09&#34;,&#34;to&#34;:&#34;2026-06-10&#34;},&#34;country&#34;:&#34;US&#34;,&#34;id&#34;:&#34;datadog-dash-2026-new-york&#34;,&#34;name&#34;:&#34;DASH New York 2026&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Datadog&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://dash.datadoghq.com/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2026-02-22&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2026-06-22&#34;,&#34;to&#34;:&#34;2026-06-26&#34;},&#34;country&#34;:null,&#34;id&#34;:&#34;platformcon-2026&#34;,&#34;name&#34;:&#34;PlatformCon 2026&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Platform Engineering&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://2026.platformcon.com/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2026-06-25&#34;,&#34;to&#34;:&#34;2026-06-26&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;aws-summit-japan-2026&#34;,&#34;name&#34;:&#34;AWS Summit Japan 2026&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;AWS&#34;,&#34;Cloud&#34;,&#34;Infrastructure&#34;],&#34;url&#34;:&#34;https://aws.amazon.com/jp/events/summits/japan/&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2026-07-10&#34;,&#34;to&#34;:&#34;2026-07-11&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;sre-next-2026&#34;,&#34;name&#34;:&#34;SRE NEXT 2026&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;SRE&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://sre-next.dev/2026/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2026-03-29&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2026-07-28&#34;,&#34;to&#34;:&#34;2026-07-30&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;kubecon-japan-2026&#34;,&#34;name&#34;:&#34;KubeCon + CloudNativeCon Japan 2026&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Cloud Native&#34;,&#34;Platform Engineering&#34;],&#34;url&#34;:&#34;https://events.linuxfoundation.org/kubecon-cloudnativecon-japan/&#34;},{&#34;cfp&#34;:{&#34;from&#34;:&#34;2026-01-19&#34;,&#34;to&#34;:&#34;2026-03-04&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2026-08-03&#34;,&#34;to&#34;:&#34;2026-08-06&#34;},&#34;country&#34;:&#34;US&#34;,&#34;id&#34;:&#34;gophercon-2026&#34;,&#34;name&#34;:&#34;GopherCon 2026&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Go&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://www.gophercon.com/&#34;},{&#34;cfp&#34;:{&#34;from&#34;:&#34;2026-05-15&#34;,&#34;to&#34;:&#34;2026-06-15&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2026-09-11&#34;,&#34;to&#34;:&#34;2026-09-11&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;go-conference-japan-2026&#34;,&#34;name&#34;:&#34;Go Conference 2026&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Go&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://gocon.jp/&#34;},{&#34;cfp&#34;:{&#34;from&#34;:&#34;2026-06-23&#34;,&#34;to&#34;:&#34;2026-07-20&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2026-09-26&#34;,&#34;to&#34;:&#34;2026-09-26&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;platform-engineering-kaigi-2026&#34;,&#34;name&#34;:&#34;Platform Engineering Kaigi 2026&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Platform Engineering&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://www.cnia.io/pek2026/&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2026-05-27&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2026-10-13&#34;,&#34;to&#34;:&#34;2026-10-15&#34;},&#34;country&#34;:&#34;IE&#34;,&#34;id&#34;:&#34;srecon-emea-2026&#34;,&#34;name&#34;:&#34;SREcon EMEA 2026&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;SRE&#34;,&#34;Reliability&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://www.usenix.org/conference/srecon26emea&#34;},{&#34;cfp&#34;:{&#34;to&#34;:&#34;2026-05-31&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2026-11-09&#34;,&#34;to&#34;:&#34;2026-11-12&#34;},&#34;country&#34;:&#34;US&#34;,&#34;id&#34;:&#34;kubecon-north-america-2026&#34;,&#34;name&#34;:&#34;KubeCon + CloudNativeCon North America 2026&#34;,&#34;region&#34;:&#34;international&#34;,&#34;tags&#34;:[&#34;Kubernetes&#34;,&#34;Cloud Native&#34;,&#34;Platform Engineering&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/&#34;},{&#34;cfp&#34;:{&#34;from&#34;:&#34;2026-06-08&#34;,&#34;to&#34;:&#34;2026-07-12&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2026-11-14&#34;,&#34;to&#34;:&#34;2026-11-14&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;kotlin-fest-2026&#34;,&#34;name&#34;:&#34;Kotlin Fest 2026&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Kotlin&#34;,&#34;JVM&#34;,&#34;Developer Experience&#34;],&#34;url&#34;:&#34;https://2026.kotlinfest.dev/&#34;},{&#34;cfp&#34;:{&#34;from&#34;:&#34;2026-08-31&#34;,&#34;to&#34;:&#34;2026-09-20&#34;},&#34;conference&#34;:{&#34;from&#34;:&#34;2026-11-19&#34;,&#34;to&#34;:&#34;2026-11-20&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;cloudnative-days-2026-winter&#34;,&#34;name&#34;:&#34;CloudNative Days Winter 2026&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;Cloud Native&#34;,&#34;Platform Engineering&#34;],&#34;url&#34;:&#34;https://event.cloudnativedays.jp/cndw2026&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2027-02-20&#34;,&#34;to&#34;:&#34;2027-02-20&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;sre-kaigi-2027&#34;,&#34;name&#34;:&#34;SRE Kaigi 2027&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;SRE&#34;],&#34;url&#34;:&#34;https://blog.srekaigi.net/entry/2026/07/22/114937&#34;},{&#34;cfp&#34;:null,&#34;conference&#34;:{&#34;from&#34;:&#34;2027-07-09&#34;,&#34;to&#34;:&#34;2027-07-10&#34;},&#34;country&#34;:&#34;JP&#34;,&#34;id&#34;:&#34;sre-next-2027&#34;,&#34;name&#34;:&#34;SRE NEXT 2027&#34;,&#34;region&#34;:&#34;domestic&#34;,&#34;tags&#34;:[&#34;SRE&#34;,&#34;Observability&#34;],&#34;url&#34;:&#34;https://sre-next.dev/2027/&#34;}]&lt;/script&gt;





&lt;style&gt;
  .slider-switch {
    position: relative;
    width: 60px;
    height: 28px;
    background-color: #ddd;
    border-radius: 28px;
    cursor: pointer;
    transition: background-color 0.3s;
    display: inline-block;
  }
  .slider-switch.international {
    background-color: #0066cc;
  }
  .slider-switch::after {
    content: &#39;&#39;;
    position: absolute;
    height: 24px;
    width: 24px;
    left: 2px;
    top: 2px;
    background-color: white;
    border-radius: 50%;
    transition: transform 0.3s;
  }
  .slider-switch.international::after {
    transform: translateX(32px);
  }
  .region-label {
    font-size: 0.9rem;
    font-weight: 500;
    min-width: 40px;
    text-align: center;
  }
  .region-label.active {
    color: #0066cc;
    font-weight: bold;
  }
&lt;/style&gt;

&lt;div id=&#34;conferences-filter-container&#34; style=&#34;margin-bottom: 2rem;&#34;&gt;
  &lt;div style=&#34;display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.75rem;&#34;&gt;
    &lt;span class=&#34;region-label active&#34; id=&#34;region-label-domestic&#34;&gt;国内&lt;/span&gt;
    &lt;div class=&#34;slider-switch&#34; id=&#34;region-slider-display&#34;&gt;&lt;/div&gt;
    &lt;span class=&#34;region-label&#34; id=&#34;region-label-international&#34;&gt;海外&lt;/span&gt;
  &lt;/div&gt;

  &lt;div style=&#34;display: flex; gap: 1.25rem; flex-wrap: wrap; align-items: center; margin-bottom: 1rem;&#34;&gt;
    &lt;div style=&#34;display: flex; align-items: center; gap: 0.5rem;&#34;&gt;
      &lt;select id=&#34;tag-filter&#34; style=&#34;padding: 0.5rem; border: 1px solid #ccc; border-radius: 4px;&#34;&gt;
        &lt;option value=&#34;&#34;&gt;すべてのタグ&lt;/option&gt;
      &lt;/select&gt;
    &lt;/div&gt;

    &lt;div style=&#34;display: flex; align-items: center; gap: 0.5rem;&#34;&gt;
      &lt;label for=&#34;cfp-month-filter&#34; style=&#34;font-size: 0.9rem; white-space: nowrap;&#34;&gt;CfP 締切&lt;/label&gt;
      &lt;select id=&#34;cfp-month-filter&#34; style=&#34;padding: 0.5rem; border: 1px solid #ccc; border-radius: 4px;&#34;&gt;
        &lt;option value=&#34;&#34;&gt;すべての月&lt;/option&gt;
      &lt;/select&gt;
    &lt;/div&gt;

    &lt;div style=&#34;display: flex; align-items: center; gap: 0.5rem;&#34;&gt;
      &lt;label for=&#34;conference-month-filter&#34; style=&#34;font-size: 0.9rem; white-space: nowrap;&#34;&gt;開催日&lt;/label&gt;
      &lt;select id=&#34;conference-month-filter&#34; style=&#34;padding: 0.5rem; border: 1px solid #ccc; border-radius: 4px;&#34;&gt;
        &lt;option value=&#34;&#34;&gt;すべての月&lt;/option&gt;
      &lt;/select&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&#34;margin-bottom: 1rem; font-size: 0.9rem; color: #666;&#34;&gt;
    該当: &lt;span id=&#34;result-count&#34;&gt;0&lt;/span&gt; 件
  &lt;/div&gt;
&lt;/div&gt;

&lt;div style=&#34;max-height: 500px; overflow-y: auto; border: 1px solid #ddd; border-radius: 4px;&#34;&gt;
  &lt;table style=&#34;width: 100%; border-collapse: collapse; margin: 0;&#34;&gt;
    &lt;thead&gt;
      &lt;tr style=&#34;background: #f5f5f5; border-bottom: 2px solid #ddd; position: sticky; top: 0;&#34;&gt;
        &lt;th style=&#34;padding: 0.25rem; text-align: center; border: 1px solid #ddd;&#34;&gt;イベント&lt;/th&gt;
        &lt;th style=&#34;padding: 0.25rem; text-align: center; border: 1px solid #ddd;&#34;&gt;CfP締切&lt;/th&gt;
        &lt;th style=&#34;padding: 0.25rem; text-align: center; border: 1px solid #ddd;&#34;&gt;開催時期&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody id=&#34;conferences-tbody&#34;&gt;
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      &lt;tr class=&#34;conf-row&#34; data-region=&#34;international&#34; data-tags=&#34;Go,Developer Experience&#34; data-conf-from=&#34;2026-08-03&#34; data-conf-to=&#34;2026-08-06&#34; data-cfp-from=&#34;2026-01-19&#34; data-cfp-to=&#34;2026-03-04&#34; style=&#34;border-bottom: 1px solid #ddd;&#34;&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd;&#34;&gt;
          &lt;a href=&#34;https://www.gophercon.com/&#34; target=&#34;_blank&#34;&gt;GopherCon 2026&lt;/a&gt;
          &lt;div style=&#34;display: flex; flex-wrap: wrap; gap: 0.25rem; margin-top: 0.25rem; font-size: 0.65rem;&#34;&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Go&lt;/span&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Developer Experience&lt;/span&gt;&lt;/div&gt;
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34;&gt;
          &lt;span class=&#34;cfp-date-display&#34; data-date=&#34;2026-03-04&#34;&gt;&lt;/span&gt;
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34; class=&#34;conf-date-cell&#34;&gt;
          &lt;span class=&#34;conf-date-display&#34;&gt;&lt;/span&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      
      
      
      
      &lt;tr class=&#34;conf-row&#34; data-region=&#34;domestic&#34; data-tags=&#34;Go,Developer Experience&#34; data-conf-from=&#34;2026-09-11&#34; data-conf-to=&#34;2026-09-11&#34; data-cfp-from=&#34;2026-05-15&#34; data-cfp-to=&#34;2026-06-15&#34; style=&#34;border-bottom: 1px solid #ddd;&#34;&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd;&#34;&gt;
          &lt;a href=&#34;https://gocon.jp/&#34; target=&#34;_blank&#34;&gt;Go Conference 2026&lt;/a&gt;
          &lt;div style=&#34;display: flex; flex-wrap: wrap; gap: 0.25rem; margin-top: 0.25rem; font-size: 0.65rem;&#34;&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Go&lt;/span&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Developer Experience&lt;/span&gt;&lt;/div&gt;
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34;&gt;
          &lt;span class=&#34;cfp-date-display&#34; data-date=&#34;2026-06-15&#34;&gt;&lt;/span&gt;
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34; class=&#34;conf-date-cell&#34;&gt;
          &lt;span class=&#34;conf-date-display&#34;&gt;&lt;/span&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      
      
      
      
      &lt;tr class=&#34;conf-row&#34; data-region=&#34;domestic&#34; data-tags=&#34;Platform Engineering,Developer Experience&#34; data-conf-from=&#34;2026-09-26&#34; data-conf-to=&#34;2026-09-26&#34; data-cfp-from=&#34;2026-06-23&#34; data-cfp-to=&#34;2026-07-20&#34; style=&#34;border-bottom: 1px solid #ddd;&#34;&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd;&#34;&gt;
          &lt;a href=&#34;https://www.cnia.io/pek2026/&#34; target=&#34;_blank&#34;&gt;Platform Engineering Kaigi 2026&lt;/a&gt;
          &lt;div style=&#34;display: flex; flex-wrap: wrap; gap: 0.25rem; margin-top: 0.25rem; font-size: 0.65rem;&#34;&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Platform Engineering&lt;/span&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Developer Experience&lt;/span&gt;&lt;/div&gt;
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34;&gt;
          &lt;span class=&#34;cfp-date-display&#34; data-date=&#34;2026-07-20&#34;&gt;&lt;/span&gt;
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34; class=&#34;conf-date-cell&#34;&gt;
          &lt;span class=&#34;conf-date-display&#34;&gt;&lt;/span&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      
      
      
      
      &lt;tr class=&#34;conf-row&#34; data-region=&#34;international&#34; data-tags=&#34;SRE,Reliability,Observability&#34; data-conf-from=&#34;2026-10-13&#34; data-conf-to=&#34;2026-10-15&#34; data-cfp-from=&#34;&#34; data-cfp-to=&#34;2026-05-27&#34; style=&#34;border-bottom: 1px solid #ddd;&#34;&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd;&#34;&gt;
          &lt;a href=&#34;https://www.usenix.org/conference/srecon26emea&#34; target=&#34;_blank&#34;&gt;SREcon EMEA 2026&lt;/a&gt;
          &lt;div style=&#34;display: flex; flex-wrap: wrap; gap: 0.25rem; margin-top: 0.25rem; font-size: 0.65rem;&#34;&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;SRE&lt;/span&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Reliability&lt;/span&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Observability&lt;/span&gt;&lt;/div&gt;
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34;&gt;
          &lt;span class=&#34;cfp-date-display&#34; data-date=&#34;2026-05-27&#34;&gt;&lt;/span&gt;
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34; class=&#34;conf-date-cell&#34;&gt;
          &lt;span class=&#34;conf-date-display&#34;&gt;&lt;/span&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      
      
      
      
      &lt;tr class=&#34;conf-row&#34; data-region=&#34;international&#34; data-tags=&#34;Kubernetes,Cloud Native,Platform Engineering,Observability&#34; data-conf-from=&#34;2026-11-09&#34; data-conf-to=&#34;2026-11-12&#34; data-cfp-from=&#34;&#34; data-cfp-to=&#34;2026-05-31&#34; style=&#34;border-bottom: 1px solid #ddd;&#34;&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd;&#34;&gt;
          &lt;a href=&#34;https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/&#34; target=&#34;_blank&#34;&gt;KubeCon &amp;#43; CloudNativeCon North America 2026&lt;/a&gt;
          &lt;div style=&#34;display: flex; flex-wrap: wrap; gap: 0.25rem; margin-top: 0.25rem; font-size: 0.65rem;&#34;&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Kubernetes&lt;/span&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Cloud Native&lt;/span&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Platform Engineering&lt;/span&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Observability&lt;/span&gt;&lt;/div&gt;
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34;&gt;
          &lt;span class=&#34;cfp-date-display&#34; data-date=&#34;2026-05-31&#34;&gt;&lt;/span&gt;
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34; class=&#34;conf-date-cell&#34;&gt;
          &lt;span class=&#34;conf-date-display&#34;&gt;&lt;/span&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      
      
      
      
      &lt;tr class=&#34;conf-row&#34; data-region=&#34;domestic&#34; data-tags=&#34;Kotlin,JVM,Developer Experience&#34; data-conf-from=&#34;2026-11-14&#34; data-conf-to=&#34;2026-11-14&#34; data-cfp-from=&#34;2026-06-08&#34; data-cfp-to=&#34;2026-07-12&#34; style=&#34;border-bottom: 1px solid #ddd;&#34;&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd;&#34;&gt;
          &lt;a href=&#34;https://2026.kotlinfest.dev/&#34; target=&#34;_blank&#34;&gt;Kotlin Fest 2026&lt;/a&gt;
          &lt;div style=&#34;display: flex; flex-wrap: wrap; gap: 0.25rem; margin-top: 0.25rem; font-size: 0.65rem;&#34;&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Kotlin&lt;/span&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;JVM&lt;/span&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Developer Experience&lt;/span&gt;&lt;/div&gt;
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34;&gt;
          &lt;span class=&#34;cfp-date-display&#34; data-date=&#34;2026-07-12&#34;&gt;&lt;/span&gt;
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34; class=&#34;conf-date-cell&#34;&gt;
          &lt;span class=&#34;conf-date-display&#34;&gt;&lt;/span&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      
      
      
      
      &lt;tr class=&#34;conf-row&#34; data-region=&#34;domestic&#34; data-tags=&#34;Cloud Native,Platform Engineering&#34; data-conf-from=&#34;2026-11-19&#34; data-conf-to=&#34;2026-11-20&#34; data-cfp-from=&#34;2026-08-31&#34; data-cfp-to=&#34;2026-09-20&#34; style=&#34;border-bottom: 1px solid #ddd;&#34;&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd;&#34;&gt;
          &lt;a href=&#34;https://event.cloudnativedays.jp/cndw2026&#34; target=&#34;_blank&#34;&gt;CloudNative Days Winter 2026&lt;/a&gt;
          &lt;div style=&#34;display: flex; flex-wrap: wrap; gap: 0.25rem; margin-top: 0.25rem; font-size: 0.65rem;&#34;&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Cloud Native&lt;/span&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Platform Engineering&lt;/span&gt;&lt;/div&gt;
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34;&gt;
          &lt;span class=&#34;cfp-date-display&#34; data-date=&#34;2026-09-20&#34;&gt;&lt;/span&gt;
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34; class=&#34;conf-date-cell&#34;&gt;
          &lt;span class=&#34;conf-date-display&#34;&gt;&lt;/span&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      
      
      
      
      &lt;tr class=&#34;conf-row&#34; data-region=&#34;domestic&#34; data-tags=&#34;SRE&#34; data-conf-from=&#34;2027-02-20&#34; data-conf-to=&#34;2027-02-20&#34; data-cfp-from=&#34;&#34; data-cfp-to=&#34;&#34; style=&#34;border-bottom: 1px solid #ddd;&#34;&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd;&#34;&gt;
          &lt;a href=&#34;https://blog.srekaigi.net/entry/2026/07/22/114937&#34; target=&#34;_blank&#34;&gt;SRE Kaigi 2027&lt;/a&gt;
          &lt;div style=&#34;display: flex; flex-wrap: wrap; gap: 0.25rem; margin-top: 0.25rem; font-size: 0.65rem;&#34;&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;SRE&lt;/span&gt;&lt;/div&gt;
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34;&gt;
          未定
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34; class=&#34;conf-date-cell&#34;&gt;
          &lt;span class=&#34;conf-date-display&#34;&gt;&lt;/span&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      
      
      
      
      &lt;tr class=&#34;conf-row&#34; data-region=&#34;domestic&#34; data-tags=&#34;SRE,Observability&#34; data-conf-from=&#34;2027-07-09&#34; data-conf-to=&#34;2027-07-10&#34; data-cfp-from=&#34;&#34; data-cfp-to=&#34;&#34; style=&#34;border-bottom: 1px solid #ddd;&#34;&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd;&#34;&gt;
          &lt;a href=&#34;https://sre-next.dev/2027/&#34; target=&#34;_blank&#34;&gt;SRE NEXT 2027&lt;/a&gt;
          &lt;div style=&#34;display: flex; flex-wrap: wrap; gap: 0.25rem; margin-top: 0.25rem; font-size: 0.65rem;&#34;&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;SRE&lt;/span&gt;&lt;span class=&#34;tag-label&#34; style=&#34;white-space: nowrap;&#34;&gt;Observability&lt;/span&gt;&lt;/div&gt;
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34;&gt;
          未定
        &lt;/td&gt;
        &lt;td style=&#34;padding: 0.35rem; border: 1px solid #ddd; font-size: 0.9rem; text-align: center;&#34; class=&#34;conf-date-cell&#34;&gt;
          &lt;span class=&#34;conf-date-display&#34;&gt;&lt;/span&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      
      
      &lt;tr id=&#34;conferences-empty-row&#34; style=&#34;display: none;&#34;&gt;
        &lt;td colspan=&#34;3&#34; style=&#34;padding: 1rem; border: 1px solid #ddd; text-align: center; color: #666;&#34;&gt;表示するデータがありません&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;

&lt;script&gt;
(function() {
  let currentFilters = {
    region: &#39;domestic&#39;,
    tag: &#39;&#39;,
    cfpMonth: &#39;&#39;,
    conferenceMonth: &#39;&#39;
  };

  function monthsCovered(fromStr, toStr) {
    const months = new Set();
    if (!fromStr) {
      return months;
    }

    const start = new Date(`${fromStr}T00:00:00Z`);
    const end = new Date(`${toStr || fromStr}T00:00:00Z`);
    const cursor = new Date(Date.UTC(start.getUTCFullYear(), start.getUTCMonth(), 1));
    while (cursor &lt;= end) {
      months.add(String(cursor.getUTCMonth() + 1));
      cursor.setUTCMonth(cursor.getUTCMonth() + 1);
    }
    return months;
  }

  
  const allTags = new Set();
  document.querySelectorAll(&#39;.conf-row&#39;).forEach(row =&gt; {
    const tags = row.dataset.tags.split(&#39;,&#39;).filter(t =&gt; t);
    tags.forEach(tag =&gt; allTags.add(tag));
  });

  const tagSelect = document.getElementById(&#39;tag-filter&#39;);
  Array.from(allTags).sort().forEach(tag =&gt; {
    const option = document.createElement(&#39;option&#39;);
    option.value = tag;
    option.textContent = tag;
    tagSelect.appendChild(option);
  });

  const monthSelects = [
    document.getElementById(&#39;cfp-month-filter&#39;),
    document.getElementById(&#39;conference-month-filter&#39;)
  ];
  monthSelects.forEach((select) =&gt; {
    for (let month = 1; month &lt;= 12; month += 1) {
      const option = document.createElement(&#39;option&#39;);
      option.value = String(month);
      option.textContent = `${month}月`;
      select.appendChild(option);
    }
  });

  function updateDisplay() {
    const rows = document.querySelectorAll(&#39;.conf-row&#39;);
    let visibleCount = 0;

    rows.forEach(row =&gt; {
      const region = row.dataset.region;
      const tags = row.dataset.tags.split(&#39;,&#39;).filter(t =&gt; t);
      const cfpFrom = row.dataset.cfpFrom;
      const cfpTo = row.dataset.cfpTo;
      const conferenceMatch = !currentFilters.conferenceMonth ||
        monthsCovered(row.dataset.confFrom, row.dataset.confTo).has(currentFilters.conferenceMonth);
      const cfpMatch = !currentFilters.cfpMonth || (
        Boolean(cfpFrom || cfpTo) &amp;&amp;
        monthsCovered(cfpFrom || cfpTo, cfpTo || cfpFrom).has(currentFilters.cfpMonth)
      );

      let regionMatch = region === currentFilters.region;
      let tagMatch = !currentFilters.tag || tags.includes(currentFilters.tag);

      if (regionMatch &amp;&amp; tagMatch &amp;&amp; conferenceMatch &amp;&amp; cfpMatch) {
        row.style.display = &#39;&#39;;
        visibleCount++;
      } else {
        row.style.display = &#39;none&#39;;
      }
    });

    document.getElementById(&#39;result-count&#39;).textContent = visibleCount;
    document.getElementById(&#39;conferences-empty-row&#39;).style.display = visibleCount === 0 ? &#39;&#39; : &#39;none&#39;;
  }

  
  const regionSlider = document.getElementById(&#39;region-slider-display&#39;);
  regionSlider.addEventListener(&#39;click&#39;, function() {
    if (currentFilters.region === &#39;domestic&#39;) {
      currentFilters.region = &#39;international&#39;;
      document.getElementById(&#39;region-label-domestic&#39;).classList.remove(&#39;active&#39;);
      document.getElementById(&#39;region-label-international&#39;).classList.add(&#39;active&#39;);
    } else {
      currentFilters.region = &#39;domestic&#39;;
      document.getElementById(&#39;region-label-domestic&#39;).classList.add(&#39;active&#39;);
      document.getElementById(&#39;region-label-international&#39;).classList.remove(&#39;active&#39;);
    }
    regionSlider.classList.toggle(&#39;international&#39;);
    updateDisplay();
  });

  
  document.getElementById(&#39;tag-filter&#39;).addEventListener(&#39;change&#39;, function() {
    currentFilters.tag = this.value;
    updateDisplay();
  });

  document.getElementById(&#39;cfp-month-filter&#39;).addEventListener(&#39;change&#39;, function() {
    currentFilters.cfpMonth = this.value;
    updateDisplay();
  });

  document.getElementById(&#39;conference-month-filter&#39;).addEventListener(&#39;change&#39;, function() {
    currentFilters.conferenceMonth = this.value;
    updateDisplay();
  });

  
  const weekdays = [&#39;日&#39;, &#39;月&#39;, &#39;火&#39;, &#39;水&#39;, &#39;木&#39;, &#39;金&#39;, &#39;土&#39;];
  document.querySelectorAll(&#39;.cfp-date-display&#39;).forEach(span =&gt; {
    span.textContent = span.dataset.date.replaceAll(&#34;-&#34;, &#34;/&#34;);
  });

  document.querySelectorAll(&#39;.conf-date-cell&#39;).forEach(cell =&gt; {
    const row = cell.closest(&#39;.conf-row&#39;);
    const fromStr = row.dataset.confFrom;
    const toStr = row.dataset.confTo;

    if (fromStr) {
      const from = new Date(fromStr + &#39;T00:00:00Z&#39;);
      const to = new Date(toStr + &#39;T00:00:00Z&#39;);

      const fromWeekday = weekdays[from.getUTCDay()];
      const toWeekday = weekdays[to.getUTCDay()];

      let displayText;
      if (fromStr === toStr) {
        displayText = `${fromStr} (${fromWeekday})`;
      } else {
        displayText = `${fromStr} (${fromWeekday}) – ${toStr} (${toWeekday})`;
      }
      const span = cell.querySelector(&#39;.conf-date-display&#39;);
      if (span) {
        span.textContent = displayText;
      }
    }
  });

  
  updateDisplay();
})();
&lt;/script&gt;</description>
    </item>
    
    <item>
      <title>Organizational efficiencyとProduct and feature deliveryは何が違うのか</title>
      <link>https://rindrics.com/articles/organizational-efficiency-product-delivery/</link>
      <pubDate>Wed, 12 Aug 2026 00:00:00 +0900</pubDate>
      
      <guid>https://rindrics.com/articles/organizational-efficiency-product-delivery/</guid>
      <description>&lt;p&gt;&amp;ldquo;&lt;a href=&#34;https://cloudnativeplatforms.com/whitepapers/platforms/&#34;&gt;CNCF Platforms White Paper&lt;/a&gt;&amp;rdquo; に紛らわしい箇所があったが、自分なりに理解できた気がするので、思考の整理を兼ねて言語化しておく。&lt;/p&gt;
&lt;p&gt;扱うテーマは &amp;ldquo;How to measure the success of platforms&amp;rdquo;: プラットフォームの成功を客観的・定量的に計測するためのガイドラインの部分&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;p&gt;ここで推奨されている計測対象は、下記の3カテゴリに分かれている。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;カテゴリ&lt;/th&gt;
          &lt;th&gt;指標&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;User satisfaction and productivity&lt;/td&gt;
          &lt;td&gt;アクティブユーザーと定着率、NPS、&lt;a href=&#34;https://queue.acm.org/detail.cfm?id=3454124&#34;&gt;SPACE&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Organizational efficiency&lt;/td&gt;
          &lt;td&gt;各種のレイテンシ（後述）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Product and feature delivery&lt;/td&gt;
          &lt;td&gt;DORA の（旧）4指標&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;当初、第二カテゴリと第三カテゴリの違いがいまいち腑に落ちなかった。
&amp;ldquo;Organizational efficiency&amp;rdquo; も &amp;ldquo;Product and feature delivery&amp;rdquo; も、要は効率に関する計測として一括りにできるようにも思えてしまい、別カテゴリとされる理由がわからなかった。&lt;/p&gt;
&lt;p&gt;それぞれについて少し注意深く読んでみると、両者の違いは、「計測しているイベントの性質」および「誰が誰を待たせているか」にあるような気がする。&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Product and feature delivery&amp;rdquo; で計測するDORAの4指標はいずれも、反復的なデリバリー性能を示すものだ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Deployment Frequency&lt;/li&gt;
&lt;li&gt;Lead Time for Changes&lt;/li&gt;
&lt;li&gt;Change Failure Rate&lt;/li&gt;
&lt;li&gt;Time to Restore Service&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一方で、&amp;ldquo;Organizational efficiency&amp;rdquo; とされる下記の3指標は、いずれも何かが初めて実現されるまでの時間に関するメトリクスであることがわかる:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指標&lt;/th&gt;
          &lt;th&gt;観点&lt;/th&gt;
          &lt;th&gt;支配的な要因&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Latency from request to fulfillment of a service or capability, such as a database or test environment&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;開発リソース&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;セルフサービス化の度合い&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Latency to build and deploy a brand new service into production&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;サービス&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;ゴールデンパスとテンプレートの整備度&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Time for a new user to submit their first code changes to their product&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;ヒト&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;ドキュメント・権限・開発環境の整備度&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;これらの理解をふまえると、両カテゴリは概ね下記のように表現しても良いと思う:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Organizational efficiency: プラットフォームが顧客である開発者を待たせている時間&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Product and feature delivery: 組織がエンドユーザーを待たせている時間&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;それぞれを計測した場合の効果については、たぶん下記のような整理になるのではと思う:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;程度の差ではあるが、プラットフォームチームの取組みの効果を純粋に見たいのであれば、実装やレビューの所要時間の影響を受ける &amp;ldquo;Product and feature delivery&amp;rdquo; に比べて、&amp;ldquo;Organizational efficiency&amp;rdquo; のほうが適しているだろう&lt;/li&gt;
&lt;li&gt;ただし、プラットフォームチームの取組みは組織としてのバリューストリームに関わるものになっていないとまずい。原文にもあるように &amp;ldquo;Product and feature delivery&amp;rdquo; のほうが &amp;ldquo;true measure of the success of a platform&amp;rdquo; だ。ここを外してしまうと、プラットフォームが &amp;ldquo;an expense quite disconnected from their primary value streams&amp;rdquo; と見なされがちになる&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本記事を書きながら、2年ほど前に組織メトリクスに関する一過性ブーム的な盛り上がりがあったことを思い出していた。
最近は落ち着いてきた（飽きる企業が出てきた？）ように思うが、当時は組織メトリクスに対して、計測するだけで何かが起こるかのような、過度の期待があったのではないかと想像する。
組織メトリクスは、それぞれのカテゴリが何を映しているのかを踏まえた上で、必要な情報を得るための普通の手段として運用したらいい。&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;執筆時点では &amp;ldquo;platform engineering white paper&amp;rdquo; で検索すると、&lt;a href=&#34;https://tag-app-delivery.cncf.io/whitepapers/platforms/&#34;&gt;旧サイトのドキュメント&lt;/a&gt;（&lt;a href=&#34;https://cloudnativeplatforms.com/whitepapers/platforms/v1/&#34;&gt;新サイトのv1&lt;/a&gt;相当）がトップに出てきてしまう。本記事の大半はこのあたりの事情を知らずに旧サイトのv1を読んで書いたのだが、執筆時点の最新版である&lt;a href=&#34;https://github.com/Cloud-Native-Platform-Engineering/cnpe-community/blob/9db35ef39ff8a22ad20e97007105d87f79bc68cb/platforms-whitepaper/latest/index.md&#34;&gt;v1.1&lt;/a&gt;においても &amp;ldquo;How to measure the success of platforms&amp;rdquo; の内容は同一だった&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;原文が参照しているDORAの指標は2019年ごろのものなので（原文で参照されているのは&lt;a href=&#34;https://cloud.google.com/blog/products/devops-sre/the-2019-accelerate-state-of-devops-elite-performance-productivity-and-scaling&#34;&gt;こちら&lt;/a&gt;だが、内容的には&lt;a href=&#34;https://cloud.google.com/blog/products/devops-sre/using-the-four-keys-to-measure-your-devops-performance&#34;&gt;こちら&lt;/a&gt;のほうが適当に思える）、&amp;ldquo;time to restore service&amp;rdquo; の改称や第5メトリクスの追加・分類軸の変更（&lt;a href=&#34;https://dora.dev/insights/dora-metrics-history&#34;&gt;ref&lt;/a&gt;）は反映されていない。
これらは次の版で取り込まれるのかもしれない&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;もっとも、二つ目の &amp;ldquo;Latency to build and deploy a brand new service into production&amp;rdquo; と三つ目の &amp;ldquo;Time for a new user to submit their first code changes to their product&amp;quot;については、実装やコードレビューの所要時間も含まれうる&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;ちなみに、プラットフォームの利用は個人・チーム・組織の性能を向上させる一方で、&amp;ldquo;throughput&amp;rdquo; と &amp;ldquo;stability&amp;rdquo; の各指標を低下させることが報告されている（&lt;a href=&#34;https://dora.dev/research/2024/dora-report/2024-dora-accelerate-state-of-devops-report.pdf&#34;&gt;ref&lt;/a&gt;）&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Model the Data, Not the Interface</title>
      <link>https://rindrics.com/articles/model-the-data-not-the-interface/</link>
      <pubDate>Sat, 08 Aug 2026 00:00:00 +0900</pubDate>
      
      <guid>https://rindrics.com/articles/model-the-data-not-the-interface/</guid>
      <description>&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-08-08-cms/shared-file.webp&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;How a simple YAML data model let me add a client-facing CMS without touching the existing implementation.&lt;/p&gt;
&lt;h2 id=&#34;the-story&#34;&gt;The Story&lt;/h2&gt;
&lt;p&gt;A client asked for a profile page featuring his career timeline. Straightforward request. I built it, deployed it, and moved on.&lt;/p&gt;
&lt;p&gt;Months later, he came back with a new request: he wanted to update the timeline himself—to add new positions and modify past entries.&lt;/p&gt;
&lt;p&gt;Until then, I had been making those changes for him. Giving him direct access to the data wasn&amp;rsquo;t an option either: he was a non-technical user, and GitHub access was deliberately off the table.&lt;/p&gt;
&lt;p&gt;At first glance, adding a content management interface sounded like a change that might ripple through the existing implementation.&lt;/p&gt;
&lt;p&gt;It didn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;The reason went back to a small design decision I had made months earlier, before a CMS was even a consideration.&lt;/p&gt;
&lt;h2 id=&#34;the-initial-design-choice-yaml-over-markdown&#34;&gt;The Initial Design Choice: YAML Over Markdown&lt;/h2&gt;
&lt;p&gt;When I first built the profile page, I didn&amp;rsquo;t hard-code the timeline into HTML, but I didn&amp;rsquo;t put it in Markdown either. I started by asking what kind of content a career timeline actually is.&lt;/p&gt;
&lt;p&gt;A career history isn&amp;rsquo;t really a document. It&amp;rsquo;s structured data: a collection of dates, each associated with one or more events. So I represented it that way:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;# data/timeline.yml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;entries&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#268bd2&#34;&gt;date&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;2020&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;events&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - Joined the neighborhood cat council
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - Took responsibility for afternoon naps
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#268bd2&#34;&gt;date&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;2021&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;events&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - Became a boss cat
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - Led a team of 5 cats
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I then rendered the data with Hugo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;&amp;lt;!-- layouts/shortcodes/timeline.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#268bd2&#34;&gt;dl&lt;/span&gt; class&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;timeline&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{ range .Site.Data.timeline.entries }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#268bd2&#34;&gt;div&lt;/span&gt; class&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;timeline-entry&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;&lt;span style=&#34;color:#268bd2&#34;&gt;dt&lt;/span&gt; class&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;timeline-date&amp;#34;&lt;/span&gt;&amp;gt;{{ .date }}&amp;lt;/&lt;span style=&#34;color:#268bd2&#34;&gt;dt&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;&lt;span style=&#34;color:#268bd2&#34;&gt;div&lt;/span&gt; class&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;timeline-events&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {{ range .events }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &amp;lt;&lt;span style=&#34;color:#268bd2&#34;&gt;dd&lt;/span&gt; class&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;timeline-event&amp;#34;&lt;/span&gt;&amp;gt;{{ . }}&amp;lt;/&lt;span style=&#34;color:#268bd2&#34;&gt;dd&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {{ end }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;/&lt;span style=&#34;color:#268bd2&#34;&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/&lt;span style=&#34;color:#268bd2&#34;&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{ end }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#268bd2&#34;&gt;dl&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This kept both the data structure and the implementation simple.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-08-08-cms/rendered.webp&#34;
    alt=&#34;The career timeline rendered from the YAML data&#34;&gt;&lt;figcaption&gt;
      &lt;p&gt;The career timeline rendered from the YAML data&lt;/p&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h3 id=&#34;why-yaml-instead-of-markdown&#34;&gt;Why YAML Instead of Markdown?&lt;/h3&gt;
&lt;p&gt;Many static-site workflows are Markdown-first, and for good reason. Markdown is excellent for prose: articles, documentation, and other document-shaped content. But not all content is document-shaped.&lt;/p&gt;
&lt;p&gt;A career timeline is fundamentally a collection of structured records: dates with associated events. The same is often true of navigation menus, pricing tables, office locations, product specifications, and similar content.&lt;/p&gt;
&lt;p&gt;Representing those structures as Markdown would mean making the data fit the document format rather than choosing a format that fits the data. For the timeline, YAML was the more natural representation.&lt;/p&gt;
&lt;p&gt;I wasn&amp;rsquo;t thinking about CMS support at this point, nor was I trying to make the architecture extensible. I was simply representing the content in the form that best matched its nature.&lt;/p&gt;
&lt;p&gt;That distinction became useful later.&lt;/p&gt;
&lt;h2 id=&#34;the-requirement-change&#34;&gt;The Requirement Change&lt;/h2&gt;
&lt;p&gt;Months later, the client wanted to manage his own career history. The new editing workflow had a few constraints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It had to work for a non-technical user.&lt;/li&gt;
&lt;li&gt;GitHub access was off the table.&lt;/li&gt;
&lt;li&gt;Inputs needed validation: a year should be a number, and an entry should contain at least one event.&lt;/li&gt;
&lt;li&gt;Changes had to be committed and deployed automatically.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The existing YAML files were already a perfectly good representation of the content. The problem wasn&amp;rsquo;t the data model; the problem was that the only interface for changing it was a text editor and Git.&lt;/p&gt;
&lt;p&gt;So instead of replacing the existing content model, I added another interface to it.&lt;/p&gt;
&lt;h2 id=&#34;the-solution-add-an-interface-not-a-new-data-model&#34;&gt;The Solution: Add an Interface, Not a New Data Model&lt;/h2&gt;
&lt;p&gt;I used Decap CMS, a Git-based CMS that can map an editing UI onto files stored in a repository.&lt;/p&gt;
&lt;p&gt;The configuration for the timeline looked roughly like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;# static/admin/config.yml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- &lt;span style=&#34;color:#268bd2&#34;&gt;label&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;Profile&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;profile&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#268bd2&#34;&gt;files&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#268bd2&#34;&gt;label&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;Career History&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;timeline_data&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#268bd2&#34;&gt;file&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;data/timeline.yml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#268bd2&#34;&gt;fields&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#268bd2&#34;&gt;label&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;Career entries&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;entries&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#268bd2&#34;&gt;widget&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;list&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#268bd2&#34;&gt;fields&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            - &lt;span style=&#34;color:#268bd2&#34;&gt;label&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;Year&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#268bd2&#34;&gt;widget&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;number&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#268bd2&#34;&gt;value_type&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;int&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#268bd2&#34;&gt;min&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;1980&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#268bd2&#34;&gt;max&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;2050&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            - &lt;span style=&#34;color:#268bd2&#34;&gt;label&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;Events&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;events&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#268bd2&#34;&gt;widget&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;list&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#268bd2&#34;&gt;field&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;event&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#268bd2&#34;&gt;widget&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#268bd2&#34;&gt;min&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Decap CMS could now present the existing data as a form suitable for the client.&lt;/p&gt;
&lt;div class=&#34;info&#34;&gt;
&lt;strong&gt;Resources&lt;/strong&gt;
&lt;p&gt;A minimal working example is available on GitHub, with a live demo deployed on Netlify.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Live demo: &lt;a href=&#34;https://rindrics-model-data-not-interface.netlify.app/&#34;&gt;https://rindrics-model-data-not-interface.netlify.app/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Source: &lt;a href=&#34;https://github.com/rindrics/examples/tree/main/model-the-data-not-the-interface&#34;&gt;https://github.com/rindrics/examples/tree/main/model-the-data-not-the-interface&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;The important part was what I didn&amp;rsquo;t change.&lt;/p&gt;
&lt;p&gt;The YAML structure? ──Unchanged; The Hugo templates? ──Untouched; The site still rendered exactly the same way.&lt;/p&gt;
&lt;p&gt;I had simply added a new way to edit the existing data.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-08-08-cms/before-after.webp&#34;
    alt=&#34;Before (top) and after (bottom) adding a CMS: the existing data flow remains unchanged.&#34;&gt;&lt;figcaption&gt;
      &lt;p&gt;Before (top) and after (bottom) adding a CMS: the existing data flow remains unchanged.&lt;/p&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;No refactor, no breaking changes.&lt;/p&gt;
&lt;h2 id=&#34;why-so-little-had-to-change&#34;&gt;Why So Little Had to Change&lt;/h2&gt;
&lt;p&gt;What made this work was surprisingly simple: the editing side and the rendering side could depend on the same file-based data model.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-08-08-cms/shared-file.webp&#34;
    alt=&#34;File-based integration via a shared data contract&#34;&gt;&lt;figcaption&gt;
      &lt;p&gt;File-based integration via a shared data contract&lt;/p&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The Hugo templates depend on the structure of the YAML to render the timeline, while the Decap CMS configuration depends on the same structure to provide an editing interface. But the two sides don&amp;rsquo;t need to know about each other: Decap CMS doesn&amp;rsquo;t know how Hugo renders the timeline, and Hugo doesn&amp;rsquo;t know that Decap CMS exists.&lt;/p&gt;
&lt;p&gt;They only agree on the shape of the data.&lt;/p&gt;
&lt;p&gt;The YAML structure acts as a shared data contract between authoring and publishing. Adding another way to display the same data means writing another consumer of the model; adding another way to edit it means adding another authoring interface. Neither necessarily requires changing the underlying content model.&lt;/p&gt;
&lt;p&gt;Of course, if the content itself changes—if a career entry suddenly needs locations, employers, categories, or relationships—the data model should change too. The point isn&amp;rsquo;t that the model never changes; it&amp;rsquo;s that adding an interface doesn&amp;rsquo;t inherently require it to change.&lt;/p&gt;
&lt;h2 id=&#34;model-the-content-for-what-it-is&#34;&gt;Model the Content for What It Is&lt;/h2&gt;
&lt;p&gt;What&amp;rsquo;s interesting to me is that none of this was planned. When I chose YAML, I wasn&amp;rsquo;t anticipating a CMS. There was no abstraction layer waiting for future requirements, no repository interface, and no elaborate content architecture.&lt;/p&gt;
&lt;p&gt;I simply looked at the content and asked:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is this thing?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The answer was structured data, so I represented it as structured data. That gave the later CMS integration a clean boundary almost for free.&lt;/p&gt;
&lt;p&gt;This is different from trying to future-proof a system through speculative abstraction. I didn&amp;rsquo;t predict the future requirement; I represented the requirement I already had accurately enough that the future requirement fit naturally around it.&lt;/p&gt;
&lt;p&gt;This applies beyond career timelines. A blog post or an article is usually document-shaped, making Markdown a natural fit. But a timeline is a collection of records, a navigation menu is a tree, and a pricing table is a collection of products, attributes, and prices. Different kinds of content have different natural structures.&lt;/p&gt;
&lt;p&gt;So rather than starting with the tool—&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How should I write this in Markdown?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;—I find it more useful to start with the content:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What is this content, really?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The representation follows from there. Markdown is often ideal for document-shaped content. YAML, JSON, or another structured store may better represent structured content. Relational or highly dynamic data may belong in a database.&lt;/p&gt;
&lt;p&gt;The specific format is secondary. What matters is whether the model reflects the structure of the thing being represented.&lt;/p&gt;
&lt;h2 id=&#34;takeaway&#34;&gt;Takeaway&lt;/h2&gt;
&lt;p&gt;Adding CMS support to this site turned out to be surprisingly small—not because I had designed the system for a CMS or anticipated the requirement, and not because I had introduced abstractions to protect against future changes. I had simply modeled a career timeline as what it was: structured data.&lt;/p&gt;
&lt;p&gt;When the client later needed an editing interface, Decap CMS could depend on that same model while Hugo continued rendering it exactly as before. The CMS became another interface to the data, rather than a replacement for the architecture.&lt;/p&gt;
&lt;p&gt;That experience left me with a simple design heuristic:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t model content around the tool that happens to consume it today. Model it around what the content actually is.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this case, the flexibility followed naturally.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>イミュータブルなデータレジストリの設計とAlloyによる形式検証</title>
      <link>https://rindrics.com/articles/immutable-data-registry-alloy-design/</link>
      <pubDate>Fri, 07 Aug 2026 00:00:00 +0900</pubDate>
      
      <guid>https://rindrics.com/articles/immutable-data-registry-alloy-design/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;../stock-assess-data-registry-1/&#34;&gt;前回&lt;/a&gt;に引き続き、data-registryサービスを実装していく。
今回はdatasetVersionの生成ロジック周りを設計する。&lt;/p&gt;
&lt;h2 id=&#34;はじめに&#34;&gt;はじめに&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://rindrics.com/articles/stock-assess-api-contract-postmortem/#:~:text=data%20service%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E7%8B%AC%E7%AB%8B%E3%81%97%E3%81%9F%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%AB%E6%80%9D%E3%82%8F%E3%82%8C%E3%82%8B&#34;&gt;データを登録するためのサービスが必要&lt;/a&gt;ということがわかったので、下の記事で、データ登録サービス: data-registryの構築に必要なセットアップを終え、ハンドラの実装まで完了した。








&lt;div class=&#34;card&#34;&gt;
  &lt;a href=&#34;https://rindrics.com/articles/stock-assess-data-registry-1/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; class=&#34;card-link&#34;&gt;
    &lt;div class=&#34;card-content&#34;&gt;
      &lt;h4 class=&#34;card-title&#34;&gt;データ登録サービスの構築 その1 | rindrics.com&lt;/h4&gt;
      
      &lt;span class=&#34;card-url&#34;&gt;https://rindrics.com/articles/stock-assess-data-registry-1/&lt;/span&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;作業の進捗は下記の通り:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; API契約を書く&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; ルーティングの動作確認&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; db セットアップ&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; リポジトリ・ハンドラの実装&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; datasetVersion生成ロジックの設計&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; リファクタリング&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; エラーハンドリングの追加&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;データセットの生成ロジックは、Alloyでモデル検証しつつ設計する。&lt;/p&gt;
&lt;h2 id=&#34;要求と要件の整理&#34;&gt;要求と要件の整理&lt;/h2&gt;
&lt;p&gt;正常ケースのレスポンスとして、まずUUID形式の&lt;code&gt;version&lt;/code&gt;を返してほしい旨については&lt;a href=&#34;https://gist.github.com/rindrics/8504980873e631a7f692543090995e8e#file-gistfile1-txt-L100-L111&#34;&gt;OpenAPI&lt;/a&gt;に既に書いた。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#268bd2&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;019f8bff-a5b8-7014-bfc8-41561eaac24c&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将来的にはもっと有用なレスポンスを返したほうがよさそうだが、ひとまずの仕様としてシンプルなこの動作について、ロジックを設計したい。&lt;/p&gt;
&lt;p&gt;ここで設計するのは、この文字列を何のアルゴリズムで得るかという話ではなく、この値がレスポンスとして返るまでにどんな事項を考慮しないといけないかという話。
コンシューマのユースケース支援の観点と、バックエンドサービスとしての堅牢性や処理速度をバランスさせながら考えていく。&lt;/p&gt;
&lt;h3 id=&#34;要求requirements&#34;&gt;要求（Requirements）&lt;/h3&gt;
&lt;p&gt;仕様を検討するにあたり、data-registryのコンシューマのユースケースを想定し、要求を洗い出したい。
&lt;a href=&#34;../stock-assess-data-registry-ubiquitous-language&#34;&gt;こちらの記事&lt;/a&gt;で定義したユビキタス言語を使い、要求を次のように整理する:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;ID&lt;/th&gt;
          &lt;th&gt;説明&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;R001&lt;/td&gt;
          &lt;td&gt;同一の登録要求に対して、常に同じ応答を返すこと&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;R002&lt;/td&gt;
          &lt;td&gt;同一の版に対する取得要求には、常に同じ内容を返すこと&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;R003&lt;/td&gt;
          &lt;td&gt;評価データまたはパラメータセットの登録成功後、その版を取得できること&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;R004&lt;/td&gt;
          &lt;td&gt;評価データまたはパラメータセットの登録に失敗した場合、コンシューマが失敗を検知できること&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;R005&lt;/td&gt;
          &lt;td&gt;登録要求に対して有限時間内に応答すること&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;R006&lt;/td&gt;
          &lt;td&gt;評価データ、パラメータセットまたはシナリオを、通常の利用対象から外せること&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;R007&lt;/td&gt;
          &lt;td&gt;評価データまたはパラメータセットを修正した場合でも、修正前の版を取得できること&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;R008&lt;/td&gt;
          &lt;td&gt;任意の版を指定して取得できること&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;R009&lt;/td&gt;
          &lt;td&gt;外部公開済みの版を訂正した場合でも、訂正前の版を追跡できること&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;R010&lt;/td&gt;
          &lt;td&gt;アーカイブと、機密情報などを除去するための物理削除を区別できること&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;R011&lt;/td&gt;
          &lt;td&gt;評価データおよびパラメータセットの版の履歴を追跡できること&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;immutableなサービスにしようと意気込んでいたので&lt;code&gt;R010&lt;/code&gt;は当初入れてなかったが、リソースのリビジョン機能をサポートするAPIでは物理削除が必須という記述を読んだので追加した&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;h3 id=&#34;システム要件system-requirements&#34;&gt;システム要件（System Requirements）&lt;/h3&gt;
&lt;p&gt;上で整理した要求から、下記のシステム要件が導かれた:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;ID&lt;/th&gt;
          &lt;th&gt;説明&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;SR001&lt;/td&gt;
          &lt;td&gt;各評価データおよびパラメータセットは、版を用いて管理されなければならない&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;SR002&lt;/td&gt;
          &lt;td&gt;登録後の版の内容を変更してはならない&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;SR003&lt;/td&gt;
          &lt;td&gt;評価データまたはパラメータセットを修正するときは、既存の版を更新せず、新しい版を作成しなければならない&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;SR004&lt;/td&gt;
          &lt;td&gt;新しい版は、既存の版を0個または1個参照しなければならない&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;SR005&lt;/td&gt;
          &lt;td&gt;同一の登録要求識別子を持つ登録要求に対しては同一の結果を返し、新たな版を重複して作成してはならない&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;SR006&lt;/td&gt;
          &lt;td&gt;登録処理が成功した場合、取得APIから登録された版の内容を取得できなければならない&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;SR007&lt;/td&gt;
          &lt;td&gt;版を指定した取得要求には、その版に記録された内容を返さなければならない&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;SR008&lt;/td&gt;
          &lt;td&gt;評価データおよびパラメータセットは、それぞれ高々1つの最新版を持たなければならない&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;SR009&lt;/td&gt;
          &lt;td&gt;新しい版の登録成功後、最新版は新しい版を指さなければならない&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;SR010&lt;/td&gt;
          &lt;td&gt;新しい版が登録されても、過去の版を変更または削除してはならない&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;これらの要件を出発点とし、データ登録機能を提供するバックエンドサービスとしてあるべき姿に照らして、追加で必要な要件をモデル検証であぶり出していく。&lt;/p&gt;
&lt;p&gt;モデル検証には&lt;a href=&#34;https://alloytools.org/alloy6.html&#34;&gt;Alloy 6&lt;/a&gt;を利用する。
動作環境は下記の通り:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS 15.6.1（Apple M1 Max）&lt;/li&gt;
&lt;li&gt;Alloy Analyzer 6.1.0.20211119T054551&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;要件を満たすモデルの探索&#34;&gt;要件を満たすモデルの探索&lt;/h2&gt;
&lt;h3 id=&#34;システム基本構造の定義&#34;&gt;システム基本構造の定義&lt;/h3&gt;
&lt;p&gt;data-registryサービスのドメイン構造として、下記を表現することにした:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;#&lt;/th&gt;
          &lt;th&gt;Alloy signature&lt;/th&gt;
          &lt;th&gt;意味&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;Resource&lt;/td&gt;
          &lt;td&gt;ユビキタス言語より&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;AnnualAssessment&lt;/td&gt;
          &lt;td&gt;ユビキタス言語より&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;3&lt;/td&gt;
          &lt;td&gt;AssessmentTarget&lt;/td&gt;
          &lt;td&gt;ユビキタス言語より&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;4&lt;/td&gt;
          &lt;td&gt;AssessmentDataRevision&lt;/td&gt;
          &lt;td&gt;評価データの版&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;5&lt;/td&gt;
          &lt;td&gt;ParameterSetRevision&lt;/td&gt;
          &lt;td&gt;パラメータセットの版&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;6&lt;/td&gt;
          &lt;td&gt;Registry&lt;/td&gt;
          &lt;td&gt;data-registryサービス&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;その他、Alloyによるシミュレーションを動かすために必要なstutterなどを足して、下記のコードから始めることにする:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-alloy:model.als&#34; data-lang=&#34;alloy:model.als&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;commit &lt;span style=&#34;color:#2aa198&#34;&gt;46&lt;/span&gt;d22f240c3b20868818dcbf6d5b09dba5d161d7
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Author: Akira Hayashi &lt;span style=&#34;color:#719e07&#34;&gt;&amp;lt;&lt;/span&gt;rindrics@gmail&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;com&lt;span style=&#34;color:#719e07&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Date:   Thu Jul &lt;span style=&#34;color:#2aa198&#34;&gt;30&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;06&lt;/span&gt;:&lt;span style=&#34;color:#2aa198&#34;&gt;04&lt;/span&gt;:&lt;span style=&#34;color:#2aa198&#34;&gt;25&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2026&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;0900&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    feat: define fundamental model structure
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;diff &lt;span style=&#34;color:#586e75&#34;&gt;--git a/services/data-registry/docs/model.als b/services/data-registry/docs/model.als&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;new file mode &lt;span style=&#34;color:#2aa198&#34;&gt;100644&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;index &lt;span style=&#34;color:#2aa198&#34;&gt;0000000&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;36&lt;/span&gt;a45f9
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;--- /dev/null&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+++&lt;/span&gt; b&lt;span style=&#34;color:#719e07&#34;&gt;/&lt;/span&gt;services&lt;span style=&#34;color:#719e07&#34;&gt;/&lt;/span&gt;data&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;registry&lt;span style=&#34;color:#719e07&#34;&gt;/&lt;/span&gt;docs&lt;span style=&#34;color:#719e07&#34;&gt;/&lt;/span&gt;model&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;als
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@@ &lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;84&lt;/span&gt; @@
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;module&lt;/span&gt; DataRegistry
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    1. System Requirements
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR001: AssessmentData and ParameterSet, along with their respective versions, must be managed separately.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR002: Each version must be assigned a unique identifier, and the contents must not be modified after registration.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR003: When modifying AssessmentData or ParameterSet, a new version must be created instead of updating the existing version.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR004: A new version must reference exactly zero or one previous version as its source.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR005: For registration requests with identical IdempotencyKey, the same result must be returned without creating duplicate versions.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR006: After successful registration, the registered version must be retrievable via the retrieval API.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR007: Retrieval requests specifying a version must return the contents recorded in that version.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR008: AssessmentData and ParameterSet must each have at most one current version.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR009: After successful registration of a new version, the current version must point to the new version.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR010: Past versions must not be modified or deleted even after a new version is registered.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    2. Domain
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; Resource &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AnnualAssessment &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; resource: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; Resource,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; year: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; AnnualAssessment
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    3. State
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; Registry &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; assessmentData: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; parameterSet: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; ParameterSetRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    4. Operations
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; init &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at: AssessmentTarget, adr: AssessmentDataRevision&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; at &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; registerParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at: AssessmentTarget, psr: ParameterSetRevision&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; at &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; stutter &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; step &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; stutter
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, adr: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt; registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, adr&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, psr: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt; registerParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, psr&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;fact&lt;/span&gt; traces &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; init
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;always&lt;/span&gt; step
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    5. Properties
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    6. Sanity
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;run&lt;/code&gt;を実行してみると、下図のような関係が表示された:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-07-29-data/init.webp&#34;
    alt=&#34;システムの初期状態&#34;&gt;&lt;figcaption&gt;
      &lt;p&gt;システムの初期状態&lt;/p&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;（Alloyのおさらい）この図が意味していることは下記だ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AssessmentTarger0&lt;/code&gt; は &lt;code&gt;AnnualAssessment&lt;/code&gt; と &lt;code&gt;Resource1&lt;/code&gt; からなる評価対象である&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AssessmentTarger1&lt;/code&gt; も同じ年の評価だが、対象資源は &lt;code&gt;Resource0&lt;/code&gt; である&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Registry&lt;/code&gt; にはまだなにも登録されていない（= エッジが一本もない）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AssessmentDataRevision&lt;/code&gt; という概念がモデリングされているが使われていない（= データが登録されていない）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;registerParameterSet&lt;/code&gt; predicateをstepに含めているにも関わらずデータが登録されていないことになっている理由は下記だ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a. step内で&lt;code&gt;registerParameterSet&lt;/code&gt;の遷移が&lt;code&gt;or&lt;/code&gt;の一つの選択肢として定義されているだけであり、その遷移が少なくとも一度選択されることは保証されていないため
&lt;ul&gt;
&lt;li&gt;stutterが常に選択可能なら、すべてのステップで&lt;code&gt;stutter&lt;/code&gt;だけが選択され、登録が一度も起きないトレースも許される&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;b. Alloyによるケース探索ではインスタンスから生成されがちだから&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;逆に、データが登録された状況を見てみたければ下記のようにすれば良い:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-diff:model.als&#34; data-lang=&#34;diff:model.als&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; step &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;  stutter
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, adr: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt; registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, adr&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, psr: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt; registerParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, psr&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, adr: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt; registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, adr&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;↑力技でやるならこう。&lt;/p&gt;
&lt;p&gt;こちらのほうがスマートか↓&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-diff:model.als&#34; data-lang=&#34;diff:model.als&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;実行すると、下図のようにデータが登録された状態を一応見ることができる:
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-07-29-data/init-registered.webp&#34;
    alt=&#34;データが登録されたケースの一例&#34;&gt;&lt;figcaption&gt;
      &lt;p&gt;データが登録されたケースの一例&lt;/p&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;図示のためのこの変更は不要だったので元に戻しておく。&lt;/p&gt;
&lt;p&gt;ここから、各要件をAlloyで形式化し、全ての要件が常に満たされるシステム仕様となっているかを検証していく。
「すべての要件が常に」と強めに書いたのは、各要件は私が定義した: つまり調整余地があるもなので、要件全体として整合するようにしたいからだ&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;h3 id=&#34;sr001-版による管理&#34;&gt;SR001: 版による管理&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;SR001: 各評価データおよびパラメータセットは、版を用いて管理されなければならない&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;この要件は下記のように表現できる。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-diff:model.als&#34; data-lang=&#34;diff:model.als&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#2aa198&#34;&gt;5&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; Properties
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#719e07&#34;&gt;============================================================&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;assert&lt;/span&gt; SR001_revision_belongs_to_at_most_one_target &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; adr: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;        &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; psr: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;        &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;check&lt;/span&gt; SR001_revision_belongs_to_at_most_one_target &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR001_revisions_can_be_registered &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, adr: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  psr: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR001_revisions_can_be_registered &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     6. Sanity
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Execute Allしてみる:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Executing &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;Check SR001_revision_belongs_to_at_most_one_target for 2 but 1..3 steps&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Actual scopes: &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;Resource&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; AnnualAssessment, &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; AssessmentDataRevision, &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; ParameterSetRevision, exactly &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; Registry
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Solver&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;sat4j Steps&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;1.&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; Bitwidth&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;4&lt;/span&gt; MaxSeq&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; SkolemDepth&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; Symmetry&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;20&lt;/span&gt; Mode&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;batch
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#2aa198&#34;&gt;1.&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; steps&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1553&lt;/span&gt; vars&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;108&lt;/span&gt; primary vars&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2564&lt;/span&gt; clauses&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;10&lt;/span&gt;ms&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   No counterexample found&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; Assertion may be valid&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;0&lt;/span&gt;ms&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Executing &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;Run SR001_revisions_can_be_registered for 2 but 1..3 steps, 1 AssessmentTarget&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Actual scopes: &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;Resource&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; AnnualAssessment, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; AssessmentDataRevision, &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; ParameterSetRevision, exactly &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; Registry
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Solver&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;sat4j Steps&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;1.&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; Bitwidth&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;4&lt;/span&gt; MaxSeq&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; SkolemDepth&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; Symmetry&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;20&lt;/span&gt; Mode&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;batch
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#2aa198&#34;&gt;1.&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; steps&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2479&lt;/span&gt; vars&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;198&lt;/span&gt; primary vars&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;3967&lt;/span&gt; clauses&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;8&lt;/span&gt;ms&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; found&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; Predicate is consistent&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt;ms&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Executing &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;Run run$3 for 2 but 1..3 steps&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Actual scopes: &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;Resource&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; AnnualAssessment, &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; AssessmentDataRevision, &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; ParameterSetRevision, exactly &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; Registry
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Solver&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;sat4j Steps&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;1.&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; Bitwidth&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;4&lt;/span&gt; MaxSeq&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; SkolemDepth&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; Symmetry&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;20&lt;/span&gt; Mode&lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt;batch
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#2aa198&#34;&gt;1.&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; steps&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2769&lt;/span&gt; vars&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;225&lt;/span&gt; primary vars&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;4415&lt;/span&gt; clauses&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;ms&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; found&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; Predicate is consistent&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt;ms&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; commands were executed&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; The results are:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#586e75&#34;&gt;#1: No counterexample found. SR001_revision_belongs_to_at_most_one_target may be valid.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#586e75&#34;&gt;#2: Instance found. SR001_revisions_can_be_registered is consistent.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#586e75&#34;&gt;#3: Instance found. run$3 is consistent.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;↑反例なし、全要件を満たすインスタンスあり（以下 OK &amp;#x2705; と表現）。&lt;/p&gt;
&lt;h3 id=&#34;sr002-不変性&#34;&gt;SR002: 不変性&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;SR002: 登録後の版の内容を変更してはならない&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;これは下のように表現する:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-diff:model.als&#34; data-lang=&#34;diff:model.als&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  year: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; AnnualAssessment
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AssessmentData &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; ParameterSet &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; RevisionId &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;    id: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; RevisionId,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;    assessmentData: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; AssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;    id: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; RevisionId,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;    parameterSet: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; ParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;fact&lt;/span&gt; revisionIdUnique &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; r1, r2: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  r1&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r2&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;implies&lt;/span&gt; r1 &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; r1, r2: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  r1&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r2&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;implies&lt;/span&gt; r1 &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     3. State
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;@@ -96,6 +115,28 @@ pred SR001_revisions_can_be_registered {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; run SR001_revisions_can_be_registered for 2 but 1 AssessmentTarget, 1..3 steps
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+// SR002: The contents of a revision should not be modified after registration.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+// (Automatically satisfied by definition)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+pred SR002_registered_revision_contents_remain_available {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ eventually (some at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  adr: AssessmentDataRevision, psr: ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  data: AssessmentData, params: ParameterSet |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  Registry.assessmentData[at] = adr
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and adr.assessmentData = data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and Registry.parameterSet[at] = psr
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and psr.parameterSet = params
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and after (
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   Registry.assessmentData[at] = adr
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   and adr.assessmentData = data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   and Registry.parameterSet[at] = psr
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   and psr.parameterSet = params
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  ))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+run SR002_registered_revision_contents_remain_available
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ for 2 but 1 AssessmentTarget, 1..4 steps
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; /*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     6. Sanity
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;↑各Revisionに、非&lt;code&gt;var&lt;/code&gt;のフィールドとして &lt;code&gt;one AssessmentData&lt;/code&gt; と &lt;code&gt;one ParameterSet&lt;/code&gt; を定義することによって保証する（保証といっても実装時の契約ではあるが）。&lt;/p&gt;
&lt;p&gt;assertは追加していないが、この変更によって不整合が出ていないかをExecute Allで確認する:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;4 commands were executed. The results are:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #1: No counterexample found. SR001_revision_belongs_to_at_most_one_target may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #2: Instance found. SR001_revisions_can_be_registered is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #3: Instance found. SR002_registered_revision_contents_remain_available is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #4: Instance found. run$4 is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;OK &amp;#x2705;&lt;/p&gt;
&lt;p&gt;こちらは全体のsanity check:
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-07-29-data/sr002.webp&#34;
    alt=&#34;現時点のsanity checkを持たすモデル&#34;&gt;&lt;figcaption&gt;
      &lt;p&gt;現時点のsanity checkを持たすモデル&lt;/p&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

↑&lt;code&gt;AssessmentDataRevision&lt;/code&gt; と &lt;code&gt;ParameterSetRevision&lt;/code&gt; が導入されたことで、モデルの構造が変わったのがわかる（スペース的に辛いのでノード数を減らしている）。&lt;/p&gt;
&lt;p&gt;また、SR002の正常ケースの例をひとつ見てみたいので、明示的に&lt;code&gt;egistered_revision_contents_remain_available&lt;/code&gt;という&lt;code&gt;run&lt;/code&gt;も追加した:
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-07-29-data/sr002-run.webp&#34;
    alt=&#34;SR002を満たすケースの一例&#34;&gt;&lt;figcaption&gt;
      &lt;p&gt;SR002を満たすケースの一例&lt;/p&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&amp;hellip;いや待て。
あるAssessmentDataRevisonと、あるParameterSetRevisionが同じRevisionIdを持ちうることになっているのか？
それは意図と違う。&lt;/p&gt;
&lt;p&gt;確かにちゃんとモデリングできていなかった:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-diff:model.als&#34; data-lang=&#34;diff:model.als&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AssessmentData &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; ParameterSet &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; RevisionId &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;abstract&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; RevisionId &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AssessmentDataRevisionId, ParameterSetRevisionId &lt;span style=&#34;color:#719e07&#34;&gt;extends&lt;/span&gt; RevisionId &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;    id: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; RevisionId,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;    id: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; AssessmentDataRevisionId,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     assessmentData: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; AssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;    id: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; RevisionId,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;    id: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; ParameterSetRevisionId,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     parameterSet: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; ParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;もう一度状態を見てみる:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;4 commands were executed. The results are:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #1: No counterexample found. SR001_revision_belongs_to_at_most_one_target may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #2: Instance found. SR001_revisions_can_be_registered is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #3: Instance found. SR002_registered_cont_available is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #4: Instance found. run$4 is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;OK &amp;#x2705;&lt;/p&gt;
&lt;p&gt;これで、AssessmentDataRevisonとParameterSetRevisionはそれぞれのRevisionIdを持つようになった。
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-07-29-data/sr002-fixed.webp&#34;
    alt=&#34;SR002を満たすケースの一例（修正版）&#34;&gt;&lt;figcaption&gt;
      &lt;p&gt;SR002を満たすケースの一例（修正版）&lt;/p&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Alloyの可視化機能に助けられた。&lt;/p&gt;
&lt;h3 id=&#34;sr003-不変性その2&#34;&gt;SR003: 不変性その2&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;SR003 : 評価データまたはパラメータセットを修正するときは、既存の版を更新せず、新しい版を作成しなければならない&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-diff:model.als&#34; data-lang=&#34;diff:model.als&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AssessmentDataRevisionId, ParameterSetRevisionId &lt;span style=&#34;color:#719e07&#34;&gt;extends&lt;/span&gt; RevisionId &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR002: Each revision has unique identifier&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; id: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; AssessmentDataRevisionId,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt; assessmentData: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; AssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; assessmentData: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; AssessmentData,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; previousSource: &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; AssessmentDataRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  id: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; ParameterSetRevisionId,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt; parameterSet: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; ParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; parameterSet: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; ParameterSet,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; previousSource: &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; ParameterSetRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;fact&lt;/span&gt; revisionIdUnique &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; r1, r2: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;  r1&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r2&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;implies&lt;/span&gt; r1 &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; r1, r2: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;  r1&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r2&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;implies&lt;/span&gt; r1 &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR002: Unique identifier enforcement&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;fact&lt;/span&gt; revisionIdUniqueAssessmentData &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; adr1, adr2: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  adr1&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr2&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;implies&lt;/span&gt; adr1 &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;fact&lt;/span&gt; revisionIdUniqueParameterSet &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; psr1, psr2: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  psr1&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr2&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;implies&lt;/span&gt; psr1 &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;fact&lt;/span&gt; noCyclicSource &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; adr: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt; adr not &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; adr&lt;span style=&#34;color:#719e07&#34;&gt;.^&lt;/span&gt;previousSource
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; psr: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt; psr not &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; psr&lt;span style=&#34;color:#719e07&#34;&gt;.^&lt;/span&gt;previousSource
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;@@ -54,8 +66,8 @@ fact revisionIdUnique {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; Registry &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; assessmentData: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; parameterSet: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; ParameterSetRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; currentAssessmentData: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; currentParameterSet: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; ParameterSetRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;@@ -63,23 +75,33 @@ one sig Registry {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; init &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at: AssessmentTarget, adr: AssessmentDataRevision&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; at &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; adr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; adr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData &lt;span style=&#34;color:#719e07&#34;&gt;++&lt;/span&gt; at &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; registerParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at: AssessmentTarget, psr: ParameterSetRevision&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; at &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; psr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; psr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet &lt;span style=&#34;color:#719e07&#34;&gt;++&lt;/span&gt; at &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; stutter &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; step &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@@ &lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;97&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;40&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;119&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;32&lt;/span&gt; @@ &lt;span style=&#34;color:#719e07&#34;&gt;fact&lt;/span&gt; traces &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#2aa198&#34;&gt;5&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt; Properties
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#719e07&#34;&gt;============================================================&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;assert&lt;/span&gt; SR001_revision_belongs_to_at_most_one_target &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; adr: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;        &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; psr: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;        &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;check&lt;/span&gt; SR001_revision_belongs_to_at_most_one_target &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR001: At most one current version per AssessmentTarget&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// (Automatically satisfied by Registry definition: lone AssessmentDataRevision)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR001_revisions_can_be_registered &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, adr: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   psr: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR001_revisions_can_be_registered &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;// SR002: The contents of a revision should not be modified after registration.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;// (Automatically satisfied by definition)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR002_registered_cont_available &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   adr: AssessmentDataRevision, psr: ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   data: AssessmentData, params: ParameterSet &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; adr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; data
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; psr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; params
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;after&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;   Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;   Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; adr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; data
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; psr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; params
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@@ &lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;138&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;152&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;46&lt;/span&gt; @@ &lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR002_registered_cont_available &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR002_registered_cont_available
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR003: When modifying, a new version must be created instead of updating the existing version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;assert&lt;/span&gt; SR003_new_version_on_change &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;always&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; at: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;implies&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]).~&lt;/span&gt;previousSource&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; at: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;implies&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]).~&lt;/span&gt;previousSource&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;check&lt;/span&gt; SR003_new_version_on_change &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR003_assessment_data_can_be_changed_with_new_revision &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  source, newRevision: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; source
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; source&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData &lt;span style=&#34;color:#719e07&#34;&gt;!=&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; source
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, newRevision&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR003_parameter_set_can_be_changed_with_new_revision &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  source, newRevision: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; source
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; source&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet &lt;span style=&#34;color:#719e07&#34;&gt;!=&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; source
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; registerParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, newRevision&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR003_assessment_data_can_be_changed_with_new_revision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR003_parameter_set_can_be_changed_with_new_revision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     6. Sanity
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;assert SR003_new_version_on_change&lt;/code&gt; の下記の部分は「current revisionが同じまま（変わらない）、または next revisionが current revision から派生している」を意味している:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-alloy&#34; data-lang=&#34;alloy&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;implies&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]).~&lt;/span&gt;previousSource&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Execute All:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;6 commands were executed. The results are:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #1: Instance found. SR001_revisions_can_be_registered is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #2: Instance found. SR002_registered_cont_available is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #3: No counterexample found. SR003_new_version_on_change may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #4: Instance found. SR003_assessment_data_can_be_changed_with_new_revision is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #5: Instance found. SR003_parameter_set_can_be_changed_with_new_revision is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #6: Instance found. run$6 is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;OK &amp;#x2705;&lt;/p&gt;
&lt;p&gt;AssessmentDataが変わった際には、別のRevisionとなるようになっている:
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-07-29-data/sr003.webp&#34;
    alt=&#34;SR003を満たすケースの一例&#34;&gt;&lt;figcaption&gt;
      &lt;p&gt;SR003を満たすケースの一例&lt;/p&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

（末尾の数字が交差しているが、これは自動付与されたものなので気にしなくて良いはず。）&lt;/p&gt;
&lt;h3 id=&#34;sr004-版の参照規則&#34;&gt;SR004: 版の参照規則&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;SR004: 新しい版は、既存の版を0個または1個参照しなければならない&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;これは、&lt;code&gt;previousSource: lone AssessmentDataRevision&lt;/code&gt; の &lt;code&gt;lone&lt;/code&gt; によって、既に定義レベルで保証されている。
一応、状態を見てみたいので&lt;code&gt;run&lt;/code&gt;を追加した:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-diff:moodel.als&#34; data-lang=&#34;diff:moodel.als&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR004: Each revision can reference exactly zero or one previous version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// (Enforced by previousSource: lone field definition - no explicit assertion needed)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR004_root_and_derived_revisions_can_exist &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; rootAdr, derivedAdr: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  rootPsr, derivedPsr: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  rootAdr &lt;span style=&#34;color:#719e07&#34;&gt;!=&lt;/span&gt; derivedAdr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; rootAdr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; derivedAdr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; rootAdr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; rootPsr &lt;span style=&#34;color:#719e07&#34;&gt;!=&lt;/span&gt; derivedPsr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; rootPsr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; derivedPsr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; rootPsr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR004_root_and_derived_revisions_can_exist
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;exactly&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;exactly&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;exactly&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; AssessmentDataRevisionId,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;exactly&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; ParameterSetRevisionId,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     6. Sanity
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一例を見てみる:
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-07-29-data/sr004.webp&#34;
    alt=&#34;SR004を満たすケースの一例&#34;&gt;&lt;figcaption&gt;
      &lt;p&gt;SR004を満たすケースの一例&lt;/p&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

なるほど、データの内容が同じでも親が違う状況が示されていて、この場合には違う版として扱われるらしい。
少し意図と違うが、これについては次の&lt;code&gt;SR005&lt;/code&gt;で考える。&lt;/p&gt;
&lt;h3 id=&#34;sr005-冪等性&#34;&gt;SR005: 冪等性&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;SR005: 同一の登録要求識別子を持つ登録要求に対しては同一の結果を返し、新たな版を重複して作成してはならない&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;先ほど述べた問題にも関係する冪等性。
下記のようにモデリングしてみる:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-diff:moodel.als&#34; data-lang=&#34;diff:moodel.als&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AssessmentDataRevisionId, ParameterSetRevisionId &lt;span style=&#34;color:#719e07&#34;&gt;extends&lt;/span&gt; RevisionId &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; HashKey &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;abstract&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; Status &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; Success, Failure &lt;span style=&#34;color:#719e07&#34;&gt;extends&lt;/span&gt; Status &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; Response &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; revision: &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; ParameterSetRevision&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; status: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; Status
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;// SR002: Each revision has unique identifier&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  id: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; AssessmentDataRevisionId,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@@ &lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;67&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;7&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;77&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;9&lt;/span&gt; @@ &lt;span style=&#34;color:#719e07&#34;&gt;fact&lt;/span&gt; noCyclicSource &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; Registry &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; currentAssessmentData: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; currentParameterSet: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; ParameterSetRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; currentParameterSet: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;// SR005: Track responses by HashKey (idempotency key) for idempotency verification&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; responseLog: HashKey &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; Response
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;@@ -77,37 +89,80 @@ one sig Registry {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; pred init {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;  no Registry.currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;  no Registry.currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ no Registry.responseLog
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;-pred registerAssessmentData[at: AssessmentTarget, adr: AssessmentDataRevision] {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;- (no Registry.currentAssessmentData[at] and no adr.previousSource)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+// SR005: Log response by idempotency key
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+pred registerAssessmentData[
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ adr: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ data: AssessmentData,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ idempotencyKey: HashKey
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+] {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  adr.assessmentData = data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ (
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  no Registry.responseLog[idempotencyKey]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and (
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   (no Registry.currentAssessmentData[at] and no adr.previousSource)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   or (
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    some Registry.currentAssessmentData[at]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    and adr.previousSource = Registry.currentAssessmentData[at]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   )
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  )
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and Registry.currentAssessmentData&amp;#39; = Registry.currentAssessmentData ++ at -&amp;gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and Registry.currentParameterSet&amp;#39; = Registry.currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and some r: Response |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   r.revision = adr
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   and r.status = Success
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   and Registry.responseLog&amp;#39; = Registry.responseLog + idempotencyKey -&amp;gt; r
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ )
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;  or (
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;-  some Registry.currentAssessmentData[at]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;-  and adr.previousSource = Registry.currentAssessmentData[at]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  some Registry.responseLog[idempotencyKey]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and Registry.currentAssessmentData&amp;#39; = Registry.currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and Registry.currentParameterSet&amp;#39; = Registry.currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and Registry.responseLog&amp;#39; = Registry.responseLog
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;  )
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;- Registry.currentAssessmentData&amp;#39; = Registry.currentAssessmentData ++ at -&amp;gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;- Registry.currentParameterSet&amp;#39; = Registry.currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;-pred registerParameterSet[at: AssessmentTarget, psr: ParameterSetRevision] {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;- (no Registry.currentParameterSet[at] and no psr.previousSource)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+pred registerParameterSet[
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ psr: ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ params: ParameterSet,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ idempotencyKey: HashKey
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+] {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  psr.parameterSet = params
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ (
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  no Registry.responseLog[idempotencyKey]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and (
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   (no Registry.currentParameterSet[at] and no psr.previousSource)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   or (
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    some Registry.currentParameterSet[at]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    and psr.previousSource = Registry.currentParameterSet[at]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   )
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  )
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and Registry.currentAssessmentData&amp;#39; = Registry.currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and Registry.currentParameterSet&amp;#39; = Registry.currentParameterSet ++ at -&amp;gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and some r: Response |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   r.revision = psr
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   and r.status = Success
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   and Registry.responseLog&amp;#39; = Registry.responseLog + idempotencyKey -&amp;gt; r
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ )
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;  or (
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;-  some Registry.currentParameterSet[at]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;-  and psr.previousSource = Registry.currentParameterSet[at]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  some Registry.responseLog[idempotencyKey]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and Registry.currentAssessmentData&amp;#39; = Registry.currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and Registry.currentParameterSet&amp;#39; = Registry.currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and Registry.responseLog&amp;#39; = Registry.responseLog
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;  )
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;- Registry.currentAssessmentData&amp;#39; = Registry.currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;- Registry.currentParameterSet&amp;#39; = Registry.currentParameterSet ++ at -&amp;gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; pred stutter {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;  Registry.currentAssessmentData&amp;#39; = Registry.currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;  Registry.currentParameterSet&amp;#39; = Registry.currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ Registry.responseLog&amp;#39; = Registry.responseLog
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; pred step {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;  stutter
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;- or (some at: AssessmentTarget, adr: AssessmentDataRevision | registerAssessmentData[at, adr])
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;- or (some at: AssessmentTarget, psr: ParameterSetRevision | registerParameterSet[at, psr])
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ or (some at: AssessmentTarget, adr: AssessmentDataRevision, data: AssessmentData, hk: HashKey |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  registerAssessmentData[at, adr, data, hk])
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ or (some at: AssessmentTarget, psr: ParameterSetRevision, params: ParameterSet, hk: HashKey |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  registerParameterSet[at, psr, params, hk])
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; fact traces {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;@@ -171,20 +226,22 @@ check SR003_new_version_on_change for 2 but 1..3 steps
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; pred SR003_assessment_update {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;  eventually (some at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;-  source, newRevision: AssessmentDataRevision |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  source, newRevision: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  data: AssessmentData, hk: HashKey |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;   Registry.currentAssessmentData[at] = source
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;-  and source.assessmentData != newRevision.assessmentData
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and source.assessmentData != data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;   and newRevision.previousSource = source
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;-  and registerAssessmentData[at, newRevision])
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and registerAssessmentData[at, newRevision, data, hk])
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; pred SR003_parameter_update {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;  eventually (some at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;-  source, newRevision: ParameterSetRevision |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  source, newRevision: ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  params: ParameterSet, hk: HashKey |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;   Registry.currentParameterSet[at] = source
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;-  and source.parameterSet != newRevision.parameterSet
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and source.parameterSet != params
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;   and newRevision.previousSource = source
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;-  and registerParameterSet[at, newRevision])
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  and registerParameterSet[at, newRevision, params, hk])
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; run SR003_assessment_update
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;@@ -214,6 +271,51 @@ run SR004_revision_chain
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;  exactly 2 ParameterSetRevisionId,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;  1..2 steps
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+// SR005: Idempotency - same HashKey (idempotency key) returns same response
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+assert SR005_idempotency {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ always (
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  all hk: HashKey |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   (some Registry.responseLog[hk]) implies always Registry.responseLog[hk] = Registry.responseLog&amp;#39;[hk]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ )
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+check SR005_idempotency for 2 but 1..3 steps
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+pred SR005_assessment_data_retry_returns_same_response {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ some at: AssessmentTarget, adr: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  data: AssessmentData, hk: HashKey, r: Response |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  eventually (
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   no Registry.responseLog[hk]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   and registerAssessmentData[at, adr, data, hk]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   and Registry.responseLog&amp;#39;[hk] = r
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   and after (
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    Registry.responseLog[hk] = r
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    and registerAssessmentData[at, adr, data, hk]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    and Registry.responseLog&amp;#39;[hk] = r
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   )
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  )
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+pred SR005_parameter_set_retry_returns_same_response {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ some at: AssessmentTarget, psr: ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  params: ParameterSet, hk: HashKey, r: Response |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  eventually (
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   no Registry.responseLog[hk]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   and registerParameterSet[at, psr, params, hk]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   and Registry.responseLog&amp;#39;[hk] = r
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   and after (
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    Registry.responseLog[hk] = r
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    and registerParameterSet[at, psr, params, hk]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+    and Registry.responseLog&amp;#39;[hk] = r
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+   )
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+  )
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+run SR005_assessment_data_retry_returns_same_response
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ for 2 but 1 AssessmentTarget, 1..3 steps
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+run SR005_parameter_set_retry_returns_same_response
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+ for 2 but 1 AssessmentTarget, 1..3 steps
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt; /*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     6. Sanity
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;var responseLog: HashKey -&amp;gt; lone Response&lt;/code&gt; の右辺が&lt;code&gt;one&lt;/code&gt;ではなく&lt;code&gt;lone&lt;/code&gt;なのは、データが未登録の状況を表現するため。
実装時における冪等性保証を助けるために、リクエストには&lt;a href=&#34;https://datatracker.ietf.org/doc/draft-ietf-httpapi-idempotency-key-header/07/&#34;&gt;idempotency key&lt;/a&gt;を使う想定。
このkeyの計算には、親とする版のIDも含める必要がある。
始めはAssessmentDataなどの&lt;strong&gt;内容の&lt;/strong&gt;みからkeyを生成して、同一の内容の登録リクエストは拒否してしまおうと考えていたが、そうすると履歴の復元: 内容が同じデータの再登録の時に不都合が出そう。&lt;/p&gt;
&lt;p&gt;ともあれ、同一性の定義については詳細設計に回すとして、ひとまず次に進む。&lt;/p&gt;
&lt;p&gt;Execute All:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;10 commands were executed. The results are:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #1: Instance found. SR001_registration is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #2: Instance found. SR002_content_stability is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #3: No counterexample found. SR003_new_version_on_change may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #4: Instance found. SR003_assessment_update is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #5: Instance found. SR003_parameter_update is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #6: Instance found. SR004_revision_chain is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #7: No counterexample found. SR005_idempotency may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #8: Instance found. SR005_assessment_retry is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #9: Instance found. SR005_parameter_retry is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #10: Instance found. run$10 is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;↑OK :white_check_mark&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-07-29-data/sr005.webp&#34;
    alt=&#34;SR005を満たすケースの一例&#34;&gt;&lt;figcaption&gt;
      &lt;p&gt;SR005を満たすケースの一例&lt;/p&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;↑同一のHashKeyとともに何度リクエストしても、Revisionは変化しない様子が示されている。&lt;/p&gt;
&lt;h3 id=&#34;sr006-取得可能性&#34;&gt;SR006: 取得可能性&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;SR006: 登録処理が成功した場合、取得APIから登録された版の内容を取得できなければならない&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;この要件は「成功レスポンスがあるならRevisionが存在する」として表現する:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-diff:moodel.als&#34; data-lang=&#34;diff:moodel.als&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; Registry &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; currentAssessmentData: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; currentParameterSet: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; registeredAssessmentData: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;set&lt;/span&gt; AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; registeredParameterSet: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;set&lt;/span&gt; ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#586e75&#34;&gt;// SR005: Track responses by HashKey (idempotency key) for idempotency verification&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; responseLog: HashKey &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; Response
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@@ &lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;89&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;91&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;8&lt;/span&gt; @@ &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; Registry &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; init &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@@ &lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;109&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;113&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;8&lt;/span&gt; @@ &lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData &lt;span style=&#34;color:#719e07&#34;&gt;++&lt;/span&gt; at &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; at &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; r: Response &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;revision &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;status &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Success
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@@ &lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;118&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;124&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;8&lt;/span&gt; @@ &lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;idempotencyKey&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@@ &lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;138&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;146&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;8&lt;/span&gt; @@ &lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; registerParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet &lt;span style=&#34;color:#719e07&#34;&gt;++&lt;/span&gt; at &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; at &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; r: Response &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;revision &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;status &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Success
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@@ &lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;147&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;157&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;8&lt;/span&gt; @@ &lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; registerParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;idempotencyKey&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@@ &lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;154&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;166&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;8&lt;/span&gt; @@ &lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; registerParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; stutter &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@@ &lt;span style=&#34;color:#719e07&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;316&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;330&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;47&lt;/span&gt; @@ &lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR005_assessment_retry
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR005_parameter_retry
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR006: After successful registration, the registered version must be retrievable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// If response is logged as successful, the revision must remain registered&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;assert&lt;/span&gt; SR006_retrievability &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;always&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; hk: HashKey, r: Response &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;status &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Success&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;implies&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, adr: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;     r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;revision &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; adr &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, psr: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;     r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;revision &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; psr &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;check&lt;/span&gt; SR006_retrievability &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR006_registered_assessment_data_can_be_retrieved &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, adr: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  hk: HashKey, r: Response &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;status &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Success
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;revision &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; adr &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR006_registered_parameter_set_can_be_retrieved &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, psr: ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  hk: HashKey, r: Response &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;status &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Success
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;revision &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; psr &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR006_registered_assessment_data_can_be_retrieved
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR006_registered_parameter_set_can_be_retrieved
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     6. Sanity
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Execute All:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;13 commands were executed. The results are:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #1: Instance found. SR001_registration is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #2: Instance found. SR002_content_stability is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #3: No counterexample found. SR003_new_version_on_change may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #4: Instance found. SR003_assessment_update is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #5: Instance found. SR003_parameter_update is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #6: Instance found. SR004_revision_chain is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #7: No counterexample found. SR005_idempotency may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #8: Instance found. SR005_assessment_retry is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #9: Instance found. SR005_parameter_retry is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #10: No counterexample found. SR006_retrievability may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #11: Instance found. SR006_assessment_retrieval is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #12: Instance found. SR006_parameter_retrieval is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #13: Instance found. run$13 is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;↑OK &amp;#x2705;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SR006&lt;/code&gt;の例示結果は&lt;code&gt;SR005&lt;/code&gt;と変わらなかった。&lt;/p&gt;
&lt;h3 id=&#34;sr007-取得可能性その2&#34;&gt;SR007: 取得可能性その2&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;R007: 版を指定した取得要求には、その版に記録された内容を返さなければならない&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;これは原理的には&lt;code&gt;SR001&lt;/code&gt;と&lt;code&gt;SR002&lt;/code&gt;で既に満たされている:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-diff:moodel.als&#34; data-lang=&#34;diff:moodel.als&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR006_parameter_retrieval
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR007: Retrieval requests return the contents recorded in that version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// (Automatically satisfied because revision content is immutable)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR007_assessment_data_can_be_retrieved_by_revision &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, adr: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  data: AssessmentData &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  adr &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; data &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR007_parameter_set_can_be_retrieved_by_revision &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, psr: ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  params: ParameterSet &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  psr &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; params &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR007_assessment_data_can_be_retrieved_by_revision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR007_parameter_set_can_be_retrieved_by_revision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     6. Sanity
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;実際の挙動がこれを満たすようにするのは実装時の責任。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;15 commands were executed. The results are:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #1: Instance found. SR001_registration is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #2: Instance found. SR002_content_stability is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #3: No counterexample found. SR003_new_version_on_change may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #4: Instance found. SR003_assessment_update is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #5: Instance found. SR003_parameter_update is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #6: Instance found. SR004_revision_chain is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #7: No counterexample found. SR005_idempotency may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #8: Instance found. SR005_assessment_retry is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #9: Instance found. SR005_parameter_retry is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #10: No counterexample found. SR006_retrievability may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #11: Instance found. SR006_assessment_retrieval is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #12: Instance found. SR006_parameter_retrieval is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #13: Instance found. SR007_assessment_by_revision is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #14: Instance found. SR007_parameter_by_revision is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #15: Instance found. run$15 is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;↑OK &amp;#x2705;&lt;/p&gt;
&lt;p&gt;今回の変更も、モデルに構造的な変化はなかった。&lt;/p&gt;
&lt;h3 id=&#34;sr008-最新版の参照&#34;&gt;SR008: 最新版の参照&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;SR008 評価データおよびパラメータセットは、それぞれ高々1つの最新版を持たなければならない&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;この要件は、既に&lt;code&gt;Registry&lt;/code&gt;の設計レベルで保証されている。
保証しているのは、下記&lt;code&gt;current-&lt;/code&gt;の&lt;code&gt;lone&lt;/code&gt;参照だ:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-alloy&#34; data-lang=&#34;alloy&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; Registry &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; Registry &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; currentAssessmentData: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; currentParameterSet: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; registeredAssessmentData: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;set&lt;/span&gt; AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; registeredParameterSet: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;set&lt;/span&gt; ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;// SR005: Track responses by HashKey (idempotency key) for idempotency verification&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; responseLog: HashKey &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; Response
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一応、ここでも正常ケースを例示しておく:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-diff:moodel.als&#34; data-lang=&#34;diff:moodel.als&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR007_parameter_by_revision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR008: AssessmentData and ParameterSet each have at most one current revision&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// (Enforced by the lone multiplicity of the current revision fields)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR008_assessment_data_has_one_current_among_registered_revisions &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;disj&lt;/span&gt; previousRevision, currentRevision: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  previousRevision &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; currentRevision &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; currentRevision&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR008_parameter_set_has_one_current_among_registered_revisions &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;disj&lt;/span&gt; previousRevision, currentRevision: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  previousRevision &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; currentRevision &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; currentRevision&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR008_assessment_data_has_one_current_among_registered_revisions
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR008_parameter_set_has_one_current_among_registered_revisions
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     6. Sanity
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Execute All:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;17 commands were executed. The results are:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #1: Instance found. SR001_registration is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #2: Instance found. SR002_content_stability is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #3: No counterexample found. SR003_new_version_on_change may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #4: Instance found. SR003_assessment_update is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #5: Instance found. SR003_parameter_update is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #6: Instance found. SR004_revision_chain is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #7: No counterexample found. SR005_idempotency may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #8: Instance found. SR005_assessment_retry is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #9: Instance found. SR005_parameter_retry is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #10: No counterexample found. SR006_retrievability may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #11: Instance found. SR006_assessment_retrieval is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #12: Instance found. SR006_parameter_retrieval is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #13: Instance found. SR007_assessment_by_revision is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #14: Instance found. SR007_parameter_by_revision is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #15: Instance found. SR008_assessment_current is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #16: Instance found. SR008_parameter_current is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #17: Instance found. run$17 is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;↑ OK &amp;#x2705;&lt;/p&gt;
&lt;p&gt;正常系を図示する:
&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-07-29-data/sr008.webp&#34;
    alt=&#34;SR008を満たすケースの一例&#34;&gt;&lt;figcaption&gt;
      &lt;p&gt;SR008を満たすケースの一例&lt;/p&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

↑この例では、RegistryはAssessmentDataRevision0を最新版として参照している。&lt;/p&gt;
&lt;h3 id=&#34;sr009-登録成功後の最新版の参照&#34;&gt;SR009: 登録成功後の最新版の参照&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;SR009: 新しい版の登録成功後、最新版は新しい版を指さなければならない&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;この要件は、&lt;code&gt;registerAssessmentData&lt;/code&gt; などのpredの定義で保証済み。
具体的には下記の部分だ:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-alloy&#34; data-lang=&#34;alloy&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at: AssessmentTarget, assessmentData: AssessmentData, idempotencyKey: HashKey&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; adr: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  idempotencyKey &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  adr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; assessmentData &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; at &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; adr &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; r: Response &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;revision &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;status &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Success &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; idempotencyKey &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; r
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この定義は、例えば下記のような状況を表現している:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;AssessmentTarget&lt;/code&gt;が&lt;code&gt;2026年度カタクチ太平洋&lt;/code&gt;、&lt;code&gt;currentAssessmentData&lt;/code&gt;が&lt;code&gt;someRevisionHash&lt;/code&gt;に紐づくデータである状態&lt;/li&gt;
&lt;li&gt;新しい登録リクエストが届く: 「&lt;code&gt;2026年度カタクチ太平洋&lt;/code&gt;、&lt;code&gt;新しいassessmentData&lt;/code&gt;、&lt;code&gt;新しいidempotency key&lt;/code&gt;」&lt;/li&gt;
&lt;li&gt;&lt;code&gt;newRevisionHash&lt;/code&gt;と紐づいた&lt;code&gt;currentAssessmentData&lt;/code&gt;が&lt;code&gt;2026年度のカタクチ太平洋&lt;/code&gt;の最新版として保持される&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ここでも正常系を明示的に例示してみる:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-diff:model.als&#34; data-lang=&#34;diff:model.als&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR008_parameter_current
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR009: Successful registration makes the new revision current&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR009_assessment_advance &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;disj&lt;/span&gt; previousRevision, newRevision: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  data: AssessmentData, hk: HashKey &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; previousRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; previousRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, newRevision, data, hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR009_parameter_advance &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;disj&lt;/span&gt; previousRevision, newRevision: ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  params: ParameterSet, hk: HashKey &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; previousRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; previousRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; registerParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, newRevision, params, hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR009_assessment_advance
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR009_parameter_advance
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     6. Sanity
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;     ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Execute Allはall green &amp;#x2705;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src=&#34;https://rindrics.com/images/2026-07-29-data/sr009.webp&#34;
    alt=&#34;SR009を満たすケースの一例&#34;&gt;&lt;figcaption&gt;
      &lt;p&gt;SR009を満たすケースの一例&lt;/p&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

こちらも、モデルに構造的な変化は見られないように思う。&lt;/p&gt;
&lt;h3 id=&#34;sr010-不変性その3&#34;&gt;SR010: 不変性その3&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;SR010: 新しい版が登録されても、過去の版を変更または削除してはならない&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;こちらは実装の責任なのでモデル検証はスキップ。&lt;/p&gt;
&lt;h3 id=&#34;モデル全体&#34;&gt;モデル全体&lt;/h3&gt;
&lt;p&gt;ここまでの検証で、Alloyのコード全体は最終的に下記のようになった:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-alloy:model.als&#34; data-lang=&#34;alloy:model.als&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;module&lt;/span&gt; DataRegistry
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;    1. System Requirements
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;    ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR001: Each AssessmentData and ParameterSet should be managed through revisions.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR002: The contents of a revision should not be modified after registration.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR003: When modifying AssessmentData or ParameterSet, a new version must be created instead of updating the existing version.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR004: A new version must reference exactly zero or one previous version as its source.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR005: For registration requests with identical IdempotencyKey, the same result must be returned without creating duplicate versions.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR006: After successful registration, the registered version must be retrievable via the retrieval API.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR007: Retrieval requests specifying a version must return the contents recorded in that version.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR008: AssessmentData and ParameterSet must each have at most one current version.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR009: After successful registration of a new version, the current version must point to the new version.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR010: Past versions must not be modified or deleted even after a new version is registered.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;    2. Domain
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;    ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; Resource &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AnnualAssessment &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; resource: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; Resource,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    year: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; AnnualAssessment
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AssessmentData &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; ParameterSet &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;abstract&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; RevisionId &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AssessmentDataRevisionId, ParameterSetRevisionId &lt;span style=&#34;color:#719e07&#34;&gt;extends&lt;/span&gt; RevisionId &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; HashKey &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;abstract&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; Status &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; Success, Failure &lt;span style=&#34;color:#719e07&#34;&gt;extends&lt;/span&gt; Status &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; Response &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; revision: &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; ParameterSetRevision&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; status: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; Status
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR002: Each revision has unique identifier&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; id: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; AssessmentDataRevisionId,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; assessmentData: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; AssessmentData,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; previousSource: &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; AssessmentDataRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; id: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; ParameterSetRevisionId,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; parameterSet: &lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; ParameterSet,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; previousSource: &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; ParameterSetRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR002: Unique identifier enforcement&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;fact&lt;/span&gt; revisionIdUniqueAssessmentData &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; adr1, adr2: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  adr1&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr2&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;implies&lt;/span&gt; adr1 &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;fact&lt;/span&gt; revisionIdUniqueParameterSet &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; psr1, psr2: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  psr1&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr2&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#719e07&#34;&gt;implies&lt;/span&gt; psr1 &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;fact&lt;/span&gt; noCyclicSource &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; adr: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt; adr not &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; adr&lt;span style=&#34;color:#719e07&#34;&gt;.^&lt;/span&gt;previousSource
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; psr: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt; psr not &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; psr&lt;span style=&#34;color:#719e07&#34;&gt;.^&lt;/span&gt;previousSource
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;    3. State
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;    ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;one&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sig&lt;/span&gt; Registry &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; currentAssessmentData: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; currentParameterSet: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; registeredAssessmentData: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;set&lt;/span&gt; AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; registeredParameterSet: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;set&lt;/span&gt; ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#586e75&#34;&gt;// SR005: Track responses by HashKey (idempotency key) for idempotency verification&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;var&lt;/span&gt; responseLog: HashKey &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;lone&lt;/span&gt; Response
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;    4. Operations
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;    ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; init &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR005: Log response by idempotency key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; adr: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; idempotencyKey: HashKey
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;idempotencyKey&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; adr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; adr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData &lt;span style=&#34;color:#719e07&#34;&gt;++&lt;/span&gt; at &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; at &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; r: Response &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;revision &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;status &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Success
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; idempotencyKey &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; r
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;idempotencyKey&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; registerParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; psr: ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; idempotencyKey: HashKey
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;idempotencyKey&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; psr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; psr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet &lt;span style=&#34;color:#719e07&#34;&gt;++&lt;/span&gt; at &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; at &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; r: Response &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;revision &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;status &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Success
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; idempotencyKey &lt;span style=&#34;color:#719e07&#34;&gt;-&amp;gt;&lt;/span&gt; r
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;idempotencyKey&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; stutter &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; step &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; stutter
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, adr: AssessmentDataRevision, hk: HashKey &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, adr, hk&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, psr: ParameterSetRevision, hk: HashKey &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  registerParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, psr, hk&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;fact&lt;/span&gt; traces &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; init
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;always&lt;/span&gt; step
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;    5. Properties
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;    ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR001: At most one current version per AssessmentTarget&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// (Automatically satisfied by Registry definition: lone AssessmentDataRevision)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR001_registration &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, adr: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  psr: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR001_registration &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR002: The contents of a revision should not be modified after registration.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// (Automatically satisfied by definition)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR002_content_stability &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  adr: AssessmentDataRevision, psr: ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  data: AssessmentData, params: ParameterSet &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; adr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; data
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; psr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; params
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;after&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; adr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; data
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; psr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; params
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR002_content_stability
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR003: When modifying, a new version must be created instead of updating the existing version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;assert&lt;/span&gt; SR003_new_version_on_change &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;always&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; at: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;implies&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]).~&lt;/span&gt;previousSource&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; at: AssessmentTarget &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;implies&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]).~&lt;/span&gt;previousSource&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;check&lt;/span&gt; SR003_new_version_on_change &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR003_assessment_update &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  source, newRevision: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  hk: HashKey &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; source
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; source&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData &lt;span style=&#34;color:#719e07&#34;&gt;!=&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; source
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, newRevision, hk&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR003_parameter_update &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  source, newRevision: ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  hk: HashKey &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; source
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; source&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet &lt;span style=&#34;color:#719e07&#34;&gt;!=&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; source
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; registerParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, newRevision, hk&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR003_assessment_update
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR003_parameter_update
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR004: Each revision can reference exactly zero or one previous version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// (Enforced by previousSource: lone field definition - no explicit assertion needed)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR004_revision_chain &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; rootAdr, derivedAdr: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  rootPsr, derivedPsr: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  rootAdr &lt;span style=&#34;color:#719e07&#34;&gt;!=&lt;/span&gt; derivedAdr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; rootAdr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; derivedAdr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; rootAdr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; rootPsr &lt;span style=&#34;color:#719e07&#34;&gt;!=&lt;/span&gt; derivedPsr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; rootPsr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; derivedPsr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; rootPsr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR004_revision_chain
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;exactly&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;exactly&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;exactly&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; AssessmentDataRevisionId,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;exactly&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; ParameterSetRevisionId,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR005: Idempotency - same HashKey (idempotency key) returns same response&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;assert&lt;/span&gt; SR005_idempotency &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;always&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; hk: HashKey &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;implies&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;always&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;check&lt;/span&gt; SR005_idempotency &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR005_assessment_retry &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, adr: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  hk: HashKey, r: Response &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, adr, hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;after&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, adr, hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR005_parameter_retry &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, psr: ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  hk: HashKey, r: Response &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; registerParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, psr, hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;after&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; registerParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, psr, hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR005_assessment_retry
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR005_parameter_retry
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR006: After successful registration, the registered version must be retrievable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// If response is logged as successful, the revision must remain registered&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;assert&lt;/span&gt; SR006_retrievability &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;always&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;all&lt;/span&gt; hk: HashKey, r: Response &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;status &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Success&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;implies&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, adr: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;revision &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; adr &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;or&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, psr: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;revision &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; psr &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;check&lt;/span&gt; SR006_retrievability &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR006_assessment_retrieval &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, adr: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  hk: HashKey, r: Response &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;status &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Success
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;revision &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; adr &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR006_parameter_retrieval &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, psr: ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  hk: HashKey, r: Response &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; r
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;status &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; Success
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; r&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;revision &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; psr &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR006_assessment_retrieval
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR006_parameter_retrieval
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR007: Retrieval requests return the contents recorded in that version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// (Automatically satisfied because revision content is immutable)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR007_assessment_by_revision &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, adr: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  data: AssessmentData &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  adr &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; data &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; adr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;assessmentData&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR007_parameter_by_revision &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget, psr: ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  params: ParameterSet &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  psr &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; params &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; psr&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;parameterSet&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR007_assessment_by_revision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR007_parameter_by_revision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR008: AssessmentData and ParameterSet each have at most one current revision&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// (Enforced by the lone multiplicity of the current revision fields)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR008_assessment_current &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;disj&lt;/span&gt; previousRevision, currentRevision: AssessmentDataRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  previousRevision &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; currentRevision &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; currentRevision&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR008_parameter_current &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;disj&lt;/span&gt; previousRevision, currentRevision: ParameterSetRevision &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  previousRevision &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; currentRevision &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; currentRevision&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR008_assessment_current
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR008_parameter_current
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR009: Successful registration makes the new revision current&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR009_assessment_advance &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;disj&lt;/span&gt; previousRevision, newRevision: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  hk: HashKey &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; previousRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; previousRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, newRevision, hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR009_parameter_advance &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;disj&lt;/span&gt; previousRevision, newRevision: ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  hk: HashKey &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; previousRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; previousRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; registerParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, newRevision, hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR009_assessment_advance
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR009_parameter_advance
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// SR010: Past versions must not be modified or deleted even after a new version is registered&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;// (Automatically satisfied by operation design: registerAssessmentData/registerParameterSet only extend&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;//  the mapping with new versions; they never modify or remove existing entries)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR010_assessment_history &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;disj&lt;/span&gt; previousRevision, newRevision: AssessmentDataRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  hk: HashKey &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; previousRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; previousRevision &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; previousRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; registerAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, newRevision, hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; previousRevision &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; newRevision &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentAssessmentData&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;pred&lt;/span&gt; SR010_parameter_history &lt;span style=&#34;color:#719e07&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;eventually&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;some&lt;/span&gt; at: AssessmentTarget,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;disj&lt;/span&gt; previousRevision, newRevision: ParameterSetRevision,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  hk: HashKey &lt;span style=&#34;color:#719e07&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; previousRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; previousRevision &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;previousSource &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; previousRevision
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;no&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;responseLog&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; registerParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;[&lt;/span&gt;at, newRevision, hk&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; previousRevision &lt;span style=&#34;color:#719e07&#34;&gt;+&lt;/span&gt; newRevision &lt;span style=&#34;color:#719e07&#34;&gt;in&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;registeredParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#719e07&#34;&gt;and&lt;/span&gt; Registry&lt;span style=&#34;color:#719e07&#34;&gt;.&lt;/span&gt;currentParameterSet&lt;span style=&#34;color:#719e07&#34;&gt;&amp;#39;[&lt;/span&gt;at&lt;span style=&#34;color:#719e07&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;=&lt;/span&gt; newRevision&lt;span style=&#34;color:#719e07&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR010_assessment_history
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; SR010_parameter_history
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt; AssessmentTarget, &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;/*  ============================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;    6. Sanity
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#586e75&#34;&gt;    ============================================================ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;run&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;{}&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;but&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#719e07&#34;&gt;..&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#719e07&#34;&gt;steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Execute Allの結果:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;21 commands were executed. The results are:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #1: Instance found. SR001_registration is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #2: Instance found. SR002_content_stability is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #3: No counterexample found. SR003_new_version_on_change may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #4: Instance found. SR003_assessment_update is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #5: Instance found. SR003_parameter_update is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #6: Instance found. SR004_revision_chain is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #7: No counterexample found. SR005_idempotency may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #8: Instance found. SR005_assessment_retry is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #9: Instance found. SR005_parameter_retry is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #10: No counterexample found. SR006_retrievability may be valid.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #11: Instance found. SR006_assessment_retrieval is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #12: Instance found. SR006_parameter_retrieval is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #13: Instance found. SR007_assessment_by_revision is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #14: Instance found. SR007_parameter_by_revision is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #15: Instance found. SR008_assessment_current is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #16: Instance found. SR008_parameter_current is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #17: Instance found. SR009_assessment_advance is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #18: Instance found. SR009_parameter_advance is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #19: Instance found. SR010_assessment_history is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #20: Instance found. SR010_parameter_history is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   #21: Instance found. run$21 is consistent.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;↑ OK &amp;#x2705;&lt;/p&gt;
&lt;h2 id=&#34;学んだこと&#34;&gt;学んだこと&lt;/h2&gt;
&lt;p&gt;今回は反省点が多い。
途中から雲行きの怪しさを感じていた。
まとめると下記だ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要件定義が雑すぎた&lt;/li&gt;
&lt;li&gt;スコープを決めていなかった&lt;/li&gt;
&lt;li&gt;進め方の戦略がなかった&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;要件定義が雑すぎた&#34;&gt;要件定義が雑すぎた&lt;/h3&gt;
&lt;p&gt;一つ一つの要件の検証にかなり時間をかけているわけだが、そもそもそれぞれの要件自体の吟味が足りていないかった。要件をかっちり決める手法として、昔（確か2022年くらい）&lt;a href=&#34;https://www.shoeisha.co.jp/book/detail/9784798146522&#34;&gt;この本&lt;/a&gt;を読んだことでICONIXを知ったのだが、当時は重厚すぎるような印象を持っていた。&lt;/p&gt;
&lt;p&gt;今回設計しているdata-registryは、&lt;a href=&#34;https://rindrics.com/articles/stock-assess-api-contract-postmortem/#:~:text=data%20service%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E7%8B%AC%E7%AB%8B%E3%81%97%E3%81%9F%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%AB%E6%80%9D%E3%82%8F%E3%82%8C%E3%82%8B&#34;&gt;構想当時&lt;/a&gt;にはとてもシンプルなものという見立てだったが、少し設計してみると考えるべきことがどんどん出てくる（なお今、この設計でも観点が全然足りていないだろう）。&lt;/p&gt;
&lt;h3 id=&#34;スコープを決めていなかった&#34;&gt;スコープを決めていなかった&lt;/h3&gt;
&lt;p&gt;今回は合計で10要件を検証したように書いているが、実は途中でどんどん要件が増えてしまい、最終的に20を超えてしまっていた。
収集がつかなくなりそうだったので、記事としてはいったん10の要件で一区切りとすることにした。
ちなみに区切りとするために捨てた機能は「アーカイブ」「物理削除」「外部公開」の三つ。
非機能要件としては並行性への対処を無視している。
時間の関係から、そもそも「機能」「スコープ」について言及していない内容になってしまったが、このやり方は是非真似しないでほしい（？）。&lt;/p&gt;
&lt;h3 id=&#34;進め方の戦略がなかった&#34;&gt;進め方の戦略がなかった&lt;/h3&gt;
&lt;p&gt;これは上記二つの反省点と同列ではなく、より上位の観点にある。
Alloyで検証することが決まっているような形で走り始めてしまったため、Alloyでの検証に向かないような要件が出てきたときに管理できなくなった。
今後の管理を考えると、サービスごとにユースケース・要求・要件にIDをふってドキュメント化しておくといいかもしれない。
そろそろカンバンを作るか。&lt;/p&gt;
&lt;p&gt;・・・&lt;/p&gt;
&lt;p&gt;反省点は多いし、設計にまだ穴もあるだろうが、そろそろ動くものを作りたい。
いや、その前に冪等性の定義とDB設計があるか。&lt;/p&gt;
&lt;p&gt;作業の進捗としてはこんな感じだろうか:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; API契約を書く&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; ルーティングの動作確認&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; db セットアップ&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; リポジトリ・ハンドラの実装&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;del&gt;datasetVersion生成ロジックの設計&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; API基本設計&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Revision生成ロジックの設計&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; データベース設計&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; リファクタリング&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; エラーハンドリングの追加&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;つづく&lt;/p&gt;
&lt;h2 id=&#34;参考情報&#34;&gt;参考情報&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Geewax (2022)『APIデザインパターン』マイナビ出版&lt;/li&gt;
&lt;/ul&gt;









&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;たまたま『&lt;a href=&#34;https://book.mynavi.jp/ec/products/detail/id=131252&#34;&gt;APIデザインパターン&lt;/a&gt;』を読んでいたのだった。第28章「リソースリビジョン」がドンピシャの内容だった&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;『抽象によるソフトウェア設計』でも解説されており、特異な例を見つけるのに有用とされている。それはたしかにそうかも。ちなみに、このAlloyの挙動を決めているのは解析エンジンの挙動。私の環境ではSAT4Jソルバーだったので、SAT4Jのコードを見てみたところ、&lt;a href=&#34;https://gitlab.ow2.org/sat4j/sat4j/-/commit/b0f351ab54a30fa9cb787e2a197954a700da5872?file_path=org.sat4j.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fsat4j%2Fminisat%2Forders%2FSolutionPhaseSelectionStrategy.java#line_0f73d4584_A60&#34;&gt;この部分&lt;/a&gt;によって、解決フェーズでまず&lt;code&gt;false&lt;/code&gt;が試されそうだった&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;Alloyによる探索が有限スコープなのは実用観点で脇に置いておく&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>ユビキタス言語でデータ登録サービスを整理する</title>
      <link>https://rindrics.com/articles/stock-assess-data-registry-ubiquitous-language/</link>
      <pubDate>Sat, 01 Aug 2026 00:00:00 +0900</pubDate>
      
      <guid>https://rindrics.com/articles/stock-assess-data-registry-ubiquitous-language/</guid>
      <description>&lt;p&gt;アプリケーションの設計を実際の資源評価事業のメンタルモデルが反映されたものにするために、資源評価事業で使うユビキタス言語を整理した。&lt;/p&gt;
&lt;h2 id=&#34;はじめに&#34;&gt;はじめに&lt;/h2&gt;
&lt;p&gt;ユビキタス言語がないと、アプリケーションの仕様をちゃんとモデリングできない。
例えばこの記事を書いた時点では&lt;a href=&#34;../stock-assess-data-registry-1/&#34;&gt;データ登録サービス&lt;/a&gt;を作っていて、設計中に「データ」や「データセット」などの表現が混在してしまっていた。
設計を整理する中で「メタデータ」なる表現も出てきたが、資源評価担当者だった当時を振り返っても、こんな表現を使ったことは一度もなかったように思う。&lt;/p&gt;
&lt;p&gt;データ登録サービスを開発しようとしている現時点に限って言えば、いま必要なのは&lt;a href=&#34;https://www.fra.go.jp/shigen/fisheries_resources/meeting/stock_assessment_meeting/2019-2022/files/glossary20190610.pdf&#34;&gt;水産研究・教育機構が掲載している &amp;ldquo;用語集&amp;rdquo;&lt;/a&gt;にあるような、評価・管理観点の用語ではなく、データを扱う評価担当者が使っている用語だ。
それゆえに対外的に公表されにくい&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;p&gt;ということで、本記事ではデータ登録サービスのユビキタス言語を整理していく。&lt;/p&gt;
&lt;h2 id=&#34;設計に必要な用語の種類&#34;&gt;設計に必要な用語の種類&lt;/h2&gt;
&lt;p&gt;用語の整理は、下記二つに分類する:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ドメイン語彙（ユビキタス言語）: 業務で実際に使われているもの&lt;/li&gt;
&lt;li&gt;モデル語彙: 業務で使われることはないが、期待される動作を実現するためにモデリング上必要な語彙&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;前者は問題空間の用語、後者は解決空間の用語。&lt;/p&gt;
&lt;h3 id=&#34;ドメイン語彙&#34;&gt;ドメイン語彙&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;用語&lt;/th&gt;
          &lt;th&gt;形式言語内での表現&lt;/th&gt;
          &lt;th&gt;意味&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;資源&lt;/td&gt;
          &lt;td&gt;Resource&lt;/td&gt;
          &lt;td&gt;評価対象となる種名と系群の組。例：「カタクチイワシ・太平洋系群」。日常会話では「カタクチ太平洋」のように略して呼ぶことがある&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;年度評価&lt;/td&gt;
          &lt;td&gt;AnnualAssessment&lt;/td&gt;
          &lt;td&gt;特定の年度に実施する資源評価。例：「2026年度評価」&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;評価対象&lt;/td&gt;
          &lt;td&gt;AssessmentTarget&lt;/td&gt;
          &lt;td&gt;年度評価と資源の組。例：「2026年度のカタクチ太平洋」&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;評価データ&lt;/td&gt;
          &lt;td&gt;AssessmentData&lt;/td&gt;
          &lt;td&gt;年度評価で利用するデータ。例：年齢別漁獲尾数、年齢別体重、年齢別成熟率&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;パラメータセット&lt;/td&gt;
          &lt;td&gt;ParameterSet&lt;/td&gt;
          &lt;td&gt;評価計算で使用するパラメータの集合&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;シナリオ&lt;/td&gt;
          &lt;td&gt;Scenario&lt;/td&gt;
          &lt;td&gt;評価作業中に比較・検討する論理的な単位。例：「昨年度踏襲」「手法A検討用」。シナリオは、使用する評価データやパラメータセットを参照する&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;版&lt;/td&gt;
          &lt;td&gt;Revision&lt;/td&gt;
          &lt;td&gt;評価データまたはパラメータセットの不変なスナップショット。内容を修正するときは、既存の版を変更せず、新しい版を作成する&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;最新版&lt;/td&gt;
          &lt;td&gt;CurrentRevision&lt;/td&gt;
          &lt;td&gt;評価データまたはパラメータセットについて、現在使用するものとして選択されている版&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;外部公開&lt;/td&gt;
          &lt;td&gt;Publish&lt;/td&gt;
          &lt;td&gt;評価データまたはパラメータセットの特定の版を、組織外から利用可能な状態にすること&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;モデル語彙&#34;&gt;モデル語彙&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;用語&lt;/th&gt;
          &lt;th&gt;形式言語内での表現&lt;/th&gt;
          &lt;th&gt;意味&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;アーカイブ&lt;/td&gt;
          &lt;td&gt;Archive&lt;/td&gt;
          &lt;td&gt;評価データ、パラメータセットまたはシナリオを通常の利用対象から外すこと。版の内容は保持する&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;物理削除&lt;/td&gt;
          &lt;td&gt;Erase&lt;/td&gt;
          &lt;td&gt;機密情報の誤登録などに対応するため、版に記録された内容そのものを削除すること&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;登録要求識別子&lt;/td&gt;
          &lt;td&gt;IdempotencyKey&lt;/td&gt;
          &lt;td&gt;同一の登録要求を識別するために、コンシューマーが登録要求に付与する識別子&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;手元でのモデリングを進めるうえで必要だったので、ひとまずはこんなところでいいだろう。&lt;/p&gt;
&lt;p&gt;確認のために「エヴァンス本」の第2章を読み返していたのだが、「高次の構成原理（コンテキストマップや大規模な構造など）」も、今後必要になったら整理したほうがいいかも。&lt;/p&gt;
&lt;h2 id=&#34;参考情報&#34;&gt;参考情報&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.shoeisha.co.jp/book/detail/9784798126708&#34;&gt;Eric Evans（2013）『エリック・エヴァンスのドメイン駆動設計』翔泳社（邦訳版）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;









&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;公表されないのは機密的な問題ではなく、インセンティブの問題。内部で（何気なく）しか使わない専門表現をわざわざ整理して公開するインセンティブなどどこにもない。専門用語として認識されてすらいないこともある。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
    </item>
    
  </channel>
</rss>
